From 6178be67c82b3afe12634e4c9737be1d752469bb Mon Sep 17 00:00:00 2001 From: "kdeb@odoo.com" Date: Fri, 23 Feb 2024 13:37:01 +0000 Subject: [PATCH] [FIX] hr_expense: apply old rates to total expenses MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: - Expenses entered in currencies other than the company currency are incorrectly calculated using today's exchange rate instead of the rate applicable on the date the expense was made. This results in inaccurate totals in the "totals to submit" section of the Expenses application. Steps To Reproduce: - Go to Expenses. - See that the expenses to submit is $4,216.44. - Create a new expense that is 999,999 EUR but $1.00 USD. - See that the expenses to submit is $783395.96. Solution: - summing up total_amount_company directly instead of total_amount and then converting to the company currency. opw-3731445 closes odoo/odoo#156591 X-original-commit: 2c8b13e9270d2ccd6651e7618cbc363c1dd49f43 Signed-off-by: William André (wan) Signed-off-by: Kawtar Drissi El Bouzaidi (kdeb) --- addons/hr_expense/models/hr_expense.py | 8 +++----- addons/hr_expense/tests/test_expenses.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index ac69306562b..6dcbfe88c28 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -905,13 +905,11 @@ class HrExpense(models.Model): ('employee_id', 'in', self.env.user.employee_ids.ids), '|', '&', ('payment_mode', 'in', ('own_account', 'company_account')), ('state', 'in', ('draft', 'reported', 'submitted')), '&', ('payment_mode', '=', 'own_account'), ('state', '=', 'approved') - ], ['state', 'currency_id'], ['total_amount_currency:sum']) - for state, currency, total_amount_sum in expenses: + ], ['state'], ['total_amount:sum']) + for state, total_amount_sum in expenses: if state in {'draft', 'reported'}: # Fuse the two states into only one "To Submit" state state = 'to_submit' - currency = currency or target_currency - amount = currency._convert(total_amount_sum, target_currency, self.env.company, fields.Date.today()) - expense_state[state]['amount'] += amount + expense_state[state]['amount'] += total_amount_sum return expense_state # ---------------------------------------- diff --git a/addons/hr_expense/tests/test_expenses.py b/addons/hr_expense/tests/test_expenses.py index 5bb1b4f388c..7bddfa4cdcd 100644 --- a/addons/hr_expense/tests/test_expenses.py +++ b/addons/hr_expense/tests/test_expenses.py @@ -965,3 +965,22 @@ class TestExpenses(TestExpenseCommon): {'name': 'test sheet no update', 'price_unit': 100.0, 'quantity': 1, 'total_amount': 100.0}, {'name': 'test sheet update', 'price_unit': 250.0, 'quantity': 1, 'total_amount': 250.0}, # no update ]) + + def test_foreign_currencies_total(self): + Expense = self.env['hr.expense'].with_user(self.expense_user_employee) + Expense.create([{ + 'name': 'Company expense', + 'payment_mode': 'company_account', + 'total_amount_currency': 1000.00, + 'employee_id': self.expense_employee.id, + }, + { + 'name': 'Company expense 2', + 'payment_mode': 'company_account', + 'currency_id': self.currency_data['currency'].id, + 'total_amount_currency': 1000.00, + 'total_amount': 2000.00, + 'employee_id': self.expense_employee.id, + }]) + expense_state = Expense.get_expense_dashboard() + self.assertEqual(expense_state['to_submit']['amount'], 3000.00)