From c539a9b214b1dbc93d3060e31e5b2f113dad43ff Mon Sep 17 00:00:00 2001 From: Pierre Date: Mon, 19 Dec 2022 13:41:43 +0000 Subject: [PATCH] [FIX] event_sale: division by 0 on price When you have some order lines linked to a registration that have a 'product_uom_qty' equals to 0, you get a division by 0 error when you try to get the 'sale_price' and the 'sale_price_untaxed'. To avoid such issue, we are now checking if the 'product_uom_qty' is not equals to 0 to avoid a division by 0. In the case it is equal to 0, we consider that the 'sale_price' and 'sale_price_untaxed' are equal to 0 as nothing has been paid for this registration. To reproduce you can do like this: - create invite someone to your event - create a SO with qty 1 and the price - validate the SO and select the registration - set product_uom_qty to 0 in the SO - open the event dashboard (and remove the filter to get your event) closes odoo/odoo#108653 X-original-commit: f0e8d30ac425241f42cbf7412b072502696d09c2 Signed-off-by: Masereel Pierre --- addons/event_sale/report/event_sale_report.py | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/addons/event_sale/report/event_sale_report.py b/addons/event_sale/report/event_sale_report.py index ebdff9d2c82..92d034e845c 100644 --- a/addons/event_sale/report/event_sale_report.py +++ b/addons/event_sale/report/event_sale_report.py @@ -100,12 +100,20 @@ SELECT sale_order.user_id AS sale_order_user_id, sale_order_line.product_id AS product_id, - sale_order_line.price_total - / CASE COALESCE(sale_order.currency_rate, 0) WHEN 0 THEN 1.0 ELSE sale_order.currency_rate END - / sale_order_line.product_uom_qty AS sale_price, - sale_order_line.price_subtotal - / CASE COALESCE(sale_order.currency_rate, 0) WHEN 0 THEN 1.0 ELSE sale_order.currency_rate END - / sale_order_line.product_uom_qty AS sale_price_untaxed, + CASE + WHEN sale_order_line.product_uom_qty = 0 THEN 0 + ELSE + sale_order_line.price_total + / CASE COALESCE(sale_order.currency_rate, 0) WHEN 0 THEN 1.0 ELSE sale_order.currency_rate END + / sale_order_line.product_uom_qty + END AS sale_price, + CASE + WHEN sale_order_line.product_uom_qty = 0 THEN 0 + ELSE + sale_order_line.price_subtotal + / CASE COALESCE(sale_order.currency_rate, 0) WHEN 0 THEN 1.0 ELSE sale_order.currency_rate END + / sale_order_line.product_uom_qty + END AS sale_price_untaxed, CASE WHEN sale_order_line.price_total = 0 THEN 'free' WHEN event_registration.is_paid THEN 'paid'