FCLT#72820 prs_staffel opknappen of uitfaseren

svn path=/Database/trunk/; revision=61845
This commit is contained in:
Erik Groener
2023-09-20 06:37:15 +00:00
parent 0780e37890
commit 973fcf9253
7 changed files with 16 additions and 171 deletions

View File

@@ -20,21 +20,9 @@ AS
FUNCTION calcartikelkortingsprijs (pbes_srtdeel_key IN NUMBER, pbestelaantal IN NUMBER)
RETURN NUMBER;
PROCEDURE calcopdrachtbedragkorting (pprs_bedrijf_key IN NUMBER, pbrutoopdrachtbedrag IN NUMBER,
pkortingsbedrag OUT NUMBER, pkorting OUT NUMBER);
FUNCTION calcopdrachtkorting (pprs_bedrijf_key IN NUMBER, pbrutoopdrachtbedrag IN NUMBER)
RETURN NUMBER;
FUNCTION calcopdrachtkortingbedrag (pprs_bedrijf_key IN NUMBER, pbrutoopdrachtbedrag IN NUMBER)
RETURN NUMBER;
FUNCTION calcbesartikelkortingsprijs (pbes_bestelling_item_key IN NUMBER, ppunchout IN NUMBER)
RETURN NUMBER;
FUNCTION calcbesopdrachtkorting (pbes_bestelopdr_key IN NUMBER, pautoupdate IN NUMBER)
RETURN NUMBER;
FUNCTION calcbesopdrachtkosten (pbes_bestelopdr_key IN NUMBER, pautoupdate IN NUMBER)
RETURN NUMBER;
@@ -277,70 +265,6 @@ AS
RETURN lkortingsprijs;
END;
PROCEDURE calcopdrachtbedragkorting (pprs_bedrijf_key IN NUMBER, pbrutoopdrachtbedrag IN NUMBER,
pkortingsbedrag OUT NUMBER, pkorting OUT NUMBER)
AS
lkorting prs_staffel.prs_staffel_korting%TYPE; -- percentage
lkortingsbedrag NUMBER;
BEGIN
-- De staffeltabel bevat intervallen waarvan de bovengrens is opgenomen
-- bijvoorbeeld
-- 10 -> 1%
-- 20 -> 2%
-- 50 -> 5%
-- Dan is 30 (euro) tussen 20 en 50 en geldt 5% korting
-- Je moet dus het laagste hogere record vinden. Voor de bovengrens (hooogste staffel) is de grenswaarde NULL
-- ATTENTIE: Nu wordt de laagste *korting* gekozen indien je in de hoogste staffel zit, terwijl je
-- de laagste grenswaarde moet pakken. Levert nu de verkeerde waarde op in het rare geval dat
-- de korting *lager* wordt als je in de hoogste staffel komt, bijvoorbeeld
-- bij tot10000 artikelen 30% korting, en boven10000 25%. Aanname om technische redenen, maar mocht
-- er een verrassend probleem optreden, is dit alvast de tip.
SELECT COALESCE(MIN(prs_staffel_korting), 0)
INTO lkorting
FROM prs_staffel s1
WHERE (prs_staffel_grenswaarde > pbrutoopdrachtbedrag OR s1.prs_staffel_grenswaarde IS NULL) --s2.prs_staffel_grenswaarde IS NULL)
AND NOT EXISTS
(SELECT 'X'
FROM prs_staffel s2
WHERE s1.prs_bedrijf_key = s2.prs_bedrijf_key
AND s2.prs_staffel_grenswaarde < s1.prs_staffel_grenswaarde
AND (s2.prs_staffel_grenswaarde > pbrutoopdrachtbedrag OR s2.prs_staffel_grenswaarde IS NULL))
AND prs_bedrijf_key = pprs_bedrijf_key
AND pbrutoopdrachtbedrag > 0;
lkortingsbedrag := (lkorting / 100) * pbrutoopdrachtbedrag;
-- RETURN lkortingsbedrag;
pkortingsbedrag := lkortingsbedrag;
pkorting := lkorting;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- RETURN 0;
pkortingsbedrag := 0;
pkorting := 0;
END;
FUNCTION calcopdrachtkorting (pprs_bedrijf_key IN NUMBER, pbrutoopdrachtbedrag IN NUMBER)
RETURN NUMBER
AS
lkorting prs_staffel.prs_staffel_korting%TYPE; -- percentage
lkortingsbedrag NUMBER;
BEGIN
BES.calcopdrachtbedragkorting(pprs_bedrijf_key, pbrutoopdrachtbedrag, lkortingsbedrag, lkorting);
RETURN lkorting;
END;
FUNCTION calcopdrachtkortingbedrag (pprs_bedrijf_key IN NUMBER, pbrutoopdrachtbedrag IN NUMBER)
RETURN NUMBER
AS
lkorting prs_staffel.prs_staffel_korting%TYPE; -- percentage
lkortingsbedrag NUMBER;
BEGIN
BES.calcopdrachtbedragkorting(pprs_bedrijf_key, pbrutoopdrachtbedrag, lkortingsbedrag, lkorting);
RETURN lkortingsbedrag;
END;
FUNCTION calcbesartikelkortingsprijs (pbes_bestelling_item_key IN NUMBER, ppunchout IN NUMBER)
RETURN NUMBER
AS
@@ -414,7 +338,7 @@ AS
AND bi.bes_bestelling_item_key = pbes_bestelling_item_key;
END IF;
-- Vindt staffelrecord; zie(!) opmerkingen bij prs_staffel in bes.calcopdrachtkorting.
-- Vindt staffelrecord;
BEGIN
SELECT COALESCE(MIN(bes_staffel_korting), 0)
INTO lstaffelkorting
@@ -451,62 +375,6 @@ AS
RETURN lkortingsprijs;
END;
FUNCTION calcbesopdrachtkorting (pbes_bestelopdr_key IN NUMBER, pautoupdate IN NUMBER)
RETURN NUMBER
AS
lbrutoopdrachtbedrag NUMBER;
lkorting prs_staffel.prs_staffel_korting%TYPE; -- percentage
lstaffelkortingbedrag NUMBER;
lkortingsbedrag NUMBER;
BEGIN
---- som van de bes_bestelopdr_item_prijs > bedrijf.staffel -> kortingspercentage * (sum aantal * bes_bestelopdr_item_prijs) = bes_bestelopdr_korting
-- merk op: deze staffel is op prijs (niet op aantallen)
SELECT COALESCE(SUM (bes_bestelopdr_item_prijs * bes_bestelopdr_item_aantal), 0)
INTO lbrutoopdrachtbedrag
FROM bes_bestelopdr_item
WHERE bes_bestelopdr_key = pbes_bestelopdr_key;
-- De staffeltabel bevat intervallen waarvan de bovengrens is opgenomen
-- bijvoorbeeld
-- 10 -> 1%
-- 20 -> 2%
-- 50 -> 5%
-- Dan is 30 (euro) tussen 20 en 50 en geldt 5% korting
-- Je moet dus het laagste hogere record vinden. Voor de bovengrens (hooogste staffel) is de grenswaarde NULL
-- ATTENTIE: Nu wordt de laagste *korting* gekozen indien je in de hoogste staffel zit, terwijl je
-- de laagste grenswaarde moet pakken. Levert nu de verkeerde waarde op in het rare geval dat
-- de korting *lager* wordt als je in de hoogste staffel komt, bijvoorbeeld
-- bij tot10000 artikelen 30% korting, en boven10000 25%. Aanname om technische redenen, maar mocht
-- er een verrassend probleem optreden, is dit alvast de tip.
SELECT COALESCE(MIN(prs_staffel_korting), 0)
INTO lkorting
FROM prs_staffel s1
WHERE (prs_staffel_grenswaarde > lbrutoopdrachtbedrag OR s1.prs_staffel_grenswaarde IS NULL)
AND NOT EXISTS
(SELECT 'X'
FROM prs_staffel s2
WHERE s1.prs_bedrijf_key = s2.prs_bedrijf_key
AND s2.prs_staffel_grenswaarde < s1.prs_staffel_grenswaarde
AND (s2.prs_staffel_grenswaarde > lbrutoopdrachtbedrag OR s2.prs_staffel_grenswaarde IS NULL))
AND prs_bedrijf_key = (SELECT prs_bedrijf_key
FROM bes_bestelopdr
WHERE bes_bestelopdr_key = pbes_bestelopdr_key);
lkortingsbedrag := (lkorting / 100) * lbrutoopdrachtbedrag;
IF pautoupdate > 0
THEN
UPDATE bes_bestelopdr
SET bes_bestelopdr_korting = lkortingsbedrag
WHERE bes_bestelopdr_key = pbes_bestelopdr_key;
END IF;
RETURN lkortingsbedrag;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
FUNCTION calcbesopdrachtkosten (pbes_bestelopdr_key IN NUMBER, pautoupdate IN NUMBER)
RETURN NUMBER
@@ -780,7 +648,6 @@ AS
l_item_brutoprijs bes_bestelopdr_item.bes_bestelopdr_item_brutoprijs%TYPE;
l_item_prijs bes_bestelopdr_item.bes_bestelopdr_item_prijs%TYPE;
l_item_inkprijs bes_bestelopdr_item.bes_bestelopdr_item_inkprijs%TYPE;
besopdrachtkorting NUMBER (8, 2);
besopdrachtkosten NUMBER (8, 2);
bedrijfvolgnr NUMBER (3);
CURSOR tebestellen
@@ -908,11 +775,9 @@ AS
'');
-- Bepaal opdrachtkorting en opdrachtkosten en sla deze op
-- Met parameter 1 geven we aan dat de berekende waarde automaisch ook word opgeslagen
besopdrachtkorting := bes.calcbesopdrachtkorting(lbord_key, 1);
besopdrachtkosten := bes.calcbesopdrachtkosten(lbord_key, 1);
UPDATE bes_bestelopdr
SET bes_bestelopdr_levkosten = besopdrachtkosten
, bes_bestelopdr_korting = besopdrachtkorting
WHERE bes_bestelopdr_key = lbord_key;
END IF;
-- Op naar de volgende
@@ -988,11 +853,9 @@ AS
'');
-- Bepaal opdrachtkorting en opdrachtkosten en sla deze op
-- Met parameter 1 geven we aan dat de berekende waarde automaisch ook word opgeslagen
besopdrachtkorting := bes.calcbesopdrachtkorting(lbord_key, 1);
besopdrachtkosten := bes.calcbesopdrachtkosten(lbord_key, 1);
UPDATE bes_bestelopdr
SET bes_bestelopdr_levkosten = besopdrachtkosten
, bes_bestelopdr_korting = besopdrachtkorting
WHERE bes_bestelopdr_key = lbord_key;
END IF;
END;