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:
Erik Groener
2013-09-23 10:49:26 +00:00
parent 42f5ac0aff
commit 1b3d4787cd

View File

@@ -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)