* Initial commit * WIP * Cleanup * Cleanup * move * moved back * Refactor query * Do not handle specific discounts for refund rows * Make SELECT CASE handling more consise * Bump migration version before release --------- Co-authored-by: Arwid Thornström <arwidt@gmail.com>
87 lines
4.0 KiB
SQL
87 lines
4.0 KiB
SQL
-- View: public.v_funnel_order_rows
|
|
|
|
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_cc,
|
|
s.discount_code,
|
|
s.discount_sale
|
|
FROM ( SELECT rows.id,
|
|
rows.order_id,
|
|
CASE
|
|
WHEN rows.type = 'refund'::order_row_type THEN 0::numeric
|
|
WHEN (EXISTS ( SELECT 1
|
|
FROM order_rows s_1
|
|
WHERE s_1.sub_type = 'contract_customer_discount'::order_row_sub_type AND s_1.order_id = rows.order_id)) THEN COALESCE((rows.data ->> 'discount_amount'::text)::numeric, 0::numeric)
|
|
ELSE 0::numeric
|
|
END AS discount_cc,
|
|
CASE
|
|
WHEN rows.type = 'refund'::order_row_type THEN 0::numeric
|
|
WHEN NOT (EXISTS ( SELECT 1
|
|
FROM order_rows s_1
|
|
WHERE s_1.sub_type = 'contract_customer_discount'::order_row_sub_type AND s_1.order_id = rows.order_id)) THEN COALESCE((rows.data ->> 'discount_amount'::text)::numeric, 0::numeric)
|
|
ELSE 0::numeric
|
|
END AS discount_code,
|
|
CASE
|
|
WHEN rows.type = 'refund'::order_row_type THEN 0::numeric
|
|
ELSE 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
|
|
WHERE NOT (s.discount_cc + s.discount_code + s.discount_sale) = 0::numeric
|
|
)
|
|
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,
|
|
CASE r.type
|
|
WHEN 'refund'::order_row_type THEN COALESCE((r.data ->> 'discount_amount'::text)::numeric, 0::numeric)
|
|
ELSE 0::numeric - COALESCE((r.data ->> 'discount_amount'::text)::numeric, 0::numeric)
|
|
END AS discount,
|
|
COALESCE(0::numeric - d.discount_cc, 0::numeric) AS discount_cc,
|
|
COALESCE(0::numeric - d.discount_code, 0::numeric) AS discount_code,
|
|
COALESCE(0::numeric - d.discount_sale, 0::numeric) AS 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
|
|
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;
|