--\timing TRUNCATE TABLE rlarp.osmf; INSERT INTO rlarp.osmf WITH gld AS ( SELECT N1COMP COMP ,N1CCYY FSYR ,KPMAXP PERDS ,N1FSPP PERD ,to_char(N1FSYP,'FM0000') FSPR ,N1SD01 SDAT ,N1ED01 EDAT ,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,'00') SSPR FROM LGDAT.GLDATREF INNER JOIN LGDAT.GLDATE ON KPCOMP = N1COMP AND KPCCYY = N1CCYY WHERE N1COMP = 93 --AND DIGITS(N1FSYP) = '1901' ) --SELECT * FROM gld ,baseline AS ( SELECT -----------documents------------- null::int "ddord#" ,null::int "dditm#" ,null::int "fgbol#" ,null::int "fgent#" ,null::int "diinv#" ,null::int "dilin#" ,null::int quoten ,null::int quotel ----------dates/status------------------ ,o.odate dcodat ,o.rdate ddqdat ,null::date dcmdat ,null::date fesdat ,greatest(least(o.sdate,gld.edat),gld.sdat) dhidat ,null::text fesind ,null::text dhpost ,o.fspr -----------measures-------------------- ,null::numeric ddqtoi ,null::numeric ddqtsi ,null::numeric fgqshp ,null::numeric diqtsh ,null::numeric diext ,null::numeric ditdis ,null::jsonb discj ,null::text dhincr ,o.plnt ,COALESCE(o.promo,'') promo ,null::text return_reas ,o.terms ,null::text custpo ,null::text remit_to ,null::text bill_class ,o.bill_cust ,null::text bill_rep ,null::text bill_terr ,null::text ship_class ,o.ship_cust ,null::text ship_rep ,null::text ship_terr ,o.dsm ,null::text account ,null::text shipgrp ,null::text geo ,null::text chan ,null::text chansub ,null::text orig_ctry ,null::text orig_prov ,null::text orig_post ,null::text bill_ctry ,null::text bill_prov ,null::text bill_post ,null::text dest_ctry ,null::text dest_prov ,null::text dest_post ,o.part ,null::text styc ,null::text colc ,null::text colgrp ,null::text coltier ,null::text colstat ,null::text sizc ,null::text uomp ,null::text suffix ,null::text accs_ps ,null::text brnd ,null::text majg ,null::text ming ,null::text majs ,null::text mins ,null::text gldco ,null::text gldc ,null::text glec ,null::text harm ,null::text clss ,null::text brand ,null::text assc ,null::text ddunit ,null::text unti ,null::numeric lbs ,null::numeric plt ,null::text plcd ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,sum(o.fb_qty) fb_qty ,sum(o.fb_val_loc) fb_val_loc ,sum(o.fb_val_loc_dis) fb_val_loc_dis ,sum(o.fb_val_loc_qt) fb_val_loc_qt ,sum(o.fb_val_loc_pl) fb_val_loc_pl ,sum(o.fb_val_loc_tar) fb_val_loc_tar ,sum(o.fb_cst_loc) fb_cst_loc ,sum(o.fb_cst_loc_cur) fb_cst_loc_cur ,sum(o.fb_cst_loc_fut) fb_cst_loc_fut ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas ,o.pdate ,o.pseas -----when null, greatest/least is just going to act like coalesce ,greatest(least(o.sdate,gld.edat),gld.sdat) sdate ,ss.ssyr sseas ,'15mo' "version" ,'actuals' iter FROM rlarp.osm o --snap the ship dates of the historic fiscal period LEFT OUTER JOIN gld ON gld.fspr = o.fspr --get the shipping season for open orders based on the snapped date LEFT OUTER JOIN gld ss ON greatest(least(o.sdate,gld.edat),gld.sdat) BETWEEN ss.sdat AND ss.edat WHERE ( --base period orders booked.... o.odate BETWEEN '2022-06-01' AND '2023-02-15' --...or any open orders currently booked before cutoff.... OR (o.calc_status IN ('OPEN','BACKORDER') and o.odate < '2023-02-15') --...or anything that shipped in that period OR ((o.fspr BETWEEN '2301' AND '2309' OR o.fspr = '0000') AND o.sdate < '2023-02-15') ) AND fs_line = '41010' AND calc_status <> 'CANCELED' AND NOT (calc_status = 'CLOSED' AND flag = 'REMAINDER') ---exclude integrated quotes---- AND version = 'ACTUALS' GROUP BY o.fspr ,o.plnt ,COALESCE(o.promo,'') ,o.terms ,o.bill_cust ,o.ship_cust ,o.dsm ,o.part ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas ,o.pdate ,o.pseas ,greatest(least(o.sdate,gld.edat),gld.sdat) ,ss.ssyr UNION ALL SELECT -----------documents------------- null::int "ddord#" ,null::int "dditm#" ,null::int "fgbol#" ,null::int "fgent#" ,null::int "diinv#" ,null::int "dilin#" ,null::int quoten ,null::int quotel ----------dates/status------------------ ,o.odate + interval '1 year' dcodat ,o.rdate + interval '1 year' ddqdat ,null::date dcmdat ,null::date fesdat ,greatest(least(o.sdate,gld.edat),gld.sdat) + interval '1 year' dhidat ,null::text fesind ,null::text dhpost ,o.fspr -----------measures-------------------- ,null::numeric ddqtoi ,null::numeric ddqtsi ,null::numeric fgqshp ,null::numeric diqtsh ,null::numeric diext ,null::numeric ditdis ,null::jsonb discj ,null::text dhincr ,plnt ,COALESCE(o.promo,'') promo ,null::text return_reas ,o.terms ,null::text custpo ,null::text remit_to ,null::text bill_class ,o.bill_cust ,null::text bill_rep ,null::text bill_terr ,null::text ship_class ,ship_cust ,null::text ship_rep ,null::text ship_terr ,o.dsm ,null::text account ,null::text shipgrp ,null::text geo ,null::text chan ,null::text chansub ,null::text orig_ctry ,null::text orig_prov ,null::text orig_post ,null::text bill_ctry ,null::text bill_prov ,null::text bill_post ,null::text dest_ctry ,null::text dest_prov ,null::text dest_post ,o.part ,null::text styc ,null::text colc ,null::text colgrp ,null::text coltier ,null::text colstat ,null::text sizc ,null::text uomp ,null::text suffix ,null::text accs_ps ,null::text brnd ,null::text majg ,null::text ming ,null::text majs ,null::text mins ,null::text gldco ,null::text gldc ,null::text glec ,null::text harm ,null::text clss ,null::text brand ,null::text assc ,null::text ddunit ,null::text unti ,null::numeric lbs ,null::numeric plt ,null::text plcd ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,sum(o.fb_qty) fb_qty ,sum(o.fb_val_loc) fb_val_loc ,sum(o.fb_val_loc_dis) fb_val_loc_dis ,sum(o.fb_val_loc_qt) fb_val_loc_qt ,sum(o.fb_val_loc_pl) fb_val_loc_pl ,sum(o.fb_val_loc_tar) fb_val_loc_tar ,sum(o.fb_cst_loc) fb_cst_loc ,sum(o.fb_cst_loc_cur) fb_cst_loc_cur ,sum(o.fb_cst_loc_fut) fb_cst_loc_fut ,o.calc_status ,o.flag ,o.odate + interval '1 year' odate ,o.oseas + 1 rseas ,o.rdate + interval '1 year' rdate ,o.rseas + 1 rseas ,o.pdate + interval '1 year' pdate ,o.pseas + 1 pseas -----when null, greatest/least is just going to act like coalesce ,greatest(least(o.sdate,gld.edat),gld.sdat) + interval '1 year' sdate ,ss.ssyr sseas ,'actuals' "version" ,'actuals_plug' iter FROM rlarp.osm o LEFT OUTER JOIN gld ON gld.fspr = o.fspr LEFT OUTER JOIN gld ss ON greatest(least(o.sdate,gld.edat),gld.sdat) + interval '1 year' BETWEEN ss.sdat AND ss.edat WHERE o.odate BETWEEN '2022-02-15' AND '2022-05-31' AND fs_line = '41010' AND calc_status <> 'CANCELED' ------exclude actuals for now and use forecast to get the plug for the rest of the year AND version = 'ACTUALS' GROUP BY o.fspr ,plnt ,COALESCE(o.promo,'') ,o.terms ,o.bill_cust ,o.ship_cust ,o.dsm ,o.part ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas ,o.pdate ,o.pseas ,greatest(least(o.sdate,gld.edat),gld.sdat) ,ss.ssyr UNION ALL SELECT -----------documents------------- null::int "ddord#" ,null::int "dditm#" ,null::int "fgbol#" ,null::int "fgent#" ,null::int "diinv#" ,null::int "dilin#" ,null::int quoten ,null::int quotel ----------dates/status------------------ ,o.odate + interval '1 year' dcodat ,o.rdate + interval '1 year' ddqdat ,null::date dcmdat ,null::date fesdat ,greatest(least(o.sdate,gld.edat),gld.sdat) + interval '1 year' dhidat ,null::text fesind ,null::text dhpost ,o.fspr -----------measures-------------------- ,null::numeric ddqtoi ,null::numeric ddqtsi ,null::numeric fgqshp ,null::numeric diqtsh ,null::numeric diext ,null::numeric ditdis ,null::jsonb discj ,null::text dhincr ,plnt ,COALESCE(o.promo,'') promo ,null::text return_reas ,o.terms ,null::text custpo ,null::text remit_to ,null::text bill_class ,o.bill_cust ,null::text bill_rep ,null::text bill_terr ,null::text ship_class ,ship_cust ,null::text ship_rep ,null::text ship_terr ,null::text dsm ,null::text account ,null::text shipgrp ,null::text geo ,null::text chan ,null::text chansub ,null::text orig_ctry ,null::text orig_prov ,null::text orig_post ,null::text bill_ctry ,null::text bill_prov ,null::text bill_post ,null::text dest_ctry ,null::text dest_prov ,null::text dest_post ,o.part ,null::text styc ,null::text colc ,null::text colgrp ,null::text coltier ,null::text colstat ,null::text sizc ,null::text uomp ,null::text suffix ,null::text accs_ps ,null::text brnd ,null::text majg ,null::text ming ,null::text majs ,null::text mins ,null::text gldco ,null::text gldc ,null::text glec ,null::text harm ,null::text clss ,null::text brand ,null::text assc ,null::text ddunit ,null::text unti ,null::numeric lbs ,null::numeric plt ,null::text plcd ,o.fs_line ,o.r_currency ,null::numeric r_rate ,o.c_currency ,null::numeric c_rate ,sum(o.fb_qty) fb_qty ,sum(o.fb_val_loc) fb_val_loc ,sum(o.fb_val_loc_dis) fb_val_loc_dis ,sum(o.fb_val_loc_qt) fb_val_loc_qt ,sum(o.fb_val_loc_pl) fb_val_loc_pl ,sum(o.fb_val_loc_tar) fb_val_loc_tar ,sum(o.fb_cst_loc) fb_cst_loc ,sum(o.fb_cst_loc_cur) fb_cst_loc_cur ,sum(o.fb_cst_loc_fut) fb_cst_loc_fut ,o.calc_status ,o.flag ,o.odate odate ,o.oseas rseas ,o.rdate rdate ,o.rseas rseas ,o.pdate pdate ,o.pseas pseas -----when null, greatest/least is just going to act like coalesce ,greatest(least(o.sdate,gld.edat),gld.sdat) sdate ,ss.ssyr sseas ,'actuals' "version" ,'forecast_plug' iter FROM rlarp.osmp o LEFT OUTER JOIN gld ON gld.fspr = o.fspr LEFT OUTER JOIN gld ss ON greatest(least(o.sdate,gld.edat),gld.sdat) BETWEEN ss.sdat AND ss.edat WHERE false --o.odate BETWEEN '2020-03-01' AND '2020-05-31' --AND fs_line = '41010' --AND calc_status <> 'CANCELED' ------dont pull forecast for a baseline this time around-- GROUP BY o.fspr ,plnt ,COALESCE(o.promo,'') ,o.terms ,o.bill_cust ,ship_cust ,o.part ,o.fs_line ,o.r_currency ,o.c_currency ,o.calc_status ,o.flag ,o.odate ,o.oseas ,o.rdate ,o.rseas ,o.pdate ,o.pseas ,greatest(least(o.sdate,gld.edat),gld.sdat) ,ss.ssyr ) ,incr AS ( SELECT o."ddord#" ,o."dditm#" ,o."fgbol#" ,o."fgent#" ,o."diinv#" ,o."dilin#" ,o.quoten ,o.quotel ,o.dcodat + interval '1 year' --incremented ,o.ddqdat + interval '1 year' --incremented ,o.dcmdat ,o.fesdat ,o.dhidat + interval '1 year' --incremented ,o.fesind ,o.dhpost ,gld.fspr --incremented ,o.ddqtoi ,o.ddqtsi ,o.fgqshp ,o.diqtsh ,o.diext ,o.ditdis ,o.discj ,o.dhincr ,o.plnt ,o.promo ,o.return_reas ,o.terms ,o.custpo ,o.remit_to ,o.bill_class ,o.bill_cust ,o.bill_rep ,o.bill_terr ,o.ship_class ,o.ship_cust ,o.ship_rep ,o.ship_terr ,o.dsm ,o.account ,o.shipgrp ,o.geo ,o.chan ,o.chansub ,o.orig_ctry ,o.orig_prov ,o.orig_post ,o.bill_ctry ,o.bill_prov ,o.bill_post ,o.dest_ctry ,o.dest_prov ,o.dest_post ,o.part ,o.styc ,o.colc ,o.colgrp ,o.coltier ,o.colstat ,o.sizc ,o.uomp ,o.suffix ,o.accs_ps ,o.brnd ,o.majg ,o.ming ,o.majs ,o.mins ,o.gldco ,o.gldc ,o.glec ,o.harm ,o.clss ,o.brand ,o.assc ,o.ddunit ,o.unti ,o.lbs ,o.plt ,o.plcd ,o.fs_line ,o.r_currency ,o.r_rate ,o.c_currency ,o.c_rate ,o.fb_qty ,o.fb_val_loc ,o.fb_val_loc_dis ,o.fb_val_loc_qt ,o.fb_val_loc_pl ,o.fb_val_loc_tar ,o.fb_cst_loc ,o.fb_cst_loc_cur ,o.fb_cst_loc_fut ,o.calc_status ,o.flag ,o.odate + interval '1 year' --incremented ,o.oseas + 1 --incremented ,o.rdate + interval '1 year' --incremented ,o.rseas + 1 --incremented ,o.pdate + interval '1 year' --incremented ,o.pseas + 1 --incremented ,o.sdate + interval '1 year' --incremented ,o.sseas + 1 --incremented ,'b22' "version" ,'copy' iter FROM baseline o LEFT OUTER JOIN gld ON o.sdate + interval '1 year' BETWEEN gld.sdat and gld.edat WHERE o.odate + interval '1 year' >= '2021-06-01' ) --INSERT INTO rlarp.osmf SELECT -----------documents------------- "ddord#" ,"dditm#" ,"fgbol#" ,"fgent#" ,"diinv#" ,"dilin#" ,quoten ,quotel ----------dates/status------------------ ,dcodat ,ddqdat ,dcmdat ,fesdat ,dhidat ------------document flags------------------- ,fesind ,dhpost ,fspr -----------measures-------------------- ,ddqtoi ,ddqtsi ,fgqshp ,diqtsh ,diext ,ditdis ,discj ------------document attributes-------------- ,dhincr ,plnt ,promo ,return_reas ,terms ,custpo ,remit_to ------------customer info--------------------- ,bill_class ,bill_cust ,bill_rep ,bill_terr ,ship_class ,ship_cust ,ship_rep ,ship_terr ,dsm ,account ,shipgrp ,geo ,chan ,chansub ,orig_ctry ,orig_prov ,orig_post ,bill_ctry ,bill_prov ,bill_post ,dest_ctry ,dest_prov ,dest_post ------------product info---------------------- ,part ,styc ,colc ,colgrp ,coltier ,colstat ,sizc ,uomp ,suffix ,accs_ps ,brnd ,majg ,ming ,majs ,mins ,gldco ,gldc ,glec ,harm ,clss ,brand ,assc ,ddunit ,unti ,lbs ,plt ------------fiscal info----------------------- ,plcd ,fs_line ,r_currency ,r_rate ,c_currency ,c_rate ,fb_qty ,fb_val_loc ,fb_val_loc_dis ,fb_val_loc_qt ,fb_val_loc_pl ,fb_val_loc_tar ,fb_cst_loc ,fb_cst_loc_cur ,fb_cst_loc_fut ------------status info----------------------- ,calc_status ,flag ,odate ,oseas ,rdate ,rseas ,pdate ,pseas ,sdate ,sseas ,"version" ,iter FROM ( SELECT * FROM baseline UNION ALL SELECT * FROM incr ) x ---identify short ships: causes disconnect with actual sales------------------------------------------------------------------- --UPDATE rlarp.osmfs SET iter = 'short ship' WHERE calc_status = 'CLOSED' AND flag = 'REMAINDER'; ---identify goofy ship dates: causes disconnect with sales when splicing in a forecast that has this problem------------------- --UPDATE rlarp.osmfs SET iter = 'bad date' WHERE adj_shipdate < adj_orderdate;