From 464ca481279f8c53b9a64c81d3cdee7647ca531c Mon Sep 17 00:00:00 2001 From: snt Date: Wed, 25 Feb 2026 17:45:45 +0100 Subject: [PATCH] =?UTF-8?q?[IMP]=20website=5Fsale=5Faplicoop:=20quantity?= =?UTF-8?q?=5Fstep=20multiling=C3=BCe=20usando=20XML=20IDs=20de=20UoM.=20D?= =?UTF-8?q?etecta=20peso,=20volumen,=20longitud,=20superficie=20independie?= =?UTF-8?q?nte=20del=20idioma.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/website_sale.py | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/website_sale_aplicoop/controllers/website_sale.py b/website_sale_aplicoop/controllers/website_sale.py index 0510e30..3568580 100644 --- a/website_sale_aplicoop/controllers/website_sale.py +++ b/website_sale_aplicoop/controllers/website_sale.py @@ -416,16 +416,44 @@ class AplicoopWebsiteSale(WebsiteSale): # Safety: Get UoM category name (use sudo for read-only display to avoid ACL issues) uom_category_name = "" - quantity_step = 1 # Default step for integer quantities + quantity_step = 1 # Default step for integer quantities (Units) + if product.uom_id: uom = product.uom_id.sudo() if uom.category_id: uom_category_name = uom.category_id.sudo().name or "" - # Use 0.1 step for weight-based products (kg, g, etc.) - # This allows fractional quantities for bulk products - category_name_lower = uom_category_name.lower() - if "weight" in category_name_lower or "kg" in category_name_lower: - quantity_step = 0.1 + + # Use XML IDs to detect fractional UoM categories (multilingual robust) + # This works regardless of translation/language + try: + # Get external ID for the UoM category + ir_model_data = request.env["ir.model.data"].sudo() + external_id = ir_model_data.search( + [ + ("model", "=", "uom.category"), + ("res_id", "=", uom.category_id.id), + ], + limit=1, + ) + + if external_id: + # Standard Odoo UoM categories requiring fractional step + fractional_categories = [ + "uom.product_uom_categ_kgm", # Weight (kg, g, ton, etc.) + "uom.product_uom_categ_vol", # Volume (L, m³, etc.) + "uom.uom_categ_length", # Length/Distance (m, km, etc.) + "uom.uom_categ_surface", # Surface (m², ha, etc.) + ] + full_xmlid = f"{external_id.module}.{external_id.name}" + if full_xmlid in fractional_categories: + quantity_step = 0.1 + except Exception as e: + # Fallback to integer step on error + _logger.warning( + "_prepare_product_display_info: Error detecting UoM category XML ID for product %s: %s", + product.id, + str(e), + ) return { "display_price": price_safe,