From d469a13b28dea202ae32faf3ea693c19a727478a Mon Sep 17 00:00:00 2001 From: lucianfilote-photowall Date: Tue, 19 May 2026 11:23:54 +0200 Subject: [PATCH] Use discount_amount_adjusted in v_funnel_order_rows view (#562) --- migrations/000.634.sql | 97 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 migrations/000.634.sql diff --git a/migrations/000.634.sql b/migrations/000.634.sql new file mode 100644 index 0000000..e54f33a --- /dev/null +++ b/migrations/000.634.sql @@ -0,0 +1,97 @@ +DROP VIEW IF EXISTS public.v_funnel_order_rows_fixed_discount_amount; + +DROP VIEW IF EXISTS public.v_funnel_order_rows; + +CREATE VIEW public.v_funnel_order_rows +AS +WITH discounts AS ( + SELECT s.id, + s.order_id, + s.discount, + s.discount_cc, + s.discount_code, + s.discount_sale + FROM ( SELECT rows.id, + rows.order_id, + CASE + WHEN rows.sub_type = ANY (ARRAY['contract_customer_discount'::order_row_sub_type, 'discount_code'::order_row_sub_type]) THEN 0::numeric + WHEN rows.type = 'refund'::order_row_type THEN COALESCE((rows.data ->> 'discount_amount_adjusted'::text)::numeric, 0::numeric) + ELSE 0::numeric - COALESCE((rows.data ->> 'discount_amount'::text)::numeric, 0::numeric) + END AS discount, + CASE + WHEN rows.sub_type = ANY (ARRAY['contract_customer_discount'::order_row_sub_type, 'discount_code'::order_row_sub_type]) THEN 0::numeric + WHEN (EXISTS ( SELECT 1 + FROM order_rows s_1 + WHERE s_1.order_id = rows.order_id AND s_1.sub_type = 'contract_customer_discount'::order_row_sub_type)) THEN + CASE + WHEN rows.type = 'refund'::order_row_type THEN COALESCE((rows.data ->> 'discount_amount_adjusted'::text)::numeric, 0::numeric) + ELSE 0::numeric - COALESCE((rows.data ->> 'discount_amount'::text)::numeric, 0::numeric) + END + ELSE 0::numeric + END AS discount_cc, + CASE + WHEN rows.sub_type = ANY (ARRAY['contract_customer_discount'::order_row_sub_type, 'discount_code'::order_row_sub_type]) THEN 0::numeric + WHEN (EXISTS ( SELECT 1 + FROM order_rows s_1 + WHERE s_1.order_id = rows.order_id AND s_1.sub_type = 'discount_code'::order_row_sub_type)) THEN + CASE + WHEN rows.type = 'refund'::order_row_type THEN COALESCE((rows.data ->> 'discount_amount_adjusted'::text)::numeric, 0::numeric) + ELSE 0::numeric - COALESCE((rows.data ->> 'discount_amount'::text)::numeric, 0::numeric) + END + ELSE 0::numeric + END AS discount_code, + CASE + WHEN rows.type = 'refund'::order_row_type THEN 0::numeric + ELSE 0::numeric - abs(COALESCE(( SELECT abs(rows.price) - (((rows.data -> 'applied_sale'::text) ->> 'original_unit_price_excl_vat'::text)::numeric)), 0::numeric)) + END AS discount_sale + FROM order_rows rows) s +) +SELECT r.id, + r.order_id, + r.inserted, + r.type, + o.customer_type, + o.market, + pp.path, + pp.publishing_date, + pp.ref1, + pp.ref2, + COALESCE(((r.data ->> 'width_mm'::text)::numeric)::integer / 10, (r.data ->> 'width'::text)::integer) AS width, + COALESCE(((r.data ->> 'height_mm'::text)::numeric)::integer / 10, (r.data ->> 'height'::text)::integer) AS height, + r.sub_type, + r.status, + r.price, + r.commission_amount, + r.external_status, + r.data ->> 'printId'::text AS print_id, + COALESCE(r.data ->> 'paintId'::text, r.data ->> 'productId'::text) AS product_id, + r.data ->> 'material'::text AS material, + r.data ->> 'artNo'::text AS artno, + r.data ->> 'designer'::text AS designer, + (r.data ->> 'inquiryid'::text)::integer AS inquiry_id, + d.discount, + d.discount_cc, + d.discount_code, + d.discount_sale, + CASE r.type + WHEN 'refund'::order_row_type THEN NULL::text + ELSE r.data ->> 'segment'::text +END AS segment, + CASE r.type + WHEN 'refund'::order_row_type THEN NULL::numeric + ELSE (r.data ->> 'segment_price'::text)::numeric +END AS segment_price, + r.data ->> 'reprinted_order_row_id'::text AS reprinted_order_row_id, + CASE + WHEN r.sub_type = ANY (ARRAY['wall_paint'::order_row_sub_type, 'paint_card_sample'::order_row_sub_type]) THEN r.data ->> 'name'::text + ELSE NULL::text +END AS paint_name, + r.data ->> 'paintLiters'::text AS paint_liters, + r.data ->> 'paintColor'::text AS paint_ncs, + r.data ->> 'external_product_id' AS external_product_id + FROM order_rows r + JOIN orders o ON r.order_id = o.id + LEFT JOIN "product-products" pp ON ((r.data ->> 'productId'::text)::integer) = pp.productid + LEFT JOIN discounts d ON r.id = d.id; + +GRANT SELECT ON TABLE public.v_funnel_order_rows TO funnel;