From 40b890d6e4301794b54eed6a2d0ab86f24661a20 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Mon, 17 Jun 2024 21:41:57 +0200 Subject: [PATCH 01/11] [IMP] account_reconcile_oca: Fix multicurrency journal management The main idea of this commit is to show the right currency amount --- .../models/account_reconcile_abstract.py | 13 ++--- .../tests/test_bank_account_reconcile.py | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/account_reconcile_oca/models/account_reconcile_abstract.py b/account_reconcile_oca/models/account_reconcile_abstract.py index 02ea9d023d..ec53563fe1 100644 --- a/account_reconcile_oca/models/account_reconcile_abstract.py +++ b/account_reconcile_oca/models/account_reconcile_abstract.py @@ -53,18 +53,15 @@ def _get_reconcile_line( if amount < currency_max_amount < 0: amount = currency_max_amount net_amount = max_amount - amount = -amount + currency_amount = -amount original_amount = -original_amount net_amount = -net_amount + amount = amount_currency._convert( + currency_amount, self.company_id.currency_id, self.company_id, date + ) else: amount_currency = line.currency_id - amount = self.company_id.currency_id._convert( - amount, amount_currency, self.company_id, date - ) - currency_amount = amount - amount = amount_currency._convert( - amount, self.company_id.currency_id, self.company_id, date - ) + currency_amount = line.amount_currency vals = { "reference": "account.move.line;%s" % line.id, "id": line.id, diff --git a/account_reconcile_oca/tests/test_bank_account_reconcile.py b/account_reconcile_oca/tests/test_bank_account_reconcile.py index ff1fdfa933..5964047952 100644 --- a/account_reconcile_oca/tests/test_bank_account_reconcile.py +++ b/account_reconcile_oca/tests/test_bank_account_reconcile.py @@ -1020,3 +1020,54 @@ def test_journal_foreign_currency(self): self.assertTrue(bank_stmt_line.can_reconcile) bank_stmt_line.reconcile_bank_line() self.assertEqual(0, inv1.amount_residual) + + def test_journal_foreign_currency_change(self): + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.EUR").id, + "name": time.strftime("%Y-07-14"), + "rate": 1.15, + } + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "company_id": self.env.ref("base.main_company").id, + "journal_id": self.bank_journal_usd.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_usd.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + line = f.reconcile_data_info["data"][0] + self.assertEqual( + line["currency_amount"], + 100, + ) + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.EUR").id, + "name": time.strftime("%Y-07-15"), + "rate": 1.2, + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + line = f.reconcile_data_info["data"][0] + self.assertEqual( + line["currency_amount"], + 100, + ) From 26c2b5353b46e09f54c3a27d2f0c7fcfd2bac0ca Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 19 Jun 2024 17:40:06 +0200 Subject: [PATCH 02/11] [IMP] account_reconcile_oca: Fix amount_currency_format field --- .../static/src/js/widgets/reconcile_data_widget.esm.js | 1 + 1 file changed, 1 insertion(+) diff --git a/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js b/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js index bc5cd475a3..564c2e4869 100644 --- a/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js +++ b/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js @@ -32,6 +32,7 @@ export class AccountReconcileDataWidget extends Component { }); data[line].amount_currency_format = formatMonetary( data[line].currency_amount, + undefined, { currencyId: data[line].line_currency_id, } From 5c9e90c8e6b452542b1ad85d7aa98662ff080097 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 19 Jun 2024 19:33:58 +0200 Subject: [PATCH 03/11] [IMP] account_reconcile_oca: Fix multi currency computation --- .../models/account_account_reconcile.py | 9 +- .../models/account_bank_statement_line.py | 189 ++++++++++-------- .../models/account_reconcile_abstract.py | 36 ++-- .../tests/test_bank_account_reconcile.py | 54 +++++ 4 files changed, 179 insertions(+), 109 deletions(-) diff --git a/account_reconcile_oca/models/account_account_reconcile.py b/account_reconcile_oca/models/account_account_reconcile.py index 54b9a3fac0..fede7402da 100644 --- a/account_reconcile_oca/models/account_account_reconcile.py +++ b/account_reconcile_oca/models/account_account_reconcile.py @@ -162,12 +162,11 @@ def _recompute_data(self, data): counterparts = data["counterparts"] amount = 0.0 for line_id in counterparts: - max_amount = amount if line_id == counterparts[-1] else 0 - line = self._get_reconcile_line( - self.env["account.move.line"].browse(line_id), "other", True, max_amount + lines = self._get_reconcile_line( + self.env["account.move.line"].browse(line_id), "other", True, amount ) - new_data["data"].append(line) - amount += line["amount"] + new_data["data"] += lines + amount += sum(line["amount"] for line in lines) return new_data def clean_reconcile(self): diff --git a/account_reconcile_oca/models/account_bank_statement_line.py b/account_reconcile_oca/models/account_bank_statement_line.py index 2395b195c5..f153d1a61d 100644 --- a/account_reconcile_oca/models/account_bank_statement_line.py +++ b/account_reconcile_oca/models/account_bank_statement_line.py @@ -176,26 +176,19 @@ def _onchange_add_account_move_line_id(self): else: new_data.append(line) if is_new_line: - new_data.append( - self._get_reconcile_line( - self.add_account_move_line_id, "other", True, pending_amount - ) + reconcile_auxiliary_id, lines = self._get_reconcile_line( + self.add_account_move_line_id, "other", True, pending_amount ) + new_data += lines self.reconcile_data_info = self._recompute_suspense_line( new_data, self.reconcile_data_info["reconcile_auxiliary_id"], self.manual_reference, - exchange_recompute=True, ) self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) self.add_account_move_line_id = False - def _recompute_suspense_line( - self, data, reconcile_auxiliary_id, manual_reference, exchange_recompute=False - ): - reconcile_auxiliary_id = self._compute_exchange_rate( - data, reconcile_auxiliary_id, exchange_recompute=exchange_recompute - ) + def _recompute_suspense_line(self, data, reconcile_auxiliary_id, manual_reference): can_reconcile = True total_amount = 0 new_data = [] @@ -451,49 +444,15 @@ def _reconcile_data_by_model(self, data, reconcile_model, reconcile_auxiliary_id new_data.append(new_line) return new_data, reconcile_auxiliary_id - def _compute_exchange_rate( - self, data, reconcile_auxiliary_id, exchange_recompute=False - ): - if not exchange_recompute: - return reconcile_auxiliary_id - foreign_currency = ( - self.currency_id != self.company_id.currency_id - or self.foreign_currency_id - or any(line["currency_id"] != line["line_currency_id"] for line in data) - ) - if not foreign_currency or self.is_reconciled: - return reconcile_auxiliary_id - currency = self.journal_id.currency_id or self.company_id.currency_id - amount = sum(d.get("net_amount", 0) for d in data) - if not currency.is_zero(amount): - account = self.company_id.expense_currency_exchange_account_id - if amount > 0: - account = self.company_id.income_currency_exchange_account_id - data.append( - { - "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, - "id": False, - "account_id": [account.id, account.display_name], - "partner_id": False, - "date": fields.Date.to_string(self.date), - "name": self.payment_ref or self.name, - "amount": -amount, - "net_amount": -amount, - "credit": amount if amount > 0 else 0.0, - "debit": -amount if amount < 0 else 0.0, - "kind": "other", - "currency_id": self.currency_id.id, - "line_currency_id": self.currency_id.id, - "currency_amount": -amount, - } - ) - reconcile_auxiliary_id += 1 - return reconcile_auxiliary_id - def _default_reconcile_data(self, from_unreconcile=False): liquidity_lines, suspense_lines, other_lines = self._seek_for_lines() - data = [self._get_reconcile_line(line, "liquidity") for line in liquidity_lines] + data = [] reconcile_auxiliary_id = 1 + for line in liquidity_lines: + reconcile_auxiliary_id, lines = self._get_reconcile_line( + line, "liquidity", reconcile_auxiliary_id=reconcile_auxiliary_id + ) + data += lines if not from_unreconcile: res = ( self.env["account.reconcile.model"] @@ -508,30 +467,31 @@ def _default_reconcile_data(self, from_unreconcile=False): data, res["model"], reconcile_auxiliary_id ), self.manual_reference, - exchange_recompute=True, ) elif res and res.get("amls"): amount = self.amount_total_signed for line in res.get("amls", []): - line_data = self._get_reconcile_line( - line, "other", is_counterpart=True, max_amount=amount + reconcile_auxiliary_id, line_data = self._get_reconcile_line( + line, + "other", + is_counterpart=True, + max_amount=amount, + reconcile_auxiliary_id=reconcile_auxiliary_id, ) - amount -= line_data.get("amount") - data.append(line_data) + amount -= sum(line.get("amount") for line in line_data) + data += line_data return self._recompute_suspense_line( data, reconcile_auxiliary_id, self.manual_reference, - exchange_recompute=True, ) + for line in other_lines: + reconcile_auxiliary_id, lines = self._get_reconcile_line( + line, "other", from_unreconcile=from_unreconcile + ) + data += lines return self._recompute_suspense_line( - data - + [ - self._get_reconcile_line( - line, "other", from_unreconcile=from_unreconcile - ) - for line in other_lines - ], + data, reconcile_auxiliary_id, self.manual_reference, ) @@ -722,10 +682,12 @@ def create(self, mvals): if not res: continue liquidity_lines, suspense_lines, other_lines = record._seek_for_lines() - data = [ - record._get_reconcile_line(line, "liquidity") - for line in liquidity_lines - ] + data = [] + for line in liquidity_lines: + reconcile_auxiliary_id, lines = record._get_reconcile_line( + line, "liquidity" + ) + data += lines reconcile_auxiliary_id = 1 if res.get("status", "") == "write_off": data = record._recompute_suspense_line( @@ -733,21 +695,19 @@ def create(self, mvals): data, res["model"], reconcile_auxiliary_id ), self.manual_reference, - exchange_recompute=True, ) elif res.get("amls"): amount = self.amount for line in res.get("amls", []): - line_data = record._get_reconcile_line( + reconcile_auxiliary_id, line_datas = record._get_reconcile_line( line, "other", is_counterpart=True, max_amount=amount ) - amount -= line_data.get("amount") - data.append(line_data) + amount -= sum(line_data.get("amount") for line_data in line_datas) + data += line_datas data = record._recompute_suspense_line( data, reconcile_auxiliary_id, self.manual_reference, - exchange_recompute=True, ) if not data.get("can_reconcile"): continue @@ -768,14 +728,14 @@ def button_manual_reference_full_paid(self): if line["reference"] == manual_reference and line.get("id"): total_amount = -line["amount"] + line["original_amount_unsigned"] original_amount = line["original_amount_unsigned"] - new_data.append( - self._get_reconcile_line( - self.env["account.move.line"].browse(line["id"]), - "other", - is_counterpart=True, - max_amount=original_amount, - ) + reconcile_auxiliary_id, lines = self._get_reconcile_line( + self.env["account.move.line"].browse(line["id"]), + "other", + is_counterpart=True, + reconcile_auxiliary_id=reconcile_auxiliary_id, + max_amount=original_amount, ) + new_data += lines new_data.append( { "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, @@ -800,7 +760,6 @@ def button_manual_reference_full_paid(self): new_data, reconcile_auxiliary_id, self.manual_reference, - exchange_recompute=True, ) self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) @@ -815,18 +774,76 @@ def action_checked(self): self.move_id.to_check = False def _get_reconcile_line( - self, line, kind, is_counterpart=False, max_amount=False, from_unreconcile=False + self, + line, + kind, + is_counterpart=False, + max_amount=False, + from_unreconcile=False, + reconcile_auxiliary_id=False, ): - vals = super()._get_reconcile_line( + new_vals = super()._get_reconcile_line( line, kind, is_counterpart=is_counterpart, max_amount=max_amount, from_unreconcile=from_unreconcile, ) - if vals["partner_id"] is False and self.partner_name: - vals["partner_id"] = (False, self.partner_name) - return vals + rates = [] + for vals in new_vals: + if vals["partner_id"] is False: + vals["partner_id"] = (False, self.partner_name) + reconcile_auxiliary_id, rate = self._compute_exchange_rate( + vals, line, reconcile_auxiliary_id + ) + if rate: + rates.append(rate) + new_vals += rates + return reconcile_auxiliary_id, new_vals + + def _compute_exchange_rate( + self, + vals, + line, + reconcile_auxiliary_id, + ): + foreign_currency = ( + self.currency_id != self.company_id.currency_id + or self.foreign_currency_id + or vals["currency_id"] != vals["line_currency_id"] + ) + if not foreign_currency or self.is_reconciled: + return reconcile_auxiliary_id, False + currency = self.env["res.currency"].browse(vals["line_currency_id"]) + amount = currency._convert( + vals["currency_amount"], + self.company_id.currency_id, + self.company_id, + self.date, + ) - vals.get("amount", 0) + if currency.is_zero(amount): + return reconcile_auxiliary_id, False + account = self.company_id.expense_currency_exchange_account_id + if amount < 0: + account = self.company_id.income_currency_exchange_account_id + data = { + "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, + "id": False, + "account_id": account.name_get()[0], + "partner_id": False, + "date": fields.Date.to_string(self.date), + "name": self.payment_ref or self.name, + "amount": amount, + "net_amount": amount, + "credit": -amount if amount < 0 else 0.0, + "debit": amount if amount > 0 else 0.0, + "kind": "other", + "currency_id": self.company_id.currency_id.id, + "line_currency_id": self.company_id.currency_id.id, + "currency_amount": amount, + } + reconcile_auxiliary_id += 1 + return reconcile_auxiliary_id, data def add_statement(self): self.ensure_one() diff --git a/account_reconcile_oca/models/account_reconcile_abstract.py b/account_reconcile_oca/models/account_reconcile_abstract.py index ec53563fe1..c263fd36d1 100644 --- a/account_reconcile_oca/models/account_reconcile_abstract.py +++ b/account_reconcile_oca/models/account_reconcile_abstract.py @@ -38,29 +38,29 @@ def _get_reconcile_line( ): date = self.date if "date" in self._fields else line.date original_amount = amount = net_amount = line.debit - line.credit - amount_currency = self.company_id.currency_id if is_counterpart: - amount = line.amount_residual_currency or line.amount_residual - amount_currency = line.currency_id or self.company_id.currency_id - original_amount = net_amount = line.amount_residual + currency_amount = -line.amount_residual_currency or line.amount_residual + amount = -line.amount_residual + currency = line.currency_id or self.company_id.currency_id + original_amount = net_amount = -line.amount_residual if max_amount: currency_max_amount = self.company_id.currency_id._convert( - max_amount, amount_currency, self.company_id, line.date + max_amount, currency, self.company_id, date ) - if amount > currency_max_amount > 0: + if ( + -currency_amount > currency_max_amount > 0 + or -currency_amount < currency_max_amount < 0 + ): amount = currency_max_amount - net_amount = max_amount - if amount < currency_max_amount < 0: - amount = currency_max_amount - net_amount = max_amount - currency_amount = -amount - original_amount = -original_amount - net_amount = -net_amount - amount = amount_currency._convert( - currency_amount, self.company_id.currency_id, self.company_id, date - ) + net_amount = -max_amount + currency_amount = -amount + amount = currency._convert( + currency_amount, + self.company_id.currency_id, + self.company_id, + date, + ) else: - amount_currency = line.currency_id currency_amount = line.amount_currency vals = { "reference": "account.move.line;%s" % line.id, @@ -98,4 +98,4 @@ def _get_reconcile_line( vals["original_amount_unsigned"] = original_amount if is_counterpart: vals["counterpart_line_ids"] = line.ids - return vals + return [vals] diff --git a/account_reconcile_oca/tests/test_bank_account_reconcile.py b/account_reconcile_oca/tests/test_bank_account_reconcile.py index 5964047952..ed68d9d2ab 100644 --- a/account_reconcile_oca/tests/test_bank_account_reconcile.py +++ b/account_reconcile_oca/tests/test_bank_account_reconcile.py @@ -1071,3 +1071,57 @@ def test_journal_foreign_currency_change(self): line["currency_amount"], 100, ) + + def test_invoice_foreign_currency_change(self): + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.EUR").id, + "name": time.strftime("%Y-07-14"), + "rate": 1.15, + } + ) + self.env["res.currency.rate"].create( + { + "currency_id": self.env.ref("base.EUR").id, + "name": time.strftime("%Y-07-15"), + "rate": 1.2, + } + ) + inv1 = self._create_invoice( + currency_id=self.currency_usd_id, + invoice_amount=100, + date_invoice="2021-07-14", + auto_validate=True, + ) + bank_stmt = self.acc_bank_stmt_model.create( + { + "company_id": self.env.ref("base.main_company").id, + "journal_id": self.bank_journal_usd.id, + "date": time.strftime("%Y-07-15"), + "name": "test", + } + ) + bank_stmt_line = self.acc_bank_stmt_line_model.create( + { + "name": "testLine", + "journal_id": self.bank_journal_usd.id, + "statement_id": bank_stmt.id, + "amount": 100, + "date": time.strftime("%Y-07-15"), + } + ) + with Form( + bank_stmt_line, + view="account_reconcile_oca.bank_statement_line_form_reconcile_view", + ) as f: + line = f.reconcile_data_info["data"][0] + self.assertEqual( + line["currency_amount"], + 100, + ) + f.add_account_move_line_id = inv1.line_ids.filtered( + lambda line: line.account_id.account_type == "asset_receivable" + ) + self.assertFalse(f.add_account_move_line_id) + self.assertTrue(f.can_reconcile) + self.assertEqual(3, len(f.reconcile_data_info["data"])) From 1dd39fc69540bbf3ab56986d73c6a2d26eac323f Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Thu, 4 Jul 2024 17:22:53 +0200 Subject: [PATCH 04/11] [IMP] account_reconcile_oca: Compute the exchange rate properly --- .../models/account_bank_statement_line.py | 131 ++++++++++++++++-- .../tests/test_bank_account_reconcile.py | 5 + .../views/account_bank_statement_line.xml | 19 ++- 3 files changed, 141 insertions(+), 14 deletions(-) diff --git a/account_reconcile_oca/models/account_bank_statement_line.py b/account_reconcile_oca/models/account_bank_statement_line.py index f153d1a61d..db0a373105 100644 --- a/account_reconcile_oca/models/account_bank_statement_line.py +++ b/account_reconcile_oca/models/account_bank_statement_line.py @@ -60,6 +60,19 @@ class AccountBankStatementLine(models.Model): "Percentage Analytic" ), ) + manual_in_currency = fields.Boolean(readonly=True, store=False, prefetch=False) + manual_in_currency_id = fields.Many2one( + "res.currency", readonly=True, store=False, prefetch=False + ) + manual_amount_in_currency = fields.Monetary( + store=False, + default=False, + prefetch=False, + currency_field="manual_in_currency_id", + ) + manual_exchange_counterpart = fields.Boolean( + store=False, + ) manual_model_id = fields.Many2one( "account.reconcile.model", check_company=True, @@ -268,15 +281,29 @@ def _onchange_manual_reconcile_reference(self): self.ensure_one() data = self.reconcile_data_info.get("data", []) new_data = [] + related_move_line_id = False for line in data: + if line.get("reference") == self.manual_reference: + related_move_line_id = line.get("id") + break + for line in data: + if ( + self.manual_delete + and related_move_line_id + and line.get("original_exchange_line_id") == related_move_line_id + ): + # We should remove the related exchange rate line + continue if line["reference"] == self.manual_reference: if self.manual_delete: self.update( { - "manual_delete": False, "manual_reference": False, "manual_account_id": False, "manual_amount": False, + "manual_exchange_counterpart": False, + "manual_in_currency_id": False, + "manual_in_currency": False, "manual_name": False, "manual_partner_id": False, "manual_line_id": False, @@ -286,6 +313,7 @@ def _onchange_manual_reconcile_reference(self): "manual_original_amount": False, "manual_currency_id": False, "analytic_distribution": False, + "manual_amount_in_currency": False, } ) continue @@ -293,11 +321,22 @@ def _onchange_manual_reconcile_reference(self): self.manual_account_id = line["account_id"][0] self.manual_amount = line["amount"] self.manual_currency_id = line["currency_id"] + self.manual_in_currency_id = line.get("line_currency_id") + self.manual_in_currency = line.get("line_currency_id") and line[ + "currency_id" + ] != line.get("line_currency_id") + self.manual_amount_in_currency = line.get("currency_amount") self.manual_name = line["name"] + self.manual_exchange_counterpart = line.get( + "is_exchange_counterpart", False + ) self.manual_partner_id = ( line.get("partner_id") and line["partner_id"][0] ) - self.manual_line_id = line["id"] + manual_line = ( + self.env["account.move.line"].browse(line["id"]).exists() + ) + self.manual_line_id = manual_line self.analytic_distribution = line.get("analytic_distribution", {}) if self.manual_line_id: self.manual_move_id = self.manual_line_id.move_id @@ -305,6 +344,7 @@ def _onchange_manual_reconcile_reference(self): self.manual_kind = line["kind"] self.manual_original_amount = line.get("original_amount", 0.0) new_data.append(line) + self.update({"manual_delete": False}) self.reconcile_data_info = self._recompute_suspense_line( new_data, self.reconcile_data_info["reconcile_auxiliary_id"], @@ -312,6 +352,17 @@ def _onchange_manual_reconcile_reference(self): ) self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False) + @api.onchange("manual_amount_in_currency") + def _onchange_manual_amount_in_currency(self): + if self.manual_line_id.exists() and self.manual_line_id: + self.manual_amount = self.manual_in_currency_id._convert( + self.manual_amount_in_currency, + self.company_id.currency_id, + self.company_id, + self.manual_line_id.date, + ) + self._onchange_manual_reconcile_vals() + @api.onchange( "manual_account_id", "manual_partner_id", @@ -357,6 +408,23 @@ def _onchange_manual_reconcile_vals(self): ) if line["kind"] == "liquidity": self._update_move_partner() + if self.manual_line_id and self.manual_line_id.id == line.get( + "original_exchange_line_id" + ): + # Now, we should edit the amount of the exchange rate + amount = self._get_exchange_rate_amount( + self.manual_amount, + self.manual_amount_in_currency, + self.manual_line_id.currency_id, + self.manual_line_id, + ) + line.update( + { + "amount": amount, + "credit": -amount if amount < 0 else 0.0, + "debit": amount if amount > 0 else 0.0, + } + ) new_data.append(line) self.reconcile_data_info = self._recompute_suspense_line( new_data, @@ -485,6 +553,11 @@ def _default_reconcile_data(self, from_unreconcile=False): reconcile_auxiliary_id, self.manual_reference, ) + else: + other_lines = ( + other_lines.matched_credit_ids.credit_move_id + | other_lines.matched_debit_ids.debit_move_id + ) for line in other_lines: reconcile_auxiliary_id, lines = self._get_reconcile_line( line, "other", from_unreconcile=from_unreconcile @@ -504,7 +577,7 @@ def reconcile_bank_line(self): self.ensure_one() self.reconcile_mode = self.journal_id.reconcile_mode result = getattr(self, "_reconcile_bank_line_%s" % self.reconcile_mode)( - self.reconcile_data_info["data"] + self._prepare_reconcile_line_data(self.reconcile_data_info["data"]) ) self.reconcile_data_info = False return result @@ -713,9 +786,37 @@ def create(self, mvals): continue getattr( record, "_reconcile_bank_line_%s" % record.journal_id.reconcile_mode - )(data["data"]) + )(self._prepare_reconcile_line_data(data["data"])) return result + def _prepare_reconcile_line_data(self, lines): + new_lines = [] + reverse_lines = {} + for line in lines: + if not line.get("id") and not line.get("original_exchange_line_id"): + new_lines.append(line) + elif not line.get("original_exchange_line_id"): + reverse_lines[line["id"]] = line + for line in lines: + if line.get("original_exchange_line_id"): + reverse_lines[line["original_exchange_line_id"]].update( + { + "amount": reverse_lines[line["original_exchange_line_id"]][ + "amount" + ] + + line["amount"], + "credit": reverse_lines[line["original_exchange_line_id"]][ + "credit" + ] + + line["credit"], + "debit": reverse_lines[line["original_exchange_line_id"]][ + "debit" + ] + + line["debit"], + } + ) + return new_lines + list(reverse_lines.values()) + def button_manual_reference_full_paid(self): self.ensure_one() if not self.reconcile_data_info["manual_reference"]: @@ -801,6 +902,17 @@ def _get_reconcile_line( new_vals += rates return reconcile_auxiliary_id, new_vals + def _get_exchange_rate_amount(self, amount, currency_amount, currency, line): + return ( + currency._convert( + currency_amount, + self.company_id.currency_id, + self.company_id, + self.date, + ) + - amount + ) + def _compute_exchange_rate( self, vals, @@ -815,18 +927,17 @@ def _compute_exchange_rate( if not foreign_currency or self.is_reconciled: return reconcile_auxiliary_id, False currency = self.env["res.currency"].browse(vals["line_currency_id"]) - amount = currency._convert( - vals["currency_amount"], - self.company_id.currency_id, - self.company_id, - self.date, - ) - vals.get("amount", 0) + amount = self._get_exchange_rate_amount( + vals.get("amount", 0), vals.get("currency_amount", 0), currency, line + ) if currency.is_zero(amount): return reconcile_auxiliary_id, False account = self.company_id.expense_currency_exchange_account_id if amount < 0: account = self.company_id.income_currency_exchange_account_id data = { + "is_exchange_counterpart": True, + "original_exchange_line_id": line.id, "reference": "reconcile_auxiliary;%s" % reconcile_auxiliary_id, "id": False, "account_id": account.name_get()[0], diff --git a/account_reconcile_oca/tests/test_bank_account_reconcile.py b/account_reconcile_oca/tests/test_bank_account_reconcile.py index ed68d9d2ab..bead923759 100644 --- a/account_reconcile_oca/tests/test_bank_account_reconcile.py +++ b/account_reconcile_oca/tests/test_bank_account_reconcile.py @@ -1020,6 +1020,11 @@ def test_journal_foreign_currency(self): self.assertTrue(bank_stmt_line.can_reconcile) bank_stmt_line.reconcile_bank_line() self.assertEqual(0, inv1.amount_residual) + self.assertTrue( + inv1.line_ids.filtered( + lambda line: line.account_id.account_type == "asset_receivable" + ).full_reconcile_id + ) def test_journal_foreign_currency_change(self): self.env["res.currency.rate"].create( diff --git a/account_reconcile_oca/views/account_bank_statement_line.xml b/account_reconcile_oca/views/account_bank_statement_line.xml index 4f4e5ab25a..b98d056c87 100644 --- a/account_reconcile_oca/views/account_bank_statement_line.xml +++ b/account_reconcile_oca/views/account_bank_statement_line.xml @@ -258,16 +258,22 @@ + + + + From 78bcf45722b9e6141f8b92449b8407cad5589f56 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Wed, 10 Jul 2024 10:54:08 +0200 Subject: [PATCH 05/11] [IMP] account_reconcile_oca: Avoid change of page when deleting a line --- .../static/src/js/widgets/reconcile_data_widget.esm.js | 1 + 1 file changed, 1 insertion(+) diff --git a/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js b/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js index 564c2e4869..f4f1da2249 100644 --- a/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js +++ b/account_reconcile_oca/static/src/js/widgets/reconcile_data_widget.esm.js @@ -52,6 +52,7 @@ export class AccountReconcileDataWidget extends Component { return data; } onTrashLine(ev, line) { + ev.stopPropagation(); this.props.record.update({ manual_reference: line.reference, manual_delete: true, From 65f62d2c06280c3148be78e868bec0d1bd70f840 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Mon, 9 Sep 2024 14:42:29 +0200 Subject: [PATCH 06/11] [FIX] account_reconcile_oca: Fix wrong display on reconciled moves If your reconcile an invoice and in the old option, the reconcile widget shows something weird with three lines but we should have only two. The data was right with 2 lines only. --- .../models/account_bank_statement_line.py | 9 ++---- .../tests/test_bank_account_reconcile.py | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/account_reconcile_oca/models/account_bank_statement_line.py b/account_reconcile_oca/models/account_bank_statement_line.py index db0a373105..abba3e118d 100644 --- a/account_reconcile_oca/models/account_bank_statement_line.py +++ b/account_reconcile_oca/models/account_bank_statement_line.py @@ -438,7 +438,7 @@ def _update_move_partner(self): return self.partner_id = self.manual_partner_id - @api.depends("reconcile_data") + @api.depends("reconcile_data", "is_reconciled") def _compute_reconcile_data_info(self): for record in self: if record.reconcile_data: @@ -553,11 +553,6 @@ def _default_reconcile_data(self, from_unreconcile=False): reconcile_auxiliary_id, self.manual_reference, ) - else: - other_lines = ( - other_lines.matched_credit_ids.credit_move_id - | other_lines.matched_debit_ids.debit_move_id - ) for line in other_lines: reconcile_auxiliary_id, lines = self._get_reconcile_line( line, "other", from_unreconcile=from_unreconcile @@ -579,7 +574,7 @@ def reconcile_bank_line(self): result = getattr(self, "_reconcile_bank_line_%s" % self.reconcile_mode)( self._prepare_reconcile_line_data(self.reconcile_data_info["data"]) ) - self.reconcile_data_info = False + self.reconcile_data = False return result def _reconcile_bank_line_edit(self, data): diff --git a/account_reconcile_oca/tests/test_bank_account_reconcile.py b/account_reconcile_oca/tests/test_bank_account_reconcile.py index bead923759..9fcfb51b3f 100644 --- a/account_reconcile_oca/tests/test_bank_account_reconcile.py +++ b/account_reconcile_oca/tests/test_bank_account_reconcile.py @@ -200,7 +200,11 @@ def test_reconcile_invoice_unreconcile(self): lambda r: r.account_id == self.bank_journal_euro.suspense_account_id ) ) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertTrue(bank_stmt_line.is_reconciled) self.assertFalse( bank_stmt_line.move_id.line_ids.filtered( @@ -267,7 +271,11 @@ def test_reconcile_invoice_partial(self): self.assertTrue(f.can_reconcile) self.assertEqual(inv1.amount_residual_signed, 100) self.assertEqual(inv2.amount_residual_signed, 100) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertEqual(inv1.amount_residual_signed, 30) self.assertEqual(inv2.amount_residual_signed, 70) @@ -327,7 +335,11 @@ def test_reconcile_invoice_partial_supplier(self): self.assertTrue(f.can_reconcile) self.assertEqual(inv1.amount_residual_signed, -100) self.assertEqual(inv2.amount_residual_signed, -100) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertEqual(inv1.amount_residual_signed, -30) self.assertEqual(inv2.amount_residual_signed, -70) @@ -360,7 +372,11 @@ def test_reconcile_model(self): self.assertFalse(f.can_reconcile) f.manual_model_id = self.rule self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertEqual(2, len(bank_stmt_line.move_id.line_ids)) self.assertTrue( bank_stmt_line.move_id.line_ids.filtered( @@ -400,7 +416,11 @@ def test_reconcile_model_tax_included(self): self.assertFalse(f.can_reconcile) f.manual_model_id = self.rule self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertEqual(3, len(bank_stmt_line.move_id.line_ids)) self.assertTrue( bank_stmt_line.move_id.line_ids.filtered( @@ -453,7 +473,11 @@ def test_reconcile_invoice_model(self): self.assertFalse(f.can_reconcile) f.manual_model_id = self.rule self.assertTrue(f.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertNotEqual(self.current_assets_account, receivable1.account_id) self.assertTrue( bank_stmt_line.move_id.line_ids.filtered( @@ -541,7 +565,11 @@ def test_reconcile_invoice_keep(self): f.add_account_move_line_id = receivable1 self.assertFalse(f.add_account_move_line_id) self.assertTrue(bank_stmt_line.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertIn( self.bank_journal_euro.suspense_account_id, bank_stmt_line.mapped("move_id.line_ids.account_id"), @@ -1018,7 +1046,11 @@ def test_journal_foreign_currency(self): self.assertFalse(f.add_account_move_line_id) self.assertTrue(f.can_reconcile) self.assertTrue(bank_stmt_line.can_reconcile) + number_of_lines = len(bank_stmt_line.reconcile_data_info["data"]) bank_stmt_line.reconcile_bank_line() + self.assertEqual( + number_of_lines, len(bank_stmt_line.reconcile_data_info["data"]) + ) self.assertEqual(0, inv1.amount_residual) self.assertTrue( inv1.line_ids.filtered( From cbdbff2a3f41cacb9b5d1ae2ce57eda534d4681a Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 4 Oct 2024 08:09:21 +0000 Subject: [PATCH 07/11] [UPD] Update account_reconcile_oca.pot --- .../i18n/account_reconcile_oca.pot | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/account_reconcile_oca/i18n/account_reconcile_oca.pot b/account_reconcile_oca/i18n/account_reconcile_oca.pot index dae4d58b29..d86b17487a 100644 --- a/account_reconcile_oca/i18n/account_reconcile_oca.pot +++ b/account_reconcile_oca/i18n/account_reconcile_oca.pot @@ -72,6 +72,11 @@ msgstr "" msgid "Amount" msgstr "" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -338,6 +343,11 @@ msgstr "" msgid "Manual Amount" msgstr "" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -350,6 +360,17 @@ msgstr "" msgid "Manual Delete" msgstr "" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" From e5336a24011ffca082145247a45982224fc301e7 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 4 Oct 2024 08:12:33 +0000 Subject: [PATCH 08/11] [BOT] post-merge updates --- README.md | 2 +- account_reconcile_oca/README.rst | 2 +- account_reconcile_oca/__manifest__.py | 2 +- account_reconcile_oca/static/description/index.html | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7647fdc49f..1913822b26 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ addon | version | maintainers | summary --- | --- | --- | --- [account_mass_reconcile](account_mass_reconcile/) | 17.0.1.0.1 | | Account Mass Reconcile [account_reconcile_model_oca](account_reconcile_model_oca/) | 17.0.1.0.1 | | This includes the logic moved from Odoo Community to Odoo Enterprise -[account_reconcile_oca](account_reconcile_oca/) | 17.0.1.2.6 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Reconcile addons for Odoo CE accounting +[account_reconcile_oca](account_reconcile_oca/) | 17.0.1.3.0 | [![etobella](https://github.com/etobella.png?size=30px)](https://github.com/etobella) | Reconcile addons for Odoo CE accounting [account_statement_base](account_statement_base/) | 17.0.1.3.0 | [![alexis-via](https://github.com/alexis-via.png?size=30px)](https://github.com/alexis-via) | Base module for Bank Statements [//]: # (end addons) diff --git a/account_reconcile_oca/README.rst b/account_reconcile_oca/README.rst index 13e6548c38..23eb2b6b55 100644 --- a/account_reconcile_oca/README.rst +++ b/account_reconcile_oca/README.rst @@ -7,7 +7,7 @@ Account Reconcile Oca !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:223a415f11a6e89566fdec656377f5e439236dc333a3207f5a3290d8699bf39c + !! source digest: sha256:88b6b066ad75c60faa27b6558ead2c5bf920b1e5f1baf6e5b1414a4361cd5d63 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/account_reconcile_oca/__manifest__.py b/account_reconcile_oca/__manifest__.py index 324586293b..6069e1be9c 100644 --- a/account_reconcile_oca/__manifest__.py +++ b/account_reconcile_oca/__manifest__.py @@ -5,7 +5,7 @@ "name": "Account Reconcile Oca", "summary": """ Reconcile addons for Odoo CE accounting""", - "version": "17.0.1.2.6", + "version": "17.0.1.3.0", "license": "AGPL-3", "author": "CreuBlanca,Dixmit,Odoo Community Association (OCA)", "maintainers": ["etobella"], diff --git a/account_reconcile_oca/static/description/index.html b/account_reconcile_oca/static/description/index.html index 61c27d34ef..2fab86d045 100644 --- a/account_reconcile_oca/static/description/index.html +++ b/account_reconcile_oca/static/description/index.html @@ -367,7 +367,7 @@

Account Reconcile Oca

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:223a415f11a6e89566fdec656377f5e439236dc333a3207f5a3290d8699bf39c +!! source digest: sha256:88b6b066ad75c60faa27b6558ead2c5bf920b1e5f1baf6e5b1414a4361cd5d63 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/account-reconcile Translate me on Weblate Try me on Runboat

This addon allows to reconcile bank statements and account marked as From 6cb8fce4048bfd01c3fc2d374e96ff6ebfc0f40f Mon Sep 17 00:00:00 2001 From: mymage Date: Fri, 4 Oct 2024 06:30:06 +0000 Subject: [PATCH 09/11] Translated using Weblate (Italian) Currently translated at 100.0% (20 of 20 strings) Translation: account-reconcile-17.0/account-reconcile-17.0-account_statement_base Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-17-0/account-reconcile-17-0-account_statement_base/it/ --- account_statement_base/i18n/it.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/account_statement_base/i18n/it.po b/account_statement_base/i18n/it.po index 113808f557..a6eae53375 100644 --- a/account_statement_base/i18n/it.po +++ b/account_statement_base/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-09-28 18:06+0000\n" +"PO-Revision-Date: 2024-10-04 08:12+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -79,7 +79,7 @@ msgstr "Apri registrazione contabile" #. module: account_statement_base #: model_terms:ir.ui.view,arch_db:account_statement_base.view_bank_statement_tree msgid "Open Statement Lines" -msgstr "" +msgstr "Apri righe estratto conto" #. module: account_statement_base #: model_terms:ir.ui.view,arch_db:account_statement_base.account_bank_statement_line_search From 77466784b4e3805fa1913f82f471a5be351a92dd Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 4 Oct 2024 08:12:39 +0000 Subject: [PATCH 10/11] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. Translation: account-reconcile-17.0/account-reconcile-17.0-account_reconcile_oca Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-17-0/account-reconcile-17-0-account_reconcile_oca/ --- account_reconcile_oca/i18n/ca.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/es.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/fr.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/hr.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/it.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/nl.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/pt.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/pt_BR.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/sv.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/tr.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/zh.po | 21 +++++++++++++++++++++ account_reconcile_oca/i18n/zh_CN.po | 21 +++++++++++++++++++++ 12 files changed, 252 insertions(+) diff --git a/account_reconcile_oca/i18n/ca.po b/account_reconcile_oca/i18n/ca.po index 21e147d12f..596b673afc 100644 --- a/account_reconcile_oca/i18n/ca.po +++ b/account_reconcile_oca/i18n/ca.po @@ -78,6 +78,11 @@ msgstr "" msgid "Amount" msgstr "Import" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Compte manual" msgid "Manual Amount" msgstr "Import manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Divisa manual" msgid "Manual Delete" msgstr "Esborrat manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/es.po b/account_reconcile_oca/i18n/es.po index 73faaaaf4d..cb045b283f 100644 --- a/account_reconcile_oca/i18n/es.po +++ b/account_reconcile_oca/i18n/es.po @@ -78,6 +78,11 @@ msgstr "Agregación para usar en la vista de conciliación" msgid "Amount" msgstr "Importe" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Cuenta manual" msgid "Manual Amount" msgstr "Importe manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Divisa manual" msgid "Manual Delete" msgstr "Borrado manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/fr.po b/account_reconcile_oca/i18n/fr.po index e8e89ea13a..3871c7427a 100644 --- a/account_reconcile_oca/i18n/fr.po +++ b/account_reconcile_oca/i18n/fr.po @@ -78,6 +78,11 @@ msgstr "" msgid "Amount" msgstr "Montant" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Compte manuel" msgid "Manual Amount" msgstr "Montant manuel" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Devise manuelle" msgid "Manual Delete" msgstr "Suppression manuelle" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/hr.po b/account_reconcile_oca/i18n/hr.po index 9cba006af6..16a16b15b5 100644 --- a/account_reconcile_oca/i18n/hr.po +++ b/account_reconcile_oca/i18n/hr.po @@ -79,6 +79,11 @@ msgstr "" msgid "Amount" msgstr "Iznos" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -345,6 +350,11 @@ msgstr "Ručni konto" msgid "Manual Amount" msgstr "Ručni iznos" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -357,6 +367,17 @@ msgstr "" msgid "Manual Delete" msgstr "Ručno brisanje" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/it.po b/account_reconcile_oca/i18n/it.po index f756bd0f69..02234d1622 100644 --- a/account_reconcile_oca/i18n/it.po +++ b/account_reconcile_oca/i18n/it.po @@ -78,6 +78,11 @@ msgstr "Aggregazione da utilizzare nella vista riconciliazione" msgid "Amount" msgstr "Importo" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Conto Manuale" msgid "Manual Amount" msgstr "Importo manuale" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Valuta manuale" msgid "Manual Delete" msgstr "Cancellazione manuale" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/nl.po b/account_reconcile_oca/i18n/nl.po index 7fcd9d0023..e62c829d74 100644 --- a/account_reconcile_oca/i18n/nl.po +++ b/account_reconcile_oca/i18n/nl.po @@ -78,6 +78,11 @@ msgstr "" msgid "Amount" msgstr "Bedrag" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Handmatige Rekening" msgid "Manual Amount" msgstr "Handmatige Bedrag" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Handmatige Valuta" msgid "Manual Delete" msgstr "Handmatig Verwijderen" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/pt.po b/account_reconcile_oca/i18n/pt.po index 79362031aa..6a15f4baca 100644 --- a/account_reconcile_oca/i18n/pt.po +++ b/account_reconcile_oca/i18n/pt.po @@ -78,6 +78,11 @@ msgstr "Agregação a ser usada na visualização de reconciliação" msgid "Amount" msgstr "Valor" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Conta Manual" msgid "Manual Amount" msgstr "Valor Manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Moeda Manual" msgid "Manual Delete" msgstr "Exclusão Manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/pt_BR.po b/account_reconcile_oca/i18n/pt_BR.po index 6d61a62b69..8178f8f9a2 100644 --- a/account_reconcile_oca/i18n/pt_BR.po +++ b/account_reconcile_oca/i18n/pt_BR.po @@ -78,6 +78,11 @@ msgstr "" msgid "Amount" msgstr "Valor" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Conta Manual" msgid "Manual Amount" msgstr "Valor Manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Moeda Manual" msgid "Manual Delete" msgstr "Exclusão Manual" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/sv.po b/account_reconcile_oca/i18n/sv.po index 6dcbd99101..71fe061239 100644 --- a/account_reconcile_oca/i18n/sv.po +++ b/account_reconcile_oca/i18n/sv.po @@ -78,6 +78,11 @@ msgstr "Aggregering som ska användas i avstämningsvyn" msgid "Amount" msgstr "Belopp" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "Manuellt konto" msgid "Manual Amount" msgstr "Manuellt belopp" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "Manuell valuta" msgid "Manual Delete" msgstr "Manuell radering" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/tr.po b/account_reconcile_oca/i18n/tr.po index c422c559df..98f41db8ff 100644 --- a/account_reconcile_oca/i18n/tr.po +++ b/account_reconcile_oca/i18n/tr.po @@ -75,6 +75,11 @@ msgstr "Uzlaştırma görünümünde kullanılacak toplamı" msgid "Amount" msgstr "Tutar" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -341,6 +346,11 @@ msgstr "Manuel Hesap" msgid "Manual Amount" msgstr "Manuel Tutar" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -353,6 +363,17 @@ msgstr "Manuel Para Birimi" msgid "Manual Delete" msgstr "Manuel Silme" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/zh.po b/account_reconcile_oca/i18n/zh.po index 5b0aece3c3..a1b002afd8 100644 --- a/account_reconcile_oca/i18n/zh.po +++ b/account_reconcile_oca/i18n/zh.po @@ -73,6 +73,11 @@ msgstr "" msgid "Amount" msgstr "" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -339,6 +344,11 @@ msgstr "" msgid "Manual Amount" msgstr "" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -351,6 +361,17 @@ msgstr "" msgid "Manual Delete" msgstr "" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" diff --git a/account_reconcile_oca/i18n/zh_CN.po b/account_reconcile_oca/i18n/zh_CN.po index 445fc58624..e44b4d94d9 100644 --- a/account_reconcile_oca/i18n/zh_CN.po +++ b/account_reconcile_oca/i18n/zh_CN.po @@ -78,6 +78,11 @@ msgstr "用于对账界面上的汇总" msgid "Amount" msgstr "科目" +#. module: account_reconcile_oca +#: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view +msgid "Amount in Currency" +msgstr "" + #. module: account_reconcile_oca #. odoo-javascript #: code:addons/account_reconcile_oca/static/src/xml/reconcile.xml:0 @@ -344,6 +349,11 @@ msgstr "手工科目" msgid "Manual Amount" msgstr "手工金额" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency +msgid "Manual Amount In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id msgid "Manual Currency" @@ -356,6 +366,17 @@ msgstr "手工币种" msgid "Manual Delete" msgstr "手工删除" +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart +msgid "Manual Exchange Counterpart" +msgstr "" + +#. module: account_reconcile_oca +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency +#: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id +msgid "Manual In Currency" +msgstr "" + #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind msgid "Manual Kind" From e6897a8e0da6b025a0aba5dbf53cae0f1a81ba1a Mon Sep 17 00:00:00 2001 From: mymage Date: Sat, 5 Oct 2024 14:47:15 +0000 Subject: [PATCH 11/11] Translated using Weblate (Italian) Currently translated at 100.0% (120 of 120 strings) Translation: account-reconcile-17.0/account-reconcile-17.0-account_reconcile_oca Translate-URL: https://translation.odoo-community.org/projects/account-reconcile-17-0/account-reconcile-17-0-account_reconcile_oca/it/ --- account_reconcile_oca/i18n/it.po | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/account_reconcile_oca/i18n/it.po b/account_reconcile_oca/i18n/it.po index 02234d1622..c5b372d154 100644 --- a/account_reconcile_oca/i18n/it.po +++ b/account_reconcile_oca/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 17.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-08-26 09:06+0000\n" +"PO-Revision-Date: 2024-10-05 17:06+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -81,7 +81,7 @@ msgstr "Importo" #. module: account_reconcile_oca #: model_terms:ir.ui.view,arch_db:account_reconcile_oca.bank_statement_line_form_reconcile_view msgid "Amount in Currency" -msgstr "" +msgstr "Importo in valuta" #. module: account_reconcile_oca #. odoo-javascript @@ -352,7 +352,7 @@ msgstr "Importo manuale" #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_amount_in_currency msgid "Manual Amount In Currency" -msgstr "" +msgstr "Acconto manuale in valuta" #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_currency_id @@ -369,13 +369,13 @@ msgstr "Cancellazione manuale" #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_exchange_counterpart msgid "Manual Exchange Counterpart" -msgstr "" +msgstr "Controparte scambio manuale" #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_in_currency_id msgid "Manual In Currency" -msgstr "" +msgstr "Manuale in valuta" #. module: account_reconcile_oca #: model:ir.model.fields,field_description:account_reconcile_oca.field_account_bank_statement_line__manual_kind