947 lines
36 KiB
SQL
947 lines
36 KiB
SQL
--
|
|
-- $Id$
|
|
--
|
|
-- Script containing customer specific db-configuration for BRCF.
|
|
DEFINE thisfile = 'BRCF.SQL'
|
|
DEFINE dbuser = 'BRCF'
|
|
|
|
SET ECHO ON
|
|
SET DEFINE ON
|
|
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
|
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
|
|
WHENEVER SQLERROR CONTINUE;
|
|
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
|
|
SPOOL &fcltlogfile
|
|
WHENEVER SQLERROR EXIT;
|
|
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
|
|
WHENEVER SQLERROR CONTINUE;
|
|
---------------------------------------
|
|
PROMPT &fcltcusttxt
|
|
---------------------------------------
|
|
SET DEFINE OFF
|
|
|
|
------ payload begin ------
|
|
|
|
CREATE OR REPLACE VIEW brcf_v_noti_bezoeker
|
|
AS
|
|
SELECT
|
|
x.sender,
|
|
x.receiver,
|
|
x.text,
|
|
x.code,
|
|
x.key,
|
|
x.xkey,
|
|
x.xemail,
|
|
x.xmobile,
|
|
NULL fac_srtnotificatie_key,
|
|
NULL attachments,
|
|
NULL xsender
|
|
FROM (SELECT NULL sender,
|
|
NULL receiver,
|
|
'Uw bezoek aan Brocacef op '
|
|
|| TO_CHAR (bez_afspraak_datum, 'DD-MM-YYYY')
|
|
|| ' , '
|
|
|| TO_CHAR (bez_afspraak_datum, 'HH24:MI')
|
|
text,
|
|
'CUST01' code,
|
|
a.bez_afspraak_key key,
|
|
bez_bezoekers_key xkey,
|
|
(SELECT ba.bez_kenmerkwaarde_waarde
|
|
FROM bez_kenmerkwaarde ba
|
|
WHERE ba.bez_kenmerk_key = 1001
|
|
AND ba.bez_bezoekers_key = b.bez_bezoekers_key)
|
|
xemail,
|
|
NULL xmobile,
|
|
a.bez_afspraak_datum
|
|
FROM bez_afspraak a, bez_bezoekers b
|
|
WHERE a.bez_afspraak_key = b.bez_afspraak_key
|
|
AND a.bez_afspraak_datum BETWEEN SYSDATE AND SYSDATE + 1-- Binnen 1 dag voor de afspraak versturen, bezoek voor dezelfde dag krijgt zo alsnog een mail
|
|
AND NOT EXISTS
|
|
(SELECT 1
|
|
FROM fac_tracking t, fac_srtnotificatie sn
|
|
WHERE t.fac_srtnotificatie_key = 192 --BEZTRK
|
|
AND t.fac_tracking_refkey = a.bez_afspraak_key
|
|
AND b.bez_bezoekers_aanmaak < t.fac_tracking_datum))
|
|
x
|
|
WHERE x.xemail IS NOT NULL;
|
|
|
|
CREATE OR REPLACE VIEW brcf_v_rap_afdlogin
|
|
(
|
|
afdeling,
|
|
laatste_login,
|
|
kostenplaats
|
|
)
|
|
AS
|
|
SELECT pa.prs_afdeling_omschrijving,
|
|
MAX (p.prs_perslid_login),
|
|
pk.prs_kostenplaats_nr
|
|
FROM prs_afdeling pa, prs_perslid p, prs_kostenplaats pk
|
|
WHERE p.prs_afdeling_key = pa.prs_afdeling_key
|
|
AND pa.prs_kostenplaats_key = pk.prs_kostenplaats_key
|
|
AND p.prs_perslid_verwijder IS NULL
|
|
GROUP BY (pa.prs_afdeling_omschrijving, pk.prs_kostenplaats_nr);
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_schonen_bezoekers
|
|
AS
|
|
BEGIN
|
|
ANO.anonymizebez (SYSDATE - (10 * 14), SYSDATE - fac.getsetting ('anonymize_period'));
|
|
END;
|
|
/
|
|
|
|
--Onderstaande procedure is voor het toekennen van autorisatiegroepen nadat de IAM koppeling een nieuw prs heeft aangemaakt.
|
|
--Standaard krijgt iedereen DEFAULT, dat is voor de apothekers.
|
|
--Niet-apothekers (te herkennen aan kostenplaatsnummer < 50000) worden overgezet naar de FE Hoofdkantoor groep en uit de Default groep gehaald
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_toekennen_authgroep
|
|
AS
|
|
CURSOR c1
|
|
IS
|
|
SELECT p.prs_perslid_key,
|
|
pk.prs_kostenplaats_nr,
|
|
pk.prs_kostenplaats_omschrijving
|
|
FROM prs_perslid p, prs_afdeling pa, prs_kostenplaats pk
|
|
WHERE p.prs_afdeling_key = pa.prs_afdeling_key
|
|
AND pa.prs_kostenplaats_key = pk.prs_kostenplaats_key
|
|
AND p.prs_perslid_verwijder IS NULL
|
|
AND fac.safe_to_number (prs_kostenplaats_nr) < 50000
|
|
AND NOT EXISTS
|
|
(SELECT 'x'
|
|
FROM fac_gebruikersgroep f
|
|
WHERE f.fac_groep_key = 121 -- Komt nog niet voor in de hoofdkantoor groep
|
|
AND f.prs_perslid_key = p.prs_perslid_key);
|
|
BEGIN
|
|
FOR rec IN c1
|
|
LOOP
|
|
BEGIN
|
|
DELETE FROM fac_gebruikersgroep -- Eerst persoon verwijderen uit de default apothekers groep.
|
|
WHERE prs_perslid_key = rec.prs_perslid_key
|
|
AND fac_groep_key = 1;
|
|
|
|
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) -- Dan persoon toekennen aan de hoofdkantoor groep
|
|
VALUES (121, rec.prs_perslid_key);
|
|
END;
|
|
END LOOP;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_wp_toekenning
|
|
AS
|
|
CURSOR c1
|
|
IS
|
|
SELECT p.prs_perslid_key, pk.prs_kostenplaats_nr, r.alg_ruimte_key
|
|
FROM prs_perslid p,
|
|
prs_afdeling pa,
|
|
prs_kostenplaats pk,
|
|
alg_gebouw g,
|
|
alg_verdieping v,
|
|
alg_ruimte r
|
|
WHERE p.prs_afdeling_key = pa.prs_afdeling_key
|
|
AND pa.prs_kostenplaats_key = pk.prs_kostenplaats_key
|
|
AND p.prs_perslid_verwijder IS NULL
|
|
AND pa.prs_afdeling_upper = 'CC-' || g.alg_gebouw_upper
|
|
AND pa.prs_afdeling_verwijder IS NULL
|
|
AND g.alg_gebouw_key = v.alg_gebouw_key
|
|
AND v.alg_verdieping_key = r.alg_verdieping_key
|
|
AND r.alg_ruimte_upper_nr = '_'
|
|
AND NOT EXISTS
|
|
(SELECT 'x'
|
|
FROM prs_werkplek pw, prs_perslidwerkplek ppw
|
|
WHERE p.prs_perslid_key = ppw.prs_perslid_key
|
|
AND ppw.prs_werkplek_key = pw.prs_werkplek_key
|
|
AND pw.prs_alg_ruimte_key = r.alg_ruimte_key)
|
|
|
|
UNION ALL
|
|
SELECT p.prs_perslid_key, pk.prs_kostenplaats_nr, r.alg_ruimte_key
|
|
FROM prs_perslid p,
|
|
prs_afdeling pa,
|
|
prs_kostenplaats pk,
|
|
alg_ruimte r
|
|
WHERE p.prs_afdeling_key = pa.prs_afdeling_key
|
|
AND pa.prs_kostenplaats_key = pk.prs_kostenplaats_key
|
|
AND p.prs_perslid_verwijder IS NULL
|
|
AND fac.safe_to_number (pk.prs_kostenplaats_nr) < 50000
|
|
AND r.alg_ruimte_key = 4127 -- Hoofdkantoor dummy ruimte
|
|
AND p.prs_perslid_verwijder IS NULL
|
|
AND p.prs_perslid_inactief IS NULL
|
|
AND p.prs_perslid_apikey IS NULL
|
|
AND NOT EXISTS
|
|
(SELECT 'x'
|
|
FROM prs_werkplek pw, prs_perslidwerkplek ppw
|
|
WHERE p.prs_perslid_key = ppw.prs_perslid_key
|
|
AND ppw.prs_werkplek_key = pw.prs_werkplek_key
|
|
AND pw.prs_alg_ruimte_key = r.alg_ruimte_key);
|
|
BEGIN
|
|
FOR rec IN c1
|
|
LOOP
|
|
BEGIN
|
|
prs.movetoruimte (rec.prs_perslid_key,
|
|
rec.alg_ruimte_key,
|
|
'R',
|
|
0);
|
|
END;
|
|
END LOOP;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_delete_persons
|
|
AS
|
|
v_importkey NUMBER;
|
|
v_importappkey NUMBER;
|
|
|
|
CURSOR c1 IS
|
|
SELECT prs_perslid_key
|
|
FROM prs_perslid
|
|
WHERE prs_perslid_inactief IS NOT NULL -- Als inactief gemarkeerd door IAM koppeling
|
|
AND prs_perslid_verwijder IS NULL;
|
|
|
|
-- Voor het verwijderen hebben we een import_key nodig, dus die gaan we nu aanmaken
|
|
BEGIN
|
|
SELECT fac_import_app_key
|
|
INTO v_importappkey
|
|
FROM fac_import_app
|
|
WHERE fac_import_app_code = 'IAM_DEL';
|
|
|
|
INSERT INTO fac_import (fac_import_app_key,
|
|
fac_import_datum_gelezen,
|
|
fac_import_datum_verwerkt,
|
|
fac_import_filenaam,
|
|
prs_perslid_key)
|
|
VALUES (v_importappkey,
|
|
SYSDATE,
|
|
SYSDATE,
|
|
NULL,
|
|
121);
|
|
|
|
SELECT MAX (fac_import_key) INTO v_importkey FROM fac_import;
|
|
|
|
FOR rec IN c1
|
|
LOOP
|
|
BEGIN
|
|
prs.delete_perslid (v_importkey, rec.prs_perslid_key);
|
|
END;
|
|
END LOOP;
|
|
|
|
-- Dan nog even alle overgebleven logins leeg maken t.b.v. de IAM koppeling
|
|
|
|
UPDATE prs_perslid
|
|
SET prs_perslid_oslogin = NULL
|
|
WHERE prs_perslid_verwijder IS NOT NULL
|
|
AND prs_perslid_oslogin IS NOT NULL;
|
|
END;
|
|
/
|
|
|
|
-- Voor de Groendus koppeling moet er per pand een drietal objecten worden aangemaakt (water, gas, elektra)
|
|
-- Dat doe de procedure hieronder, die wordt aangeroepen in de daily.
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_groendus_meters
|
|
AS
|
|
CURSOR c1
|
|
IS
|
|
SELECT g.alg_locatie_key,
|
|
r.alg_ruimte_key,
|
|
'W_' || g.alg_gebouw_code water,
|
|
'G_' || g.alg_gebouw_code gas,
|
|
'E_' || g.alg_gebouw_code elektra
|
|
FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
|
|
WHERE g.alg_gebouw_key = v.alg_gebouw_key
|
|
AND r.alg_verdieping_key = v.alg_verdieping_key
|
|
AND r.alg_ruimte_upper_nr = '_'
|
|
AND g.alg_gebouw_verwijder IS NULL
|
|
AND NOT EXISTS
|
|
(SELECT i.ins_deel_key
|
|
FROM ins_deel i
|
|
WHERE i.ins_alg_ruimte_key = r.alg_ruimte_key
|
|
AND i.ins_srtdeel_key IN (61, 62, 63));
|
|
BEGIN
|
|
FOR rec IN c1
|
|
LOOP
|
|
BEGIN
|
|
INSERT INTO ins_deel (ins_srtdeel_key,
|
|
ins_alg_ruimte_key,
|
|
ins_alg_ruimte_type,
|
|
ins_deel_aantal,
|
|
ins_deel_omschrijving,
|
|
ins_alg_locatie_key,
|
|
ins_deel_actief)
|
|
VALUES (62,
|
|
rec.alg_ruimte_key,
|
|
'R',
|
|
1,
|
|
rec.water,
|
|
rec.alg_locatie_key,
|
|
1);
|
|
|
|
INSERT INTO ins_deel (ins_srtdeel_key,
|
|
ins_alg_ruimte_key,
|
|
ins_alg_ruimte_type,
|
|
ins_deel_aantal,
|
|
ins_deel_omschrijving,
|
|
ins_alg_locatie_key,
|
|
ins_deel_actief)
|
|
VALUES (61,
|
|
rec.alg_ruimte_key,
|
|
'R',
|
|
1,
|
|
rec.elektra,
|
|
rec.alg_locatie_key,
|
|
1);
|
|
|
|
INSERT INTO ins_deel (ins_srtdeel_key,
|
|
ins_alg_ruimte_key,
|
|
ins_alg_ruimte_type,
|
|
ins_deel_aantal,
|
|
ins_deel_omschrijving,
|
|
ins_alg_locatie_key,
|
|
ins_deel_actief)
|
|
VALUES (63,
|
|
rec.alg_ruimte_key,
|
|
'R',
|
|
1,
|
|
rec.gas,
|
|
rec.alg_locatie_key,
|
|
1);
|
|
END;
|
|
END LOOP;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_daily
|
|
AS
|
|
v_errormsg VARCHAR2 (1000);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
BEGIN
|
|
brcf_schonen_bezoekers ();
|
|
brcf_toekennen_authgroep ();
|
|
brcf_wp_toekenning ();
|
|
brcf_delete_persons ();
|
|
brcf_groendus_meters ();
|
|
END;
|
|
/
|
|
|
|
-- T.b.v. de koppeling met Groendus.
|
|
CREATE OR REPLACE PROCEDURE brcf_groendus_locaties (
|
|
p_locatieid IN NUMBER,
|
|
p_postalcode IN VARCHAR2)
|
|
IS
|
|
BEGIN
|
|
UPDATE alg_locatie
|
|
SET alg_locatie_externnr = p_locatieid
|
|
WHERE REPLACE (alg_locatie_postcode, ' ', '') = p_postalcode
|
|
AND alg_locatie_verwijder IS NULL;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_groendus_eancodes (
|
|
p_eancode IN NUMBER,
|
|
p_addressid IN NUMBER,
|
|
p_energytype IN VARCHAR2)
|
|
IS
|
|
|
|
CURSOR c1
|
|
IS
|
|
SELECT i.ins_deel_key
|
|
FROM ins_deel i,
|
|
alg_locatie l,
|
|
alg_gebouw g,
|
|
alg_verdieping v,
|
|
alg_ruimte r
|
|
WHERE i.ins_alg_ruimte_key = r.alg_ruimte_key
|
|
AND r.alg_verdieping_key = v.alg_verdieping_key
|
|
AND v.alg_gebouw_key = g.alg_gebouw_key
|
|
AND g.alg_locatie_key = l.alg_locatie_key
|
|
AND l.alg_locatie_externnr = p_addressid
|
|
AND (i.ins_deel_externnr != p_eancode OR i.ins_deel_externnr IS NULL)
|
|
AND i.ins_srtdeel_key IN (61, 62, 63)
|
|
AND UPPER (SUBSTR (ins_deel_omschrijving, 1, 1)) =
|
|
UPPER (SUBSTR (p_energytype, 1, 1)); -- W = Water, G= Gas, E= Elektra
|
|
BEGIN
|
|
FOR rec IN c1
|
|
LOOP
|
|
BEGIN
|
|
UPDATE ins_deel
|
|
SET ins_deel_externnr = p_eancode
|
|
WHERE ins_deel_key = rec.ins_deel_key;
|
|
END;
|
|
END LOOP;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_groendus_consumption (
|
|
p_deelkey IN NUMBER,
|
|
p_verbruik IN VARCHAR2,
|
|
p_timestamp IN VARCHAR2)
|
|
IS
|
|
BEGIN
|
|
UPDATE ins_deel
|
|
SET ins_deel_state = p_verbruik,
|
|
ins_deel_statedate =
|
|
TO_DATE (REPLACE (p_timestamp, 'T', ' '),
|
|
'YYYY-MM-DD HH24:MI:SS')
|
|
WHERE ins_deel_key = p_deelkey;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE VIEW brcf_v_groendus_history
|
|
(
|
|
deel_key,
|
|
eancode,
|
|
datumvan,
|
|
datumtot
|
|
)
|
|
AS
|
|
SELECT ins_deel_key,
|
|
ins_deel_externnr,
|
|
'2022-01-01',
|
|
TO_CHAR (SYSDATE, 'YYYY-MM-DD')
|
|
FROM ins_deel
|
|
WHERE ins_srtdeel_key IN (61, 62, 63) AND ins_deel_externnr IS NOT NULL;
|
|
|
|
CREATE OR REPLACE VIEW brcf_v_groendus_history_old
|
|
(
|
|
deel_key,
|
|
eancode,
|
|
datumvan,
|
|
datumtot
|
|
)
|
|
AS
|
|
SELECT ins_deel_key,
|
|
ins_deel_externnr,
|
|
'2021-01-01',
|
|
'2021-12-31'
|
|
FROM ins_deel
|
|
WHERE ins_srtdeel_key IN (61, 62, 63) AND ins_deel_externnr IS NOT NULL;
|
|
|
|
-- Bronview voor het dagelijks ophalen van meetwaarden
|
|
-- Objecten die nog nooit een meetwaarde hebben gehad worden een heel jaar terug gesynchroniseerd.
|
|
CREATE OR REPLACE VIEW brcf_v_groendus_latest
|
|
(
|
|
deel_key,
|
|
eancode,
|
|
datumvan,
|
|
datumtot
|
|
)
|
|
AS
|
|
SELECT i.ins_deel_key,
|
|
i.ins_deel_externnr,
|
|
TO_CHAR (MAX (ih.ins_deel_statedate + 1), 'YYYY-MM-DD'),
|
|
TO_CHAR (SYSDATE, 'YYYY-MM-DD')
|
|
FROM ins_deel i, ins_deel_state_history ih
|
|
WHERE i.ins_srtdeel_key IN (61, 62, 63)
|
|
AND i.ins_deel_externnr IS NOT NULL
|
|
AND i.ins_deel_key = ih.ins_deel_key
|
|
GROUP BY (i.ins_deel_key, i.ins_deel_externnr)
|
|
UNION ALL
|
|
SELECT i.ins_deel_key,
|
|
i.ins_deel_externnr,
|
|
TO_CHAR (SYSDATE - 365, 'YYYY-MM-DD'),
|
|
TO_CHAR (SYSDATE, 'YYYY-MM-DD')
|
|
FROM ins_deel i, ins_deel_state_history ih
|
|
WHERE i.ins_srtdeel_key IN (61, 62, 63)
|
|
AND i.ins_deel_externnr IS NOT NULL
|
|
AND NOT EXISTS
|
|
(SELECT 'x'
|
|
FROM ins_deel_state_history ih
|
|
WHERE ih.ins_deel_key = i.ins_deel_key)
|
|
GROUP BY (i.ins_deel_key, i.ins_deel_externnr);
|
|
|
|
CREATE OR REPLACE VIEW brcf_v_groendus_meetwaarden
|
|
(
|
|
deel_key,
|
|
locatie_omschrjving,
|
|
fclt_3d_locatie_key,
|
|
type,
|
|
jaar,
|
|
jaarmaand,
|
|
maand,
|
|
jaarweek,
|
|
week,
|
|
dag,
|
|
datum,
|
|
meetwaarde
|
|
)
|
|
AS
|
|
SELECT i.ins_deel_key,
|
|
l.alg_locatie_omschrijving,
|
|
l.alg_locatie_key,
|
|
DECODE (i.ins_srtdeel_key,
|
|
61, 'Elektriciteit',
|
|
62, 'Water',
|
|
63, 'Gas',
|
|
NULL)
|
|
TYPE,
|
|
TO_CHAR (ih.ins_deel_statedate, 'YYYY') jaar,
|
|
TO_CHAR (ih.ins_deel_statedate, 'YYYY-MM') jaarmaand,
|
|
TO_CHAR (ih.ins_deel_statedate, 'MONTH') maand,
|
|
TO_CHAR (ih.ins_deel_statedate, 'IYYY-IW') jaarweek,
|
|
TO_CHAR (ih.ins_deel_statedate, 'WW') week,
|
|
TO_CHAR (ih.ins_deel_statedate, 'DD-MM-YYYY') dag,
|
|
ih.ins_deel_statedate datum,
|
|
fac.safe_to_number (ih.ins_deel_state) waarde
|
|
FROM ins_deel i,
|
|
ins_deel_state_history ih,
|
|
alg_locatie l,
|
|
alg_gebouw g,
|
|
alg_verdieping v,
|
|
alg_ruimte r
|
|
WHERE i.ins_srtdeel_key IN (61, 62, 63)
|
|
AND i.ins_alg_ruimte_key = r.alg_ruimte_key
|
|
AND r.alg_verdieping_key = v.alg_verdieping_key
|
|
AND v.alg_gebouw_key = g.alg_gebouw_key
|
|
AND g.alg_locatie_key = l.alg_locatie_key
|
|
AND i.ins_deel_key = ih.ins_deel_key;
|
|
|
|
CREATE OR REPLACE PROCEDURE brcf_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);
|
|
v_automailkey NUMBER (10);
|
|
v_email prs_perslid.prs_perslid_email%TYPE;
|
|
v_negeer NUMBER (10);
|
|
v_kostenplaats VARCHAR2 (4000);
|
|
v_kp_key NUMBER (10);
|
|
v_locatie_key NUMBER (10);
|
|
v_gebouw_key NUMBER (10);
|
|
v_afdeling_key NUMBER (10);
|
|
|
|
BEGIN
|
|
-- Niet alle mails komen van te herleiden personen, dus als sender leeg is dan gebruiken we het generieke account.
|
|
|
|
SELECT x.prs_perslid_key
|
|
INTO sender
|
|
FROM
|
|
(SELECT p.prs_perslid_key
|
|
FROM prs_perslid p
|
|
WHERE UPPER (p.prs_perslid_email) = UPPER (pfrom)
|
|
AND p.prs_perslid_verwijder IS NULL
|
|
UNION ALL
|
|
SELECT prs_perslid_key
|
|
FROM prs_perslid p, prs_afdeling d
|
|
WHERE p.prs_afdeling_key = d.prs_afdeling_key
|
|
AND prs_perslid_oslogin = '_HMAIL'
|
|
AND NOT EXISTS (SELECT p.prs_perslid_key
|
|
FROM prs_perslid p
|
|
WHERE UPPER (p.prs_perslid_email) = UPPER (pfrom)
|
|
AND p.prs_perslid_verwijder IS NULL)) x;
|
|
|
|
-- Geautomatiseerde mails hebben altijd hetzelfde onderwerp, zo kan via een eigen tabel de melding achterhaald worden.
|
|
SELECT fac.safe_to_number (MIN(fac_usrdata_prijs))
|
|
INTO v_automailkey
|
|
FROM fac_usrdata
|
|
WHERE UPPER (psubject) LIKE '%'||UPPER (fac_usrdata_omschr)||'%'
|
|
AND fac_usrtab_key = 101;
|
|
|
|
|
|
IF v_automailkey IS NOT NULL
|
|
THEN
|
|
defaultstdmelding := v_automailkey;
|
|
-- v_mailadres_kenmerk_key := ; Dit kan nu niet aangezien dit kenmerk niet bij ALLE meldingen aanwezig is.
|
|
END IF;
|
|
|
|
|
|
IF defaultstdmelding IS NULL
|
|
THEN
|
|
defaultstdmelding := fac.getsetting ('defaultstdmelding'); -- algemeen / werkbon
|
|
v_mailadres_kenmerk_key := 381;
|
|
END IF;
|
|
|
|
-- Als mensen op vakantie zijn en een automatisch antwoord aan hebben staan dan wil je dat niet terug in de melding al notitie.
|
|
IF UPPER (psubject) LIKE '%AUTOMATISCH ANTWOORD%'
|
|
THEN
|
|
v_negeer := 1;
|
|
ELSE
|
|
v_negeer := 0;
|
|
END IF;
|
|
-------------------------------------------------
|
|
|
|
-- 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)
|
|
|
|
subject_regexp := '[[:digit:]]{1,}';
|
|
v_mldnum :=
|
|
REGEXP_SUBSTR (psubject,
|
|
subject_regexp,
|
|
1,
|
|
1,
|
|
'i'); -- 1234, of 12345, of 12, of 1 etc.
|
|
|
|
v_kostenplaats := REGEXP_SUBSTR(psubject, '\d+$'); -- Laatste getal in het onderwerp is de kostenplaats.
|
|
|
|
-- 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);
|
|
|
|
SELECT MAX (prs_kostenplaats_key)
|
|
INTO v_kp_key
|
|
FROM prs_kostenplaats
|
|
WHERE prs_kostenplaats_upper = UPPER (v_kostenplaats)
|
|
AND prs_kostenplaats_verwijder IS NULL;
|
|
|
|
-- Hieronder gaan we voor de locatie altijd uit van het eerst aangemaakt gebouw die niet verwijderd is, magazijnen kunnen namelijk dezelfde gebouwcode hebben
|
|
IF v_kp_key IS NOT NULL
|
|
THEN
|
|
SELECT MIN (g.alg_locatie_key)
|
|
INTO v_locatie_key
|
|
FROM alg_gebouw g, prs_afdeling p
|
|
WHERE p.prs_afdeling_upper = 'CC-'||g.alg_gebouw_upper
|
|
AND p.prs_kostenplaats_key = v_kp_key
|
|
AND p.prs_afdeling_verwijder IS NULL
|
|
AND g.alg_gebouw_verwijder IS NULL;
|
|
|
|
IF v_locatie_key IS NOT NULL
|
|
THEN
|
|
SELECT MIN (g.alg_gebouw_key)
|
|
INTO v_gebouw_key
|
|
FROM alg_gebouw g
|
|
WHERE g.alg_locatie_key = v_locatie_key;
|
|
|
|
END IF;
|
|
|
|
SELECT MAX (p.prs_afdeling_key)
|
|
INTO v_afdeling_key
|
|
FROM alg_gebouw g, prs_afdeling p
|
|
WHERE p.prs_kostenplaats_key = v_kp_key
|
|
AND p.prs_afdeling_verwijder IS NULL;
|
|
|
|
SELECT MAX (prs_perslid_key)
|
|
INTO sender
|
|
FROM prs_perslid
|
|
WHERE prs_afdeling_key = v_afdeling_key
|
|
AND prs_perslid_verwijder IS NULL;
|
|
|
|
IF sender IS NULL
|
|
THEN
|
|
|
|
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_oslogin = '_HMAIL';
|
|
END IF;
|
|
|
|
-- 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;
|
|
|
|
SELECT MAX (p.prs_perslid_email)
|
|
INTO v_email
|
|
FROM prs_perslid p, mld_melding m
|
|
WHERE m.mld_melding_key = v_mldkey
|
|
AND m.prs_perslid_key = p.prs_perslid_key;
|
|
|
|
v_from := SUBSTR(TRIM(pfrom),1,50);
|
|
|
|
IF v_flexprop_mail = v_from OR v_email = 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 -- vrtw 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; -- vrtw 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 melder 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 AND v_negeer = 0
|
|
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_alg_onroerendgoed_keys,
|
|
mld_melding_onderwerp,
|
|
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,
|
|
COALESCE (v_locatie_key, 1281), -- Locatie onbekend wanneer deze leeg is
|
|
COALESCE (v_gebouw_key, 5301), -- Gebouw onbekend wanneer deze leeg is
|
|
SUBSTR (psubject, 1, 75), -- onderwerp is max 80 posities
|
|
CASE
|
|
WHEN LENGTH (psubject) > 75
|
|
THEN
|
|
'Volledig onderwerp: ' || psubject -- wanneer het onderwerp is afgekapt plakken we het volledige onderwerp in de omschrijving
|
|
ELSE
|
|
NULL
|
|
END
|
|
|| CHR (10) || CHR (13) ||
|
|
SUBSTR ( 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;
|
|
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);
|
|
|
|
kkey := 21; -- BRCF heeft een bijlage kenmerk over alle vakgroeptypen, lekker makkelijk
|
|
|
|
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
|
|
|