Files
Customer/BRED/bred.sql

1478 lines
64 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database BRED
DEFINE thisfile = 'BRED.SQL'
DEFINE dbuser = 'BRED'
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 ------
-- PROCESSEMAIL IN OPNEMEN VOOR BRED
--- svrz.sql
----- mijn basis voor ubrh, blos, wend, sinn… , echter zeer uitgebreid geworden in 2022 / 2024 aanvullingen)
----- voor nu voor BRED dus maar uit sinn.sql overnemen (in package?!?)
--- kmmo.sql
------ geen notities…, meerdere mail_adressen
--- brcf.sql
----- meldingen notities + nieuw…
--- alkm.sql
----- voor alleen opdrachtnotities…
--- hsle.sql
---- heel specifiek, met verschillende melders en default_stdmeldingen…
-- VNOG-sql is ook voor opdrachtgever - heel charmant!!!!
CREATE OR REPLACE PACKAGE BRED AS
-- PACKAGES voor de BRED specifieke rapportages
TYPE t_cursor IS REF CURSOR;
PROCEDURE processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER);
PROCEDURE schonen_accounts;
END;
/
CREATE OR REPLACE PACKAGE BODY BRED
AS
-- PACKAGES voor de BRED specifieke rapportages
-- Verwijder via SCIM geinactiveerde personen!
PROCEDURE schonen_accounts
AS
c_prs_dummy_key NUMBER (10) := -1; -- DUMMY tbv overzetten verplichtingen verwijderde personen
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_del NUMBER (10);
CURSOR c1
IS
SELECT '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_email || '|' || pf.prs_perslid_naam_full || '] '
aanduiding,
p.prs_perslid_key,
COUNT (vp.prs_perslid_key) aant
FROM prs_v_aanwezigperslid p, prs_v_verplichting_keys vp, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_externid IS NOT NULL -- SCIM-populatie!
AND COAlESCE (p.prs_perslid_inactief, SYSDATE) < TRUNC (SYSDATE)
AND p.prs_perslid_key = vp.prs_perslid_key(+) -- Actuele verplichtingen?
AND p.prs_perslid_key = pf.prs_perslid_key
GROUP BY '[' || TO_CHAR (p.prs_perslid_key) || '|' || p.prs_perslid_email || '|' || pf.prs_perslid_naam_full || '] ',
p.prs_perslid_key
ORDER BY 2;
BEGIN
v_count_del := 0;
FOR rec IN c1
LOOP
BEGIN
IF rec.aant = 0
THEN
v_errormsg := 'Fout schonen collega';
DELETE FROM prs_collega
WHERE prs_perslid_key = rec.prs_perslid_key
OR prs_perslid_key_alt = rec.prs_perslid_key;
v_errormsg := 'Fout schonen perslid';
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = rec.prs_perslid_key;
v_count_del := v_count_del + 1;
IF MOD (v_count_del, 1000) = 0
THEN
COMMIT;
END IF;
ELSE
fac.writelog ('BRED_SCHONENACCOUNTS', 'I', rec.aanduiding || '/#Verplichtingen: ' || TO_CHAR (rec.aant), 'Persoon niet geschoond');
END IF;
EXCEPTION
WHEN OTHERS
THEN -- Kennelijk heeft persoon toch nog ernstige verplichtingen!
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('BRED_SCHONENACCOUNTS', 'W', rec.aanduiding || v_errormsg, 'Fout schonen persoon');
END;
END LOOP;
fac.writelog ('BRED_SCHONENACCOUNTS', 'S', 'Personen/#geschoond: ' || TO_CHAR (v_count_del), '');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('BRED_SCHONENACCOUNTS', 'E', v_errormsg, '');
COMMIT;
END schonen_accounts;
PROCEDURE processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
c_onbekend_key NUMBER (10) := 9; -- Melder onbekend
c_leverancier_M2M_key NUMBER (10) := 81; -- Leverancier_key M2M
defaultstdmelding fac_setting.fac_setting_default%TYPE;
c_locatie_key NUMBER (10) := 2 ; -- Apeldoorn
c_gebouw_key NUMBER (10) := 10 ; -- Woudhuis Kantoor
c_folder_kkey NUMBER (10) := 1 ; -- standaard folder_kenmerk_key
c_folder_opdr_kkey NUMBER (10) := 121 ; -- standaard folder_kenmerk_key tbv opdrachten
v_prs_werkplek_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_stdmelding_key NUMBER (10);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_exist_ticket VARCHAR2 (255) := '';
v_perslid_key NUMBER (10);
v_kostenplaats_key NUMBER (10);
v_discipline_key NUMBER (10);
v_melding_key NUMBER (10);
v_behandelaar2_key NUMBER (10);
v_folder_kkey NUMBER (10);
v_count NUMBER (10);
v_count_wp NUMBER (10);
v_fac_result_from VARCHAR2 (250);
v_fac_result_fromaddr VARCHAR2 (250);
v_fw_from VARCHAR2 (1000) := '';
v_from_string VARCHAR2 (1000) := NULL;
v_voor_at VARCHAR2 (1000) := '';
v_na_at VARCHAR2 (1000) := '';
v_forward_soort NUMBER (1) := 1 ; -- 0 = De mail wordt direct van aanvrager doorgestuurd naar het facilitor-emailadres
-- 1 = De mail wordt via eigen centrale klant-postbus automatisch geforward naar het facilitor-emailadres
-- 2 = De mail wordt via eigen centrale klant-postbus handmatig aangevuld en daarna geforward naar het facilitor-emailadres
v_forward_0 NUMBER (1) := 0 ;
v_forward_1 NUMBER (1) := 0 ;
v_forward_2 NUMBER (1) := 0 ;
v_mailbody_notitie VARCHAR2 (4000) := '';
v_mailbody_notitie_1 VARCHAR2 (4000) := '';
v_mailbody_notitie_2 VARCHAR2 (4000) := '';
v_mailbody_notitie_3 VARCHAR2 (4000) := '';
v_opdracht_id VARCHAR2 (255);
v_opdracht_key NUMBER (10);
v_typeopdr_key NUMBER (10);
BEGIN
-- NOG GOED TESTEN EN ZAKEN OPSCHONEN EN FINTUNEN
-- ALGEMEEN
--- 1. NOTITIES SPLITSEN
-- 1e notitie -----
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) = 0
THEN
v_forward_0 := 1 ;
v_mailbody_notitie_1 := pbody ;
END IF;
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) > 0
THEN
-- dan hier de eerste notitie eruit halen (= alles voor de '1e Van:-regel')
v_mailbody_notitie_1 := LTRIM(SUBSTR (pbody, 1, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1)-1)) ;
END IF;
-- 2e notitie
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) = 0
THEN
v_forward_1 := 1 ;
-- dan hier de notitie eruit halen (= alles na de '1e Van:-regel' tot aan einde)
v_mailbody_notitie_2 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1)) ;
END IF;
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) > 0
THEN
-- dan hier de tweede notitie eruit halen (= alles vanaf de '1e Van:-regel' t/m de '2e Van:-regel)
v_mailbody_notitie_2 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1), REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) - REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 1)) ;
END IF;
-- 3e notitie
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 3) = 0
THEN
-- v_forward_1 := 1 ;
-- dan hier de notitie eruit halen (= alles na de '2e Van:-regel' tot aan einde)
v_mailbody_notitie_3 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2)) ;
END IF;
IF REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2) > 0 AND REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 3) > 0
THEN
-- dan hier de tweede notitie eruit halen (= alles vanaf de '1e Van:-regel' t/m de '2e Van:-regel)
v_mailbody_notitie_3 := SUBSTR (pbody, REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2), REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 3) - REGEXP_INSTR (pbody, 'Van:|From:|E-mail:', 1, 2)) ;
END IF;
IF v_forward_soort = 0
THEN
v_mailbody_notitie := v_mailbody_notitie_1 ;
END IF;
IF v_forward_soort = 1
THEN
v_mailbody_notitie := v_mailbody_notitie_1 ;
END IF;
IF v_forward_soort = 2
THEN
v_mailbody_notitie := v_mailbody_notitie_1 ;
END IF;
--- 2. HET FROM-ADRES VAN DE MAILER/NOTEUR BEPALEN UIT MAILBODY (V_FW_FROM)
-- Dus eerst op zoek naar eerste VAN-regel
v_from_string :=
SUBSTR (pbody,
REGEXP_INSTR (pbody,
'Van:|From:|E-mail:',
1,
1),
INSTR (pbody,
CHR (10),
REGEXP_INSTR (pbody,
'Van:|From:|E-mail:',
1,
1),
1)
- REGEXP_INSTR (pbody,
'Van:|From:|E-mail:',
1,
1));
-- Als deze VAN-regel bestaat en er zit een @-mailadres in dan gaan we via die kant het from-adres-bepalen
IF v_from_string IS NOT NULL
AND INSTR (v_from_string, '@') > 0
THEN
-- Als in die VAN-regel de structuur is 'alias_naam <mailadres>' dan moeten we tussen de haken het emailadres bepalen..
IF INSTR (v_from_string,
'<',
1,
1) > 0
THEN
v_na_at :=
SUBSTR (v_from_string,
INSTR (v_from_string,
'@',
1,
1)
+ 1,
INSTR (v_from_string, '.com')
+ 4
- INSTR (v_from_string,
'@',
1,
1)
- 1);
v_voor_at :=
SUBSTR (v_from_string,
INSTR (v_from_string,
'<',
1,
1)
+ 1,
INSTR (v_from_string,
'@',
1,
1)
- INSTR (v_from_string,
'<',
1,
1)
- 1);
v_fw_from := v_voor_at || '@' || v_na_at;
ELSE
-- Als in die VAN-regel de structuur is zonder het emailadres tussen <> dan als volgt emailadres bepalen:
v_na_at :=
SUBSTR (v_from_string,
INSTR (v_from_string,
'@',
1,
1)
+ 1,
REGEXP_INSTR (v_from_string, '$')
- INSTR (v_from_string,
'@',
1,
1)
- 1);
v_voor_at :=
SUBSTR (v_from_string,
INSTR (v_from_string,
':',
1,
1)
+ 2,
INSTR (v_from_string,
'@',
1,
1)
- INSTR (v_from_string,
':',
1,
1)
- 2);
v_fw_from := v_voor_at || '@' || v_na_at;
END IF;
ELSE -- Als er in mailboby geen "Van: met email-adres" dan maar terugvallen op from_adress uit fac_result
SELECT fac_result_waarde
INTO v_fac_result_fromaddr
FROM fac_result
WHERE fac_result_sessionid = psessionid
AND fac_result_naam = 'fromaddr';
v_fac_result_fromaddr :=
REPLACE (REPLACE (v_fac_result_fromaddr, '>', ''),
'<',
'');
v_fw_from := v_fac_result_fromaddr ;
END IF;
-- Tot slot FROM-email-adres heeft restrictie van 200
v_fw_from := SUBSTR (v_fw_from, 1, 200);
---- MAILINSTELLING - SERVICEDESK TBV MELDINGEN
CASE
WHEN UPPER (pto) LIKE 'SERVICEDESK@%'
THEN
defaultstdmelding := fac.getsetting ('defaultstdmelding');
-- Bepaal de melder/noteur op basis van e-mail adres zoals bepaald in v_fw_from
v_errormsg :=
'Fout bepalen melder ' || COALESCE (pfrom, '???');
SELECT COUNT (*), MAX (prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_email) LIKE
UPPER (v_fw_from) || '%'
AND v_fw_from IS NOT NULL;
-- Als er persoon gevonden is, dan ff checken of er ook werkplekkoppelingen onder zijn aangemaakt
IF v_count >= 1
THEN
SELECT COUNT (*)
INTO v_count_wp
FROM prs_perslidwerkplek
WHERE prs_perslid_key = v_perslid_key;
END IF;
-- Als er persoon gevonden is, dan ff checken of er op gekoppelde Afdeling ook een kostenplaats is gekoppeld
IF v_count >= 1
THEN
SELECT MIN (a.prs_kostenplaats_key)
INTO v_kostenplaats_key
FROM prs_v_aanwezigperslid p, prs_afdeling a
WHERE prs_perslid_key = v_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key;
END IF;
-- Locatie erbij halen
IF v_count >= 1 AND v_count_wp > 0
THEN
SELECT p.prs_perslid_key, MIN (wpg.prs_werkplek_key)
INTO v_perslid_key, v_prs_werkplek_key
FROM prs_v_aanwezigperslid p,
prs_v_werkplekperslid_gegevens wpg
WHERE p.prs_perslid_key = v_perslid_key
AND p.prs_perslid_key = wpg.prs_perslid_key
GROUP BY p.prs_perslid_key;
IF v_prs_werkplek_key IS NOT NULL
THEN
SELECT v.alg_locatie_key, v.alg_gebouw_key
INTO v_locatie_key, v_gebouw_key
FROM prs_werkplek wp,
alg_v_onroerendgoed_gegevens v
WHERE wp.prs_alg_ruimte_key =
v.alg_onroerendgoed_keys
AND prs_werkplek_key = v_prs_werkplek_key;
END IF;
END IF;
-- Geen werkplek of Melder onbekend - Dan melding op standaard locatie_key en gebouw_key
IF (v_count >= 1 AND v_count_wp = 0) OR v_count = 0
THEN
v_locatie_key := c_locatie_key;
v_gebouw_key := c_gebouw_key;
END IF;
-- Melder kan niet bepaald worden, dus inlezen onder 'Melder onbekend (M2M)'
-- Op deze 'Melder onbekend' is/kan aan voorkant wel afdeling en bijbehorende kostenplaats gekoppeld. Deze kp halen we er daarom nu ook bij
IF v_count = 0
THEN
SELECT p.prs_perslid_key, a.prs_kostenplaats_key
INTO v_perslid_key, v_kostenplaats_key
FROM prs_v_aanwezigperslid p, prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_perslid_key = c_onbekend_key;
END IF;
v_errormsg := 'Fout bepalen bestaande melding';
v_exist_ticket := psubject;
IF REGEXP_INSTR (v_exist_ticket, '\d') > 0
THEN
v_exist_ticket :=
SUBSTR (v_exist_ticket,
REGEXP_INSTR (v_exist_ticket, '\d'))
|| 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'!
v_exist_ticket :=
SUBSTR (v_exist_ticket,
1,
REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket!
ELSE
v_exist_ticket := 'x';
END IF;
SELECT COUNT (*)
INTO v_count
FROM mld_melding
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
-- Om te voorkomen dat we andere nummers in onderwerpveld ten onrechte als Facilitor-meldingsnummer gaan zien, de meldings-sequence vanag 10000 gezet en daar dus op zoeken
IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 10000
THEN -- Notitie bij bestaande melding!
-- bestaande melding ophalen inclusief aanvrager_key omdat we deze ivm forward op bred-emailadres niet goed doorkrijgen in FROM-adres..
SELECT mld_stdmelding_key, mld_melding_key, prs_perslid_key
INTO v_stdmelding_key, v_melding_key, v_perslid_key
FROM mld_melding
WHERE mld_melding_key =
fac.safe_to_number (v_exist_ticket);
v_errormsg := 'Fout toevoegen notitie';
INSERT INTO mld_melding_note (
mld_melding_key,
prs_perslid_key,
mld_melding_note_omschrijving,
mld_melding_note_flag)
VALUES (
v_melding_key,
v_perslid_key,
v_mailbody_notitie,
0);
-- Bepalen van de actieve behandelaar van deze melding
BEGIN
SELECT mld_melding_behandelaar2_key
INTO v_behandelaar2_key
FROM mld_melding m, prs_perslid p
WHERE mld_melding_key = v_melding_key
AND mld_melding_behandelaar2_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_behandelaar2_key := NULL;
END;
IF v_behandelaar2_key IS NOT NULL
THEN
-- Bestaande melding en behandelaar is bekend.
-- Notificatie naar behandelaar
fac.putnotificationsrtprio (
NULL,
v_behandelaar2_key,
'MLDNOB',
v_melding_key,
'Melding ' || v_melding_key || ' is door de aanvrager via M2M aangepast.',
2,
NULL,
NULL,
NULL,
2,
NULL);
END IF; -- Bestaande melding en behandelaar is bekend.
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet!
UPDATE mld_melding
SET mld_melding_actiecode = 1 + 128 -- BO + Attentie
WHERE mld_melding_key = v_melding_key;
-- VOOR DE TEST NOG EVEN DE GESPLITSTE NOTITIES EN MAIL_ADRES_AANVRAGER-BEPALING IN KENMERKEVELDEN ZETTEN
BEGIN mld.upsertmeldingkenmerk (102, v_melding_key, v_forward_soort); END;
BEGIN mld.upsertmeldingkenmerk (103, v_melding_key, v_voor_at || '@' || v_na_at); END;
BEGIN mld.upsertmeldingkenmerk (104, v_melding_key, v_voor_at); END;
BEGIN mld.upsertmeldingkenmerk (105, v_melding_key, v_na_at); END;
BEGIN mld.upsertmeldingkenmerk (106, v_melding_key, v_fac_result_fromaddr); END;
BEGIN mld.upsertmeldingkenmerk (107, v_melding_key, v_mailbody_notitie_1); END;
BEGIN mld.upsertmeldingkenmerk (108, v_melding_key, v_mailbody_notitie_2); END;
BEGIN mld.upsertmeldingkenmerk (109, v_melding_key, v_mailbody_notitie_3); END;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'maillog',
'Notitie onder exist-melding '
|| v_melding_key);
ELSE
-- Geen bestaande melding - Dan gaan we NIEUWE melding toevoegen
v_errormsg := 'Fout toevoegen melding';
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
mld_melding_datum,
mld_melding_omschrijving,
mld_stdmelding_key,
mld_melding_t_uitvoertijd,
prs_kostenplaats_key,
prs_perslid_key,
prs_perslid_key_voor,
mld_melding_status,
mld_melding_spoed,
mld_melding_onderwerp,
mld_melding_behandelaar2_key,
mld_ins_discipline_key)
VALUES (
'MLD',
4, -- email
v_locatie_key,
v_gebouw_key,
SYSDATE,
NULL,
defaultstdmelding,
NULL,
v_kostenplaats_key,
v_perslid_key,
v_perslid_key,
NULL,
3, -- prio normaal
SUBSTR (psubject, 1, 200),
NULL,
NULL)
RETURNING mld_melding_key
INTO v_melding_key;
-- mailbody in kenmerkveld 'mailbody', key 61 zetten
BEGIN mld.upsertmeldingkenmerk (61, v_melding_key, SUBSTR (pbody, 1, 4000)); END;
-- VOOR DE TEST DE GESPLITSTE NOTITIES EN MAIL_ADRES_AANVRAGER-BEPALING IN KENMERKEVELDEN ZETTEN
BEGIN mld.upsertmeldingkenmerk (102, v_melding_key, v_forward_soort); END;
BEGIN mld.upsertmeldingkenmerk (103, v_melding_key, v_voor_at || '@' || v_na_at); END;
BEGIN mld.upsertmeldingkenmerk (104, v_melding_key, v_voor_at); END;
BEGIN mld.upsertmeldingkenmerk (105, v_melding_key, v_na_at); END;
BEGIN mld.upsertmeldingkenmerk (106, v_melding_key, v_fac_result_fromaddr); END;
BEGIN mld.upsertmeldingkenmerk (107, v_melding_key, v_mailbody_notitie_1); END;
BEGIN mld.upsertmeldingkenmerk (108, v_melding_key, v_mailbody_notitie_2); END;
BEGIN mld.upsertmeldingkenmerk (109, v_melding_key, v_mailbody_notitie_3); END;
mld.setmeldingstatus (v_melding_key, 2, v_perslid_key);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'maillog',
'Geregistreerd onder melding '
|| v_melding_key);
END IF;
-- Find the lowest volgnummer of the Folder-flexfield.
--- niet nodig voor BRED want moet op altijd zelfde foldermap_key landen
v_folder_kkey := c_folder_kkey ;
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_melding_key / 1000),
'FM0000')
|| '___\M'
|| v_melding_key
|| '\'
|| v_folder_kkey
|| '\');
-- originele email wordt opgeslagen bij de melding
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'kenmerkorgmailpath',
'MLD\M'
|| TO_CHAR (TRUNC (v_melding_key / 1000),
'FM0000')
|| '___\M'
|| v_melding_key
|| '\'
|| v_folder_kkey
|| '\');
END IF;
---- MAILINSTELLING - SERVICEDESK _PLANNING TBV OPDRACHTEN
WHEN UPPER (pto) LIKE 'SERVICEDESK_PLANNING@%'
THEN
-- Probeer noteur te bepalen op basis van e-mail adres tussen '<>' na eerste voorkomen 'Van:'!
v_errormsg := 'Fout bepalen noteur';
v_perslid_key := c_leverancier_M2M_key;
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_mailbody_notitie, 1, 2000));
v_errormsg := 'Fout bijwerken opdracht-kleurbolletje';
UPDATE mld_opdr
SET mld_opdr_flag = 1 -- Zwart
WHERE mld_opdr_key = v_opdracht_key;
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! - DEZE NOG NETJES INPASSEN + NOTIFICATIE MLDNOB NAAR BEHANDELAAR DIRECT DOEN!!
UPDATE mld_opdr
SET mld_opdr_actiecode = 132 -- BO + Attentie
WHERE mld_opdr_key = v_opdracht_key;
-- De gesplitste notities ook even wegschrijven
IF v_typeopdr_key = 5 -- werkopdracht
THEN
BEGIN mld.upsertopdrachtkenmerk (243, v_opdracht_key, v_mailbody_notitie_1); END;
BEGIN mld.upsertopdrachtkenmerk (244, v_opdracht_key, v_mailbody_notitie_2); END;
BEGIN mld.upsertopdrachtkenmerk (245, v_opdracht_key, v_mailbody_notitie_3); END;
END IF;
IF v_typeopdr_key = 202 -- offerte
THEN
BEGIN mld.upsertopdrachtkenmerk (249, v_opdracht_key, v_mailbody_notitie_1); END;
BEGIN mld.upsertopdrachtkenmerk (250, v_opdracht_key, v_mailbody_notitie_2); END;
BEGIN mld.upsertopdrachtkenmerk (251, v_opdracht_key, v_mailbody_notitie_3); END;
END IF;
-- Find the lowest volgnummer of the Folder-flexfield.
--- niet nodig voor BRED want moet op altijd zelfde foldermap_key landen
v_folder_kkey := c_folder_opdr_kkey ;
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 || '\');
-- originele email wordt opgeslagen bij de opdracht - NOG TESTEN IN ACCEPT!!
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'kenmerkorgmailpath',
'MLD\O'
|| TO_CHAR (TRUNC (v_opdracht_key / 1000),
'FM0000')
|| '___\O'
|| v_opdracht_key
|| '\'
|| v_folder_kkey
|| '\');
END IF;
ELSE
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder ');
END CASE;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog ('PROCESSEMAIL',
'E',
'BRED_processemail afgebroken!',
'[' || pfrom || '] ' || v_errormsg);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (
psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder ');
COMMIT;
END;
END;
/
-------------------------------
--- DOMEINVIEWS ---------------
-------------------------------
CREATE OR REPLACE VIEW bred_v_personenlijst
(
PRS_PERSLID_KEY,
NAAM,
PERSONEELSNUMMER,
AFDELING,
EMAIL,
PRS_PERSLID_VERWIJDER
)
AS
SELECT
p.prs_perslid_key,
CASE WHEN p.prs_perslid_tussenvoegsel IS NULL
THEN p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || sp.prs_srtperslid_omschrijving || ')'
END
naam,
p.prs_perslid_nr,
a.prs_afdeling_naam3,
p.prs_perslid_email,
p.prs_perslid_verwijder
FROM
prs_perslid p,
prs_srtperslid sp,
prs_v_afdeling a,
prs_bedrijf b
WHERE
p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 8 -- bedrijfs_key BRED
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
ORDER BY sp.prs_srtperslid_omschrijving DESC, p.prs_perslid_voornaam, p.prs_perslid_naam
;
CREATE OR REPLACE VIEW bred_v_ruimtes
(
ALG_RUIMTE_KEY,
ALG_RUIMTE_OMSCHRIJVING,
ALG_SRTRUIMTE_OMSCHRIJVING,
ALG_RUIMTE_VERWIJDER
)
AS
SELECT alg_ruimte_key,
alg_gebouw_naam || ' - ' || alg_ruimte_nr || ' - ' || alg_ruimte_omschrijving
alg_ruimte_omschrijving,
alg_srtruimte_omschrijving,
alg_ruimte_verwijder
FROM alg_v_ruimte_gegevens_all
WHERE instr(alg_ruimte_upper_nr, 'FICTIEF') = 0
ORDER BY alg_gebouw_naam, alg_ruimte_nr
;
-------------------------------
--- NOTI-JOBS ---------------
-------------------------------
-- Contract-Rappel
--- Notificatie op contractbeheerder en/of verantwoordelijke
--- Onderstaand rapport is basisview en deze fungeert als bron voor de rappel-notificatie
CREATE OR REPLACE VIEW bred_v_cnt_rappel_basis
AS
SELECT d.ins_discipline_omschrijving,
c.cnt_contract_key,
c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie,
NULL, '',
'.' || c.cnt_contract_versie)
cnt_contract_nr,
c.cnt_contract_looptijd_van begindatum,
c.cnt_contract_looptijd_tot einddatum,
cnt.cnt_getopzegdatum (c.cnt_contract_key) cnt_opzegdatum,
cnt.cnt_getrappeldatum (c.cnt_contract_key) cnt_rappeldatum,
DECODE (cnt.cnt_contract_status (c.cnt_contract_looptijd_van,
cnt.cnt_getrappeldatum (c.cnt_contract_key),
cnt.cnt_getopzegdatum (c.cnt_contract_key),
c.cnt_contract_looptijd_tot),
0, lcl.l ('lcl_cnt_future'),
1, lcl.l ('lcl_cnt_topical'),
2, lcl.l ('lcl_cnt_warn'),
3, lcl.l ('lcl_cnt_cancel'),
4, lcl.l ('lcl_cnt_past'))
fase_actief,
DECODE (
c.cnt_contract_status,
0,
DECODE (fac.getsetting ('cnt_contract_approval'),
1, lcl.l ('lcl_cnt_active_approval'),
lcl.l ('lcl_cnt_active')),
1,
lcl.l ('lcl_cnt_inactive'),
2,
lcl.l ('lcl_cnt_new'),
3,
lcl.l ('lcl_cnt_forapproval'))
cnt_contract_status,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 11) -- contractbeheerder
vink_beheerder,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = c.prs_perslid_key_beh
AND p.prs_perslid_verwijder IS NULL)
beheerder_email,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 12) -- contractverantwoordelijke
vink_verantwoordelijke,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = c.prs_perslid_key_eig
AND p.prs_perslid_verwijder IS NULL)
veantwoordelijke_email
FROM cnt_v_aanwezigcontract c, ins_tab_discipline d
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_module = 'CNT';
-- SCHG: Contractbeheerder(_eig) is Beheerder/Administrateur en de Contractverantwoordelijke (_beh) is 1e aanspreekpunt die beslist over wel/niet verlengen.
CREATE OR REPLACE VIEW bred_v_noti_cntreminder
(
code,
sender,
receiver,
text,
key,
xkey,
xemail,
xmobile
)
AS -- Op rappel-datum TER INFO-mail naar de Beheerder/Administrateur sturen
SELECT 'CNTMAI',
NULL,
c.prs_perslid_key_beh,
'TER INFO: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
NULL,
NULL
FROM bred_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_beheerder = 1
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND c.prs_perslid_key_beh <> COALESCE(c.prs_perslid_key_eig, -1) -- als administrateur gelijk aan 1e aanspreekpunt dan dan sturen we de info-mail niet uit
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 15)
UNION ALL -- Op rappel-datum ACTIE-mail naar het 1e aanspreekpunt sturen (contractverantwoordelijke)
SELECT 'CUST01',
NULL,
c.prs_perslid_key_eig,
'ACTIE: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
NULL,
NULL
FROM bred_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_verantwoordelijke = 1
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND c.prs_perslid_key_eig IS NOT NULL
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 15)
;
-------------------------------
--- RAPPORTAGES ---------------
-------------------------------
CREATE OR REPLACE VIEW bred_v_rap_opdrachten
(
INTERN,
TYPE,
MLD_OPDR_KEY,
MLD_UITVOERENDE_KEY,
OPDRACHTNR,
STATUS,
MELDING,
BEHANDELAAR,
LOCATIE_PLAATS,
LOCATIE_OMSCHRIJVING,
OPDRACHT_AANMAAKDATUM,
GEPLANDE_AANVANG,
GEPLANDE_AANVANG_B, -- berekend voor kalenderweergave
GEPLANDE_EINDDATUM,
GEPLANDE_EINDDATUM_B, -- berekend voor kalenderweergave
OPDRACHT_EINDDATUM,
MELDING_EINDDATUM,
OMSCHRIJVING,
PRS_PERSLID_KEY,
NAAM_UITVOERDER,
AFMELD_DATUM,
OPDRACHT_TYPE,
TD_NAAM,
PRIORITEIT,
STATUS_KALENDER -- t.b.v. kalenderweergave
)
AS
SELECT mu.intern,
CASE
WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN 'Poule-opdracht'
WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN 'Klus-opdracht'
WHEN mu.intern = 0 THEN 'Externe opdracht'
ELSE '<?>'
END
TYPE,
o.mld_opdr_key,
CASE
WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN mu.mld_uitvoerende_key
WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN o.prs_perslid_key
WHEN mu.intern = 0 THEN mu.mld_uitvoerende_key
ELSE NULL
END
mld_uitvoerende_key,
TO_CHAR (o.mld_melding_key)
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
DECODE (
os.mld_statusopdr_key,
8, DECODE (o.mld_opdr_halted,
1, 'Onderbroken',
os.mld_statusopdr_omschrijving),
os.mld_statusopdr_omschrijving)
status,
std.mld_stdmelding_omschrijving,
COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
behandelaar,
l.alg_locatie_plaats,
l.alg_locatie_omschrijving,
o.mld_opdr_datumbegin,
o.mld_opdr_plandatum
geplande_aanvang,
CASE WHEN o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum ELSE o.mld_opdr_datumbegin END
geplande_aanvang_b,
o.mld_opdr_plandatum2
geplande_einddatum,
CASE WHEN o.mld_opdr_plandatum2 IS NOT NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum2
WHEN o.mld_opdr_plandatum2 IS NULL AND o.mld_opdr_plandatum IS NOT NULL THEN o.mld_opdr_plandatum + 2/24
ELSE o.mld_opdr_datumbegin + 2/24
END
geplande_einddatum_b,
o.mld_opdr_einddatum,
m.mld_melding_einddatum,
TRIM (
REGEXP_REPLACE (
REGEXP_SUBSTR (o.mld_opdr_omschrijving,
'(([^ ]*)( |$)*){10}'),
'[[:space:]]',
' '))
|| '...'
omschrijving,
p.prs_perslid_key,
mu.naam
naam_uitvoerder,
(SELECT MAX (ft.fac_tracking_datum)
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = o.mld_opdr_key
AND ft.fac_srtnotificatie_key = 80) -- ORDAFM
afmeld_datum,
ot.mld_typeopdr_omschrijving,
CASE
WHEN mu.TYPE = 'B' AND mu.intern = 1 THEN COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
WHEN mu.TYPE = 'P' AND mu.intern = 1 THEN mu.naam
ELSE ''
END td_naam,
COALESCE(v.prioriteit,'3 - NORMAAL')
prioriteit,
CASE
WHEN os.mld_statusopdr_omschrijving = 'Afgemeld' THEN 'Afgemeld'
WHEN os.mld_statusopdr_omschrijving = 'Afgewezen' THEN 'Afgewezen'
WHEN mu.intern = 1 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NULL THEN 'Nog inplannen'
WHEN mu.intern = 1 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NOT NULL THEN 'Ingepland'
WHEN mu.intern = 0 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NULL THEN 'Nog niet bevestigd'
WHEN mu.intern = 0 AND (os.mld_statusopdr_omschrijving = 'Toegekend' OR os.mld_statusopdr_omschrijving = 'Geaccepteerd') AND o.mld_opdr_plandatum IS NOT NULL THEN 'Bevestigd'
ELSE ''
END status_kalender
FROM mld_opdr o,
mld_melding m,
mld_typeopdr ot,
prs_v_perslid_fullnames p,
ins_tab_discipline d,
mld_stdmelding std,
alg_locatie l,
alg_district d,
mld_v_uitvoerende mu,
mld_statusopdr os,
(
SELECT ko.mld_opdr_key, ud.fac_usrdata_code || ' - ' || ud.fac_usrdata_omschr prioriteit
FROM mld_kenmerkopdr ko, fac_usrdata ud
WHERE fac.safe_to_number(ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key
AND fac_usrtab_key = 41 -- keuzelijst eigen tabel Prioriteit
AND ko.mld_kenmerk_key IN (161, 162) -- kenmerk Prioriteit
) v
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND o.prs_perslid_key = p.prs_perslid_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_isofferte = 0 -- Alleen werkopdrachten
AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie
AND l.alg_district_key = d.alg_district_key
AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
AND os.mld_statusopdr_key = o.mld_statusopdr_key
AND o.mld_opdr_key = v.mld_opdr_key(+);
CREATE OR REPLACE VIEW bred_v_cal_opdrachten
(
USER_KEY,
TITLE,
VAN,
TOT,
ITEM_KEY,
COLOR,
TEXTCOLOR,
NAAM_UITVOERRDER,
LOCATIE_PLAATS,
STATUS_KALENDER,
INTERN,
OPDRACHT_TYPE
)
AS
SELECT mld_uitvoerende_key,
' - ' || opdrachtnr || CHR(10)
|| naam_uitvoerder || CHR(10)
|| locatie_omschrijving || CHR(10)
|| 'Status: ' || status_kalender || CHR(10)
|| CASE
WHEN geplande_aanvang IS NOT NULL AND geplande_einddatum IS NOT NULL THEN 'Bevestigd van ' || TO_CHAR(geplande_aanvang_b) || ' tot ' || TO_CHAR(geplande_einddatum_b)
WHEN geplande_aanvang IS NOT NULL AND geplande_einddatum IS NULL THEN 'Bevestigde aanvang: ' || TO_CHAR(geplande_aanvang_b)
WHEN geplande_aanvang IS NULL AND geplande_einddatum IS NOT NULL THEN 'Bevestigde einddatum: ' || TO_CHAR(geplande_einddatum_b)
ELSE '<nog te plannen>' END
|| CHR(10) || 'Prio: ' || prioriteit
title,
geplande_aanvang_b
van,
geplande_einddatum_b
tot,
mld_opdr_key,
DECODE (intern, 1,
DECODE (status_kalender,
'Afgewezen', '#C0C0C0', -- grijs
'Afgemeld', '#C0C0C0', -- grijs
'Nog niet bevestigd', '#F5ED5D', -- lichtgeel
'Bevestigd', '#DED304', -- donkergeel
'#0000FF'),
0,
DECODE (status_kalender,
'Afgewezen', '#C0C0C0', -- grijs
'Afgemeld', '#008000', -- groen
'Nog niet bevestigd', '#FF4611', -- rood/oranje
'Bevestigd', '#FFA500', -- oranje
'#0000FF'),
'#0000FF')
color,
DECODE (intern, 1,
DECODE (status_kalender,
'Afgewezen', '#bf0b3b', -- rood
'Afgemeld', '#000000', -- zwart
'Nog inplannen', '#FFFFFF', -- wit,
'Ingepland',
DECODE (LOWER(prioriteit),
'3 - normaal', '#FFFFFF', -- wit
'4 - laag', '#FFFFFF', -- wit
'2 - hoog', '#f58a20', -- oranje
'1 - kritiek', '#bf0b3b', -- rood
'#000000'),
'#000000'),
0,
DECODE (status_kalender,
'Afgewezen', '#bf0b3b', -- rood
'Afgemeld', '#000000', -- zwart
'Nog niet bevestigd', '#FFFFFF', -- wit
'Bevestigd', '#FFFFFF', -- wit
'#0000FF'),
'#000000'
) textcolor,
naam_uitvoerder,
locatie_plaats,
status_kalender,
intern,
opdracht_type
FROM bred_v_rap_opdrachten
ORDER BY geplande_aanvang_b ;
-- Catering: bestellen (receptie) en daarna brengen en halen/opruimen (facilitaire team)
---- via calenderview in beeld houden dagelijks
CREATE OR REPLACE VIEW bred_v_rap_meldingen_cat
(
VAKGROEP_TYPE,
VAKGROEP,
STD_MELDING,
MLD_MELDING_KEY,
MELDING_NUMMER,
MELDING_ONDERWERP,
MELDING_AANVRAGER,
MELDING_PLAATS,
MELDING_RUIMTE,
MELDING_STATUS,
MELDING_BEHANDELAAR,
MELDING_BEHANDELAAR_KEY,
MELDING_BEHANDELTEAM,
MELDING_DATUM,
MELDING_EINDATUM,
MELDING_ACTIEDATUM,
-- kenmerkvelden lunch halen/brengen
TIJDSTIP_VAN,
TIJDSTIP_TOT,
TIJDSTIP_BRENGEN,
GEPLANDE_AANVANG,
GEPLANDE_AANVANG_B,
GEPLANDE_EINDDATUM,
GEPLANDE_EINDDATUM_B,
-- kenmerkvelden status
STATUS_BESTELD,
STATUS_GEBRACHT,
STATUS_OPGEHAALD,
STATUS_KALENDER
)
AS
SELECT sd.ins_srtdiscipline_omschrijving,
d.ins_discipline_omschrijving,
std.mld_stdmelding_omschrijving,
m.mld_melding_key,
sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key)
meldingnummer,
m.mld_melding_onderwerp,
p.prs_perslid_naam_full,
l.alg_locatie_plaats,
r.alg_ruimte_omschrijving,
ms.mld_statuses_omschrijving,
COALESCE (ab.prs_perslid_naam_full, '<nog geen actieve behandelaar>')
behandelaar,
ab.prs_perslid_key
melding_behandelaar_key,
COALESCE (abt.ins_discipline_omschrijving, '<nog geen behandelteam>')
behandelteam,
m.mld_melding_datum,
m.mld_melding_einddatum,
m.mld_melding_actiedatum,
-- kenmerkvelden lunch - afspraak
v.tijdstip_van
tijdstip_van,
v.tijdstip_tot
tijdstip_tot,
v.tijdstip_brengen
tijdstip_brengen,
CASE WHEN v.tijdstip_brengen IS NOT NULL
THEN TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || v.tijdstip_brengen || ':00'
ELSE TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || '06:00' || ':00'
END
geplande_aanvang,
CASE WHEN v.tijdstip_brengen IS NOT NULL
THEN fac.safe_to_date(TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || v.tijdstip_brengen || ':00', 'dd-mm-yyyy hh24:mi:ss')
ELSE fac.safe_to_date(TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || '06:00' || ':00', 'dd-mm-yyyy hh24:mi:ss')
END
geplande_aanvang_b,
CASE WHEN v.tijdstip_tot IS NOT NULL
THEN TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || v.tijdstip_tot || ':00'
ELSE TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || '19:00' || ':00'
END
geplande_einddatum,
CASE WHEN v.tijdstip_tot IS NOT NULL
THEN fac.safe_to_date(TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || v.tijdstip_tot || ':00', 'dd-mm-yyyy hh24:mi:ss')
ELSE fac.safe_to_date(TO_CHAR(v.datum_afspraak,'dd-mm-yyyy') || ' ' || '19:00' || ':00', 'dd-mm-yyyy hh24:mi:ss')
END
geplande_einddatum_b,
v.besteld
besteld,
v.gebracht
gebracht,
v.opgehaald
opgehaald,
-- statussen in kalender - rood - oranje - groen
CASE
WHEN v.gebracht IS NULL AND v.opgehaald IS NULL THEN 'Open'
WHEN v.gebracht IS NOT NULL AND v.opgehaald IS NULL THEN 'Gebracht'
WHEN v.gebracht IS NOT NULL AND v.opgehaald IS NOT NULL THEN 'Gereed'
ELSE ''
END status_kalender
FROM mld_melding m,
prs_v_perslid_fullnames p, -- aanvrager
prs_v_perslid_fullnames ab, -- actieve behandelaar
ins_tab_discipline abt, -- actieve behandelteam
ins_tab_discipline d,
ins_srtdiscipline sd,
mld_stdmelding std,
alg_locatie l,
alg_district d,
mld_statuses ms,
bred_v_ruimtes r,
(SELECT
mld_melding_key,
TRUNC(mld_melding_einddatum)
datum_afspraak,
flx.getflex('MLD',363, mld_melding_key)
tijdstip_van,
flx.getflex('MLD',364, mld_melding_key)
tijdstip_tot,
flx.getflex('MLD',404, mld_melding_key)
tijdstip_brengen,
flx.getflex('MLD',484, mld_melding_key)
besteld,
flx.getflex('MLD',461, mld_melding_key)
gebracht,
flx.getflex('MLD',462, mld_melding_key)
opgehaald
FROM mld_melding
WHERE mld_stdmelding_key = 119) v -- kenmerken bij catering
WHERE
m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_stdmelding_key = 119
AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.prs_perslid_key = p.prs_perslid_key -- aanvrager
AND m.mld_melding_behandelaar2_key = ab.prs_perslid_key(+)
AND m.mld_ins_discipline_key = abt.ins_discipline_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie
AND l.alg_district_key = d.alg_district_key
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_melding_key = v.mld_melding_key
;
CREATE OR REPLACE VIEW bred_v_cal_meldingen_cat
(
USER_KEY,
TITLE,
VAN,
TOT,
ITEM_KEY,
COLOR,
TEXTCOLOR,
MELDING_BEHANDELTEAM,
MELDING_BEHANDELAAR,
MELDING_RUIMTE,
MELDING_ONDERWERP,
STATUS_KALENDER
)
AS
SELECT melding_behandelaar_key,
' - ' || melding_nummer || ' (' || melding_status || ')' || CHR(10)
|| melding_ruimte || CHR(10)
|| melding_behandelteam || ' / ' || melding_behandelaar || CHR(10)
|| 'Status: ' || status_kalender || CHR(10)
|| '- ' || geplande_aanvang || CHR(10)
|| '- ' || geplande_einddatum
title,
geplande_aanvang_b
van,
geplande_einddatum_b
tot,
mld_melding_key,
DECODE (status_kalender,
'Gereed', '#008000', -- groen
'Open', '#FF4611', -- rood/oranje
'Gebracht', '#FFA500', -- oranje
'#0000FF')
color,
DECODE (status_kalender,
'Gereed', '#000000', -- zwart
'Open', '#FFFFFF', -- wit
'Gebracht', '#FFFFFF', -- wit
'#000000')
textcolor,
melding_behandelteam,
melding_behandelaar,
melding_ruimte,
melding_onderwerp,
status_kalender
FROM bred_v_rap_meldingen_cat
ORDER BY geplande_aanvang_b ;
-- O.a. voor beheer nieuwe medewerkers en inactieve mederwerkers en koppeling object voor registreren van de uitgegeven middelen
CREATE OR REPLACE VIEW bred_v_rap_personenbeheer
(
PRS_PERSLID_KEY,
PRS_PERSLID_NAAM,
PRS_PERLSID_EMAIL,
PRS_PERSLID_TELNR,
PRS_PERSLID_MOBIEL,
PRS_AFDELING_OMSCHRIJVING,
PRS_PERSLID_AANMAAK,
PRS_PERSLID_INDIENST,
PRS_PERSLID_UITDIENST,
PRS_PERSLID_INACTIEF,
PRS_PERSLID_INACTIEF_V,
PRS_PERSLID_VERWIJDER,
PRS_PERSLID_VERWIJDER_V,
OBJECT_MIDDEL_ACTIEF
)
AS
SELECT p.prs_perslid_key,
p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam
prs_perslid_naam,
p.prs_perslid_email,
p.prs_perslid_telefoonnr,
p.prs_perslid_mobiel,
a.prs_afdeling_omschrijving || ' (' || a.prs_afdeling_upper || ')'
prs_afdeling_omschrijving,
p.prs_perslid_aanmaak,
p.prs_perslid_ingangsdatum
prs_perslid_indienst,
p.prs_perslid_einddatum
prs_perslid_uitdienst,
p.prs_perslid_inactief,
CASE WHEN p.prs_perslid_inactief IS NOT NULL THEN 'ja' ELSE 'nee' END
prs_perslid_inactief_v,
p.prs_perslid_verwijder,
CASE WHEN p.prs_perslid_verwijder IS NOT NULL THEN 'ja' ELSE 'nee' END
prs_perslid_verwijder_v,
CASE WHEN d.prs_perslid_key IS NOT NULL THEN 'ja' ELSE 'nee' END
object_middel_actief
FROM prs_perslid p, prs_v_afdeling a, prs_bedrijf b,
(SELECT ins_alg_ruimte_key prs_perslid_key
FROM ins_deel d
WHERE d.ins_Srtdeel_key = 41 AND ins_alg_ruimte_type = 'P'
AND ins_deel_verwijder IS NULL
AND ins_deel_actief = 1
AND (ins_deel_vervaldatum IS NULL OR TRUNC(ins_deel_vervaldatum) <= TRUNC(SYSDATE) )
) d
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 8
AND p.prs_perslid_key = d.prs_perslid_key (+)
;
-- Dagelijkse taak
CREATE OR REPLACE PROCEDURE bred_daily
AS
BEGIN
bred.schonen_accounts;
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