Handle the case where baseline is zero (units or value).
This happens when a customer places identical orders and specifies that
they be shipped in different seasons. We end up with one order shipped
in 2023 and one open for 2024. Under our current operating procedures,
open orders are subtracted from shipped orders and are presented as
baseline for the next forecast. The zero that appears in the baseline in
this case was causing all kinds of issues in the SQL scripts for
inserting the adjustments, ranging from finding zero rows to adjust to
division by zero.
Another change required to correct this was updating the iter value of
the open orders from 'actuals' to 'copy':
UPDATE rlarp.osm_pool
SET iter = 'copy'
WHERE tag = 'open-orders'
This commit is contained in:
parent
7e82b37fb1
commit
47d1baffc5
@ -8,8 +8,8 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
sum(units) tot
|
sum(units) tot
|
||||||
,sum(units) FILTER (WHERE iter IN ('copy','plan','diff')) base
|
,sum(units) FILTER (WHERE iter IN ('copy','plan','diff')) base
|
||||||
,COALESCE(sum(units) FILTER (WHERE module = 'new basket'),0) newpart
|
,COALESCE(sum(units) FILTER (WHERE module = 'new basket'),0) newpart
|
||||||
,sum(value_loc *r_rate) totsales
|
,coalesce(sum(value_loc *r_rate),0) totsales
|
||||||
,sum(value_loc *r_rate) FILTER (WHERE iter IN ('plan','diff','copy')) basesales
|
,coalesce(sum(value_loc *r_rate) FILTER (WHERE iter IN ('plan','diff','copy')),0) basesales
|
||||||
,COALESCE(sum(value_loc *r_rate) FILTER (WHERE module = 'new basket'),0) newpartsales
|
,COALESCE(sum(value_loc *r_rate) FILTER (WHERE module = 'new basket'),0) newpartsales
|
||||||
FROM
|
FROM
|
||||||
rlarp.osm_pool
|
rlarp.osm_pool
|
||||||
@ -18,8 +18,10 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
where_clause
|
where_clause
|
||||||
-----------------additional params-------------------
|
-----------------additional params-------------------
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date OR tag = 'open-orders')
|
||||||
)
|
)
|
||||||
|
-- select * from testv
|
||||||
|
--
|
||||||
,flagv AS (
|
,flagv AS (
|
||||||
SELECT
|
SELECT
|
||||||
tot
|
tot
|
||||||
@ -54,6 +56,8 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
FROM
|
FROM
|
||||||
testv
|
testv
|
||||||
)
|
)
|
||||||
|
-- select * from flagv
|
||||||
|
--
|
||||||
,GLD AS MATERIALIZED (
|
,GLD AS MATERIALIZED (
|
||||||
SELECT
|
SELECT
|
||||||
N1COMP COMP
|
N1COMP COMP
|
||||||
@ -76,6 +80,8 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
WHERE
|
WHERE
|
||||||
N1COMP = 93
|
N1COMP = 93
|
||||||
)
|
)
|
||||||
|
-- select * from gld
|
||||||
|
--
|
||||||
,mseq AS (
|
,mseq AS (
|
||||||
SELECT * FROM
|
SELECT * FROM
|
||||||
(
|
(
|
||||||
@ -94,6 +100,8 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
,('12 - May',12,5,0)
|
,('12 - May',12,5,0)
|
||||||
) x(m,s,cal,yr)
|
) x(m,s,cal,yr)
|
||||||
)
|
)
|
||||||
|
-- select * from mseq
|
||||||
|
--
|
||||||
,alldates AS MATERIALIZED(
|
,alldates AS MATERIALIZED(
|
||||||
SELECT
|
SELECT
|
||||||
promo
|
promo
|
||||||
@ -118,7 +126,7 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
WHEN 'scale new part' THEN module = 'new basket'
|
WHEN 'scale new part' THEN module = 'new basket'
|
||||||
END
|
END
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date AND tag <> 'open-orders')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
promo
|
promo
|
||||||
,terms
|
,terms
|
||||||
@ -127,10 +135,11 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
,order_date
|
,order_date
|
||||||
,request_date
|
,request_date
|
||||||
,ship_date
|
,ship_date
|
||||||
HAVING
|
-- HAVING
|
||||||
sum(CASE (SELECT flagsales FROM flagv) WHEN 'no price'THEN 1.0 ELSE value_usd END) <> 0
|
-- sum(CASE (SELECT flagsales FROM flagv) WHEN 'no price'THEN 1.0 ELSE value_usd END) <> 0
|
||||||
)
|
)
|
||||||
-- select * from alldates
|
-- select * from alldates
|
||||||
|
--
|
||||||
,dom AS (
|
,dom AS (
|
||||||
SELECT
|
SELECT
|
||||||
extract(day FROM order_date) DOM
|
extract(day FROM order_date) DOM
|
||||||
@ -140,6 +149,8 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
GROUP BY
|
GROUP BY
|
||||||
extract(day FROM order_date)
|
extract(day FROM order_date)
|
||||||
)
|
)
|
||||||
|
-- select * from dom
|
||||||
|
--
|
||||||
---------------------may want ot look at a top-5 mix solution in the future facilitated by sum() over (order by sales desc)---------------
|
---------------------may want ot look at a top-5 mix solution in the future facilitated by sum() over (order by sales desc)---------------
|
||||||
,mmix AS (
|
,mmix AS (
|
||||||
SELECT
|
SELECT
|
||||||
@ -151,18 +162,19 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
,sum((request_date-order_date)*(value_usd)) rlag_wa
|
,sum((request_date-order_date)*(value_usd)) rlag_wa
|
||||||
--,ship_date - request_date slag
|
--,ship_date - request_date slag
|
||||||
,sum((ship_date - request_date)*(value_usd)) slag_wa
|
,sum((ship_date - request_date)*(value_usd)) slag_wa
|
||||||
,sum(value_usd) value_usd
|
,coalesce(nullif(sum(value_usd),0),1) value_usd
|
||||||
FROM
|
FROM
|
||||||
alldates
|
alldates
|
||||||
GROUP BY
|
GROUP BY
|
||||||
to_char(order_date,'Mon')
|
to_char(order_date,'Mon')
|
||||||
,seq
|
,seq
|
||||||
,promo
|
,promo
|
||||||
--,extract(day from order_date)
|
|
||||||
--,request_date-order_date
|
|
||||||
--,ship_date - request_date
|
|
||||||
)
|
)
|
||||||
,targm AS (select s, m from mseq where m = 'target_month' )
|
-- select * from mmix
|
||||||
|
--
|
||||||
|
,targm AS (select s, m from mseq where m = '04 - Sep' )
|
||||||
|
-- select * from targm
|
||||||
|
--
|
||||||
,mmixp AS (
|
,mmixp AS (
|
||||||
SELECT
|
SELECT
|
||||||
_month
|
_month
|
||||||
@ -172,10 +184,11 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
,round((rlag_wa/value_usd)::numeric,0)::int rlag
|
,round((rlag_wa/value_usd)::numeric,0)::int rlag
|
||||||
,round((slag_wa/value_usd)::numeric,0)::int slag
|
,round((slag_wa/value_usd)::numeric,0)::int slag
|
||||||
,value_usd/sum(value_usd) over (partition by _month) momix
|
,value_usd/sum(value_usd) over (partition by _month) momix
|
||||||
--,value_usd/SUM(value_usd) over (PARTITION BY _month) vperc
|
|
||||||
FROM
|
FROM
|
||||||
mmix
|
mmix
|
||||||
)
|
)
|
||||||
|
-- select * from mmixp
|
||||||
|
--
|
||||||
,closest AS (
|
,closest AS (
|
||||||
SELECT
|
SELECT
|
||||||
_month, targm.s, m
|
_month, targm.s, m
|
||||||
@ -186,6 +199,8 @@ target AS (select target_volume vincr, target_price pincr)
|
|||||||
abs(seq - targm.s) ASC
|
abs(seq - targm.s) ASC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
)
|
)
|
||||||
|
-- select * from closest
|
||||||
|
--
|
||||||
---------------------the role of basemix here is to get non-dated info which is then dated in the next step---------------------
|
---------------------the role of basemix here is to get non-dated info which is then dated in the next step---------------------
|
||||||
,basemix AS (
|
,basemix AS (
|
||||||
SELECT
|
SELECT
|
||||||
@ -241,7 +256,7 @@ SELECT
|
|||||||
WHEN 'scale new part' THEN module = 'new basket'
|
WHEN 'scale new part' THEN module = 'new basket'
|
||||||
END
|
END
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date AND tag <> 'open-orders')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
--fspr in next step
|
--fspr in next step
|
||||||
o.plnt
|
o.plnt
|
||||||
@ -276,16 +291,33 @@ SELECT
|
|||||||
,o.calc_status
|
,o.calc_status
|
||||||
,o.flag
|
,o.flag
|
||||||
)
|
)
|
||||||
|
-- select * from basemix
|
||||||
|
--
|
||||||
,vscale AS (
|
,vscale AS (
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT vincr::numeric FROM target) incr
|
(SELECT vincr::numeric FROM target) incr
|
||||||
,(SELECT sum(units) FROM basemix) base
|
,(SELECT sum(units) FROM basemix) base
|
||||||
,(SELECT vincr::numeric FROM target)/(SELECT sum(units) FROM basemix) factor
|
-- If sum(units) = 0, then we're likely working with a single row. We can't
|
||||||
|
-- scale 0, no matter how we try, so we just use mod_volume to set the value we want.
|
||||||
|
-- When sum(units) <> 0, then we use factor to scale units.
|
||||||
|
,CASE
|
||||||
|
WHEN (SELECT sum(units)::numeric FROM basemix) = 0
|
||||||
|
THEN 0
|
||||||
|
ELSE (SELECT vincr::numeric FROM target)/(SELECT sum(units)::numeric FROM basemix)
|
||||||
|
END AS factor
|
||||||
|
,CASE
|
||||||
|
WHEN (SELECT sum(units)::numeric FROM basemix) = 0
|
||||||
|
THEN (SELECT vincr::numeric FROM target)
|
||||||
|
ELSE 0
|
||||||
|
END AS mod_volume
|
||||||
)
|
)
|
||||||
--select * from SCALE
|
-- select * from vscale
|
||||||
|
--
|
||||||
,log AS (
|
,log AS (
|
||||||
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
||||||
)
|
)
|
||||||
|
-- select * from log
|
||||||
|
--
|
||||||
,volume AS (
|
,volume AS (
|
||||||
SELECT
|
SELECT
|
||||||
sd.fspr
|
sd.fspr
|
||||||
@ -317,7 +349,7 @@ SELECT
|
|||||||
,b.r_rate
|
,b.r_rate
|
||||||
,b.c_currency
|
,b.c_currency
|
||||||
,b.c_rate
|
,b.c_rate
|
||||||
,round(b.units*s.factor*m.momix ,2) units
|
,round((CASE WHEN s.factor = 0 THEN s.mod_volume ELSE b.units*s.factor END)*m.momix, 2) units
|
||||||
,round(b.value_loc*s.factor*m.momix,2) value_loc
|
,round(b.value_loc*s.factor*m.momix,2) value_loc
|
||||||
,round(b.value_usd*s.factor*m.momix,2) value_usd
|
,round(b.value_usd*s.factor*m.momix,2) value_usd
|
||||||
,round(b.cost_loc*s.factor*m.momix ,2) cost_loc
|
,round(b.cost_loc*s.factor*m.momix ,2) cost_loc
|
||||||
@ -339,7 +371,11 @@ SELECT
|
|||||||
,COALESCE(log.doc->>'tag','') "tag"
|
,COALESCE(log.doc->>'tag','') "tag"
|
||||||
,log.doc->>'message' "comment"
|
,log.doc->>'message' "comment"
|
||||||
,log.doc->>'type' module
|
,log.doc->>'type' module
|
||||||
,round(b.pounds*s.factor*m.momix, 2) pounds
|
,round(CASE
|
||||||
|
WHEN s.factor = 0 THEN s.mod_volume * i.nwht * (CASE i.nwun
|
||||||
|
WHEN 'KG' THEN 2.2046
|
||||||
|
ELSE 1 END)
|
||||||
|
ELSE b.pounds*s.factor END, 2) pounds
|
||||||
FROM
|
FROM
|
||||||
basemix b
|
basemix b
|
||||||
CROSS JOIN vscale s
|
CROSS JOIN vscale s
|
||||||
@ -354,29 +390,30 @@ FROM
|
|||||||
make_date(mseq.yr + 2024,mseq.cal,m.odom) + rlag BETWEEN rd.sdat AND rd.edat
|
make_date(mseq.yr + 2024,mseq.cal,m.odom) + rlag BETWEEN rd.sdat AND rd.edat
|
||||||
LEFT OUTER JOIN gld sd ON
|
LEFT OUTER JOIN gld sd ON
|
||||||
make_date(mseq.yr + 2024,mseq.cal,m.odom) + rlag + slag BETWEEN sd.sdat AND sd.edat
|
make_date(mseq.yr + 2024,mseq.cal,m.odom) + rlag + slag BETWEEN sd.sdat AND sd.edat
|
||||||
|
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON i.item = b.part
|
||||||
WHERE
|
WHERE
|
||||||
m._month = (SELECT _month FROM closest)
|
m._month = (SELECT _month FROM closest)
|
||||||
)
|
)
|
||||||
|
-- select * from volume
|
||||||
|
--
|
||||||
,pscale AS (
|
,pscale AS (
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT pincr::numeric FROM target) incr
|
CASE
|
||||||
,(SELECT sum(value_loc * r_rate) FROM volume) base
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 AND (SELECT sum(units) FROM volume) = 0 THEN 'both'
|
||||||
,CASE WHEN (SELECT sum(value_loc * r_rate) FROM volume) = 0 THEN
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 THEN 'cost'
|
||||||
0
|
ELSE 'other'
|
||||||
ELSE
|
END zero_values
|
||||||
((SELECT pincr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM volume))/(SELECT sum(value_loc * r_rate) FROM volume)
|
,CASE
|
||||||
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 AND (SELECT coalesce(sum(units),0) FROM volume) = 0 -- Split pincr evenly between rows.
|
||||||
|
THEN (SELECT pincr::numeric FROM target) / (SELECT count(*) FROM volume)
|
||||||
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 -- Get a per-unit pincr value
|
||||||
|
THEN (SELECT pincr::numeric FROM target) / (SELECT sum(units) FROM volume)
|
||||||
|
ELSE -- Find percent change for existing value_loc
|
||||||
|
(SELECT pincr::numeric FROM target) / (SELECT nullif(sum(value_loc * r_rate),0) FROM volume) - 1
|
||||||
END factor
|
END factor
|
||||||
,CASE WHEN (SELECT sum(value_loc * r_rate) FROM volume) = 0 THEN
|
|
||||||
CASE WHEN ((SELECT pincr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM volume)) <> 0 THEN
|
|
||||||
--if the base value is -0- but the target value hasn't been achieved, derive a price to apply
|
|
||||||
((SELECT pincr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM volume))/(SELECT sum(units) FROM volume)
|
|
||||||
ELSE
|
|
||||||
0
|
|
||||||
END
|
|
||||||
ELSE
|
|
||||||
0
|
|
||||||
END mod_price
|
|
||||||
)
|
)
|
||||||
|
-- select * from pscale
|
||||||
|
--
|
||||||
,price AS (
|
,price AS (
|
||||||
SELECT
|
SELECT
|
||||||
b.fspr
|
b.fspr
|
||||||
@ -409,8 +446,16 @@ SELECT
|
|||||||
,b.c_currency
|
,b.c_currency
|
||||||
,b.c_rate
|
,b.c_rate
|
||||||
,0::numeric units
|
,0::numeric units
|
||||||
,round((CASE WHEN p.factor = 0 THEN b.units * p.mod_price/b.r_rate ELSE b.value_loc*p.factor END)::numeric,2) value_loc
|
,round(CASE p.zero_values
|
||||||
,round((CASE WHEN p.factor = 0 THEN b.units * p.mod_price ELSE b.value_usd*p.factor END)::numeric ,2) value_usd
|
WHEN 'both' THEN p.factor / b.r_rate
|
||||||
|
WHEN 'cost' THEN b.units * p.factor / b.r_rate
|
||||||
|
WHEN 'other' THEN b.value_loc * p.factor
|
||||||
|
END, 2) AS value_loc
|
||||||
|
,round(CASE p.zero_values
|
||||||
|
WHEN 'both' THEN p.factor
|
||||||
|
WHEN 'cost' THEN b.units * p.factor
|
||||||
|
WHEN 'other' THEN b.value_usd * p.factor
|
||||||
|
END, 2) AS value_usd
|
||||||
,0::numeric cost_loc
|
,0::numeric cost_loc
|
||||||
,0::numeric cost_usd
|
,0::numeric cost_usd
|
||||||
,b.calc_status
|
,b.calc_status
|
||||||
@ -436,8 +481,10 @@ FROM
|
|||||||
CROSS JOIN pscale p
|
CROSS JOIN pscale p
|
||||||
CROSS JOIN log
|
CROSS JOIN log
|
||||||
WHERE
|
WHERE
|
||||||
p.factor <> 0 or p.mod_price <> 0
|
p.factor <> 0
|
||||||
)
|
)
|
||||||
|
-- SELECT * FROM price UNION ALL SELECT * FROM volume
|
||||||
|
--
|
||||||
, ins AS (
|
, ins AS (
|
||||||
INSERT INTO rlarp.osm_pool (SELECT * FROM price UNION ALL SELECT * FROM volume) RETURNING *
|
INSERT INTO rlarp.osm_pool (SELECT * FROM price UNION ALL SELECT * FROM volume) RETURNING *
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
-- Connection: usmidsap01.ubm
|
|
||||||
WITH
|
WITH
|
||||||
/*
|
/*
|
||||||
the volume must be expressed in terms of units, since that is what it will be scaling
|
the volume must be expressed in terms of units, since that is what it will be scaling
|
||||||
*/
|
*/
|
||||||
target AS (select $$replace_request$$::json def)
|
target AS (select $$replace_request$$::json def)
|
||||||
--select * from newm
|
-- select * from target
|
||||||
|
--
|
||||||
,GLD AS (
|
,GLD AS (
|
||||||
SELECT
|
SELECT
|
||||||
N1COMP COMP
|
N1COMP COMP
|
||||||
@ -29,6 +29,8 @@ target AS (select $$replace_request$$::json def)
|
|||||||
N1COMP = 93
|
N1COMP = 93
|
||||||
--AND DIGITS(N1FSYP) = '1901'
|
--AND DIGITS(N1FSYP) = '1901'
|
||||||
)
|
)
|
||||||
|
-- select * from GLD
|
||||||
|
--
|
||||||
,mseq AS (
|
,mseq AS (
|
||||||
SELECT * FROM
|
SELECT * FROM
|
||||||
(
|
(
|
||||||
@ -47,6 +49,8 @@ target AS (select $$replace_request$$::json def)
|
|||||||
,('12 - May',12,5,0)
|
,('12 - May',12,5,0)
|
||||||
) x(m,s,cal,yr)
|
) x(m,s,cal,yr)
|
||||||
)
|
)
|
||||||
|
-- select * from mseq
|
||||||
|
--
|
||||||
,seg AS (
|
,seg AS (
|
||||||
SELECT
|
SELECT
|
||||||
x.GLEC glec
|
x.GLEC glec
|
||||||
@ -71,6 +75,8 @@ target AS (select $$replace_request$$::json def)
|
|||||||
('9TO','Other')
|
('9TO','Other')
|
||||||
) X(GLEC, SEGM)
|
) X(GLEC, SEGM)
|
||||||
)
|
)
|
||||||
|
-- select * from seg
|
||||||
|
--
|
||||||
,copr AS (
|
,copr AS (
|
||||||
SELECT
|
SELECT
|
||||||
LTRIM(RTRIM(A9)) AS COMP,
|
LTRIM(RTRIM(A9)) AS COMP,
|
||||||
@ -91,6 +97,8 @@ target AS (select $$replace_request$$::json def)
|
|||||||
WHERE
|
WHERE
|
||||||
A2 = 'AA' OR A2 IS NULL
|
A2 = 'AA' OR A2 IS NULL
|
||||||
)
|
)
|
||||||
|
-- select * from copr
|
||||||
|
--
|
||||||
,alldates AS (
|
,alldates AS (
|
||||||
SELECT
|
SELECT
|
||||||
promo
|
promo
|
||||||
@ -112,7 +120,7 @@ target AS (select $$replace_request$$::json def)
|
|||||||
--probably dont want to include adjustments that have blown away volume and good sources of dating info
|
--probably dont want to include adjustments that have blown away volume and good sources of dating info
|
||||||
-----------------additional params-------------------
|
-----------------additional params-------------------
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date AND tag <> 'open-orders')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
promo
|
promo
|
||||||
,terms
|
,terms
|
||||||
@ -122,10 +130,11 @@ target AS (select $$replace_request$$::json def)
|
|||||||
,order_date
|
,order_date
|
||||||
,request_date
|
,request_date
|
||||||
,ship_date
|
,ship_date
|
||||||
HAVING
|
-- HAVING
|
||||||
sum(value_usd) <> 0
|
-- sum(value_usd) <> 0
|
||||||
)
|
)
|
||||||
-- select * from alldates
|
-- select * from alldates
|
||||||
|
--
|
||||||
,dom AS (
|
,dom AS (
|
||||||
SELECT
|
SELECT
|
||||||
extract(day FROM order_date) DOM
|
extract(day FROM order_date) DOM
|
||||||
@ -136,7 +145,7 @@ target AS (select $$replace_request$$::json def)
|
|||||||
extract(day FROM order_date)
|
extract(day FROM order_date)
|
||||||
)
|
)
|
||||||
-- select * from dom
|
-- select * from dom
|
||||||
---------------------may want ot look at a top-5 mix solution in the future facilitated by sum() over (order by sales desc)---------------
|
--
|
||||||
,mmix AS (
|
,mmix AS (
|
||||||
SELECT
|
SELECT
|
||||||
to_char(order_date,'Mon') _month
|
to_char(order_date,'Mon') _month
|
||||||
@ -150,7 +159,7 @@ target AS (select $$replace_request$$::json def)
|
|||||||
,sum((request_date-order_date)*(value_usd)) rlag_wa
|
,sum((request_date-order_date)*(value_usd)) rlag_wa
|
||||||
--,ship_date - request_date slag
|
--,ship_date - request_date slag
|
||||||
,sum((ship_date - request_date)*(value_usd)) slag_wa
|
,sum((ship_date - request_date)*(value_usd)) slag_wa
|
||||||
,sum(value_usd) value_usd
|
,COALESCE(nullif(sum(value_usd),0),1) value_usd
|
||||||
FROM
|
FROM
|
||||||
alldates
|
alldates
|
||||||
GROUP BY
|
GROUP BY
|
||||||
@ -163,6 +172,7 @@ target AS (select $$replace_request$$::json def)
|
|||||||
--,ship_date - request_date
|
--,ship_date - request_date
|
||||||
)
|
)
|
||||||
-- select * from mmix
|
-- select * from mmix
|
||||||
|
--
|
||||||
,targm AS (
|
,targm AS (
|
||||||
SELECT
|
SELECT
|
||||||
je.key as month
|
je.key as month
|
||||||
@ -179,6 +189,7 @@ target AS (select $$replace_request$$::json def)
|
|||||||
mseq.m = je.key
|
mseq.m = je.key
|
||||||
)
|
)
|
||||||
--select * from targm
|
--select * from targm
|
||||||
|
--
|
||||||
,mmixp AS (
|
,mmixp AS (
|
||||||
SELECT
|
SELECT
|
||||||
_month
|
_month
|
||||||
@ -195,7 +206,7 @@ target AS (select $$replace_request$$::json def)
|
|||||||
mmix
|
mmix
|
||||||
)
|
)
|
||||||
--select * from mmixp
|
--select * from mmixp
|
||||||
--month cross join mix
|
--
|
||||||
,mxm AS (
|
,mxm AS (
|
||||||
SELECT
|
SELECT
|
||||||
t.month
|
t.month
|
||||||
@ -225,7 +236,7 @@ FROM
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
-- SELECT * FROM mxm
|
-- SELECT * FROM mxm
|
||||||
--this basemix is probably join going to be part-bill-ship with all master data joined later since it is not known if any original is salvaged
|
--
|
||||||
,basemix AS (
|
,basemix AS (
|
||||||
SELECT
|
SELECT
|
||||||
sd.fspr
|
sd.fspr
|
||||||
@ -262,9 +273,12 @@ SELECT
|
|||||||
sd.drange @> (make_date(mxm.yr + 2024,mxm.cal,mxm.odom) + rlag + slag)
|
sd.drange @> (make_date(mxm.yr + 2024,mxm.cal,mxm.odom) + rlag + slag)
|
||||||
)
|
)
|
||||||
-- SELECT * FROM basemix
|
-- SELECT * FROM basemix
|
||||||
|
--
|
||||||
,log AS (
|
,log AS (
|
||||||
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
||||||
)
|
)
|
||||||
|
-- select * from log
|
||||||
|
--
|
||||||
,final AS (
|
,final AS (
|
||||||
SELECT
|
SELECT
|
||||||
b.fspr
|
b.fspr
|
||||||
@ -390,6 +404,8 @@ FROM
|
|||||||
AND rx.fcur = COALESCE(bc.bvcurr,b.r_currency)
|
AND rx.fcur = COALESCE(bc.bvcurr,b.r_currency)
|
||||||
AND rx.tcur = 'US'
|
AND rx.tcur = 'US'
|
||||||
)
|
)
|
||||||
|
-- select * from final
|
||||||
|
--
|
||||||
, ins AS (
|
, ins AS (
|
||||||
INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
|
INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
|
||||||
)
|
)
|
||||||
|
|||||||
@ -28,9 +28,9 @@ target AS (select target_increment incr)
|
|||||||
,substance
|
,substance
|
||||||
,fs_line --master data
|
,fs_line --master data
|
||||||
,r_currency --history cust mix
|
,r_currency --history cust mix
|
||||||
,r_rate --master data
|
,coalesce(r_rate,1) as r_rate --master data
|
||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,coalesce(c_rate,1) as c_rate --master data
|
||||||
,sum(coalesce(units,0)) units --history value
|
,sum(coalesce(units,0)) units --history value
|
||||||
,sum(coalesce(value_loc,0)) value_loc --history value
|
,sum(coalesce(value_loc,0)) value_loc --history value
|
||||||
,sum(coalesce(value_usd,0)) value_usd --0
|
,sum(coalesce(value_usd,0)) value_usd --0
|
||||||
@ -55,7 +55,7 @@ target AS (select target_increment incr)
|
|||||||
where_clause
|
where_clause
|
||||||
-----------------additional params-------------------
|
-----------------additional params-------------------
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date AND tag <> 'open-orders')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
fspr
|
fspr
|
||||||
,plnt ---master data
|
,plnt ---master data
|
||||||
@ -98,29 +98,31 @@ target AS (select target_increment incr)
|
|||||||
,ship_month
|
,ship_month
|
||||||
,ship_season
|
,ship_season
|
||||||
)
|
)
|
||||||
|
-- select * from basemix
|
||||||
|
--
|
||||||
,scale AS (
|
,scale AS (
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT incr::numeric FROM target) incr
|
CASE
|
||||||
,(SELECT sum(value_loc * r_rate) FROM basemix) base
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM basemix) = 0 AND (SELECT sum(units) FROM basemix) = 0 THEN 'both'
|
||||||
,CASE WHEN (SELECT sum(value_loc * r_rate) FROM basemix) = 0 THEN
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM basemix) = 0 THEN 'cost'
|
||||||
0
|
ELSE 'other'
|
||||||
ELSE
|
END zero_values
|
||||||
(SELECT incr::numeric FROM target)/(SELECT sum(value_loc * r_rate) FROM basemix)
|
,CASE
|
||||||
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM basemix) = 0 AND (SELECT coalesce(sum(units),0) FROM basemix) = 0 -- Split incr evenly between rows.
|
||||||
|
THEN (SELECT incr::numeric FROM target) / (SELECT count(*) FROM basemix)
|
||||||
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM basemix) = 0 -- Get a per-unit incr value
|
||||||
|
THEN (SELECT incr::numeric FROM target) / (SELECT sum(units) FROM basemix)
|
||||||
|
ELSE -- Find percent change for existing value_loc
|
||||||
|
(SELECT incr::numeric FROM target) / (SELECT nullif(sum(value_loc * r_rate),0) FROM basemix) - 1
|
||||||
END factor
|
END factor
|
||||||
,CASE WHEN (SELECT sum(value_loc * r_rate) FROM basemix) = 0 THEN
|
|
||||||
CASE WHEN ((SELECT incr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM basemix)) <> 0 THEN
|
|
||||||
--if the base value is -0- but the target value hasn't been achieved, derive a price to apply
|
|
||||||
((SELECT incr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM basemix))/(SELECT sum(units) FROM basemix)
|
|
||||||
ELSE
|
|
||||||
0
|
|
||||||
END
|
|
||||||
ELSE
|
|
||||||
0
|
|
||||||
END mod_price
|
|
||||||
)
|
)
|
||||||
|
-- select * from scale
|
||||||
|
--
|
||||||
,log AS (
|
,log AS (
|
||||||
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
||||||
)
|
)
|
||||||
|
-- select * from log
|
||||||
|
--
|
||||||
,final AS (
|
,final AS (
|
||||||
SELECT
|
SELECT
|
||||||
fspr
|
fspr
|
||||||
@ -153,8 +155,16 @@ target AS (select target_increment incr)
|
|||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,c_rate --master data
|
||||||
,0::numeric units
|
,0::numeric units
|
||||||
,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price/b.r_rate ELSE b.value_loc*s.factor END)::numeric,2) value_loc
|
,round(CASE s.zero_values
|
||||||
,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price ELSE b.value_usd*s.factor END)::numeric ,2) value_usd
|
WHEN 'both' THEN s.factor / b.r_rate
|
||||||
|
WHEN 'cost' THEN b.units * s.factor / b.r_rate
|
||||||
|
WHEN 'other' THEN b.value_loc * s.factor
|
||||||
|
END, 2) AS value_loc
|
||||||
|
,round(CASE s.zero_values
|
||||||
|
WHEN 'both' THEN s.factor
|
||||||
|
WHEN 'cost' THEN b.units * s.factor
|
||||||
|
WHEN 'other' THEN b.value_usd * s.factor
|
||||||
|
END, 2) AS value_usd
|
||||||
,0::numeric cost_loc
|
,0::numeric cost_loc
|
||||||
,0::numeric cost_usd
|
,0::numeric cost_usd
|
||||||
,calc_status --0
|
,calc_status --0
|
||||||
@ -180,9 +190,10 @@ target AS (select target_increment incr)
|
|||||||
CROSS JOIN scale s
|
CROSS JOIN scale s
|
||||||
CROSS JOIN log
|
CROSS JOIN log
|
||||||
WHERE
|
WHERE
|
||||||
s.factor <> 0 or s.mod_price <> 0
|
s.factor <> 0
|
||||||
)
|
)
|
||||||
--select sum(value_usd), count(*) from final
|
-- select * from final
|
||||||
|
--
|
||||||
, ins AS (
|
, ins AS (
|
||||||
INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
|
INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
|
||||||
)
|
)
|
||||||
|
|||||||
@ -12,8 +12,10 @@ target AS (select incr_qty qincr)
|
|||||||
where_clause
|
where_clause
|
||||||
-----------------additional params-------------------
|
-----------------additional params-------------------
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND ( order_date <= ship_date OR tag = 'open-orders')
|
||||||
)
|
)
|
||||||
|
-- select * from testv
|
||||||
|
--
|
||||||
,flagv AS (
|
,flagv AS (
|
||||||
SELECT
|
SELECT
|
||||||
tot
|
tot
|
||||||
@ -35,7 +37,8 @@ target AS (select incr_qty qincr)
|
|||||||
FROM
|
FROM
|
||||||
testv
|
testv
|
||||||
)
|
)
|
||||||
--ever need receive a target of -0- qty but value <> 0?
|
-- select * from flagv
|
||||||
|
--
|
||||||
,basemix AS (
|
,basemix AS (
|
||||||
SELECT
|
SELECT
|
||||||
fspr
|
fspr
|
||||||
@ -64,9 +67,9 @@ target AS (select incr_qty qincr)
|
|||||||
,substance
|
,substance
|
||||||
,fs_line --master data
|
,fs_line --master data
|
||||||
,r_currency --history cust mix
|
,r_currency --history cust mix
|
||||||
,r_rate --master data
|
,coalesce(r_rate,1) as r_rate --master data
|
||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,coalesce(c_rate,1) as c_rate --master data
|
||||||
,sum(coalesce(units,0)) units --history value
|
,sum(coalesce(units,0)) units --history value
|
||||||
,sum(coalesce(value_loc,0)) value_loc --history value
|
,sum(coalesce(value_loc,0)) value_loc --history value
|
||||||
,sum(coalesce(value_usd,0)) value_usd --0
|
,sum(coalesce(value_usd,0)) value_usd --0
|
||||||
@ -96,7 +99,7 @@ target AS (select incr_qty qincr)
|
|||||||
WHEN 'scale new part' THEN module = 'new basket'
|
WHEN 'scale new part' THEN module = 'new basket'
|
||||||
END
|
END
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date AND tag <> 'open-orders')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
fspr
|
fspr
|
||||||
,plnt ---master data
|
,plnt ---master data
|
||||||
@ -139,17 +142,33 @@ target AS (select incr_qty qincr)
|
|||||||
,ship_month
|
,ship_month
|
||||||
,ship_season
|
,ship_season
|
||||||
)
|
)
|
||||||
--SELECT * FROM basemix
|
-- select * from basemix
|
||||||
|
--
|
||||||
,scale AS (
|
,scale AS (
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT qincr::numeric FROM target) incr
|
(SELECT qincr::numeric FROM target) incr
|
||||||
,(SELECT sum(value_loc *r_rate) FROM basemix) base
|
,(SELECT sum(value_loc *r_rate) FROM basemix) base
|
||||||
,(SELECT qincr FROM target)/(SELECT SUM(units) FROM basemix) factor
|
-- If sum(units) = 0, then we're likely working with a single row. We can't
|
||||||
|
-- scale 0, no matter how we try, so we just use mod_volume to set the value we want.
|
||||||
|
-- When sum(units) <> 0, then we use factor to scale units.
|
||||||
|
,CASE
|
||||||
|
WHEN (SELECT sum(units)::numeric FROM basemix) = 0
|
||||||
|
THEN 0
|
||||||
|
ELSE (SELECT qincr::numeric FROM target)/(SELECT sum(units)::numeric FROM basemix)
|
||||||
|
END AS factor
|
||||||
|
,CASE
|
||||||
|
WHEN (SELECT sum(units)::numeric FROM basemix) = 0
|
||||||
|
THEN (SELECT qincr::numeric FROM target)
|
||||||
|
ELSE 0
|
||||||
|
END AS mod_volume
|
||||||
)
|
)
|
||||||
-- select * from scale
|
-- select * from scale
|
||||||
|
--
|
||||||
,log AS (
|
,log AS (
|
||||||
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
||||||
)
|
)
|
||||||
|
-- select * from log
|
||||||
|
--
|
||||||
,final AS (
|
,final AS (
|
||||||
SELECT
|
SELECT
|
||||||
fspr
|
fspr
|
||||||
@ -166,10 +185,10 @@ target AS (select incr_qty qincr)
|
|||||||
,chan --master data
|
,chan --master data
|
||||||
,chansub
|
,chansub
|
||||||
,chan_retail
|
,chan_retail
|
||||||
,part
|
,b.part
|
||||||
,part_descr
|
,part_descr
|
||||||
,part_group
|
,part_group
|
||||||
,branding
|
,b.branding
|
||||||
,majg_descr
|
,majg_descr
|
||||||
,ming_descr
|
,ming_descr
|
||||||
,majs_descr
|
,majs_descr
|
||||||
@ -181,7 +200,7 @@ target AS (select incr_qty qincr)
|
|||||||
,r_rate --master data
|
,r_rate --master data
|
||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,c_rate --master data
|
||||||
,round(units*s.factor ,2) units
|
,round(CASE WHEN s.factor = 0 THEN s.mod_volume ELSE units*s.factor END, 2) units
|
||||||
,round(value_loc*s.factor, 2) value_loc
|
,round(value_loc*s.factor, 2) value_loc
|
||||||
,round(value_usd*s.factor, 2) value_usd
|
,round(value_usd*s.factor, 2) value_usd
|
||||||
,round(cost_loc*s.factor, 2) cost_loc
|
,round(cost_loc*s.factor, 2) cost_loc
|
||||||
@ -203,13 +222,19 @@ target AS (select incr_qty qincr)
|
|||||||
,COALESCE(log.doc->>'tag','') "tag"
|
,COALESCE(log.doc->>'tag','') "tag"
|
||||||
,log.doc->>'message' "comment"
|
,log.doc->>'message' "comment"
|
||||||
,log.doc->>'type' module
|
,log.doc->>'type' module
|
||||||
,round(pounds*s.factor, 2) pounds
|
,round(CASE
|
||||||
|
WHEN s.factor = 0 THEN s.mod_volume * i.nwht * (CASE i.nwun
|
||||||
|
WHEN 'KG' THEN 2.2046
|
||||||
|
ELSE 1 END)
|
||||||
|
ELSE pounds*s.factor END, 2) pounds
|
||||||
FROM
|
FROM
|
||||||
basemix b
|
basemix b
|
||||||
CROSS JOIN scale s
|
CROSS JOIN scale s
|
||||||
CROSS JOIN log
|
CROSS JOIN log
|
||||||
|
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON i.item = b.part
|
||||||
)
|
)
|
||||||
--select sum(value_usd), count(*) from final
|
-- select * from final
|
||||||
|
--
|
||||||
, ins AS (
|
, ins AS (
|
||||||
INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
|
INSERT INTO rlarp.osm_pool SELECT * FROM final RETURNING *
|
||||||
)
|
)
|
||||||
|
|||||||
@ -12,9 +12,10 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
where_clause
|
where_clause
|
||||||
-----------------additional params-------------------
|
-----------------additional params-------------------
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND ( order_date <= ship_date OR tag = 'open-orders')
|
||||||
|
|
||||||
)
|
)
|
||||||
|
-- select * from testv
|
||||||
|
--
|
||||||
,flagv AS (
|
,flagv AS (
|
||||||
SELECT
|
SELECT
|
||||||
tot
|
tot
|
||||||
@ -36,6 +37,8 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
FROM
|
FROM
|
||||||
testv
|
testv
|
||||||
)
|
)
|
||||||
|
-- select * from flagv
|
||||||
|
--
|
||||||
,basemix AS (
|
,basemix AS (
|
||||||
SELECT
|
SELECT
|
||||||
fspr
|
fspr
|
||||||
@ -64,9 +67,9 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
,substance
|
,substance
|
||||||
,fs_line --master data
|
,fs_line --master data
|
||||||
,r_currency --history cust mix
|
,r_currency --history cust mix
|
||||||
,r_rate --master data
|
,coalesce(r_rate,1) as r_rate --master data
|
||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,coalesce(c_rate,1) as c_rate --master data
|
||||||
,sum(coalesce(units,0)) units --history value
|
,sum(coalesce(units,0)) units --history value
|
||||||
,sum(coalesce(value_loc,0)) value_loc --history value
|
,sum(coalesce(value_loc,0)) value_loc --history value
|
||||||
,sum(coalesce(value_usd,0)) value_usd --0
|
,sum(coalesce(value_usd,0)) value_usd --0
|
||||||
@ -96,7 +99,7 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
WHEN 'scale new part' THEN module = 'new basket'
|
WHEN 'scale new part' THEN module = 'new basket'
|
||||||
END
|
END
|
||||||
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
AND calc_status||flag <> 'CLOSEDREMAINDER' --exclude short ships when building order adjustments
|
||||||
AND order_date <= ship_date
|
AND (order_date <= ship_date AND tag <> 'open-orders')
|
||||||
GROUP BY
|
GROUP BY
|
||||||
fspr
|
fspr
|
||||||
,plnt ---master data
|
,plnt ---master data
|
||||||
@ -139,13 +142,28 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
,ship_month
|
,ship_month
|
||||||
,ship_season
|
,ship_season
|
||||||
)
|
)
|
||||||
|
-- select * from basemix
|
||||||
|
--
|
||||||
,vscale AS (
|
,vscale AS (
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT vincr::numeric FROM target) incr
|
(SELECT vincr::numeric FROM target) incr
|
||||||
,(SELECT sum(units)::numeric FROM basemix) base
|
,(SELECT sum(units)::numeric FROM basemix) base
|
||||||
,(SELECT vincr::numeric FROM target)/(SELECT sum(units)::numeric FROM basemix) factor
|
-- If sum(units) = 0, then we're likely working with a single row. We can't
|
||||||
|
-- scale 0, no matter how we try, so we just use mod_volume to set the value we want.
|
||||||
|
-- When sum(units) <> 0, then we use factor to scale units.
|
||||||
|
,CASE
|
||||||
|
WHEN (SELECT sum(units)::numeric FROM basemix) = 0
|
||||||
|
THEN 0
|
||||||
|
ELSE (SELECT vincr::numeric FROM target)/(SELECT sum(units)::numeric FROM basemix)
|
||||||
|
END AS factor
|
||||||
|
,CASE
|
||||||
|
WHEN (SELECT sum(units)::numeric FROM basemix) = 0
|
||||||
|
THEN (SELECT vincr::numeric FROM target)
|
||||||
|
ELSE 0
|
||||||
|
END AS mod_volume
|
||||||
)
|
)
|
||||||
-- select * from vscale
|
-- select * from vscale
|
||||||
|
--
|
||||||
,log AS (
|
,log AS (
|
||||||
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
INSERT INTO rlarp.osm_log(doc) SELECT $$replace_iterdef$$::jsonb doc RETURNING *
|
||||||
)
|
)
|
||||||
@ -165,10 +183,10 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
,chan --master data
|
,chan --master data
|
||||||
,chansub
|
,chansub
|
||||||
,chan_retail
|
,chan_retail
|
||||||
,part
|
,b.part
|
||||||
,part_descr
|
,part_descr
|
||||||
,part_group
|
,part_group
|
||||||
,branding
|
,b.branding
|
||||||
,majg_descr
|
,majg_descr
|
||||||
,ming_descr
|
,ming_descr
|
||||||
,majs_descr
|
,majs_descr
|
||||||
@ -180,7 +198,7 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
,r_rate --master data
|
,r_rate --master data
|
||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,c_rate --master data
|
||||||
,round(units*s.factor ,2) units
|
,round(CASE WHEN s.factor = 0 THEN s.mod_volume ELSE units*s.factor END, 2) units
|
||||||
,round(value_loc*s.factor, 2) value_loc
|
,round(value_loc*s.factor, 2) value_loc
|
||||||
,round(value_usd*s.factor, 2) value_usd
|
,round(value_usd*s.factor, 2) value_usd
|
||||||
,round(cost_loc*s.factor, 2) cost_loc
|
,round(cost_loc*s.factor, 2) cost_loc
|
||||||
@ -202,35 +220,37 @@ target AS (select target_vol vincr, target_prc pincr)
|
|||||||
,COALESCE(log.doc->>'tag','') "tag"
|
,COALESCE(log.doc->>'tag','') "tag"
|
||||||
,log.doc->>'message' "comment"
|
,log.doc->>'message' "comment"
|
||||||
,log.doc->>'type' module
|
,log.doc->>'type' module
|
||||||
,round(pounds*s.factor, 2) pounds
|
,round(CASE
|
||||||
|
WHEN s.factor = 0 THEN s.mod_volume * i.nwht * (CASE i.nwun
|
||||||
|
WHEN 'KG' THEN 2.2046
|
||||||
|
ELSE 1 END)
|
||||||
|
ELSE pounds*s.factor END, 2) pounds
|
||||||
FROM
|
FROM
|
||||||
basemix b
|
basemix b
|
||||||
CROSS JOIN vscale s
|
CROSS JOIN vscale s
|
||||||
CROSS JOIN log
|
CROSS JOIN log
|
||||||
|
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON i.item = b.part
|
||||||
)
|
)
|
||||||
|
-- select * from volume
|
||||||
|
--
|
||||||
,pscale AS (
|
,pscale AS (
|
||||||
SELECT
|
SELECT
|
||||||
(SELECT pincr::numeric FROM target) incr
|
CASE
|
||||||
,(SELECT sum(value_loc * r_rate) FROM volume) base
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 AND (SELECT sum(units) FROM volume) = 0 THEN 'both'
|
||||||
,CASE WHEN (SELECT sum(value_loc * r_rate) FROM volume) = 0 THEN
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 THEN 'cost'
|
||||||
--if the base value is -0- scaling will not work, need to generate price, factor goes to -0-
|
ELSE 'other'
|
||||||
0
|
END zero_values
|
||||||
ELSE
|
,CASE
|
||||||
--if the target $amount is not achieved, adjust further
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 AND (SELECT coalesce(sum(units),0) FROM volume) = 0 -- Split pincr evenly between rows.
|
||||||
((SELECT pincr::numeric FROM target)-(SELECT sum(value_loc * r_rate) FROM volume))/(SELECT sum(value_loc * r_rate) FROM volume)
|
THEN (SELECT pincr::numeric FROM target) / (SELECT count(*) FROM volume)
|
||||||
|
WHEN (SELECT coalesce(sum(value_loc),0) FROM volume) = 0 -- Get a per-unit pincr value
|
||||||
|
THEN (SELECT pincr::numeric FROM target) / (SELECT sum(units) FROM volume)
|
||||||
|
ELSE -- Find percent change for existing value_loc
|
||||||
|
(SELECT pincr::numeric FROM target) / (SELECT nullif(sum(value_loc * r_rate),0) FROM volume) - 1
|
||||||
END factor
|
END factor
|
||||||
,CASE WHEN (SELECT sum(value_loc * r_rate) FROM volume) = 0 THEN
|
|
||||||
CASE WHEN ((SELECT pincr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM volume)) <> 0 THEN
|
|
||||||
--if the base value is -0- but the target value hasn't been achieved, derive a price to apply
|
|
||||||
((SELECT pincr::numeric FROM target) - (SELECT sum(value_loc * r_rate) FROM volume))/(SELECT sum(units) FROM volume)
|
|
||||||
ELSE
|
|
||||||
0
|
|
||||||
END
|
|
||||||
ELSE
|
|
||||||
0
|
|
||||||
END mod_price
|
|
||||||
)
|
)
|
||||||
-- select * from pscale
|
-- select * from pscale
|
||||||
|
--
|
||||||
,pricing AS (
|
,pricing AS (
|
||||||
SELECT
|
SELECT
|
||||||
fspr
|
fspr
|
||||||
@ -263,8 +283,16 @@ FROM
|
|||||||
,c_currency --master data
|
,c_currency --master data
|
||||||
,c_rate --master data
|
,c_rate --master data
|
||||||
,0::numeric units
|
,0::numeric units
|
||||||
,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price/b.r_rate ELSE b.value_loc*s.factor END)::numeric,2) value_loc
|
,round(CASE s.zero_values
|
||||||
,round((CASE WHEN s.factor = 0 THEN b.units * s.mod_price ELSE b.value_usd*s.factor END)::numeric ,2) value_usd
|
WHEN 'both' THEN s.factor / b.r_rate
|
||||||
|
WHEN 'cost' THEN b.units * s.factor / b.r_rate
|
||||||
|
WHEN 'other' THEN b.value_loc * s.factor
|
||||||
|
END, 2) AS value_loc
|
||||||
|
,round(CASE s.zero_values
|
||||||
|
WHEN 'both' THEN s.factor
|
||||||
|
WHEN 'cost' THEN b.units * s.factor
|
||||||
|
WHEN 'other' THEN b.value_usd * s.factor
|
||||||
|
END, 2) AS value_usd
|
||||||
,0::numeric cost_loc
|
,0::numeric cost_loc
|
||||||
,0::numeric cost_usd
|
,0::numeric cost_usd
|
||||||
,calc_status --0
|
,calc_status --0
|
||||||
@ -290,9 +318,10 @@ FROM
|
|||||||
CROSS JOIN pscale s
|
CROSS JOIN pscale s
|
||||||
CROSS JOIN log
|
CROSS JOIN log
|
||||||
WHERE
|
WHERE
|
||||||
s.factor <> 0 or s.mod_price <> 0
|
s.factor <> 0
|
||||||
)
|
)
|
||||||
--select sum(value_usd), sum(units) from pricing
|
-- SELECT * FROM pricing UNION ALL SELECT * FROM volume
|
||||||
|
--
|
||||||
, ins AS (
|
, ins AS (
|
||||||
INSERT INTO rlarp.osm_pool (SELECT * FROM pricing UNION ALL SELECT * FROM volume) RETURNING *
|
INSERT INTO rlarp.osm_pool (SELECT * FROM pricing UNION ALL SELECT * FROM volume) RETURNING *
|
||||||
)
|
)
|
||||||
@ -379,4 +408,6 @@ FROM
|
|||||||
,tag
|
,tag
|
||||||
,comment
|
,comment
|
||||||
)
|
)
|
||||||
|
-- select * from insagg
|
||||||
|
--
|
||||||
SELECT json_agg(row_to_json(insagg)) x from insagg
|
SELECT json_agg(row_to_json(insagg)) x from insagg
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user