Criptomart/red-supermercados-coop#37 purchase_order_product_recommendation_supermarket: round qty_to_order when product_uom_categ_unit

This commit is contained in:
Luis 2026-02-17 17:36:13 +01:00
parent a1f73dabe7
commit 25faab83bb

View file

@ -174,13 +174,21 @@ class PurchaseOrderRecommendationSupermarketWizard(models.TransientModel):
if days_with_stock != 0
else 1
)
uom_categ_unit = self.env.ref(
"uom.product_uom_categ_unit", raise_if_not_found=False
)
if self.order_days != 0:
qty_to_order = max(
0,
(self.order_days * res["units_avg_delivered"])
- res["units_virtual_available"],
)
qty_calc = (self.order_days * res["units_avg_delivered"]) - res[
"units_virtual_available"
]
qty_to_order = max(0, qty_calc)
# Round only if the UoM category is 'uom.product_uom_categ_unit'
if (
product_id.uom_po_id
and uom_categ_unit
and product_id.uom_po_id.category_id.id == uom_categ_unit.id
):
qty_to_order = math.ceil(qty_to_order)
# Force a minimum suggested quantity when forecast <= 0 and product configured
# We apply this BEFORE packaging adjustment so packages logic can upscale it.
@ -198,7 +206,15 @@ class PurchaseOrderRecommendationSupermarketWizard(models.TransientModel):
packaging_qty = product_id.packaging_ids[:1].qty
if packaging_qty:
qty_to_order = math.ceil(qty_to_order / packaging_qty) * packaging_qty
res["units_included"] = qty_to_order
# Round only if the UoM category is 'uom.product_uom_categ_unit'
if (
product_id.uom_po_id
and uom_categ_unit
and product_id.uom_po_id.category_id.id == uom_categ_unit.id
):
res["units_included"] = math.ceil(qty_to_order)
else:
res["units_included"] = qty_to_order
# Get quantities scrapped
domain = self._get_move_line_domain(product_id, src="internal", dst="inventory")