many changes

This commit is contained in:
Paul Trowbridge 2021-05-07 14:32:18 -04:00
parent b7eb94202c
commit e376a9df2e

View File

@ -1,4 +1,4 @@
--BEGIN;
BEGIN;
WITH
------------------goal price increases---------------------
@ -345,7 +345,7 @@ SELECT
END
END rate
,ms.avg_price target
,JSONB_AGG(DISTINCT plist.jcpric/1000) jcpric
,JSONB_AGG(DISTINCT plist.jcpric/1000) jcprice
--,CASE WHEN sum(val_usd) FILTER (WHERE oseas = 2020) IS NULL
-- THEN CASE WHEN sum(units) FILTER (WHERE oseas = 2021) IS NULL
-- THEN 'unknown'
@ -412,149 +412,315 @@ GROUP BY
--SELECT * FROM test_unique where cnt > 1
--SELECT * FROM pivot LIMIT 1000
--------------join forecast price-------------------
,fcp AS (
SELECT
pp.productt
,pp.product
,pp.majg
,pp.quota_rep_descr
,pp.order_season
,pp.billto_group
,pp.shipto_group
,pp.chgrp
,pp.fc_units
,pp.fc_price
,pp.iters
--,p.item
,p.py_gasp
,p.cy_units
,p.py_asp
,p.last_price
,p.last_order
,p.target
,p.rate
,p.jcpric
--need to link in targets pricing and price list for cap purposes---------
--also need to link regional price lists so we don't blow past those------
,least(
min(
COALESCE(p.py_asp,p.last_price),
COALESCE(py_gasp,target)
) * (1 + p.rate),
jcprice->>0
) fc_price
--last season price + % capped at list or py_gasp + %
--last price + % capped at list or pg_gasp + %
FROM
poolprice pp
LEFT OUTER JOIN pivot p ON
pp.productt = p.productt
AND pp.majg = p.majg
AND pp.chgrp = p.chgrp
AND pp.billto_group = p.account
AND pp.shipto_group = p.shipgrp
)
SELECT * FROM fcp limit 1000
----------------create a log entry--------------------
--,log AS (
-- INSERT INTO
-- rlarp.osm_log(doc)
--,fcp AS (
-- SELECT
-- $${
-- "message":"application of last price and target increases to all forecast orders",
-- "tag":"last price",
-- "type":"build"
-- }$$::jsonb doc
-- RETURNING *
--)
---------------build the iteration rows----------------
--,ins AS (
--SELECT
-- o.fspr
-- ,o.plnt ---master data
-- ,o.promo --history date mix
-- ,o.terms
-- ,o.bill_cust_descr --history cust mix
-- ,o.ship_cust_descr --history cust mix
-- ,o.dsm
-- ,o.quota_rep_descr --master data
-- ,o.director
-- ,o.billto_group --master data
-- ,o.shipto_group
-- ,o.chan --master data
-- ,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 --master data
-- ,o.r_currency --history cust mix
-- ,o.r_rate --master data
-- ,o.c_currency --master data
-- ,o.c_rate --master data
-- ,0::numeric units
-- ,ROUND(o.units * (a.price_increment/o.r_rate),2) value_loc
-- ,ROUND(o.units * a.price_increment,2) value_usd
-- ,0::numeric cost_loc
-- ,0::numeric cost_usd
-- ,o.calc_status --0
-- ,o.flag --0
-- ,o.order_date --history date mix
-- ,o.order_month
-- ,o.order_season
-- ,o.request_date --history date mix
-- ,o.request_month
-- ,o.request_season
-- ,o.ship_date --history date mix
-- ,o.ship_month
-- ,o.ship_season
-- ,o.version
-- ---this iteration has to be listed in the master template file in order to be effectively included---
-- ,'upload price' iter
-- ,log.id
-- ,COALESCE(log.doc->>'tag','') "tag"
-- ,log.doc->>'message' "comment"
-- ,log.doc->>'type' module
-- -----------debug columns---------
-- --,value_usd/units price
-- --,a.py_gasp
-- --,a.rate
-- --,a.last_price
-- --,a.price_increment
-- pp.productt
-- ,pp.product
-- ,pp.majg
-- ,pp.quota_rep_descr
-- ,pp.order_season
-- ,pp.billto_group
-- ,pp.shipto_group
-- ,pp.chgrp
-- ,pp.fc_units
-- ,pp.fc_price
-- ,pp.iters
-- --,p.item
-- ,p.py_gasp
-- ,p.cy_units
-- ,p.py_asp
-- ,p.last_price
-- ,p.last_order
-- ,p.target
-- ,p.rate
-- ,p.jcprice
-- --need to link in targets pricing and price list for cap purposes---------
-- --also need to link regional price lists so we don't blow past those------
-- ,least(
-- least(
-- COALESCE(p.py_asp,p.last_price),
-- COALESCE(py_gasp,target)
-- ) * (1 + p.rate),
-- (jcprice->>0)::numeric
-- ) rev_price
-- ,greatest(
-- least(
-- least(
-- COALESCE(p.py_asp,p.last_price),
-- COALESCE(py_gasp,target)
-- ) * (1 + p.rate),
-- (jcprice->>0)::numeric
-- ) - fc_price
-- ,0
-- ) fc_adj
-- --last season price + % capped at list or py_gasp + %
-- --last price + % capped at list or pg_gasp + %
-- FROM
-- rlarp.osm_pool o
-- ,rlarp.itemmv i
-- ,adj a
-- ,log
-- poolprice pp
-- LEFT OUTER JOIN pivot p ON
-- pp.productt = p.productt
-- AND pp.majg = p.majg
-- AND pp.chgrp = p.chgrp
-- AND pp.billto_group = p.account
-- AND pp.shipto_group = p.shipgrp
-- WHERE
-- i.item = o.part
-- AND a.product = i.stlc||'.'||i.colgrp||substring(i.sizc,1,3)
-- AND a.account = o.billto_group
-- AND a.shipgrp = o.shipto_group
-- AND a.price_increment <> 0
-- AND o.units <> 0
-- ---only apply to 2022 orders----
-- AND o.order_date >= '2021-06-01'
-- --only include baseline stuff---
-- AND iter <> 'upload price'
-- greatest(
-- least(
-- least(
-- COALESCE(p.py_asp,p.last_price),
-- COALESCE(py_gasp,target)
-- ) * (1 + p.rate),
-- (jcprice->>0)::numeric
-- ) - fc_price
-- ,0
-- ) <> 0
--)
-------------aggregate the impact------------
----SELECT * FROM ins limit 10000
----SELECT
---- order_season
---- ,sum(value_loc) val_loc
---- ,sum(value_usd) val_usd
----FROM
---- ins
----GROUP BY
---- order_season;
--SELECT * FROM fcp LIMIT 1000
----------------create a log entry--------------------
,log AS (
INSERT INTO
rlarp.osm_log(doc)
SELECT
$${
"message":"application of last price and target increases to all forecast orders",
"tag":"last price",
"type":"build"
}$$::jsonb doc
RETURNING *
)
---------collapse iterations-----------------------
,collapse AS (
SELECT
o.fspr
,o.plnt ---master data
,o.promo --history date mix
,o.terms
,o.bill_cust_descr --history cust mix
,o.ship_cust_descr --history cust mix
,o.dsm
,o.quota_rep_descr --master data
,o.director
,o.billto_group --master data
,o.shipto_group
,o.chan --master data
,o.chansub
,o.chan_retail
,o.part
,o.part_descr
,i.stlc||'.'||i.coltier||substring(i.sizc,1,3) productt
,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
,SUM(o.units) units
,SUM(o.value_loc) value_loc
,SUM(o.value_usd) value_usd
,SUM(o.value_loc)/SUM(o.units) price_loc
,SUM(o.cost_loc) cost_loc
,SUM(o.cost_usd) cost_usd
,o.calc_status --0
,o.flag --0
,o.order_date --history date mix
,o.order_month
,o.order_season
,o.request_date --history date mix
,o.request_month
,o.request_season
,o.ship_date --history date mix
,o.ship_month
,o.ship_season
FROM
rlarp.osm_pool o
--need to join to itemm to get the product from osm_pool
,rlarp.itemmv i
WHERE
i.item = o.part
GROUP BY
o.fspr
,o.plnt ---master data
,o.promo --history date mix
,o.terms
,o.bill_cust_descr --history cust mix
,o.ship_cust_descr --history cust mix
,o.dsm
,o.quota_rep_descr --master data
,o.director
,o.billto_group --master data
,o.shipto_group
,o.chan --master data
,o.chansub
,o.chan_retail
,o.part
,o.part_descr
,i.stlc||'.'||i.coltier||substring(i.sizc,1,3)
,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
,o.calc_status --0
,o.flag --0
,o.order_date --history date mix
,o.order_month
,o.order_season
,o.request_date --history date mix
,o.request_month
,o.request_season
,o.ship_date --history date mix
,o.ship_month
,o.ship_season
HAVING
sum(o.units) <> 0
)
-------------build the iteration rows----------------
,ins AS (
SELECT
o.fspr
,o.plnt ---master data
,o.promo --history date mix
,o.terms
,o.bill_cust_descr --history cust mix
,o.ship_cust_descr --history cust mix
,o.dsm
,o.quota_rep_descr --master data
,o.director
,o.billto_group --master data
,o.shipto_group
,o.chan --master data
,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 --master data
,o.r_currency --history cust mix
,o.r_rate --master data
,o.c_currency --master data
,o.c_rate --master data
--,o.units
,0::numeric units
,greatest(
round(least(
least(
COALESCE(a.py_asp,o.price_loc),
COALESCE(a.py_gasp,a.target)
) * (1 + a.rate),
(a.jcprice->>0)::numeric
)*o.units - o.value_loc,2)
,0) AS value_loc
,greatest(
round((least(
least(
COALESCE(a.py_asp,o.price_loc),
COALESCE(a.py_gasp,a.target)
) * (1 + a.rate),
(a.jcprice->>0)::numeric
)*o.units - o.value_loc) * r_rate,2)
,0) AS value_usd
----debug---
--,least(
-- least(
-- COALESCE(a.py_asp,o.price_loc),
-- COALESCE(a.py_gasp,a.target)
-- ) * (1 + a.rate),
-- (a.jcprice->>0)::numeric
--) AS rev_price
--,o.units
--,o.value_loc
--,o.value_usd
--,o.price_loc
--,a.last_price
--,a.target
--,a.jcprice
--,a.rate
--,a.py_asp
--,a.py_gasp
-----------
,0::numeric cost_loc
,0::numeric cost_usd
,o.calc_status --0
,o.flag --0
,o.order_date --history date mix
,o.order_month
,o.order_season
,o.request_date --history date mix
,o.request_month
,o.request_season
,o.ship_date --history date mix
,o.ship_month
,o.ship_season
--,o.version
---this iteration has to be listed in the master template file in order to be effectively included---
,'b22' AS version
,'upload price' iter
,log.id
,COALESCE(log.doc->>'tag','') "tag"
,log.doc->>'message' "comment"
,log.doc->>'type' module
-----------debug columns---------
--,value_usd/units price
--,a.py_gasp
--,a.rate
--,a.last_price
--,a.price_increment
FROM
collapse o
--need to join to itemm to get the product from osm_pool
--,fcp a
,pivot a
,log
WHERE
-- a.productt = o.productt
--AND a.quota_rep_descr = o.quota_rep_descr
--AND a.majg = SUBSTRING(o.majg_descr,1,3)
--AND a.billto_group = o.billto_group
--AND a.shipto_group = o.shipto_group
--AND a.chgrp = substring(o.chan,1,1)
---only apply to 2022 orders----
---join p
a.productt = o.productt
AND a.majg = SUBSTRING(o.majg_descr,1,3)
AND a.chgrp = substring(o.chan,1,1)
AND a.account = o.billto_group
AND a.shipgrp = o.shipto_group
AND o.order_date >= '2021-06-01'
)
--SELECT order_season, order_month, sum(value_usd) from ins group by order_season, order_month;
INSERT INTO rlarp.osm_pool SELECT * FROM ins;
-----------aggregate the impact------------
--SELECT * FROM ins limit 10000
--SELECT
-- order_season
-- ,sum(value_loc) val_loc
-- ,sum(value_usd) val_usd
--FROM
-- ins
--GROUP BY
-- order_season;
--,del AS (
-- DELETE FROM rlarp.osm_pool WHERE iter = 'upload price' RETURNING *
--)
@ -562,4 +728,4 @@ SELECT * FROM fcp limit 1000
-- rlarp.osm_pool
--SELECT * FROM ins;
--
--COMMIT;
COMMIT;