From 940609dfee6541d35c6a6ea75c6e95f3434e04d4 Mon Sep 17 00:00:00 2001 From: Sander Schepers Date: Mon, 11 Nov 2024 12:05:59 +0000 Subject: [PATCH] DHLD#84268 Implementatie gemeente Den Helder, Mail2Melding - nieuwe melding (Facilitair & IT) svn path=/Customer/trunk/; revision=66978 --- DHLD/dhld.sql | 359 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 359 insertions(+) diff --git a/DHLD/dhld.sql b/DHLD/dhld.sql index e9fa753a9..abac9ab8b 100644 --- a/DHLD/dhld.sql +++ b/DHLD/dhld.sql @@ -159,6 +159,365 @@ SELECT l.alg_locatie_key, AND d.ins_alg_ruimte_key = r.alg_ruimte_key AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+); +CREATE OR REPLACE PROCEDURE dhld_processemail (pfrom IN VARCHAR2, + pto IN VARCHAR2, + psubject IN VARCHAR2, + pbody IN VARCHAR2, + psessionid IN VARCHAR2, + pemailkey IN NUMBER) +AS + v_sender prs_perslid.prs_perslid_key%TYPE; + v_perslid_key prs_perslid.prs_perslid_key%TYPE; + v_kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE; + v_mldstat mld_melding.mld_melding_status%TYPE; + v_stdmelding mld_stdmelding.mld_stdmelding_key%TYPE; + v_stduitvoer mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE; + v_errormsg fac_result.fac_result_waarde%TYPE; + v_from VARCHAR2 (4000); + -- v_fromaddr VARCHAR2 (4000); + v_body VARCHAR2 (4000); + m_body VARCHAR2 (4000); + v_mldkey mld_melding.mld_melding_key%TYPE; + v_mailorigin mld_kenmerk.mld_kenmerk_key%TYPE; + v_mailattach mld_kenmerk.mld_kenmerk_key%TYPE; + v_locatiekey alg_locatie.alg_locatie_key%TYPE; + v_stroming VARCHAR2 (255); + v_folder_kkey NUMBER (10); + v_opdracht_id VARCHAR2 (255); + v_opdracht_key NUMBER (10); + v_typeopdr_key NUMBER (10); + v_count NUMBER (10); + c_onbekend_key NUMBER (10) := 3; -- Facilitor + v_van_email VARCHAR2 (255) := ''; +BEGIN + v_sender := 3; --Standaard de persoon Facilitor + v_stdmelding := fac.safe_to_number (fac.getsetting ('defaultstdmelding')); + v_mailorigin := 261; --Kenmerk_key oorspronkelijke mail + v_mailattach := 1; --Kenmerk_key bijlagen + + -- Bepalen Stroming: Facilitair of ICT (of anders) + CASE + WHEN UPPER (pto) LIKE 'MELDPUNT@%' + THEN + v_stdmelding := 242; --Overige meldingen Facilitair + v_stroming := 'melding'; + WHEN UPPER (pto) LIKE 'HELPDESK@%' + THEN + v_stdmelding := 243; --Overige meldingen ICT + v_stroming := 'melding'; + WHEN UPPER (pto) LIKE 'REPLY_ORDERS@%' + THEN + v_stroming := 'opdracht'; + ELSE + v_stdmelding := + fac.safe_to_number (fac.getsetting ('defaultstdmelding')); + v_stroming := 'melding'; + END CASE; + + -- Verwijder de Bounce Address Tag Validation + + v_errormsg := 'Verwijderen Bounce Address Tag'; + + IF pfrom LIKE 'prvs=%' + THEN + v_from := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1); + ELSE + v_from := pfrom; + END IF; + + v_body := pbody; + m_body := pbody; + + -- Valideer de sender in pfrom: kennen we deze? + v_errormsg := 'Valideren afzender'; + + SELECT MIN (p.prs_perslid_key), MIN (d.prs_kostenplaats_key) + INTO v_sender, v_kostenplaats + FROM prs_perslid p, prs_afdeling d + WHERE p.prs_afdeling_key = d.prs_afdeling_key + AND p.prs_perslid_verwijder IS NULL + AND UPPER (prs_perslid_email) = UPPER (v_from); + + CASE + WHEN v_stroming = 'melding' + THEN + --Hieronder de acties die gedaan moeten worden. + BEGIN + v_errormsg := 'Melding aanmaken' || pfrom || psubject; + v_mldstat := 2; -- Standaard de status in Nieuw (2). + v_stduitvoer := + mld.getstduitvoer (v_stdmelding, + NULL, + NULL, + NULL); + + INSERT INTO mld_melding (mld_melding_module, + mld_meldbron_key, + mld_melding_datum, + mld_melding_onderwerp, + mld_melding_omschrijving, + mld_melding_status, + mld_melding_t_uitvoertijd, + mld_stdmelding_key, + mld_alg_locatie_key, + mld_melding_externnr, + prs_perslid_key, + prs_perslid_key_voor, + prs_kostenplaats_key, + mld_melding_spoed) + VALUES ( + 'MLD', + 4, -- email + SYSDATE, + SUBSTR (psubject, 1, 200), + SUBSTR ( + REPLACE ( + SUBSTR ( + 'Mail van: ' + || v_from + || ':' + || CHR (13) + || CHR (10) + || v_body, + 1, + 4000), + CHR (13) + || CHR (10) + || CHR (13) + || CHR (10), + CHR (13) || CHR (10)), + 1, + 4000), -- verwijder onnodige witregels + v_mldstat, + NULL, -- v_stduitvoer + v_stdmelding, + v_locatiekey, -- Locatie bepaald via standaardlocatie v_sender (indien ingesteld) + NULL, + v_sender, + v_sender, + v_kostenplaats, + 3) + RETURNING mld_melding_key + INTO v_mldkey; + + v_errormsg := 'Status melding'; + mld.setmeldingstatus (v_mldkey, v_mldstat, v_sender); + + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, + 'maillog', + 'Geregistreerd onder melding ' || v_mldkey); + END; + + IF v_mldkey IS NOT NULL + THEN + BEGIN + -- Originele email wordt opgeslagen + v_errormsg := + 'Oorspronkelijke email opslaan' + || v_mldkey + || psubject; + + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES ( + psessionid, + 'kenmerkorgmailpath', + 'MLD\M' + || TO_CHAR (TRUNC (v_mldkey / 1000), + 'FM0000') + || '___\M' + || v_mldkey + || '\' + || v_mailorigin + || '\'); + END; + END IF; + + + v_errormsg := 'Fout toevoegen bijlage(n)'; + + IF v_mailattach IS NOT NULL + THEN + BEGIN + -- Toevoegen bijlage(n) + v_errormsg := 'Bijlagen opslaan' || v_mldkey || psubject; + + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES ( + psessionid, + 'kenmerkpath', + 'MLD\M' + || TO_CHAR (TRUNC (v_mldkey / 1000), + 'FM0000') + || '___\M' + || v_mldkey + || '\' + || v_mailattach + || '\'); + END; + END IF; + WHEN v_stroming = 'opdracht' + THEN + -- Probeer noteur te bepalen op basis van e-mail adres tussen '<>' na eerste voorkomen 'Van:'! + v_errormsg := 'Fout bepalen noteur'; + + -- Valideer de sender in v_from: kennen we deze? + SELECT MIN (prs_perslid_key), + MIN (d.prs_kostenplaats_key), + p.prs_perslid_email + INTO v_sender, v_kostenplaats, v_van_email + FROM prs_perslid p, prs_afdeling d + WHERE p.prs_afdeling_key = d.prs_afdeling_key + AND prs_perslid_verwijder IS NULL + AND UPPER (p.prs_perslid_email) = UPPER (v_from); + + SELECT COUNT (*) + INTO v_count + FROM prs_contactpersoon + WHERE prs_contactpersoon_email IS NULL + AND prs_perslid_key IS NOT NULL + AND UPPER (prs_contactpersoon_email) LIKE + UPPER (v_van_email) || '%'; + + IF v_count = 1 + THEN + SELECT prs_perslid_key + INTO v_perslid_key + FROM prs_contactpersoon + WHERE prs_contactpersoon_email IS NULL + AND prs_perslid_key IS NOT NULL + AND UPPER (prs_contactpersoon_email) LIKE + UPPER (v_van_email) || '%'; + ELSE -- Noteur kan niet 1-duidig worden bepaald, dus Onbekend! + SELECT prs_perslid_key + INTO v_perslid_key + FROM prs_v_aanwezigperslid + WHERE prs_perslid_key = c_onbekend_key; + END IF; + + 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_exist_ticket plus ' '! + v_opdracht_id := + SUBSTR (v_opdracht_id, + 1, + REGEXP_INSTR (v_opdracht_id, '\s') - 1); -- Gedeelte tot eerste white space in v_exist_ticket! + END IF; + + v_errormsg := 'Fout bepalen opdracht ' || v_opdracht_id; + + SELECT mld_opdr_key, mld_typeopdr_key + INTO v_opdracht_key, v_typeopdr_key + 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')); + + + + 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, + pfrom + || CHR (13) + || CHR (10) + || psubject + || CHR (13) + || CHR (10) + || SUBSTR (v_body, 1, 2000)); + + v_errormsg := 'Fout bijwerken opdracht-kleurbolletje'; + + UPDATE mld_opdr + SET mld_opdr_flag = 1 -- Zwart + WHERE mld_opdr_key = v_opdracht_key; + + -- Find the lowest volgnummer of the Folder-flexfield. + v_errormsg := 'Fout toevoegen opdracht-bijlage'; + + SELECT MIN (k1.mld_kenmerk_key) + INTO v_folder_kkey + FROM mld_kenmerk k1, mld_srtkenmerk sk1 + WHERE k1.mld_typeopdr_key = v_typeopdr_key + AND k1.mld_kenmerk_verwijder IS NULL + AND k1.mld_kenmerk_niveau = 'O' + AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key + AND sk1.mld_srtkenmerk_kenmerktype = 'M' + AND NOT EXISTS + (SELECT 1 + FROM mld_kenmerk k2, mld_srtkenmerk sk2 + WHERE k2.mld_typeopdr_key = v_typeopdr_key + AND k2.mld_kenmerk_verwijder IS NULL + AND k2.mld_kenmerk_niveau = 'O' + AND k2.mld_srtkenmerk_key = + sk2.mld_srtkenmerk_key + AND sk2.mld_srtkenmerk_kenmerktype = 'M' + AND k2.mld_kenmerk_volgnummer < + k1.mld_kenmerk_volgnummer); + + 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 + || '\'); + END IF; + END CASE; +EXCEPTION + WHEN OTHERS + THEN + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, 'maillog', v_errormsg); + + fac.writelog ( + 'PROCESSEMAIL', + 'E', + 'Mail kon niet ingelezen worden afzender:' + || pfrom + || '[' + || v_errormsg + || v_mldkey + || psubject + || ']', + 'OTHERS (error ' + || SQLCODE + || '/' + || SUBSTR (SQLERRM, 1, 100) + || ')'); +END; +/ + ------ payload end ------ SET DEFINE OFF