Do not warn about missing list price when producing a single product
Closes #14146
This commit is contained in:
@@ -552,11 +552,13 @@ class Production(ShipmentAssignMixin, Workflow, ModelSQL, ModelView):
|
||||
input_costs[input_.product] += (
|
||||
Decimal(str(input_.internal_quantity)) * cost_price)
|
||||
outputs = []
|
||||
output_products = set()
|
||||
for output in production.outputs:
|
||||
if (output.to_location.type == 'lost_found'
|
||||
or output.state == 'cancelled'):
|
||||
continue
|
||||
product = output.product
|
||||
output_products.add(product)
|
||||
if input_quantities.get(output.product):
|
||||
cost_price = (
|
||||
input_costs[product] / input_quantities[product])
|
||||
@@ -571,30 +573,31 @@ class Production(ShipmentAssignMixin, Workflow, ModelSQL, ModelView):
|
||||
unit_price * Decimal(str(output.quantity)), cost)
|
||||
else:
|
||||
outputs.append(output)
|
||||
if not (unique_product := len(output_products) == 1):
|
||||
for output in outputs:
|
||||
product = output.product
|
||||
list_price = product.list_price_used
|
||||
if list_price is None:
|
||||
warning_name = Warning.format(
|
||||
'production_missing_list_price', [product])
|
||||
if Warning.check(warning_name):
|
||||
raise CostWarning(warning_name,
|
||||
gettext(
|
||||
'production.'
|
||||
'msg_missing_product_list_price',
|
||||
product=product.rec_name,
|
||||
production=production.rec_name))
|
||||
continue
|
||||
product_price = (Decimal(str(output.quantity))
|
||||
* Uom.compute_price(
|
||||
product.default_uom, list_price, output.unit))
|
||||
prices[output] = product_price
|
||||
sum_ += product_price
|
||||
|
||||
for output in outputs:
|
||||
product = output.product
|
||||
list_price = product.list_price_used
|
||||
if list_price is None:
|
||||
warning_name = Warning.format(
|
||||
'production_missing_list_price', [product])
|
||||
if Warning.check(warning_name):
|
||||
raise CostWarning(warning_name,
|
||||
gettext(
|
||||
'production.msg_missing_product_list_price',
|
||||
product=product.rec_name,
|
||||
production=production.rec_name))
|
||||
continue
|
||||
product_price = (Decimal(str(output.quantity))
|
||||
* Uom.compute_price(
|
||||
product.default_uom, list_price, output.unit))
|
||||
prices[output] = product_price
|
||||
sum_ += product_price
|
||||
|
||||
if not sum_ and production.product:
|
||||
if not sum_ and (unique_product or production.product):
|
||||
prices.clear()
|
||||
for output in outputs:
|
||||
if output.product == production.product:
|
||||
if unique_product or output.product == production.product:
|
||||
quantity = Uom.compute_qty(
|
||||
output.unit, output.quantity,
|
||||
output.product.default_uom, round=False)
|
||||
|
||||
@@ -25,7 +25,6 @@ Create main product::
|
||||
>>> template.default_uom = unit
|
||||
>>> template.type = 'goods'
|
||||
>>> template.producible = True
|
||||
>>> template.list_price = Decimal(0)
|
||||
>>> template.save()
|
||||
>>> product, = template.products
|
||||
|
||||
|
||||
Reference in New Issue
Block a user