forecast_api/build/snap_customer.sql
2025-11-11 22:38:40 -05:00

172 lines
5.8 KiB
SQL

----------------------------SET BILL-TO REP------------------------------------
UPDATE
rlarp.osmf s
SET
bill_rep = c.bvsalm
,bill_class = c.bvclas
,bill_terr = c.bvterr
,bill_ctry = c.bvctry
,bill_prov = c.bvprcd
,bill_post = c.bvpost
,remit_to = c.bvcomp
,account = CASE bvadr6 WHEN '' THEN bvname ELSE bvadr6 END
FROM
lgdat.cust c
WHERE
c.bvcust = s.bill_cust
AND (
COALESCE(s.bill_rep,'') <> c.bvsalm
OR COALESCE(s.bill_class,'') <> c.bvclas
OR COALESCE(s.bill_terr,'') <> c.bvterr
OR COALESCE(bill_ctry,'') <> c.bvctry
OR COALESCE(bill_prov,'') <> c.bvprcd
OR COALESCE(bill_post,'') <> c.bvpost
OR COALESCE(remit_to,'') <> c.bvcomp::text
);
----------------------------SET SHIP-TO REP------------------------------------
UPDATE
rlarp.osmf s
SET
ship_rep = c.bvsalm
,ship_class = c.bvclas
,ship_terr = c.bvterr
,dest_ctry = c.bvctry
,dest_prov = c.bvprcd
,dest_post = c.bvpost
FROM
lgdat.cust c
WHERE
c.bvcust = s.ship_cust
AND (
COALESCE(s.ship_rep,'') <> c.bvsalm
OR COALESCE(s.ship_class,'') <> c.bvclas
OR COALESCE(s.ship_terr,'') <> c.bvterr
OR COALESCE(dest_ctry,'') <> c.bvctry
OR COALESCE(dest_prov,'') <> c.bvprcd
OR COALESCE(dest_post,'') <> c.bvpost
);
----------------------------SET BILLTO GROUP------------------------------------
UPDATE
rlarp.osmf o
SET
ACCOUNT = CASE BVADR6 WHEN '' THEN BVNAME ELSE BVADR6 END
FROM
lgdat.cust c
WHERE
c.bvcust = o.bill_cust
AND coalesce(account,'') <> CASE BVADR6 WHEN '' THEN BVNAME ELSE BVADR6 END;
----------------------------SET SHIPTO GROUP------------------------------------
UPDATE
rlarp.osmf o
SET
SHIPGRP = CASE BVADR6 WHEN '' THEN BVNAME ELSE BVADR6 END
FROM
lgdat.cust c
WHERE
c.bvcust = o.ship_cust
AND CASE BVADR6 WHEN '' THEN BVNAME ELSE BVADR6 END <> COALESCE(O.SHIPGRP,'');
---------------------------SET CHANNEL-----------------------------------------
UPDATE
rlarp.osmf
SET
CHAN = CASE SUBSTRING(BILL_CLASS,2,3)
--if the bill to class is ditsributor, then it's either warehouse or drop
WHEN 'DIS' THEN
--if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse
CASE SUBSTRING(SHIP_CLASS,2,3)
WHEN 'DIS' THEN 'WHS'
ELSE 'DRP'
END
--CASE WHEN RTRIM(SUBSTRING(LTRIM(SC.BVADR7)||SC.BVNAME,1,30)) = RTRIM(SUBSTRING(LTRIM(BC.BVADR7)||BC.BVNAME,1,30)) THEN 'DIS' ELSE 'DRP' END
--everything else does not involve a distributor and is considered direct
ELSE 'DIR'
END,
CHANSUB = CASE SUBSTRING(BILL_CLASS,2,3)
WHEN 'DIS' THEN
--if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse
CASE SUBSTRING(SHIP_CLASS,2,3)
WHEN 'DIS' THEN 'WHS'
ELSE CASE SUBSTRING(SHIP_CLASS,1,1) WHEN 'R' THEN 'RDP' ELSE 'DRP' END
END
WHEN 'MAS' THEN 'RMN'
WHEN 'NAT' THEN 'RMN'
ELSE CASE SUBSTRING(SHIP_CLASS,1,1) WHEN 'R' THEN 'RDI' ELSE 'DIR' END
END
WHERE
COALESCE(CHAN,'') <> CASE SUBSTRING(BILL_CLASS,2,3)
--if the bill to class is ditsributor, then it's either warehouse or drop
WHEN 'DIS' THEN
--if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse
CASE SUBSTRING(SHIP_CLASS,2,3)
WHEN 'DIS' THEN 'WHS'
ELSE 'DRP'
END
--CASE WHEN RTRIM(SUBSTRING(LTRIM(SC.BVADR7)||SC.BVNAME,1,30)) = RTRIM(SUBSTRING(LTRIM(BC.BVADR7)||BC.BVNAME,1,30)) THEN 'DIS' ELSE 'DRP' END
--everything else does not involve a distributor and is considered direct
ELSE 'DIR'
END
OR
COALESCE(CHANSUB,'') <> CASE SUBSTRING(BILL_CLASS,2,3)
WHEN 'DIS' THEN
--if the ship-to is a different name than the bill-to then it's drop, otherwise it's warehouse
CASE SUBSTRING(SHIP_CLASS,2,3)
WHEN 'DIS' THEN 'WHS'
ELSE CASE SUBSTRING(SHIP_CLASS,1,1) WHEN 'R' THEN 'RDP' ELSE 'DRP' END
END
WHEN 'MAS' THEN 'RMN'
WHEN 'NAT' THEN 'RMN'
ELSE CASE SUBSTRING(SHIP_CLASS,1,1) WHEN 'R' THEN 'RDI' ELSE 'DIR' END
END;
---------------------------SET QUOTA REP---------------------------------------
MERGE INTO
rlarp.osmf AS s
USING (
SELECT DISTINCT
s.bill_cust
,s.ship_cust
,s.glec
,CASE substring(bc.cclass, 2, 3)
WHEN 'DIR' THEN bc.default_rep
ELSE COALESCE(sc.default_rep, bc.default_rep)
END AS default_rep
,CASE substring(bc.cclass, 2, 3)
WHEN 'DIR' THEN bc.tier
ELSE COALESCE(sc.tier, bc.tier)
END AS customer_tier
,CASE
WHEN COALESCE(s.glec, '') = '1RE' AND COALESCE(bc.retail_rep, '') <> ''
THEN bc.retail_rep
ELSE NULL
END AS retail_rep
FROM rlarp.osmf s
LEFT JOIN rlarp.cust bc ON bc.code = s.bill_cust
LEFT JOIN rlarp.cust sc ON sc.code = s.ship_cust
WHERE glec IS NOT NULL
) AS cr
ON
cr.bill_cust = s.bill_cust AND
COALESCE(cr.ship_cust, '') = COALESCE(s.ship_cust, '') AND
s.glec = cr.glec
WHEN MATCHED THEN
UPDATE SET
dsm = COALESCE(cr.retail_rep, cr.default_rep);