join to sleeves or bundles

This commit is contained in:
Paul Trowbridge 2021-01-12 15:57:00 -05:00
parent fee40dcb87
commit e040132bce
1 changed files with 113 additions and 110 deletions

View File

@ -20,17 +20,17 @@ vu AS (
,COALESCE(ACCS ,'') ACCS
,COALESCE(SUFF,'') SUFFIX
----price 1 -----------------
,PCKG PCKG1
,jsonb_build_array(PCKG)||CASE WHEN pckg = 'BDL' THEN '["SLV"]' ELSE '[]' END::jsonb PCKG1
,1 VOLL1
,PCKG VOL1_UOM
,PACK VOL1_PRICE
----price 2 -----------------
,PCKG PCKG2
,jsonb_build_array(PCKG)||CASE WHEN pckg = 'BDL' THEN '["SLV"]' ELSE '[]' END::jsonb PCKG2
,1 VOLl2
,'PLT' VOL2_UOM
,MP VOL2_PRICE
----price 3 -----------------
,'PLT' PCKG3
,jsonb_build_array('PLT') PCKG3
,1 VOLL3
,'PLT' VOL3_UOM
,BULK VOL3_PRICE
@ -120,6 +120,7 @@ GROUP BY
WHERE
pc.vol3_price IS NOT null
)
--SELECT * FROM unpivot WHERE pckg ? 'SLV'
--SELECT DISTINCT pckg FROM unpivot;
--link to actual part numbers, tag the sequence so a single item can be chosen-----
,items_init AS (
@ -143,118 +144,120 @@ FROM
unpivot up
----make all the BDL units of measure BDL and also SLV with intentional duplication
----becusae some defaults units on itemm have SLV and not BDL, but still need a join
LEFT OUTER JOIN vu ON
vu.bdl = up.pckg
--LEFT OUTER JOIN vu ON
-- vu.bdl = up.pckg
LEFT OUTER JOIN RLARP.ITEMMv i ON
i.STLC = up.stlc
--AND i.COLTIER = pc.coltier
AND i.uomp ? vu.uom
--basically the same as does the core list package match the item master package
--the item master could have multiple since its defined per plant but will take the first item for now
AND up.pckg ? (i.uomp->>0)
AND COALESCE(i.BRANDING,'') = up.branding
AND COALESCE(i.ACCS,'') = up.ACCS
AND COALESCE(i.SUFFIX,'') = up.suffix
AND APLNT <> 'I'
)
SELECT * FROM items_init WHERE stlc = 'TRV55420'
------compile all the conversions into a single json object----------------------
--,items AS (
-- SELECT
-- jsonb_agg( DISTINCT
-- jsonb_build_object(
-- 'partn', item
-- ,'fu', vol_uom
-- ,'tu','PC'
-- )
-- ) conv
-- FROM
-- items_init
-- WHERE
-- seq = 1
-- AND COALESCE(item,'') <> ''
--)
----do the conversion-------------------------------------------------------------
--, conversion AS (
-- SELECT
-- rslt.*
-- FROM
-- items
-- JOIN LATERAL rlarp.uom_array(conv) rslt ON true
--)
------join conversion back to data initial part link------------------------------
--,joinback_init AS (
--SELECT
-- i.stlc
-- ,i.coltier
-- ,i.branding
-- ,i.accs
-- ,i.suffix
-- ,i.pckg
-- ,i.col
-- ,i.vol_uom
-- ,i.vol_qty
-- ,i.price
-- ,c.nm
-- ,c.dm
-- ,l.clist
--FROM
-- items_init i
-- LEFT OUTER JOIN conversion c ON
-- c.p = i.item
-- AND c.f = i.vol_uom
-- NATURAL JOIN colors l
--WHERE
-- i.seq = 1
--ORDER BY
-- i.stlc
-- ,i.coltier
-- ,i.col
--)
------aggregate everything offered for the price point----------------------------
--,agg_levels AS (
-- SELECT
-- stlc
-- ,string_agg(DISTINCT coltier ,', ') FILTER (WHERE clist IS NOT NULL) coltier
-- ,string_agg(DISTINCT branding,', ') branding
-- -------replace blank with 'none'--------------
-- ,regexp_replace(string_agg(DISTINCT accs ,', '),'^,','none,','g') accs
-- ,string_agg(DISTINCT suffix ,', ') suffix
-- ,pckg
-- ,col
-- ,vol_uom
-- ,voL_qty
-- ,nm
-- ,dm
-- ,price
-- -----convert json array to a plain text representation as well as remove nulls------
-- ,regexp_replace(jsonb_arr_aggcd(clist)::text,'["\[\]]|null, ','','g') clist
-- FROM
-- joinback_init
-- GROUP BY
-- stlc
-- ,pckg
-- ,col
-- ,vol_uom
-- ,vol_qty
-- ,nm
-- ,dm
-- ,price
--)
--,seq_levels AS (
-- SELECT
-- stlc||'.'||pckg||'.'||col||'.'||to_char(row_number() OVER (PARTITION BY stlc, col ORDER BY price ASC),'FM00') lookup
-- ,stlc
-- ,coltier
-- ,branding
-- ,accs
-- ,suffix
-- ,pckg
-- ,clist
-- ,col
-- ,vol_uom
-- ,vol_qty
-- ,nm
-- ,dm
-- ,price
-- FROM
-- agg_levels
--)
--SELECT * FROM seq_levels
--SELECT * FROM items_init WHERE stlc = 'TRV55420' ORDER BY plist, stlc, col, seq
----compile all the conversions into a single json object----------------------
,items AS (
SELECT
jsonb_agg( DISTINCT
jsonb_build_object(
'partn', item
,'fu', vol_uom
,'tu','PC'
)
) conv
FROM
items_init
WHERE
seq = 1
AND COALESCE(item,'') <> ''
)
--do the conversion-------------------------------------------------------------
, conversion AS (
SELECT
rslt.*
FROM
items
JOIN LATERAL rlarp.uom_array(conv) rslt ON true
)
----join conversion back to data initial part link------------------------------
,joinback_init AS (
SELECT
i.plist
,i.stlc
,i.coltier
,i.branding
,i.accs
,i.suffix
,i.pckg->>0 pckg
,i.col
,i.vol_uom
,i.vol_qty
,i.price
,c.nm
,c.dm
,l.clist
FROM
items_init i
LEFT OUTER JOIN conversion c ON
c.p = i.item
AND c.f = i.vol_uom
NATURAL JOIN colors l
WHERE
i.seq = 1
)
----aggregate everything offered for the price point----------------------------
,agg_levels AS (
SELECT
plist
,stlc
,string_agg(DISTINCT coltier ,', ') FILTER (WHERE clist IS NOT NULL) coltier
,string_agg(DISTINCT branding,', ') branding
-------replace blank with 'none'--------------
,regexp_replace(string_agg(DISTINCT accs ,', '),'^,','none,','g') accs
,string_agg(DISTINCT suffix ,', ') suffix
,pckg
,col
,vol_uom
,voL_qty
,nm
,dm
,price
-----convert json array to a plain text representation as well as remove nulls------
,regexp_replace(jsonb_arr_aggcd(clist)::text,'["\[\]]|null, ','','g') clist
FROM
joinback_init
GROUP BY
plist
,stlc
,pckg
,col
,vol_uom
,vol_qty
,nm
,dm
,price
)
,seq_levels AS (
SELECT
plist||'.'||stlc||'.'||pckg||'.'||col||'.'||to_char(row_number() OVER (PARTITION BY plist, stlc, col ORDER BY price ASC),'FM00') lookup
,plist
,stlc
,coltier
,branding
,accs
,suffix
,pckg
,clist
,col
,vol_uom
,vol_qty
,nm
,dm
,price
FROM
agg_levels
)
SELECT * FROM seq_levels