GOKO#88564 -- Koppeling Facilitor en Comlog - inpassen processemail

svn path=/Customer/trunk/; revision=69333
This commit is contained in:
Jos Migo
2025-06-06 14:54:19 +00:00
parent dae40117df
commit fc69c112c1

View File

@@ -31,6 +31,12 @@ AS
-- PROCEDURE bes_after_insert (p_bes_bestelling_key IN NUMBER);
PROCEDURE processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER);
FUNCTION get_kenmerk (p_module IN VARCHAR2,
p_kenmerk_key IN NUMBER,
@@ -47,6 +53,285 @@ END;
CREATE OR REPLACE PACKAGE BODY GOKO
AS
PROCEDURE processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
c_leverancier_M2M_key NUMBER (10) := 3581; -- Leverancier_key M2M - COMLOG
c_folder_opdr_kkey NUMBER (10) := 4 ; -- standaard folder_kenmerk_key tbv opdrachten bij GO
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_perslid_key_noteur NUMBER (10);
v_folder_kkey NUMBER (10);
v_forward_soort NUMBER (1) ; -- 0 = De mail wordt direct van aanvrager doorgestuurd naar het facilitor-emailadres
-- 1 = De mail wordt via eigen centrale klant-postbus automatisch geforward naar het facilitor-emailadres
-- 2 = De mail wordt via eigen centrale klant-postbus handmatig aangevuld en daarna geforward naar het facilitor-emailadres
v_mailbody_notitie VARCHAR2 (4000) := '';
v_mailbody_notitie_1 VARCHAR2 (4000) := '';
v_mailbody_notitie_2 VARCHAR2 (4000) := '';
v_mailbody_notitie_3 VARCHAR2 (4000) := '';
v_opdracht_id VARCHAR2 (255);
v_opdracht_key NUMBER (10);
v_typeopdr_key NUMBER (10);
v_perslid_key_behandelaar NUMBER (10);
v_opdracht_nr VARCHAR2 (200);
v_comlog_nr VARCHAR2 (200);
BEGIN
-- ALGEMEEN
--- 1. NOTITIES SPLITSEN
-- 1e notitie -----
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) = 0
THEN
v_mailbody_notitie_1 := pbody ;
END IF;
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) > 0
THEN
-- dan hier de eerste notitie eruit halen (= alles voor de '1e Van:-regel')
v_mailbody_notitie_1 := LTRIM(SUBSTR (pbody, 1, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1)-1)) ;
END IF;
-- 2e notitie
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) = 0
THEN
-- dan hier de notitie eruit halen (= alles na de '1e Van:-regel' tot aan einde)
v_mailbody_notitie_2 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1)) ;
END IF;
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) > 0
THEN
-- dan hier de tweede notitie eruit halen (= alles vanaf de '1e Van:-regel' t/m de '2e Van:-regel)
v_mailbody_notitie_2 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1), REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) - REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1)) ;
END IF;
-- 3e notitie
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 3) = 0
THEN
-- dan hier de notitie eruit halen (= alles na de '2e Van:-regel' tot aan einde)
v_mailbody_notitie_3 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2)) ;
END IF;
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 3) > 0
THEN
-- dan hier de tweede notitie eruit halen (= alles vanaf de '1e Van:-regel' t/m de '2e Van:-regel)
v_mailbody_notitie_3 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2), REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 3) - REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2)) ;
END IF;
-- Voor koppeling geldt dat vanuit COMLOG altijd een uitgeklede vervolgnotitie wordt terugegeven. Dus:
v_forward_soort := 0 ;
IF v_forward_soort = 0
THEN
v_mailbody_notitie := v_mailbody_notitie_1 ;
END IF;
IF v_forward_soort = 1
THEN
v_mailbody_notitie := v_mailbody_notitie_2 ;
END IF;
IF v_forward_soort = 2
THEN
v_mailbody_notitie := v_mailbody_notitie_3 ;
END IF;
--- 2. HET FROM-ADRES VAN DE MAILER/NOTEUR BEPALEN UIT MAILBODY
-- Dus eerst op zoek naar eerste VAN-regel - NIET VAN TOEPASSING VOOR GOKO
---- MAILINSTELLING - SERVICEDESK TBV MELDINGEN
CASE
WHEN UPPER (pto) LIKE 'SERVICEDESK@%'
THEN
-- NIET VAN TOEPASSING VOOR GOKO
NULL;
---- MAILINSTELLING - TBV OPDRACHTEN COMLOG
WHEN UPPER (pto) LIKE 'COMLOG_SUPPORT@%'
THEN
-- Noteur - vaste contactpersoon
v_errormsg := 'Fout bepalen noteur';
v_perslid_key_noteur := c_leverancier_M2M_key;
-- Opdrachtnr uit onderwerpveld halen
v_errormsg := 'Fout bepalen opdracht';
v_opdracht_id := psubject;
IF REGEXP_INSTR (v_opdracht_id, '\d') > 0
THEN
v_opdracht_id := SUBSTR (v_opdracht_id, REGEXP_INSTR (v_opdracht_id, '\d')) || ' '; -- Gedeelte vanaf eerste cijfer in v_opdracht_id plus ' '
v_opdracht_id := SUBSTR (v_opdracht_id, 1, REGEXP_INSTR (v_opdracht_id, '\s') - 1); -- Gedeelte tot eerste white space in v_opdracht_id
END IF;
-- Opdrachtnr zoeken in Facilitor
v_errormsg := 'Fout bepalen opdracht ' || v_opdracht_id;
SELECT mld_opdr_key, mld_typeopdr_key, prs_perslid_key, TO_CHAR (mld_melding_key) || '/' || TO_CHAR (mld_opdr_bedrijfopdr_volgnr) opdracht_nr
INTO v_opdracht_key, v_typeopdr_key, v_perslid_key_behandelaar, v_opdracht_nr
FROM mld_opdr
WHERE TO_CHAR (mld_melding_key) || '/' || TO_CHAR (mld_opdr_bedrijfopdr_volgnr) = SUBSTR (v_opdracht_id, REGEXP_INSTR (v_opdracht_id, '\d'));
-- De notitie toevoegen aan deze opdracht
v_errormsg := 'Fout toevoegen opdracht-notitie';
INSERT INTO mld_opdr_note (mld_opdr_key, prs_perslid_key, mld_opdr_note_omschrijving)
VALUES (v_opdracht_key, v_perslid_key_noteur, SUBSTR (v_mailbody_notitie, 1, 2000));
-- De gesplitste notities ook even wegschrijven - Tbv mijn eigen controle KOPPELING
v_errormsg := 'Opdrachtnotitie wegschrijven in kenmerkveld';
IF v_typeopdr_key = 5 -- opdracht
THEN
BEGIN mld.upsertopdrachtkenmerk (1961, v_opdracht_key, v_mailbody_notitie_1); END;
BEGIN mld.upsertopdrachtkenmerk (1962, v_opdracht_key, v_mailbody_notitie_2); END;
BEGIN mld.upsertopdrachtkenmerk (1963, v_opdracht_key, v_mailbody_notitie_3); END;
END IF;
-- De comlog-referentie wegschrijven
-- Bij uitsturen opdracht krijgen we een bevestiging-notitie terug met ticketnr van comlog (#C-nr)
---- deze gaan we opnemen onder opdrachtkenmerk-key 1741 (kenmerksoort 461) en deze wordt vervolgens in onderwerpveld bij vervolgnotities mee terug gegeven zodat de verdere correspondentie op deze #C-opdracht aan comlog-kant verwerkt wordt
---- voorbeeld bevestiging-notitie: "De melding is ontvangen en heeft ticketnummer #C8353-8233 gekregen"
v_errormsg := 'Fout toevoegen comlog-referentie aan facilitor-opdracht';
-- Alleen bij 1e terugkoppeling - dus als kenmerk_key 1741 leeg is, gaan we dit uitvoeren
SELECT MAX(mld_kenmerkopdr_waarde)
INTO v_comlog_nr
FROM mld_kenmerkopdr
WHERE mld_opdr_key = v_opdracht_key AND mld_kenmerk_key = 1741
AND mld_kenmerkopdr_verwijder IS NULL;
IF v_comlog_nr IS NULL
THEN
-- eerst comlog_nr bepalen uit onderwerpveld
SELECT SUBSTR(v_mailbody_notitie,
INSTR(v_mailbody_notitie, '#C'), -- startpositie
11 -- aantal posities
) comlog_nr
INTO v_comlog_nr
FROM DUAL ;
-- kenmerk vullen
BEGIN mld.upsertopdrachtkenmerk (1741, v_opdracht_key, v_comlog_nr); END;
END IF;
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! - DEZE NOG CHECKEN OF DIT KLOPT EN GOED GAAT ZO
v_errormsg := 'Fout BO_status zetten';
UPDATE mld_opdr
SET mld_opdr_actiecode = 132 -- BO + Attentie
WHERE mld_opdr_key = v_opdracht_key;
-- Notificatie naar behandelaar (ORDNOB)
v_errormsg := 'Fout bij notificatie naar behandelaar doorsturen';
IF v_perslid_key_behandelaar IS NOT NULL
THEN
fac.putnotificationsrtprio (
NULL,
v_perslid_key_behandelaar,
'ORDNOB',
v_opdracht_key,
'Opdracht ' || v_opdracht_nr || ' is door de COMLOG SUPPORT aangepast ',
2, -- poptstatus
NULL,
NULL,
NULL,
3, -- psender - facilitor
NULL);
END IF;
-- Bijlage(n) eml in foldermap wegschrijven
v_errormsg := 'Fout toevoegen bijlagen aan opdracht';
v_folder_kkey := c_folder_opdr_kkey ;
IF v_folder_kkey IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'kenmerkpath', 'MLD\O' || TO_CHAR (TRUNC (v_opdracht_key / 1000), 'FM0000') || '___\O' || v_opdracht_key || '\' || v_folder_kkey || '\');
-- originele email wordt opgeslagen bij de opdracht - NOG TESTEN IN ACCEPT!!
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'kenmerkorgmailpath',
'MLD\O'
|| TO_CHAR (TRUNC (v_opdracht_key / 1000),
'FM0000')
|| '___\O'
|| v_opdracht_key
|| '\'
|| v_folder_kkey
|| '\');
END IF;
ELSE
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder ');
END CASE;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog ('PROCESSEMAIL',
'E',
'GOKO_processemail afgebroken!',
'[' || pfrom || '] ' || v_errormsg);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder ');
COMMIT;
END;
FUNCTION get_kenmerk (p_module IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_link_key IN NUMBER)
@@ -1703,8 +1988,8 @@ SELECT mld_uitvoerende_key,
' - ' || opdrachtnr || DECODE(prioriteit, '3 - NORMAAL', '', ' (prio' || SUBSTR(prioriteit, 4) || ')' ) || CHR(10)
|| naam_uitvoerder || CHR(10)
|| CASE
WHEN locatie_diversen IS NOT NULL THEN locatie_plaats || CHR(10)
ELSE 'Diverse locaties: ' || locatie_diversen || CHR(10) END
WHEN locatie_diversen IS NOT NULL THEN locatie_diversen || CHR(10)
ELSE 'Locatie: ' || locatie_plaats || CHR(10) END
|| 'Status: ' || status_kalender || CHR(10)
|| CASE
WHEN intern = 1 THEN 'Uren (indicatief): ' || DECODE (intern_uren_gepland, NULL, '<onbekend>', TO_CHAR(intern_uren_gepland)) || CHR(10)