forecast_api/offline/keystone.pg.sql

354 lines
13 KiB
SQL

WITH
customers AS (
SELECT shipgrp,dsm,pounds::numeric pounds FROM (VALUES
('AL PAR PEAT CO','10035 - MATTHEW STAAL','20000'),
('AMA PLASTICS','40040 - TINA PETTIGREW','10000'),
('AMERICAN FARMS','10039 - DUSTIN KUYKENDOLL','50000'),
('ARMSTRONG GROWERS','30035 - RODNEY RIOS','50000'),
('AUBIN NURSERIES LTD','40040 - TINA PETTIGREW','5000'),
('BRADFORD CO-OP STORAGE LTD','40040 - TINA PETTIGREW','5000'),
('BRADFORD GREENHOUSES','40040 - TINA PETTIGREW','50000'),
('CAL COLOR','30054 - JASON MOTTIN','15000'),
('CONROE GREENHOUSES INC','10041 - TAMARA RISKEN','13438'),
('CY GROWERS SUPPLIES LTD','40042 - TOM MORRIS','18710'),
('DAN & JERRYS GREENHOUSE','13027 - STEVE RUSTEBERG','50000'),
('DEVRY GREENHOUSES','40042 - TOM MORRIS','24957'),
('DREAM WITH COLORS','30035 - RODNEY RIOS','50000'),
('ENCHANTED GARDENS','10041 - TAMARA RISKEN','2396'),
('FREEMAN HERBS','40039 - DAVE BODO','20000'),
('GARDEN STATE GROWERS','10043 - CHERISSE GILSTROP','60000'),
('GREAT LAKES GREENHOUSES','13025 - JAMES REGER','2000'),
('GREEN LAKE NURSERY','10041 - TAMARA RISKEN','11218'),
('HALIFAX SEED CO INC','40040 - TINA PETTIGREW','5000'),
('HARTS NURSERY','30053 - SKYE SAWYER','15000'),
('HEARTLAND GROWERS','10048 - PHILIP BIEDENBACH','67000'),
('HJS WHOLESALE LTD','40040 - TINA PETTIGREW','10000'),
('HYDROGARDEN SUPPLY SERVICES','40040 - TINA PETTIGREW','10000'),
('IRRIGATION PLUS INC','40040 - TINA PETTIGREW','3000'),
('IWASAKI BROS INC','30053 - SKYE SAWYER','14000'),
('JEFFRIES NURSERIES','40040 - TINA PETTIGREW','5000'),
('JOHNSON GARDEN CENTER','10041 - TAMARA RISKEN','1240'),
('KAW VALLEY GREENHOUSES','10041 - TAMARA RISKEN','6100'),
('KAWAHARA NURSERY','30054 - JASON MOTTIN','25000'),
('LA FERME GROVER INC','40043 - JEFFREY SCHAEFER','4000'),
('LUCAS GREENHOUSE','10043 - CHERISSE GILSTROP','22500'),
('MARIA GARDENS','10048 - PHILIP BIEDENBACH','9000'),
('MARTINSON''S GARDEN WORKS','10049 - STEVEN STUPPIELLO','50000'),
('MEYERS FRUIT FARM','70011 - DNU-SUSAN MURTAUGH','20000'),
('NOEL WILSON INC','40043 - JEFFREY SCHAEFER','20000'),
('NUTRIEN AG SOLUTIONS','40042 - TOM MORRIS','8993'),
('OELSCHIG NURSERY INC','10040 - RYAN CHITWOOD','56924'),
('OLSONS GREENHOUSE GARDENS','12028 - JACOB WILKINSON','20000'),
('PACIFIC GROWER','30053 - SKYE SAWYER','88000'),
('PARKS BROTHERS FARMS','10041 - TAMARA RISKEN','10380'),
('PETERSON NURSERY LLC','10041 - TAMARA RISKEN','2396'),
('PINEAE GREENHOUSES & DIST INC','12028 - JACOB WILKINSON','50000'),
('PLEASANT VALLEY FARM INC','10041 - TAMARA RISKEN','54666'),
('PLEASANT VIEW GARDENS','13028 - RICHARD MEULE','28000'),
('RAINBOW GREENHOUSES','40042 - TOM MORRIS','7929'),
('REKKER GARDENS INC','40040 - TINA PETTIGREW','2500'),
('RICHARDSON BROS GREENHOUSE INC','13027 - STEVE RUSTEBERG','90000'),
('ROWE PLANT FARM','10041 - TAMARA RISKEN','4096'),
('SEDAN FLORAL','10041 - TAMARA RISKEN','27744'),
('SHERIDAN NURSERIES','40039 - DAVE BODO','18816'),
('SMITH GARDENS INC','30053 - SKYE SAWYER','44000'),
('STOKLEY NURSERY','10049 - STEVEN STUPPIELLO','80000'),
('TERIS SUPPLY SERVICES','40043 - JEFFREY SCHAEFER','12000'),
('TIDAL CREEK GROWERS','10043 - CHERISSE GILSTROP','20623'),
('UNCLE JOHN''S PLANT FARM','10048 - PHILIP BIEDENBACH','10000'),
('WELBY GARDENS','12028 - JACOB WILKINSON','4507')
) x(shipgrp,dsm,pounds)
)
,parts AS (
SELECT part,units::numeric units,price::numeric price,pounds::numeric pounds FROM (VALUES
('KEP010P0G18B524','43378',0.04,956.4849,0.02205),
('KET12P10G18B027','3615',0.54,1075.8963,0.29762),
('KEP010Q0G18B281','28919',0.072,1275.03871,0.04409),
('KET08Q11G18B019','3615',0.6785,914.595,0.253),
('KEP015P0G18B316','36149',0.05506,956.50254,0.02646),
('KET10P15G18B030','3615',0.5488,1075.8963,0.29762),
('KEP020Q0G18B170','28919',0.105,1912.70266,0.06614),
('KET08Q21G18B019','3615',0.9132,1753.3473,0.48502)
) x(part,units,price,pounds,weight)
)
,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)
)
,keystone AS (
select
c.shipgrp
,c.dsm
,c.pounds
,p.part
,p.units
,p.price
,p.pounds
,c.pounds/10000 scale
,round((c.pounds/10000)*p.units,0) fc_units
,round((c.pounds/10000)*p.units,0)*(p.pounds/p.units) fc_lbs
FROM
customers c
CROSS JOIN parts p
)
,alldates AS (
SELECT
bill_cust_descr
,ship_cust_descr
,shipto_group
,promo
,terms
,r_currency
-- ,order_month
-- ,mseq.s seq
,order_date
-- ,request_date
,ship_date
-- ,ship_month
-- ,sum(value_usd) value_usd_net
,sum(pounds) pounds_net
-- ,sum(value_usd) FILTER (WHERE iter IN ('copy','actuals','actuals_plug')) value_usd_baseline
,sum(pounds) FILTER (WHERE iter IN ('copy','actuals','actuals_plug')) pounds_baseline
FROM
rlarp.osm_pool
WHERE
shipto_group IN (select distinct shipgrp FROM customers)
-----------------scenario----------------------------
-- AND version IN ('b26')
AND order_season = 2026
AND ship_season = 2026
-----------------additional params-------------------
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
AND order_date <= ship_date
GROUP BY
bill_cust_descr
,ship_cust_descr
,shipto_group
,promo
,terms
,r_currency
-- ,order_month
-- ,mseq.s seq
,order_date
-- ,request_date
,ship_date
-- ,ship_month
-- HAVING
-- sum(value_usd) <> 0
)
,date_rank as (
SELECT
bill_cust_descr
,ship_cust_descr
,shipto_group
,promo
,terms
,r_currency
,order_date
,ship_date
,row_number() over (partition by shipto_group order by pounds_baseline desc) rn
,COALESCE(pounds_baseline ,pounds_net) pounds
-- ,CASE WHEN sum(pounds_net) OVER () = 0 THEN 0 ELSE round(pounds_net / sum(pounds_net) OVER (),5) END fc_mix
-- ,CASE WHEN sum(pounds_baseline) OVER () = 0 THEN 0 ELSE round(pounds_baseline / sum(pounds_baseline) OVER (),5) END baseline_mix
FROM
alldates
ORDER BY
order_date ASC
,ship_date ASC
)
,date_mix as (
SELECT
bill_cust_descr
,ship_cust_descr
,shipto_group
,promo
,terms
,r_currency
,order_date
,ship_date
,rn
,pounds/sum(pounds) over (partition by shipto_group) mix
-- ,CASE WHEN sum(pounds_net) OVER () = 0 THEN 0 ELSE round(pounds_net / sum(pounds_net) OVER (),5) END fc_mix
-- ,CASE WHEN sum(pounds_baseline) OVER () = 0 THEN 0 ELSE round(pounds_baseline / sum(pounds_baseline) OVER (),5) END baseline_mix
FROM
date_rank
WHERE
rn <= 3
ORDER BY
order_date ASC
,ship_date ASC
)
,combine AS (
SELECT
k.*
,d.*
,k.scale * d.mix factor
,d.mix * k.scale * k.fc_lbs split_pounds
,d.mix * k.scale * k.units split_units
FROM
keystone k
LEFT OUTER JOIN date_mix d ON
d.shipto_group = k.shipgrp
)
-- SELECT * FROM date_mix where shipto_group ~ 'SHERIDAN'
-- select * from combine
,basemix AS (
SELECT
od.fspr
,c.promo
,c.terms
,c.r_currency
,c.bill_cust_descr
,c.ship_cust_descr
,c.dsm quota_rep_descr
,c.part
,round(c.factor * c.units,0) units
,round(c.factor * c.fc_lbs,0) pounds
,round(c.factor * c.units,0)* c.price value_usd --assume that target dollars are USD
,c.order_date
,od.sortmo order_month
,od.ssyr order_season
,c.ship_date request_date
,sd.sortmo request_month
,sd.ssyr request_season
,c.ship_date
,sd.sortmo ship_month
,sd.ssyr ship_season
,c.factor
,c.split_pounds
FROM
combine c
LEFT OUTER JOIN rlarp.gld sd ON
c.ship_date <@ sd.drange
LEFT OUTER JOIN rlarp.gld od ON
c.order_date <@ od.drange
)
,log AS (
INSERT INTO rlarp.osm_log (doc) SELECT jsonb_build_object('user',current_user,'tag','Keystone Incr','type','Keystone Incr','stamp',current_timestamp,'source','top level','message','Keystone Incr') RETURNING *
)
,final AS (
SELECT
b.fspr
,i.dplt plnt
,b.promo
,b.terms
,b.bill_cust_descr
,b.ship_cust_descr
,r.rcode
,b.quota_rep_descr
,r.director
,bc.dba billto_group
,sc.dba shipto_group
,CASE SUBSTRING(bc.cclass,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.cclass,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.cclass,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.cclass,2,3)
WHEN 'DIS' THEN 'WHS'
ELSE CASE SUBSTRING(sc.cclass,1,1) WHEN 'R' THEN 'RDP' ELSE 'DRP' END
END
WHEN 'MAS' THEN 'RMN'
WHEN 'NAT' THEN 'RMN'
ELSE CASE SUBSTRING(sc.cclass,1,1) WHEN 'R' THEN 'RDI' ELSE 'DIR' END
END chansub
,null::text chan_retail
,b.part
,b.part || ' - ' || i.descr
,i.partgroup
,i.branding
,i.majgd majg_descr
,i.mingd ming_descr
,i.majsd majs_descr
,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
,pl.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((i.futstd*b.units)::numeric ,2) cost_loc
,round((i.futstdus*b.units)::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"
,'Keystone Incr' 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
-- ,i.nwht * CASE i.nwun WHEN 'KG' THEN 2.2046 ELSE 1 END weight
-- ,b.pounds ref_pounds
FROM
basemix b
CROSS JOIN log
LEFT OUTER JOIN rlarp.repc r ON
r.repp = b.quota_rep_descr
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON
i.item = b.part
LEFT OUTER JOIN rlarp.cust bc ON
bc.code = rtrim(substring(b.bill_cust_descr,1,8))
LEFT OUTER JOIN rlarp.cust sc ON
sc.code = rtrim(substring(b.ship_cust_descr,1,8))
LEFT OUTER JOIN seg ON
seg.glec = i.glec
LEFT OUTER JOIN rlarp.plpr pl ON
pl.plnt = i.dplt
LEFT OUTER JOIN rlarp.ffcret cx ON
cx.perd = pl.gl AND
cx.rtyp = 'MA' AND
cx.fcur = pl.curr AND
cx.tcur = 'US'
LEFT OUTER JOIN rlarp.ffcret rx ON
rx.perd = pl.gl AND
rx.rtyp = 'MA' AND
rx.fcur = b.r_currency AND
rx.tcur = 'US'
)
INSERT INTO rlarp.osm_pool SELECT * FROM final;
-- select * from final