From 92b1b640f6a093b53eaaf8b8601a6e34b0e37e40 Mon Sep 17 00:00:00 2001 From: qdp-odoo Date: Tue, 15 Mar 2016 11:04:27 +0100 Subject: [PATCH] [FIX] hr_expense: when generating the accounting entries for several expenses, set the move date as the maximum of the expenses dates, and make sure that all account.move.lines are created with the same currency rate (given by the move date). ticket 670876 --- addons/hr_expense/models/hr_expense.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/addons/hr_expense/models/hr_expense.py b/addons/hr_expense/models/hr_expense.py index d3e0bfbff0a..5fd8ab6ec29 100644 --- a/addons/hr_expense/models/hr_expense.py +++ b/addons/hr_expense/models/hr_expense.py @@ -152,7 +152,6 @@ class HrExpense(models.Model): 'date_maturity': line.get('date_maturity'), 'partner_id': partner_id, 'name': line['name'][:64], - 'date': self.date, 'debit': line['price'] > 0 and line['price'], 'credit': line['price'] < 0 and -line['price'], 'account_id': line['account_id'], @@ -168,7 +167,7 @@ class HrExpense(models.Model): } @api.multi - def _compute_expense_totals(self, company_currency, account_move_lines): + def _compute_expense_totals(self, company_currency, account_move_lines, move_date): ''' internal method used for computation of total amount of an expense in the company currency and in the expense currency, given the account_move_lines that will be created. It also do some small @@ -189,7 +188,7 @@ class HrExpense(models.Model): if self.currency_id != company_currency: line['currency_id'] = self.currency_id.id line['amount_currency'] = line['price'] - line['price'] = self.currency_id.with_context(date=self.date or fields.Date.context_today(self)).compute(line['price'], company_currency) + line['price'] = self.currency_id.with_context(date=move_date or fields.Date.context_today(self)).compute(line['price'], company_currency) total -= line['price'] total_currency -= line['amount_currency'] or line['price'] return total, total_currency, account_move_lines @@ -209,7 +208,10 @@ class HrExpense(models.Model): raise UserError(_("Expenses must have an expense journal specified to generate accounting entries.")) journal_dict = {} + maxdate = False for expense in self: + if expense.date > maxdate: + maxdate = expense.date if expense.journal_id not in journal_dict: journal_dict[expense.journal_id] = [] journal_dict[expense.journal_id].append(expense) @@ -219,6 +221,7 @@ class HrExpense(models.Model): move = self.env['account.move'].create({ 'journal_id': journal.id, 'company_id': self.env.user.company_id.id, + 'date': maxdate, }) for expense in expense_list: company_currency = expense.company_id.currency_id @@ -227,7 +230,7 @@ class HrExpense(models.Model): move_lines = expense._move_line_get() #create one more move line, a counterline for the total on payable account - total, total_currency, move_lines = expense._compute_expense_totals(company_currency, move_lines) + total, total_currency, move_lines = expense._compute_expense_totals(company_currency, move_lines, maxdate) if expense.payment_mode == 'company_account': if not expense.bank_journal_id.default_credit_account_id: raise UserError(_("No credit account found for the %s journal, please configure one.") % (expense.bank_journal_id.name))