1006 lines
40 KiB
Plaintext
1006 lines
40 KiB
Plaintext
#ifdef BES // 03-11-2000 PF
|
|
/* BES_PAC.SRC
|
|
* $Revision: 72 $
|
|
* $Modtime: 6-09-10 15:13 $
|
|
*/
|
|
|
|
-- STATUS: TESTEN
|
|
-- Wens is om met 5i alle bes-functies in de BES-package te hebben
|
|
CREATE OR REPLACE PACKAGE bes
|
|
AS
|
|
FUNCTION calcartikelkortingsprijs (pins_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)
|
|
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;
|
|
|
|
PROCEDURE setbestellingstatus (pbestellingkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER);
|
|
PROCEDURE setbestelopdrstatus (pbestelopdrkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER);
|
|
PROCEDURE updatebestellingstatus (pbestelling_key IN NUMBER, user_key IN NUMBER);
|
|
PROCEDURE updatebestelopdrstatus (pbestelopdr_key IN NUMBER, user_key IN NUMBER);
|
|
FUNCTION bessprintf (ps IN varchar2, pbes_bestelling_key IN number)
|
|
RETURN varchar2;
|
|
FUNCTION opdrsprintf (ps IN varchar2, pbes_bestelopdr_key IN number)
|
|
RETURN varchar2;
|
|
END bes;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY bes
|
|
AS
|
|
FUNCTION calcartikelkortingsprijs (pins_srtdeel_key IN NUMBER, pbestelaantal IN NUMBER)
|
|
RETURN NUMBER
|
|
AS
|
|
lstaffeltabelkey bes_staffeltabel.bes_staffeltabel_key%TYPE;
|
|
lprijs ins_srtdeel.ins_srtdeel_prijs%TYPE;
|
|
lstaffeltype bes_staffeltabel.fac_typestaffel_key%TYPE;
|
|
lstaffelkorting bes_staffel.bes_staffel_korting%TYPE;
|
|
lkortingsprijs NUMBER;
|
|
BEGIN
|
|
-- Levert de stuksprijs inclusief (eventuele) korting
|
|
---- aantal -> srtdeel/srtgroep.staffel -> stuksprijs incl korting = bes_bestelopdr_item_prijs
|
|
-- merk op: deze staffel is op aantallen (niet op prijs)
|
|
-- Check of er een staffel geldt voor dit artikel
|
|
-- Als het een groepstaffel is, tel dan de overige artikelen in deze bestelopdracht met dezelfde staffel en bepaal het toepasselijke interval
|
|
-- Als het geen groepstaffel is, bepaal dan het toepasselijke interval
|
|
|
|
BEGIN
|
|
SELECT sd.bes_staffeltabel_key,
|
|
sd.ins_srtdeel_prijs,
|
|
st.fac_typestaffel_key
|
|
INTO lstaffeltabelkey,
|
|
lprijs,
|
|
lstaffeltype
|
|
FROM ins_srtdeel sd,
|
|
bes_staffeltabel st
|
|
WHERE sd.bes_staffeltabel_key = st.bes_staffeltabel_key
|
|
AND sd.ins_srtdeel_key = pins_srtdeel_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
RETURN lprijs;
|
|
END;
|
|
|
|
-- Vindt staffelrecord; zie(!) opmerkingen bij prs_staffel in bes.calcopdrachtkorting.
|
|
BEGIN
|
|
SELECT COALESCE(MIN(bes_staffel_korting), 0)
|
|
INTO lstaffelkorting
|
|
FROM bes_staffel s1
|
|
WHERE s1.bes_staffeltabel_key = lstaffeltabelkey
|
|
AND (s1.bes_staffel_grenswaarde > pbestelaantal OR s1.bes_staffel_grenswaarde IS NULL)
|
|
AND NOT EXISTS
|
|
(SELECT 'X'
|
|
FROM bes_staffel s2
|
|
WHERE s2.bes_staffeltabel_key = lstaffeltabelkey
|
|
AND s2.bes_staffel_grenswaarde < s1.bes_staffel_grenswaarde
|
|
AND (s2.bes_staffel_grenswaarde > pbestelaantal OR s2.bes_staffel_grenswaarde IS NULL));
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
RETURN lprijs;
|
|
END;
|
|
|
|
IF lstaffeltype = 1
|
|
THEN
|
|
lkortingsprijs := (100 - lstaffelkorting)/100 * lprijs;
|
|
END IF;
|
|
|
|
IF lstaffeltype = 2
|
|
THEN
|
|
lkortingsprijs := lprijs - lstaffelkorting / pbestelaantal;
|
|
END IF;
|
|
|
|
IF lstaffeltype = 3
|
|
THEN
|
|
lkortingsprijs := lprijs - lstaffelkorting;
|
|
END IF;
|
|
|
|
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)
|
|
RETURN NUMBER
|
|
AS
|
|
lstaffelgroep bes_staffeltabel.bes_staffeltabel_groep%TYPE;
|
|
lstaffeltabelkey bes_staffeltabel.bes_staffeltabel_key%TYPE;
|
|
lprijs ins_srtdeel.ins_srtdeel_prijs%TYPE;
|
|
lstaffeltype bes_staffeltabel.fac_typestaffel_key%TYPE;
|
|
lstaffelkorting bes_staffel.bes_staffel_korting%TYPE;
|
|
lkortingsprijs NUMBER;
|
|
laantalbesteld NUMBER;
|
|
BEGIN
|
|
-- Levert de stuksprijs inclusief (eventuele) korting
|
|
---- aantal -> srtdeel/srtgroep.staffel -> stuksprijs incl korting = bes_bestelopdr_item_prijs
|
|
-- merk op: deze staffel is op aantallen (niet op prijs)
|
|
-- Check of er een staffel geldt voor dit artikel
|
|
-- Als het een groepstaffel is, tel dan de overige artikelen in deze bestelopdracht met dezelfde staffel en bepaal het toepasselijke interval
|
|
-- Als het geen groepstaffel is, bepaal dan het toepasselijke interval
|
|
|
|
BEGIN
|
|
SELECT st.bes_staffeltabel_groep,
|
|
sd.bes_staffeltabel_key,
|
|
st.fac_typestaffel_key,
|
|
sd.ins_srtdeel_prijs,
|
|
bi.bes_bestelling_item_aantal
|
|
INTO lstaffelgroep,
|
|
lstaffeltabelkey,
|
|
lstaffeltype,
|
|
lprijs,
|
|
laantalbesteld
|
|
FROM ins_srtdeel sd, bes_staffeltabel st, bes_bestelling_item bi
|
|
WHERE sd.bes_staffeltabel_key = st.bes_staffeltabel_key
|
|
AND sd.ins_srtdeel_key = bi.ins_srtdeel_key
|
|
AND bi.bes_bestelling_item_key = pbes_bestelling_item_key;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
BEGIN
|
|
SELECT sd.ins_srtdeel_prijs
|
|
INTO lprijs
|
|
FROM ins_srtdeel sd, bes_bestelling_item bi
|
|
WHERE sd.ins_srtdeel_key = bi.ins_srtdeel_key
|
|
AND bi.bes_bestelling_item_key = pbes_bestelling_item_key;
|
|
RETURN lprijs;
|
|
END;
|
|
END;
|
|
|
|
IF lstaffelgroep = 1
|
|
THEN
|
|
SELECT SUM (bi.bes_bestelling_item_aantal)
|
|
INTO laantalbesteld
|
|
FROM bes_bestelling_item bi, ins_srtdeel sd
|
|
WHERE sd.ins_srtdeel_key = bi.ins_srtdeel_key
|
|
AND sd.bes_staffeltabel_key = lstaffeltabelkey
|
|
AND bi.bes_bestelling_item_key = pbes_bestelling_item_key;
|
|
END IF;
|
|
|
|
-- Vindt staffelrecord; zie(!) opmerkingen bij prs_staffel in bes.calcopdrachtkorting.
|
|
BEGIN
|
|
SELECT COALESCE(MIN(bes_staffel_korting), 0)
|
|
INTO lstaffelkorting
|
|
FROM bes_staffel s1
|
|
WHERE s1.bes_staffeltabel_key = lstaffeltabelkey
|
|
AND (s1.bes_staffel_grenswaarde > laantalbesteld OR s1.bes_staffel_grenswaarde IS NULL)
|
|
AND NOT EXISTS
|
|
(SELECT 'X'
|
|
FROM bes_staffel s2
|
|
WHERE s2.bes_staffeltabel_key = lstaffeltabelkey
|
|
AND s2.bes_staffel_grenswaarde < s1.bes_staffel_grenswaarde
|
|
AND (s2.bes_staffel_grenswaarde > laantalbesteld OR s2.bes_staffel_grenswaarde IS NULL));
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
RETURN lprijs;
|
|
END;
|
|
|
|
IF lstaffeltype = 1
|
|
THEN
|
|
lkortingsprijs := (100 - lstaffelkorting)/100 * lprijs;
|
|
END IF;
|
|
|
|
IF lstaffeltype = 2
|
|
THEN
|
|
lkortingsprijs := lprijs - lstaffelkorting / laantalbesteld;
|
|
END IF;
|
|
|
|
IF lstaffeltype = 3
|
|
THEN
|
|
lkortingsprijs := lprijs - lstaffelkorting;
|
|
END IF;
|
|
|
|
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
|
|
AS
|
|
lbrutoopdrachtbedrag NUMBER;
|
|
lopdrachtkorting bes_bestelopdr.bes_bestelopdr_korting%TYPE;
|
|
lfrancogrens prs_bedrijf.prs_bedrijf_bes_limiet%TYPE;
|
|
lverzendkosten prs_bedrijf.prs_bedrijf_bes_kosten%TYPE;
|
|
BEGIN
|
|
-- berekent de bijkomende kosten van een bestelopdracht, meestal de verzendkosten
|
|
-- die alleen worden berekend onder een bepaald opdrachtbedrag (leveranciersafhankelijk, inclusief regelkortingen en opdrachtkorting)
|
|
---- som van de bes_bestelopdr_item_prijs > prs_bedrijf_bes_limiet -> prs_bedrijf_bes_kosten = bes_bestelopdr_levkosten
|
|
-- als iets niet wordt gevonden, wordt 0 geleverd (geen kosten); je zou error kunnen overwegen.
|
|
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;
|
|
|
|
SELECT COALESCE(bes_bestelopdr_korting, 0)
|
|
INTO lopdrachtkorting
|
|
FROM bes_bestelopdr
|
|
WHERE bes_bestelopdr_key = pbes_bestelopdr_key;
|
|
|
|
SELECT COALESCE(prs_bedrijf_bes_limiet, 0), COALESCE(prs_bedrijf_bes_kosten, 0)
|
|
INTO lfrancogrens, lverzendkosten
|
|
FROM prs_bedrijf
|
|
WHERE prs_bedrijf_key = (SELECT prs_bedrijf_key
|
|
FROM bes_bestelopdr
|
|
WHERE bes_bestelopdr_key = pbes_bestelopdr_key);
|
|
|
|
IF lbrutoopdrachtbedrag - lopdrachtkorting >= lfrancogrens
|
|
THEN
|
|
lverzendkosten := 0;
|
|
END IF;
|
|
|
|
IF pautoupdate > 0
|
|
THEN
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_levkosten = lverzendkosten
|
|
WHERE bes_bestelopdr_key = pbes_bestelopdr_key;
|
|
END IF;
|
|
|
|
RETURN lverzendkosten;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
RETURN 0;
|
|
END;
|
|
|
|
-- Geef bestellingkey, gewenste status en userkey, en de status wortdt
|
|
-- gezet, waarbij zonodig (indien verandering) een trackrecord wordt gemaakt
|
|
-- Als de status niet wijzigt, wordt ook geen trackrecord gemaakt
|
|
-- ZIE schema StateDiagramBestellingen.vsd
|
|
PROCEDURE setbestellingstatus (pbestellingkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER)
|
|
AS
|
|
currentstatus bes_bestelling.bes_bestelling_status%TYPE;
|
|
newstatus bes_bestelling.bes_bestelling_status%TYPE;
|
|
eventcode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
BEGIN
|
|
SELECT COALESCE (bes_bestelling_status, -1)
|
|
INTO currentstatus
|
|
FROM bes_bestelling
|
|
WHERE bes_bestelling_key = pbestellingkey;
|
|
|
|
CASE pstatus
|
|
WHEN 1 -- Afgewezen
|
|
THEN
|
|
IF currentstatus <> 1
|
|
THEN
|
|
eventcode := 'BESREJ';
|
|
END IF;
|
|
WHEN 2 -- Ingevoerd. Dit is de default, dus leeg kan niet; we rekenen 2>2 ook goed
|
|
THEN
|
|
eventcode := 'BESAP2';
|
|
WHEN 3 -- Ingezien (voor de eerste keer, voordat acceptatie)
|
|
THEN
|
|
IF currentstatus <> 3
|
|
THEN
|
|
eventcode := 'BESFIT';
|
|
END IF;
|
|
WHEN 4 -- Geaccepteerd (ongezien of gezien)
|
|
THEN
|
|
IF currentstatus <> 4
|
|
THEN
|
|
eventcode := 'BESACP';
|
|
END IF;
|
|
WHEN 5 -- Afgemeld
|
|
THEN
|
|
IF currentstatus <> 5
|
|
THEN
|
|
eventcode := 'BESBES';
|
|
END IF;
|
|
WHEN 6 -- Verwerkt
|
|
THEN
|
|
IF currentstatus <> 6
|
|
THEN
|
|
eventcode := 'BESOTV';
|
|
END IF;
|
|
WHEN 7 -- Uitgegeven
|
|
THEN
|
|
IF currentstatus <> 7
|
|
THEN
|
|
eventcode := 'BESVER';
|
|
END IF;
|
|
ELSE
|
|
-- Invalid statuschange or no change
|
|
eventcode := NULL;
|
|
END CASE;
|
|
|
|
IF eventcode IS NOT NULL
|
|
THEN
|
|
UPDATE bes_bestelling
|
|
SET bes_bestelling_status = pstatus
|
|
WHERE bes_bestelling_key = pbestellingkey;
|
|
|
|
-- We know that trackaction doesnt do tracking if eventcode is null
|
|
fac.trackaction (eventcode, pbestellingkey, puserkey, NULL, NULL);
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE setbestelopdrstatus (pbestelopdrkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER)
|
|
AS
|
|
currentstatus bes_bestelling.bes_bestelling_status%TYPE;
|
|
newstatus bes_bestelling.bes_bestelling_status%TYPE;
|
|
eventcode fac_srtnotificatie.fac_srtnotificatie_code%TYPE;
|
|
BEGIN
|
|
SELECT COALESCE (bes_bestelopdr_status, -1)
|
|
INTO currentstatus
|
|
FROM bes_bestelopdr
|
|
WHERE bes_bestelopdr_key = pbestelopdrkey;
|
|
|
|
CASE pstatus
|
|
WHEN 1 -- Afgewezen
|
|
THEN
|
|
IF currentstatus <> 1
|
|
THEN
|
|
eventcode := 'BES2RE'; -- afgewezen
|
|
END IF;
|
|
WHEN 2
|
|
THEN
|
|
eventcode := 'BES2NE'; -- nieuw
|
|
WHEN 3
|
|
THEN
|
|
IF currentstatus <> 3
|
|
THEN
|
|
eventcode := NULL; -- in behandeling
|
|
END IF;
|
|
WHEN 4 -- Geaccepteerd (ongezien of gezien)
|
|
THEN
|
|
IF currentstatus <> 4
|
|
THEN
|
|
eventcode := NULL; --in bestelling
|
|
END IF;
|
|
WHEN 5 -- Afgemeld
|
|
THEN
|
|
IF currentstatus <> 5
|
|
THEN
|
|
eventcode := 'BES2BE'; -- bevesting
|
|
END IF;
|
|
WHEN 6 -- Verwerkt
|
|
THEN
|
|
IF currentstatus <> 6
|
|
THEN
|
|
eventcode := 'BES2AF'; -- geleverd
|
|
END IF;
|
|
WHEN 7 -- Uitgegeven
|
|
THEN
|
|
IF currentstatus <> 7
|
|
THEN
|
|
eventcode := 'BES2VE'; -- verwerkt
|
|
END IF;
|
|
ELSE
|
|
-- Invalid statuschange or no change
|
|
eventcode := NULL;
|
|
END CASE;
|
|
|
|
IF eventcode IS NOT NULL
|
|
THEN
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_status = pstatus
|
|
WHERE bes_bestelopdr_key = pbestelopdrkey;
|
|
|
|
-- We know that trackaction doesnt do tracking if eventcode is null
|
|
fac.trackaction (eventcode, pbestelopdrkey, puserkey, NULL, NULL);
|
|
END IF;
|
|
END;
|
|
|
|
-- Werkt zonodig de status bij (als alles geleverd is met name)
|
|
-- ATTENTIE: onderstaande checks kunnen niet in de trigger vanwege mutating-errors!
|
|
-- Deze moeten dus op gezette tijden worden aangeroepen, na aanpassing van een
|
|
-- bestelaanvraag of bestelopdracht.
|
|
PROCEDURE updatebestellingstatus (pbestelling_key IN NUMBER, user_key IN NUMBER)
|
|
AS
|
|
regel_cnt NUMBER;
|
|
regel_cnt_geleverd NUMBER;
|
|
regel_cnt_verwerkt NUMBER;
|
|
BEGIN
|
|
SELECT COUNT ( * )
|
|
INTO regel_cnt
|
|
FROM bes_bestelling_item bi
|
|
WHERE bes_bestelling_key = pbestelling_key;
|
|
|
|
SELECT COUNT ( * )
|
|
INTO regel_cnt_geleverd
|
|
FROM bes_bestelling_item bi
|
|
WHERE bi.bes_bestelling_item_status = 6 AND bes_bestelling_key = pbestelling_key;
|
|
|
|
SELECT COUNT ( * )
|
|
INTO regel_cnt_verwerkt
|
|
FROM bes_bestelling_item bi
|
|
WHERE bi.bes_bestelling_item_status = 7 AND bes_bestelling_key = pbestelling_key;
|
|
|
|
IF regel_cnt_geleverd = regel_cnt
|
|
THEN
|
|
-- alles is geleverd, dus bestelling is geleverd
|
|
bes.setbestellingstatus (pbestelling_key, 6, user_key);
|
|
END IF;
|
|
IF regel_cnt_verwerkt = regel_cnt
|
|
THEN
|
|
-- alles is verwerkt, dus bestelling is verwerkt
|
|
bes.setbestellingstatus (pbestelling_key, 7, user_key);
|
|
END IF;
|
|
END;
|
|
|
|
PROCEDURE updatebestelopdrstatus (pbestelopdr_key IN NUMBER, user_key IN NUMBER)
|
|
AS
|
|
regel_cnt NUMBER;
|
|
regel_cnt_geleverd NUMBER;
|
|
regel_cnt_verwerkt NUMBER;
|
|
BEGIN
|
|
SELECT COUNT ( * )
|
|
INTO regel_cnt
|
|
FROM bes_bestelopdr_item bi
|
|
WHERE bes_bestelopdr_key = pbestelopdr_key;
|
|
|
|
SELECT COUNT ( * )
|
|
INTO regel_cnt_geleverd
|
|
FROM bes_bestelopdr_item bi
|
|
WHERE bi.bes_bestelopdr_item_status = 6 AND bes_bestelopdr_key = pbestelopdr_key;
|
|
|
|
SELECT COUNT ( * )
|
|
INTO regel_cnt_verwerkt
|
|
FROM bes_bestelopdr_item bi
|
|
WHERE bi.bes_bestelopdr_item_status = 7 AND bes_bestelopdr_key = pbestelopdr_key;
|
|
|
|
IF regel_cnt_geleverd = regel_cnt
|
|
THEN
|
|
-- alles is geleverd, dus opdracht is geleverd
|
|
bes.setbestelopdrstatus (pbestelopdr_key, 6, user_key);
|
|
END IF;
|
|
|
|
IF regel_cnt_verwerkt = regel_cnt
|
|
THEN
|
|
-- alles is verwerkt, dus opdracht is verwerkt
|
|
bes.setbestelopdrstatus (pbestelopdr_key, 7, user_key);
|
|
END IF;
|
|
END;
|
|
|
|
FUNCTION bessprintf (ps IN varchar2, pbes_bestelling_key IN number)
|
|
RETURN varchar2
|
|
IS
|
|
s varchar2 (2048 CHAR);
|
|
lbes_bestelling_datum bes_bestelling.bes_bestelling_datum%TYPE;
|
|
BEGIN
|
|
s := ps;
|
|
-- We support substitution of placeholders in the messages
|
|
-- ##KEY## = bes_bestelling_key
|
|
-- ##DATUM## = bes_bestelling_datum
|
|
IF INSTR2 (s, '#') > 0
|
|
THEN
|
|
SELECT bes_bestelling_datum
|
|
INTO lbes_bestelling_datum
|
|
FROM bes_bestelling
|
|
WHERE bes_bestelling_key = pbes_bestelling_key;
|
|
s :=
|
|
REPLACE (REPLACE (s,
|
|
'##KEY##',
|
|
NUMBER_TO_CHAR (pbes_bestelling_key)
|
|
),
|
|
'##DATUM##',
|
|
DATE_TO_CHAR (lbes_bestelling_datum, 'DD-MM-YY HH24:MI')
|
|
);
|
|
END IF;
|
|
|
|
RETURN s;
|
|
END;
|
|
FUNCTION opdrsprintf (ps IN VARCHAR2, pbes_bestelopdr_key IN NUMBER)
|
|
RETURN VARCHAR2
|
|
IS
|
|
s VARCHAR2 (2048 CHAR);
|
|
lopdrid bes_bestelopdr.bes_bestelopdr_id%TYPE;
|
|
BEGIN
|
|
s := ps;
|
|
|
|
-- We support substitution of placeholders in the messages
|
|
-- ##KEY## = bes_bestelopdr_id
|
|
IF INSTR (s, '#') > 0
|
|
THEN
|
|
SELECT bes_bestelopdr_id
|
|
INTO lopdrid
|
|
FROM bes_bestelopdr
|
|
WHERE bes_bestelopdr_key = pbes_bestelopdr_key;
|
|
|
|
s := REPLACE (s, '##KEY##', lopdrid);
|
|
END IF;
|
|
|
|
RETURN s;
|
|
END;
|
|
|
|
END bes;
|
|
/
|
|
|
|
CREATE OR REPLACE FUNCTION bes_bestelopdr_items (besopdrkey IN NUMBER)
|
|
RETURN VARCHAR2
|
|
IS
|
|
lret VARCHAR2 (512);
|
|
lfirst NUMBER;
|
|
llast NUMBER;
|
|
|
|
CURSOR opdritems
|
|
IS
|
|
SELECT TO_CHAR (boi.bes_bestelopdr_item_aantal)
|
|
|| 'x '
|
|
|| s.ins_srtdeel_omschrijving
|
|
|| ' ('
|
|
|| s.ins_srtdeel_eenheid
|
|
|| ') ' besitemdsc
|
|
FROM bes_bestelopdr_item boi, bes_bestelling_item bi, ins_srtdeel s
|
|
WHERE boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
|
|
AND bi.ins_srtdeel_key = s.ins_srtdeel_key
|
|
AND boi.bes_bestelopdr_key = besopdrkey;
|
|
BEGIN
|
|
lret := NULL;
|
|
lfirst := 0;
|
|
llast := 0;
|
|
|
|
FOR besitem_rec IN opdritems
|
|
LOOP
|
|
IF lfirst = 0
|
|
THEN
|
|
BEGIN
|
|
lret := besitem_rec.besitemdsc;
|
|
lfirst := 1;
|
|
END;
|
|
ELSE
|
|
IF llast = 0
|
|
THEN
|
|
IF LENGTH (lret) + LENGTH (besitem_rec.besitemdsc) < (512 - 5)
|
|
THEN
|
|
lret := lret || CHR (10) || besitem_rec.besitemdsc;
|
|
ELSE
|
|
lret := lret || CHR (10) || '...';
|
|
llast := 1;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END LOOP;
|
|
|
|
RETURN lret;
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE BES_Check_or_Create_Item (
|
|
p_ins_discipline_key IN NUMBER,
|
|
p_ins_srtgroep_omschrijving IN VARCHAR2, -- VARCHAR2(60)
|
|
p_ins_srtdeel_omschrijving IN VARCHAR2, -- VARCHAR2 (60)
|
|
p_ins_srtdeel_prijs IN NUMBER, -- NUMBER (8,2)
|
|
p_ins_srtdeel_btw IN NUMBER, -- NUMBER (3)
|
|
p_ins_srtdeel_eenheid IN VARCHAR2, -- VARCHAR2 (30)
|
|
p_ins_srtdeel_nr IN VARCHAR2, -- VARCHAR2 (32)
|
|
p_prs_bedrijf_key IN NUMBER,
|
|
p_ins_srtdeel_vervaldatum IN DATE,
|
|
p_ins_srtdeel_image IN VARCHAR2, -- VARCHAR2 (255)
|
|
p_ins_srtdeel_veelvoud IN NUMBER -- NUMBER (6)
|
|
) IS
|
|
v_ins_srtgroep_key NUMBER(10);
|
|
v_ins_srtdeel_key NUMBER(10);
|
|
v_prs_bedrijf_key NUMBER(10);
|
|
|
|
BEGIN
|
|
BEGIN
|
|
SELECT ins_srtgroep_key
|
|
INTO v_ins_srtgroep_key
|
|
FROM ins_srtgroep
|
|
WHERE ins_discipline_key = p_ins_discipline_key
|
|
AND ins_srtgroep_module = 'BES'
|
|
AND ins_srtgroep_upper = upper(p_ins_srtgroep_omschrijving);
|
|
EXCEPTION WHEN NO_DATA_FOUND THEN
|
|
v_ins_srtgroep_key := -1;
|
|
END;
|
|
IF v_ins_srtgroep_key = -1 THEN
|
|
INSERT INTO ins_srtgroep
|
|
(ins_discipline_key, ins_srtgroep_omschrijving, ins_srtgroep_module)
|
|
VALUES
|
|
(p_ins_discipline_key, p_ins_srtgroep_omschrijving, 'BES');
|
|
|
|
SELECT ins_srtgroep_key
|
|
INTO v_ins_srtgroep_key
|
|
FROM ins_srtgroep
|
|
WHERE ins_discipline_key = p_ins_discipline_key
|
|
AND ins_srtgroep_module = 'BES'
|
|
AND ins_srtgroep_upper = upper(p_ins_srtgroep_omschrijving);
|
|
END IF;
|
|
|
|
IF p_prs_bedrijf_key = -1 THEN
|
|
BEGIN
|
|
SELECT bes_disc_params_punch_bedr_key
|
|
INTO v_prs_bedrijf_key
|
|
FROM bes_disc_params
|
|
WHERE bes_ins_discipline_key = p_ins_discipline_key;
|
|
EXCEPTION WHEN NO_DATA_FOUND THEN
|
|
v_prs_bedrijf_key := -1;
|
|
END;
|
|
ELSE
|
|
v_prs_bedrijf_key := p_prs_bedrijf_key;
|
|
END IF;
|
|
BEGIN
|
|
SELECT INS_SRTDEEL_KEY
|
|
INTO v_INS_SRTDEEL_KEY
|
|
FROM ins_srtdeel sd
|
|
WHERE ins_srtgroep_key = v_ins_srtgroep_key
|
|
AND ins_srtdeel_nr = p_ins_srtdeel_nr
|
|
AND ins_srtdeel_omschrijving = p_ins_srtdeel_omschrijving
|
|
AND ins_srtdeel_prijs = p_ins_srtdeel_prijs
|
|
AND ins_srtdeel_btw = p_ins_srtdeel_btw
|
|
AND ins_srtdeel_eenheid = p_ins_srtdeel_eenheid
|
|
AND prs_bedrijf_key = v_prs_bedrijf_key
|
|
AND ins_srtdeel_veelvoud = p_ins_srtdeel_veelvoud
|
|
AND rownum = 1;
|
|
EXCEPTION WHEN NO_DATA_FOUND THEN
|
|
v_ins_srtdeel_key := -1;
|
|
END;
|
|
commit;
|
|
IF v_ins_srtdeel_key = -1 THEN
|
|
SELECT ins_s_ins_srtinst_keys.nextval INTO v_ins_srtdeel_key FROM DUAL;
|
|
|
|
INSERT INTO ins_srtdeel
|
|
( ins_srtdeel_key
|
|
, ins_srtdeel_code
|
|
, ins_srtgroep_key
|
|
, ins_srtdeel_omschrijving
|
|
, ins_srtdeel_prijs
|
|
, ins_srtdeel_btw
|
|
, ins_srtdeel_eenheid
|
|
, ins_srtdeel_nr
|
|
, prs_bedrijf_key
|
|
, ins_srtdeel_vervaldatum
|
|
, ins_srtdeel_image
|
|
, ins_srtdeel_veelvoud
|
|
, ins_srtdeel_verwijder
|
|
, ins_srtdeel_module )
|
|
VALUES
|
|
( v_ins_srtdeel_key
|
|
, v_ins_srtdeel_key
|
|
, v_ins_srtgroep_key
|
|
, p_ins_srtdeel_omschrijving
|
|
, p_ins_srtdeel_prijs
|
|
, p_ins_srtdeel_btw
|
|
, p_ins_srtdeel_eenheid
|
|
, p_ins_srtdeel_nr
|
|
, v_prs_bedrijf_key
|
|
, p_ins_srtdeel_vervaldatum
|
|
, p_ins_srtdeel_image
|
|
, p_ins_srtdeel_veelvoud
|
|
, sysdate
|
|
, 'BES');
|
|
END IF;
|
|
|
|
END BES_Check_or_Create_Item;
|
|
/
|
|
|
|
|
|
/* Formatted on 16-6-2009 14:10:15 (QP5 v5.115.810.9015) */
|
|
CREATE OR REPLACE PROCEDURE bes_makeorders (i_userkey IN NUMBER, rfo_key IN NUMBER)
|
|
AS
|
|
lfound BOOLEAN;
|
|
niveau NUMBER (10);
|
|
afd_key NUMBER (10);
|
|
afd_key_temp NUMBER (10);
|
|
link_key NUMBER (10);
|
|
lbord_key NUMBER (10);
|
|
lbord_id bes_bestelopdr.bes_bestelopdr_id%TYPE;
|
|
i_cnt_sum NUMBER (5);
|
|
i_price_sum NUMBER (8, 2);
|
|
current_leverancier_key NUMBER (10);
|
|
aantalopdrachtregels NUMBER;
|
|
factura_key mld_adres.mld_adres_key%TYPE;
|
|
bedrijf_email prs_bedrijf.prs_bedrijf_email%TYPE;
|
|
bedrijf_telefoon2 prs_bedrijf.prs_bedrijf_telefoon2%TYPE;
|
|
itemprijsmetkorting NUMBER (12, 6);
|
|
besopdrachtkorting NUMBER (8, 2);
|
|
besopdrachtkosten NUMBER (8, 2);
|
|
|
|
CURSOR tebestellen
|
|
IS
|
|
SELECT bd.prs_bedrijf_key, bd.prs_bedrijf_naam, s.ins_srtdeel_omschrijving,
|
|
NVL (s.ins_srtdeel_eenheid, '') ins_srtdeel_eenheid, NVL (s.ins_srtdeel_prijs, 0) ins_srtdeel_prijs,
|
|
s.ins_srtdeel_key, bi.bes_bestelling_item_key, bi.bes_bestelling_item_aantal,
|
|
NVL (b.mld_adres_key_lev, abd.mld_adres_key_lev) mld_adres_key_lev, p.prs_afdeling_key,
|
|
abd.mld_adres_key_fac, NVL (s.ins_srtdeel_inkprijs, 0) ins_srtdeel_inkprijs
|
|
FROM prs_bedrijf bd,
|
|
ins_srtdeel s,
|
|
bes_bestelling_item bi,
|
|
bes_bestelling b,
|
|
prs_perslid p,
|
|
prs_v_afdeling d,
|
|
prs_bedrijf abd
|
|
WHERE abd.prs_bedrijf_key = d.prs_bedrijf_key
|
|
AND p.prs_afdeling_key = d.prs_afdeling_key
|
|
AND b.prs_perslid_key = p.prs_perslid_key
|
|
AND bi.bes_bestelling_key = b.bes_bestelling_key
|
|
AND s.ins_srtdeel_key = bi.ins_srtdeel_key
|
|
AND s.prs_bedrijf_key = bd.prs_bedrijf_key
|
|
AND b.bes_bestelling_status IN (1, 2, 3, 4) -- om dubbelen te vermijden
|
|
AND b.bes_bestelling_key = rfo_key
|
|
ORDER BY 1, 7;
|
|
BEGIN
|
|
-- Maakt bestelopdrachten van bestelaanvragen
|
|
current_leverancier_key := -1;
|
|
|
|
FOR rec1 IN tebestellen
|
|
LOOP
|
|
--DBMS_OUTPUT.put_line ('Een regel');
|
|
|
|
-- Moeten we van leverancier wisselen?
|
|
IF current_leverancier_key <> rec1.prs_bedrijf_key
|
|
THEN
|
|
BEGIN
|
|
--DBMS_OUTPUT.put_line ('Een nieuwe leverancier:' || TO_CHAR (rec1.prs_bedrijf_key));
|
|
-- Bepaal het factuuradres. Deze kan binnen 1 aanvraag verschillen als er meerdere leveranciers betrokken zijn.
|
|
-- Dit is het factuuradres van de leverancier indien gedefinieerd,
|
|
-- en zo niet, dan het factuuradres van de afdeling (daarbij zover omhoog zoeken tot gevonden)
|
|
-- van de aanvrager. Is die er niet, dan is het het factuuradres van het bedrijf van de aanvrager.
|
|
-- Er zou geen factuuraders gevonden kunnen worden, dan blijft die gewoon leeg.
|
|
-- Van de aanvrager:
|
|
factura_key := rec1.mld_adres_key_fac;
|
|
|
|
-- Van de leverancier:
|
|
SELECT mld_adres_key_fac, prs_bedrijf_email, prs_bedrijf_telefoon2
|
|
INTO factura_key, bedrijf_email, bedrijf_telefoon2
|
|
FROM prs_bedrijf
|
|
WHERE prs_bedrijf_key = rec1.prs_bedrijf_key AND mld_adres_key_fac IS NOT NULL;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
-- Van de afdeling:
|
|
SELECT a.niveau, a.prs_afdeling_key
|
|
INTO niveau, afd_key
|
|
FROM prs_v_aanwezigafdeling a
|
|
WHERE a.prs_afdeling_key = rec1.prs_afdeling_key;
|
|
|
|
lfound := FALSE;
|
|
|
|
WHILE (niveau >= 1 AND NOT lfound)
|
|
LOOP
|
|
-- zoek kenmerk
|
|
BEGIN
|
|
SELECT prs_kenmerklink_waarde
|
|
INTO link_key
|
|
FROM prs_kenmerklink kl, prs_kenmerk k
|
|
WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key
|
|
AND kl.prs_link_key = afd_key
|
|
AND k.prs_kenmerk_key = 6
|
|
AND kl.prs_kenmerklink_waarde IS NOT NULL;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
link_key := NULL;
|
|
END;
|
|
|
|
IF link_key IS NULL
|
|
THEN -- -- kenmerk factuuradres niet aanwezig, zoek parent afdeling
|
|
BEGIN
|
|
SELECT a.prs_afdeling_parentkey
|
|
INTO afd_key_temp
|
|
FROM prs_v_aanwezigafdeling a
|
|
WHERE a.prs_afdeling_key = afd_key;
|
|
|
|
IF niveau != 1
|
|
THEN
|
|
afd_key := afd_key_temp; -- als niveau=1 en geen kenmerk gevonden dan nog afd_key van niveau=1 nodig
|
|
END IF;
|
|
|
|
niveau := niveau - 1;
|
|
END;
|
|
ELSE
|
|
lfound := TRUE; -- kenmerk aanwezig
|
|
END IF;
|
|
END LOOP;
|
|
|
|
IF link_key IS NOT NULL
|
|
THEN
|
|
factura_key := link_key;
|
|
END IF;
|
|
|
|
END;
|
|
-- factuuradres is bepaald, maak nu de opdracht aan
|
|
IF current_leverancier_key <> -1
|
|
THEN
|
|
-- Afronden vorige opdracht
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_item_cnt = aantalopdrachtregels,
|
|
bes_bestelopdr_status = 3
|
|
WHERE bes_bestelopdr_key = lbord_key;
|
|
-- 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);
|
|
END IF;
|
|
|
|
-- Op naar de volgende
|
|
current_leverancier_key := rec1.prs_bedrijf_key;
|
|
|
|
SELECT bes_s_bes_bestelopdr_key.NEXTVAL
|
|
INTO lbord_key
|
|
FROM DUAL;
|
|
|
|
-- UWVA#13420, als zichtbaar opdrachtnummer wordt het aanvraagnummer gebruikt
|
|
-- Indien dit ooit anders moet, bv bundeling, dan moet alleen dit anders:
|
|
lbord_id := TO_CHAR(rfo_key)||'/1';
|
|
|
|
|
|
--DBMS_OUTPUT.put_line ('Bestelopdracht maken: ' || TO_CHAR (lbord_key));
|
|
INSERT INTO bes_bestelopdr
|
|
(bes_bestelopdr_key, bes_bestelopdr_module, bes_bestelopdr_status, prs_bedrijf_key,
|
|
bes_bestelopdr_datum, mld_adres_key_lev, mld_adres_key_fac,
|
|
prs_perslid_key,
|
|
bes_bestelopdr_item_cnt, bes_bestelopdr_item_cnt_lev, bes_bestelopdr_id
|
|
)
|
|
VALUES (lbord_key, 'BES', 3, rec1.prs_bedrijf_key,
|
|
SYSDATE, rec1.mld_adres_key_lev, factura_key,
|
|
i_userkey,
|
|
0, 0, lbord_id
|
|
);
|
|
|
|
aantalopdrachtregels := 0;
|
|
|
|
END IF;
|
|
itemprijsmetkorting := bes.calcbesartikelkortingsprijs(rec1.bes_bestelling_item_key);
|
|
|
|
--DBMS_OUTPUT.put_line ('Bestelregel maken: ' || TO_CHAR (aantalopdrachtregels + 1));
|
|
INSERT INTO bes_bestelopdr_item
|
|
(bes_bestelopdr_item_key, bes_bestelopdr_item_posnr, bes_bestelopdr_key,
|
|
bes_bestelopdr_item_aantal, bes_bestelopdr_item_aantalontv, bes_bestelopdr_item_omschrijv,
|
|
bes_bestelopdr_item_brutoprijs, bes_bestelopdr_item_ontvangen, bes_bestelopdr_item_inkprijs,
|
|
bes_bestelopdr_item_prijs
|
|
)
|
|
VALUES (bes_s_bes_bestelopdr_item_key.NEXTVAL, aantalopdrachtregels + 1, lbord_key,
|
|
rec1.bes_bestelling_item_aantal, NULL, rec1.ins_srtdeel_omschrijving,
|
|
rec1.ins_srtdeel_prijs, NULL, rec1.ins_srtdeel_inkprijs,
|
|
itemprijsmetkorting
|
|
);
|
|
|
|
aantalopdrachtregels := aantalopdrachtregels + 1;
|
|
|
|
UPDATE bes_bestelling_item
|
|
SET bes_bestelopdr_item_key = bes_s_bes_bestelopdr_item_key.CURRVAL
|
|
WHERE bes_bestelling_item_key = rec1.bes_bestelling_item_key;
|
|
END LOOP;
|
|
IF current_leverancier_key <> -1
|
|
THEN
|
|
-- Afronden vorige opdracht
|
|
UPDATE bes_bestelopdr
|
|
SET bes_bestelopdr_item_cnt = aantalopdrachtregels,
|
|
bes_bestelopdr_status = 3
|
|
WHERE bes_bestelopdr_key = lbord_key;
|
|
-- 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);
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
REGISTERRUN('$Workfile: BES_PAC.SRC $','$Revision: 72 $')
|
|
|
|
#endif // BES
|