From 25d6d96be8cf2e66c8629bcc5e86a21afc01a0a7 Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 22 Dec 2010 17:10:45 +0100 Subject: [PATCH] [FIX] res.currency: moved account-related res.currency code to account module lp bug: https://launchpad.net/bugs/557325 fixed bzr revid: odo@openerp.com-20101222161045-65kzccw65ya55jm9 --- bin/addons/base/res/res_currency.py | 32 ++++++++++++----------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/bin/addons/base/res/res_currency.py b/bin/addons/base/res/res_currency.py index 30beb8a2219..6d07dbd47e7 100644 --- a/bin/addons/base/res/res_currency.py +++ b/bin/addons/base/res/res_currency.py @@ -88,16 +88,9 @@ class res_currency(osv.osv): def is_zero(self, cr, uid, currency, amount): return abs(self.round(cr, uid, currency, amount)) < currency.rounding - def compute(self, cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=None, account=None, account_invert=False): + def _get_conversion_rate(self, cr, uid, from_currency, to_currency, context=None): if context is None: context = {} - if not from_currency_id: - from_currency_id = to_currency_id - if not to_currency_id: - to_currency_id = from_currency_id - xc = self.browse(cr, uid, [from_currency_id,to_currency_id], context=context) - from_currency = (xc[0].id == from_currency_id and xc[0]) or xc[1] - to_currency = (xc[0].id == to_currency_id and xc[0]) or xc[1] if from_currency['rate'] == 0 or to_currency['rate'] == 0: date = context.get('date', time.strftime('%Y-%m-%d')) if from_currency['rate'] == 0: @@ -107,22 +100,23 @@ class res_currency(osv.osv): raise osv.except_osv(_('Error'), _('No rate found \n' \ 'for the currency: %s \n' \ 'at the date: %s') % (currency_symbol, date)) - rate = to_currency.rate/from_currency.rate - if account and (account.currency_mode=='average') and account.currency_id: - q = self.pool.get('account.move.line')._query_get(cr, uid, context=context) - cr.execute('select sum(debit-credit),sum(amount_currency) from account_move_line l ' \ - 'where l.currency_id=%s and l.account_id=%s and '+q, (account.currency_id.id,account.id,)) - tot1,tot2 = cr.fetchone() - if tot2 and not account_invert: - rate = float(tot1)/float(tot2) - elif tot1 and account_invert: - rate = float(tot2)/float(tot1) - if to_currency_id==from_currency_id: + return to_currency.rate/from_currency.rate + + def compute(self, cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=None): + if not from_currency_id: + from_currency_id = to_currency_id + if not to_currency_id: + to_currency_id = from_currency_id + xc = self.browse(cr, uid, [from_currency_id,to_currency_id], context=context) + from_currency = (xc[0].id == from_currency_id and xc[0]) or xc[1] + to_currency = (xc[0].id == to_currency_id and xc[0]) or xc[1] + if to_currency_id == from_currency_id: if round: return self.round(cr, uid, to_currency, from_amount) else: return from_amount else: + rate = self._get_conversion_rate(cr, uid, from_currency, to_currency, context=context) if round: return self.round(cr, uid, to_currency, from_amount * rate) else: