DHLD#84268 Implementatie gemeente Den Helder, Mail2Melding - nieuwe melding (Facilitair & IT)

svn path=/Customer/trunk/; revision=66978
This commit is contained in:
Sander Schepers
2024-11-11 12:05:59 +00:00
parent 6a21f2df50
commit 940609dfee

View File

@@ -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