diff --git a/FBEA/FBEA.sql b/FBEA/FBEA.sql index 1b68a6009..5d9679cc0 100644 --- a/FBEA/FBEA.sql +++ b/FBEA/FBEA.sql @@ -43,10 +43,19 @@ AS v_count NUMBER; sender prs_perslid.prs_perslid_key%TYPE; defaultstdmelding fac_setting.fac_setting_default%TYPE; + subject_regexp fac_setting.fac_setting_default%TYPE; v_newkey mld_melding.mld_melding_key%TYPE; v_gebouwkey mld_melding.mld_alg_onroerendgoed_keys%TYPE; v_locatiekey mld_melding.mld_alg_locatie_key%TYPE; + v_mldnum VARCHAR2 (4000); + v_mldkey mld_melding.mld_melding_key%TYPE; + v_email fac_notificatie.fac_notificatie_receiver_email%TYPE; + v_check NUMBER; + v_pbody VARCHAR2 (4000); + v_folder_kkey mld_kenmerk.mld_kenmerk_key%TYPE; + -- kkey mld_kenmerk.mld_kenmerk_key%TYPE; errormsg fac_result.fac_result_waarde%TYPE; + BEGIN -- Valideer de sender in pfrom: kennen we deze? SELECT COUNT (*) @@ -85,7 +94,6 @@ BEGIN -- 901 Bibliotheek Woudenberg - Boerderij -- 921 Bibliotheek Leusden Boerderij - WHEN UPPER (pto) LIKE 'HETEEMHUIS@%' THEN v_gebouwkey := '1'; @@ -96,9 +104,131 @@ BEGIN NULL; END CASE; - -- suggested extensions: - -- check for MLDUSE-write autorisations - -- parse the subject to find an appropriate stdmelding, if uniquely possible + -- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd. + -- 1) Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp het meldingnummer '1234' kan worden opgevist, met ervoor en erna een spatie + -- 2) Het 1e nummer dat in het onderwerp staat wordt gezien als meldingnummer, eventuele andere nummers later in het onderwerp worden genegeerd. + subject_regexp := '[[:digit:]]{1,}'; + v_mldnum := + REGEXP_SUBSTR (psubject, + subject_regexp, + 1, + 1, + 'i'); + + v_mldkey := fac.safe_to_number (v_mldnum); + + --- kijken of er inderdaad een melding bestaat met het gevonden nummer + SELECT COUNT (m.mld_melding_key) + INTO v_check + FROM mld_melding m + WHERE m.mld_melding_key = v_mldkey; + + IF v_check = 1 + THEN + -- Bestaande melding gevonden dus we zetten de mail als notitie bij deze melding + BEGIN + INSERT INTO mld_melding_note (mld_melding_key, + mld_melding_note_omschrijving, + prs_perslid_key) + VALUES ( + v_mldkey, + SUBSTR ( + psubject + || CHR (13) + || CHR (10) + || REPLACE ( + SUBSTR (v_pbody, + 1, + 4000 - (LENGTH (psubject) + 2)), + CHR (13) + || CHR (10) + || CHR (13) + || CHR (10), + CHR (13) || CHR (10)), + 1, + 4000), -- verwijder onnodige witregels + sender); + + --- vlaggeteje melding bij aanvrager zetten + UPDATE mld_melding + SET mld_melding_actiecode = 2 + WHERE mld_melding_key = v_mldkey; + + --- notificatie naar (niet geregistreerd) aanvrager + SELECT COALESCE (m.mld_melding_email_ext, + p.prs_perslid_email) email + INTO v_email + FROM mld_melding m, prs_perslid p + WHERE m.prs_perslid_key_voor = p.prs_perslid_key + AND m.mld_melding_key = v_mldkey; + + INSERT INTO fac_notificatie (fac_srtnotificatie_key, + fac_notificatie_status, + prs_perslid_key_receiver, + fac_notificatie_receiver_email, + fac_notificatie_oms, + fac_notificatie_refkey, + fac_notificatie_prioriteit) + VALUES ( + 69, --- mldnot + 2, + NULL, + v_email, + 'Er is een opmerking geplaatst bij melding ' + || TO_CHAR (v_mldkey), + v_mldkey, + 2); + + -- Find the lowest volgnummer of the Folder-flexfield. + SELECT MIN (k1.mld_kenmerk_key) + INTO v_folder_kkey + FROM mld_stdmelding sm1, + ins_tab_discipline td1, + mld_kenmerk k1, + mld_srtkenmerk sk1, + mld_melding m + WHERE m.mld_stdmelding_key = sm1.mld_stdmelding_key + AND m.mld_melding_key = v_mldkey + AND sm1.mld_ins_discipline_key = td1.ins_discipline_key + AND k1.mld_kenmerk_verwijder IS NULL + AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key + AND sk1.mld_srtkenmerk_kenmerktype = 'M' + AND ( ( k1.mld_stdmelding_key = + sm1.mld_stdmelding_key + AND k1.mld_kenmerk_niveau = 'S') + OR ( k1.mld_stdmelding_key = + td1.ins_discipline_key + AND k1.mld_kenmerk_niveau = 'D') + OR ( k1.mld_stdmelding_key = + td1.ins_srtdiscipline_key + AND k1.mld_kenmerk_niveau = 'T') + OR (k1.mld_kenmerk_niveau = 'A')); + + 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\M' + || TO_CHAR (TRUNC (v_mldkey / 1000), 'FM0000') + || '___\M' + || v_mldkey + || '\' + || v_folder_kkey + || '\'); + END IF; + + fac.trackaction ('MLDTRK', + v_mldkey, + NULL, + NULL, + 'Nieuwe notitie via Mail2melding'); + END; + ELSE + IF v_gebouwkey IS NOT NULL THEN BEGIN @@ -159,6 +289,9 @@ BEGIN VALUES (psessionid, 'errormsg', errormsg); END IF; END IF; + + END IF; + EXCEPTION WHEN OTHERS THEN