This commit is contained in:
Trowbridge 2019-03-21 12:02:44 -04:00
parent 5571fc35a6
commit 24188768f1

View File

@ -2,17 +2,7 @@ WITH
/* /*
the volume must be expressed in terms of units, since that is what it will be scaling the volume must be expressed in terms of units, since that is what it will be scaling
*/ */
target AS (select $${"scenario":{"quota_rep_descr":"10032 - BRYAN HILL","part_group":"XRD16002 - 16 CM SP COEX POT 4 SLOT WHBK","version":"b20","iter":["copy","adj volume","adj price"]},"stamp":"2019-03-21 03:07:42","user":"Trowbridge, Paul","source":"adj","type":"new_part","months":{"Oct":{"amount":23949.24,"qty":264000},"Nov":{"amount":75866.8800000003,"qty":732000},"Jan":{"amount":21035.52,"qty":230000},"Feb":{"amount":19380,"qty":204000},"Mar":{"amount":20275.3347665605,"qty":218848.6512},"Apr":{"amount":53884.1204619477,"qty":561022.23042}}}$$::json def) target AS (select '{"scenario":{"quota_rep_descr":"10032 - BRYAN HILL","part_group":"XRD16002 - 16 CM SP COEX POT 4 SLOT WHBK","version":"b20","iter":["copy","adj volume","adj price"]},"stamp":"2019-03-21 11:31:57","user":"Trowbridge, Paul","source":"adj","type":"new_part","months":{"Oct":{"amount":25080,"qty":264000},"Nov":{"amount":69540,"qty":732000},"Dec":{"amount":950,"qty":10000},"Jan":{"amount":21850,"qty":230000},"Feb":{"amount":19380,"qty":204000},"Mar":{"amount":20790.621864,"qty":218848.6512},"Apr":{"amount":53297.1118899,"qty":561022.23042}},"newpart":"XNT0T1G0X19B118PYAUE - 01.00 PW SS T1G TALL CX WH/BK"}'::json def)
,newm AS (
SELECT
je.key as month
,r.amount
,r.qty
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
)
--select * from newm --select * from newm
,GLD AS ( ,GLD AS (
SELECT SELECT
@ -121,7 +111,21 @@ target AS (select $${"scenario":{"quota_rep_descr":"10032 - BRYAN HILL","part_gr
--,requestdate-orderdate --,requestdate-orderdate
--,shipdate - requestdate --,shipdate - requestdate
) )
,targm AS (select s, m from mseq where m = 'target_month' ) ,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
)
,mmixp AS ( ,mmixp AS (
SELECT SELECT
_month _month
@ -135,103 +139,112 @@ target AS (select $${"scenario":{"quota_rep_descr":"10032 - BRYAN HILL","part_gr
FROM FROM
mmix mmix
) )
--month cross join mix
,mxm AS (
SELECT SELECT
t.* t.month
,x.* ,t.amount
,t.qty
,t.s
,t.cal
,t.yr
,x.momix
,x.odom
,x.rlag
,x.slag
,x.promo
FROM FROM
newm t targm t
--need to build this function LEFT OUTER JOIN mmixp x ON
JOIN LATERAL get_closest(pick_from_json) x ON true x._month = (
,closest AS (
SELECT SELECT
_month, targm.s, m _month
FROM FROM
mmixp mmixp
CROSS JOIN targm
ORDER BY ORDER BY
abs(seq - targm.s) ASC abs(seq - t.s) ASC
LIMIT 1 LIMIT 1
) )
)
--SELECT * FROM mmixp order by seq asc, vperc desc --SELECT * FROM mmixp order by seq asc, vperc desc
,basemix AS ( ,basemix AS (
SELECT SELECT
plnt ---master data null::text plnt ---master data
,0::numeric(11,0) "ddord#" --0 ,0::numeric(11,0) "ddord#"
,0::numeric(11,0) "dditm#" --0 ,0::numeric(11,0) "dditm#"
,0::numeric(11,0) "fgbol#" --0 ,0::numeric(11,0) "fgbol#"
,0::numeric(11,0) "fgent#" --0 ,0::numeric(11,0) "fgent#"
,0::numeric(9,0) "diinv#" --0 ,0::numeric(9,0) "diinv#"
,0::numeric(3,0) "dilin#" --0 ,0::numeric(3,0) "dilin#"
,null::text promo --history date mix ,null::text promo --history date mix
,null::text return_reas --0 ,null::text return_reas
,terms ,null::tex terms
,''::text custpo --0 ,''::text custpo
,'I' dhincr --0 ,'I' dhincr
,null::numeric diext ,null::numeric diext
,null::numeric ditdis ,null::numeric ditdis
,null::date dcodat --calculated date mix ,null::date dcodatdate mix
,null::date ddqdat --calculated date mix ,null::date ddqdatdate mix
,null::date dcmdat --calculated date mix ,null::date dcmdatdate mix
,null::date dhidat --calculated date mix ,null::date dhidatdate mix
,null::text fspr --calculated date mix ,null::text fsprdate mix
,remit_to --master data ,remit_to
,bill_class --master data ,bill_class
,bill_cust --history cust mix ,bill_cust
,bill_rep --master data ,bill_rep
,bill_terr --master data ,bill_terr
,ship_class --master data ,ship_class
,ship_cust --history cust mix ,ship_cust
,ship_rep --master data ,ship_rep
,ship_terr --master data ,ship_terr
,quota_rep --master data ,quota_rep
,account --master data ,account
,shipgrp --master data ,shipgrp
,geo --master data ,geo
,chan --master data ,chan
,orig_ctry --master data ,orig_ctry
,orig_prov --master data ,orig_prov
,orig_post --master data ,orig_post
,dest_ctry --master data ,dest_ctry
,dest_prov --master data ,dest_prov
,dest_post --master data ,dest_post
,part --history part mix ,null::text part --history part mix
,ord_gldc --master data ,null::text ord_gldc
,majg --master data ,null::text majg
,ming --master data ,null::text ming
,majs --master data ,null::text majs
,mins --master data ,null::text mins
,gldc --master data ,null::text gldc
,glec --master data ,null::text glec
,harm --master data ,null::text harm
,clss --master data ,null::text clss
,brand --master data ,null::text brand
,assc --master data ,null::text assc
,fs_line --master data ,fs_line
,r_currency --history cust mix ,r_currency
,r_rate --master data ,r_rate
,c_currency --master data ,null::text c_currency
,c_rate --master data ,null::numeric c_rate
,0::numeric(15,5) ddqtoi --0 ,0::numeric(15,5) ddqtoi
,0::numeric(15,5) ddqtsi --0 ,0::numeric(15,5) ddqtsi
,0::numeric(15,5) fgqshp --0 ,0::numeric(15,5) fgqshp
,0::numeric(15,5) diqtsh --0 ,0::numeric(15,5) diqtsh
,sum(coalesce(fb_qty,0)) fb_qty --history value ,0::numeric fb_qty --history value
,sum(coalesce(fb_cst_loc,0)) fb_cst_loc --history part mix ,0::numeric fb_cst_loc --history part mix
,sum(coalesce(fb_cst_loc_cur,0)) fb_cst_loc_cur --master data ,0::numeric fb_cst_loc_cur
,sum(coalesce(fb_cst_loc_fut,0)) fb_cst_loc_fut --master data ,0::numeric fb_cst_loc_fut
,sum(coalesce(fb_val_loc,0)) fb_val_loc --history value ,0::numeric fb_val_loc --history value
,sum(coalesce(fb_val_loc_pl,0)) fb_val_loc_pl --0 ,0::numeric fb_val_loc_pl
,calc_status --0 ,calc_status
,flag --0 ,flag
,null::date orderdate --history date mix ,null::date orderdate --history date mix
,null::date requestdate --history date mix ,null::date requestdate --history date mix
,null::date shipdate --history date mix ,null::date shipdate --history date mix
,null::date adj_orderdate --history ,null::date adj_orderdate --history
,null::date adj_requestdate --history ,null::date adj_requestdate --history
,null::date adj_shipdate --history ,null::date adj_shipdate --history
,'b20' "version" --calculated ,null::text "version"
,'adjustment' iter --calculated ,null::text iter
---------------ui columns------------------------- ---------------ui columns-------------------------
,null::numeric order_season ,null::numeric order_season
,null::text order_month ,null::text order_month
@ -239,126 +252,160 @@ SELECT
,null::text ship_month ,null::text ship_month
,null::numeric request_season ,null::numeric request_season
,null::text request_month ,null::text request_month
,part_descr ,null::text part_descr
,part_family ,null::text part_family
,part_group ,null::text part_group
,branding ,null::text branding
,color ,null::text color
,segm ,null::text segm
,bill_cust_descr ,bill_cust_descr
,billto_group ,billto_group
,ship_cust_descr ,ship_cust_descr
,shipto_group ,shipto_group
,majg_descr ,null::text majg_descr
,ming_descr ,null::text ming_descr
,majs_descr ,null::text majs_descr
,mins_descr ,null::text mins_descr
,mod_chan ,mod_chan
,mod_chansub ,mod_chansub
,quota_rep_descr ,quota_rep_descr
,director_descr ,director_descr
,null value_loc ,null::numeric value_loc
,null value_usd ,null::numeric value_usd
,null cost_loc ,null::numeric cost_loc
,null cost_usd ,null::numeric cost_usd
,null units ,null::numeric units
,sum(coalesce(fb_val_loc * r_rate,0)) agg
FROM FROM
rlarp.osm_fcpool rlarp.osm_fcpool
WHERE WHERE
-----------------scenario---------------------------- -----------------scenario----------------------------
where_clause --where_clause
quota_rep_descr = '10032 - BRYAN HILL'
AND part_group = 'XRD16002 - 16 CM SP COEX POT 4 SLOT WHBK'
AND version = 'b20'
AND iter in ('copy','short ship','bad_ship')
-----------------additional params------------------- -----------------additional params-------------------
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
AND adj_orderdate <= adj_shipdate AND adj_orderdate <= adj_shipdate
GROUP BY GROUP BY
plnt ---master data remit_to
,terms ,bill_class
,remit_to --master data ,bill_cust
,bill_class --master data ,bill_rep
,bill_cust --history cust mix ,bill_terr
,bill_rep --master data ,ship_class
,bill_terr --master data ,ship_cust
,ship_class --master data ,ship_rep
,ship_cust --history cust mix ,ship_terr
,ship_rep --master data ,quota_rep
,ship_terr --master data ,account
,quota_rep --master data ,shipgrp
,account --master data ,geo
,shipgrp --master data ,chan
,geo --master data ,orig_ctry
,chan --master data ,orig_prov
,orig_ctry --master data ,orig_post
,orig_prov --master data ,dest_ctry
,orig_post --master data ,dest_prov
,dest_ctry --master data ,dest_post
,dest_prov --master data ,fs_line
,dest_post --master data ,r_currency
,part --history part mix ,r_rate
,ord_gldc --master data
,majg --master data
,ming --master data
,majs --master data
,mins --master data
,gldc --master data
,glec --master data
,harm --master data
,clss --master data
,brand --master data
,assc --master data
,fs_line --master data
,r_currency --history cust mix
,r_rate --master data
,c_currency --master data
,c_rate --master data
,calc_status ,calc_status
,flag ,flag
,part_descr
,part_family
,part_group
,branding
,color
,segm
,bill_cust_descr ,bill_cust_descr
,billto_group ,billto_group
,ship_cust_descr ,ship_cust_descr
,shipto_group ,shipto_group
,majg_descr
,ming_descr
,majs_descr
,mins_descr
,mod_chan ,mod_chan
,mod_chansub ,mod_chansub
,quota_rep_descr ,quota_rep_descr
,director_descr ,director_descr
) )
,vscale AS ( ,custmix AS (
SELECT SELECT
(SELECT vincr::numeric FROM target) incr remit_to
,(SELECT sum(fb_qty) FROM basemix) base ,bill_class
,(SELECT vincr::numeric FROM target)/(SELECT sum(fb_qty) FROM basemix) factor ,bill_cust
,bill_rep
,bill_terr
,ship_class
,ship_cust
,ship_rep
,ship_terr
,quota_rep
,account
,shipgrp
,geo
,chan
,orig_ctry
,orig_prov
,orig_post
,dest_ctry
,dest_prov
,dest_post
,r_currency
,r_rate
--fcpool columns
,bill_cust_descr
,billto_group
,ship_cust_descr
,shipto_group
,(SELECT (regexp_match(def->>'newpart','(.*) - '::text))[1] FROM target) part_descr
,sum(coalesce(fb_val_loc * r_rate,0))/(SELECT sum(fb_val_loc * r_rate) FROM basemix) mix
FROM
basemix
GROUP BY
remit_to
,bill_class
,bill_cust
,bill_rep
,bill_terr
,ship_class
,ship_cust
,ship_rep
,ship_terr
,quota_rep
,account
,shipgrp
,geo
,chan
,orig_ctry
,orig_prov
,orig_post
,dest_ctry
,dest_prov
,dest_post
,r_currency
,r_rate
--fcpool columns
,bill_cust_descr
,billto_group
,ship_cust_descr
,shipto_group
,(SELECT (regexp_match(def->>'newpart','(.*) - '::text))[1] FROM target)
) )
--select * from SCALE
,volume AS (
SELECT SELECT
b.plnt --master data b.plnt --master data
,b."ddord#" --0 ,b."ddord#"
,b."dditm#" --0 ,b."dditm#"
,b."fgbol#" --0 ,b."fgbol#"
,b."fgent#" --0 ,b."fgent#"
,b."diinv#" --0 ,b."diinv#"
,b."dilin#" --0 ,b."dilin#"
,b.promo --history date mix ,b.promo --history date mix
,b.return_reas --0 ,b.return_reas
,b.terms --history cust mix ,b.terms --history cust mix
,b.custpo --0 ,b.custpo
,b.dhincr --0 ,b.dhincr
,b.diext --0 ,b.diext
,b.ditdis --0 ,b.ditdis
,b.dcodat --calculated date mix ,b.dcodatdate mix
,b.ddqdat --calculated date mix ,b.ddqdatdate mix
,b.dcmdat --calculated date mix ,b.dcmdatdate mix
,b.dhidat --calculated date mix ,b.dhidatdate mix
,b.fspr --calculated date mix ,b.fsprdate mix
,b.remit_to --master data ,b.remit_to --master data
,b.bill_class --master data ,b.bill_class --master data
,b.bill_cust --history cust mix ,b.bill_cust --history cust mix
@ -379,7 +426,7 @@ SELECT
,b.dest_ctry --master data ,b.dest_ctry --master data
,b.dest_prov --master data ,b.dest_prov --master data
,b.dest_post --master data ,b.dest_post --master data
,b.part --history part mix ,(SELECT (regexp_match(def->>'newpart','(.*) - '::text))[1] FROM target) part --history part mix
,b.ord_gldc --master data ,b.ord_gldc --master data
,b.majg --master data ,b.majg --master data
,b.ming --master data ,b.ming --master data
@ -396,25 +443,25 @@ SELECT
,b.r_rate --master data ,b.r_rate --master data
,b.c_currency --master data ,b.c_currency --master data
,b.c_rate --master data ,b.c_rate --master data
,b.ddqtoi --0 ,b.ddqtoi
,b.ddqtsi --0 ,b.ddqtsi
,b.fgqshp --0 ,b.fgqshp
,b.diqtsh --0 ,b.diqtsh
,b.fb_qty*s.factor*m.momix fb_qty ,b.fb_qty
,b.fb_cst_loc*s.factor*m.momix fb_cst_loc ,b.fb_cst_loc
,b.fb_cst_loc_cur*s.factor*m.momix fb_cst_loc_cur ,b.fb_cst_loc_cur
,b.fb_cst_loc_fut*s.factor*m.momix fb_cst_loc_fut ,b.fb_cst_loc_fut
,b.fb_val_loc*s.factor*m.momix fb_val_loc ,b.fb_val_loc
,b.fb_val_loc_pl*s.factor*m.momix fb_val_loc_pl ,b.fb_val_loc_pl
,b.calc_status --0 ,b.calc_status
,b.flag --0 ,b.flag
,make_date(mseq.yr + 2020,mseq.cal,m.odom) orderdate ,make_date(mseq.yr + 2020,mseq.cal,m.odom) orderdate
,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag requestdate ,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag requestdate
,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag + slag shipdate ,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag + slag shipdate
,make_date(mseq.yr + 2020,mseq.cal,m.odom) adj_orderdate ,make_date(mseq.yr + 2020,mseq.cal,m.odom) adj_orderdate
,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag adj_requestdate ,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag adj_requestdate
,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag + slag adj_shipdate ,make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag + slag adj_shipdate
,'replace_version' "version" --calculated ,'replace_version' "version"
,'replace_source'||' volume' iter ,'replace_source'||' volume' iter
-----------------------ui columns-------------------------------- -----------------------ui columns--------------------------------
,'replace_iterdet' iterdet ,'replace_iterdet' iterdet
@ -443,216 +490,17 @@ SELECT
,b.mod_chansub ,b.mod_chansub
,b.quota_rep_descr ,b.quota_rep_descr
,b.director_descr ,b.director_descr
,b.fb_val_loc*s.factor*m.momix value_loc ,b.value_loc
,b.fb_val_loc*s.factor*m.momix*r_rate value_usd ,b.value_usd
,b.fb_cst_loc*s.factor*m.momix cost_loc ,b.cost_loc
,b.fb_cst_loc*s.factor*m.momix*c_rate cost_usd ,b.cost_usd
,(b.fb_qty*s.factor*m.momix) units ,b.units
FROM FROM
basemix b basemix b
CROSS JOIN vscale s CROSS JOIN mxm
CROSS JOIN mmixp m
CROSS JOIN closest
LEFT OUTER JOIN mseq ON
mseq.m = closest.m
LEFT OUTER JOIN gld od ON LEFT OUTER JOIN gld od ON
make_date(mseq.yr + 2020,mseq.cal,m.odom) BETWEEN od.sdat AND od.edat make_date(mxm.yr + 2020,mxm.cal,mxm.odom) BETWEEN od.sdat AND od.edat
LEFT OUTER JOIN gld rd ON LEFT OUTER JOIN gld rd ON
make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag BETWEEN rd.sdat AND rd.edat make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag BETWEEN rd.sdat AND rd.edat
LEFT OUTER JOIN gld sd ON LEFT OUTER JOIN gld sd ON
make_date(mseq.yr + 2020,mseq.cal,m.odom) + rlag + slag BETWEEN sd.sdat AND sd.edat make_date(mxm.yr + 2020,mxm.cal,mxm.odom) + rlag + slag BETWEEN sd.sdat AND sd.edat
WHERE
m._month = (SELECT _month FROM closest)
)
,pscale AS (
SELECT
(SELECT pincr::numeric FROM target) incr
,(SELECT sum(fb_val_loc * r_rate) FROM volume) base
--(target_sales - current_state)/current state = adjustment factor
,((SELECT pincr::numeric FROM target) - (SELECT sum(fb_val_loc * r_rate) FROM volume))/(SELECT sum(fb_val_loc * r_rate) FROM volume) factor
)
,price AS (
SELECT
b.plnt --master data
,b."ddord#" --0
,b."dditm#" --0
,b."fgbol#" --0
,b."fgent#" --0
,b."diinv#" --0
,b."dilin#" --0
,b.promo --history date mix
,b.return_reas --0
,b.terms --history cust mix
,b.custpo --0
,b.dhincr --0
,b.diext --0
,b.ditdis --0
,b.dcodat --calculated date mix
,b.ddqdat --calculated date mix
,b.dcmdat --calculated date mix
,b.dhidat --calculated date mix
,b.fspr --calculated date mix
,b.remit_to --master data
,b.bill_class --master data
,b.bill_cust --history cust mix
,b.bill_rep --master data
,b.bill_terr --master data
,b.ship_class --master data
,b.ship_cust --history cust mix
,b.ship_rep --master data
,b.ship_terr --master data
,b.quota_rep --master data
,b.account --master data
,b.shipgrp --master data
,b.geo --master data
,b.chan --master data
,b.orig_ctry --master data
,b.orig_prov --master data
,b.orig_post --master data
,b.dest_ctry --master data
,b.dest_prov --master data
,b.dest_post --master data
,b.part --history part mix
,b.ord_gldc --master data
,b.majg --master data
,b.ming --master data
,b.majs --master data
,b.mins --master data
,b.gldc --master data
,b.glec --master data
,b.harm --master data
,b.clss --master data
,b.brand --master data
,b.assc --master data
,b.fs_line --master data
,b.r_currency --history cust mix
,b.r_rate --master data
,b.c_currency --master data
,b.c_rate --master data
,b.ddqtoi --0
,b.ddqtsi --0
,b.fgqshp --0
,b.diqtsh --0
,0 fb_qty
,0 fb_cst_loc
,0 fb_cst_loc_cur
,0 fb_cst_loc_fut
,b.fb_val_loc*p.factor fb_val_loc
,b.fb_val_loc_pl*p.factor fb_val_loc_pl
,b.calc_status --0
,b.flag --0
,b.orderdate
,b.requestdate
,b.shipdate
,b.adj_orderdate
,b.adj_requestdate
,b.adj_shipdate
,'replace_version' "version" --calculated
,'replace_source'||' price' iter --calculateds
,'replace_iterdet' iterdet
,$$replace_iterdef$$::jsonb iterdef
,b.order_season
,b.order_month
,b.ship_season
,b.ship_month
,b.request_season
,b.request_month
,b.part_descr
,b.part_family
,b.part_group
,b.branding
,b.color
,b.segm
,b.bill_cust_descr
,b.billto_group
,b.ship_cust_descr
,b.shipto_group
,b.majg_descr
,b.ming_descr
,b.majs_descr
,b.mins_descr
,b.mod_chan
,b.mod_chansub
,b.quota_rep_descr
,b.director_descr
,b.fb_val_loc*p.factor value_loc
,b.fb_val_loc*p.factor*r_rate value_usd
,0 cost_loc
,0 cost_usd
,0 units
FROM
volume b
CROSS JOIN pscale p
)
, ins AS (
INSERT INTO rlarp.osm_fcpool (SELECT * FROM price UNION ALL SELECT * FROM volume) RETURNING *
)
,insagg AS (
SELECT
bill_cust_descr
,billto_group
,ship_cust_descr
,shipto_group
,quota_rep_descr
,director_descr
,segm
,mod_chan
,mod_chansub
,majg_descr
,ming_descr
,majs_descr
,mins_descr
,brand
,part_family
,part_group
,branding
,color
,part_descr
,order_season
,order_month
,ship_season
,ship_month
,request_season
,request_month
,promo
,version
,iter
,sum(value_loc) value_loc
,sum(value_usd) value_usd
,sum(cost_loc) cost_loc
,sum(cost_usd) cost_usd
,sum(units) units
FROM
ins
GROUP BY
bill_cust_descr
,billto_group
,ship_cust_descr
,shipto_group
,quota_rep_descr
,director_descr
,segm
,mod_chan
,mod_chansub
,majg_descr
,ming_descr
,majs_descr
,mins_descr
,brand
,part_family
,part_group
,branding
,color
,part_descr
,order_season
,order_month
,ship_season
,ship_month
,request_season
,request_month
,promo
,version
,iter
)
--SELECT * FROM insagg
SELECT json_agg(row_to_json(insagg)) x from insagg