-- -- $Id$ -- -- Script containing customer specific sql statements for the FACILITOR database DEFINE thisfile = 'kmmo.sql' DEFINE dbuser = 'KMMO' 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 KMMO AS -- PACKAGES voor de KMMO specifieke rapportages TYPE t_cursor IS REF CURSOR; PROCEDURE rap_bezetting_rondleider (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor); PROCEDURE processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER); PROCEDURE indexatie_mjob; END; / CREATE OR REPLACE PACKAGE BODY KMMO AS -- PACKAGES voor de KMMO specifieke rapportages PROCEDURE rap_bezetting_rondleider (user_key IN NUMBER, p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005' p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor ) AS v_datum_van DATE; BEGIN v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy'); OPEN p_cursor FOR SELECT p.prs_perslid_naam naam, p.prs_perslid_voornaam voornaam, sp.prs_srtperslid_omschrijving rondleider_taal, (SELECT LISTAGG ( TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi') || '-' || TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi') || ' ' || ud.fac_usrdata_code, CHR (10)) WITHIN GROUP (ORDER BY rrr.res_rsv_ruimte_van) AS beschikbaarheid FROM mld_opdr o, mld_melding m, res_rsv_ruimte rrr, res_kenmerkwaarde kw, fac_usrdata ud WHERE o.mld_uitvoerende_keys = p.prs_perslid_key AND o.mld_melding_key = m.mld_melding_key AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen/Niet akkoord AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND TRUNC (rrr.res_rsv_ruimte_van) = v_datum_van AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND kw.res_kenmerk_key = 1 -- taal rondleiding AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) = ud.fac_usrdata_key) bezetting, (SELECT COUNT(*) from kmmo_v_beschikb_raw bo WHERE p.prs_perslid_key = bo.prs_perslid_key AND TRUNC(bo.van) = v_datum_van AND bo.dagdeel = 'ochtend' AND bo.beschikbaar = 1) ochtend, (SELECT COUNT(*) from kmmo_v_beschikb_raw bo WHERE p.prs_perslid_key = bo.prs_perslid_key AND TRUNC(bo.van) = v_datum_van AND bo.dagdeel = 'middag' AND bo.beschikbaar = 1) middag, (SELECT COUNT(*) FROM mld_opdr o, mld_melding m, res_rsv_ruimte rrr WHERE o.mld_uitvoerende_keys = p.prs_perslid_key AND o.mld_melding_key = m.mld_melding_key AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen/Niet akkoord AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND ABS(TRUNC (rrr.res_rsv_ruimte_van) - v_datum_van) < 4) bezetting_week FROM prs_perslid p, prs_srtperslid sp, kmmo_v_beschikb_raw b WHERE p.prs_perslid_key = b.prs_perslid_key AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND prs_srtperslid_omschrijving LIKE 'Rondleider %' AND TRUNC(b.van) = v_datum_van AND b.beschikbaar = 1 -- beschikbaar GROUP BY p.prs_perslid_key, prs_perslid_naam, prs_perslid_voornaam, prs_srtperslid_omschrijving; END rap_bezetting_rondleider; 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; kostenplaats prs_afdeling.prs_kostenplaats_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; status_key mld_melding.mld_melding_status%TYPE; BEGIN defaultstdmelding := NULL; status_key := 2; -- Standaard komt de melding op nieuw. CASE WHEN UPPER (pto) LIKE 'FEEDBACK@%' THEN defaultstdmelding := 441; kkey_att := 1; kkey_mail := 541; sender := 1841; -- Ontvangen feedback status_key := 0; -- voor feedback komt de status op FO te staan omdat de FrontOffice hier eerst naar gaat kijken. WHEN UPPER (pto) LIKE 'AANVRAAG@%' THEN defaultstdmelding := 481; kkey_att := 1; kkey_mail := 581; sender := 1841; -- Ontvangen feedback WHEN UPPER (pto) LIKE 'STORING@%' THEN defaultstdmelding := 501; kkey_att := 1; kkey_mail := 582; sender := 1841; -- Ontvangen feedback 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, 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, 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, status_key, sender); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || newkey); 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 indexatie_mjob AS v_indexatie NUMBER; BEGIN SELECT fac_usrdata_prijs INTO v_indexatie FROM fac_usrdata WHERE fac_usrtab_key = 261 -- Indexatie MJOB AND fac_usrdata_vervaldatum = TRUNC (SYSDATE); UPDATE ins_deelsrtcontrole dsc SET dsc.ins_deelsrtcontrole_freezecost = dsc.ins_deelsrtcontrole_freezecost * (1 + v_indexatie / 100) WHERE TRUNC (dsc.ins_deelsrtcontrole_freezedate, 'yyyy') = TRUNC (SYSDATE, 'yyyy') AND dsc.ins_srtcontrole_key IN (SELECT sc.ins_srtcontrole_key FROM ctr_disc_params dp, ins_srtcontrole sc WHERE dp.ctr_ins_discipline_key = sc.ctr_discipline_key AND dp.ctr_disc_params_ismjob = 1); UPDATE ins_srtcontroledl_xcp xcp SET xcp.ins_srtcontroledl_xcp_materia = xcp.ins_srtcontroledl_xcp_materia * (1 + v_indexatie / 100) WHERE xcp.ins_srtcontrole_key IN (SELECT sc.ins_srtcontrole_key FROM ctr_disc_params dp, ins_srtcontrole sc WHERE dp.ctr_ins_discipline_key = sc.ctr_discipline_key AND dp.ctr_disc_params_ismjob = 1); EXCEPTION WHEN NO_DATA_FOUND THEN -- Er valt vandaag niets te indexeren. NULL; END; END; / -- Dagelijkse taak CREATE OR REPLACE PROCEDURE kmmo_daily AS BEGIN IF user = 'KMMO_TEST' THEN -- pas de kleuren voor de testomgeving aan (blauw naar rood) UPDATE fac_setting SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, '#0085c4', '#e20035') WHERE fac_setting_name = 'csstemplate'; UPDATE fac_setting SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, '#0085c4', '#e20035') WHERE fac_setting_name = 'csscust'; UPDATE fac_setting SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, 'banner.png', 'banner_rood.png') WHERE fac_setting_name = 'csstemplate'; END IF; -- Kijk of de MJOB records geindexeerd moeten worden. -- De indexatie vindt plaats op de vervaldatum van het record in de Indexatie MJOB eigen tabel KMMO.indexatie_mjob; END; / -- view om QR codes voor een deel te genereren. CREATE OR REPLACE VIEW kmmo_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 = 'eYD435Vl666lZdkU'; -- view om QR codes voor een ruimte te genereren. -- Ieder srtruimte krijgt een eigen bookmark -- Om een link tussen bookmark en srtuimte te maken -- wordt de omschrijving van de bookmark als volgt gevuld: -- QR bij verkeersruimte key:30 -- De key is dan de key van de srtruimte. CREATE OR REPLACE VIEW kmmo_v_rap_qr_ruimte AS SELECT b.fac_bookmark_naam, b.fac_bookmark_id, sr.alg_srtruimte_omschrijving, rg.alg_ruimte_omschrijving, rg.alg_ruimte_nr, rg.alg_ruimte_key, alg_locatie_omschrijving, alg_gebouw_omschrijving, alg_verdieping_omschrijving FROM fac_bookmark b, alg_srtruimte sr, alg_v_ruimte_gegevens rg WHERE b.fac_bookmark_expire IS NULL AND COALESCE(FAC.safe_to_number(TRIM(SUBSTR(b.fac_bookmark_naam, INSTR(b.fac_bookmark_naam, ':')+1))),-1) = sr.alg_srtruimte_key AND sr.alg_srtruimte_key = rg.alg_srtruimte_key; CREATE OR REPLACE FORCE VIEW kmmo_v_thema_bouwdeel ( ALG_RUIMTE_KEY, WAARDE ) AS SELECT alg_onrgoed_key, SUBSTR (alg_onrgoedkenmerk_waarde, 1, 1) waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1003 AND alg_onrgoedkenmerk_verwijder IS NULL; CREATE OR REPLACE FORCE VIEW kmmo_v_thema_subbouwdeel ( ALG_RUIMTE_KEY, WAARDE ) AS SELECT alg_onrgoed_key, SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2) waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1003 AND alg_onrgoedkenmerk_verwijder IS NULL; CREATE OR REPLACE FORCE VIEW kmmo_v_thema_openstelling ( ALG_RUIMTE_KEY, WAARDE ) AS SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1004 AND alg_onrgoedkenmerk_verwijder IS NULL; CREATE OR REPLACE VIEW kmmo_v_label_ruimteomschr AS SELECT r.alg_ruimte_key, r.alg_ruimte_omschrijving waarde FROM alg_v_aanwezigruimte r; -- View om de resultaten van de inspecties te tonen CREATE OR REPLACE VIEW kmmo_v_rap_keuring_resultaat AS SELECT dsc.ins_deelsrtcontrole_datum, dsc.ins_deelsrtcontrole_datum_org, dsc.ins_deelsrtcontrole_status, pf.prs_perslid_naam_full, sc.ins_srtcontrole_omschrijving, dg.ins_discipline_omschrijving, dg.ins_srtgroep_omschrijving, dg.ins_srtdeel_omschrijving, dg.ins_deel_omschrijving, dg.alg_gebouw_omschrijving, dg.alg_verdieping_code, dg.alg_ruimte_nr, cm.ins_controlemode_oms, (SELECT LISTAGG ( COALESCE (k.ins_kenmerk_omschrijving, sk.ins_srtkenmerk_omschrijving), CHR (13)) WITHIN GROUP (ORDER BY COALESCE (k.ins_kenmerk_omschrijving, sk.ins_srtkenmerk_omschrijving)) AS bevindingen FROM ins_kmdeelsrtcontr kdsc, ins_kenmerk k, ins_srtkenmerk sk WHERE kdsc.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key AND kdsc.ins_deelsrtcontrole_key = dsc.ins_deelsrtcontrole_key) bevindingen FROM ins_deelsrtcontrole dsc, ins_srtcontrole sc, ins_v_deel_gegevens dg, ins_controlemode cm, prs_v_perslid_fullnames pf WHERE dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key AND dsc.ins_deel_key = dg.ins_deel_key AND dsc.ins_controlemode_key = cm.ins_controlemode_key AND dsc.prs_perslid_key = pf.prs_perslid_key; -- Overzicht om het resultaat (notities) van de inspecteur te bekijken -- rapport om de opmerkingen van de inspecteur te zien CREATE OR REPLACE VIEW kmmo_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; -- Importfunctie om Asset en MJOB informatie te importeren. CREATE OR REPLACE PROCEDURE kmmo_import_assets (p_import_key IN NUMBER) AS c_fielddelimitor VARCHAR2 (1) := ';'; v_newline VARCHAR2 (4000); -- Input line v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; v_count NUMBER (10); v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_alg_ruimte_nr VARCHAR2(100); v_ins_deel_aanmaak_txt VARCHAR2(100); v_ins_deel_aantal_txt VARCHAR2(100); v_ins_deel_eenheid VARCHAR2(100); v_ins_deel_omschrijving VARCHAR2(100); v_ins_deel_opmerking VARCHAR2(1000); v_ins_srtcontrole_periode_txt VARCHAR2(100); v_ins_srtcontrole_prijs_txt VARCHAR2(100); v_ins_srtdeel_code VARCHAR2(100); v_ins_srtdeel_code_txt VARCHAR2(100); v_ins_srtdeel_omschrijving VARCHAR2(100); v_ins_deel_percentage NUMBER; v_ins_srtcontrole_periode NUMBER; v_kenmerk1 VARCHAR2(1000); v_kenmerk2 VARCHAR2(1000); v_kenmerk3 VARCHAR2(1000); v_kenmerk4 VARCHAR2(1000); v_kenmerk5 VARCHAR2(1000); v_kenmerk7 VARCHAR2(1000); v_kenmerk9 VARCHAR2(1000); v_dumm NUMBER (10,2); v_ins_deel_aanmaak DATE; v_ins_deel_startjaar DATE; v_ins_deel_aantal NUMBER; v_ins_srtcontrole_prijs NUMBER(10,2); v_alg_locatie_code VARCHAR2(20); v_alg_gebouw_code VARCHAR2(20); v_alg_verdieping_volgnr NUMBER; v_srtk_code_rvb_key NUMBER; v_srtk_opm_key NUMBER; v_srtk_merk_key NUMBER; v_discipline_key NUMBER; v_srtgroep_key NUMBER; v_ins_discipline_omschrijving VARCHAR2(100); v_ins_srtgroep_omschrijving VARCHAR2(100); CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; CURSOR c_dis IS SELECT '1 - onderbouw' disc FROM DUAL UNION SELECT '5 - installaties werktuigbouwkunde' disc FROM DUAL UNION SELECT '2 - ruwbouw' FROM DUAL UNION SELECT '7 - vaste voorzieningen' FROM DUAL UNION SELECT '6 - installaties elektrotechniek' FROM DUAL UNION SELECT '4 - afwerkingen' FROM DUAL UNION SELECT '3 - afbouw' FROM DUAL UNION SELECT '9 - terrein' FROM DUAL UNION SELECT '8 - losse inventaris' FROM DUAL; CURSOR c_grp IS SELECT '11 - bodemvoorzieningen' groep FROM DUAL UNION SELECT '13 - vloeren op grondslag' groep FROM DUAL UNION SELECT '16 - funderingsconstructie' groep FROM DUAL UNION SELECT '17 - paalfundering' groep FROM DUAL UNION SELECT '19 - onderhoud algemeen' groep FROM DUAL UNION SELECT '21 - buitenwanden' groep FROM DUAL UNION SELECT '22 - binnenwanden' FROM DUAL UNION SELECT '23 - vloeren, galerijen' FROM DUAL UNION SELECT '24 - trappen en hellingen' FROM DUAL UNION SELECT '25 - binnenzijde gevelconstructie' FROM DUAL UNION SELECT '26 - vloerconstructie' FROM DUAL UNION SELECT '27 - daken' FROM DUAL UNION SELECT '28 - hoofddraagkonstrukties' FROM DUAL UNION SELECT '29 - draagconstructie' FROM DUAL UNION SELECT '31 - buitenwandopeningen' FROM DUAL UNION SELECT '32 - binnenwandopeningen' FROM DUAL UNION SELECT '33 - vloeropeningen' FROM DUAL UNION SELECT '34 - balustrades en leuningen' FROM DUAL UNION SELECT '35 - plafonds' FROM DUAL UNION SELECT '37 - dakopeningen' FROM DUAL UNION SELECT '38 - inbouwpakketten' FROM DUAL UNION SELECT '39 - afbouw' FROM DUAL UNION SELECT '41 - buitenwandafwerkingen' FROM DUAL UNION SELECT '42 - binnenwandafwerkingen' FROM DUAL UNION SELECT '43 - vloerafwerkingen' FROM DUAL UNION SELECT '44 - trap- en hellingafwerkingen' FROM DUAL UNION SELECT '45 - plafondafwerkingen' FROM DUAL UNION SELECT '47 - dakafwerkingen' FROM DUAL UNION SELECT '48 - afwerkingspakketten' FROM DUAL UNION SELECT '49 - afwerking algemeen' FROM DUAL UNION SELECT '51 - warmte-opwekking' FROM DUAL UNION SELECT '52 - afvoeren' FROM DUAL UNION SELECT '53 - water' FROM DUAL UNION SELECT '54 - gas' FROM DUAL UNION SELECT '55 - koude-opwekking' FROM DUAL UNION SELECT '56 - warmtedistributie' FROM DUAL UNION SELECT '57 - luchtbehandeling' FROM DUAL UNION SELECT '58 - regeling klimaat en sanitair' FROM DUAL UNION SELECT '59 - mechanische installaties' FROM DUAL UNION SELECT '61 - centrale elektrotechnische voorzieningen' FROM DUAL UNION SELECT '62 - kracht' FROM DUAL UNION SELECT '63 - verlichting' FROM DUAL UNION SELECT '64 - communicatie' FROM DUAL UNION SELECT '65 - beveiliging' FROM DUAL UNION SELECT '66 - transport' FROM DUAL UNION SELECT '67 - gebouwbeheersysteem' FROM DUAL UNION SELECT '69 - electrische installaties algemeen' FROM DUAL UNION SELECT '71 - vaste verkeersvoorzieningen' FROM DUAL UNION SELECT '72 - vaste gebruikersvoorzieningen' FROM DUAL UNION SELECT '73 - vaste keukenvoorzieningen' FROM DUAL UNION SELECT '74 - vaste sanitaire voorzieningen' FROM DUAL UNION SELECT '75 - vaste onderhoudsvoorzieningen' FROM DUAL UNION SELECT '76 - vaste opslagvoorzieningen' FROM DUAL UNION SELECT '79 - vaste inrichtingen' FROM DUAL UNION SELECT '80 - losse inrichting' FROM DUAL UNION SELECT '81 - losse inventaris voor verkeersruimten' FROM DUAL UNION SELECT '82 - losse inventaris voor gebruiksruimten' FROM DUAL UNION SELECT '83 - losse keukeninventaris' FROM DUAL UNION SELECT '84 - losse sanitaire inventaris' FROM DUAL UNION SELECT '85 - losse schoonmaakinventaris' FROM DUAL UNION SELECT '86 - losse opberginventaris' FROM DUAL UNION SELECT '89 - losse inventaris' FROM DUAL UNION SELECT '90 - terrein' FROM DUAL UNION SELECT '91 - grondvoorzieningen' FROM DUAL UNION SELECT '92 - opstallen' FROM DUAL UNION SELECT '93 - omeheiningen' FROM DUAL UNION SELECT '94 - terreinafwerking' FROM DUAL UNION SELECT '95 - terreininstallaties, werktuigkundig' FROM DUAL UNION SELECT '96 - terreininstallaties, elektrotechnisch' FROM DUAL UNION SELECT '97 - terreininrichting standaard' FROM DUAL UNION SELECT '98 - terreininrichting bijzonder' FROM DUAL UNION SELECT '99 - terrein algemeen' FROM DUAL; BEGIN v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; DELETE fac_imp_ins; -- Zijn de kenmerksoorten er al? BEGIN SELECT ins_srtkenmerk_key INTO v_srtk_code_rvb_key FROM ins_srtkenmerk WHERE ins_srtkenmerk_upper = 'CODE RVB'; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtkenmerk (ins_srtkenmerk_kenmerktype, ins_srtkenmerk_omschrijving, ins_srtkenmerk_lengte) VALUES ('C', 'Code RVB', 20) RETURNING ins_srtkenmerk_key INTO v_srtk_code_rvb_key; END; BEGIN SELECT ins_srtkenmerk_key INTO v_srtk_opm_key FROM ins_srtkenmerk WHERE ins_srtkenmerk_upper = 'OPMERKING'; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtkenmerk (ins_srtkenmerk_kenmerktype, ins_srtkenmerk_omschrijving, ins_srtkenmerk_lengte) VALUES ('C', 'Opmerking', 2000) RETURNING ins_srtkenmerk_key INTO v_srtk_opm_key; END; BEGIN SELECT ins_srtkenmerk_key INTO v_srtk_merk_key FROM ins_srtkenmerk WHERE ins_srtkenmerk_upper = 'MERK'; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtkenmerk (ins_srtkenmerk_kenmerktype, ins_srtkenmerk_omschrijving, ins_srtkenmerk_lengte) VALUES ('C', 'Merk', 49) RETURNING ins_srtkenmerk_key INTO v_srtk_merk_key; END; -- Controleer of de MJOB disciplines al bestaan SELECT count(*) INTO v_count FROM ins_discipline WHERE ins_discipline_omschrijving = '5 - installaties werktuigbouwkunde'; IF v_count = 0 THEN FOR rec IN c_dis LOOP BEGIN SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE UPPER (ins_discipline_omschrijving) = UPPER (rec.disc); EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_tab_discipline (ins_discipline_omschrijving, ins_discipline_min_level) VALUES (rec.disc, 1) RETURNING ins_discipline_key INTO v_discipline_key; INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_autonum) VALUES (v_discipline_key, 2); INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer) VALUES (v_srtk_code_rvb_key, v_discipline_key, 'D', 'D', 110); INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer) VALUES (v_srtk_opm_key, v_discipline_key, 'D', 'D', 120); INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer) VALUES (v_srtk_merk_key, v_discipline_key, 'D', 'D', 130); END; END LOOP; FOR rec_grp IN c_grp LOOP SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE SUBSTR (ins_discipline_omschrijving, 1, 3) = SUBSTR (rec_grp.groep, 1, 1) || ' -'; BEGIN SELECT ins_srtgroep_key INTO v_srtgroep_key FROM ins_srtgroep WHERE UPPER (ins_srtgroep_omschrijving) = UPPER (rec_grp.groep) AND ins_discipline_key = v_discipline_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtgroep (ins_discipline_key, ins_srtgroep_omschrijving) VALUES (v_discipline_key, rec_grp.groep); END; END LOOP; END IF; FOR rec IN c LOOP BEGIN v_errormsg := 'Fout FETCH te importeren rij'; v_newline := rec.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; -- Lees alle veldwaarden fac.imp_getfield_nr (v_newline, c_fielddelimitor, 12, v_alg_ruimte_nr); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 13, v_ins_deel_aanmaak_txt); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 14, v_ins_deel_aantal_txt); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 15, v_ins_deel_eenheid); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_ins_deel_omschrijving); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_ins_deel_opmerking); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 29, v_ins_srtcontrole_periode_txt); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 24, v_ins_srtcontrole_prijs_txt); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_ins_srtdeel_code_txt); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_ins_srtdeel_omschrijving); fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_kenmerk1); -- code RVB fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_kenmerk2); -- opmerking fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_kenmerk3); -- taak fac.imp_getfield_nr (v_newline, c_fielddelimitor, 16, v_kenmerk5); -- fabrikant / merk fac.imp_getfield_nr (v_newline, c_fielddelimitor, 28, v_kenmerk7); -- percentage fac.imp_getfield_nr (v_newline, c_fielddelimitor, 30, v_kenmerk9); -- startjaar v_aanduiding := v_ins_deel_omschrijving || '|' || v_kenmerk4; v_count_tot := v_count_tot + 1; v_errormsg := 'Fout bij toevoegen te importeren v_ins_discipline_omschrijving: ' || v_ins_srtdeel_code_txt; SELECT d.ins_discipline_omschrijving INTO v_ins_discipline_omschrijving FROM ins_discipline d WHERE SUBSTR (d.ins_discipline_omschrijving, 1, 1) = SUBSTR (v_ins_srtdeel_code_txt, 1, 1); v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtgroep_omschrijving: ' || v_ins_srtdeel_code_txt; SELECT sg.ins_srtgroep_omschrijving INTO v_ins_srtgroep_omschrijving FROM ins_srtgroep sg WHERE SUBSTR (sg.ins_srtgroep_omschrijving, 1, 2) = SUBSTR (v_ins_srtdeel_code_txt, 1, 2); v_errormsg := 'Fout bij toevoegen te importeren ins_srtdeel_code: ' || v_ins_srtdeel_code_txt; IF LENGTH(v_ins_srtdeel_code_txt) > 10 THEN v_ins_srtdeel_code := REPLACE(v_ins_srtdeel_code_txt, '.'); ELSE v_ins_srtdeel_code := v_ins_srtdeel_code_txt; END IF; v_errormsg := 'Fout bij toevoegen te importeren v_alg_ruimte_nr: ' || v_alg_ruimte_nr; SELECT alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr INTO v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr FROM alg_v_ruimte_gegevens rg WHERE UPPER(rg.alg_ruimte_nr) = UPPER(v_alg_ruimte_nr); v_errormsg := 'Fout bij toevoegen te importeren v_ins_deel_aanmaak_txt: ' || v_ins_deel_aanmaak_txt; v_ins_deel_aanmaak := NULL; IF FAC.safe_to_number(v_ins_deel_aanmaak_txt) IS NOT NULL THEN v_ins_deel_aanmaak := to_date('0101' || v_ins_deel_aanmaak_txt, 'ddmmyyyy'); ELSE v_ins_deel_aanmaak := SYSDATE; END IF; v_errormsg := 'Fout bij toevoegen te importeren v_kenmerk9: ' || v_kenmerk9; IF v_kenmerk9 IS NOT NULL THEN v_ins_deel_startjaar := to_date('0101' || v_kenmerk9, 'ddmmyyyy'); ELSE v_ins_deel_startjaar := NULL; END IF; v_errormsg := 'Fout bij toevoegen te importeren v_ins_deel_aantal_txt: ' || v_ins_deel_aantal_txt; IF v_ins_deel_aantal_txt IS NOT NULL THEN v_ins_deel_aantal := to_number(v_ins_deel_aantal_txt); ELSE v_ins_deel_aantal := 1; END IF; v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtcontrole_periode_txt: ' || v_ins_srtcontrole_periode_txt; IF v_ins_srtcontrole_periode_txt IS NOT NULL THEN v_ins_srtcontrole_periode := to_number(v_ins_srtcontrole_periode_txt); ELSE v_ins_srtcontrole_periode := NULL; END IF; v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtcontrole_prijs_txt: ' || v_ins_srtcontrole_prijs_txt; IF v_ins_srtcontrole_prijs_txt IS NOT NULL THEN v_ins_srtcontrole_prijs := to_number(REPLACE(REPLACE(v_ins_srtcontrole_prijs_txt, '.'), ',', '.')); ELSE v_ins_srtcontrole_prijs := NULL; END IF; v_errormsg := 'Fout bij toevoegen te importeren v_kenmerk7: ' || v_kenmerk7; IF v_kenmerk7 IS NOT NULL THEN IF INSTR(v_kenmerk7, '%') = 0 THEN v_ins_deel_percentage := to_number(v_kenmerk7)*100; ELSE v_ins_deel_percentage := to_number(REPLACE(v_kenmerk7, '%')); END IF; ELSE v_ins_deel_percentage := 100; END IF; SELECT count(*) INTO v_count FROM ins_deel WHERE ins_deel_verwijder IS NULL AND ins_deel_omschrijving = v_ins_deel_omschrijving; IF v_count > 0 THEN fac.imp_writelog (p_import_key, 'W', 'Object bestaat al: ', v_ins_deel_omschrijving); END IF; INSERT INTO fac_imp_ins (ins_discipline_omschrijving, ins_srtgroep_omschrijving, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_deel_omschrijving, ins_deel_opmerking, alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr, ins_kenmerkwaarde1, ins_kenmerkwaarde2, ins_kenmerkwaarde3, ins_kenmerkwaarde4, ins_kenmerkwaarde5, ins_kenmerkwaarde6, ins_kenmerkwaarde7, ins_kenmerkwaarde8, ins_kenmerkwaarde9, ins_kenmerkwaarde10, ins_deel_aanmaak, ins_deel_aantal, ins_deel_externnr) VALUES (SUBSTR(v_ins_discipline_omschrijving, 1,60), SUBSTR(v_ins_srtgroep_omschrijving, 1, 60), SUBSTR(v_ins_srtdeel_code,1,10), SUBSTR(v_ins_srtdeel_omschrijving || ' - ' || v_ins_srtdeel_code_txt, 1, 100), SUBSTR(v_ins_deel_omschrijving, 1, 60), SUBSTR(v_ins_deel_opmerking, 1, 320), SUBSTR(v_alg_locatie_code, 1, 10), SUBSTR(v_alg_gebouw_code, 1, 12), v_alg_verdieping_volgnr, SUBSTR(v_alg_ruimte_nr,1,20), DECODE(v_kenmerk1, NULL, NULL, 'Code RVB|0=' || v_kenmerk1), DECODE(v_kenmerk2, NULL, NULL, 'Opmerking|0=' || v_kenmerk2), v_kenmerk3, '', DECODE(v_kenmerk5, NULL, NULL, 'Merk|0=' || v_kenmerk5), v_ins_srtcontrole_prijs, v_ins_deel_percentage, v_ins_srtcontrole_periode, to_char(v_ins_deel_startjaar, 'ddmmyyyy'), to_char(v_ins_deel_aanmaak, 'ddmmyyyy'), v_ins_deel_aanmaak, to_number(v_ins_deel_aantal), v_count_tot); EXCEPTION WHEN OTHERS THEN v_errorhint := v_errormsg || ' - ' || v_aanduiding; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN v_errorhint := v_errormsg || ' - ' || v_aanduiding; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END kmmo_import_assets; / CREATE OR REPLACE PROCEDURE kmmo_update_assets (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_ins; CURSOR c_upd_deel IS SELECT DISTINCT ins_deel_omschrijving, alg_ruimte_key, alg_locatie_key, ins_deel_aanmaak, ins_deel_aantal FROM alg_v_ruimte_gegevens rg, fac_imp_ins i WHERE rg.alg_locatie_code = i.alg_locatie_code AND rg.alg_gebouw_upper = i.alg_gebouw_code AND rg.alg_verdieping_volgnr = i.alg_verdieping_volgnr AND rg.alg_ruimte_nr = i.alg_ruimte_nr; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); v_aanduiding VARCHAR2 (100); v_deel_key NUMBER; v_srtdeel_key NUMBER; v_srtcontrole_key NUMBER; v_srtcontroledl_xcp_key NUMBER; v_taakcat_key NUMBER; v_srtcontrole_periode INS_SRTCONTROLE.INS_SRTCONTROLE_PERIODE%TYPE; v_srtcontrole_materiaal INS_SRTCONTROLE.INS_SRTCONTROLE_MATERIAAL%TYPE; v_srtcontrole_percentage INS_SRTCONTROLE.INS_SRTCONTROLE_PERCENTAGE%TYPE; v_srtcontrole_level INS_SRTCONTROLE.INS_SRTCONTROLE_LEVEL%TYPE; v_percentage NUMBER; v_materiaal INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE; v_srtcontroledl_xcp_materia INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE; v_srtcontroledl_xcp_perc INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_PERC%TYPE; v_srtcontroledl_xcp_startdat INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_STARTDAT%TYPE; v_startdat_nieuw INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_STARTDAT%TYPE; v_ruimte_aanduiding_nieuw VARCHAR2 (100); v_ruimte_aanduiding_oud VARCHAR2 (100); v_alg_ruimte_key NUMBER (10); v_alg_locatie_key NUMBER (10); v_deel_aanmaak DATE; v_deel_aantal NUMBER; BEGIN fac_update_ins(p_import_key); FOR rec IN c LOOP BEGIN v_aanduiding := rec.ins_deel_omschrijving; -- zoek het object v_errorhint := 'Zoek het object'; SELECT ins_deel_key, ins_srtdeel_key INTO v_deel_key, v_srtdeel_key FROM ins_deel WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving; -- zoek de taakcategorie v_errorhint := 'Zoek de taakcategorie'; SELECT ins_discipline_key INTO v_taakcat_key FROM ctr_discipline WHERE UPPER (ins_discipline_omschrijving) = UPPER (rec.ins_kenmerkwaarde3); BEGIN v_errorhint := 'Bepaal percentage'; v_percentage := NULL; -- IF rec.ins_kenmerkwaarde7 <> 1 -- AND rec.ins_kenmerkwaarde7 IS NOT NULL -- THEN -- v_percentage := rec.ins_kenmerkwaarde7 * 100; -- END IF; v_percentage := rec.ins_kenmerkwaarde7; v_errorhint := 'Bepaal materiaalkosten'; v_materiaal := FAC.safe_to_number ( REPLACE (rec.ins_kenmerkwaarde6, ',', '.')); -- zoek de taak v_errorhint := 'Zoek de taak'; SELECT ins_srtcontrole_key, ins_srtcontrole_periode, ins_srtcontrole_materiaal, ins_srtcontrole_percentage INTO v_srtcontrole_key, v_srtcontrole_periode, v_srtcontrole_materiaal, v_srtcontrole_percentage FROM ins_srtcontrole WHERE ins_srtinstallatie_key = v_srtdeel_key AND ins_srtcontrole_niveau = 'S' AND ins_srtcontrole_omschrijving = rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code AND ctr_discipline_key = v_taakcat_key; IF v_srtcontrole_periode <> COALESCE (rec.ins_kenmerkwaarde8, 0) OR v_srtcontrole_materiaal <> v_materiaal OR v_srtcontrole_percentage <> v_percentage OR ( rec.ins_kenmerkwaarde9 IS NOT NULL AND rec.ins_kenmerkwaarde9 <> COALESCE (rec.ins_kenmerkwaarde10, '01010000')) THEN -- bestaat er al een xcp record? BEGIN SELECT ins_srtcontroledl_xcp_key, ins_srtcontroledl_xcp_materia, ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_startdat INTO v_srtcontroledl_xcp_key, v_srtcontroledl_xcp_materia, v_srtcontroledl_xcp_perc, v_srtcontroledl_xcp_startdat FROM ins_srtcontroledl_xcp WHERE ins_srtcontrole_key = v_srtcontrole_key AND ins_deel_key = v_deel_key; EXCEPTION WHEN NO_DATA_FOUND THEN -- dan moeten we een dl_xcp record aanmaken v_errorhint := 'Aanmaken xcp'; INSERT INTO ins_srtcontroledl_xcp (ins_srtcontrole_key, ins_deel_key) VALUES (v_srtcontrole_key, v_deel_key) RETURNING ins_srtcontroledl_xcp_key INTO v_srtcontroledl_xcp_key; END; v_errorhint := 'Aanpassen periode'; IF v_srtcontrole_periode <> COALESCE (rec.ins_kenmerkwaarde8, 0) THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_periode = COALESCE ( TO_NUMBER (rec.ins_kenmerkwaarde8), 0) WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; fac.trackaction('#INSUPD', v_deel_key, NULL, NULL, rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) || 'Periode: ' || COALESCE(v_srtcontrole_periode, '(leeg)') || ' --> ' || COALESCE(rec.ins_kenmerkwaarde8, '(leeg)')); END IF; v_errorhint := 'Aanpassen materiaal: ' || rec.ins_kenmerkwaarde6 || ' - ' || v_materiaal; IF v_srtcontrole_materiaal <> v_materiaal THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_materia = v_materiaal WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; fac.trackaction('#INSUPD', v_deel_key, NULL, NULL, rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) || 'Materiaal (EUR): ' || COALESCE(v_srtcontroledl_xcp_materia, v_srtcontrole_materiaal, '(leeg)') || ' --> ' || COALESCE(v_materiaal, '(leeg)')); END IF; v_errorhint := 'Aanpassen percentage'; IF v_srtcontrole_percentage <> v_percentage THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_perc = v_percentage WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; fac.trackaction('#INSUPD', v_deel_key, NULL, NULL, rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) || 'Percentage: ' || COALESCE(v_srtcontroledl_xcp_perc, v_srtcontrole_percentage, '(leeg)') || ' --> ' || COALESCE(v_percentage, '(leeg)')); END IF; v_errorhint := 'Aanpassen startdatum: ' || rec.ins_kenmerkwaarde9; IF rec.ins_kenmerkwaarde9 IS NOT NULL THEN v_startdat_nieuw := TRUNC (FAC.SAFE_TO_DATE (rec.ins_kenmerkwaarde9, 'DDMMYYYY'), 'YYYY'); IF v_startdat_nieuw IS NOT NULL AND v_startdat_nieuw <> v_srtcontroledl_xcp_startdat AND rec.ins_kenmerkwaarde9 <> COALESCE (rec.ins_kenmerkwaarde10, '01010000') THEN UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_startdat = v_startdat_nieuw WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; fac.trackaction('#INSUPD', v_deel_key, NULL, NULL, rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10) || 'Startdatum: '|| COALESCE(TO_CHAR(v_srtcontroledl_xcp_startdat, 'dd-mm-yyyy'), '(leeg)') || ' --> ' || COALESCE(TO_CHAR(v_startdat_nieuw, 'dd-mm-yyyy'), '(leeg)')); END IF; END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Bepalen level'; v_srtcontrole_level := 10; IF rec.ins_kenmerkwaarde3 <> 'Vervanging' THEN v_srtcontrole_level := 100; END IF; v_errorhint := 'Aanmaken srtcontrole'; -- We vullen de controle altijd met een bedrag van 0 euro. De overrule heeft dan het juiste -- bedrag. Hiermee voorkomen we een controle met een bepaald bedrag waarbij er voor een bepaald object -- die taak niet voorkomt. INSERT INTO ins_srtcontrole ( ins_srtinstallatie_key, ins_srtcontrole_niveau, ins_srtcontrole_omschrijving, ctr_discipline_key, ins_Srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_level, ins_srtcontrole_materiaal, ins_srtcontrole_percentage) VALUES ( v_srtdeel_key, 'S', rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code, v_taakcat_key, COALESCE ( TO_NUMBER (rec.ins_kenmerkwaarde8), 0), 4, v_srtcontrole_level, 0, v_srtcontrole_percentage) RETURNING ins_srtcontrole_key INTO v_srtcontrole_key; INSERT INTO ins_srtcontroledl_xcp (ins_srtcontrole_key, ins_srtcontroledl_xcp_materia, ins_deel_key) VALUES (v_srtcontrole_key, v_materiaal, v_deel_key) RETURNING ins_srtcontroledl_xcp_key INTO v_srtcontroledl_xcp_key; END; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('KMMO.import MJOB', 'E', v_aanduiding || ': ' || v_errormsg, v_errorhint); END; END LOOP; -- Nu gaan we de wijzigingen in de delen doorvoeren FOR rec IN c_upd_deel LOOP BEGIN SELECT ins_deel_key INTO v_deel_key FROM ins_deel WHERE ins_deel_verwijder IS NULL AND ins_deel_omschrijving = rec.ins_deel_omschrijving; SELECT ins_alg_ruimte_key, ins_alg_locatie_key INTO v_alg_ruimte_key, v_alg_locatie_key FROM ins_deel WHERE ins_deel_key = v_deel_key; IF v_alg_ruimte_key <> rec.alg_ruimte_key THEN UPDATE ins_deel d SET ins_alg_ruimte_key = rec.alg_ruimte_key, ins_alg_locatie_key = rec.alg_locatie_key WHERE d.ins_deel_key = v_deel_key; SELECT alg_ruimte_aanduiding || ' (' || alg_ruimte_omschrijving || ')' INTO v_ruimte_aanduiding_oud FROM alg_v_ruimte_gegevens WHERE alg_ruimte_key = v_alg_ruimte_key; SELECT alg_ruimte_aanduiding || ' (' || alg_ruimte_omschrijving || ')' INTO v_ruimte_aanduiding_nieuw FROM alg_v_ruimte_gegevens WHERE alg_ruimte_key = rec.alg_ruimte_key; fac.trackaction ( 'INSUPD', v_deel_key, NULL, NULL, 'Object gewijzigd' || CHR (10) || 'Plaats of eigenaar: ' || v_ruimte_aanduiding_oud || ' --> ' || v_ruimte_aanduiding_nieuw); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving); END; BEGIN SELECT ins_deel_aanmaak INTO v_deel_aanmaak FROM ins_deel WHERE ins_deel_key = v_deel_key; IF v_deel_aanmaak <> rec.ins_deel_aanmaak THEN UPDATE ins_deel d SET ins_deel_aanmaak = rec.ins_deel_aanmaak WHERE d.ins_deel_key = v_deel_key; fac.trackaction ( 'INSUPD', v_deel_key, NULL, NULL, 'Object gewijzigd' || CHR (10) || 'Registratiedatum: ' || TO_CHAR(v_deel_aanmaak, 'dd-mm-yyyy') || ' --> ' || TO_CHAR(rec.ins_deel_aanmaak, 'dd-mm-yyyy')); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving); END; BEGIN SELECT ins_deel_aantal INTO v_deel_aantal FROM ins_deel WHERE ins_deel_key = v_deel_key; IF v_deel_aantal <> rec.ins_deel_aantal THEN UPDATE ins_deel d SET ins_deel_aantal = rec.ins_deel_aantal WHERE d.ins_deel_key = v_deel_key; fac.trackaction ( 'INSUPD', v_deel_key, NULL, NULL, 'Object gewijzigd' || CHR (10) || 'Hoeveelheid: ' || v_deel_aantal || ' --> ' || rec.ins_deel_aantal); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving); END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('KMMO.import MJOB', 'E', v_aanduiding || ': ' || v_errormsg, v_errorhint); END; / -- -- Rondleidingen -- CREATE OR REPLACE VIEW kmmo_v_rap_rondl_planning AS SELECT rrr.res_rsv_ruimte_key, 'R' || rrr.res_reservering_key || '/' || res_rsv_ruimte_volgnr reservering, FAC.gettrackingdate ('RESNEW', rrr.res_rsv_ruimte_key) res_aanmaak, res_rsv_ruimte_van, res_rsv_ruimte_tot, (SELECT fac_usrdata_code FROM fac_usrdata ud, res_kenmerkwaarde kw WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND kw.res_kenmerk_key = 1 -- taal rondleiding AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) = ud.fac_usrdata_key) taal, rrr.res_rsv_ruimte_omschrijving, DECODE (rrr.res_status_fo_key, 1, 'Aanvraag', 2, 'Bevestigd', 3, 'Geblokkeerd', 4, 'Vervallen') res_status, 'Ron' || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht, p.prs_perslid_naam_full, so.mld_statusopdr_omschrijving, rr.res_ruimte_nr FROM mld_opdr o, mld_melding m, res_rsv_ruimte rrr, prs_v_perslid_fullnames_all p, mld_statusopdr so, res_ruimte rr, res_ruimte_opstelling ro WHERE o.mld_uitvoerende_keys = p.prs_perslid_key AND o.mld_melding_key = m.mld_melding_key AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND o.mld_statusopdr_key = so.mld_statusopdr_key AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key; CREATE OR REPLACE VIEW kmmo_v_rondleidingen_kijk AS SELECT res_rsv_ruimte_van, res_rsv_ruimte_tot, res_reservering_key || '/' || res_rsv_ruimte_volgnr res_rsv_ruimte_nr, rrr.res_rsv_ruimte_omschrijving, rrr.res_rsv_ruimte_opmerking, pf.prs_perslid_naam_full, COALESCE(so.mld_statusopdr_omschrijving, 'Geaccepteerd') mld_statusopdr_omschrijving, LISTAGG (rd.res_deel_omschrijving, CHR (10)) WITHIN GROUP (ORDER BY rd.res_deel_omschrijving) AS voorzieningen, ra.res_activiteit_omschrijving, FLX.getflex ('RES', 82, rrr.res_rsv_ruimte_key) naam, rrr.res_rsv_ruimte_key FROM res_rsv_ruimte rrr, res_activiteit ra, mld_melding m, mld_opdr o, res_rsv_deel rrd, res_deel rd, mld_statusopdr so, prs_v_perslid_fullnames pf, (SELECT COALESCE (r.res_rsv_ruimte_key, a.res_rsv_ruimte_key) res_rsv_ruimte_key FROM (SELECT res_rsv_ruimte_key FROM res_rsv_ruimte rrr WHERE res_activiteit_key = 30) r FULL JOIN (SELECT res_rsv_ruimte_key FROM res_rsv_ruimte rrr WHERE EXISTS (SELECT 1 FROM res_rsv_deel rrd, res_deel rd WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_discipline_key = 601 -- audiotours en fluistersets )) a ON r.res_rsv_ruimte_key = a.res_rsv_ruimte_key) my_rrr WHERE my_rrr.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_key = m.res_rsv_ruimte_key(+) AND m.mld_melding_key = o.mld_melding_key(+) AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key(+) AND rrr.res_activiteit_key = ra.res_activiteit_key(+) AND rrd.res_deel_key = rd.res_deel_key(+) AND o.mld_uitvoerende_keys = pf.prs_perslid_key(+) AND o.mld_statusopdr_key = so.mld_statusopdr_key(+) AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrd.res_rsv_deel_verwijder IS NULL GROUP BY rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, rrr.res_rsv_ruimte_key, rrr.res_reservering_key, rrr.res_rsv_ruimte_volgnr, pf.prs_perslid_naam_full, so.mld_statusopdr_omschrijving, rrr.res_rsv_ruimte_omschrijving, rrr.res_rsv_ruimte_opmerking, ra.res_activiteit_omschrijving, rrr.res_rsv_ruimte_key; CREATE OR REPLACE VIEW kmmo_v_rap_rondl_afwezigheid AS SELECT pf.prs_perslid_naam_full rondleider, m.prs_perslid_key rondleider_key, m.mld_melding_key, fac.safe_to_date (flx.getflex ('MLD', 421, m.mld_melding_key), 'dd-mm-yyyy') van, fac.safe_to_date (flx.getflex ('MLD', 423, m.mld_melding_key), 'dd-mm-yyyy') tot, CASE WHEN fac.safe_to_date ( flx.getflex ('MLD', 423, m.mld_melding_key), 'dd-mm-yyyy') > SYSDATE THEN 1 ELSE 0 END toekomst FROM mld_melding m, prs_v_perslid_fullnames_all pf WHERE mld_stdmelding_key = 261 -- Afwezigheid AND m.prs_perslid_key = pf.prs_perslid_key; -- kalender functie voor de rondleiders. Hierin zien ze de eigen opdrachten en de geaccepteerde opdrachten van anderen. -- verder komen de aangevraagde vrije dagen in het overzicht. CREATE OR REPLACE VIEW kmmo_rap_cal_rondleiders AS SELECT r.prs_perslid_key user_key, o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr || ' ' || DECODE(SUBSTR(rog.res_ruimte_nr, 1,1), 'V', 'VC', 'B', 'BT', 'T', 'TT') || ' (' || so.mld_statusopdr_omschrijving || DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '', ' - ' || p.prs_perslid_voornaam) || ')' title, rrr.res_rsv_ruimte_tot tot, rrr.res_rsv_ruimte_van van, o.mld_opdr_key item_key, DECODE (o.mld_statusopdr_key, 1, DECODE(r.prs_srtperslid_key, 1361, '#FF0000','#C0C0C0'), -- Afgewezen rood voor de planner, grijs voor de rondleider 5, DECODE(r.prs_srtperslid_key, 1361, '#0000FF', DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '#0000FF', '#C0C0C0')), -- Toegekend blauw voor de planner en rondleider, grijs voor de rest 6, DECODE(r.prs_srtperslid_key, 1361, '#CC0000','#C0C0C0'), -- Afgemeld donkerrood voor de planner grijs voor de rest 8, DECODE(r.prs_srtperslid_key, 1361, '#008000', DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '#008000', '#C0C0C0'))) color, -- Geaccepteerd groen DECODE (o.mld_statusopdr_key, 1, '#FFFFFF', -- Afgewezen 5, '#FFFFFF', -- Toegekend 6, '#000000', -- Afgemeld 8, '#FFFFFF') textcolor, -- Geaccepteerd DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '?u=opdracht' || CHR (38) || 'internal=1' || CHR (38) || 'k=' || o.mld_opdr_key) url FROM mld_opdr o, mld_melding m, res_rsv_ruimte rrr, res_v_ruimte_opstel_gegevens rog, mld_statusopdr so, prs_perslid p, (SELECT gg.prs_perslid_key, pr.prs_srtperslid_key FROM fac_gebruikersgroep gg, prs_perslid pr WHERE gg.prs_perslid_key = pr.prs_perslid_key AND fac_groep_key = 321) r -- rondleiders WHERE mld_typeopdr_key = 241 -- rondleidingen AND o.mld_melding_key = m.mld_melding_key AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrr.res_ruimte_opstel_key = rog.res_ruimte_opstel_key AND o.mld_statusopdr_key = so.mld_statusopdr_key AND o.mld_uitvoerende_keys = p.prs_perslid_key AND o.mld_opdr_einddatum > ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3) AND NOT (o.mld_statusopdr_key IN (1,6) AND r.prs_perslid_key <> o.mld_uitvoerende_keys) UNION ALL SELECT rondleider_key, 'Verlof ' || mld_melding_key, tot + 1, DECODE(SIGN(van - ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)), -1, ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3), van) van, mld_melding_key, '#cc0066', '#ffffff', '?u=melding' || CHR (38) || 'internal=1' || CHR (38) || 'k=' || mld_melding_key url FROM kmmo_v_rap_rondl_afwezigheid WHERE tot > ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3); -- -- Beschikbaarheids kalenders -- -- afwijkende aanwezigheid die de rondleider via een melding aangeeft. CREATE OR REPLACE VIEW kmmo_v_mld_beschikb_raw AS SELECT m.mld_melding_key, prs_perslid_key, DECODE(kmb.mld_kenmerkmelding_waarde, 362, 'Afwezig', 'Aanwezig') beschikbaar , TO_DATE(kmdv.mld_kenmerkmelding_waarde || ' ' || DECODE(COALESCE(kmddv.mld_kenmerkmelding_waarde, '341'), '341', '10:15', '13:30'), 'dd-mm-yyyy hh24:mi') van, TO_DATE(kmdt.mld_kenmerkmelding_waarde || ' ' || DECODE(COALESCE(kmddt.mld_kenmerkmelding_waarde, '342'), '341', '13:30', '17:00'), 'dd-mm-yyyy hh24:mi') tot FROM mld_melding m, (SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 4741) kmb, (SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 421) kmdv, (SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 423) kmdt, (SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 4721) kmddv, (SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 4222) kmddt WHERE mld_stdmelding_key = 261 -- melding aan/afwezigheid AND m.mld_melding_key = kmb.mld_melding_key AND m.mld_melding_key = kmdv.mld_melding_key AND m.mld_melding_key = kmdt.mld_melding_key AND m.mld_melding_key = kmddv.mld_melding_key(+) AND m.mld_melding_key = kmddt.mld_melding_key(+); -- vaste beschikbaarheid die bij de persoon geregistreerd staat. CREATE OR REPLACE VIEW kmmo_v_prs_beschikb_raw AS SELECT 1 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1006) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1200) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%' UNION ALL SELECT 2 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1000) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1180) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%' UNION ALL SELECT 3 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1001) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1181) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%' UNION ALL SELECT 4 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1002) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1182) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%' UNION ALL SELECT 5 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1003) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1183) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%' UNION ALL SELECT 6 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1004) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1220) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%' UNION ALL SELECT 7 dvdw, prs_perslid_key, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1005) ochtend, (SELECT 1 FROM prs_kenmerklink kl WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1221) middag FROM prs_perslid p, prs_srtperslid sp WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'; -- Combinatie van persoonlijke beschikbaarheid en de meldingen overrule CREATE OR REPLACE VIEW kmmo_v_beschikb_raw AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 365) -- 1 jaar voorruit SELECT datums.datum + 41 / 96 van, datums.datum + 54 / 96 tot, 'ochtend' dagdeel, pf.prs_perslid_naam_full, DECODE (ochtend, NULL, 'V', 'W') afw_type, DECODE ( ochtend, NULL, DECODE ( (SELECT MAX (1) FROM kmmo_v_mld_beschikb_raw mbr WHERE mbr.prs_perslid_key = pbr.prs_perslid_key AND beschikbaar = 'Aanwezig' AND datums.datum + 50 / 96 BETWEEN van AND tot), 1, 1, 0), DECODE ( (SELECT MAX (1) FROM kmmo_v_mld_beschikb_raw mbr WHERE mbr.prs_perslid_key = pbr.prs_perslid_key AND beschikbaar = 'Afwezig' AND datums.datum + 50 / 96 BETWEEN van AND tot), 1, -1, 1)) beschikbaar, pf.prs_perslid_key FROM kmmo_v_prs_beschikb_raw pbr, datums, prs_v_perslid_fullnames pf WHERE pbr.prs_perslid_key = pf.prs_perslid_key AND TO_CHAR (datums.datum, 'D') = pbr.dvdw UNION ALL SELECT datums.datum + 54 / 96 van, datums.datum + 68 / 96 tot, 'middag' dagdeel, pf.prs_perslid_naam_full, DECODE (middag, NULL, 'V', 'W') afw_type, DECODE ( middag, NULL, DECODE ( (SELECT MAX (1) FROM kmmo_v_mld_beschikb_raw mbr WHERE mbr.prs_perslid_key = pbr.prs_perslid_key AND beschikbaar = 'Aanwezig' AND datums.datum + 60 / 96 BETWEEN van AND tot), 1, -1, 0), DECODE ( (SELECT MAX (1) FROM kmmo_v_mld_beschikb_raw mbr WHERE mbr.prs_perslid_key = pbr.prs_perslid_key AND beschikbaar = 'Afwezig' AND datums.datum + 60 / 96 BETWEEN van AND tot), 1, 0, 1)) beschikbaar, pf.prs_perslid_key FROM kmmo_v_prs_beschikb_raw pbr, datums, prs_v_perslid_fullnames pf WHERE pbr.prs_perslid_key = pf.prs_perslid_key AND TO_CHAR (datums.datum, 'D') = pbr.dvdw; -- aanwezigheidskalender CREATE OR REPLACE VIEW kmmo_rap_cal_rondl_aanwezig AS SELECT NULL user_key, prs_perslid_naam_full title, tot, van, DECODE ( (SELECT COUNT (*) FROM mld_opdr WHERE mld_statusopdr_key NOT IN (1, 2) -- afgewezen , niet akkoord AND mld_uitvoerende_keys = r.prs_perslid_key AND mld_opdr_plandatum BETWEEN van AND tot - 1 / (24 * 60)), '0', '#008000', '#00CCCC') color, -- Geaccepteerd groen '#FFFFFF' textcolor, -- Geaccepteerd NULL url, NULL item_key FROM kmmo_v_beschikb_raw r WHERE beschikbaar = 1 UNION ALL SELECT NULL user_key, prs_perslid_naam_full title, res_rsv_ruimte_tot tot, res_rsv_ruimte_van + 1 / (24 * 60 * 60) van, '#FF8800' color, -- opdracht gevonden oranje '#FFFFFF' textcolor, '?u=opdracht' || CHR (38) || 'k=' || o.mld_opdr_key url, o.mld_opdr_key item_key FROM mld_opdr o, prs_v_perslid_fullnames pf, mld_melding m, res_rsv_ruimte rrr WHERE o.mld_melding_key = m.mld_melding_key AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND o.mld_uitvoerende_keys = pf.prs_perslid_key AND o.mld_opdr_plandatum BETWEEN TRUNC (SYSDATE) AND SYSDATE + 365; CREATE OR REPLACE VIEW kmmo_rap_cal_rondl_afw AS SELECT NULL user_key, prs_perslid_naam_full title, tot, van, DECODE (beschikbaar, -1, '#FF8800', '#666666') color, -- Werktijden grijs, vakantie oranje '#FFFFFF' textcolor, -- Wit NULL url, NULL item_key FROM kmmo_v_beschikb_raw r WHERE beschikbaar <> 1; -- Kalender voor de backoffice rondleidingen om te zien wie wanneer vakantie heeft. CREATE OR REPLACE VIEW kmmo_rap_cal_vakantie AS SELECT NULL user_key, m.mld_melding_key || ' ' || p.prs_perslid_voornaam title, tot + 1 tot, van, m.mld_melding_key item_key, '#008000' color, '#FFFFFF' textcolor, '?u=melding' || CHR (38) || 'internal=1' || CHR (38) || 'k=' || m.mld_melding_key url FROM kmmo_v_rap_rondl_afwezigheid m, prs_perslid p WHERE m.rondleider_key = p.prs_perslid_key AND tot > ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -3); -- view om te zien welke reservering facturabel is. Dat betekent dat één van de rsv_ruimtes het kenmerk facturabel op 1 heeft staan. CREATE OR REPLACE VIEW kmmo_v_res_facturabel AS SELECT rrr.res_reservering_key FROM res_rsv_ruimte rrr, res_kenmerk rk WHERE rrr.res_rsv_ruimte_verwijder IS NULL AND rk.res_srtkenmerk_key = 101 AND rrr.res_activiteit_key = rk.res_activiteit_key AND COALESCE ( flx.getflex ('RES', rk.res_kenmerk_key, rrr.res_rsv_ruimte_key), '0') = '1' GROUP BY rrr.res_reservering_key; -- View om te rapporteren welke factuur bevroren mag worden via de export. CREATE OR REPLACE VIEW kmmo_v_rap_res_factuurstatus AS SELECT r.res_reservering_key, r.res_rsv_ruimte_volgnr, r.res_reservering_key || '/' || r.res_rsv_ruimte_volgnr res_nr, r.type, r.res_rsv_ruimte_van, r.res_rsv_ruimte_omschrijving, bo.res_status_bo_omschrijving, bo.res_status_bo_key, r.res_rsv_ruimte_key, f.factuur_nummer, f.export_datum, prijs_inc, prijs_ex, btw_h, btw_l FROM (SELECT f.res_reservering_key, rrr.res_rsv_ruimte_volgnr, 'R' type, res_rsv_ruimte_van, res_rsv_ruimte_omschrijving, res_status_bo_key, rrr.res_rsv_ruimte_key, res_rsv_ruimte_prijs - COALESCE(res_rsv_ruimte_korting, 0) prijs_inc, (res_rsv_ruimte_prijs - COALESCE(res_rsv_ruimte_korting, 0)) / 1.21 prijs_ex, 21 * (res_rsv_ruimte_prijs - COALESCE(res_rsv_ruimte_korting, 0)) / 121 btw_h, 0 btw_l FROM kmmo_v_res_facturabel f, res_rsv_ruimte rrr WHERE res_rsv_ruimte_verwijder IS NULL AND f.res_reservering_key = rrr.res_reservering_key UNION ALL SELECT f.res_reservering_key, rrr.res_rsv_ruimte_volgnr, 'D' type, res_rsv_ruimte_van, COUNT (*) || ' * ' || res_deel_omschrijving, MIN (rrd.res_status_bo_key), rrr.res_rsv_ruimte_key, count(*) * res_rsv_deel_prijs, count(*) * res_rsv_deel_prijs / 1.21, count(*) * 21 * res_rsv_deel_prijs / 121, 0 FROM kmmo_v_res_facturabel f, res_rsv_ruimte rrr, res_rsv_deel rrd, res_deel rd WHERE res_rsv_ruimte_verwijder IS NULL AND f.res_reservering_key = rrr.res_reservering_key AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rrd.res_rsv_deel_verwijder IS NULL AND rrd.res_deel_key = rd.res_deel_key GROUP BY f.res_reservering_key, rrr.res_rsv_ruimte_volgnr, res_rsv_ruimte_van, res_deel_omschrijving, rrr.res_rsv_ruimte_key, res_rsv_deel_prijs UNION ALL SELECT f.res_reservering_key, rrr.res_rsv_ruimte_volgnr, 'A' type, res_rsv_ruimte_van, res_rsv_artikel_aantal || ' * ' || res_artikel_omschrijving, rra.res_status_bo_key, rrr.res_rsv_ruimte_key, rra.res_rsv_artikel_prijs, res_rsv_artikel_prijs / (1 + ra.res_artikel_btw /100), DECODE(ra.res_artikel_btw, 21, 21, 0) * res_rsv_artikel_prijs / (100 + (DECODE(ra.res_artikel_btw, 21, 21, 0))), DECODE(ra.res_artikel_btw, 9, 9, 0) * res_rsv_artikel_prijs / (100 + (DECODE(ra.res_artikel_btw, 9, 9, 0))) FROM kmmo_v_res_facturabel f, res_rsv_ruimte rrr, res_rsv_artikel rra, res_artikel ra WHERE res_rsv_ruimte_verwijder IS NULL AND f.res_reservering_key = rrr.res_reservering_key AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND rra.res_rsv_artikel_verwijder IS NULL AND rra.res_artikel_key = ra.res_artikel_key) r, res_status_bo bo, (SELECT res_reservering_key, MAX(res_kenmerkreservering_waarde) factuur_nummer, MAX(res_kenmerkwaarde_aanmaak) export_datum FROM res_kenmerkwaarde kw, res_kenmerk k, res_rsv_ruimte rrr WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND kw.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 102 -- Factuur GROUP BY res_reservering_key) f WHERE r.res_status_bo_key = bo.res_status_bo_key AND r.res_reservering_key = f.res_reservering_key(+); -- factuur export. Tijdens de export wordt het factuurnummer bepaald. Dit nummer zit in de reeks xx-yyy. Hierbij is xx het jaar -- waarop de factuur is aangemaakt en yyy is een volgnummer tussen de 700 en 899. In een nieuw jaar wordt weer bij 700 begonnen. -- welke reservering is helemaal afgemeld (5). Er mogen dus geen items meer open staan. CREATE OR REPLACE VIEW kmmo_v_export_res_facturen ( result, result_order ) AS SELECT res_reservering_key || ';' || ROUND (SUM (prijs_inc), 2) || ';' || ROUND (SUM (prijs_ex), 2) || ';' || ROUND (SUM (btw_h), 2) || ';' || ROUND (SUM (btw_l), 2), res_reservering_key FROM kmmo_v_rap_res_factuurstatus fs WHERE NOT EXISTS (SELECT 1 FROM kmmo_v_rap_res_factuurstatus fs2 WHERE fs.res_reservering_key = fs2.res_reservering_key AND res_status_bo_key <> 5) GROUP BY res_reservering_key; CREATE OR REPLACE PROCEDURE kmmo_export_res_facturen ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2) AS CURSOR c IS SELECT DISTINCT res_rsv_ruimte_key, res_reservering_key, res_rsv_ruimte_volgnr FROM kmmo_v_rap_res_factuurstatus fs WHERE NOT EXISTS (SELECT 1 FROM kmmo_v_rap_res_factuurstatus fs2 WHERE fs.res_reservering_key = fs2.res_reservering_key AND res_status_bo_key <> 5) -- Afgemeld ORDER BY res_reservering_key, res_rsv_ruimte_volgnr; v_factuurnr NUMBER; v_kenmerk_key NUMBER; v_reservering_key_prev NUMBER; BEGIN BEGIN SELECT MAX ( fac.safe_to_number ( SUBSTR (res_kenmerkreservering_waarde, 4, 100))) + 1 INTO v_factuurnr FROM res_kenmerk k, res_kenmerkwaarde kw WHERE res_srtkenmerk_key = 102 -- Factuurnummer AND k.res_kenmerk_key = kw.res_kenmerk_key AND SUBSTR (res_kenmerkreservering_waarde, 1, 2) = TO_CHAR (SYSDATE, 'YY'); EXCEPTION WHEN NO_DATA_FOUND THEN v_factuurnr := 700; END; IF v_factuurnr IS NULL THEN v_factuurnr := 700; END IF; v_reservering_key_prev := -1; FOR rec IN c LOOP BEGIN IF rec.res_reservering_key <> v_reservering_key_prev THEN SELECT res_kenmerk_key INTO v_kenmerk_key FROM res_kenmerk k, res_rsv_ruimte rrr WHERE k.res_srtkenmerk_key = 102 -- Factuurnummer AND rrr.res_activiteit_key = k.res_activiteit_key AND rrr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key; FLX.setflex ('RES', v_kenmerk_key, rec.res_rsv_ruimte_key, TO_CHAR (SYSDATE, 'YY') || '.' || v_factuurnr); SELECT res_kenmerk_key INTO v_kenmerk_key FROM res_kenmerk k, res_rsv_ruimte rrr WHERE k.res_srtkenmerk_key = 141 -- Factuurdatum AND rrr.res_activiteit_key = k.res_activiteit_key AND rrr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key; FLX.setflex ('RES', v_kenmerk_key, rec.res_rsv_ruimte_key, TO_CHAR (SYSDATE, 'DD-MM-YYYY')); v_reservering_key_prev := rec.res_reservering_key; v_factuurnr := v_factuurnr + 1; END IF; UPDATE res_rsv_artikel SET res_status_bo_key = 6 -- Verwerkt WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key AND res_rsv_artikel_verwijder IS NULL; UPDATE res_rsv_deel SET res_status_bo_key = 6 -- Verwerkt WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key AND res_rsv_deel_verwijder IS NULL; UPDATE res_rsv_ruimte SET res_status_bo_key = 6 -- Verwerkt WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key AND res_rsv_ruimte_verwijder IS NULL; END; END LOOP; END; / -- Notificaties voor meldingen waarbij de acceptatietijd en/of de uitvoertijd verstreken is. CREATE OR REPLACE VIEW kmmo_v_mld_sla_telaat AS SELECT gg.prs_perslid_key extra_key, 'Uitvoer' type_telaat, m.mld_melding_onderwerp onderwerp, d.ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving stdmelding, m.mld_melding_key key FROM mld_melding m, mld_stdmelding std, fac_groeprechten gr, fac_functie f, fac_groep g, fac_gebruikersgroep gg, mld_discipline d, mld_disc_params dp WHERE TRUNC (mld_melding_einddatum) <= TRUNC (SYSDATE) - mld_disc_params_noti_dagen AND mld_melding_status not in (1, 5, 6) -- afgewezen, afgemeld, historie AND gr.fac_groep_key = g.fac_groep_key AND gr.fac_functie_key = f.fac_functie_key AND f.fac_functie_code = 'WEB_MLDBOF' AND fac_gebruiker_alg_level_write <> 9 -- Je moet wel kunnen schrijven AND g.fac_groep_key = gg.fac_groep_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = gr.ins_discipline_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = dp.mld_ins_discipline_key AND dp.mld_disc_params_noti_dagen IS NOT NULL UNION ALL SELECT gg.prs_perslid_key xkey, 'Acceptatie' type_telaat, m.mld_melding_onderwerp onderwerp, d.ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving stdmelding, m.mld_melding_key key FROM mld_melding m, mld_stdmelding std, fac_groeprechten gr, fac_functie f, fac_groep g, fac_gebruikersgroep gg, mld_discipline d, mld_disc_params dp WHERE TRUNC (mld_melding_acceptdatum_std) <= TRUNC (SYSDATE) - mld_disc_params_noti_dagen AND mld_melding_acceptdatum_std IS NOT NULL AND mld_melding_status IN (2, 3) -- Nieuw of te accepteren AND gr.fac_groep_key = g.fac_groep_key AND gr.fac_functie_key = f.fac_functie_key AND f.fac_functie_code = 'WEB_MLDBOF' AND fac_gebruiker_alg_level_write <> 9 -- Je moet wel kunnen schrijven AND g.fac_groep_key = gg.fac_groep_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = gr.ins_discipline_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = dp.mld_ins_discipline_key AND dp.mld_disc_params_noti_dagen IS NOT NULL; CREATE OR REPLACE VIEW kmmo_v_noti_mld_sla_telaat AS SELECT 'CUST01' code, NULL sender, extra_key receiver, 'Meldingen niet op tijd geaccepteerd en/of afgehandeld ' text, 381 key, -- Rapport meldingen over sla extra_key xkey FROM kmmo_v_mld_sla_telaat WHERE TO_CHAR(SYSDATE, 'D') NOT IN (1, 7) -- Niet op zaterdag en zondag GROUP BY extra_key; -- Klachtenafhandeling CREATE OR REPLACE VIEW kmmo_v_afzender_klachten AS SELECT p.prs_perslid_key, pf.prs_perslid_naam_friendly, p.prs_perslid_verwijder, sp.prs_srtperslid_omschrijving, ud.fac_usrdata_omschr afz_info FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_kenmerklink kl, prs_srtperslid sp, fac_usrdata ud WHERE p.prs_perslid_key = kl.prs_link_key AND kl.prs_kenmerk_key = 1100 -- Zichtbaarheid klachtenafhandeling AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND FAC.safe_to_number(kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key; -- KMMO#82168 Rapportage klachtenafhandeling CREATE OR REPLACE VIEW kmmo_v_rap_klachten_feedback AS SELECT m.mld_melding_datum, d.ins_discipline_omschrijving, std.mld_stdmelding_omschrijving, -- LISTAGG (n.omschrijving, CHR (10)) WITHIN GROUP (ORDER BY n.mld_melding_key, n.mld_melding_note_wijzigdatum) logline LISTAGG (n.omschrijving, CHR (10)) WITHIN GROUP (ORDER BY n.mld_melding_key, n.mld_melding_note_wijzigdatum) logline, fac.count_Work_Days_InclTime(mld_melding_datum, COALESCE(MLD.getmeldingstatusdate(m.mld_melding_key, 5), sysdate)) doorlooptijd, MLD.getmeldingstatusdate(m.mld_melding_key, 5) datumafgemeld, s.mld_statuses_omschrijving FROM mld_melding m, mld_stdmelding std, mld_statuses s, mld_discipline d, (SELECT TO_CHAR (mld_melding_note_wijzigdatum, 'dd-mm-yyyy hh24:mi:ss') || ' (' || mld_melding_key || ')' || CHR (10) || mld_melding_note_omschrijving omschrijving, mld_melding_key, mld_melding_note_wijzigdatum FROM mld_melding_note) n WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 2 AND m.mld_melding_key = n.mld_melding_key(+) AND m.mld_melding_status = s.mld_statuses_key GROUP BY d.ins_discipline_omschrijving, std.mld_stdmelding_omschrijving, m.mld_melding_key, mld_melding_datum, s.mld_statuses_omschrijving; ------ 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