-- -- $Id$ -- DEFINE thisfile = 'bvb1.SQL' DEFINE dbuser = 'BVB1' 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 PACKAGE BVB1 AS PROCEDURE melding_after_save (p_melding_key IN NUMBER); PROCEDURE processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER); PROCEDURE RM_update_folders; PROCEDURE RM_update_equipment; END; / CREATE OR REPLACE PACKAGE BODY BVB1 AS PROCEDURE melding_after_save (p_melding_key IN NUMBER) AS CURSOR c IS SELECT mld_melding_key FROM mld_melding m, mld_stdmelding std, mld_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key IN (2,3) -- Storingen en interne actielijst AND BITAND(std.mld_stdmelding_planbaar,4) = 4 AND m.mld_melding_status = 4 AND mld_melding_actiedatum IS NULL AND 1=0; v_tijdsduur NUMBER; v_eenheid VARCHAR2(1); v_actiedatum DATE; v_status MLD_MELDING.MLD_MELDING_STATUS%TYPE; BEGIN -- meldingen die binnen een dag afgehandeld moeten worden krijgen -- direct een actiedatum. Hierdoor komen ze in het planbord te staan. SELECT std.mld_stdmelding_t_uitvoertijd.tijdsduur tijdsduur, std.mld_stdmelding_t_uitvoertijd.eenheid eenheid, m.mld_melding_actiedatum, m.mld_melding_status INTO v_tijdsduur, v_eenheid, v_actiedatum, v_status FROM mld_stdmelding std, mld_melding m WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND m.mld_melding_key = p_melding_key; IF v_actiedatum IS NULL AND ( v_eenheid = 'D' AND v_tijdsduur = 1 OR v_eenheid = 'U' AND v_tijdsduur <= 8) THEN UPDATE mld_melding SET mld_melding_actiedatum = mld_melding_datum WHERE mld_melding_key = p_melding_key; END IF; -- Als de melding geaccepteerd wordt en de actiedatum is nog leeg dan gaan we de actiedatum -- vullen met de dag van vandaag zodat de melding ook op de kalender (rapportage) verschijnt. FOR rec IN c LOOP UPDATE mld_melding SET mld_melding_actiedatum = SYSDATE WHERE mld_melding_key = rec.mld_melding_key; END LOOP; END; PROCEDURE processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER ) AS sender prs_perslid.prs_perslid_key%TYPE; newkey mld_melding.mld_melding_key%TYPE; defaultstdmelding fac_setting.fac_setting_default%TYPE; kkey_att mld_kenmerk.mld_kenmerk_key%TYPE; kkey_mail mld_kenmerk.mld_kenmerk_key%TYPE; errormsg fac_result.fac_result_waarde%TYPE; BEGIN BEGIN -- Valideer de sender in pfrom: kennen we deze? SELECT prs_perslid_key INTO sender FROM prs_perslid p, prs_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key AND UPPER (prs_perslid_email) = UPPER (pfrom); EXCEPTION WHEN NO_DATA_FOUND THEN sender := 4801; END; CASE WHEN UPPER (pto) LIKE 'HUURDER@%' THEN defaultstdmelding := 1861; kkey_att := 1; kkey_mail := 4661; WHEN UPPER (pto) LIKE 'OBJECTREGISTRATIE@%' THEN defaultstdmelding := 1981; kkey_att := 1; kkey_mail := 4661; ELSE NULL; END CASE; IF defaultstdmelding IS NOT NULL THEN -- suggested extensions: -- check for MLDUSE-write autorisations -- parse the subject to find an appropriate stdmelding, if uniquely possible -- append (as a note?) to an existing melding if #key is found in the subject BEGIN INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_melding_datum, mld_melding_onderwerp, mld_melding_omschrijving, mld_melding_status, mld_stdmelding_key, mld_melding_email_ext, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed) VALUES ('MLD', 4, -- email SYSDATE, SUBSTR (psubject, 1, 80), SUBSTR (REPLACE (SUBSTR (pbody, 1, 4000), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels NULL, defaultstdmelding, pfrom, sender, sender, NULL, 3) RETURNING mld_melding_key INTO newkey; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || to_char( TRUNC(newkey/1000), 'FM0000') || '___\M' || newkey || CHR(92) || kkey_att || CHR(92)); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (newkey / 1000), 'FM0000') || '___\M' || newkey || CHR(92) || kkey_mail || CHR(92)); mld.setmeldingstatus (newkey, 2, sender); END; 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; PROCEDURE RM_update_folders AS -- We nemen alleen groepen over die ook objectsoorten bevatten. CURSOR c_srtgroep IS SELECT * FROM bvb1_v_folder_structuur fs WHERE fs.niveau = 1 AND EXISTS (SELECT 1 FROM bvb1_v_folder_structuur fs2 WHERE fs2.niveau = 2 AND fs2.parent1 = fs.id); CURSOR c_srtdeel (c_srtgroep_id VARCHAR2) IS SELECT * FROM bvb1_v_folder_structuur WHERE parent1 = c_srtgroep_id AND name IS NOT NULL; v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE; v_srtgroep_key INS_SRTGROEP.INS_SRTGROEP_KEY%TYPE; v_srtdeel_key INS_SRTDEEL.INS_SRTDEEL_KEY%TYPE; v_aanduiding VARCHAR2 (200); BEGIN SELECT ins_discipline_key INTO v_discipline_key FROM ins_discipline WHERE ins_discipline_omschrijving = 'AV'; FOR rec IN c_srtgroep LOOP BEGIN SELECT ins_srtgroep_key INTO v_srtgroep_key FROM ins_srtgroep WHERE ins_srtgroep_verwijder IS NULL AND ins_srtgroep_externnr = rec.id; UPDATE ins_srtgroep SET ins_srtgroep_omschrijving = rec.name || ' (' || rec.id || ')' WHERE ins_srtgroep_key = v_srtgroep_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtgroep (ins_discipline_key, ins_srtgroep_omschrijving, ins_srtgroep_externnr) VALUES (v_discipline_key, rec.name || ' (' || rec.id || ')', rec.id) RETURNING ins_srtgroep_key INTO v_srtgroep_key; END; FOR rec_d IN c_srtdeel (rec.id) LOOP BEGIN DBMS_OUTPUT.put_line (rec_d.id || '- ' || rec_d.name); SELECT ins_srtdeel_key INTO v_srtdeel_key FROM ins_srtdeel WHERE ins_srtdeel_verwijder IS NULL AND ins_srtdeel_externnr = rec_d.id; UPDATE ins_srtdeel SET ins_srtdeel_omschrijving = REPLACE (rec_d.PATH, rec.name || CHR (47), ''), ins_srtgroep_key = v_srtgroep_key WHERE ins_srtdeel_key = v_srtdeel_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtdeel (ins_srtgroep_key, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_srtdeel_externnr, ins_srtdeel_binding) VALUES (v_srtgroep_key, rec_d.id, REPLACE (rec_d.PATH, rec.name || CHR (47), ''), rec_d.id, 1) -- ruimte koppeling RETURNING ins_srtdeel_key INTO v_srtdeel_key; END; END LOOP; END LOOP; END; PROCEDURE RM_update_equipment AS CURSOR c IS SELECT * FROM bvb1_imp_equipment; v_discipline_key INS_TAB_DISCIPLINE.INS_DISCIPLINE_KEY%TYPE; v_srtgroep_key INS_SRTGROEP.INS_SRTGROEP_KEY%TYPE; v_srtdeel_key INS_SRTDEEL.INS_SRTDEEL_KEY%TYPE; v_deel_key INS_DEEL.INS_DEEL_KEY%TYPE; v_kk_aanschafdatum INS_KENMERK.INS_KENMERK_KEY%TYPE; v_kk_aanschafprijs INS_KENMERK.INS_KENMERK_KEY%TYPE; v_kk_serienummer INS_KENMERK.INS_KENMERK_KEY%TYPE; v_srtcontrole_key INS_SRTCONTROLE.INS_SRTCONTROLE_KEY%TYPE; v_srtcontroledl_xcp_key INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_KEY%TYPE; v_count NUMBER; BEGIN -- Eerst gaan we de kenmerk-keys opzoeken: SELECT ins_kenmerk_key INTO v_kk_aanschafdatum FROM ins_kenmerk WHERE ins_kenmerk_verwijder IS NULL AND ins_kenmerk_code = 'AV_AANSCHAFDATUM'; SELECT ins_kenmerk_key INTO v_kk_aanschafprijs FROM ins_kenmerk WHERE ins_kenmerk_verwijder IS NULL AND ins_kenmerk_code = 'AV_AANSCHAFPRIJS'; SELECT ins_kenmerk_key INTO v_kk_serienummer FROM ins_kenmerk WHERE ins_kenmerk_verwijder IS NULL AND ins_kenmerk_code = 'AV_SERIENUMMER'; FOR rec IN c LOOP BEGIN SELECT ins_srtdeel_key, ins_discipline_key INTO v_srtdeel_key, v_discipline_key FROM ins_srtdeel sd, ins_srtgroep sg WHERE sd.ins_srtdeel_externnr = REPLACE (rec.folder, '/folders/') AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND ins_srtdeel_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line ('Srtdeel niet gevonden: ' || rec.folder); v_srtdeel_key := -1; END; IF v_srtdeel_key <> -1 THEN BEGIN SELECT ins_deel_key INTO v_deel_key FROM ins_deel WHERE ins_deel_verwijder IS NULL AND ins_deel_externnr = rec.serial_id; UPDATE ins_deel SET ins_srtdeel_key = v_srtdeel_key, ins_deel_omschrijving = SUBSTR ('AV_' || rec.serial_qrcodes, 1, 60), ins_deel_opmerking = SUBSTR (rec.name, 1, 320 - LENGTH (rec.serial_displayname) - 4), ins_deel_aanmaak = COALESCE (rec.serial_purchasedate, SYSDATE), ins_discipline_key = v_discipline_key WHERE ins_deel_key = v_deel_key; EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN --dbms_output.put_line ( SUBSTR (rec.name, 1, 60 - LENGTH (rec.serial_id) - 4) || ' (' || rec.serial_id || ')'); INSERT INTO ins_deel (ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_deel_aantal, ins_deel_omschrijving, ins_deel_opmerking, ins_deel_aanmaak, ins_discipline_key, ins_deel_externnr) VALUES ( v_srtdeel_key, 404, 'R', 1, SUBSTR ('AV_' || rec.serial_qrcodes, 1, 60), SUBSTR (rec.name, 1, 320 - LENGTH (rec.serial_displayname) - 4) || ' (' || rec.serial_displayname || ')', COALESCE (rec.serial_purchasedate, SYSDATE), v_discipline_key, rec.serial_id) RETURNING ins_deel_key INTO v_deel_key; END; END; -- nu kijken of er een inspectie gekoppeld is aan het objectsoort BEGIN SELECT ins_srtcontrole_key INTO v_srtcontrole_key FROM ins_srtcontrole sc WHERE ins_srtinstallatie_key = v_srtdeel_key AND ins_srtcontrole_niveau = 'S'; BEGIN SELECT ins_srtcontroledl_xcp_key INTO v_srtcontroledl_xcp_key FROM ins_srtcontroledl_xcp WHERE ins_deel_key = v_deel_key AND ins_srtcontrole_key = v_srtcontrole_key; IF COALESCE(rec.serial_purchase_costs,0) <> 0 THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_kosten = rec.serial_purchase_costs WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; ELSE DELETE ins_srtcontroledl_xcp WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN -- Nieuwe uitzondering aanmaken om de prijs op te slaan IF COALESCE(rec.serial_purchase_costs,0) <> 0 THEN INSERT INTO ins_srtcontroledl_xcp( ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_kosten) VALUES (v_deel_key, v_srtcontrole_key, rec.serial_purchase_costs); END IF; END; EXCEPTION WHEN NO_DATA_FOUND THEN -- Geen vervangingstaak gevonden. Misschien niet nodig of misschien een nieuw objectsoort. fac.writelog ('IMPORT_AV', 'W', 'Vervangingstaak niet gevonden.', rec.folder); END; -- update kenmerken FLX.setflex('INS', v_kk_aanschafdatum, v_deel_key, TO_CHAR(rec.serial_purchasedate, 'dd-mm-yyyy')); FLX.setflex('INS', v_kk_aanschafprijs, v_deel_key, rec.serial_purchase_costs); FLX.setflex('INS', v_kk_serienummer, v_deel_key, rec.serial); END IF; END LOOP; SELECT count(*) INTO v_count FROM bvb1_imp_equipment; IF v_count > 500 THEN -- Verwijder objecten die niet meer voorkomen in de import UPDATE ins_deel SET ins_deel_verwijder = SYSDATE WHERE ins_deel_key IN (SELECT d.ins_deel_key FROM ins_v_deel_gegevens dg, ins_deel d WHERE ins_discipline_omschrijving = 'AV' AND d.ins_deel_externnr IS NOT NULL AND dg.ins_deel_key = d.ins_deel_key AND NOT EXISTS (SELECT 1 FROM bvb1_imp_equipment i WHERE d.ins_deel_externnr = i.serial_id)); END IF; END; END; / -- view om overzicht van de geplande acties te krijgen. CREATE OR REPLACE VIEW bvb1_v_rap_gepl_acties AS SELECT o.mld_opdr_key, pf.prs_perslid_naam_full, o.mld_melding_key, fac_activiteit_omschrijving, fac_activiteit_periode, DECODE (fac_activiteit_eenheid, 4, 'jaarlijks', 3, 'maandelijks', 2, 'wekelijks', 1, 'dagelijks') fac_activiteit_eenheid, o.mld_opdr_datumbegin, mld.getopdrachtstatusdate (o.mld_opdr_key, 6) mld_opdr_afgemeld FROM fac_activiteit a, mld_opdr ao, mld_melding m, mld_opdr o, prs_v_perslid_fullnames_all pf WHERE a.fac_activiteit_key = ao.fac_activiteit_key AND ao.mld_melding_key = m.mld_melding_key AND m.mld_melding_key = o.mld_melding_key AND o.mld_uitvoerende_keys = pf.prs_perslid_key; -- rapport om de opmerkingen van de inspecteur te zien CREATE OR REPLACE VIEW bvb1_v_rap_deel_notities AS SELECT n.ins_deel_note_aanmaak, n.ins_deel_note_omschrijving, pf.prs_perslid_naam_full, dg.ins_discipline_omschrijving, dg.ins_srtgroep_omschrijving, dg.ins_srtdeel_omschrijving, dg.ins_srtdeel_upper, dg.alg_gebouw_omschrijving, dg.alg_gebouw_upper, dg.alg_verdieping_omschrijving, dg.alg_verdieping_code, dg.alg_ruimte_nr, dg.ins_deel_omschrijving, dg.ins_deel_aantal, dg.ins_deel_opmerking, dg.ins_deel_vervaldatum FROM ins_deel_note n, ins_v_deel_gegevens dg, prs_v_perslid_fullnames_all pf WHERE n.ins_deel_key = dg.ins_deel_key AND n.prs_perslid_key = pf.prs_perslid_key; CREATE OR REPLACE VIEW bvb1_v_rap_conditiemetingen AS SELECT m.mld_melding_key, l.alg_locatie_code complexnummer, l.alg_locatie_omschrijving complexnaam, aog.alg_gebouw_code clusternummer, aog.alg_gebouw_naam clusternaam, aog.alg_gebouw_groep gebouwgroep, id.ins_discipline_omschrijving hoofdrecept, isg.ins_srtgroep_omschrijving groeprecept, isd.ins_srtdeel_omschrijving || ' (' || isd.ins_srtdeel_code || ')' subrecept, d.ins_deel_omschrijving identificatie, m.mld_melding_key gebreknummer, m.mld_melding_datum datum_tijd, TO_CHAR(m.MLD_MELDING_ACTIEDATUM, 'YYYY') uitvoerjaar, TO_CHAR (mld_melding_datum, 'DD-MM-YYYY') datum, pf.prs_perslid_naam_full inspecteur, s.mld_statuses_omschrijving status, std.mld_stdmelding_omschrijving gebrek, m.mld_melding_omschrijving omschrijving, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ERNST' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) ernst, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'OMVANG' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) omvang, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'INTENSITEIT' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) intensiteit, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ASPECT1' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) veiligheid_gezondheid, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ASPECT2' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) cultuurhistorische_waarde, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ASPECT3' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) gebruik_en_bedrijfsproces, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ASPECT4' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) technische_vervolgschade, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ASPECT5' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) toename_klachtenonderhoud, (SELECT fac_usrdata_omschr FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk, fac_kenmerkdomein kd, fac_usrtab ut, fac_usrdata ud WHERE sk.mld_srtkenmerk_code = 'ASPECT6' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key AND ut.fac_usrtab_key = kd.fac_usrtab_key AND ud.fac_usrtab_key = ut.fac_usrtab_key AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde AND mk.mld_melding_key = m.mld_melding_key) beleving_esthetica, (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk WHERE sk.mld_srtkenmerk_code = 'KOSTEN' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND mk.mld_melding_key = m.mld_melding_key) kosten, (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk WHERE sk.mld_srtkenmerk_code = 'EENHEID' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND mk.mld_melding_key = m.mld_melding_key) eenheid, (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding mk, mld_kenmerk k, mld_srtkenmerk sk WHERE sk.mld_srtkenmerk_code = 'TAAKGROEP' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND k.mld_kenmerk_key = mk.mld_kenmerk_key AND mk.mld_melding_key = m.mld_melding_key) taakgroep, (SELECT k.mld_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk WHERE sk.mld_srtkenmerk_code = 'FOTO' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key) foto FROM mld_melding m, mld_melding_object mo, ins_deel d, ins_srtdeel isd, ins_srtgroep isg, ins_discipline id, alg_v_allonrgoed_gegevens aog, alg_locatie l, mld_statuses s, prs_v_perslid_fullnames_all pf, mld_stdmelding std, mld_discipline md WHERE m.mld_melding_key = mo.mld_melding_key AND d.ins_deel_key = mo.ins_deel_key AND d.ins_srtdeel_key = isd.ins_srtdeel_key AND isd.ins_srtgroep_key = isg.ins_srtgroep_key AND isg.ins_discipline_key = id.ins_discipline_key AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys AND l.alg_locatie_key = aog.alg_locatie_key AND s.mld_statuses_key = m.mld_melding_status AND m.prs_perslid_key = pf.prs_perslid_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = md.ins_discipline_key AND FAC.getsetting('cnd_gebreken_srtdisc_key') = md.ins_srtdiscipline_key; -- RTM views -- RTM voor openstaande meldingen. CREATE OR REPLACE VIEW bvb1_v_rtm_meldingen AS WITH datums AS ( SELECT TRUNC (SYSDATE) - LEVEL + 1 datum FROM DUAL CONNECT BY LEVEL <= 30) SELECT datum fclt_f_datum, mld_melding_key, mld_stdmelding_omschrijving, ins_discipline_omschrijving, ins_discipline_key fclt_3d_discipline_key, ins_srtdiscipline_omschrijving FROM (SELECT datums.datum, m.mld_melding_key, std.mld_stdmelding_omschrijving, d.ins_discipline_omschrijving, d.ins_discipline_key, ins_srtdiscipline_omschrijving FROM mld_melding m, datums, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_melding_status NOT IN (1) -- Afgewezen AND datums.datum BETWEEN mld_melding_datum AND COALESCE(MLD.getmeldingstatusdate(m.mld_melding_key, 5), SYSDATE +1)); -- KPI views voor meldingen CREATE OR REPLACE VIEW bvb1_v_rap_meldingen_per_maand AS WITH mld_melding_freezes AS (SELECT mld_melding_key, mld_melding_datum, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), COALESCE(mld.getmeldingstatusdate (m.mld_melding_key, 1), SYSDATE + 600)) mld_melding_afgemeld, mld_melding_einddatum_std, ins_srtdiscipline_omschrijving, mld_behandelgroep_naam FROM mld_melding m, mld_stdmelding std, mld_discipline d, mld_disc_params dp, ins_srtdiscipline sd, mld_behandelgroep bhg WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND d.ins_discipline_key = dp.mld_ins_discipline_key AND dp.MLD_BEHANDELGROEP_KEY = bhg.MLD_BEHANDELGROEP_KEY AND m.fac_activiteit_key IS NULL), maanden AS ( SELECT LEVEL lvl FROM DUAL CONNECT BY LEVEL <= 12), startdatum AS (SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -12) datum FROM DUAL) SELECT ADD_MONTHS (sd.datum, maanden.lvl - 1) maand, 'aangemaakt' status, ins_srtdiscipline_omschrijving soortdisc, mld_behandelgroep_naam behandelgroep, m.mld_melding_key FROM mld_melding_freezes m, maanden, startdatum sd WHERE mld_melding_datum BETWEEN ADD_MONTHS (sd.datum, maanden.lvl - 1) AND ADD_MONTHS (sd.datum, maanden.lvl) UNION ALL SELECT ADD_MONTHS (sd.datum, maanden.lvl - 1) maand, 'afgemeld op tijd', ins_srtdiscipline_omschrijving soortdisc, mld_behandelgroep_naam behandelgroep, m.mld_melding_key FROM mld_melding_freezes m, maanden, startdatum sd WHERE m.mld_melding_afgemeld BETWEEN ADD_MONTHS (sd.datum, maanden.lvl - 1) AND ADD_MONTHS (sd.datum, maanden.lvl) AND mld_melding_afgemeld < mld_melding_einddatum_std UNION ALL SELECT ADD_MONTHS (sd.datum, maanden.lvl - 1) maand, 'afgemeld te laat', ins_srtdiscipline_omschrijving soortdisc, mld_behandelgroep_naam behandelgroep, m.mld_melding_key FROM mld_melding_freezes m, maanden, startdatum sd WHERE m.mld_melding_afgemeld BETWEEN ADD_MONTHS (sd.datum, maanden.lvl - 1) AND ADD_MONTHS (sd.datum, maanden.lvl) AND mld_melding_afgemeld > mld_melding_einddatum_std UNION ALL SELECT ADD_MONTHS (sd.datum, maanden.lvl - 1) maand, 'afgemeld', ins_srtdiscipline_omschrijving soortdisc, mld_behandelgroep_naam behandelgroep, m.mld_melding_key FROM mld_melding_freezes m, maanden, startdatum sd WHERE m.mld_melding_afgemeld BETWEEN ADD_MONTHS (sd.datum, maanden.lvl - 1) AND ADD_MONTHS (sd.datum, maanden.lvl) UNION ALL SELECT ADD_MONTHS (sd.datum, maanden.lvl - 1) maand, 'open', ins_srtdiscipline_omschrijving soortdisc, mld_behandelgroep_naam behandelgroep, m.mld_melding_key FROM mld_melding_freezes m, maanden, startdatum sd WHERE m.mld_melding_datum < ADD_MONTHS (sd.datum, maanden.lvl) AND m.mld_melding_afgemeld > ADD_MONTHS (sd.datum, maanden.lvl); -- View om QR-codes bij objecten te tonen. CREATE OR REPLACE VIEW bvb1_v_rap_qr_deel AS SELECT fac_bookmark_naam, fac_bookmark_id, ins_discipline_omschrijving, ins_srtgroep_omschrijving, ins_srtdeel_omschrijving, ins_deel_omschrijving, alg_locatie_key, alg_gebouw_omschrijving, ins_deel_aanmaak, ins_deel_key FROM fac_bookmark b, ins_v_deel_gegevens d WHERE fac_bookmark_expire IS NULL AND fac_bookmark_id = '5XaFlgljfYX2_ta-'; CREATE OR REPLACE VIEW bvb1_rap_cal_planning AS SELECT m.mld_melding_behandelaar_key xuser_key, pf.prs_perslid_naam_full behandelaar, m.mld_melding_key || ' ' || SUBSTR(p.prs_perslid_voornaam, 1,1) || SUBSTR(p.prs_perslid_naam, 1,1) || ' ' || mld_melding_onderwerp title, mld_melding_actiedatum tot, mld_melding_actiedatum van, m.mld_melding_key item_key, SUBSTR (FLX.getflex ('PRS', 1000, m.mld_melding_behandelaar_key, 'P'), 1, 7) color, SUBSTR (FLX.getflex ('PRS', 1000, m.mld_melding_behandelaar_key, 'P'), 9, 7) textcolor, '?u=melding' || CHR (38) || 'k=' || m.mld_melding_key url FROM mld_melding m, prs_v_perslid_fullnames_all pf, prs_perslid p WHERE mld_melding_actiedatum IS NOT NULL AND m.mld_melding_behandelaar_key = p.prs_perslid_key AND m.mld_melding_behandelaar_key = pf.prs_perslid_key AND mld_melding_status not in (1, 5, 6) -- Afgewezen, afgemeld, historie UNION ALL SELECT NULL xuser_key, '' behandelaar, m.mld_melding_key || ' ' || mld_melding_onderwerp title, mld_melding_actiedatum tot, mld_melding_actiedatum van, m.mld_melding_key item_key, '#FF0000', '#FFFFFF', '?u=melding' || CHR (38) || 'k=' || m.mld_melding_key url FROM mld_melding m WHERE mld_melding_actiedatum IS NOT NULL AND mld_melding_status not in (1, 5, 6) -- Afgewezen, afgemeld, historie AND m.mld_melding_behandelaar_key IS NULL; -- Overzicht naast de kalender om nieuwe meldingen te tonen. CREATE OR REPLACE VIEW bvb1_v_mld_zonder_actiedat AS SELECT m.mld_melding_key || '-' || m.mld_melding_onderwerp title, m.mld_melding_key, sd.ins_srtdiscipline_prefix, sd.ins_srtdiscipline_omschrijving FROM mld_melding m, mld_stdmelding std, mld_discipline d, ins_srtdiscipline sd WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND mld_melding_status NOT IN (1, 5, 6) -- Afgewezen, afgemeld, historie AND mld_melding_actiedatum IS NULL; -- View om de relatie tussen standaardmeldingen en objectstructuur aan te geven. CREATE OR REPLACE VIEW bvb1_v_rap_stdmelding_srtinst AS SELECT mss.mld_stdmelding_srtinst_key, sd.ins_srtdiscipline_omschrijving, md.ins_discipline_omschrijving vakgroep, std.mld_stdmelding_omschrijving, mss.ins_srtinstallatie_niveau, isd.ins_srtdeel_omschrijving, isg.ins_srtgroep_omschrijving, id.ins_discipline_omschrijving FROM mld_stdmelding_srtinst mss, ins_srtgroep isg, ins_srtdeel isd, mld_stdmelding std, ins_discipline id, mld_discipline md, ins_srtdiscipline sd WHERE isg.ins_srtgroep_key = isd.ins_srtgroep_key AND isg.ins_discipline_key = id.ins_discipline_key AND mss.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND ( mss.ins_srtinstallatie_niveau = 'S' AND mss.ins_srtinstallatie_key = isd.ins_srtdeel_key OR mss.ins_srtinstallatie_niveau = 'G' AND mss.ins_srtinstallatie_key = isg.ins_srtgroep_key OR mss.ins_srtinstallatie_niveau = 'D' AND mss.ins_srtinstallatie_key = isg.ins_discipline_key); -- RentMan view om de folderstructuur uit RentMan te vertalen naar een boomstructuur. CREATE OR REPLACE VIEW bvb1_v_folder_structuur AS SELECT 1 niveau, id, displayname, name, itemtype, PATH, NULL parent1, NULL parent2, NULL parent3 FROM bvb1_imp_folder WHERE parent IS NULL AND itemtype = 'equipment' UNION ALL SELECT 2 niveau, f2.id, f2.displayname, f2.name, f2.itemtype, f2.PATH, REPLACE (f2.parent, '/folders/') parent1, NULL parent2, NULL parent3 FROM bvb1_imp_folder f1, bvb1_imp_folder f2 WHERE f1.parent IS NULL AND f1.itemtype = 'equipment' AND REPLACE (f2.parent, '/folders/') = f1.id UNION ALL SELECT 3 niveau, f3.id, f3.displayname, f3.name, f3.itemtype, f3.PATH, REPLACE (f2.parent, '/folders/') parent1, REPLACE (f3.parent, '/folders/') parent2, NULL parent3 FROM bvb1_imp_folder f1, bvb1_imp_folder f2, bvb1_imp_folder f3 WHERE f1.parent IS NULL AND f2.itemtype = 'equipment' AND REPLACE (f2.parent, '/folders/') = f1.id AND REPLACE (f3.parent, '/folders/') = f2.id UNION ALL SELECT 4 niveau, f4.id, f4.displayname, f4.name, f4.itemtype, f4.PATH, REPLACE (f2.parent, '/folders/') parent1, REPLACE (f3.parent, '/folders/') parent2, REPLACE (f3.parent, '/folders/') parent3 FROM bvb1_imp_folder f1, bvb1_imp_folder f2, bvb1_imp_folder f3, bvb1_imp_folder f4 WHERE f1.parent IS NULL AND f4.itemtype = 'equipment' AND REPLACE (f2.parent, '/folders/') = f1.id AND REPLACE (f3.parent, '/folders/') = f2.id AND REPLACE (f4.parent, '/folders/') = f3.id; -- Rapportage om te controleren of de bedragen vanuit Rentman goed overkomen in Facilitor en of de taak wel aangemaakt wordt. CREATE OR REPLACE VIEW bvb1_v_rap_rentman_imp_check AS SELECT dg.ins_discipline_omschrijving, dg.ins_srtgroep_omschrijving, dg.ins_srtdeel_omschrijving, dg.ins_deel_omschrijving, dg.ins_deel_opmerking, FLX.getflex ('INS', ak.ins_kenmerk_key, dg.ins_deel_key) object_vervanging, sc.ins_srtcontrole_omschrijving, sc.ins_srtcontrole_periode, x.ins_srtcontroledl_xcp_kosten FROM ins_v_deel_gegevens dg, ins_srtcontrole sc, ins_srtcontroledl_xcp x, (SELECT k.ins_srtinstallatie_key, k.ins_kenmerk_key FROM ins_kenmerk k, ins_srtkenmerk sk WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND sk.ins_srtkenmerk_code = 'AANSCHAFPRIJS') ak WHERE dg.ins_srtdeel_key = sc.ins_srtinstallatie_key(+) AND dg.ins_deel_key = x.ins_deel_key(+) --AND ins_discipline_omschrijving = 'AV' AND dg.ins_discipline_key = ak.ins_srtinstallatie_key(+); CREATE OR REPLACE PROCEDURE bvb1_daily AS -- accepteer de meldingen die aangemaakt zijn met de geplande acties. Anders komen ze niet in de kalender te staan. CURSOR c IS SELECT mld_melding_key FROM mld_melding WHERE mld_melding_opmerking LIKE 'Automatisch gegenereerd door activiteit%' AND mld_melding_status = 2; BEGIN FOR rec IN c LOOP MLD.setmeldingstatus (rec.mld_melding_key, 4, NULL); UPDATE mld_melding SET mld_melding_actiedatum = SYSDATE WHERE mld_melding_key = rec.mld_melding_key; END LOOP; 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