summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabien Pinckaers <fp@tinyerp.com>2008-06-16 15:12:50 +0000
committerFabien Pinckaers <fp@tinyerp.com>2008-06-16 15:12:50 +0000
commitf70d110510b57f6d2da72b4d549c2b3eb8cb0ce9 (patch)
tree8a1408cd3bbd218acd02d7dc991f94748abf65b3
parentab9cd583f8b010edfac07546f08dbf21f09b4b47 (diff)
Bugfix reconciliation multi-currencies
bzr revid: fp@tinyerp.com-a76b09c553a9b9a30c4d7aad6032ee0fdd62ff79
-rw-r--r--addons/account/account_move_line.py29
-rw-r--r--addons/account/invoice.py3
2 files changed, 26 insertions, 6 deletions
diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py
index fb673995390..609c67f70dc 100644
--- a/addons/account/account_move_line.py
+++ b/addons/account/account_move_line.py
@@ -454,7 +454,8 @@ class account_move_line(osv.osv):
id_set = ','.join(map(str, ids))
lines = self.browse(cr, uid, ids, context=context)
unrec_lines = filter(lambda x: not x['reconcile_id'], lines)
- credit = debit = 0
+ credit = debit = 0.0
+ currency = 0.0
account_id = False
partner_id = False
for line in unrec_lines:
@@ -463,6 +464,7 @@ class account_move_line(osv.osv):
'Entry "%s" is not valid !' % line.name)
credit += line['credit']
debit += line['debit']
+ currency += line['amount_currency'] or 0.0
account_id = line['account_id']['id']
partner_id = (line['partner_id'] and line['partner_id']['id']) or False
writeoff = debit - credit
@@ -482,7 +484,8 @@ class account_move_line(osv.osv):
if r[0][1] != None:
raise osv.except_osv('Error', 'Some entries are already reconciled !')
- if not self.pool.get('res.currency').is_zero(cr, uid, account.company_id.currency_id, writeoff):
+ if (not self.pool.get('res.currency').is_zero(cr, uid, account.company_id.currency_id, writeoff)) or \
+ (account.currency_id and (not self.pool.get('res.currency').is_zero(cr, uid, account.currency_id, currency))):
if not writeoff_acc_id:
raise osv.except_osv('Warning', 'You have to provide an account for the write off entry !')
if writeoff > 0:
@@ -497,8 +500,24 @@ class account_move_line(osv.osv):
self_debit = -writeoff
writeoff_lines = [
- (0, 0, {'name':'Write-Off', 'debit':self_debit, 'credit':self_credit, 'account_id':account_id, 'date':date, 'partner_id':partner_id}),
- (0, 0, {'name':'Write-Off', 'debit':debit, 'credit':credit, 'account_id':writeoff_acc_id, 'date':date, 'partner_id':partner_id})
+ (0, 0, {
+ 'name':'Write-Off',
+ 'debit':self_debit,
+ 'credit':self_credit,
+ 'account_id':account_id,
+ 'date':date,
+ 'partner_id':partner_id,
+ 'currency_id': account.currency_id.id or False,
+ 'amount_currency': account.currency_id.id and -currency or 0.0
+ }),
+ (0, 0, {
+ 'name':'Write-Off',
+ 'debit':debit,
+ 'credit':credit,
+ 'account_id':writeoff_acc_id,
+ 'date':date,
+ 'partner_id':partner_id
+ })
]
name = 'Write-Off'
@@ -715,7 +734,7 @@ class account_move_line(osv.osv):
ctx = {}
if 'date' in vals:
ctx['date'] = vals['date']
- vals['amount_currency'] = cur_obj.compute(cr, uid, account.company_id.currency_id.id, account.currency_id.id, vals.get('debit', 0.0)+vals.get('credit', 0.0), context=ctx)
+ vals['amount_currency'] = cur_obj.compute(cr, uid, account.company_id.currency_id.id, account.currency_id.id, vals.get('debit', 0.0)-vals.get('credit', 0.0), context=ctx)
if not ok:
raise osv.except_osv('Bad account !', 'You can not use this general account in this journal !')
result = super(osv.osv, self).create(cr, uid, vals, context)
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index 48e5b1b2885..1e0b2738ed2 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -520,7 +520,7 @@ class account_invoice(osv.osv):
'credit':x['price']<0 and -x['price'],
'account_id':x['account_id'],
'analytic_lines':x.get('analytic_lines', []),
- 'amount_currency':x.get('amount_currency', False),
+ 'amount_currency':x['price']>0 and abs(x.get('amount_currency', False)) or -abs(x.get('amount_currency', False)),
'currency_id':x.get('currency_id', False),
'tax_code_id': x.get('tax_code_id', False),
'tax_amount': x.get('tax_amount', False),
@@ -703,6 +703,7 @@ class account_invoice(osv.osv):
'partner_id': invoice.partner_id.id,
'date': time.strftime('%Y-%m-%d'),
}
+
lines = [(0, 0, l1), (0, 0, l2)]
move = {'name': name, 'line_id': lines, 'journal_id': pay_journal_id, 'period_id': period_id}
move_id = self.pool.get('account.move').create(cr, uid, move)