Odoo Help

Welcome!

This community 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.

0

Product onchange and Pricelist in invoice line

By
Shelton
on 4/25/13, 11:59 AM 3,985 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':[]}}
        else:
            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
    else:
        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)
    else:
        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} )
    else:
        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
1

Pascal Tremblay

--Pascal Tremblay--
1314
| 5 2 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?

 

0

patrick

--patrick--
1958
| 5 4 7
Baarn, Netherlands
--patrick--
patrick
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.

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

Your Answer

Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!

About This Community

This community is for professionals and enthusiasts of our products and services. Read Guidelines

Question tools

1 follower(s)

Stats

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