Amit Dodiya (OpenERP) has proposed merging
lp:~openerp-dev/openobject-addons/5.0-opw-18126-ado into
lp:openobject-addons/5.0.
Requested reviews:
Raphael Collet (OpenERP) (rco-openerp)
For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/5.0-opw-18126-ado/+merge/79252
Hello,
[FIX] Tax included in price is not working : case(18126)
In Sales order / Account Invoice / Purchase Order when making tax calculations,
the amount calculation is wrong. It adds the Tax even if we have checked the
"taxes included in the price" in Taxes card.
Thanks,
Amit
--
https://code.launchpad.net/~openerp-dev/openobject-addons/5.0-opw-18126-ado/+merge/79252
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openobject-addons/5.0-opw-18126-ado.
=== modified file 'account/account.py'
--- account/account.py 2011-09-22 12:00:02 +0000
+++ account/account.py 2011-10-13 10:47:44 +0000
@@ -1585,6 +1585,39 @@
cur_price_unit+=amount2
return res
+ def compute_all(self, cr, uid, taxes, price_unit, quantity, address_id=None, product=None, partner=None):
+ """
+ RETURN: {
+ 'total': 0.0, # Total without taxes
+ 'total_included: 0.0, # Total with taxes
+ 'taxes': [] # List of taxes, see compute for the format
+ }
+ """
+ totalin = totalex = round(price_unit * quantity, int(config['price_accuracy']))
+ tin = []
+ tex = []
+ for tax in taxes:
+ if tax.price_include:
+ tin.append(tax)
+ else:
+ tex.append(tax)
+ tin = self.compute_inv(cr, uid, tin, price_unit, quantity, address_id=address_id, product=product, partner=partner)
+ for r in tin:
+ totalex -= r.get('amount', 0.0)
+ totlex_qty = 0.0
+ try:
+ totlex_qty=totalex/quantity
+ except:
+ pass
+ tex = self.compute(cr, uid, tex, totlex_qty, quantity, address_id=address_id, product=product, partner=partner)
+ for r in tex:
+ totalin += r.get('amount', 0.0)
+ return {
+ 'total': totalex,
+ 'total_included': totalin,
+ 'taxes': tin + tex
+ }
+
def compute(self, cr, uid, taxes, price_unit, quantity, address_id=None, product=None, partner=None):
"""
=== modified file 'account/invoice.py'
--- account/invoice.py 2011-09-08 08:35:21 +0000
+++ account/invoice.py 2011-10-13 10:47:44 +0000
@@ -53,8 +53,8 @@
}
for line in invoice.invoice_line:
res[invoice.id]['amount_untaxed'] += line.price_subtotal
- for line in invoice.tax_line:
- res[invoice.id]['amount_tax'] += line.amount
+ for c in self.pool.get('account.tax').compute_all(cr, uid, line.invoice_line_tax_id, line.price_unit, line.quantity, line.product_id)['taxes']:
+ res[invoice.id]['amount_tax']+= c.get('amount', 0.0)
res[invoice.id]['amount_total'] = res[invoice.id]['amount_tax'] + res[invoice.id]['amount_untaxed']
return res
@@ -999,11 +999,13 @@
def _amount_line(self, cr, uid, ids, prop, unknow_none,unknow_dict):
res = {}
cur_obj=self.pool.get('res.currency')
+ tax_obj = self.pool.get('account.tax')
for line in self.browse(cr, uid, ids):
if line.invoice_id:
- res[line.id] = line.price_unit * line.quantity * (1-(line.discount or 0.0)/100.0)
+ price = line.price_unit * line.quantity * (1-(line.discount or 0.0)/100.0)
cur = line.invoice_id.currency_id
- res[line.id] = cur_obj.round(cr, uid, cur, res[line.id])
+ taxes = tax_obj.compute_all(cr, uid, line.invoice_line_tax_id, price, line.quantity, line.product_id)
+ res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
else:
res[line.id] = round(line.price_unit * line.quantity * (1-(line.discount or 0.0)/100.0),int(config['price_accuracy']))
return res
=== modified file 'purchase/purchase.py'
--- purchase/purchase.py 2011-09-15 09:04:43 +0000
+++ purchase/purchase.py 2011-10-13 10:47:44 +0000
@@ -55,8 +55,8 @@
val = val1 = 0.0
cur=order.pricelist_id.currency_id
for line in order.order_line:
- for c in self.pool.get('account.tax').compute(cr, uid, line.taxes_id, line.price_unit, line.product_qty, order.partner_address_id.id, line.product_id, order.partner_id):
- val+= c['amount']
+ for c in self.pool.get('account.tax').compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, order.partner_address_id.id, line.product_id, order.partner_id)['taxes']:
+ val+= c.get('amount', 0.0)
val1 += line.price_subtotal
res[order.id]['amount_tax']=cur_obj.round(cr, uid, cur, val)
res[order.id]['amount_untaxed']=cur_obj.round(cr, uid, cur, val1)
@@ -464,9 +464,11 @@
def _amount_line(self, cr, uid, ids, prop, unknow_none,unknow_dict):
res = {}
cur_obj=self.pool.get('res.currency')
+ tax_obj = self.pool.get('account.tax')
for line in self.browse(cr, uid, ids):
cur = line.order_id.pricelist_id.currency_id
- res[line.id] = cur_obj.round(cr, uid, cur, line.price_unit * line.product_qty)
+ taxes = tax_obj.compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, line.order_id.partner_address_id.id, line.product_id, line.order_id.partner_id)
+ res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
return res
_columns = {
=== modified file 'sale/sale.py'
--- sale/sale.py 2011-09-14 14:17:35 +0000
+++ sale/sale.py 2011-10-13 10:47:44 +0000
@@ -64,8 +64,8 @@
def _amount_line_tax(self, cr, uid, line, context={}):
val = 0.0
- for c in self.pool.get('account.tax').compute(cr, uid, line.tax_id, line.price_unit * (1-(line.discount or 0.0)/100.0), line.product_uom_qty, line.order_id.partner_invoice_id.id, line.product_id, line.order_id.partner_id):
- val += c['amount']
+ for c in self.pool.get('account.tax').compute_all(cr, uid, line.tax_id, line.price_unit * (1-(line.discount or 0.0)/100.0), line.product_uom_qty, line.order_id.partner_invoice_id.id, line.product_id, line.order_id.partner_id)['taxes']:
+ val += c.get('amount', 0.0)
return val
def _amount_all(self, cr, uid, ids, field_name, arg, context):
@@ -767,10 +767,12 @@
def _amount_line(self, cr, uid, ids, field_name, arg, context):
res = {}
cur_obj = self.pool.get('res.currency')
+ tax_obj = self.pool.get('account.tax')
for line in self.browse(cr, uid, ids):
- res[line.id] = line.price_unit * line.product_uom_qty * (1 - (line.discount or 0.0) / 100.0)
+ price = line.price_unit * (1 - (line.discount or 0.0) / 100.0)
+ taxes = tax_obj.compute_all(cr, uid, line.tax_id, price, line.product_uom_qty, line.order_id.partner_invoice_id.id, line.product_id, line.order_id.partner_id)
cur = line.order_id.pricelist_id.currency_id
- res[line.id] = cur_obj.round(cr, uid, cur, res[line.id])
+ res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])
return res
def _number_packages(self, cr, uid, ids, field_name, arg, context):
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp