From e35628a21e6d0ebd530e15b8c3e40e19acdcaa85 Mon Sep 17 00:00:00 2001 From: qdp Date: Thu, 20 Nov 2008 18:24:48 +0100 Subject: [PATCH] *major bugfix on vat creation while encoding entries by line bzr revid: qdp@tinyerp.com-20081120172448-umklgdetkzmc2bxk --- addons/account/account_move_line.py | 63 +++++++++++++++++++++++------ 1 file changed, 51 insertions(+), 12 deletions(-) diff --git a/addons/account/account_move_line.py b/addons/account/account_move_line.py index 176f1bbe4a3..4be4804111a 100644 --- a/addons/account/account_move_line.py +++ b/addons/account/account_move_line.py @@ -794,7 +794,6 @@ class account_move_line(osv.osv): context={} account_obj = self.pool.get('account.account') tax_obj=self.pool.get('account.tax') - if ('account_id' in vals) and not account_obj.read(cr, uid, vals['account_id'], ['active'])['active']: raise osv.except_osv(_('Bad account!'), _('You can not use an inactive account!')) if 'journal_id' in vals and 'journal_id' not in context: @@ -880,12 +879,50 @@ class account_move_line(osv.osv): # CREATE Taxes if 'account_tax_id' in vals and vals['account_tax_id']: tax_id=tax_obj.browse(cr,uid,vals['account_tax_id']) - total = vals['credit'] or (-vals['debit']) + total = vals['debit'] - vals['credit'] + if journal.refund_journal: + base_code = 'ref_base_code_id' + tax_code = 'ref_tax_code_id' + account_id = 'account_paid_id' + base_sign = 'ref_base_sign' + tax_sign = 'ref_tax_sign' + else: + base_code = 'base_code_id' + tax_code = 'tax_code_id' + account_id = 'account_collected_id' + base_sign = 'base_sign' + tax_sign = 'tax_sign' + + tmp_cnt = 0 for tax in tax_obj.compute(cr,uid,[tax_id],total,1.00): - self.write(cr, uid,[result], { - 'tax_code_id': tax['base_code_id'], - 'tax_amount': tax['base_sign'] * total - }) + #create the base movement + if tmp_cnt == 0: + if tax[base_code]: + tmp_cnt += 1 + self.write(cr, uid,[result], { + 'tax_code_id': tax[base_code], + 'tax_amount': tax[base_sign] * abs(total) + }) + else: + data = { + 'move_id': vals['move_id'], + 'journal_id': vals['journal_id'], + 'period_id': vals['period_id'], + 'name': vals['name']+' '+tax['name'], + 'date': vals['date'], + 'partner_id': vals.get('partner_id',False), + 'ref': vals.get('ref',False), + 'account_tax_id': False, + 'tax_code_id': tax[base_code], + 'tax_amount': tax[base_sign] * abs(total), + 'account_id': vals['account_id'], + 'credit': 0.0, + 'debit': 0.0, + } + if data['tax_code_id']: + self.create(cr, uid, data, context) + + #create the VAT movement data = { 'move_id': vals['move_id'], 'journal_id': vals['journal_id'], @@ -895,13 +932,15 @@ class account_move_line(osv.osv): 'partner_id': vals.get('partner_id',False), 'ref': vals.get('ref',False), 'account_tax_id': False, - 'tax_code_id': tax['tax_code_id'], - 'tax_amount': tax['tax_sign'] * tax['amount'], - 'account_id': tax['account_paid_id'], # or collected ? - 'credit': tax['amount']>0 and tax['amount'] or 0.0, - 'debit': tax['amount']<0 and -tax['amount'] or 0.0, + 'tax_code_id': tax[tax_code], + 'tax_amount': tax[tax_sign] * abs(tax['amount']), + 'account_id': tax[account_id], + 'credit': tax['amount']<0 and -tax['amount'] or 0.0, + 'debit': tax['amount']>0 and tax['amount'] or 0.0, } - self.create(cr, uid, data, context) + if data['tax_code_id']: + self.create(cr, uid, data, context) + if check: tmp = self.pool.get('account.move').validate(cr, uid, [vals['move_id']], context) if journal.entry_posted and tmp: