diff --git a/build/build_pool.sql b/build/build_pool.sql index 0d7d90f..04ef5f5 100644 --- a/build/build_pool.sql +++ b/build/build_pool.sql @@ -59,7 +59,7 @@ repc AS ( ) --select * from si ,logload AS ( - INSERT INTO rlarp.osm_log (doc) SELECT jsonb_build_object('user',current_user,'tag','baseline','type','build_pool','stamp',current_timestamp,'source','top level','message','don''t undo') RETURNING * + INSERT INTO rlarp.osm_log (doc) SELECT jsonb_build_object('user',current_user,'tag','baseline','type','build_pool','stamp',current_timestamp,'source','top level','message','baseline') RETURNING * ) --select * from logload ,loadset AS ( diff --git a/build/convert_pool_all.sql b/build/convert_pool_all.sql index 2179a28..9a7aac9 100644 --- a/build/convert_pool_all.sql +++ b/build/convert_pool_all.sql @@ -122,8 +122,8 @@ SELECT ship_date, ship_season, version, - iter, - tag + tag iter, + comment tag FROM rlarp.osm_pool WHERE diff --git a/debug/debug.sql b/debug/debug.sql new file mode 100644 index 0000000..6d7e6a3 --- /dev/null +++ b/debug/debug.sql @@ -0,0 +1,517 @@ +-- 4/5/2025, 11:58:08 AM: POST /new_basket (Add new part and/or customer.) +-- 4/5/2025, 11:58:08 AM: SQL file: ./route_sql/new_basket.sql +-- 4/5/2025, 11:58:08 AM: Building WHERE from {"scenario":{"segm":["Greenhouse","Nursery","Other","Sustainable",""],"quota_rep_descr":"13028 - RICHARD MEULE","shipto_group":"COSTA","majg_descr":"110 - 110 - INJECTION","part_group":"SQD05500","version":"b26","iter":["copy","plan","adj volume"]},"stamp":"2025-04-05 11:57:43","user":"Trowbridge, Paul","source":"adj","type":"new_basket","months":{"08 - Jan":{"amount":554784.528,"qty":5439064}},"newpart":"KEP015P0X56B316","basket":[{"part_descr":"KEP015P0X56B316","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"5.82453157381491E-03"},{"part_descr":"KEP015P0X56B316PYMLI","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"5.82453157381491E-03"},{"part_descr":"KEP015P0X19B316","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"1.16490631476298E-02"},{"part_descr":"KEP015P0X19B316PYMGL","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"1.16490631476298E-02"},{"part_descr":"KET10P15G18B030","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"2.23714962721527E-03"},{"part_descr":"KEP010P0X19B524","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"6.74586656821835E-02"},{"part_descr":"KEP010P0X19B262PYMLE","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"6.74586656821835E-02"},{"part_descr":"KEP010P0X19B524","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.375841137372166},{"part_descr":"KEP010P0X19B262PYMLE","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.375841137372166},{"part_descr":"KET12P10A10B027","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.036989452596991},{"part_descr":"KET10P15A10B030","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"2.23714962721527E-03"},{"part_descr":"KET12P10G18B027","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.036989452596991}],"message":"quote mix","tag":"Keystone Incr","version":"1.10.1","username":"Trowbridge, Paul"} +-- 4/5/2025, 11:58:08 AM: Returning segm IN ('Greenhouse','Nursery','Other','Sustainable','') +-- AND quota_rep_descr = '13028 - RICHARD MEULE' +-- AND shipto_group = 'COSTA' +-- AND majg_descr = '110 - 110 - INJECTION' +-- AND part_group = 'SQD05500' +-- AND version = 'b26' +-- AND iter IN ('copy','plan','adj volume') +-- AND order_date >= least('2025-04-05 11:57:43'::date,'2021-06-01') +-- 4/5/2025, 11:58:08 AM: Running query: +WITH +/* +the volume must be expressed in terms of units, since that is what it will be scaling +*/ +target AS (select $${"scenario":{"segm":["Greenhouse","Nursery","Other","Sustainable",""],"quota_rep_descr":"13028 - RICHARD MEULE","shipto_group":"COSTA","majg_descr":"110 - 110 - INJECTION","part_group":"SQD05500","version":"b26","iter":["copy","plan","adj volume"]},"stamp":"2025-04-05T15:58:08.504Z","user":"Trowbridge, Paul","source":"adj","type":"new_basket","months":{"08 - Jan":{"amount":554784.528,"qty":5439064}},"newpart":"KEP015P0X56B316","basket":[{"part_descr":"KEP015P0X56B316","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"5.82453157381491E-03"},{"part_descr":"KEP015P0X56B316PYMLI","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"5.82453157381491E-03"},{"part_descr":"KEP015P0X19B316","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"1.16490631476298E-02"},{"part_descr":"KEP015P0X19B316PYMGL","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"1.16490631476298E-02"},{"part_descr":"KET10P15G18B030","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"2.23714962721527E-03"},{"part_descr":"KEP010P0X19B524","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"6.74586656821835E-02"},{"part_descr":"KEP010P0X19B262PYMLE","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"6.74586656821835E-02"},{"part_descr":"KEP010P0X19B524","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.375841137372166},{"part_descr":"KEP010P0X19B262PYMLE","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.375841137372166},{"part_descr":"KET12P10A10B027","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.036989452596991},{"part_descr":"KET10P15A10B030","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"2.23714962721527E-03"},{"part_descr":"KET12P10G18B027","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.036989452596991}],"message":"quote mix","tag":"Keystone Incr","version":"1.10.1","username":"Trowbridge, Paul"}$$::json def) +-- select 'target', * from target +-- +,GLD AS ( + SELECT + N1COMP COMP + ,N1CCYY FSYR + ,KPMAXP PERDS + ,N1FSPP PERD + ,to_char(N1FSYP,'FM0000') FSPR + ,N1SD01 SDAT + ,N1ED01 EDAT + ,daterange(n1sd01, n1ed01,'[]') drange + ,to_char(N1ED01,'yymm') CAPR + ,N1ED01 - N1SD01 +1 NDAYS + ,CASE WHEN EXTRACT(MONTH FROM N1ED01) >= 6 THEN EXTRACT(YEAR FROM N1ED01) + 1 ELSE EXTRACT(YEAR FROM N1ED01) END SSYR + ,to_char(CASE WHEN EXTRACT(MONTH FROM N1ED01) >= 6 THEN EXTRACT(MONTH FROM N1ED01) -5 ELSE EXTRACT(MONTH FROM N1ED01) +7 END,'FM00') SSPR + ,to_char(CASE WHEN EXTRACT(MONTH FROM N1ED01) >= 6 THEN EXTRACT(MONTH FROM N1ED01) -5 ELSE EXTRACT(MONTH FROM N1ED01) +7 END,'FM00') || ' - '|| TO_CHAR(n1ed01,'FMMon') SORTMO + FROM + LGDAT.GLDATREF + INNER JOIN LGDAT.GLDATE ON + KPCOMP = N1COMP AND + KPCCYY = N1CCYY + WHERE + N1COMP = 93 + --AND DIGITS(N1FSYP) = '1901' +) +-- select 'GLD', * from GLD +-- +,mseq AS ( + SELECT * FROM + ( + VALUES + ('01 - Jun',1,6,-1) + ,('02 - Jul',2,7,-1) + ,('03 - Aug',3,8,-1) + ,('04 - Sep',4,9,-1) + ,('05 - Oct',5,10,-1) + ,('06 - Nov',6,11,-1) + ,('07 - Dec',7,12,-1) + ,('08 - Jan',8,1,0) + ,('09 - Feb',9,2,0) + ,('10 - Mar',10,3,0) + ,('11 - Apr',11,4,0) + ,('12 - May',12,5,0) + ) x(m,s,cal,yr) +) +-- select 'mseq', * from mseq +-- +,seg AS ( + SELECT + x.GLEC glec + ,x.SEGM segm + FROM + ( + VALUES + ('1SU','Sustainable'), + ('1CU','Sustainable'), + ('1GR','Greenhouse'), + ('1NU','Nursery'), + ('1RE','Retail'), + ('2WI','Greenhouse'), + ('3BM','Other'), + ('3CO','Other'), + ('3PE','Other'), + ('3PP','Other'), + ('4CO','Other'), + ('4RA','Other'), + ('9MI','Other'), + ('9SA','Other'), + ('9TO','Other') + ) X(GLEC, SEGM) +) +-- select 'seg', * from seg +-- +,copr AS ( + SELECT + LTRIM(RTRIM(A9)) AS COMP, + A30 AS DESCR, + SUBSTR(C.A249,242,2) CURR, + SUBSTR(C.A249,32,4) AS GL, + SUBSTR(C.A249,190,4) AS AR, + SUBSTR(C.A249,182,4) AS AP, + SUBSTR(C.A249,198,4) AS FA, + SUBSTR(C.A249,238,4) AS IC , + SUBSTR(D.A249,9,5) CONS_FUNC + FROM + LGDAT.CODE + LEFT OUTER JOIN LGDAT.NAME C ON + 'C0000'||LTRIM(RTRIM(A9)) = C.A7 + LEFT OUTER JOIN LGDAT.NAME D ON + 'D0000'||LTRIM(RTRIM(A9)) = D.A7 + WHERE + A2 = 'AA' OR A2 IS NULL +) +-- select 'copr', * from copr +-- +,alldates AS ( + SELECT + promo + ,terms + ,r_currency + ,order_month + ,mseq.s seq + ,order_date + ,request_date + ,ship_date + ,sum(value_usd) value_usd + FROM + rlarp.osm_pool + LEFT OUTER JOIN mseq ON + mseq.m = order_month + WHERE + -----------------scenario---------------------------- + segm IN ('Greenhouse','Nursery','Other','Sustainable','') + AND quota_rep_descr = '13028 - RICHARD MEULE' + AND shipto_group = 'COSTA' + AND majg_descr = '110 - 110 - INJECTION' + AND part_group = 'SQD05500' + AND version = 'b26' + AND iter IN ('copy','plan','adj volume') + AND order_date >= least('2025-04-05 11:57:43'::date,'2021-06-01') + --probably dont want to include adjustments that have blown away volume and good sources of dating info + -----------------additional params------------------- + AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments + AND order_date <= ship_date + GROUP BY + promo + ,terms + ,r_currency + ,order_month + ,mseq.s + ,order_date + ,request_date + ,ship_date + -- HAVING + -- sum(value_usd) <> 0 +) +-- select 'alldates', * from alldates +-- +,dom AS ( + SELECT + extract(day FROM order_date) DOM + ,sum(value_usd) value_usd + FROM + alldates + GROUP BY + extract(day FROM order_date) +) +-- select 'dom', * from dom +-- +,mmix AS ( + SELECT + to_char(order_date,'Mon') _month + ,seq + ,promo + ,terms + ,(SELECT r_currency FROM alldates GROUP BY r_currency ORDER BY SUM(value_usd) DESC LIMIT 1) r_currency + --should terms be included here? + ,sum(extract(day from order_date)*value_usd) dom_wa + --,request_date-order_date rlag + ,sum((request_date-order_date)*(value_usd)) rlag_wa + --,ship_date - request_date slag + ,sum((ship_date - request_date)*(value_usd)) slag_wa + ,COALESCE(nullif(sum(value_usd),0),1) value_usd + FROM + alldates + GROUP BY + to_char(order_date,'Mon') + ,seq + ,promo + ,terms + --,extract(day from order_date) + --,request_date-order_date + --,ship_date - request_date +) +-- select 'mmix', * from mmix +-- +,targm AS ( + SELECT + je.key as month + ,r.amount + ,r.qty + ,s + ,cal + ,yr + FROM + target + JOIN LATERAL json_each(def->'months') je ON true + JOIN LATERAL json_to_record(je.value) as r (amount numeric, qty numeric) ON TRUE + LEFT OUTER JOIN mseq ON + mseq.m = je.key +) +--select 'targm', * from targm +-- +,mmixp AS ( + SELECT + _month + ,seq + ,promo + ,terms + ,r_currency + ,greatest(least(round((dom_wa/value_usd)::numeric,0)::int,28),1) odom + ,round((rlag_wa/value_usd)::numeric,0)::int rlag + ,round((slag_wa/value_usd)::numeric,0)::int slag + ,value_usd/sum(value_usd) over (partition by _month) momix + --,value_usd/SUM(value_usd) over (PARTITION BY _month) vperc + FROM + mmix +) +--select 'mmixp', * from mmixp +-- +,mxm AS ( +SELECT + t.month + ,t.amount + ,t.qty + ,t.s + ,t.cal + ,t.yr + ,x.momix + ,x.odom + ,x.rlag + ,x.slag + ,x.promo + ,x.terms + ,x.r_currency +FROM + targm t + LEFT OUTER JOIN mmixp x ON + x._month = ( + SELECT + _month + FROM + mmixp + ORDER BY + abs(seq - t.s) ASC + LIMIT 1 + ) +) +SELECT 'mxm', * FROM mxm + +-- +,basemix AS ( +SELECT + sd.fspr + ,mxm.promo + ,mxm.terms + ,mxm.r_currency + ,jr.bill_cust_descr + ,jr.ship_cust_descr + ,rtrim((regexp_match(jr.part_descr,'(.*?)(?= - |$)'))[1]) part + ,jr.part_descr + ,substring(jr.part_descr,1,8) part_group + ,mxm.qty*mxm.momix*jr.mix units + ,mxm.amount*mxm.momix*jr.mix value_usd --assume that target dollars are USD + ,make_date(mxm.yr + 2026,mxm.cal,mxm.odom) order_date + ,od.sortmo order_month + ,od.ssyr order_season + ,make_date(mxm.yr + 2026,mxm.cal,mxm.odom) + rlag request_date + ,rd.sortmo request_month + ,rd.ssyr request_season + ,make_date(mxm.yr + 2026,mxm.cal,mxm.odom) + rlag + slag ship_date + ,sd.sortmo ship_month + ,sd.ssyr ship_season + ,jr.mix + FROM + target + JOIN LATERAL json_array_elements(def->'basket') as ae(e) ON true + JOIN LATERAL json_to_record(ae.e) as jr(part_descr text, bill_cust_descr text, ship_cust_descr text, mix numeric) ON true + CROSS JOIN mxm + LEFT OUTER JOIN gld od ON + od.drange @> make_date(mxm.yr + 2026,mxm.cal,mxm.odom) + LEFT OUTER JOIN gld rd ON + rd.drange @> (make_date(mxm.yr + 2026,mxm.cal,mxm.odom) + rlag) + LEFT OUTER JOIN gld sd ON + sd.drange @> (make_date(mxm.yr + 2026,mxm.cal,mxm.odom) + rlag + slag) +) +-- SELECT 'basemix', * FROM basemix +-- +,log AS ( + INSERT INTO rlarp.osm_log(doc) SELECT $${"scenario":{"segm":["Greenhouse","Nursery","Other","Sustainable",""],"quota_rep_descr":"13028 - RICHARD MEULE","shipto_group":"COSTA","majg_descr":"110 - 110 - INJECTION","part_group":"SQD05500","version":"b26","iter":["copy","plan","adj volume"]},"stamp":"2025-04-05T15:58:08.504Z","user":"Trowbridge, Paul","source":"adj","type":"new_basket","months":{"08 - Jan":{"amount":554784.528,"qty":5439064}},"newpart":"KEP015P0X56B316","basket":[{"part_descr":"KEP015P0X56B316","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"5.82453157381491E-03"},{"part_descr":"KEP015P0X56B316PYMLI","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"5.82453157381491E-03"},{"part_descr":"KEP015P0X19B316","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"1.16490631476298E-02"},{"part_descr":"KEP015P0X19B316PYMGL","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"1.16490631476298E-02"},{"part_descr":"KET10P15G18B030","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"2.23714962721527E-03"},{"part_descr":"KEP010P0X19B524","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"6.74586656821835E-02"},{"part_descr":"KEP010P0X19B262PYMLE","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"6.74586656821835E-02"},{"part_descr":"KEP010P0X19B524","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.375841137372166},{"part_descr":"KEP010P0X19B262PYMLE","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.375841137372166},{"part_descr":"KET12P10A10B027","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.036989452596991},{"part_descr":"KET10P15A10B030","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":"2.23714962721527E-03"},{"part_descr":"KET12P10G18B027","bill_cust_descr":"COST0017 - COSTA FARMS LLC-GOULDS FL","ship_cust_descr":"COST0007 - COSTA COLOR-MIAMI FL","mix":0.036989452596991}],"message":"quote mix","tag":"Keystone Incr","version":"1.10.1","username":"Trowbridge, Paul"}$$::jsonb doc RETURNING * +) +-- select 'log', * from log +-- +,final AS ( +SELECT + b.fspr + ,i.dplt plnt + ,b.promo + ,COALESCE(b.terms,bc.bvterm) terms + ,b.bill_cust_descr + ,b.ship_cust_descr + ,(SELECT max(rcode) FROM rlarp.repc WHERE repp ~ (log.doc->'scenario'->>'quota_rep_descr')) dsm + ,log.doc->'scenario'->>'quota_rep_descr' quota_rep_descr + ,(SELECT max(director) FROM rlarp.repc WHERE repp ~ (log.doc->'scenario'->>'quota_rep_descr')) director + ,COALESCE(CASE bc.BVADR6 WHEN '' THEN bc.BVNAME ELSE bc.BVADR6 END,b.bill_cust_descr) billto_group + ,COALESCE(CASE sc.BVADR6 WHEN '' THEN sc.BVNAME ELSE sc.BVADR6 END,b.ship_cust_descr) shipto_group + ,CASE SUBSTRING(bc.bvclas,2,3) + --if the bill to class is ditsributor, then it's either warehouse or drop + WHEN 'DIS' THEN + --if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse + CASE SUBSTRING(sc.bvclas,2,3) + WHEN 'DIS' THEN 'WHS' + ELSE 'DRP' + END + --CASE WHEN RTRIM(SUBSTRING(LTRIM(SC.BVADR7)||SC.BVNAME,1,30)) = RTRIM(SUBSTRING(LTRIM(BC.BVADR7)||BC.BVNAME,1,30)) THEN 'DIS' ELSE 'DRP' END + --everything else does not involve a distributor and is considered direct + ELSE 'DIR' + END chan + ,CASE SUBSTRING(bc.bvclas,2,3) + WHEN 'DIS' THEN + --if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse + CASE SUBSTRING(sc.bvclas,2,3) + WHEN 'DIS' THEN 'WHS' + ELSE CASE SUBSTRING(sc.bvclas,1,1) WHEN 'R' THEN 'RDP' ELSE 'DRP' END + END + WHEN 'MAS' THEN 'RMN' + WHEN 'NAT' THEN 'RMN' + ELSE CASE SUBSTRING(sc.bvclas,1,1) WHEN 'R' THEN 'RDI' ELSE 'DIR' END + END chansub + ,null::text chan_retail + ,b.part + ,b.part_descr + ,b.part_group + ,i.branding + ,i.majg||' - '||i.majgd majg_descr + ,i.ming||' - '||i.mingd ming_descr + ,i.majs||' - '||i.majsd majs_descr + ,i.mins||' - '||i.minsd mins_descr + ,seg.segm + ,CASE WHEN i.majg = '610' THEN 'Fiber' ELSE 'Plastic' END substance + ,'41010' fs_line --master data + ,b.r_currency --history cust mix + ,rx.rate r_rate --master data + ,copr.curr c_currency --master data + ,cx.rate c_rate --master data + ,round(b.units ,2) units + ,round((b.value_usd / COALESCE(rx.rate,1))::numeric ,2) value_loc --b.value is denominated in USD, need to apply currency to get to local, assume 1 if using a fake customer + ,round(b.value_usd ,2) value_usd --b.value is already denominated in usd + ,round((COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.units)::numeric ,2) cost_loc + ,round((COALESCE(im.cgstcs,ip.chstcs, ir.y0stcs)*b.units*cx.rate)::numeric,2) cost_usd + ,'CLOSED' calc_status + ,'SHIPMENT' flag + ,b.order_date + ,b.order_month + ,b.order_season + ,b.request_date + ,b.request_month + ,b.request_season + ,b.ship_date + ,b.ship_month + ,b.ship_season + ,'b26' "version" + ,'adj'||' volume' iter + ,log.id + ,COALESCE(log.doc->>'tag','') "tag" + ,log.doc->>'message' "comment" + ,log.doc->>'type' module + ,round(b.units * i.nwht * CASE i.nwun WHEN 'KG' THEN 2.2046 ELSE 1 END, 2) pounds +FROM + basemix b + CROSS JOIN log + LEFT OUTER JOIN "CMS.CUSLG".itemm i ON + i.item = b.part + LEFT OUTER JOIN SEG ON + SEG.GLEC = i.glec -- AND + -- SEG.SEGM <> 'Other' + LEFT OUTER JOIN LGDAT.CUST BC ON + BC.BVCUST = rtrim(substring(b.bill_cust_descr,1,8)) + LEFT OUTER JOIN LGDAT.CUST SC ON + SC.BVCUST = rtrim(substring(b.ship_cust_descr,1,8)) + LEFT OUTER JOIN rlarp.repc r ON + r.rcode = CASE WHEN i.ming = 'B52' THEN 'PW' ELSE + --if the gl expense code is 1RE use the retail rep assigned to the bill-to customer if available + CASE WHEN COALESCE(seg.segm,'') = 'Retail' AND COALESCE((SELECT currep FROM lgpgm.usrcust where cucust = bc.bvcust),'') <> '' + THEN + (SELECT currep FROM lgpgm.usrcust where cucust = bc.bvcust) + --default logic + ELSE + CASE SUBSTR(bc.bvclas,2,3) + WHEN 'DIS' THEN sc.bvsalm + ELSE bc.bvsalm + END + END + END + LEFT OUTER JOIN lgdat.icstm im ON + im.cgpart = b.part AND + im.cgplnt = i.dplt + LEFT OUTER JOIN lgdat.icstp ip ON + ip.chpart = b.part AND + ip.chplnt = i.dplt + LEFT OUTER JOIN lgdat.icstr ir ON + ir.y0part = b.part AND + ir.y0plnt = i.dplt + LEFT OUTER JOIN lgdat.plnt ON + yaplnt = i.dplt + LEFT OUTER JOIN copr ON + copr.comp = yacomp::text + LEFT OUTER JOIN (select 'US' fcur, 1.0 rate UNION ALL select 'CA', 0.7409) cx ON + -- cx.perd = '2412' AND + -- cx.rtyp = 'MA' AND + cx.fcur = copr.curr -- AND + -- cx.tcur = 'US' + LEFT OUTER JOIN (select 'US' fcur, 1.0 rate UNION ALL select 'CA', 0.7409) rx ON + -- rx.perd = '2412' AND + -- rx.rtyp = 'MA' AND + rx.fcur = COALESCE(bc.bvcurr,b.r_currency) -- AND + -- rx.tcur = 'US' +) +-- select 'final', * from final +-- +, ins AS ( + INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING * +) +,insagg AS ( + SELECT + ---------customer info----------------- + bill_cust_descr + ,billto_group + ,ship_cust_descr + ,shipto_group + ,quota_rep_descr + ,director + ,segm + ,substance + ,chan + ,chansub + ---------product info------------------ + ,majg_descr + ,ming_descr + ,majs_descr + ,mins_descr + --,brand + --,part_family + ,part_group + ,branding + --,color + ,part_descr + ---------dates------------------------- + ,order_season + ,order_month + ,ship_season + ,ship_month + ,request_season + ,request_month + ,promo + ,version + ,iter + ,logid + ,tag + ,comment + --------values------------------------- + ,sum(value_loc) value_loc + ,sum(value_usd) value_usd + ,sum(cost_loc) cost_loc + ,sum(cost_usd) cost_usd + ,sum(units) units + ,sum(pounds) pounds + FROM + ins + GROUP BY + ---------customer info----------------- + bill_cust_descr + ,billto_group + ,ship_cust_descr + ,shipto_group + ,quota_rep_descr + ,director + ,segm + ,substance + ,chan + ,chansub + ---------product info------------------ + ,majg_descr + ,ming_descr + ,majs_descr + ,mins_descr + --,brand + --,part_family + ,part_group + ,branding + --,color + ,part_descr + ---------dates------------------------- + ,order_season + ,order_month + ,ship_season + ,ship_month + ,request_season + ,request_month + ,promo + ,version + ,iter + ,logid + ,tag + ,comment +) +-- select 'insagg', * from insagg +-- +SELECT json_agg(row_to_json(insagg)) x from insagg diff --git a/debug/req.json b/debug/req.json new file mode 100644 index 0000000..540e5e5 --- /dev/null +++ b/debug/req.json @@ -0,0 +1,110 @@ +{ + "scenario": { + "segm": [ + "Greenhouse", + "Nursery", + "Other", + "Sustainable", + "" + ], + "quota_rep_descr": "13028 - RICHARD MEULE", + "shipto_group": "COSTA", + "majg_descr": "110 - 110 - INJECTION", + "part_group": "SQD05500", + "version": "b26", + "iter": [ + "copy", + "plan", + "adj volume" + ] + }, + "stamp": "2025-04-05T15:58:08.504Z", + "user": "Trowbridge, Paul", + "source": "adj", + "type": "new_basket", + "months": { + "08 - Jan": { + "amount": 554784.528, + "qty": 5439064 + } + }, + "newpart": "KEP015P0X56B316", + "basket": [ + { + "part_descr": "KEP015P0X56B316", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "5.82453157381491E-03" + }, + { + "part_descr": "KEP015P0X56B316PYMLI", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "5.82453157381491E-03" + }, + { + "part_descr": "KEP015P0X19B316", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "1.16490631476298E-02" + }, + { + "part_descr": "KEP015P0X19B316PYMGL", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "1.16490631476298E-02" + }, + { + "part_descr": "KET10P15G18B030", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "2.23714962721527E-03" + }, + { + "part_descr": "KEP010P0X19B524", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "6.74586656821835E-02" + }, + { + "part_descr": "KEP010P0X19B262PYMLE", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "6.74586656821835E-02" + }, + { + "part_descr": "KEP010P0X19B524", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": 0.375841137372166 + }, + { + "part_descr": "KEP010P0X19B262PYMLE", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": 0.375841137372166 + }, + { + "part_descr": "KET12P10A10B027", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": 0.036989452596991 + }, + { + "part_descr": "KET10P15A10B030", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": "2.23714962721527E-03" + }, + { + "part_descr": "KET12P10G18B027", + "bill_cust_descr": "COST0017 - COSTA FARMS LLC-GOULDS FL", + "ship_cust_descr": "COST0007 - COSTA COLOR-MIAMI FL", + "mix": 0.036989452596991 + } + ], + "message": "quote mix", + "tag": "Keystone Incr", + "version": "1.10.1", + "username": "Trowbridge, Paul" +}