FCLT#72820 prs_staffel opknappen of uitfaseren
svn path=/Database/trunk/; revision=61845
This commit is contained in:
139
BES/BES_PAC.SRC
139
BES/BES_PAC.SRC
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user