BRFM#66276 -- Eerste versie prod

svn path=/Customer/trunk/; revision=51300
This commit is contained in:
Robin Stoker
2021-05-06 15:28:25 +00:00
parent f71385cfc2
commit a4b600f29e

526
BRFM/brfm.sql Normal file
View File

@@ -0,0 +1,526 @@
--
-- $Id$
--
-- Script containing customer specific db-configuration for BRFM.
DEFINE thisfile = 'BRFM.SQL'
DEFINE dbuser = '^BRFM'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
-- Notificatie naar mailadres dat binnenkomt via mail2melding
-- De mailer krijgt van een nieuwe melding een registratiemail en van een opgeloste melding feedback.
CREATE OR REPLACE VIEW brfm_v_noti_newintake
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT 'CUST01',
NULL sender,
NULL receiver,
'Uw melding met nummer '
|| m.mld_melding_key
|| ' is geregistreerd',
m.mld_melding_key,
NULL xkey,
km.mld_kenmerkmelding_waarde xemail,
NULL xmobile
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
fac_tracking t,
fac_srtnotificatie sn,
mld_kenmerkmelding km
WHERE m.mld_melding_key = km.mld_melding_key(+)
AND km.mld_kenmerk_key = 1 -- emailadres
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_key = 4 -- intake
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDNEW'
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval
/ 24
FROM fac_notificatie_job
WHERE UPPER(fac_notificatie_job_view) =
'BRFM_V_NOTI_NEWINTAKE')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE UPPER(fac_notificatie_job_view) =
'BRFM_V_NOTI_NEWINTAKE');
CREATE OR REPLACE VIEW brfm_v_noti_afmintake
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT 'CUST02',
NULL sender,
NULL receiver,
'Uw melding met nummer '
|| m.mld_melding_key
|| ' is afgehandeld',
m.mld_melding_key,
NULL xkey,
km.mld_kenmerkmelding_waarde xemail,
NULL xmobile
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
fac_tracking t,
fac_srtnotificatie sn,
mld_kenmerkmelding km
WHERE m.mld_melding_key = km.mld_melding_key(+)
AND km.mld_kenmerk_key = 1 -- emailadres
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_key = 4 -- intake
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval
/ 24
FROM fac_notificatie_job
WHERE UPPER(fac_notificatie_job_view) =
'BRFM_V_NOTI_AFMINTAKE')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE UPPER(fac_notificatie_job_view) =
'BRFM_V_NOTI_AFMINTAKE');
CREATE OR REPLACE VIEW brfm_v_noti_notintake
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT 'CUST03',
NULL sender,
NULL receiver,
'Er is een opmerking geplaatst bij uw melding met nummer '
|| m.mld_melding_key,
m.mld_melding_key,
NULL xkey,
km.mld_kenmerkmelding_waarde xemail,
NULL xmobile
FROM mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
fac_tracking t,
fac_srtnotificatie sn,
mld_kenmerkmelding km
WHERE m.mld_melding_key = km.mld_melding_key(+)
AND km.mld_kenmerk_key = 1 -- emailadres
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_key = 4 -- intake
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDNOT'
AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval
/ 24
FROM fac_notificatie_job
WHERE UPPER(fac_notificatie_job_view) =
'BRFM_V_NOTI_NOTINTAKE')
AND (SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE UPPER(fac_notificatie_job_view) =
'BRFM_V_NOTI_NOTINTAKE');
CREATE OR REPLACE PROCEDURE brfm_processemail
(pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
puserkey IN NUMBER DEFAULT NULL
)
AS
-- puserkey is alvast een nieuwe parameter die per release 2015.2 er gaat komen (FSN#33503), als gevuld, dan deze als aanvrager van melding gebruiken.
sender prs_perslid.prs_perslid_key%TYPE;
kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
v_mldkey mld_melding.mld_melding_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
kkey mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
v_mailadres_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE;
v_flexprop_mail VARCHAR2(1000);
v_from VARCHAR2 (1000);
subject_regexp fac_setting.fac_setting_default%TYPE;
v_behandelaar_key mld_melding.mld_melding_behandelaar_key%TYPE;
v_mldnum VARCHAR2 (4000);
v_srtdisc VARCHAR2 (4000);
v_flag_on_fenote NUMBER (10);
v_flag_on_bonote NUMBER (10);
BEGIN
-- Personen die mailen staan niet in Facilitor, dus hier gebruiken we een "email user"
SELECT prs_perslid_key, d.prs_kostenplaats_key
INTO sender, kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_key = 141;
CASE pto
WHEN 'servicedesk@brfm.facilitor.nl'
THEN
-- Standaardmelding 124 betreft intake via mail naar de servicedesk
defaultstdmelding := 124;
-- kenmerk-key 1, betreft emailadres van klant
v_mailadres_kenmerk_key := 1;
--ELSE
-- Standaard /default waarden, nu nog n.v.t., er is 1 concrete mailadres en we hebben (nog) geen vangnet voor de rest...
--defaultstdmelding := fac.getsetting ('defaultstdmelding');
END CASE;
-------------------------------------------------
-- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd.
-- Wat is een bestaande melding:
-- 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.
-- 3) Het mailadres van de afzender is dezelfde als die van dat gevonden meldingnummer '1234' in het onderwerp, deze afzender (mailadres) staat in flexprop (zie verderop hieronder)
-- brfm heeft geen vakgroeptype-prefix, dus [alpha] is nu niet van toepassing
-- subject_regexp := '[[:alpha:]]*[[:digit:]]{1,}';
-- Dus alleen het digits-gedeelte...
subject_regexp := '[[:alpha:]]*[[:digit:]]{1,}';
v_mldnum :=
REGEXP_SUBSTR (psubject,
subject_regexp,
1,
1,
'i'); -- 1234, of 12345, of 12, of 1 etc.
v_srtdisc :=
REGEXP_SUBSTR (v_mldnum,
'[[:alpha:]]',
1,
1,
'i'); -- M
v_mldkey := fac.safe_to_number (SUBSTR (v_mldnum, LENGTH (v_srtdisc) + 1)); -- 123, of 12345, of 12, of 1
v_mldkey := fac.safe_to_number (v_mldnum);
-- Uit onderwerp is de vermoedelijke juiste v_mldkey geparsed.
-- Final check: is de afzender van de mail dezelfde als die van v_mldkey, deze afzender (mailadres) staat in flexprop (zie verderop hieronder in gedeelte bij insert melding).
SELECT MAX(SUBSTR(TRIM(km.mld_kenmerkmelding_waarde),1,50))
INTO v_flexprop_mail
FROM mld_kenmerkmelding km
WHERE mld_melding_key = v_mldkey
AND mld_kenmerk_key = v_mailadres_kenmerk_key
AND mld_kenmerkmelding_verwijder IS NULL;
v_from := SUBSTR(TRIM(pfrom),1,50);
IF v_flexprop_mail = v_from
THEN
-- Gotcha: bestaande melding gevonden
-- Van deze afzender is een eerdere melding geregistreerd, die we plakken de subject en body nu als notitie toe (als perslid system-api user).
INSERT INTO mld_melding_note (mld_melding_key,
mld_melding_note_omschrijving,
prs_perslid_key,
mld_melding_note_flag)
VALUES (v_mldkey,
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
sender,
0); -- 0 is NIET zichtbaar FE (want is system-user, zinloos).
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet
IF 1=0 -- brfm heeft geen melding valggetjes, dus onderstaande kan voor nu weg.
THEN
BEGIN
v_flag_on_fenote := fac.getsetting('mld_flag_on_fenote');
v_flag_on_bonote := fac.getsetting('mld_flag_on_bonote');
IF v_flag_on_bonote <> 0 AND v_flag_on_bonote IS NOT NULL
THEN
UPDATE mld_melding
SET mld_melding_flag = v_flag_on_bonote
WHERE mld_melding_key = v_mldkey
AND ( (mld_melding_flag = v_flag_on_fenote)
OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL));
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line( 'Niet gelukt om flag '
|| v_flag_on_bonote
|| ' te zetten.');
END;
END IF; -- brfm heef geen vlaggetjes
-- Default tracking is even goed genoeg
fac.trackaction ('MLDNOT',
v_mldkey,
sender,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || v_mldkey);
-- Bepalen van de behandelaar van deze melding
BEGIN
SELECT mld_melding_behandelaar_key
INTO v_behandelaar_key
FROM mld_melding m, prs_perslid p
WHERE mld_melding_key = v_mldkey
AND mld_melding_behandelaar_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_verwijder IS NULL;
EXCEPTION
WHEN OTHERS
THEN
v_behandelaar_key := NULL;
END;
IF v_behandelaar_key IS NOT NULL
THEN
-- Bestaande melding en behandelaar is bekend.
-- Notificatie naar behandelaar
fac.putnotificationsrtprio (
NULL,
v_behandelaar_key,
'MLDNOB',
v_mldkey,
'Melding ' || v_mldkey || ' is door de klant aangepast.',
2,
NULL,
NULL,
NULL,
2,
NULL);
END IF; -- Bestaande melding en behandelaar is bekend.
ELSE
-- GEEN bestaande melding gevonden, we gaan een nieuwe mnelding toevoegen....
IF defaultstdmelding IS NOT NULL
THEN
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
-- append (as a note?) to an existing melding if #key is found in the subject
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_alg_locatie_key,
mld_melding_omschrijving,
mld_melding_status,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
9, -- BENR Facility Management
SUBSTR (
psubject || CHR (13) || CHR(10)
|| REPLACE (
SUBSTR (pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
defaultstdmelding,
sender,
sender,
kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
-- Vullen van kenmerkwaarde "e-mail adres"
IF pfrom IS NOT NULL AND v_mailadres_kenmerk_key IS NOT NULL
THEN
-- Kenmerk mailadres heeft max. 50 tekens, afkappen dus...
-- zet v_from met maximaal 50 tekens als kenmerk bij de zojuist aangemaakte melding.
INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (v_mldkey, v_mailadres_kenmerk_key, v_from);
END IF;
mld.setmeldingstatus (v_mldkey, 2, sender);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_mldkey);
END;
END IF; -- defaultstdmelding IS NOT NULL
END IF; -- v_flexprop_mail = v_from
-- Bijlagen gaan we proberen toe te voegen, zowel bij een nieuwe als een bestaande melding....
-- Dat doen we bij een flexprop van het type 'M' (=folder met bestanden), door het laagste volgnummer te vinden
-- find the lowest volgnummer of the flexfield of type folder.
SELECT MIN (mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k,
mld_srtkenmerk sk,
mld_stdmelding std,
ins_tab_discipline d
WHERE mld_srtkenmerk_kenmerktype = 'M'
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND std.mld_stdmelding_key = defaultstdmelding
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key
AND k.mld_kenmerk_niveau = 'S')
OR (k.mld_stdmelding_key = d.ins_discipline_key
AND k.mld_kenmerk_niveau = 'D')
OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key
AND k.mld_kenmerk_niveau = 'T'))
AND k.mld_kenmerk_verwijder IS NULL
AND NOT EXISTS
(SELECT mld_kenmerk_volgnummer
FROM mld_kenmerk k1,
mld_srtkenmerk sk1,
mld_stdmelding std1,
ins_tab_discipline d1
WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
AND sk1.mld_srtkenmerk_key =
k1.mld_srtkenmerk_key
AND std1.mld_stdmelding_key =
defaultstdmelding
AND std1.mld_ins_discipline_key =
d1.ins_discipline_key
AND ( (k1.mld_stdmelding_key =
std1.mld_stdmelding_key
AND k1.mld_kenmerk_niveau = 'S')
OR (k1.mld_stdmelding_key =
d1.ins_discipline_key
AND k1.mld_kenmerk_niveau = 'D')
OR (k1.mld_stdmelding_key =
d1.ins_srtdiscipline_key
AND k1.mld_kenmerk_niveau = 'T'))
AND k1.mld_kenmerk_verwijder IS NULL
AND k1.mld_kenmerk_volgnummer <
k.mld_kenmerk_volgnummer);
IF 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 || '\' || kkey || '\');
END IF;
IF errormsg IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'errormsg', errormsg);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet verwerkt worden afzender: '
|| pfrom
|| '['
|| errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder');
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile