diff --git a/addons/purchase_discount/__init__.py b/addons/purchase_discount/__init__.py index 705298eed00..f2902ed0108 100644 --- a/addons/purchase_discount/__init__.py +++ b/addons/purchase_discount/__init__.py @@ -1 +1,2 @@ import purchase_discount +import report diff --git a/addons/purchase_discount/purchase_discount.py b/addons/purchase_discount/purchase_discount.py index b4f98d5d0e3..b9662cfe61c 100644 --- a/addons/purchase_discount/purchase_discount.py +++ b/addons/purchase_discount/purchase_discount.py @@ -37,9 +37,19 @@ import pooler class purchase_order_line(osv.osv): _name = "purchase.order.line" _inherit = "purchase.order.line" + + def _amount_line(self, cr, uid, ids, prop, unknow_none,unknow_dict): + res = {} + cur_obj=self.pool.get('res.currency') + 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 * (1 - (line.discount or 0.0) /100.0)) + return res + _columns = { 'discount': fields.float('Discount (%)', digits=(16,2)), - } + 'price_subtotal': fields.function(_amount_line, method=True, string='Subtotal'), + } _defaults = { 'discount': lambda *a: 0.0, } @@ -51,23 +61,34 @@ class purchase_order(osv.osv): def _amount_untaxed(self, cr, uid, ids, field_name, arg, context): id_set = ",".join(map(str, ids)) - sql_req="SELECT s.id,COALESCE(SUM(l.price_unit*l.product_qty*(100-l.discount))/100.0,0)::decimal(16,2) AS amount FROM purchase_order s LEFT OUTER JOIN purchase_order_line l ON (s.id=l.order_id) WHERE s.id IN ("+id_set+") GROUP BY s.id" + sql_req="SELECT s.id,COALESCE(SUM(l.price_unit*l.product_qty*(100.0-l.discount))/100.0,0) AS amount FROM purchase_order s LEFT OUTER JOIN purchase_order_line l ON (s.id=l.order_id) WHERE s.id IN ("+id_set+") GROUP BY s.id" cr.execute(sql_req) + res = dict(cr.fetchall()) - print "_amount_untaxed : res = "+str(res) + + cur_obj=self.pool.get('res.currency') + for id in res.keys(): + order=self.browse(cr, uid, [id])[0] + cur=order.pricelist_id.currency_id + res[id]=cur_obj.round(cr, uid, cur, res[id]) return res + def _amount_tax(self, cr, uid, ids, field_name, arg, context): - print "_amount_tax(self, cr, uid, ids, field_name, arg, context):" res = {} + cur_obj=self.pool.get('res.currency') for order in self.browse(cr, uid, ids): val = 0.0 + cur=order.pricelist_id.currency_id for line in order.order_line: - for tax in line.taxes_id: - for c in self.pool.get('account.tax').compute(cr, uid, [tax.id], line.price_unit * (1-(line.discount or 0.0)/100.0), line.product_qty, order.partner_address_id.id): - val+=c['amount'] - res[order.id]=round(val,2) - - print "_amount_tax : res = "+str(res) + for c in self.pool.get('account.tax').compute(cr, uid, line.taxes_id, line.price_unit * (1-(line.discount or 0.0)/100.0), line.product_qty, order.partner_address_id.id, line.product_id): + val+= cur_obj.round(cr, uid, cur, c['amount']) + res[order.id]=cur_obj.round(cr, uid, cur, val) return res + + _columns = { + 'amount_untaxed': fields.function(_amount_untaxed, method=True, string='Untaxed Amount'), + 'amount_tax': fields.function(_amount_tax, method=True, string='Taxes'), + } + purchase_order() diff --git a/addons/purchase_discount/purchase_discount_report.xml b/addons/purchase_discount/purchase_discount_report.xml index 20e2a137b9c..af653d79cbb 100644 --- a/addons/purchase_discount/purchase_discount_report.xml +++ b/addons/purchase_discount/purchase_discount_report.xml @@ -1,8 +1,8 @@ -