From 01405ca1abbfb9f87e428bd198b34ca8f62e561b Mon Sep 17 00:00:00 2001 From: "Julien (juc) Castiaux" Date: Wed, 20 Feb 2019 15:41:00 +0000 Subject: [PATCH] [FIX] account: currency of reconci. suggestion When the currency used for a payment/internal transfert is not the same as the company currency, the prices shown in the reconciliation suggestions are computed using the company currency. 1) Enable multi-currency. 2) Setup two bank, one in USD, the other in EUR. 3) Leave the company currency to USD. 4) Create an invoice for a partner targeting the EUR bank and validate it. 5) Create a bank statement for the EUR bank amounting the **exact** value of the invoice for the **same** partner and reconcile it, this will create the payment behind the hood. 6) In the reconciliation the invoice appears as suggestion, if the currency symbol is correct, the amount is shown as USD. opw-1937202 closes #30623 closes odoo/odoo#31290 --- .../account/models/reconciliation_widget.py | 3 ++- .../tests/test_reconciliation_widget.py | 27 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/addons/account/models/reconciliation_widget.py b/addons/account/models/reconciliation_widget.py index d4b9e616651..36103ff196a 100644 --- a/addons/account/models/reconciliation_widget.py +++ b/addons/account/models/reconciliation_widget.py @@ -135,11 +135,12 @@ class AccountReconciliation(models.AbstractModel): else: aml_ids = matching_amls[line.id]['aml_ids'] bank_statements_left += line.statement_id + target_currency = line.currency_id or line.journal_id.currency_id or line.journal_id.company_id.currency_id amls = aml_ids and self.env['account.move.line'].browse(aml_ids) line_vals = { 'st_line': self._get_statement_line(line), - 'reconciliation_proposition': aml_ids and self._prepare_move_lines(amls) or [], + 'reconciliation_proposition': aml_ids and self._prepare_move_lines(amls, target_currency=target_currency, target_date=line.date) or [], 'model_id': matching_amls[line.id].get('model') and matching_amls[line.id]['model'].id, 'write_off': matching_amls[line.id].get('status') == 'write_off', } diff --git a/addons/account/tests/test_reconciliation_widget.py b/addons/account/tests/test_reconciliation_widget.py index 5d2dc637ed7..6edb1fa108b 100644 --- a/addons/account/tests/test_reconciliation_widget.py +++ b/addons/account/tests/test_reconciliation_widget.py @@ -1,6 +1,7 @@ import logging import odoo.tests import time +from odoo.addons.account.tests.test_reconciliation import TestReconciliation _logger = logging.getLogger(__name__) @@ -22,3 +23,29 @@ class TestUi(odoo.tests.HttpCase): self.phantom_js("/web#statement_ids=" + str(bank_stmt.id) + "&action=bank_statement_reconciliation_view", "odoo.__DEBUG__.services['web_tour.tour'].run('bank_statement_reconciliation')", "odoo.__DEBUG__.services['web_tour.tour'].tours.bank_statement_reconciliation.ready", login="admin") + + +@odoo.tests.tagged('post_install', '-at_install') +class TestReconciliationWidget(TestReconciliation): + + def test_statement_suggestion_other_currency(self): + # company currency is EUR + # payment in USD + invoice = self.create_invoice(invoice_amount=50, currency_id=self.currency_usd_id) + + # journal currency in USD + bank_stmt = self.acc_bank_stmt_model.create({ + 'journal_id': self.bank_journal_usd.id, + 'date': time.strftime('%Y-07-15'), + 'name': 'payment %s' % invoice.number, + }) + + bank_stmt_line = self.acc_bank_stmt_line_model.create({'name': 'payment', + 'statement_id': bank_stmt.id, + 'partner_id': self.partner_agrolait_id, + 'amount': 50, + 'date': time.strftime('%Y-07-15'), + }) + + result = self.env['account.reconciliation.widget'].get_bank_statement_line_data(bank_stmt_line.ids) + self.assertEqual(result['lines'][0]['reconciliation_proposition'][0]['amount_str'], '$ 50.00') \ No newline at end of file