MAAS#61281 Koppeling Valuemation

svn path=/Customer/trunk/; revision=45962
This commit is contained in:
Sander Schepers
2020-02-25 06:54:22 +00:00
parent e5effa5737
commit 28e8f34c77

View File

@@ -109,16 +109,26 @@ CREATE OR REPLACE PROCEDURE maas_processemail (pfrom IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
sender prs_perslid.prs_perslid_key%TYPE;
mldkey mld_melding.mld_melding_key%TYPE;
mldstat mld_melding.mld_melding_status%TYPE;
stdmelding mld_stdmelding.mld_stdmelding_key%TYPE;
v_errormsg fac_result.fac_result_waarde%TYPE;
v_from VARCHAR2 (4000);
v_body VARCHAR2 (4000);
m_body VARCHAR2 (4000);
sender prs_perslid.prs_perslid_key%TYPE;
mldkey mld_melding.mld_melding_key%TYPE;
mldstat mld_melding.mld_melding_status%TYPE;
stdmelding mld_stdmelding.mld_stdmelding_key%TYPE;
v_errormsg fac_result.fac_result_waarde%TYPE;
v_from VARCHAR2 (4000);
v_body VARCHAR2 (4000);
m_body VARCHAR2 (4000);
v_actie VARCHAR2 (4000);
v_vmnr mld_melding.mld_melding_externnr%TYPE; --Ticketnr Valuemation
v_mldkey mld_melding.mld_melding_key%TYPE; --bestaande mld_melding_key
v_opdrkey mld_opdr.mld_opdr_key%TYPE; --bestaande mld_opdr_key
v_opdrvolgnr mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE; --bestaande volgnr
v_status mld_opdr.mld_statusopdr_key%TYPE; -- status opdracht
v_kenmstatusoms VARCHAR2 (4000);
v_kenmstatusper VARCHAR2 (4000);
v_kenmstatusoms_cur VARCHAR2 (4000);
v_kenmstatusper_cur VARCHAR2 (4000);
BEGIN
v_errormsg := '(0x143)';
v_errormsg := '(0x143)' || v_mldkey || psubject || v_actie;
sender := 3; --Standaard de persoon Facilitor
-- Verwijder de Bounce Address Tag Validation
@@ -135,11 +145,11 @@ BEGIN
CASE
WHEN UPPER (pto) LIKE 'HRM@%'
THEN
v_errormsg := '(0x145)';
v_errormsg := '(0x145)' || v_mldkey || psubject || v_actie;
stdmelding :=
fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
mldstat := 4; -- Standaard de status in behandeling (4). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden doorgezet en er een workflow gaat starten na het doorzetten.
mldstat := 4; -- Standaard de status in behandeling (4). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden gecorrigeerd naar een workflowstartmelding.
-- Obv onderwerpveld bepalen welke stdmelding aangemaakt moet worden.
CASE
@@ -160,7 +170,7 @@ BEGIN
stdmelding := 564;
ELSE
stdmelding := 581; -- Dit is de verzamelbak van binnenkomende meldingen/mails waarvan niet de juiste stdmelding kan worden bepaald.
mldstat := 2; -- Standaard de status in behandeling (4). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden doorgezet en er een workflow gaat starten na het doorzetten.
mldstat := 2; -- Standaard de status in behandeling (4). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden gecorrigeerd naar een workflowstartmelding.
END CASE;
-- Hier maken we de melding aan.
@@ -214,8 +224,7 @@ BEGIN
RETURNING mld_melding_key
INTO mldkey;
-- DBMS_OUTPUT.PUT_LINE('Melding toegevoegd: ' || mldkey);
v_errormsg := '(0x147)';
v_errormsg := '(0x147)' || v_mldkey || psubject || v_actie;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
@@ -225,24 +234,628 @@ BEGIN
'Geregistreerd onder melding ' || mldkey);
-- Indien het een melding is die start is van een workflow, dan moet ook de eerstvolgende stap(pen) aangemaakt worden.
v_errormsg := '(0x146)';
v_errormsg := '(0x146)' || v_mldkey || psubject || v_actie;
mld.mld_nextworkflowstep (mldkey, -1);
END;
-- Eerst hanteerde ik een End case en End om de twee kanalen te scheiden. Daarop liep het tweede kanaal (pto: helpdesk_maasdelta@) niet, vreemd genoeg. Door de End case en End uit te commentarieren liep de procedure wel.
-- Wellicht wat vreemd en onverwacht gedrag, maar met die wetenschap, dit maar zo laten.
-- END CASE;
-- CASE
WHEN UPPER (pto) LIKE 'HELPDESK_MAASDELTA@%'
THEN
v_errormsg := '(0x245)' || v_mldkey || psubject || v_actie;
stdmelding :=
fac.safe_to_number (fac.getsetting ('defaultstdmelding'));
mldstat := 2; -- Standaard de status in Nieuw (2). Bij geen overeenkomend onderwerp, dan status Nieuw (2), zodat de melding kan worden doorgezet en er een workflow gaat starten na het doorzetten.
-- Bepalen van het ticknr. uit Valuemation, deze is vooral van belang bij het confirmation bericht
v_errormsg := '(0x246)' || v_mldkey || psubject || v_actie;
v_vmnr := SUBSTR (psubject, 11, 12);
-- Bepalen van mld_melding_key
v_errormsg := '(0x247)' || v_mldkey || psubject || v_actie;
v_mldkey :=
SUBSTR (
SUBSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
0,
INSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
'"')
- 1),
0,
INSTR (
SUBSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
0,
INSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
'"')
- 1),
'/')
- 1);
-- Bepalen van opdrachtvolgnr
v_errormsg := '(0x248)' || v_mldkey || psubject || v_actie;
v_opdrvolgnr :=
SUBSTR (
SUBSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
0,
INSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
'"')
- 1),
INSTR (
SUBSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
0,
INSTR (
SUBSTR (psubject,
INSTR (psubject, 'Facilitor opdracht:') + 19),
'"')
- 1),
'/')
+ 1);
-- Bepalen van de mld_opdr_key
-- Uitgangspunt is 1 opdracht per melding
v_errormsg := '(0x249)' || v_mldkey || psubject || v_actie;
SELECT MIN (mld_opdr_key)
INTO v_opdrkey
FROM mld_opdr
WHERE mld_melding_key = v_mldkey
AND mld_opdr_bedrijfopdr_volgnr = v_opdrvolgnr;
--Hier gaan we obv het onderwerpveld bepalen wat de actie in Facilitor moet zijn
v_errormsg := 'Kan actie niet bepalen: ' || psubject || v_mldkey;
CASE
WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 13, 14)) LIKE
'%IS AANGEMAAKT%'
THEN
v_actie := 'ORDVAL';
WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 22, 23)) LIKE
'%IS DOOR ONS GEVALIDEERD%'
THEN
v_actie := 'ORDACP';
WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 22, 23)) LIKE
'%WACHT OP UW REACTIE%'
THEN
v_actie := 'ORDUPD';
v_kenmstatusoms := 'Wacht op uw reactie';
WHEN UPPER (SUBSTR (psubject, 0, 14)) LIKE '%AFSTEMMING NAV%'
THEN
v_actie := 'ORDUPD';
v_kenmstatusoms := 'Telefonisch contact leggen is mislukt';
WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 11, 12)) LIKE
'%IS OPGELOST%'
THEN
v_actie := 'ORDAFM';
WHEN UPPER (SUBSTR (psubject, LENGTH (psubject) - 45, 46)) LIKE
'%IN VERBAND MET HET UITBLIJVEN VAN EEN REACTIE%'
THEN
v_actie := 'ORDAFM';
ELSE
v_actie := NULL;
END CASE;
BEGIN
--Hieronder de acties die gedaan moeten worden.
--Bevestigingsmail vanuit Valuemation, vult externnr bij de melding
v_errormsg := '(0x350)' || v_mldkey || psubject || v_actie;
--Als de actie niet bepaald kan worden obv het onderwerp van de mail uit Valuemation, dan doen we niets met de mail.
IF v_actie = NULL
THEN
v_errormsg := '(0x360)' || v_mldkey || psubject;
fac.writelog (
'PROCESSEMAIL',
'E',
'Mail kon niet ingelezen worden afzender:'
|| pfrom
|| '['
|| v_errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
ELSE
--Bij een confirmationbericht uit Valuemation, wordt het ticketnr vanuit Valuemation doorgegeven.
IF v_actie = 'ORDVAL'
THEN
v_errormsg :=
'(0x410)'
|| v_mldkey
|| psubject
|| v_actie
|| 'vmnr: '
|| v_vmnr
|| 'opdrkey: '
|| v_opdrkey;
IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
THEN
UPDATE mld_opdr
SET mld_opdr_externnr = v_vmnr
WHERE mld_opdr_key = v_opdrkey;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'#Valuemation nr vanuit confirmationbericht: --> '
|| v_vmnr); -- # voorkomt notificatie
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Valuemation nr kon niet worden gevuld:'
|| pfrom
|| '['
|| v_errormsg
|| v_vmnr
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
END IF;
--Hieronder de afhandeling van het bericht wanneer de melding wordt gevalideerd in Valuemation.
IF v_actie = 'ORDACP'
THEN
v_errormsg := '(0x420)' || v_mldkey || psubject || v_actie;
v_vmnr :=
SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''), 1, 12);
IF v_opdrkey IS NOT NULL
THEN
--Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
THEN
UPDATE mld_opdr
SET mld_opdr_externnr = v_vmnr
WHERE mld_opdr_key = v_opdrkey
AND mld_opdr_externnr IS NULL;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'#Valuemation nr vanuit confirmationbericht: --> '
|| v_vmnr); -- # voorkomt notificatie
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Valuemation nr kon niet worden gevuld:'
|| pfrom
|| '['
|| v_errormsg
|| v_vmnr
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
UPDATE mld_opdr
SET mld_statusopdr_key = 8
WHERE mld_opdr_key = v_opdrkey;
fac.trackaction ('ORDACP',
v_opdrkey,
sender,
NULL,
'#Melding gevalideerd in Valuemation'); -- # voorkomt notificatie
INSERT INTO mld_opdr_note (mld_opdr_key,
mld_opdr_note_omschrijving,
prs_perslid_key)
VALUES (v_opdrkey,
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (
pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- Verwijder onnodige witregels
sender);
fac.trackaction ('ORDUPD',
v_opdrkey,
sender,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Melding kan niet geaccepteerd worden, onbekende opdrachtkey'
|| pfrom
|| '['
|| v_errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
END IF;
--Hieronder de afhandeling van het bericht wanneer de melding moet worden bijgewerkt en een reactie wordt verwacht
IF v_actie = 'ORDUPD'
THEN
v_errormsg := '(0x430)' || v_mldkey || psubject || v_actie;
v_vmnr :=
SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''), 1, 12);
IF v_opdrkey IS NOT NULL
THEN
v_errormsg :=
'(0x431)' || v_mldkey || psubject || v_actie;
SELECT mld_statusopdr_key
INTO v_status
FROM mld_opdr
WHERE mld_opdr_key = v_opdrkey;
--Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
THEN
v_errormsg :=
'(0x432)' || v_mldkey || psubject || v_actie;
UPDATE mld_opdr
SET mld_opdr_externnr = v_vmnr
WHERE mld_opdr_key = v_opdrkey
AND mld_opdr_externnr IS NULL;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'#Valuemation nr vanuit confirmationbericht: --> '
|| v_vmnr); -- # voorkomt notificatie
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Valuemation nr kon niet worden gevuld:'
|| pfrom
|| '['
|| v_errormsg
|| v_vmnr
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
--Wanneer confirmationbericht niet binnen is gekomen, dan is de status nog Toegekend (6) en niet Geaccepteerd (8). Dat kunnen we nu ook omzetten, zodra er een
IF v_vmnr IS NOT NULL
AND v_opdrkey IS NOT NULL
AND v_status = 6 --Toegekend (en dus nog niet geaccepteerd)
THEN
v_errormsg :=
'(0x433)' || v_mldkey || psubject || v_actie;
UPDATE mld_opdr
SET mld_statusopdr_key = 8
WHERE mld_opdr_key = v_opdrkey AND v_status = 6;
fac.trackaction (
'ORDACP',
v_opdrkey,
sender,
NULL,
'#Melding gevalideerd in Valuemation'); -- # voorkomt notificatie
END IF;
-- Hieronder bepalen of de opdracht al de kenmerken mbt status Valuemation gevuld heeft.
SELECT COALESCE (
(SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr
WHERE mld_kenmerk_key = 601 -- Kenmerk 'Status valuemation'
AND mld_opdr_key = v_opdrkey
AND mld_kenmerkopdr_verwijder IS NULL),
'leeg')
INTO v_kenmstatusoms_cur
FROM DUAL;
SELECT COALESCE (
(SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr
WHERE mld_kenmerk_key = 623 -- Kenmerk 'Status per'
AND mld_opdr_key = v_opdrkey
AND mld_kenmerkopdr_verwijder IS NULL),
'leeg')
INTO v_kenmstatusper_cur
FROM DUAL;
-- Als de kenmkerken nog niet bestaan, dan toevoegen bij de opdracht, anders updaten indien gewijzigd.
IF v_kenmstatusoms_cur = 'leeg'
THEN
v_errormsg :=
'(0x434)' || v_mldkey || psubject || v_actie;
INSERT INTO mld_kenmerkopdr (mld_opdr_key,
mld_kenmerk_key,
mld_kenmerkopdr_waarde)
VALUES (v_opdrkey, 601, 'Wacht op uw reactie'); -- Kenmerk 'Status valuemation'
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'Status Valuemation: leeg --> ' || v_kenmstatusoms); -- # voorkomt notificatie
ELSE
v_errormsg :=
'(0x435)' || v_mldkey || psubject || v_actie;
IF v_kenmstatusoms_cur <> v_kenmstatusoms_cur
THEN
UPDATE mld_kenmerkopdr
SET mld_kenmerkopdr_waarde = v_kenmstatusoms
WHERE mld_opdr_key = v_opdrkey
AND mld_kenmerk_key = 601
AND mld_kenmerkopdr_verwijder IS NULL;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'Status Valuemation: '
|| v_kenmstatusoms_cur
|| ' --> '
|| v_kenmstatusoms); -- # voorkomt notificatie
ELSE
v_errormsg :=
'(0x436)' || v_mldkey || psubject || v_actie;
END IF;
END IF;
IF v_kenmstatusper_cur = 'leeg'
THEN
v_errormsg :=
'(0x440)' || v_mldkey || psubject || v_actie;
INSERT INTO mld_kenmerkopdr (mld_opdr_key,
mld_kenmerk_key,
mld_kenmerkopdr_waarde)
VALUES (v_opdrkey,
623,
TO_CHAR (SYSDATE,
'DD-MM-YYYY HH24:MI:SS')) -- Kenmerk 'Status per'
RETURNING mld_kenmerkopdr_waarde
INTO v_kenmstatusper;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'Status per: leeg --> ' || v_kenmstatusper); -- # voorkomt notificatie
ELSE
v_errormsg :=
'(0x441)' || v_mldkey || psubject || v_actie;
UPDATE mld_kenmerkopdr
SET mld_kenmerkopdr_waarde =
TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS')
WHERE mld_opdr_key = v_opdrkey
AND mld_kenmerk_key = 623
AND mld_kenmerkopdr_verwijder IS NULL
RETURNING mld_kenmerkopdr_waarde
INTO v_kenmstatusper;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'Status per:'
|| v_kenmstatusper_cur
|| ' --> '
|| v_kenmstatusper); -- # voorkomt notificatie
END IF;
-- Als er een opdracht_key gevonden kan worden, dan ook de body als notitie meenemen
v_errormsg :=
'(0x442)' || v_mldkey || psubject || v_actie;
INSERT INTO mld_opdr_note (mld_opdr_key,
mld_opdr_note_omschrijving,
prs_perslid_key)
VALUES (v_opdrkey,
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (
pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- Verwijder onnodige witregels
sender);
fac.trackaction ('ORDUPD',
v_opdrkey,
sender,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
END IF;
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Melding kan niet bijgewerkt worden, onbekende opdrachtkey'
|| pfrom
|| '['
|| v_errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
--Hieronder de afhandeling van het bericht wanneer de melding is opgelost in Valuemation.
IF v_actie = 'ORDAFM'
THEN
v_errormsg := '(0x450)' || v_mldkey || psubject || v_actie;
v_vmnr :=
SUBSTR (REGEXP_REPLACE (psubject, '[^0-9]', ''), 1, 12);
IF v_opdrkey IS NOT NULL
THEN
--Normaal zouden we het ticketnummer vanuit Valuemation al moeten hebben vanuit confirmationbericht. Maar als dit bericht niet goed ontvangen is, dan proberen we het ticketnummer alsnog te vullen
IF v_vmnr IS NOT NULL AND v_opdrkey IS NOT NULL
THEN
UPDATE mld_opdr
SET mld_opdr_externnr = v_vmnr
WHERE mld_opdr_key = v_opdrkey
AND mld_opdr_externnr IS NULL;
fac.trackaction (
'ORDUPD',
v_opdrkey,
sender,
NULL,
'#Valuemation nr vanuit confirmationbericht: --> '
|| v_vmnr); -- # voorkomt notificatie
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Valuemation nr kon niet worden gevuld:'
|| pfrom
|| '['
|| v_errormsg
|| v_vmnr
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
UPDATE mld_opdr
SET mld_statusopdr_key = 6, -- Afgemeld
mld_opdr_opmerking =
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (
pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000) -- Verwijder onnodige witregels
WHERE mld_opdr_key = v_opdrkey;
fac.trackaction ('ORDAFM',
v_opdrkey,
sender,
NULL,
'Melding gereed gemeld in Valuemation'); -- # voorkomt notificatie
INSERT INTO mld_opdr_note (mld_opdr_key,
mld_opdr_note_omschrijving,
prs_perslid_key)
VALUES (v_opdrkey,
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (
pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- Verwijder onnodige witregels
sender);
fac.trackaction ('ORDUPD',
v_opdrkey,
sender,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
ELSE
fac.writelog (
'PROCESSEMAIL',
'E',
'Melding kan niet geaccepteerd worden, onbekende opdrachtkey'
|| pfrom
|| '['
|| v_errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END IF;
END IF;
END IF;
END;
ELSE
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog - geen pto herkend', v_errormsg);
END CASE;
-- Log het binnenkomende bericht als dat nodig is.
-- Verwijder records uit de fac_rapport tabel omdat de key uniek moet zijn.
DELETE fac_rapport
WHERE fac_rapport_volgnr = mldkey;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES ('MELDING_MAIL',
mldkey,
SUBSTR (pbody, 1, 1990),
1);
EXCEPTION
WHEN OTHERS
THEN
@@ -258,6 +871,117 @@ EXCEPTION
|| pfrom
|| '['
|| v_errormsg
|| v_mldkey
|| psubject
|| v_actie
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
END;
/
CREATE OR REPLACE PROCEDURE maas_export_valuemation (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errorhint VARCHAR2 (100);
-- Dit haalt het externnummer op van een opdrachtkenmerk indien externnr bij de melding nog leeg is
CURSOR sendagain
IS
SELECT DISTINCT
m.mld_melding_key,
o.mld_opdr_key,
o.mld_opdr_externnr AS externnr
FROM mld_melding m,
mld_opdr o,
mld_kenmerkopdr ko,
mld_kenmerk km,
mld_srtkenmerk skm
WHERE m.mld_melding_key = o.mld_melding_key
AND o.mld_typeopdr_key = 481 --Opdrachttype Aareon.
AND o.mld_opdr_externnr IS NOT NULL
AND o.mld_opdr_key = ko.mld_opdr_key
AND km.mld_kenmerk_key = ko.mld_kenmerk_key
AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key = 421 --Kenmerksoort 'Opnieuw versturen' (checkbox)
AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9) --Afgewezen, afgemeld, verwerkt, afgerond
AND ko.mld_kenmerkopdr_verwijder IS NULL;
CURSOR kenmerken
IS
SELECT ko.mld_kenmerkopdr_key AS kmkey
FROM mld_melding m,
mld_opdr o,
mld_kenmerkopdr ko,
mld_kenmerk km,
mld_srtkenmerk skm
WHERE m.mld_melding_key = o.mld_melding_key
AND o.mld_typeopdr_key = 481 --Opdrachttype Aareon.
AND o.mld_opdr_externnr IS NOT NULL
AND o.mld_opdr_key = ko.mld_opdr_key
AND km.mld_kenmerk_key = ko.mld_kenmerk_key
AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
AND skm.mld_srtkenmerk_key IN (381, 401, 421) --Kenmerksoorten Status Valuemation, Status per en Opnieuw versturen'
AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9); --Afgewezen, afgemeld, verwerkt, afgerond;
BEGIN
v_errorhint := 'init';
-- We zetten de opdracht opnieuw in de wachtrij voor putorder.
-- Ook halen we de kenmerken leeg mbt de status in Valuemation (3 stuks).
FOR rec IN sendagain
LOOP
BEGIN
v_errorhint :=
'Opdracht opnieuw klaar zetten voor verzenden '
|| rec.mld_opdr_key;
-- Eerst zetten we de opdracht opnieuw klaar om te verzenden
UPDATE mld_opdr
SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
WHERE mld_opdr_key = rec.mld_opdr_key;
--Daarna legen we de kenmerken bij de opdracht die we opnieuw klaar zetten om te verzenden
FOR rec1 IN kenmerken
LOOP
BEGIN
v_errorhint := 'Kenmerken legen ' || rec.mld_opdr_key;
UPDATE mld_kenmerkopdr
SET mld_kenmerkopdr_verwijder = SYSDATE
WHERE mld_kenmerkopdr_key = rec1.kmkey
AND mld_kenmerkopdr_key = rec.mld_opdr_key;
END;
END LOOP;
fac.trackaction (
'ORDUPD',
rec.mld_opdr_key,
NULL,
NULL,
'Opdracht opnieuw klaarzetten voor verzending '
|| rec.mld_opdr_key);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'EXP_VALUEMATION',
'E',
'Export tbv opnieuw klaarzetten opdrachten'
|| '['
|| v_errorhint
|| ']',
'OTHERS (error '
|| SQLCODE