commit: 2025-04-09 00:03:53

This commit is contained in:
Paul Trowbridge 2025-04-09 00:03:53 -04:00
parent 044e605dd4
commit e1b19482db
2 changed files with 362 additions and 285 deletions

View File

@ -139,291 +139,291 @@ CREATE TABLE rlarp.orphans AS (
-- )
-- -- select * from checkc
-- -- SELECT cust, sum(fb_qty) FROM newc LEFT OUTER JOIN profile ON shipgrp = cust GROUP by cust
-- ----grouped prices-------------
-- ,npgrp AS (
----grouped prices-------------
,npgrp AS (
SELECT
o.bill_dba
,o.ship_dba
,o.bill_cust
,o.ship_cust
,o.promo
,o.terms
,o.dsm
,o.part
,o.odate
,o.qtyord
,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END lbs
,i.mpck pltq
,ROUND(o.sales_usd / o.qty,5) price
,(o.pricing->>'guidance_price')::NUMERIC guidance
,(o.pricing->>'floor' )::numeric(15,5) floor
,(o.pricing->>'ceiling')::numeric(15,5) ceiling
,(o.pricing->>'uselimits')::boolean uselimits
FROM
rlarp.osm_stack o
INNER JOIN "CMS.CUSLG".itemm i ON
i.item = o.part
INNER JOIN checkc c ON
c.shipgrp = o.customer
AND c.oseas = o.oseas
WHERE
VERSION = 'Actual'
AND o.oseas >= 2018
AND calc_status <> 'CANCELED'
AND o.fs_line = '41010'
AND o.part <> ''
AND substring(o.glec,1,1) <= '2'
AND o.qty <> 0
AND o.sseas IS NOT NULL
-- AND customer in (select distinct renamed FROM newc )
GROUP BY
o.bill_dba
,o.ship_dba
,o.dsm
,i.partgroup
,i.pricegroup
,o.part
,o.odate
,o.qtyord
,o.pounds
,o.pallets
,ROUND(o.sales_usd / o.qty,5)
,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END
,i.mpck
,(o.pricing->>'guidance_price')::NUMERIC
,(o.pricing->>'floor' )::numeric(15,5)
,(o.pricing->>'ceiling')::numeric(15,5)
,(o.pricing->>'uselimits')::boolean
)
----sequenced for most recent price------------
,nseq AS (
SELECT
bill_dba
,ship_dba
,part
,odate
,qtyord
,lbs
,pltq
,price
,guidance
,floor
,ceiling
,uselimits
,row_number() OVER (PARTITION BY bill_dba, ship_dba, part ORDER BY odate desc) rn
,round(avg(price) over (PARTITION BY bill_dba, ship_dba, part),5) avgprice
FROM
npgrp
)
-- SELECT * FROM seq WHERE rn = 1
,ngrp AS (
SELECT
sg.fspr
,i.dplt
,o.promo
,o.terms
,o.bill_cust
,o.ship_cust
,o.dsm
,o.dsm
,null:: director
,o.account
,o.shipgrp
,o.chan
,o.chansub
,null::channel_retail
,i.partgroup
,i.pricegroup
,o.part
,o.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
,o.fs_line
,o.r_currency
,rx.rate r_rate
,pl.curr c_currency
,rx.rate r_rate
,pl.curr c_currency
,cx.rate c_rate
,ROUND(sum(fb_qty * lbs),5) lbs
,ROUND(sum(fb_qty),2) qty
,ROUND(sum(fb_val_loc * r_rate),2) sales_usd
,ROUND(sum(fb_cst_loc_cur * c_rate),2) cost_curstd_usd
,'CLOSED' calc_status
,'SHIPMENT' flag
,o.odate
,o.oseas
,o.odate
,og.sortmo omon
,o.sseas
,o.sdate
,sg.sortmo smon
-- ,o.calc_status
FROM
profile o
LEFT OUTER JOIN rlarp.gld og ON
o.odate BETWEEN og.sdat and og.edat
LEFT OUTER JOIN rlarp.gld sg ON
o.sdate BETWEEN sg.sdat and sg.edat
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON
i.item = o.part
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'
WHERE
true
-- iter IN ('actuals','actuals_plug','copy')
AND fs_line = '41010'
AND substring(o.glec,1,1) <= '2'
AND o.calc_status <> 'CANCELED'
AND o.sseas IS NOT NULL
GROUP BY
o.account
,o.shipgrp
,o.chan
,o.dsm
,i.partgroup
,i.pricegroup
,o.part
,o.glec
,o.oseas
,o.odate
,og.sortmo
,o.sseas
,o.sdate
,sg.sortmo
-- ,o.calc_status
)
-- SELECT * FROM ngrp
,nguid AS (
SELECT
grp.account
,grp.shipgrp
,grp.chan
,r.repp dsm
,r.director
,grp.shipgrp||'.'||r.repp lu
-- ,grp.partgroup
-- ,grp.pricegroup
,grp.part
-- ,grp.glec
,2026 oseas
,grp.omon
,grp.odate
,(2026- grp.oseas) + grp.sseas sseas
,grp.smon
,grp.sdate
,grp.lbs
,grp.qty
,grp.sales_usd
,CASE WHEN round(grp.sales_usd/grp.qty,5) = 0 THEN null ELSE round(grp.sales_usd/grp.qty,5) END hist_price
,grp.cost_curstd_usd
,sum(grp.lbs) OVER (PARTITION BY shipgrp, dsm) shiplbs
,CASE WHEN seq.floor = 0 THEN null else seq.floor END floor
,CASE WHEN seq.ceiling = 0 THEN null else seq.ceiling END ceiling
,seq.uselimits
,seq.price
,seq.avgprice
,seq.pltq
,ROUND(CASE WHEN seq.uselimits THEN
CASE
WHEN glec = '1NU' THEN
--if more than 8/24 pallets, use floor
CASE WHEN grp.qty >= 24*seq.pltq THEN seq.floor
-- if more than a pallet use the target price
ELSE CASE WHEN qtyord >= 8*seq.pltq THEN (seq.ceiling + seq.floor) / 2
-- if more than a pallet use the target price
ELSE CASE WHEN qtyord >= 2*seq.pltq THEN seq.ceiling
-- if more than a pallet use the target price
ELSE seq.ceiling * 1.05
END END END
ELSE
CASE WHEN pricegroup ~ '(Hanger|Dish)' THEN
--at least 1 pallets is lower limit
CASE WHEN qtyord >= 01*seq.pltq THEN seq.floor
--at least 2 pallets is mid range
ELSE CASE WHEN qtyord >= 0.5*seq.pltq THEN (seq.ceiling + seq.floor) / 2
--less than a pallet is upper + 15%
ELSE seq.ceiling
END END
ELSE
--at least 8 pallets is lower limit
CASE WHEN qtyord >= 08*seq.pltq THEN seq.floor
--at least 2 pallets is mid range
ELSE CASE WHEN qtyord >= 2*seq.pltq THEN (seq.ceiling + seq.floor) / 2
--at least 1 pallet is upper range
ELSE CASE WHEN qtyord >= 1*seq.pltq THEN seq.ceiling
--less than a pallet is upper + 15%
ELSE seq.ceiling * 1.15
END END END
END
END
ELSE
null
END,5) guid
FROM
ngrp grp
LEFT OUTER JOIN nseq seq ON
seq.ship_dba = grp.shipgrp
AND seq.bill_dba = grp.account
AND seq.part = grp.part
AND seq.rn = 1
LEFT OUTER JOIN rlarp.repc r ON
r.rcode = grp.dsm
)
select * from nguid
-- ,orphans AS (
-- SELECT
-- o.bill_dba
-- ,o.ship_dba
-- ,o.bill_cust
-- ,o.ship_cust
-- ,o.promo
-- ,o.terms
-- ,o.dsm
-- ,o.part
-- ,o.odate
-- ,o.qtyord
-- ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END lbs
-- ,i.mpck pltq
-- ,ROUND(o.sales_usd / o.qty,5) price
-- ,(o.pricing->>'guidance_price')::NUMERIC guidance
-- ,(o.pricing->>'floor' )::numeric(15,5) floor
-- ,(o.pricing->>'ceiling')::numeric(15,5) ceiling
-- ,(o.pricing->>'uselimits')::boolean uselimits
-- FROM
-- rlarp.osm_stack o
-- INNER JOIN "CMS.CUSLG".itemm i ON
-- i.item = o.part
-- INNER JOIN checkc c ON
-- c.shipgrp = o.customer
-- AND c.oseas = o.oseas
-- WHERE
-- VERSION = 'Actual'
-- AND o.oseas >= 2018
-- AND calc_status <> 'CANCELED'
-- AND o.fs_line = '41010'
-- AND o.part <> ''
-- AND substring(o.glec,1,1) <= '2'
-- AND o.qty <> 0
-- AND o.sseas IS NOT NULL
-- -- AND customer in (select distinct renamed FROM newc )
-- GROUP BY
-- o.bill_dba
-- ,o.ship_dba
-- ,o.dsm
-- ,i.partgroup
-- ,i.pricegroup
-- ,o.part
-- ,o.odate
-- ,o.qtyord
-- ,o.pounds
-- ,o.pallets
-- ,ROUND(o.sales_usd / o.qty,5)
-- ,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END
-- ,i.mpck
-- ,(o.pricing->>'guidance_price')::NUMERIC
-- ,(o.pricing->>'floor' )::numeric(15,5)
-- ,(o.pricing->>'ceiling')::numeric(15,5)
-- ,(o.pricing->>'uselimits')::boolean
-- )
-- ----sequenced for most recent price------------
-- ,nseq AS (
-- SELECT
-- bill_dba
-- ,ship_dba
-- account
-- ,shipgrp
-- ,chan
-- ,dsm
-- ,director
-- ,lu
-- --,partgroup
-- --,pricegroup
-- ,part
-- ,odate
-- ,qtyord
-- -- ,glec
-- ,oseas
-- ,omon
-- -- ,odate
-- ,sseas
-- ,smon
-- -- ,sdate
-- ,lbs
-- ,pltq
-- ,price
-- ,guidance
-- ,qty
-- ,sales_usd
-- ,hist_price
-- ,cost_curstd_usd
-- ,shiplbs
-- ,floor
-- ,ceiling
-- ,uselimits
-- ,row_number() OVER (PARTITION BY bill_dba, ship_dba, part ORDER BY odate desc) rn
-- ,round(avg(price) over (PARTITION BY bill_dba, ship_dba, part),5) avgprice
-- ,price
-- ,avgprice
-- ,pltq
-- ,guid
-- ,least(hist_price, price, avgprice) lowest_last
-- ,least(hist_price, price, avgprice, floor) lowest_floor
-- FROM
-- npgrp
-- nguid
-- )
-- -- SELECT * FROM seq WHERE rn = 1
-- ,ngrp AS (
-- SELECT
-- sg.fspr
-- ,i.dplt
-- ,o.promo
-- ,o.terms
-- ,o.bill_cust
-- ,o.ship_cust
-- ,o.dsm
-- ,o.dsm
-- ,null:: director
-- ,o.account
-- ,o.shipgrp
-- ,o.chan
-- ,o.chansub
-- ,null::channel_retail
-- ,i.partgroup
-- ,i.pricegroup
-- ,o.part
-- ,o.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
-- ,o.fs_line
-- ,o.r_currency
-- ,rx.rate r_rate
-- ,pl.curr c_currency
-- ,rx.rate r_rate
-- ,pl.curr c_currency
-- ,cx.rate c_rate
-- ,ROUND(sum(fb_qty * lbs),5) lbs
-- ,ROUND(sum(fb_qty),2) qty
-- ,ROUND(sum(fb_val_loc * r_rate),2) sales_usd
-- ,ROUND(sum(fb_cst_loc_cur * c_rate),2) cost_curstd_usd
-- ,'CLOSED' calc_status
-- ,'SHIPMENT' flag
-- ,o.odate
-- ,o.oseas
-- ,o.odate
-- ,og.sortmo omon
-- ,o.sseas
-- ,o.sdate
-- ,sg.sortmo smon
-- -- ,o.calc_status
-- FROM
-- profile o
-- LEFT OUTER JOIN rlarp.gld og ON
-- o.odate BETWEEN og.sdat and og.edat
-- LEFT OUTER JOIN rlarp.gld sg ON
-- o.sdate BETWEEN sg.sdat and sg.edat
-- LEFT OUTER JOIN "CMS.CUSLG".itemm i ON
-- i.item = o.part
-- 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'
-- WHERE
-- true
-- -- iter IN ('actuals','actuals_plug','copy')
-- AND fs_line = '41010'
-- AND substring(o.glec,1,1) <= '2'
-- AND o.calc_status <> 'CANCELED'
-- AND o.sseas IS NOT NULL
-- GROUP BY
-- o.account
-- ,o.shipgrp
-- ,o.chan
-- ,o.dsm
-- ,i.partgroup
-- ,i.pricegroup
-- ,o.part
-- ,o.glec
-- ,o.oseas
-- ,o.odate
-- ,og.sortmo
-- ,o.sseas
-- ,o.sdate
-- ,sg.sortmo
-- -- ,o.calc_status
-- )
-- -- SELECT * FROM ngrp
-- ,nguid AS (
-- SELECT
-- grp.account
-- ,grp.shipgrp
-- ,grp.chan
-- ,r.repp dsm
-- ,r.director
-- ,grp.shipgrp||'.'||r.repp lu
-- -- ,grp.partgroup
-- -- ,grp.pricegroup
-- ,grp.part
-- -- ,grp.glec
-- ,2026 oseas
-- ,grp.omon
-- ,grp.odate
-- ,(2026- grp.oseas) + grp.sseas sseas
-- ,grp.smon
-- ,grp.sdate
-- ,grp.lbs
-- ,grp.qty
-- ,grp.sales_usd
-- ,CASE WHEN round(grp.sales_usd/grp.qty,5) = 0 THEN null ELSE round(grp.sales_usd/grp.qty,5) END hist_price
-- ,grp.cost_curstd_usd
-- ,sum(grp.lbs) OVER (PARTITION BY shipgrp, dsm) shiplbs
-- ,CASE WHEN seq.floor = 0 THEN null else seq.floor END floor
-- ,CASE WHEN seq.ceiling = 0 THEN null else seq.ceiling END ceiling
-- ,seq.uselimits
-- ,seq.price
-- ,seq.avgprice
-- ,seq.pltq
-- ,ROUND(CASE WHEN seq.uselimits THEN
-- CASE
-- WHEN glec = '1NU' THEN
-- --if more than 8/24 pallets, use floor
-- CASE WHEN grp.qty >= 24*seq.pltq THEN seq.floor
-- -- if more than a pallet use the target price
-- ELSE CASE WHEN qtyord >= 8*seq.pltq THEN (seq.ceiling + seq.floor) / 2
-- -- if more than a pallet use the target price
-- ELSE CASE WHEN qtyord >= 2*seq.pltq THEN seq.ceiling
-- -- if more than a pallet use the target price
-- ELSE seq.ceiling * 1.05
-- END END END
-- ELSE
-- CASE WHEN pricegroup ~ '(Hanger|Dish)' THEN
-- --at least 1 pallets is lower limit
-- CASE WHEN qtyord >= 01*seq.pltq THEN seq.floor
-- --at least 2 pallets is mid range
-- ELSE CASE WHEN qtyord >= 0.5*seq.pltq THEN (seq.ceiling + seq.floor) / 2
-- --less than a pallet is upper + 15%
-- ELSE seq.ceiling
-- END END
-- ELSE
-- --at least 8 pallets is lower limit
-- CASE WHEN qtyord >= 08*seq.pltq THEN seq.floor
-- --at least 2 pallets is mid range
-- ELSE CASE WHEN qtyord >= 2*seq.pltq THEN (seq.ceiling + seq.floor) / 2
-- --at least 1 pallet is upper range
-- ELSE CASE WHEN qtyord >= 1*seq.pltq THEN seq.ceiling
-- --less than a pallet is upper + 15%
-- ELSE seq.ceiling * 1.15
-- END END END
-- END
-- END
-- ELSE
-- null
-- END,5) guid
-- FROM
-- ngrp grp
-- LEFT OUTER JOIN nseq seq ON
-- seq.ship_dba = grp.shipgrp
-- AND seq.bill_dba = grp.account
-- AND seq.part = grp.part
-- AND seq.rn = 1
-- LEFT OUTER JOIN rlarp.repc r ON
-- r.rcode = grp.dsm
-- )
-- select * from nguid
--
-- -- ,orphans AS (
-- -- SELECT
-- -- account
-- -- ,shipgrp
-- -- ,chan
-- -- ,dsm
-- -- ,director
-- -- ,lu
-- -- --,partgroup
-- -- --,pricegroup
-- -- ,part
-- -- -- ,glec
-- -- ,oseas
-- -- ,omon
-- -- -- ,odate
-- -- ,sseas
-- -- ,smon
-- -- -- ,sdate
-- -- ,lbs
-- -- ,qty
-- -- ,sales_usd
-- -- ,hist_price
-- -- ,cost_curstd_usd
-- -- ,shiplbs
-- -- ,floor
-- -- ,ceiling
-- -- ,uselimits
-- -- ,price
-- -- ,avgprice
-- -- ,pltq
-- -- ,guid
-- -- ,least(hist_price, price, avgprice) lowest_last
-- -- ,least(hist_price, price, avgprice, floor) lowest_floor
-- -- FROM
-- -- nguid
-- -- )
-- -- SELECT * FROM orphans
-- SELECT * FROM orphans

View File

@ -272,6 +272,83 @@ FROM
WHERE
cust_lbs >= 1000
)
----grouped prices-------------
,npgrp AS (
SELECT
o.bill_dba
,o.ship_dba
,o.bill_cust
,o.ship_cust
,o.promo
,o.terms
,o.dsm
,o.part
,o.odate
,o.qtyord
,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END lbs
,i.mpck pltq
,ROUND(o.sales_usd / o.qty,5) price
,(o.pricing->>'guidance_price')::NUMERIC guidance
,(o.pricing->>'floor' )::numeric(15,5) floor
,(o.pricing->>'ceiling')::numeric(15,5) ceiling
,(o.pricing->>'uselimits')::boolean uselimits
FROM
rlarp.osm_stack o
INNER JOIN "CMS.CUSLG".itemm i ON
i.item = o.part
INNER JOIN checkc c ON
c.shipgrp = o.customer
AND c.oseas = o.oseas
WHERE
VERSION = 'Actual'
AND o.oseas >= 2018
AND calc_status <> 'CANCELED'
AND o.fs_line = '41010'
AND o.part <> ''
AND substring(o.glec,1,1) <= '2'
AND o.qty <> 0
AND o.sseas IS NOT NULL
-- AND customer in (select distinct renamed FROM newc )
GROUP BY
o.bill_dba
,o.ship_dba
,o.dsm
,i.partgroup
,i.pricegroup
,o.part
,o.odate
,o.qtyord
,o.pounds
,o.pallets
,ROUND(o.sales_usd / o.qty,5)
,i.nwht * CASE WHEN i.nwun = 'KG' THEN 2.2 ELSE 1 END
,i.mpck
,(o.pricing->>'guidance_price')::NUMERIC
,(o.pricing->>'floor' )::numeric(15,5)
,(o.pricing->>'ceiling')::numeric(15,5)
,(o.pricing->>'uselimits')::boolean
)
----sequenced for most recent price------------
,nseq AS (
SELECT
bill_dba
,ship_dba
,part
,odate
,qtyord
,lbs
,pltq
,price
,guidance
,floor
,ceiling
,uselimits
,row_number() OVER (PARTITION BY bill_dba, ship_dba, part ORDER BY odate desc) rn
,round(avg(price) over (PARTITION BY bill_dba, ship_dba, part),5) avgprice
FROM
npgrp
)
-- SELECT * FROM seq WHERE rn = 1
INSERT INTO rlarp.osm_pool SELECT * FROM scale;
-- select * from scale) WITH DATA;