Do not warn about missing list price when producing a single product

Closes #14146
This commit is contained in:
Cédric Krier
2025-08-05 15:37:15 +02:00
parent 3925faca88
commit ee6f06bea4
2 changed files with 24 additions and 22 deletions
+24 -21
View File
@@ -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