-- -- $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 ' 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, '') 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, '') 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 '' 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, '') behandelaar, ab.prs_perslid_key melding_behandelaar_key, COALESCE (abt.ins_discipline_omschrijving, '') 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