alternate price down versions

This commit is contained in:
Paul Trowbridge 2025-04-10 20:36:39 -04:00
parent 14c43eec3c
commit 722fa429fb
3 changed files with 383 additions and 0 deletions

2
offline/flag_count.sql Normal file
View File

@ -0,0 +1,2 @@
select shipgrp, CASE WHEN count(distinct flag) > 1 THEN 'Floor' ELSE string_agg(DISTINCT flag,', ') END from rlarp.cust_flag group by shipgrp
-- select shipgrp, dsm, flag from rlarp.cust_flag

381
offline/price_down_3.pg.sql Normal file
View File

@ -0,0 +1,381 @@
WITH
----grouped prices-------------
custflag AS (
select shipgrp, CASE WHEN count(distinct flag) > 1 THEN 'YoY' ELSE string_agg(DISTINCT flag,', ') END flag from rlarp.cust_flag group by shipgrp
)
,pgrp AS (
SELECT
o.bill_dba
,o.ship_dba
,o.dsm
,i.partgroup
,i.pricegroup
,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
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON
i.item = o.part
INNER JOIN custflag c ON
c.shipgrp = o.ship_dba
-- AND c.dsm = o.default_rep
WHERE
VERSION = 'Actual'
AND o.oseas >= 2025
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 o.sales_usd <> 0
-- 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
)
-- SELECT * FROM pgrp where ship_dba ~ 'MONROVIA'
-- select * from npgrp limit 100
--sequenced for most recent price------------
,seq AS (
SELECT
bill_dba
,ship_dba
,part
,odate
,qtyord
,lbs
,pltq
,price last_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
pgrp
)
-- SELECT * FROM SEQ WHERE ship_dba = 'MONROVIA'
-- SELECT * FROM seq WHERE ship_dba like 'COSTA%'
,partlist AS (
SELECT
billto_group
,shipto_group
,dsm
,part
,glec
,pricegroup
----order date as a proxy for order size
,order_date
,sum(units) qty
,round(sum(value_usd)/sum(units),5) hist_price
FROM
rlarp.osm_pool o
INNER JOIN "CMS.CUSLG".itemm i ON
i.item = o.part
WHERE
order_season = 2026
GROUP BY
billto_group
,shipto_group
,dsm
,part
,glec
,pricegroup
,order_date
HAVING
abs(sum(units)) > 10
)
,combine AS MATERIALIZED (
-- select * from partlist
-- SELECT * FROM seq WHERE rn = 1 LIMIT 1000
-- ,guid AS (
SELECT
p.billto_group
,p.shipto_group
-- ,p.dsm
,p.part
,p.glec
,p.pricegroup
,p.order_date
,p.qty
,p.hist_price
,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.last_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 p.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
,least(hist_price, last_price, avgprice) lowest_last
,least(hist_price, last_price, avgprice, CASE WHEN uselimits THEN
ROUND(CASE WHEN seq.uselimits THEN
CASE
WHEN glec = '1NU' THEN
--if more than 8/24 pallets, use floor
CASE WHEN p.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) ELSE hist_price END) lowest_guid
,c.flag
FROM
partlist p
INNER JOIN custflag c ON
c.shipgrp = p.shipto_group
-- AND substring(c.dsm,1,5) = substring(p.dsm,1,5)
LEFT OUTER JOIN seq seq ON
seq.ship_dba = p.shipto_group
AND seq.bill_dba = p.billto_group
AND seq.part = p.part
AND seq.rn = 1
LEFT OUTER JOIN rlarp.repc r ON
r.rcode = p.dsm
)
-- SELECT * FROM combine where shipto_group = 'MONROVIA'
,choose AS MATERIALIZED (
SELECT
billto_group
,shipto_group
-- ,dsm
,part
,glec
,pricegroup
,order_date
,qty
,hist_price
,floor
,ceiling
,uselimits
,last_price
,avgprice
,pltq
,guid
,lowest_last
,lowest_guid
,flag
,CASE flag
WHEN 'YoY' THEN lowest_last
WHEN 'Floor' THEN lowest_guid
WHEN 'Retail' THEN hist_price
WHEN 'Warehouse' THEN hist_price
WHEN 'Orphan' THEN lowest_guid
ELSE lowest_last
END price_choice
FROM
combine
)
-- SELECT * FROM choose where shipto_group = 'COSTA' and part = 'XNS0T1G3X19C150PYKXR'
-- ,logload AS (
-- INSERT INTO rlarp.osm_log (doc) SELECT jsonb_build_object('user',current_user,'tag','Pricing 2','type','Pricing 2','stamp',current_timestamp,'source','top level','message','Pricing 2') RETURNING *
-- )
,delta_row AS (
SELECT
o.fspr
,o.plnt
,o.promo
,o.terms
,o.bill_cust_descr
,o.ship_cust_descr
,o.dsm
,o.quota_rep_descr
,o.director
,o.billto_group
,o.shipto_group
,o.chan
,o.chansub
,o.chan_retail
,o.part
,o.part_descr
,o.part_group
,o.branding
,o.majg_descr
,o.ming_descr
,o.majs_descr
,o.mins_descr
,o.segm
,o.substance
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,0::numeric units
,(c.price_choice * sum(o.units) - sum(value_usd))/o.r_rate value_loc
,c.price_choice * sum(o.units) - sum(value_usd) value_usd
,0::numeric cost_loc
,0::numeric cost_usd
,o.calc_status
,o.flag
,o.order_date
,o.order_month
,o.order_season
,o.request_date
,o.request_month
,o.request_season
,o.ship_date
,o.ship_month
,o.ship_season
,o.version
,'Pricing 2' iter
-- ,logload.id logid
-- ,logload.doc->>'tag' tag
-- ,logload.doc->>'message' "comment"
-- ,logload.doc->>'type' module
,0::NUMERIC pounds
FROM
rlarp.osm_pool o
-- CROSS JOIN logload
INNER JOIN choose c ON
c.billto_group = o.billto_group
AND c.shipto_group = o.shipto_group
-- AND substring(c.dsm,1,5) = substring(o.dsm,1,5)
AND c.part = o.part
AND c.order_date = o.order_date
WHERE
o.order_season = 2026
GROUP BY
o.fspr
,o.plnt
,o.promo
,o.terms
,o.bill_cust_descr
,o.ship_cust_descr
,o.dsm
,o.quota_rep_descr
,o.director
,o.billto_group
,o.shipto_group
,o.chan
,o.chansub
,o.chan_retail
,o.part
,o.part_descr
,o.part_group
,o.branding
,o.majg_descr
,o.ming_descr
,o.majs_descr
,o.mins_descr
,o.segm
,o.substance
,o.fs_line
,o.r_currency
,o.r_rate
,o.c_currency
,o.c_rate
,c.price_choice
,o.calc_status
,o.flag
,o.order_date
,o.order_month
,o.order_season
,o.request_date
,o.request_month
,o.request_season
,o.ship_date
,o.ship_month
,o.ship_season
,o.version
-- ,logload.id
-- ,logload.doc->>'tag'
-- ,logload.doc->>'message'
-- ,logload.doc->>'type'
)
SELECT * FROM delta_row
-- SELECT * FROM choose where shipto_group = 'GRIFFIN' and part = 'HSI12001B661050'
-- SELECT SUM(value_usd), count(*) from delta_row
-- -- SELECT * FROM delta_row WHERE shipto_group = 'MONROVIA'
-- -- INSERT INTO rlarp.osm_pool SELECT * FROM delta_row
-- -- SELECT billto_group, shipto_group, substring(dsm,1,5), part, order_date, count(*) over (PARTITION BY billto_group, shipto_group, substring(dsm,1,5), part, order_date) cnt
-- -- FROM
-- -- choose
-- -- GROUP BY
-- -- billto_group, shipto_group, substring(dsm,1,5), part, order_date
-- -- select shipto_group, sum(value_usd) from delta_row group by shipto_group