From 5adb4d1d02e3d8ed541d5c2b2e1b62a0ba322ec3 Mon Sep 17 00:00:00 2001 From: Goffin Simon Date: Thu, 14 Jan 2016 12:13:59 +0100 Subject: [PATCH] [FIX] account: get_journal_dashboard_datas In multi currencies, the different invoices linked to a journal can be in different currencies, this is why the amount_total of each invoice must be summed in the same currency. opw:666311 --- .../models/account_journal_dashboard.py | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/addons/account/models/account_journal_dashboard.py b/addons/account/models/account_journal_dashboard.py index e772d52d7f0..40e0d6721f8 100644 --- a/addons/account/models/account_journal_dashboard.py +++ b/addons/account/models/account_journal_dashboard.py @@ -134,6 +134,7 @@ class account_journal(models.Model): @api.multi def get_journal_dashboard_datas(self): + currency = self.currency_id or self.company_id.currency_id number_to_reconcile = last_balance = account_sum = 0 ac_bnk_stmt = [] title = '' @@ -158,23 +159,30 @@ class account_journal(models.Model): elif self.type in ['sale', 'purchase']: title = _('Bills to pay') if self.type == 'purchase' else _('Invoices owed to you') # optimization to find total and sum of invoice that are in draft, open state - query = """SELECT state, count(id) AS count, sum(amount_total) AS total FROM account_invoice WHERE journal_id = %s AND state NOT IN ('paid', 'cancel') GROUP BY state;""" + query = """SELECT state, amount_total, currency_id AS currency FROM account_invoice WHERE journal_id = %s AND state NOT IN ('paid', 'cancel');""" self.env.cr.execute(query, (self.id,)) query_results = self.env.cr.dictfetchall() today = datetime.today() - query = """SELECT count(id) AS count_late, sum(amount_total) AS total FROM account_invoice WHERE journal_id = %s AND date < %s AND state = 'open';""" + query = """SELECT amount_total, currency_id AS currency FROM account_invoice WHERE journal_id = %s AND date < %s AND state = 'open';""" self.env.cr.execute(query, (self.id, today)) late_query_results = self.env.cr.dictfetchall() + sum_draft = 0.0 + number_draft = 0 + number_waiting = 0 for result in query_results: + cur = self.env['res.currency'].browse(result.get('currency')) if result.get('state') in ['draft', 'proforma', 'proforma2']: - number_draft = result.get('count') - sum_draft = result.get('total') + number_draft += 1 + sum_draft += cur.compute(result.get('amount_total'), currency) elif result.get('state') == 'open': - number_waiting = result.get('count') - sum_waiting = result.get('total') - if late_query_results and late_query_results[0].get('count_late') != None: - number_late = late_query_results[0].get('count_late') - sum_late = late_query_results[0].get('total') + number_waiting += 1 + sum_waiting += cur.compute(result.get('amount_total'), currency) + sum_late = 0.0 + number_late = 0 + for result in late_query_results: + cur = self.env['res.currency'].browse(result.get('currency')) + number_late += 1 + sum_late += cur.compute(result.get('amount_total'), currency) return { 'number_to_reconcile': number_to_reconcile,