include guidance logic

This commit is contained in:
Paul Trowbridge 2025-03-27 13:59:04 -04:00
parent eaba629002
commit f54081f69d

View File

@ -5,6 +5,8 @@ pgrp AS (
o.bill_dba o.bill_dba
,o.ship_dba ,o.ship_dba
,o.dsm ,o.dsm
,i.partgroup
,i.pricegroup
,o.part ,o.part
,o.odate ,o.odate
,o.qtyord ,o.qtyord
@ -31,6 +33,8 @@ pgrp AS (
o.bill_dba o.bill_dba
,o.ship_dba ,o.ship_dba
,o.dsm ,o.dsm
,i.partgroup
,i.pricegroup
,o.part ,o.part
,o.odate ,o.odate
,o.qtyord ,o.qtyord
@ -70,7 +74,10 @@ pgrp AS (
o.account o.account
,o.shipgrp ,o.shipgrp
,o.dsm ,o.dsm
,i.partgroup
,i.pricegroup
,o.part ,o.part
,o.glec
,o.oseas ,o.oseas
-- ,o.odate -- ,o.odate
,og.sortmo omon ,og.sortmo omon
@ -88,15 +95,20 @@ pgrp AS (
o.odate BETWEEN og.sdat and og.edat o.odate BETWEEN og.sdat and og.edat
LEFT OUTER JOIN rlarp.gld sg ON LEFT OUTER JOIN rlarp.gld sg ON
o.sdate BETWEEN sg.sdat and sg.edat o.sdate BETWEEN sg.sdat and sg.edat
LEFT OUTER JOIN "CMS.CUSLG".itemm i ON
i.item = o.part
WHERE WHERE
iter IN ('actuals','actuals_plug','copy') iter IN ('actuals','actuals_plug','copy')
AND fs_line = '41010' AND fs_line = '41010'
AND substring(glec,1,1) <= '2' AND substring(o.glec,1,1) <= '2'
GROUP BY GROUP BY
o.account o.account
,o.shipgrp ,o.shipgrp
,o.dsm ,o.dsm
,i.partgroup
,i.pricegroup
,o.part ,o.part
,o.glec
,o.oseas ,o.oseas
-- ,o.odate -- ,o.odate
,og.sortmo ,og.sortmo
@ -109,7 +121,11 @@ pgrp AS (
grp.account grp.account
,grp.shipgrp ,grp.shipgrp
,grp.dsm ,grp.dsm
,r.director
,grp.partgroup
,grp.pricegroup
,grp.part ,grp.part
-- ,grp.glec
,grp.oseas ,grp.oseas
,grp.omon ,grp.omon
-- ,grp.odate -- ,grp.odate
@ -127,6 +143,42 @@ pgrp AS (
,seq.price ,seq.price
,seq.avgprice ,seq.avgprice
,seq.pltq ,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 FROM
grp grp
LEFT OUTER JOIN seq ON LEFT OUTER JOIN seq ON
@ -134,3 +186,5 @@ pgrp AS (
AND seq.bill_dba = grp.account AND seq.bill_dba = grp.account
AND seq.part = grp.part AND seq.part = grp.part
AND seq.rn = 1 AND seq.rn = 1
LEFT OUTER JOIN rlarp.repc r ON
r.repp = grp.dsm