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) PROCEDURE makeorders (i_userkey IN NUMBER, bes_key IN NUMBER)
AS AS
lfound BOOLEAN; lfound BOOLEAN;
niveau NUMBER (10); niveau NUMBER (10);
afd_key NUMBER (10); afd_key NUMBER (10);
afd_key_temp NUMBER (10); afd_key_temp NUMBER (10);
link_key NUMBER (10); link_key NUMBER (10);
lbord_key NUMBER (10); lbord_key NUMBER (10);
lbord_id bes_bestelopdr.bes_bestelopdr_id%TYPE; lbord_id bes_bestelopdr.bes_bestelopdr_id%TYPE;
i_cnt_sum NUMBER (5); i_cnt_sum NUMBER (5);
i_price_sum NUMBER (8, 2); i_price_sum NUMBER (8, 2);
current_leverancier_key NUMBER (10); current_leverancier_key NUMBER (10);
aantalopdrachtregels NUMBER; aantalopdrachtregels NUMBER;
factura_key mld_adres.mld_adres_key%TYPE; factura_key mld_adres.mld_adres_key%TYPE;
bedrijf_email prs_bedrijf.prs_bedrijf_email%TYPE; bedrijf_email prs_bedrijf.prs_bedrijf_email%TYPE;
bedrijf_telefoon2 prs_bedrijf.prs_bedrijf_telefoon2%TYPE; bedrijf_telefoon2 prs_bedrijf.prs_bedrijf_telefoon2%TYPE;
itemprijsmetkorting NUMBER (12, 6); itemprijsmetkorting NUMBER (12, 6);
besopdrachtkorting NUMBER (8, 2); besopdrachtkorting NUMBER (8, 2);
besopdrachtkosten NUMBER (8, 2); besopdrachtkosten NUMBER (8, 2);
bedrijfvolgnr NUMBER (3); bedrijfvolgnr NUMBER (3);
CURSOR tebestellen CURSOR tebestellen
IS IS
SELECT bd.prs_bedrijf_key, SELECT bd.prs_bedrijf_key,
bd.prs_bedrijf_naam, bd.prs_bedrijf_naam,
s.bes_srtdeel_omschrijving, s.bes_srtdeel_omschrijving,
NVL (s.bes_srtdeel_eenheid, '') bes_srtdeel_eenheid, NVL (s.bes_srtdeel_eenheid, '') bes_srtdeel_eenheid,
bes.getsrtdeelprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_prijs, bes.getsrtdeelprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_prijs,
s.bes_srtdeel_key, s.bes_srtdeel_key,
bi.bes_bestelling_item_key, bi.bes_bestelling_item_key,
bi.bes_bestelling_item_aantal, bi.bes_bestelling_item_aantal,
NVL (b.mld_adres_key_lev, abd.mld_adres_key_lev) mld_adres_key_lev, NVL (b.mld_adres_key_lev, abd.mld_adres_key_lev) mld_adres_key_lev,
p.prs_afdeling_key, p.prs_afdeling_key,
abd.mld_adres_key_fac, abd.mld_adres_key_fac,
bes.getsrtdeelinkprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_inkprijs, bes.getsrtdeelinkprijs (s.bes_srtdeel_key, NULL) bes_srtdeel_inkprijs,
b.bes_bestelling_parentkey b.bes_bestelling_parentkey
FROM prs_bedrijf bd, FROM prs_bedrijf bd,
bes_srtdeel s, bes_srtdeel s,
bes_bestelling_item bi, bes_bestelling_item bi,
bes_bestelling b, bes_bestelling b,
prs_perslid p, prs_perslid p,
prs_v_afdeling d, prs_v_afdeling d,
prs_bedrijf abd prs_bedrijf abd
WHERE abd.prs_bedrijf_key = d.prs_bedrijf_key WHERE abd.prs_bedrijf_key = d.prs_bedrijf_key
AND p.prs_afdeling_key = d.prs_afdeling_key AND p.prs_afdeling_key = d.prs_afdeling_key
AND b.prs_perslid_key = p.prs_perslid_key AND b.prs_perslid_key = p.prs_perslid_key
AND bi.bes_bestelling_key = b.bes_bestelling_key AND bi.bes_bestelling_key = b.bes_bestelling_key
AND s.bes_srtdeel_key = bi.bes_srtdeel_key AND s.bes_srtdeel_key = bi.bes_srtdeel_key
AND s.prs_bedrijf_key = bd.prs_bedrijf_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_status IN (1, 2, 3, 4) -- om dubbelen te vermijden
AND b.bes_bestelling_key = bes_key AND b.bes_bestelling_key = bes_key
ORDER BY 1, 7; ORDER BY 1, 7;
BEGIN BEGIN
-- Maakt bestelopdrachten van bestelaanvragen -- Maakt bestelopdrachten van bestelaanvragen
current_leverancier_key := -1; current_leverancier_key := -1;
bedrijfvolgnr := 0; bedrijfvolgnr := 0;
FOR rec1 IN tebestellen FOR rec1 IN tebestellen
LOOP LOOP
--DBMS_OUTPUT.put_line ('Een regel'); --DBMS_OUTPUT.put_line ('Een regel');
-- Moeten we van leverancier wisselen? -- Moeten we van leverancier wisselen?
IF current_leverancier_key <> rec1.prs_bedrijf_key IF current_leverancier_key <> rec1.prs_bedrijf_key
THEN THEN
BEGIN BEGIN
--DBMS_OUTPUT.put_line ('Een nieuwe leverancier:' || TO_CHAR (rec1.prs_bedrijf_key)); --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. -- Bepaal het factuuradres. Deze kan binnen 1 aanvraag verschillen als er meerdere leveranciers betrokken zijn.
-- Dit is het factuuradres van de leverancier indien gedefinieerd, -- Dit is het factuuradres van de leverancier indien gedefinieerd,
-- en zo niet, dan het factuuradres van de afdeling (daarbij zover omhoog zoeken tot gevonden) -- 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. -- 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. -- Er zou geen factuuraders gevonden kunnen worden, dan blijft die gewoon leeg.
-- Van de aanvrager: -- Van de aanvrager:
factura_key := rec1.mld_adres_key_fac; factura_key := rec1.mld_adres_key_fac;
-- Van de leverancier: -- Van de leverancier:
SELECT mld_adres_key_fac, prs_bedrijf_email, prs_bedrijf_telefoon2 SELECT mld_adres_key_fac, prs_bedrijf_email, prs_bedrijf_telefoon2
INTO factura_key, bedrijf_email, bedrijf_telefoon2 INTO factura_key, bedrijf_email, bedrijf_telefoon2
FROM prs_bedrijf FROM prs_bedrijf
WHERE prs_bedrijf_key = rec1.prs_bedrijf_key AND mld_adres_key_fac IS NOT NULL; WHERE prs_bedrijf_key = rec1.prs_bedrijf_key AND mld_adres_key_fac IS NOT NULL;
EXCEPTION EXCEPTION
WHEN NO_DATA_FOUND WHEN NO_DATA_FOUND
THEN THEN
-- Van de afdeling: -- Van de afdeling:
SELECT a.niveau, a.prs_afdeling_key SELECT a.niveau, a.prs_afdeling_key
INTO niveau, afd_key INTO niveau, afd_key
FROM prs_v_aanwezigafdeling a FROM prs_v_aanwezigafdeling a
WHERE a.prs_afdeling_key = rec1.prs_afdeling_key; WHERE a.prs_afdeling_key = rec1.prs_afdeling_key;
lfound := FALSE; lfound := FALSE;
WHILE (niveau >= 1 AND NOT lfound) WHILE (niveau >= 1 AND NOT lfound)
LOOP LOOP
-- zoek kenmerk -- zoek kenmerk
BEGIN BEGIN
SELECT prs_kenmerklink_waarde SELECT prs_kenmerklink_waarde
INTO link_key INTO link_key
FROM prs_kenmerklink kl, prs_kenmerk k FROM prs_kenmerklink kl, prs_kenmerk k
WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key
AND kl.prs_link_key = afd_key AND kl.prs_link_key = afd_key
AND k.prs_kenmerk_key = 6 AND k.prs_kenmerk_key = 6
AND kl.prs_kenmerklink_waarde IS NOT NULL; AND kl.prs_kenmerklink_waarde IS NOT NULL;
EXCEPTION EXCEPTION
WHEN NO_DATA_FOUND WHEN NO_DATA_FOUND
THEN THEN
link_key := NULL; link_key := NULL;
END; END;
IF link_key IS NULL IF link_key IS NULL
THEN -- -- kenmerk factuuradres niet aanwezig, zoek parent afdeling THEN -- -- kenmerk factuuradres niet aanwezig, zoek parent afdeling
BEGIN BEGIN
SELECT a.prs_afdeling_parentkey SELECT a.prs_afdeling_parentkey
INTO afd_key_temp INTO afd_key_temp
FROM prs_v_aanwezigafdeling a FROM prs_v_aanwezigafdeling a
WHERE a.prs_afdeling_key = afd_key; WHERE a.prs_afdeling_key = afd_key;
IF niveau != 1 IF niveau != 1
THEN THEN
afd_key := afd_key_temp; -- als niveau=1 en geen kenmerk gevonden dan nog afd_key van niveau=1 nodig 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 IF;
END LOOP; niveau := niveau - 1;
IF link_key IS NOT NULL END;
THEN ELSE
factura_key := link_key; lfound := TRUE; -- kenmerk aanwezig
END IF; END IF;
END; END LOOP;
-- factuuradres is bepaald, maak nu de opdracht aan IF link_key IS NOT NULL
IF current_leverancier_key <> -1 THEN
THEN factura_key := link_key;
-- Afronden vorige opdracht END IF;
UPDATE bes_bestelopdr END;
SET bes_bestelopdr_status = 3 -- JGL: stond hij hier nog niet op dan? -- factuuradres is bepaald, maak nu de opdracht aan
WHERE bes_bestelopdr_key = lbord_key; IF current_leverancier_key <> -1
fac.trackaction ('BES2NE', THEN
lbord_key, -- Afronden vorige opdracht
i_userkey, UPDATE bes_bestelopdr
NULL, SET bes_bestelopdr_status = 3 -- JGL: stond hij hier nog niet op dan?
''); WHERE bes_bestelopdr_key = lbord_key;
-- Bepaal opdrachtkorting en opdrachtkosten en sla deze op fac.trackaction ('BES2NE',
-- Met parameter 1 geven we aan dat de berekende waarde automaisch ook word opgeslagen lbord_key,
besopdrachtkorting := bes.calcbesopdrachtkorting(lbord_key, 1); i_userkey,
besopdrachtkosten := bes.calcbesopdrachtkosten(lbord_key, 1); NULL,
END IF; '');
-- Op naar de volgende -- Bepaal opdrachtkorting en opdrachtkosten en sla deze op
current_leverancier_key := rec1.prs_bedrijf_key; -- Met parameter 1 geven we aan dat de berekende waarde automaisch ook word opgeslagen
bedrijfvolgnr := bedrijfvolgnr + 1; besopdrachtkorting := bes.calcbesopdrachtkorting(lbord_key, 1);
SELECT bes_s_bes_bestelopdr_key.NEXTVAL besopdrachtkosten := bes.calcbesopdrachtkosten(lbord_key, 1);
INTO lbord_key UPDATE bes_bestelopdr
FROM DUAL; SET bes_bestelopdr_levkosten = besopdrachtkosten
-- UWVA#13420, als zichtbaar opdrachtnummer wordt het aanvraagnummer gebruikt , bes_bestelopdr_korting = besopdrachtkorting
-- Indien dit ooit anders moet, bv bundeling, dan moet alleen dit anders WHERE bes_bestelopdr_key = lbord_key;
-- Met UWVA#21074 hanteren we voor mutaties toch hetzelfde opdrachtnummer, zodat END IF;
-- de leverancier de link met het origineel kan vinden. -- Op naar de volgende
lbord_id := TO_CHAR(COALESCE(rec1.bes_bestelling_parentkey, bes_key))||'/'|| bedrijfvolgnr; current_leverancier_key := rec1.prs_bedrijf_key;
--DBMS_OUTPUT.put_line ('Bestelopdracht maken: ' || TO_CHAR (lbord_key)); bedrijfvolgnr := bedrijfvolgnr + 1;
INSERT INTO bes_bestelopdr SELECT bes_s_bes_bestelopdr_key.NEXTVAL
(bes_bestelopdr_key, bes_bestelopdr_status, prs_bedrijf_key, INTO lbord_key
bes_bestelopdr_datum, mld_adres_key_lev, mld_adres_key_fac, FROM DUAL;
prs_perslid_key, -- UWVA#13420, als zichtbaar opdrachtnummer wordt het aanvraagnummer gebruikt
bes_bestelopdr_id -- Indien dit ooit anders moet, bv bundeling, dan moet alleen dit anders
) -- Met UWVA#21074 hanteren we voor mutaties toch hetzelfde opdrachtnummer, zodat
VALUES (lbord_key, 3, rec1.prs_bedrijf_key, -- de leverancier de link met het origineel kan vinden.
SYSDATE, rec1.mld_adres_key_lev, factura_key, lbord_id := TO_CHAR(COALESCE(rec1.bes_bestelling_parentkey, bes_key))||'/'|| bedrijfvolgnr;
i_userkey, --DBMS_OUTPUT.put_line ('Bestelopdracht maken: ' || TO_CHAR (lbord_key));
lbord_id INSERT INTO bes_bestelopdr
); (bes_bestelopdr_key, bes_bestelopdr_status, prs_bedrijf_key,
aantalopdrachtregels := 0; 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; END IF;
itemprijsmetkorting := bes.calcbesartikelkortingsprijs(rec1.bes_bestelling_item_key); itemprijsmetkorting := bes.calcbesartikelkortingsprijs(rec1.bes_bestelling_item_key);
--DBMS_OUTPUT.put_line ('Bestelregel maken: ' || TO_CHAR (aantalopdrachtregels + 1)); --DBMS_OUTPUT.put_line ('Bestelregel maken: ' || TO_CHAR (aantalopdrachtregels + 1));
INSERT INTO bes_bestelopdr_item INSERT INTO bes_bestelopdr_item
(bes_bestelopdr_item_key, bes_bestelopdr_item_posnr, bes_bestelopdr_key, (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_aantal, bes_bestelopdr_item_aantalontv, bes_bestelopdr_item_omschrijv,
bes_bestelopdr_item_brutoprijs, bes_bestelopdr_item_ontvangen, bes_bestelopdr_item_inkprijs, bes_bestelopdr_item_brutoprijs, bes_bestelopdr_item_ontvangen, bes_bestelopdr_item_inkprijs,
bes_bestelopdr_item_prijs bes_bestelopdr_item_prijs
) )
VALUES (bes_s_bes_bestelopdr_item_key.NEXTVAL, aantalopdrachtregels + 1, lbord_key, VALUES (bes_s_bes_bestelopdr_item_key.NEXTVAL, aantalopdrachtregels + 1, lbord_key,
rec1.bes_bestelling_item_aantal, NULL, rec1.bes_srtdeel_omschrijving, rec1.bes_bestelling_item_aantal, NULL, rec1.bes_srtdeel_omschrijving,
rec1.bes_srtdeel_prijs, NULL, rec1.bes_srtdeel_inkprijs, rec1.bes_srtdeel_prijs, NULL, rec1.bes_srtdeel_inkprijs,
itemprijsmetkorting itemprijsmetkorting
); );
aantalopdrachtregels := aantalopdrachtregels + 1; aantalopdrachtregels := aantalopdrachtregels + 1;
UPDATE bes_bestelling_item UPDATE bes_bestelling_item
SET bes_bestelopdr_item_key = bes_s_bes_bestelopdr_item_key.CURRVAL SET bes_bestelopdr_item_key = bes_s_bes_bestelopdr_item_key.CURRVAL
WHERE bes_bestelling_item_key = rec1.bes_bestelling_item_key; WHERE bes_bestelling_item_key = rec1.bes_bestelling_item_key;
END LOOP; END LOOP;
IF current_leverancier_key <> -1 IF current_leverancier_key <> -1
THEN THEN
-- Afronden vorige opdracht -- Afronden vorige opdracht
UPDATE bes_bestelopdr UPDATE bes_bestelopdr
SET bes_bestelopdr_status = 3 SET bes_bestelopdr_status = 3
WHERE bes_bestelopdr_key = lbord_key; WHERE bes_bestelopdr_key = lbord_key;
fac.trackaction ('BES2NE', fac.trackaction ('BES2NE',
lbord_key, lbord_key,
i_userkey, i_userkey,
NULL, NULL,
''); '');
-- Bepaal opdrachtkorting en opdrachtkosten en sla deze op -- Bepaal opdrachtkorting en opdrachtkosten en sla deze op
-- Met parameter 1 geven we aan dat de berekende waarde automaisch ook word opgeslagen -- Met parameter 1 geven we aan dat de berekende waarde automaisch ook word opgeslagen
besopdrachtkorting := bes.calcbesopdrachtkorting(lbord_key, 1); besopdrachtkorting := bes.calcbesopdrachtkorting(lbord_key, 1);
besopdrachtkosten := bes.calcbesopdrachtkosten(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; END;
PROCEDURE makecontract (bestelopdr_key IN NUMBER) PROCEDURE makecontract (bestelopdr_key IN NUMBER)