Odoo Help


Product onchange and Pricelist in invoice line

on 4/25/13, 11:59 AM 5,115 views

Product onchange in account invoice line doesn't consider the product pricelist. The unit price is not changing according to the pricelist. Is this a bug ?

def product_id_change(self, cr, uid, ids, product, uom_id, qty=0, name='', type='out_invoice', partner_id=False, fposition_id=False, price_unit=False, currency_id=False, context=None, company_id=None):
    if context is None:
        context = {}
    company_id = company_id if company_id != None else context.get('company_id',False)
    context = dict(context)
    context.update({'company_id': company_id, 'force_company': company_id})
    if not partner_id:
        raise osv.except_osv(_('No Partner Defined !'),_("You must first select a partner !") )
    if not product:
        if type in ('in_invoice', 'in_refund'):
            return {'value': {}, 'domain':{'product_uom':[]}}
            return {'value': {'price_unit': 0.0}, 'domain':{'product_uom':[]}}
    part = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
    fpos_obj = self.pool.get('account.fiscal.position')
    fpos = fposition_id and fpos_obj.browse(cr, uid, fposition_id, context=context) or False

    if part.lang:
        context.update({'lang': part.lang})
    result = {}
    res = self.pool.get('product.product').browse(cr, uid, product, context=context)

    if type in ('out_invoice','out_refund'):
        a = res.property_account_income.id
        if not a:
            a = res.categ_id.property_account_income_categ.id
        a = res.property_account_expense.id
        if not a:
            a = res.categ_id.property_account_expense_categ.id
    a = fpos_obj.map_account(cr, uid, fpos, a)
    if a:
        result['account_id'] = a

    if type in ('out_invoice', 'out_refund'):
        taxes = res.taxes_id and res.taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False)
        taxes = res.supplier_taxes_id and res.supplier_taxes_id or (a and self.pool.get('account.account').browse(cr, uid, a, context=context).tax_ids or False)
    tax_id = fpos_obj.map_tax(cr, uid, fpos, taxes)

    if type in ('in_invoice', 'in_refund'):
        result.update( {'price_unit': price_unit or res.standard_price,'invoice_line_tax_id': tax_id} )
        result.update({'price_unit': res.list_price, 'invoice_line_tax_id': tax_id})
    result['name'] = res.partner_ref

    result['uos_id'] = uom_id or res.uom_id.id
    if res.description:
        result['name'] += '\n'+res.description

    domain = {'uos_id':[('category_id','=',res.uom_id.category_id.id)]}

    res_final = {'value':result, 'domain':domain}

    if not company_id or not currency_id:
        return res_final

    company = self.pool.get('res.company').browse(cr, uid, company_id, context=context)
    currency = self.pool.get('res.currency').browse(cr, uid, currency_id, context=context)

    if company.currency_id.id != currency.id:
        if type in ('in_invoice', 'in_refund'):
            res_final['value']['price_unit'] = res.standard_price
        new_price = res_final['value']['price_unit'] * currency.rate
        res_final['value']['price_unit'] = new_price

    if result['uos_id'] and result['uos_id'] != res.uom_id.id:
        selected_uom = self.pool.get('product.uom').browse(cr, uid, result['uos_id'], context=context)
        new_price = self.pool.get('product.uom')._compute_price(cr, uid, res.uom_id.id, res_final['value']['price_unit'], result['uos_id'])
        res_final['value']['price_unit'] = new_price
    return res_final

Idem for me. Pricelist works in sales order, but not in invoices.

Pascal Tremblay
on 10/4/14, 8:25 PM

Pascal Tremblay

--Pascal Tremblay--
| 5 3 7
Alma, Canada
--Pascal Tremblay--

Pascal Tremblay
On 10/5/14, 7:40 PM

Hello all,

Is it still a bug in odoo or not?

Pricelists work well for a purchase order. I can get different price for an item according to his supplier.

But if I make an invoice directly, without to make a sale order before, the price for the item doesn't change according to the supplier.

In my shop, we often make invoices without the sale order before .

For example, i have two differents suppliers for coffee. Each one has a different price. I don't want to make a purchase order each time i buy a coffee. I just want to enter the invoice directly in my accounting. No?





| 5 4 7
Baarn, Netherlands
On 4/26/13, 4:54 AM

Have you installed only default modules (the ones you get by installing openERP), or did you create your own module/ use an additional module?

Maybe you can give an example (or post pics somewhere and give the links), so we can try to recreate your issue.

#additional info I have got an example, where we had a customized price for a product. When doing the invoice, I do get the correct price on the invoice.

But I have inherited product_id_change, and have modified pricelist.get_price_multi.

if your pricelist is depending on another pricelist, and both pricelists have discounts or other modifications of the price, all modifications are calculated after each other, maybe something you can check?

I've my own module but i haven't inherited the product on change function. I've edited my post with the product on change in base account_invoice.py. Here it is updated with the standard/list price of the product without considering the pricelist.

on 4/26/13, 5:20 AM
on 4/26/13, 5:30 AM

About This Community

This platform is for beginners and experts willing to share their Odoo knowledge. It's not a forum to discuss ideas, but a knowledge base of questions and their answers.


Odoo Training Center

Access to our E-learning platform and experience all Odoo Apps through learning videos, exercises and Quizz.

Test it now

Question tools

1 follower(s)


Asked: 4/25/13, 11:59 AM
Seen: 5115 times
Last updated: 3/16/15, 8:10 AM