GOKO#88564 -- Koppeling Facilitor en Comlog - inpassen processemail
svn path=/Customer/trunk/; revision=69333
This commit is contained in:
289
GOKO/goko.sql
289
GOKO/goko.sql
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user