From 50a8b92a87460ff5a09230657cfb2da3cf779b25 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Thu, 7 Mar 2024 19:33:44 +0100 Subject: [PATCH] [FIX] account_reconcile_oca: Fix foreign currency --- .../models/account_bank_statement_line.py | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/account_reconcile_oca/models/account_bank_statement_line.py b/account_reconcile_oca/models/account_bank_statement_line.py index 2b050d4413..e820a40fd3 100644 --- a/account_reconcile_oca/models/account_bank_statement_line.py +++ b/account_reconcile_oca/models/account_bank_statement_line.py @@ -144,13 +144,16 @@ def _onchange_add_account_move_line_id(self): 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): + 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 + data, reconcile_auxiliary_id, exchange_recompute=exchange_recompute ) can_reconcile = True total_amount = 0 @@ -393,7 +396,11 @@ 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): + 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 @@ -416,6 +423,7 @@ def _compute_exchange_rate(self, data, reconcile_auxiliary_id): "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", @@ -444,7 +452,8 @@ def _default_reconcile_data(self, from_unreconcile=False): *self._reconcile_data_by_model( data, res["model"], reconcile_auxiliary_id ), - self.manual_reference + self.manual_reference, + exchange_recompute=True ) elif res and res.get("amls"): amount = self.amount_total_signed @@ -455,7 +464,10 @@ def _default_reconcile_data(self, from_unreconcile=False): amount -= line_data.get("amount") data.append(line_data) return self._recompute_suspense_line( - data, reconcile_auxiliary_id, self.manual_reference + data, + reconcile_auxiliary_id, + self.manual_reference, + exchange_recompute=True, ) return self._recompute_suspense_line( data @@ -643,7 +655,8 @@ def create(self, mvals): *record._reconcile_data_by_model( data, res["model"], reconcile_auxiliary_id ), - self.manual_reference + self.manual_reference, + exchange_recompute=True ) elif res.get("amls"): amount = self.amount @@ -654,7 +667,10 @@ def create(self, mvals): amount -= line_data.get("amount") data.append(line_data) data = record._recompute_suspense_line( - data, reconcile_auxiliary_id, self.manual_reference + data, + reconcile_auxiliary_id, + self.manual_reference, + exchange_recompute=True, ) if not data.get("can_reconcile"): continue @@ -704,7 +720,10 @@ def button_manual_reference_full_paid(self): else: new_data.append(line) self.reconcile_data_info = self._recompute_suspense_line( - new_data, reconcile_auxiliary_id, self.manual_reference + new_data, + reconcile_auxiliary_id, + self.manual_reference, + exchange_recompute=True, ) self.can_reconcile = self.reconcile_data_info.get("can_reconcile", False)