From 0a5fbeb82ef314ad2b786eabd859b5eb4c35aabe Mon Sep 17 00:00:00 2001 From: Alexis de Lattre <> Date: Wed, 3 Oct 2012 16:09:19 +0530 Subject: [PATCH 1/3] [FIX] account: corrected tax base amount calculation It first rounds base value and then multiplies with the qty which leads to wrong calculation lp bug: https://launchpad.net/bugs/1058390 fixed bzr revid: rha@tinyerp.com-20121003103919-slne7ppo75k9478m --- addons/account/account_invoice.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 503e1443562..f42403fa00c 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1586,14 +1586,13 @@ class account_invoice_tax(osv.osv): for line in inv.invoice_line: for tax in tax_obj.compute_all(cr, uid, line.invoice_line_tax_id, (line.price_unit* (1-(line.discount or 0.0)/100.0)), line.quantity, inv.address_invoice_id.id, line.product_id, inv.partner_id)['taxes']: - tax['price_unit'] = cur_obj.round(cr, uid, cur, tax['price_unit']) val={} val['invoice_id'] = inv.id val['name'] = tax['name'] val['amount'] = tax['amount'] val['manual'] = False val['sequence'] = tax['sequence'] - val['base'] = tax['price_unit'] * line['quantity'] + val['base'] = cur_obj.round(cr, uid, cur, tax['price_unit'] * line['quantity']) if inv.type in ('out_invoice','in_invoice'): val['base_code_id'] = tax['base_code_id'] From 50757fa7d85475aa6b03fec95684bae6092be2e8 Mon Sep 17 00:00:00 2001 From: Rifakat Date: Fri, 5 Oct 2012 18:00:33 +0530 Subject: [PATCH 2/3] [FIX] account: it fills taxes from product as well as account in invoice line only product default tax should be considered when we select any product lp bug: https://launchpad.net/bugs/1060856 fixed bzr revid: rha@tinyerp.com-20121005123033-fj2kvq6viv6kydxy --- addons/account/account_invoice.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index f42403fa00c..45a3c9241ad 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1493,16 +1493,19 @@ class account_invoice_line(osv.osv): def onchange_account_id(self, cr, uid, ids, product_id, partner_id, inv_type, fposition_id, account_id): if not account_id: return {} - taxes = self.pool.get('account.account').browse(cr, uid, account_id).tax_ids + unique_tax_ids = [] fpos = fposition_id and self.pool.get('account.fiscal.position').browse(cr, uid, fposition_id) or False - tax_ids = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes) - - product_change_result = self.product_id_change(cr, uid, ids, product_id, False, type=inv_type, - partner_id=partner_id, fposition_id=fposition_id) - unique_tax_ids = set(tax_ids) - if product_change_result and 'value' in product_change_result and 'invoice_line_tax_id' in product_change_result['value']: - unique_tax_ids |= set(product_change_result['value']['invoice_line_tax_id']) - return {'value':{'invoice_line_tax_id': list(unique_tax_ids)}} + account = self.pool.get('account.account').browse(cr, uid, account_id) + if not product_id: + taxes = account.tax_ids + unique_tax_ids = self.pool.get('account.fiscal.position').map_tax(cr, uid, fpos, taxes) + else: + product_change_result = self.product_id_change(cr, uid, ids, product_id, False, type=inv_type, + partner_id=partner_id, fposition_id=fposition_id, + company_id=account.company_id.id) + if product_change_result and 'value' in product_change_result and 'invoice_line_tax_id' in product_change_result['value']: + unique_tax_ids = product_change_result['value']['invoice_line_tax_id'] + return {'value':{'invoice_line_tax_id': unique_tax_ids}} account_invoice_line() From 997c4817cb6c6808544b941a9d991390509684ba Mon Sep 17 00:00:00 2001 From: Rifakat Date: Fri, 5 Oct 2012 18:28:20 +0530 Subject: [PATCH 3/3] [FIX] uncommitted last changes of r7012 bzr revid: rha@tinyerp.com-20121005125820-9ht53xonrwqhkdt6 --- addons/account/account_invoice.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 45a3c9241ad..e2f333367bb 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1589,13 +1589,14 @@ class account_invoice_tax(osv.osv): for line in inv.invoice_line: for tax in tax_obj.compute_all(cr, uid, line.invoice_line_tax_id, (line.price_unit* (1-(line.discount or 0.0)/100.0)), line.quantity, inv.address_invoice_id.id, line.product_id, inv.partner_id)['taxes']: + tax['price_unit'] = cur_obj.round(cr, uid, cur, tax['price_unit']) val={} val['invoice_id'] = inv.id val['name'] = tax['name'] val['amount'] = tax['amount'] val['manual'] = False val['sequence'] = tax['sequence'] - val['base'] = cur_obj.round(cr, uid, cur, tax['price_unit'] * line['quantity']) + val['base'] = tax['price_unit'] * line['quantity'] if inv.type in ('out_invoice','in_invoice'): val['base_code_id'] = tax['base_code_id']