Help

2

Can't override a function field

Avatar
Grover Menacho

Does anyone know why I can't rewrite the _amount_line method on sale.order.line???

Maybe because it's a private function?

I'm not sure.

This doesn't work alone:

    def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
    tax_obj = self.pool.get('account.tax')
    cur_obj = self.pool.get('res.currency')
    res = {}
    if context is None:
        context = {}
    for line in self.browse(cr, uid, ids, context=context):
        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.product_id, line.order_id.partner_id)
        cur = line.order_id.pricelist_id.currency_id
        #This gets the delivery_price
        total=0
        for delivery_line in line.delivery_lines:
            total+=delivery_line.delivery_price

        res[line.id] = cur_obj.round(cr, uid, cur, taxes['total'])+total
    return res

The only solution that I've found is rewrite the function and create the field again:

_columns = {
    'price_subtotal': fields.function(_amount_line, string='Subtotal', digits_compute= dp.get_precision('Account')),
}

Am I missing something? Or It's something that happens all the time?

Thanks,

Grover Menacho

Avatar
Discard
3 Answers
8
Avatar
Andreas Brueckl
Best Answer

Yes, it is required to specify the field again.

Another option would be to only update the function pointer:

self._columns['price_subtotal']._fnct = _amount_line
2 Comments
Avatar
Discard
Avatar
ARRIOUACH Mohamed
-

Thanks Andreas Brueckl, that fixed my problem.

Avatar
Marie Pinto
-

Hello. I'd like to know where to put this code... Thank you!

1
Avatar
igor
Best Answer

i can't get this to work either... 

if i specify the field again, function is called, but then sale.order module can't acces 'price_subtotal', and i don't see why not...

( File "/opt/openerp/server/openerp/addons/sale/sale.py", line 100, in _amount_all

val1 += line.price_subtotal File "/opt/openerp/server/openerp/osv/orm.py", line 504, in __getattr__ raise AttributeError(e) AttributeError: 857)

i also can't figure out how to update function pointer...

Avatar
Discard
0
Avatar
Ajay
Best Answer

Ok. thanks. I didn't know about this and I was breaking my head trying to check this.

1 Comment
Avatar
Discard
Avatar
Ajay
-

Hey Andreas can you tell where to put the line you suggested in code?? I tried before & after the overridden function it gives me error.