[FIX] purchase, product: clean messages on price per supplier
This commit is contained in:
+16
-30
@@ -249,7 +249,6 @@ class product_pricelist(osv.osv):
|
||||
for product, qty, partner in products_by_qty_by_partner:
|
||||
results[product.id] = 0.0
|
||||
rule_id = False
|
||||
price = False
|
||||
|
||||
# Final unit price is computed according to `qty` in the `qty_uom_id` UoM.
|
||||
# An intermediary unit price may be computed according to a different UoM, in
|
||||
@@ -266,6 +265,9 @@ class product_pricelist(osv.osv):
|
||||
# Ignored - incompatible UoM in context, use default product UoM
|
||||
pass
|
||||
|
||||
price_type = 'standard_price' if pricelist.type == 'purchase' else 'list_price'
|
||||
# if Public user try to access standard price from website sale, need to call _price_get.
|
||||
price = product_obj._price_get(cr, uid, [product], price_type, context=context)[product.id] or False
|
||||
for rule in items:
|
||||
if rule.min_quantity and qty_in_product_uom < rule.min_quantity:
|
||||
continue
|
||||
@@ -280,15 +282,6 @@ class product_pricelist(osv.osv):
|
||||
if rule.product_id and product.id != rule.product_id.id:
|
||||
continue
|
||||
|
||||
if rule.categ_id:
|
||||
cat = product.categ_id
|
||||
while cat:
|
||||
if cat.id == rule.categ_id.id:
|
||||
break
|
||||
cat = cat.parent_id
|
||||
if not cat:
|
||||
continue
|
||||
|
||||
if rule.base == -1:
|
||||
if rule.base_pricelist_id:
|
||||
price_tmp = self._price_get_multi(cr, uid,
|
||||
@@ -300,24 +293,6 @@ class product_pricelist(osv.osv):
|
||||
ptype_src, pricelist.currency_id.id,
|
||||
price_tmp, round=False,
|
||||
context=context)
|
||||
elif rule.base == -2:
|
||||
seller = False
|
||||
for seller_id in product.seller_ids:
|
||||
if (not partner) or (seller_id.name.id != partner):
|
||||
continue
|
||||
seller = seller_id
|
||||
if not seller:
|
||||
continue
|
||||
if seller:
|
||||
qty_in_seller_uom = qty
|
||||
seller_uom = seller.product_uom.id
|
||||
if qty_uom_id != seller_uom:
|
||||
qty_in_seller_uom = product_uom_obj._compute_qty(cr, uid, qty_uom_id, qty, to_uom_id=seller_uom)
|
||||
price_uom_id = seller_uom
|
||||
for line in seller.pricelist_ids:
|
||||
if line.min_quantity <= qty_in_seller_uom:
|
||||
price = line.price
|
||||
|
||||
else:
|
||||
if rule.base not in price_types:
|
||||
price_types[rule.base] = price_type_obj.browse(cr, uid, int(rule.base))
|
||||
@@ -330,6 +305,16 @@ class product_pricelist(osv.osv):
|
||||
price_type.currency_id.id, pricelist.currency_id.id,
|
||||
product_obj._price_get(cr, uid, [product], price_type.field, context=context)[product.id],
|
||||
round=False, context=context)
|
||||
for seller in product.seller_ids:
|
||||
partner = partner.id if partner and not isinstance(partner, int) else partner
|
||||
if seller.name.id == partner:
|
||||
qty_in_seller = qty
|
||||
seller_uom = seller.product_uom and seller.product_uom.id or False
|
||||
if qty_uom_id != seller_uom:
|
||||
qty_in_seller = product_uom_obj._compute_qty(cr, uid, qty_uom_id, qty, to_uom_id=seller_uom)
|
||||
for line in seller.pricelist_ids:
|
||||
if line.min_quantity <= qty_in_seller:
|
||||
price = line.price
|
||||
|
||||
if price is not False:
|
||||
price_limit = price
|
||||
@@ -437,7 +422,6 @@ class product_pricelist_item(osv.osv):
|
||||
result.append((line.id, line.name))
|
||||
|
||||
result.append((-1, _('Other Pricelist')))
|
||||
result.append((-2, _('Supplier Prices on the product form')))
|
||||
return result
|
||||
|
||||
# Added default function to fetch the Price type Based on Pricelist type.
|
||||
@@ -492,7 +476,9 @@ class product_pricelist_item(osv.osv):
|
||||
"Expressed in the default UoM of the product."
|
||||
),
|
||||
'sequence': fields.integer('Sequence', required=True, help="Gives the order in which the pricelist items will be checked. The evaluation gives highest priority to lowest sequence and stops as soon as a matching item is found."),
|
||||
'base': fields.selection(_price_field_get, 'Based on', required=True, size=-1, help="Base price for computation."),
|
||||
'base': fields.selection(_price_field_get, 'Based on', required=True,
|
||||
size=-1, # here use size=-1 to store the values as integers
|
||||
help='Base price for computation. \n Public Price: The base price will be the Sale/public Price. \n Supplier Section on Product or Cost Price : The base price will be the supplier price if it is set, otherwise it will be the cost price. \n Other Pricelist : Computation of the base price based on another Pricelist.'),
|
||||
'base_pricelist_id': fields.many2one('product.pricelist', 'Other Pricelist'),
|
||||
|
||||
'price_surcharge': fields.float('Price Surcharge',
|
||||
|
||||
@@ -535,7 +535,7 @@ class product_template(osv.osv):
|
||||
'standard_price': fields.property(type = 'float', digits_compute=dp.get_precision('Product Price'),
|
||||
help="Cost price of the product template used for standard stock valuation in accounting and used as a base price on purchase orders. "
|
||||
"Expressed in the default unit of measure of the product.",
|
||||
groups="base.group_user", string="Cost Price"),
|
||||
string="Cost Price"),
|
||||
'volume': fields.float('Volume', help="The volume in m3."),
|
||||
'weight': fields.float('Gross Weight', digits_compute=dp.get_precision('Stock Weight'), help="The gross weight in Kg."),
|
||||
'weight_net': fields.float('Net Weight', digits_compute=dp.get_precision('Stock Weight'), help="The net weight in Kg."),
|
||||
|
||||
@@ -198,7 +198,7 @@ parameter) will see those record just disappear.
|
||||
<field name="field">list_price</field>
|
||||
</record>
|
||||
<record id="standard_price" model="product.price.type">
|
||||
<field name="name">Cost Price</field>
|
||||
<field name="name">Supplier Section on Product or Cost Price</field>
|
||||
<field name="field">standard_price</field>
|
||||
</record>
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
price_min_margin: 2
|
||||
price_max_margin: 5
|
||||
product_id: product_product_6
|
||||
base: -2
|
||||
base: !eval (ref('product.standard_price'))
|
||||
-
|
||||
!record {model: pricelist.partnerinfo, id: supplier_pricelist0_product_pc2}:
|
||||
suppinfo_id: product_supplierinfo_2
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
price_min_margin: 2
|
||||
price_max_margin: 5
|
||||
product_id: product_fifo_icecream
|
||||
base: -2
|
||||
base: !eval (ref('product.standard_price'))
|
||||
-
|
||||
Purchase order in usd
|
||||
-
|
||||
|
||||
Reference in New Issue
Block a user