Odoo Help


Onchange problem it didnt pass the value of the fields

on 10/28/14, 11:12 PM 2,095 views

I want to get the value of L and W from PRODUCT. I use the ONCHANGE METHOD for this but it didn't work i don't know why.  I simply add the computation in the existing "onchange_porduct_id". It didn't pass the value from product to purchase. Anyone please help me Thanks in advance..



Here's my code:


 def onchange_product_id(self, cr, uid, ids, pricelist_id = False, product_id=False, qty=0.0, uom_id=False,
            partner_id=False, date_order=False, fiscal_position_id=False, date_planned=False,
            name=False, price_unit=False, metric = 0.0, lll=0.00, www=0.00, context=None):
        values = super(purchase_order_line, self).onchange_product_id(cr, uid, ids, pricelist_id, product_id, qty, uom_id,
                                                                      partner_id, date_order, fiscal_position_id, date_planned,
                                                                      name, price_unit, n, metric_tons, context=context)
        #onchange handler of product_id.
        if context is None:
            context = {}
        res = {'value': {'price_unit': price_unit or 0.0, 'name': name or '', 'product_uom' : uom_id or False}}
        if not product_id:
            return res
        product_product = self.pool.get('product.product')
        product_uom = self.pool.get('product.uom')
        res_partner = self.pool.get('res.partner')
        product_supplierinfo = self.pool.get('product.supplierinfo')
        product_pricelist = self.pool.get('product.pricelist')
        account_fiscal_position = self.pool.get('account.fiscal.position')
        account_tax = self.pool.get('account.tax')
        # - check for the presence of partner_id and pricelist_id
        #if not partner_id:
        #    raise osv.except_osv(_('No Partner!'), _('Select a partner in purchase order to choose a product.'))
        #if not pricelist_id:
        #    raise osv.except_osv(_('No Pricelist !'), _('Select a price list in the purchase order form before choosing a product.'))
        # - determine name and notes based on product in partner lang.
        context_partner = context.copy()
        if partner_id:
            lang = res_partner.browse(cr, uid, partner_id).lang
            context_partner.update( {'lang': lang, 'partner_id': partner_id} )
        product = product_product.browse(cr, uid, product_id, context=context_partner)
        name = product.name
        if product.description_purchase:
            name += '\n' + product.description_purchase
        res['value'].update({'name': name})
        # - set a domain on product_uom
        res['domain'] = {'product_uom': [('category_id','=',product.uom_id.category_id.id)]}
        # - check that uom and product uom belong to the same category
        product_uom_po_id = product.uom_po_id.id
        if not uom_id:
            uom_id = product_uom_po_id
        if product.uom_id.category_id.id != product_uom.browse(cr, uid, uom_id, context=context).category_id.id:
            if self._check_product_uom_group(cr, uid, context=context):
                res['warning'] = {'title': ('Warning!'), 'message': ('Selected Unit of Measure does not belong to the same category as the product Unit of Measure.')}
            uom_id = product_uom_po_id
        res['value'].update({'product_uom': uom_id})
        # - determine product_qty and date_planned based on seller info
        if not date_order:
            date_order = fields.date.context_today(self,cr,uid,context=context)
        supplierinfo = False
        for supplier in product.seller_ids:
            if partner_id and (supplier.name.id == partner_id):
                supplierinfo = supplier
                if supplierinfo.product_uom.id != uom_id:
                    res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier only sells this product by %s') % supplierinfo.product_uom.name }
                min_qty = product_uom._compute_qty(cr, uid, supplierinfo.product_uom.id, supplierinfo.min_qty, to_uom_id=uom_id)
                if (qty or 0.0) < min_qty: # If the supplier quantity is greater than entered from user, set minimal.
                    if qty:
                        res['warning'] = {'title': _('Warning!'), 'message': _('The selected supplier has a minimal quantity set to %s %s, you should not purchase less.') % (supplierinfo.min_qty, supplierinfo.product_uom.name)}
                    qty = min_qty
        dt = self._get_date_planned(cr, uid, supplierinfo, date_order, context=context).strftime(DEFAULT_SERVER_DATETIME_FORMAT)
        qty = qty or 1.0
        res['value'].update({'date_planned': date_planned or dt})
        if qty:
            res['value'].update({'product_qty': qty})
        # - determine price_unit and taxes_id
        if pricelist_id:
            price = product_pricelist.price_get(cr, uid, [pricelist_id],
                    product.id, qty or 1.0, partner_id or False, {'uom': uom_id, 'date': date_order})[pricelist_id]
            price = product.standard_price
        taxes = account_tax.browse(cr, uid, map(lambda x: x.id, product.supplier_taxes_id))
        fpos = fiscal_position_id and account_fiscal_position.browse(cr, uid, fiscal_position_id, context=context) or False
        taxes_ids = account_fiscal_position.map_tax(cr, uid, fpos, taxes)
        res['value'].update({'price_unit': price, 'taxes_id': taxes_ids})
        netsvc.Logger().notifyChannel("TESSSSSTTTTmmmmmmmmmmmmmmmmmmmmmmetric    -----      ",netsvc.LOG_INFO, '' +'' + str(metric))  
            #netsvc.Logger().notifyChannel("TESSSSSTTTT11111111111111000000000000000000000000000000000AAAA",netsvc.LOG_INFO, '' +'' + str(mmm) + '  ::' + str(qty))
            m = metric / qty
            netsvc.Logger().notifyChannel("TESSSSSTTTTmmmmmmmmmmmmmmmmmmmmmm",netsvc.LOG_INFO, '' +'' + str(m))
        except ZeroDivisionError:
            m = 0.0
        netsvc.Logger().notifyChannel("TESSSSSTTTTAAAAAAAAAAAAAAAaa    -----      ",netsvc.LOG_INFO, '' +'' + str(lll))
        netsvc.Logger().notifyChannel("TESSSSSTTTTBBBBBBBBBBBBBBBB    -----      ",netsvc.LOG_INFO, '' +'' + str(www))
        x = 0.00
        s = 0.00
        valss = 0.00
        netsvc.Logger().notifyChannel("TESSSSSTTTTCCCCCCCCCCCC    -----      ",netsvc.LOG_INFO, '' +'' + str())
        if lll > 0:
            netsvc.Logger().notifyChannel("TESSSSSTTTTDDDDDDDDD    -----      ",netsvc.LOG_INFO, '' +'' + str(lll))
            s = lll * www
            netsvc.Logger().notifyChannel("TESSSSSTTTT111111111111    -----      ",netsvc.LOG_INFO, '' +'' + str(s))
            netsvc.Logger().notifyChannel("TESSSSSTTTT222222222222    -----      ",netsvc.LOG_INFO, '' +'' + str(lll))
            netsvc.Logger().notifyChannel("TESSSSSTTTT333333333333    -----      ",netsvc.LOG_INFO, '' +'' + str(www))      
                valss = s / x
                netsvc.Logger().notifyChannel("TESSSSSTTTT4444444444    -----      ",netsvc.LOG_INFO, '' +'' + str(valss))  
            except ZeroDivisionError:
                s = 0.0
        res['value'].update({'ll': lll,
                            'hh': www,
                            'qou': valss,})
        netsvc.Logger().notifyChannel("TESSSSSTTTT555555555    -----      ",netsvc.LOG_INFO, '' +'' + str(res['value']))    
        return res


 <record id="biz1_purchase_order_line_form" model="ir.ui.view">
        <field name="name">biz1.purchase.order.line.form</field>
        <field name="model">purchase.order.line</field>
        <field name="priority" eval="16"/>
        <field name="inherit_id" ref="purchase.purchase_order_line_form"/>
        <field name="arch" type="xml">
             <xpath expr="//field[@name='product_id']" position="after">
                     <field name = "item_number"/>
                     <field name = "sap_part_number"/>
                    <field name = "rss_l"  on_change = "onchange_rss2(rss_l, rss_w, rss_11,metric_tons,metric_tons2)"/>
                    <field name = "rss_w"  on_change = "onchange_rss2(rss_l, rss_w, rss_11,metric_tons,metric_tons2)"/>
                    <field name = "rss_11"  on_change = "onchange_rss2(rss_l, rss_w, rss_11,metric_tons,metric_tons2)"/> <!-- on_change="onchange_product_id(parent.pricelist_id,product_id,product_qty,product_uom,parent.partner_id,parent.date_order,parent.fiscal_position,date_planned,name,price_unit,rss_l,rss_w,rss_11,context)"/>-->
                    <field name = "rss_li" />
                    <field name = "rss_wi" />
                    <field name = "metric_tons"/>
                    <field name = "production_id"/>
                      <field name = "openerp_part_number"/>
                    <field name = "ll"/>
                    <field name = "hh"/>
                    <field name = "xx"/>
                    <field name = "qou"/>
                    <field name = "metric_tons2" readonly="True" on_change = "onchange_rss2(rss_l, rss_w, rss_11,metric_tons,metric_tons2)"/>

Hi, Can you put xml part from that on_change is called. Means product_id field of sale order line in which you have called on_change from xml.

Emipro Technologies Pvt. Ltd.
on 10/29/14, 2:02 AM

Ludo - 21South

--Ludo - 21South--
| 2 2 5
Zwijndrecht, Netherlands
--Ludo - 21South--


Ludo - 21South
On 10/29/14, 4:32 AM

The result of your super method is stored in "values", but instead you return another variable named "res". Make sure the result of super is in red. Manipulate res througout your method and return it. See if that works.

thanks Ludo for answering every question of mine.. :))

on 10/29/14, 9:19 PM

Hehe, no problem. Ever since your questions started having a clear description they have become much easier to answer.

21south, Ludo - 21South
on 10/30/14, 4:08 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

2 follower(s)


Asked: 10/28/14, 11:12 PM
Seen: 2095 times
Last updated: 3/16/15, 8:10 AM