diff --git a/addons/product/product.py b/addons/product/product.py index f37f3aefaa4..b3fa3c594f4 100644 --- a/addons/product/product.py +++ b/addons/product/product.py @@ -654,7 +654,7 @@ class product_supplierinfo(osv.osv): return res and res[0] or False _columns = { - 'name' : fields.many2one('res.partner', 'Supplier', required=True, ondelete='cascade', help="Supplier of this product"), + 'name' : fields.many2one('res.partner', 'Supplier', required=True,domain = [('supplier','=',True)], ondelete='cascade', help="Supplier of this product"), 'product_name': fields.char('Supplier Product Name', size=128, help="This supplier's product name will be used when printing a request for quotation. Keep empty to use the internal one."), 'product_code': fields.char('Supplier Product Code', size=64, help="This supplier's product code will be used when printing a request for quotation. Keep empty to use the internal one."), 'sequence' : fields.integer('Sequence', help="Assigns the priority to the list of product supplier."), diff --git a/addons/product/product_demo.xml b/addons/product/product_demo.xml index 92d0df088ef..42fc157778e 100644 --- a/addons/product/product_demo.xml +++ b/addons/product/product_demo.xml @@ -1,10 +1,10 @@ - - + Sellable @@ -55,37 +55,37 @@ Marketable Products - - + + Shelves - - + + Other Products - - + + Raw Materials - - + + Marketable Services - - + + Misc - + Box 20x20x40 box @@ -94,11 +94,11 @@ Box 30x40x60 box - + - + 38.25 25.5 @@ -126,6 +126,7 @@ 2.0 Basic PC + product @@ -138,6 +139,7 @@ make_to_order 18.0 Basic+ PC (assembly on order) + product @@ -149,6 +151,7 @@ 3.0 Medium PC + product @@ -160,6 +163,7 @@ make_to_order Customizable PC + product end @@ -171,6 +175,7 @@ 1.0 Mainboard ASUStek A7N8X + product @@ -181,6 +186,7 @@ 1.0 Mainboard ASUStek A7V8X-X + product draft @@ -192,6 +198,7 @@ 1.0 Processor AMD Athlon XP 1800+ + product @@ -202,6 +209,7 @@ 1.0 Processor AMD Athlon XP 2200+ + product @@ -212,6 +220,7 @@ 1.0 HDD Seagate 7200.8 80GB + product @@ -222,6 +231,7 @@ 1.0 HDD Seagate 7200.8 120GB + product @@ -233,6 +243,7 @@ make_to_order 1.0 HDD Seagate 7200.8 160GB + product @@ -243,6 +254,7 @@ 1.0 Regular case fan 80mm + product @@ -253,6 +265,7 @@ 1.0 Silent fan + product @@ -265,6 +278,7 @@ 1.0 Regular processor config make_to_order + product @@ -275,6 +289,7 @@ 1.0 DDR 256MB PC400 + product @@ -285,6 +300,7 @@ 1.0 DDR 512MB PC400 + product @@ -297,6 +313,7 @@ make_to_order 1.0 High speed processor config + product @@ -307,6 +324,7 @@ 1.0 ATX Mid-size Tower + product @@ -319,6 +337,7 @@ make_to_order 1.0 HDD on demand + product @@ -331,6 +350,7 @@ RAM on demand + product @@ -341,6 +361,7 @@ Processor on demand + product @@ -352,6 +373,7 @@ Complete PC With Peripherals + product @@ -362,6 +384,7 @@ Keyboard AZERTY + product @@ -371,6 +394,7 @@ Mouse + product @@ -381,6 +405,7 @@ Kit Keyboard + Mouse + product @@ -396,9 +421,10 @@ Shelf of 100cm + product - + SHE200 produce @@ -408,6 +434,7 @@ Shelf of 200cm + product @@ -419,6 +446,7 @@ Wood 2mm + product @@ -452,12 +480,13 @@ REST produce - consu + product 1.0 1.0 Restaurant Expenses + product @@ -467,7 +496,7 @@ service - + 20.0 @@ -484,6 +513,7 @@ Rear Panel SHE100 + product @@ -496,6 +526,7 @@ Rear Panel SHE200 + product @@ -508,6 +539,7 @@ Side Panel + product @@ -520,6 +552,7 @@ Rack 100cm + product @@ -532,6 +565,7 @@ Rack 200cm + product @@ -544,6 +578,7 @@ Assembly Section + product @@ -556,6 +591,7 @@ Wood Lintel 4m + product @@ -567,6 +603,7 @@ Metal Cleats + product @@ -574,7 +611,7 @@ HOT produce - consu + product 1.0 1.0 @@ -593,6 +630,7 @@ KIT Shelf of 100cm + product diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index 5291df7d258..d93a1ec15b1 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -646,6 +646,11 @@ class purchase_order_line(osv.osv): return {'value': {'price_unit': price_unit or 0.0, 'name': name or '', 'notes': notes or'', 'product_uom' : uom or False}, 'domain':{'product_uom':[]}} prod= self.pool.get('product.product').browse(cr, uid, product) + if prod.product_tmpl_id.seller_ids: + seller_get_id = prod.product_tmpl_id.seller_ids[0].name.id + else: + seller_get_id = False + lang=False if partner_id: lang=self.pool.get('res.partner').read(cr, uid, partner_id, ['lang'])['lang'] @@ -675,8 +680,15 @@ class purchase_order_line(osv.osv): 'date': date_order, })[pricelist] dt = (datetime.now() + relativedelta(days=int(seller_delay) or 0.0)).strftime('%Y-%m-%d %H:%M:%S') - prod_name = self.pool.get('product.product').name_get(cr, uid, [prod.id])[0][1] - + if seller_get_id == partner_id: + prod_suppl_name = self.pool.get('product.product').browse(cr, uid, prod.id).seller_ids[0].product_name + prod_suppl_code = self.pool.get('product.product').browse(cr, uid, prod.id).seller_ids[0].product_code + if prod_suppl_name == False or prod_suppl_code == False: + prod_name = self.pool.get('product.product').name_get(cr, uid, [prod.id])[0][1] + else: + prod_name= '[' + prod_suppl_code + '] '+ prod_suppl_name + else: + prod_name = self.pool.get('product.product').name_get(cr, uid, [prod.id])[0][1] res = {'value': {'price_unit': price, 'name': name or prod_name, 'taxes_id':map(lambda x: x.id, prod.supplier_taxes_id), diff --git a/addons/purchase/purchase_demo.xml b/addons/purchase/purchase_demo.xml index 5b611b1cfdb..938bbd7bb57 100644 --- a/addons/purchase/purchase_demo.xml +++ b/addons/purchase/purchase_demo.xml @@ -5,17 +5,17 @@ - + - - + + - + - - + + diff --git a/addons/stock/stock.py b/addons/stock/stock.py index bc87ec7cfe6..0c88c12bee7 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -632,7 +632,7 @@ class stock_picking(osv.osv): 'move_lines': fields.one2many('stock.move', 'picking_id', 'Internal Moves', states={'done': [('readonly', True)], 'cancel': [('readonly', True)]}), 'auto_picking': fields.boolean('Auto-Picking'), 'address_id': fields.many2one('res.partner.address', 'Address', help="Address of partner"), - 'partner_id': fields.related('address_id','partner_id',type='many2one',relation='res.partner',string='Partner'), + 'partner_id': fields.related('address_id','partner_id',type='many2one',relation='res.partner',string='Partner',store=True), 'invoice_state': fields.selection([ ("invoiced", "Invoiced"), ("2binvoiced", "To Be Invoiced"),