BLST#69777 -- Import functie probleem, blst_imp_sap extra kolommen

svn path=/Customer/trunk/; revision=53988
This commit is contained in:
Norbert Wassink
2021-12-02 14:15:02 +00:00
parent 8eb21671ce
commit ce21929fb4

View File

@@ -1,4 +1,4 @@
/* Formatted on 18-11-2021 09:10:53 (QP5 v5.336) */
--
-- $Id$
--
@@ -74,6 +74,8 @@ AS
PROCEDURE anonimiseer_prs;
PROCEDURE afmelden_reserveringen;
PROCEDURE noti_bezoek;
FUNCTION aantal_weekdagen (datum_van IN DATE, datum_tot IN DATE)
RETURN NUMBER;
@@ -839,7 +841,91 @@ AS
|| oracle_err_mes
|| ')';
END;
PROCEDURE noti_bezoek
AS
-- cust01 reminder: mail naar bezoeker
CURSOR c IS
SELECT b.bez_bezoekers_key,
a.bez_afspraak_key,
TO_CHAR (a.bez_afspraak_datum, 'dd-mm-yyyy') datum,
TO_CHAR (a.bez_afspraak_datum, 'hh24:mi') tijd,
b.bez_bezoekers_email email,
res_reservering_key,
res_rsv_ruimte_omschrijving,
'CUST01' fac_srtnotificatie_code
FROM bez_bezoekers b, bez_afspraak a, res_rsv_ruimte rrr
WHERE b.bez_afspraak_key = a.bez_afspraak_key
AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
AND b.bez_bezoekers_email IS NOT NULL
AND TRUNC (a.bez_afspraak_datum) < TRUNC (SYSDATE) + 2
AND TRUNC (a.bez_afspraak_datum) > TRUNC (SYSDATE) - 1
AND NOT EXISTS --
(SELECT kw.bez_kenmerkwaarde_key
FROM bez_kenmerkwaarde kw
WHERE kw.bez_kenmerk_key = 1000 -- time stamp waarop notificatie verstuurd is
AND kw.bez_bezoekers_key =
b.bez_bezoekers_key);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_srtnotificatie_key NUMBER (10);
v_onderwerp VARCHAR2 (100);
BEGIN
FOR rec IN c
LOOP
v_onderwerp :=
'Herinnering bezoekafspraak op '
|| rec.datum;
SELECT fac_srtnotificatie_key
INTO v_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = rec.fac_srtnotificatie_code;
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_extrakey,
fac_notificatie_prioriteit)
VALUES (v_srtnotificatie_key,
2,
rec.email,
v_onderwerp,
rec.bez_afspraak_key,
rec.bez_bezoekers_key,
2);
-- een timestamp zetten dat de mail verstuurd is
flx.setflex ('BEZ',
1000,
rec.bez_bezoekers_key,
TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss'),
0);
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog ('NOTI_BEZOEKERS',
'E',
v_errormsg,
'');
END;
FUNCTION aantal_weekdagen (datum_van IN DATE, datum_tot IN DATE)
RETURN NUMBER
AS
@@ -3357,7 +3443,7 @@ CREATE OR REPLACE PROCEDURE blst_select_res_ikp_upd (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR sel_res_upd (p_horizon NUMBER)
CURSOR sel_res_upd --(p_horizon NUMBER)
IS
SELECT res_key,
res_reservering_key,
@@ -3381,8 +3467,8 @@ AS
approved
FROM blst_v_select_cat_res
WHERE last_export IS NOT NULL
AND last_upd > last_export
AND TRUNC(datum_van) BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE + p_horizon); --p_horizon;
AND last_upd > last_export;
-- AND TRUNC(datum_van) BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE + p_horizon); --p_horizon;
CURSOR sel_art (in_res_key NUMBER)
IS
@@ -3450,23 +3536,23 @@ BEGIN
v_totalPrice := 0;
-- v_SAPID := blst.get_SAPid();
SELECT SYSDATE INTO v_today FROM DUAL;
--SELECT SYSDATE INTO v_today FROM DUAL;
v_horizon := 7;
--v_horizon := 7;
-- Wijziging horizon opvragen van alle catalogi met kostensoort catering en mee geven aan de cursor rec
-- SWI: er wordt niet gekeken naar kostensoort maar activiteitsoort catering, kostensoort is allleen tbv catering met fiattering
-- SWI: Door hier MIN te kiezen ipv MAX weet je zeker dat je alle catering meepakt die niet meer gewijzigd mag worden
SELECT MIN (rdp.res_disc_params_expire_dagen)
INTO v_horizon
FROM res_discipline dis,
res_activiteitdiscipline rad,
res_activiteit ra,
res_disc_params rdp
WHERE dis.ins_discipline_key = rad.res_discipline_key
AND rad.res_activiteit_key = ra.res_activiteit_key
AND ra.res_srtactiviteit_key = 10 -- CATERING
AND rdp.res_ins_discipline_key = dis.ins_discipline_key;
--SELECT MIN (rdp.res_disc_params_expire_dagen)
-- INTO v_horizon
-- FROM res_discipline dis,
-- res_activiteitdiscipline rad,
-- res_activiteit ra,
-- res_disc_params rdp
-- WHERE dis.ins_discipline_key = rad.res_discipline_key
-- AND rad.res_activiteit_key = ra.res_activiteit_key
-- AND ra.res_srtactiviteit_key = 10 -- CATERING
-- AND rdp.res_ins_discipline_key = dis.ins_discipline_key;
-- bepaal dag van de week
--SELECT TO_CHAR (SYSDATE, 'D') INTO v_DayOfWeek FROM DUAL;
@@ -3486,11 +3572,11 @@ BEGIN
--END IF;
v_horizon := v_horizon + NVL(blst.aantal_weekenddagen(TRUNC(SYSDATE), TRUNC(SYSDATE)+v_horizon),0);
v_horizon := v_horizon + NVL(blst.aantal_vrije_dagen(TRUNC(SYSDATE), TRUNC(SYSDATE)+v_horizon),0);
v_horizon := v_horizon + NVL(blst.aantal_weekenddagen(TRUNC(SYSDATE), TRUNC(SYSDATE)+v_horizon),0);
--v_horizon := v_horizon + NVL(blst.aantal_weekenddagen(TRUNC(SYSDATE), TRUNC(SYSDATE)+v_horizon),0);
--v_horizon := v_horizon + NVL(blst.aantal_vrije_dagen(TRUNC(SYSDATE), TRUNC(SYSDATE)+v_horizon),0);
--v_horizon := v_horizon + NVL(blst.aantal_weekenddagen(TRUNC(SYSDATE), TRUNC(SYSDATE)+v_horizon),0);
FOR rec IN sel_res_upd (v_horizon)
FOR rec IN sel_res_upd -- (v_horizon)
LOOP
BEGIN
v_approved := 1;
@@ -4107,10 +4193,7 @@ BEGIN
INTO v_currentfile
FROM fac_import
WHERE fac_import_key=p_import_key;
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'currentfile :'||v_currentfile);
FOR rec IN c1
LOOP
@@ -4130,19 +4213,11 @@ fac.imp_writelog (p_import_key,
fac.imp_getfield (v_newline, c_delim, v_leverdatum_str);
v_aanduiding := 'Valideer Headers';
DBMS_OUTPUT.PUT_LINE('GOT :'||v_sapnr_str);
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'GOT :'||v_sapnr_str);
IF v_sapnr_str = 'SAPNR' -- ik heb een header te pakken
THEN
v_counter:=v_counter+1;
DBMS_OUTPUT.PUT_LINE('GOT AN HEADER :'||v_counter);
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'GOT AN HEADER :'||v_counter);
-- IF (header_is_valid = 0)
-- THEN
IF UPPER (TRIM (v_sapnr_str)) = 'SAPNR'
@@ -4170,11 +4245,8 @@ fac.imp_writelog (p_import_key,
v_code_str := RPAD (v_code_str, LENGTH (v_sapnr_str), '0');
v_code := fac.safe_to_number (v_code_str);
v_res_key := fac.safe_to_number (v_sapnr_str) - v_code;
DBMS_OUTPUT.PUT_LINE('GOT AN ROW :'||v_res_key);
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'GOT AN ROW :'||v_res_key);
--SUBSTR (LTRIM(v_sapnr_str), 4, LENGTH (LTRIM(v_sapnr_str))));
IF v_res_key > 0
@@ -4286,7 +4358,8 @@ DBMS_OUTPUT.PUT_LINE('GOT AN ROW :'||v_res_key);
inkoopprijs,
leverdatum,
import_key,
filename)
filename,
import_guid)
VALUES (v_res_key,
v_regelnr,
v_actioncode_str,
@@ -4296,7 +4369,8 @@ DBMS_OUTPUT.PUT_LINE('GOT AN ROW :'||v_res_key);
v_excprijs,
v_leverDatum,
p_import_key,
v_currentfile);
v_currentfile,
blst.getguid());
EXCEPTION
WHEN OTHERS
THEN
@@ -4382,6 +4456,8 @@ AS
imp.prijs incprijs,
imp.inkoopprijs excprijs,
imp.leverdatum leverdatum,
imp.filename currentfile,
imp.import_guid guid,
COALESCE (
(SELECT res_rsv_artikel_key
FROM blst_exp_sap
@@ -4393,6 +4469,10 @@ AS
FROM blst_imp_sap imp, res_rsv_ruimte res
WHERE res.res_rsv_ruimte_key = imp.res_key
ORDER BY imp.filename,imp.res_key, imp.regel_nr;
CURSOR del is
SELECT DISTINCT res_key, filename
FROM blst_imp_sap;
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
@@ -4406,12 +4486,18 @@ AS
v_prijs NUMBER (9, 2);
v_kostensoort VARCHAR2 (60);
v_BOstatus NUMBER;
v_currentfile VARCHAR2(50) := '';
v_sapid VARCHAR2(20);
BEGIN
v_artikel_key :=0;
FOR rec IN sel
LOOP
v_mutatie := 0;
v_aanduiding := 'Geen acties voor SAP IMPORT';
v_errorhint := 'SAP IMPORT';
v_sapid := blst.getAanvraagNr(TO_CHAR(rec.res_key));
v_currentfile := rec.currentfile;
SELECT COALESCE (rrr.res_status_bo_key, MAX (rra.res_status_bo_key))
INTO v_BOstatus
@@ -4429,10 +4515,10 @@ BEGIN
WHERE rrr.res_rsv_ruimte_key = rec.res_key
AND kstp.prs_kostenplaats_key = rrr.prs_kostenplaats_key;
IF rec.actioncode <> '04'
IF rec.actioncode = '02'
THEN
-- check wekje kostensoort de catalogus heeft
SELECT art.prs_kostensoort_oms
SELECT COALESCE(art.prs_kostensoort_oms,'NB')
INTO v_kostensoort
FROM res_rsv_ruimte res,
prs_perslid pp,
@@ -4441,39 +4527,29 @@ BEGIN
fac_groeprechten fgr,
ins_tab_discipline itd,
(SELECT *
FROM res_artikel ra,
res_discipline rd,
prs_kostensoort k
WHERE ra.res_artikel_nr = rec.imp_artikel_nr
AND ra.res_artikel_verwijder IS NULL
AND rd.ins_discipline_key =
ra.res_discipline_key
AND rd.prs_kostensoort_key =
k.prs_kostensoort_key(+)) art
FROM res_rsv_ruimte rrr, res_rsv_artikel rra, res_artikel ra, ins_tab_discipline itd, prs_kostensoort pk
WHERE rrr.res_rsv_ruimte_key=rec.res_key
AND rra.res_rsv_ruimte_key=rrr.res_rsv_ruimte_key
AND rra.res_artikel_key=ra.res_artikel_key
AND ra.res_artikel_nr=rec.imp_artikel_nr
AND ra.res_artikel_verwijder IS NULL
AND itd.ins_discipline_key=ra.res_discipline_key
AND itd.prs_kostensoort_key = pk.prs_kostensoort_key(+)) art
WHERE res.res_rsv_ruimte_key = rec.res_key
AND pp.prs_perslid_key =
res.res_rsv_ruimte_contact_key
AND pp.prs_perslid_key = res.res_rsv_ruimte_contact_key
AND fgg.prs_perslid_key = pp.prs_perslid_key
AND fg.fac_groep_key = fgg.fac_groep_key
AND fgr.fac_groep_key = fg.fac_groep_key
AND itd.ins_discipline_key = fgr.ins_discipline_key
AND itd.ins_discipline_key = art.ins_discipline_key;
IF v_extern = 1
AND INSTR (UPPER (v_kostensoort), 'CATERING EXCL') > 0
AND INSTR (UPPER (v_kostensoort), 'CATERING EXCL. BTW') > 0
THEN
v_prijs := rec.excprijs; -- ex btw prijs
ELSE
v_prijs := rec.incprijs; -- incl btw prijs
END IF;
END IF;
IF rec.actioncode = '02'
THEN
-- TODO : update moet niet alleen aantal maar ok inkoop prije en prijs van artikel in res_rsv_artikel updaten
-- Wat als er twee artikelen met hetzelfde nummer zijn ?
UPDATE res_rsv_artikel
SET res_rsv_artikel_aantal = rec.imp_aantal,
res_rsv_artikel_prijs = v_prijs * rec.imp_aantal, -- res_rsv_artikel is de totaal prijs
@@ -4486,14 +4562,14 @@ BEGIN
COMMIT;
v_mutatie := 1;
v_aanduiding :=
'SAP import: aanpassing artikelNr ('
'SAP import('||v_sapid||'): aanpassing artikelNr ('
|| rec.imp_artikel_nr
|| '-'
|| rec.art_key
|| ') aantal naar : '
|| rec.imp_aantal
|| ' prijs naar: '
|| v_prijs
|| ' prijs naar: '
|| to_char(v_prijs, '999G999G999D99', 'NLS_NUMERIC_CHARACTERS = '',.''')
|| ' leverdatum naar: '
|| rec.leverdatum;
fac.trackaction ('RESUPD',
@@ -4503,28 +4579,34 @@ BEGIN
v_aanduiding);
ELSIF rec.actioncode = '01'
THEN
SELECT art.res_artikel_key
-- Uitwelke catalogus komt dit artikel
SELECT COALESCE(ra.res_artikel_key,0)
INTO v_artikel_key
FROM res_rsv_ruimte res,
prs_perslid pp,
fac_gebruikersgroep fgg,
fac_groep fg,
fac_groeprechten fgr,
ins_tab_discipline itd,
(SELECT *
FROM res_artikel ra, res_discipline rd
WHERE ra.res_artikel_nr = rec.imp_artikel_nr
AND ra.res_artikel_verwijder IS NULL
AND rd.ins_discipline_key =
ra.res_discipline_key) art
WHERE res.res_rsv_ruimte_key = rec.res_key
AND pp.prs_perslid_key =
res.res_rsv_ruimte_contact_key
AND fgg.prs_perslid_key = pp.prs_perslid_key
AND fg.fac_groep_key = fgg.fac_groep_key
AND fgr.fac_groep_key = fg.fac_groep_key
AND itd.ins_discipline_key = fgr.ins_discipline_key
AND itd.ins_discipline_key = art.ins_discipline_key;
FROM res_artikel ra
WHERE ra.res_artikel_nr = rec.imp_artikel_nr
AND ra.res_artikel_verwijder IS NULL
AND ra.res_discipline_key IN
(SELECT itd.ins_discipline_key
FROM res_rsv_ruimte res,
prs_perslid pp,
fac_gebruikersgroep fgg,
fac_groep fg,
fac_groeprechten fgr,
ins_tab_discipline itd
WHERE res.res_rsv_ruimte_key = rec.res_key
AND pp.prs_perslid_key = res.res_rsv_ruimte_contact_key
AND fgg.prs_perslid_key = pp.prs_perslid_key
AND fg.fac_groep_key = fgg.fac_groep_key
AND fgr.fac_groep_key = fg.fac_groep_key
AND itd.ins_discipline_key = fgr.ins_discipline_key
AND UPPER(itd.ins_discipline_externnr)='CATERING');
IF v_extern = 1
THEN
v_prijs := rec.excprijs; -- ex btw prijs
ELSE
v_prijs := rec.incprijs; -- incl btw prijs
END IF;
IF v_artikel_key > 0
THEN
@@ -4547,12 +4629,12 @@ BEGIN
SYSDATE);
v_aanduiding :=
'SAP import: Artikel toegevoegd '
'SAP import('||v_sapid||'): Artikel toegevoegd '
|| rec.imp_artikel_nr
|| ' met aantal '
|| rec.imp_aantal
|| ' en prijs '
|| v_prijs;
|| ' en prijs '
|| to_char(v_prijs, '999G999G999D99', 'NLS_NUMERIC_CHARACTERS = '',.''');
fac.trackaction ('RESUPD',
rec.res_key,
3,
@@ -4560,7 +4642,7 @@ BEGIN
v_aanduiding);
ELSE
v_aanduiding :=
'SAP import: Artikel '
'SAP import('||v_sapid||'): Artikel '
|| rec.imp_artikel_nr
|| ' is niet beschikbaar in Facilitor';
fac.trackaction ('RESUPD',
@@ -4577,7 +4659,7 @@ BEGIN
AND res_rsv_artikel_key = rec.art_key;
v_aanduiding :=
'SAP import: verwijderen artikelNr ('
'SAP import('||v_sapid||'): verwijderen artikelNr ('
|| rec.imp_artikel_nr
|| ') aantal naar : 0';
@@ -4603,7 +4685,7 @@ BEGIN
END IF;
ELSE
v_aanduiding :=
'SAP ERROR: Wijziging onvangen op reeds afgemelde reservering, deze is niet verwerkt !';
'SAP ERROR('||v_sapid||'): Wijziging onvangen op reeds afgemelde reservering, deze is niet verwerkt !';
fac.trackaction ('RESUPD',
rec.res_key,
3,
@@ -4616,9 +4698,22 @@ BEGIN
'S',
v_aanduiding,
v_errorhint);
DELETE FROM blst_imp_sap WHERE import_key=p_import_key and import_guid=rec.guid;
COMMIT;
END LOOP;
DELETE FROM blst_imp_sap WHERE import_key=p_import_key; -- Data is verwerkt dus opruimen.
COMMIT;
FOR rec_del IN DEL
LOOP
fac.imp_writelog (p_import_key,
'E',
'SAP ERROR ('||blst.getAanvraagNr(TO_CHAR(rec_del.res_key))||') in bestand '||rec_del.filename,
'FOUT IN VERWERKING SAP IMPORT');
DELETE FROM blst_imp_sap WHERE res_key=rec_del.res_key; -- Fout id gelogged dus nu opruimen
COMMIT;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
@@ -4630,8 +4725,8 @@ EXCEPTION
'E',
v_errormsg || v_aanduiding,
v_errorhint);
-- Ook als we een fout hebben de boel opruiomen anders blijven we er last van houden.
DELETE FROM blst_imp_sap WHERE import_key=p_import_key; -- Data is verwerkt dus opruimen.
-- Ook als we een fout hebben de boel opruiomen van de foute xml file anders blijven we er last van houden.
DELETE FROM blst_imp_sap WHERE import_key=p_import_key AND filename=v_currentfile;
COMMIT;
END;