DHLD#84268 Implementatie gemeente Den Helder, Mail2Melding - nieuwe melding (Facilitair & IT)
svn path=/Customer/trunk/; revision=66978
This commit is contained in:
359
DHLD/dhld.sql
359
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
|
||||
|
||||
Reference in New Issue
Block a user