diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 3b06924cd99..26b8861bae2 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -328,18 +328,32 @@ class purchase_order_line(osv.osv): if partner_id: lang=self.pool.get('res.partner').read(cr, uid, [partner_id])[0]['lang'] context={'lang':lang} - price = self.pool.get('product.pricelist').price_get(cr,uid,[pricelist], product, qty or 1.0, partner_id, {'uom': uom})[pricelist] + prod = self.pool.get('product.product').read(cr, uid, [product], ['supplier_taxes_id','name','seller_delay','uom_po_id','description_purchase'])[0] + prod_uom_po = prod['uom_po_id'][0] + if not uom: + uom = prod_uom_po + price = self.pool.get('product.pricelist').price_get(cr,uid,[pricelist], product, qty or 1.0, partner_id, {'uom': uom})[pricelist] dt = (DateTime.now() + DateTime.RelativeDateTime(days=prod['seller_delay'] or 0.0)).strftime('%Y-%m-%d') prod_name = self.pool.get('product.product').name_get(cr, uid, [product], context=context)[0][1] - res = {'value': {'price_unit': price, 'name':prod_name, 'taxes_id':prod['supplier_taxes_id'], 'date_planned': dt,'notes':prod['description_purchase']}} + + res = {'value': {'price_unit': price, 'name':prod_name, 'taxes_id':prod['supplier_taxes_id'], 'date_planned': dt,'notes':prod['description_purchase'], 'product_uom': uom}} domain = {} - if not uom: - res['value']['product_uom'] = prod['uom_po_id'][0] - if res['value']['product_uom']: - res2 = self.pool.get('product.uom').read(cr, uid, [res['value']['product_uom']], ['category_id']) - if res2 and res2[0]['category_id']: - domain = {'product_uom':[('category_id','=',res2[0]['category_id'][0])]} + + res2 = self.pool.get('product.uom').read(cr, uid, [uom], ['category_id']) + res3 = self.pool.get('product.uom').read(cr, uid, [prod_uom_po], ['category_id']) + domain = {'product_uom':[('category_id','=',res2[0]['category_id'][0])]} + if res2[0]['category_id'] != res3[0]['category_id']: + raise osv.except_osv('Wrong Product UOM !', 'You have to select a product UOM in the same category than the purchase UOM of the product') + res['domain'] = domain return res + + def product_uom_change(self, cr, uid, ids, pricelist, product, qty, uom, partner_id): + res = self.product_id_change(cr, uid, ids, pricelist, product, qty, uom, partner_id) + if 'product_uom' in res['value']: + del res['value']['product_uom'] + if not uom: + res['value']['price_unit'] = 0.0 + return res purchase_order_line() diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml index 1c9b2a04985..a28c829c749 100644 --- a/addons/purchase/purchase_view.xml +++ b/addons/purchase/purchase_view.xml @@ -131,7 +131,7 @@ - +