-- 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;