I am modifying the Purchase module to add a new field in purchase order lines. I have successfully added the code to create model and view the custom field. But unable to add the custom field to total amount of the P.O. line.
class customPo(osv.osv):
_inherit="purchase.order"
#_name = 'customPo'
def _amount_all(self, cr, uid, ids, field_name, arg, context=None):
res = {}
cur_obj=self.pool.get('res.currency')
for order in self.browse(cr, uid, ids, context=context):
res[order.id] = {
'amount_untaxed': 0.0,
'amount_tax': 0.0,
'amount_total': 0.0,
}
val = val1 = 0.0
cur = order.pricelist_id.currency_id
for line in order.order_line:
# val1 += line.price_subtotal
val1 = val1 + line.data + line.price_subtotal
for c in self.pool.get('account.tax').compute_all(cr, uid, line.taxes_id, line.price_unit, line.product_qty, line.product_id, order.partner_id)['taxes']:
val += c.get('amount', 0.0)
res[order.id]['amount_tax']=cur_obj.round(cr, uid, cur, 42.0)
res[order.id]['amount_untaxed']=cur_obj.round(cr, uid, cur, val1)
res[order.id]['amount_total']=res[order.id]['amount_untaxed'] + res[order.id]['amount_tax']
return res
_columns = {
'order_line': fields.one2many('purchase.order.line', 'order_id', 'Order Lines', states={'approved':[('readonly',True)],'done':[('readonly',True)]}),
'amount_untaxed': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Untaxed Amount',
store={
'purchase.order.line': (_get_order, None, 10),
}, multi="sums", help="The amount without tax", track_visibility='always'),
'amount_tax': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Taxes',
store={
'purchase.order.line': (_get_order, None, 10),
}, multi="sums", help="The tax amount"),
'amount_total': fields.function(_amount_all, digits_compute= dp.get_precision('Account'), string='Total',
store={
'purchase.order.line': (_get_order, None, 10),
}, multi="sums",help="The total amount"),
}
customPo()
class customPol(osv.osv):
_inherit = 'purchase.order.line'
# _name = 'something.notpurchase'
_columns = {
'data': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Product Price')),
}
customPol()
I have kept the tax static as 42 so, I can know when the overridden method is called but it never happens.
My view file is the following.
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record id="custom_purchse_wa" model="ir.ui.view">
<field name="name">Custom Field New</field>
<field name="model">purchase.order</field>
<field name="inherit_id" ref="purchase.purchase_order_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/notebook/page/field[@name='order_line']/tree/field[@name='price_unit']" position="after">
<field name="data" string="Custom field"/>
</xpath>
</field>
</record>
</data>
</openerp>