Skip to Content
Menu
Musisz się zarejestrować, aby móc wchodzić w interakcje z tą społecznością.
To pytanie dostało ostrzeżenie
1 Odpowiedz
4121 Widoki

 

 

 

I add a field for price in WAREHOUSE -> TRACEABILITY -> SERIAL NUMBER and i want this price to be display in SALE ORDER LINE. Once the user select the SERIAL NUMBER it will display the specific price that came from the WAREHOUSE. There is no errors occur but i does not display the price. how will  i going to fix this onchange function..

Here's is my code:

 

def price_get_multi(self, cr, uid, pricelist_ids, products_by_qty_by_partner, serial=None, context=None):
       """multi products 'price_get'.
          @param pricelist_ids:
          @param products_by_qty:
          @param partner:
          @param context: {
            'date': Date of the pricelist (%Y-%m-%d),}
          @return: a dict of dict with product_id as key and a dict 'price by pricelist' as value
       """

       def _create_parent_category_list(id, lst):
           if not id:
               return []
           parent = product_category_tree.get(id)
           if parent:
               lst.append(parent)
               return _create_parent_category_list(parent, lst)
           else:
               return lst
       # _create_parent_category_list

       if context is None:
           context = {}

       date = time.strftime('%Y-%m-%d')
       if 'date' in context:
           date = context['date']

       currency_obj = self.pool.get('res.currency')
       product_obj = self.pool.get('product.product')
       product_category_obj = self.pool.get('product.category')
       product_uom_obj = self.pool.get('product.uom')
       supplierinfo_obj = self.pool.get('product.supplierinfo')
       price_type_obj = self.pool.get('product.price.type')
       

       # product.pricelist.version:
       if not pricelist_ids:
           pricelist_ids = self.pool.get('product.pricelist').search(cr, uid, [], context=context)

       pricelist_version_ids = self.pool.get('product.pricelist.version').search(cr, uid, [
                                                       ('pricelist_id', 'in', pricelist_ids),
                                                       '|',
                                                       ('date_start', '=', False),
                                                       ('date_start', '<=', date),
                                                       '|',
                                                       ('date_end', '=', False),
                                                       ('date_end', '>=', date),
                                                   ])
       if len(pricelist_ids) != len(pricelist_version_ids):
           raise osv.except_osv(_('Warning!'), _("At least one pricelist has no active version !\nPlease create or activate one."))

       # product.product:
       product_ids = [i[0] for i in products_by_qty_by_partner]
       #products = dict([(item['id'], item) for item in product_obj.read(cr, uid, product_ids, ['categ_id', 'product_tmpl_id', 'uos_id', 'uom_id'])])
       products = product_obj.browse(cr, uid, product_ids, context=context)
       products_dict = dict([(item.id, item) for item in products])

       # product.category:
       product_category_ids = product_category_obj.search(cr, uid, [])

Awatar
Odrzuć
Najlepsza odpowiedź

There are 2 paths to take. If you want only the price to show then perhaps the quickest way is a readonly related field. If you want calculations then your suggestion of the on_change is probably best indeed.

What return do you send when the on_change function is called? Do you get to the on_change function (for example, when you put in a print statement, does it show on the commandline)? 

Furthermore, do note that the product also has the on_change method attached. That method also checks for prices, but based on pricelist and currency and so forth. I think you will be better of intercepting/overriding the onchange_product_id for sale order and let it recalculate based on the serial number.

Awatar
Odrzuć