VGLD#26906 BES: transportkosten, niet op de bestelopdracht en hoe komt die in FIN terug
svn path=/Database/trunk/; revision=19240
This commit is contained in:
358
BES/BES_PAC.SRC
358
BES/BES_PAC.SRC
@@ -737,202 +737,210 @@ AS
|
||||
|
||||
PROCEDURE makeorders (i_userkey IN NUMBER, bes_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);
|
||||
bedrijfvolgnr NUMBER (3);
|
||||
CURSOR tebestellen
|
||||
IS
|
||||
SELECT bd.prs_bedrijf_key,
|
||||
bd.prs_bedrijf_naam,
|
||||
s.bes_srtdeel_omschrijving,
|
||||
NVL (s.bes_srtdeel_eenheid, '') bes_srtdeel_eenheid,
|
||||
bes.getsrtdeelprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_prijs,
|
||||
s.bes_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,
|
||||
bes.getsrtdeelinkprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_inkprijs,
|
||||
b.bes_bestelling_parentkey
|
||||
FROM prs_bedrijf bd,
|
||||
bes_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.bes_srtdeel_key = bi.bes_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 = bes_key
|
||||
ORDER BY 1, 7;
|
||||
BEGIN
|
||||
-- Maakt bestelopdrachten van bestelaanvragen
|
||||
current_leverancier_key := -1;
|
||||
bedrijfvolgnr := 0;
|
||||
FOR rec1 IN tebestellen
|
||||
LOOP
|
||||
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);
|
||||
bedrijfvolgnr NUMBER (3);
|
||||
CURSOR tebestellen
|
||||
IS
|
||||
SELECT bd.prs_bedrijf_key,
|
||||
bd.prs_bedrijf_naam,
|
||||
s.bes_srtdeel_omschrijving,
|
||||
NVL (s.bes_srtdeel_eenheid, '') bes_srtdeel_eenheid,
|
||||
bes.getsrtdeelprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_prijs,
|
||||
s.bes_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,
|
||||
bes.getsrtdeelinkprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_inkprijs,
|
||||
b.bes_bestelling_parentkey
|
||||
FROM prs_bedrijf bd,
|
||||
bes_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.bes_srtdeel_key = bi.bes_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 = bes_key
|
||||
ORDER BY 1, 7;
|
||||
BEGIN
|
||||
-- Maakt bestelopdrachten van bestelaanvragen
|
||||
current_leverancier_key := -1;
|
||||
bedrijfvolgnr := 0;
|
||||
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
|
||||
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;
|
||||
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_status = 3 -- JGL: stond hij hier nog niet op dan?
|
||||
WHERE bes_bestelopdr_key = lbord_key;
|
||||
fac.trackaction ('BES2NE',
|
||||
lbord_key,
|
||||
i_userkey,
|
||||
NULL,
|
||||
'');
|
||||
-- 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;
|
||||
bedrijfvolgnr := bedrijfvolgnr + 1;
|
||||
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
|
||||
-- Met UWVA#21074 hanteren we voor mutaties toch hetzelfde opdrachtnummer, zodat
|
||||
-- de leverancier de link met het origineel kan vinden.
|
||||
lbord_id := TO_CHAR(COALESCE(rec1.bes_bestelling_parentkey, bes_key))||'/'|| bedrijfvolgnr;
|
||||
--DBMS_OUTPUT.put_line ('Bestelopdracht maken: ' || TO_CHAR (lbord_key));
|
||||
INSERT INTO bes_bestelopdr
|
||||
(bes_bestelopdr_key, bes_bestelopdr_status, prs_bedrijf_key,
|
||||
bes_bestelopdr_datum, mld_adres_key_lev, mld_adres_key_fac,
|
||||
prs_perslid_key,
|
||||
bes_bestelopdr_id
|
||||
)
|
||||
VALUES (lbord_key, 3, rec1.prs_bedrijf_key,
|
||||
SYSDATE, rec1.mld_adres_key_lev, factura_key,
|
||||
i_userkey,
|
||||
lbord_id
|
||||
);
|
||||
aantalopdrachtregels := 0;
|
||||
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_status = 3 -- JGL: stond hij hier nog niet op dan?
|
||||
WHERE bes_bestelopdr_key = lbord_key;
|
||||
fac.trackaction ('BES2NE',
|
||||
lbord_key,
|
||||
i_userkey,
|
||||
NULL,
|
||||
'');
|
||||
-- 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
|
||||
current_leverancier_key := rec1.prs_bedrijf_key;
|
||||
bedrijfvolgnr := bedrijfvolgnr + 1;
|
||||
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
|
||||
-- Met UWVA#21074 hanteren we voor mutaties toch hetzelfde opdrachtnummer, zodat
|
||||
-- de leverancier de link met het origineel kan vinden.
|
||||
lbord_id := TO_CHAR(COALESCE(rec1.bes_bestelling_parentkey, bes_key))||'/'|| bedrijfvolgnr;
|
||||
--DBMS_OUTPUT.put_line ('Bestelopdracht maken: ' || TO_CHAR (lbord_key));
|
||||
INSERT INTO bes_bestelopdr
|
||||
(bes_bestelopdr_key, bes_bestelopdr_status, prs_bedrijf_key,
|
||||
bes_bestelopdr_datum, mld_adres_key_lev, mld_adres_key_fac,
|
||||
prs_perslid_key,
|
||||
bes_bestelopdr_id
|
||||
)
|
||||
VALUES (lbord_key, 3, rec1.prs_bedrijf_key,
|
||||
SYSDATE, rec1.mld_adres_key_lev, factura_key,
|
||||
i_userkey,
|
||||
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.bes_srtdeel_omschrijving,
|
||||
rec1.bes_srtdeel_prijs, NULL, rec1.bes_srtdeel_inkprijs,
|
||||
itemprijsmetkorting
|
||||
);
|
||||
(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.bes_srtdeel_omschrijving,
|
||||
rec1.bes_srtdeel_prijs, NULL, rec1.bes_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
|
||||
END LOOP;
|
||||
IF current_leverancier_key <> -1
|
||||
THEN
|
||||
-- Afronden vorige opdracht
|
||||
UPDATE bes_bestelopdr
|
||||
SET bes_bestelopdr_status = 3
|
||||
WHERE bes_bestelopdr_key = lbord_key;
|
||||
fac.trackaction ('BES2NE',
|
||||
lbord_key,
|
||||
i_userkey,
|
||||
NULL,
|
||||
'');
|
||||
fac.trackaction ('BES2NE',
|
||||
lbord_key,
|
||||
i_userkey,
|
||||
NULL,
|
||||
'');
|
||||
-- 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;
|
||||
UPDATE bes_bestelopdr
|
||||
SET bes_bestelopdr_levkosten = besopdrachtkosten
|
||||
, bes_bestelopdr_korting = besopdrachtkorting
|
||||
WHERE bes_bestelopdr_key = lbord_key;
|
||||
END IF;
|
||||
END;
|
||||
|
||||
PROCEDURE makecontract (bestelopdr_key IN NUMBER)
|
||||
|
||||
Reference in New Issue
Block a user