-- Script containing customer specific db-configuration for ARBO. -- (c) 2011 SG|facilitor bv -- $Revision$ -- $Id$ -- -- Support: +31 53 4800700 set echo on spool xarbo.lst CREATE OR REPLACE VIEW arbo_v_rap_import_log AS SELECT imp_log_status fclt_f_status, imp_log_omschrijving omschrijving, imp_log_hint opmerking FROM imp_log l WHERE l.fac_import_key = (SELECT MAX (fac_import_key) FROM fac_import WHERE fac_import_app_key = 61); /* Formatted on 30-3-2011 14:00:30 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE arbo_import_prs (p_import_key IN NUMBER) IS c_fielddelimitor VARCHAR2 (1) := ';'; -- LET OP: moet idem zijn als declaratie bij ARBO_UPDATE_PRS v_newline VARCHAR2 (1000); -- Input line v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER := 0; v_ongeldig NUMBER (1); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_count NUMBER; -- De importvelden: v_prs_perslid_nr VARCHAR2 (256); v_prs_perslid_titel VARCHAR2 (256); v_prs_perslid_naam VARCHAR2 (256); v_prs_perslid_tussenvoegsel VARCHAR2 (256); v_prs_perslid_voorletters VARCHAR2 (256); v_prs_perslid_voornaam VARCHAR2 (256); v_prs_afdeling_naam VARCHAR2 (256); v_prs_afdeling_omschrijving VARCHAR2 (256); v_prs_srtperslid_omschrijving VARCHAR2 (256); v_alg_locatie_code VARCHAR2 (256); v_alg_gebouw_code VARCHAR2 (256); v_alg_verdieping_code VARCHAR2 (256); v_alg_ruimte_nr VARCHAR2 (256); v_prs_perslid_telefoonnr VARCHAR2 (256); v_prs_perslid_email VARCHAR2 (256); v_prs_perslid_oslogin VARCHAR2 (256); v_prs_perslid_ingangsdatum VARCHAR2 (256); v_prs_perslid_einddatum VARCHAR2 (256); -- Overig: v_prs_perslid_ingangs_date DATE; v_prs_perslid_eind_date DATE; CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM arbo_imp_prs; COMMIT; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_aanduiding := ''; v_errorhint := 'Fout bij opvragen te importeren rij'; v_ongeldig := 0; -- Lees alle veldwaarden -- 01 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- 02 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_titel); -- 03 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); -- 04 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel); -- 05 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters); -- 06 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam); -- 07 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam); -- 08 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_omschrijving); -- 09 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving); -- 10 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); -- 11 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code); -- 12 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_verdieping_code); -- 13 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr); -- 14 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr); -- 15 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- 16 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin); -- 17 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_ingangsdatum); -- 18 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_einddatum); -- v_aanduiding := '[' || v_prs_perslid_nr || '|' || v_prs_perslid_naam || '|' || v_prs_perslid_tussenvoegsel || '|' || v_prs_perslid_voornaam || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_prs_perslid_nr) = 'PERSONEELSNUMMER' AND UPPER (v_prs_perslid_titel) = 'TITEL' AND UPPER (v_prs_perslid_naam) = 'NAAM' AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSEL' AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS' AND UPPER (v_prs_perslid_voornaam) = 'VOORNAAM' AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE' AND UPPER (v_prs_afdeling_omschrijving) = 'AFDELINGSOMSCHRIJVING' AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE' AND UPPER (v_alg_locatie_code) = 'LOCATIECODE' AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE' AND UPPER (v_alg_verdieping_code) = 'BOUWLAAGVOLGNUMMER' AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER' AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOON' AND UPPER (v_prs_perslid_email) = 'EMAIL' AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM' AND UPPER (v_prs_perslid_ingangsdatum) = 'INDIENSTDATUM' AND UPPER (v_prs_perslid_einddatum) = 'UITDIENSTDATUM' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errorhint := 'Ongeldig personeelsnummer'; v_prs_perslid_nr := TRIM (v_prs_perslid_nr); IF (v_prs_perslid_nr IS NULL) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Personeelsnummer (= login) onbekend', 'Personeelsnummer is verplicht; regel wordt overgeslagen!' ); COMMIT; ELSE -- Personeelsnummers met lengte <5 links aanvullen met nullen!!! -- LET OP: Personeelsnummer wordt 1-op-1 gebruikt als loginnaam! IF LENGTH (v_prs_perslid_nr) < 5 THEN v_prs_perslid_nr := SUBSTR ('0000' || v_prs_perslid_nr, -5); ELSE IF LENGTH (v_prs_perslid_nr) > 16 THEN v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Personeelsnummer te lang', 'Personeelsnummer wordt afgebroken tot [' || v_prs_perslid_nr || ']' ); COMMIT; END IF; END IF; END IF; -- v_errorhint := 'Ongeldige titel'; v_prs_perslid_titel := TRIM (v_prs_perslid_titel); IF LENGTH (v_prs_perslid_titel) > 15 THEN v_prs_perslid_titel := SUBSTR (v_prs_perslid_titel, 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Titel te lang', 'Titel wordt afgebroken tot [' || v_prs_perslid_titel || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige naam'; v_prs_perslid_naam := TRIM (v_prs_perslid_naam); IF LENGTH (v_prs_perslid_naam) > 30 THEN v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Naam te lang', 'Naam wordt afgebroken tot [' || v_prs_perslid_naam || ']' ); COMMIT; ELSE IF (v_prs_perslid_naam IS NULL) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Naam onbekend', 'Naam is verplicht; regel wordt overgeslagen!' ); COMMIT; END IF; END IF; -- v_errorhint := 'Ongeldig tussenvoegsel'; v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel); IF LENGTH (v_prs_perslid_tussenvoegsel) > 10 THEN v_prs_perslid_tussenvoegsel := SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Tussenvoegsel te lang', 'Tussenvoegsel wordt afgebroken tot [' || v_prs_perslid_tussenvoegsel || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige voorletters'; v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters); IF LENGTH (v_prs_perslid_voorletters) > 10 THEN v_prs_perslid_voorletters := SUBSTR (v_prs_perslid_voorletters, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Voorletters te lang', 'Voorletters worden afgebroken tot [' || v_prs_perslid_voorletters || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige voornaam'; v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam); IF LENGTH (v_prs_perslid_voornaam) > 30 THEN v_prs_perslid_voornaam := SUBSTR (v_prs_perslid_voornaam, 1, 30); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Voornaam is te lang', 'Voornaam wordt afgebroken tot [' || v_prs_perslid_voornaam || ']' ); COMMIT; ELSE IF (v_prs_perslid_voornaam IS NULL) THEN v_prs_perslid_voornaam := '-'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Voornaam onbekend', 'Voornaam wordt gezet op [-]'); COMMIT; END IF; END IF; -- v_errorhint := 'Ongeldige afdelingscode'; v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam); IF LENGTH (v_prs_afdeling_naam) > 10 THEN v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Afdelingscode te lang', 'Afdelingscode wordt afgebroken tot [' || v_prs_afdeling_naam || ']' ); COMMIT; ELSE IF (v_prs_afdeling_naam IS NULL) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Afdelingscode onbekend', 'Afdelingscode is verplicht; regel wordt overgeslagen!' ); COMMIT; END IF; END IF; -- v_errorhint := 'Ongeldige afdelingsomschrijving'; v_prs_afdeling_omschrijving := TRIM (v_prs_afdeling_omschrijving); IF LENGTH (v_prs_afdeling_omschrijving) > 60 THEN v_prs_afdeling_omschrijving := SUBSTR (v_prs_afdeling_omschrijving, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Afdelingsomschrijving te lang', 'Afdelingsomschrijving wordt afgebroken tot [' || v_prs_afdeling_omschrijving || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige functie'; v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving); IF LENGTH (v_prs_srtperslid_omschrijving) > 60 THEN v_prs_srtperslid_omschrijving := SUBSTR (v_prs_srtperslid_omschrijving, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Functie te lang', 'Functie wordt afgebroken tot [' || v_prs_srtperslid_omschrijving || ']' ); COMMIT; ELSE IF (v_prs_srtperslid_omschrijving IS NULL) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Functie onbekend', 'Functie is verplicht; regel wordt overgeslagen!' ); COMMIT; END IF; END IF; -- v_errorhint := 'Ongeldige locatiecode'; v_alg_locatie_code := TRIM (v_alg_locatie_code); IF LENGTH (v_alg_locatie_code) > 10 THEN v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Locatiecode te lang', 'Locatiecode wordt afgebroken tot [' || v_alg_locatie_code || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige gebouwcode'; v_alg_gebouw_code := TRIM (v_alg_gebouw_code); IF LENGTH (v_alg_gebouw_code) > 10 THEN v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Gebouwcode te lang', 'Gebouwcode wordt afgebroken tot [' || v_alg_gebouw_code || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige verdiepingcode'; v_alg_verdieping_code := TRIM (v_alg_verdieping_code); IF LENGTH (v_alg_verdieping_code) > 10 THEN v_alg_verdieping_code := SUBSTR (v_alg_verdieping_code, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Verdiepingcode te lang', 'Verdiepingcode wordt afgebroken tot [' || v_alg_verdieping_code || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldig ruimtenummer'; v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr); IF LENGTH (v_alg_ruimte_nr) > 10 THEN v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ruimtenummer te lang', 'Ruimtenummer wordt afgebroken tot [' || v_alg_ruimte_nr || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldig telefoonnummer'; v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr); IF LENGTH (v_prs_perslid_telefoonnr) > 15 THEN v_prs_perslid_telefoonnr := SUBSTR (v_prs_perslid_telefoonnr, 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Telefoonnummer te lang', 'Telefoonnummer wordt afgebroken tot [' || v_prs_perslid_telefoonnr || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldig e-mailadres'; v_prs_perslid_email := TRIM (v_prs_perslid_email); IF LENGTH (v_prs_perslid_email) > 50 THEN v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 50); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'E-mailadres te lang', 'E-mailadres wordt afgebroken tot [' || v_prs_perslid_email || ']' ); COMMIT; END IF; -- LET OP: Personeelsnummer wordt 1-op-1 gebruikt als loginnaam! v_errorhint := 'Ongeldige loginnaam'; v_prs_perslid_oslogin := v_prs_perslid_nr; IF LENGTH (v_prs_perslid_oslogin) > 30 THEN v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Loginnaam te lang', 'Loginnaam wordt afgebroken tot [' || v_prs_perslid_oslogin || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige datum in dienst'; v_prs_perslid_ingangsdatum := TRIM (v_prs_perslid_ingangsdatum); IF v_prs_perslid_ingangsdatum IS NOT NULL THEN BEGIN v_prs_perslid_ingangs_date := TO_DATE (v_prs_perslid_ingangsdatum, 'dd-mm-yyyy'); EXCEPTION WHEN OTHERS THEN v_ongeldig := 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); COMMIT; END; ELSE v_prs_perslid_ingangs_date := NULL; END IF; -- v_errorhint := 'Ongeldige datum uit dienst'; v_prs_perslid_einddatum := TRIM (v_prs_perslid_einddatum); IF v_prs_perslid_einddatum IS NOT NULL THEN BEGIN v_prs_perslid_eind_date := TO_DATE (v_prs_perslid_einddatum, 'dd-mm-yyyy'); EXCEPTION WHEN OTHERS THEN v_ongeldig := 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); COMMIT; END; ELSE v_prs_perslid_eind_date := NULL; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel ARBO_IMP_PRS'; INSERT INTO arbo_imp_prs (imp_datum, prs_perslid_nr, prs_perslid_titel, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_afdeling_naam, prs_afdeling_omschrijving, prs_srtperslid_omschrijving, alg_gebouw_code, alg_verdieping_code, alg_ruimte_nr, prs_perslid_telefoonnr, prs_perslid_email, prs_perslid_oslogin, prs_perslid_ingangsdatum, prs_perslid_einddatum) VALUES (SYSDATE, v_prs_perslid_nr, v_prs_perslid_titel, v_prs_perslid_naam, v_prs_perslid_tussenvoegsel, v_prs_perslid_voorletters, v_prs_perslid_voornaam, v_prs_afdeling_naam, v_prs_afdeling_omschrijving, v_prs_srtperslid_omschrijving, v_alg_gebouw_code, v_alg_verdieping_code, v_alg_ruimte_nr, v_prs_perslid_telefoonnr, v_prs_perslid_email, v_prs_perslid_oslogin, v_prs_perslid_ingangs_date, v_prs_perslid_eind_date); COMMIT; v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Ingelezen regel kan niet worden weggeschreven!' ); COMMIT; END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!'); ELSE fac.imp_writelog ( p_import_key, 'S', 'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Persoon: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - v_count_import), '' ); END IF; COMMIT; 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.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END arbo_import_prs; / /* Formatted on 30-3-2011 14:00:30 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE arbo_update_prs (p_import_key IN NUMBER) IS -- LET OP: moet idem zijn als declaratie bij ARBO_IMPORT_PRS c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: '; -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een e-mail c_max_delta_percentage NUMBER (10) := 20; -- Groep waar personen in geplaatst worden (indien nog geen groep) c_groep_upper VARCHAR2 (30) := '_DEFAULT'; c_profiel_omschrijving VARCHAR2 (30) := 'DEFAULT'; v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_prs_import NUMBER (10); -- #actieve personen na import! v_count_prs_actual NUMBER (10); -- #actieve personen voor import! v_count_tot NUMBER (10); v_count_error NUMBER (10); v_count NUMBER (10); -- v_perslid_key NUMBER (10); v_afdeling_key NUMBER (10); v_kostenplaats_key NUMBER (10); v_srtperslid_key NUMBER (10); v_locatie_key NUMBER (10); v_gebouw_key NUMBER (10); v_gebouw_code VARCHAR2 (10); v_verdieping_key NUMBER (10); v_ruimte_key NUMBER (10); v_ruimte_nr VARCHAR2 (10); v_wp_volgnr NUMBER (3); v_wp_oms VARCHAR2 (30); v_wp_key NUMBER (10); v_groep_key NUMBER (10); v_profiel_key NUMBER (10); -- Let op! Personen die niet meer in dienst zijn -> niet in arbo_imp_prs! -- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR cdelprs IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL --AND p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\' AND NOT EXISTS (SELECT 1 FROM arbo_imp_prs ip WHERE UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr)); -- Let op! Personen die niet meer in dienst zijn -> niet in arbo_imp_prs! CURSOR csrtperslid IS SELECT MIN (prs_perslid_nr) prs_perslid_nr, MIN (prs_perslid_naam) prs_perslid_naam, MIN (prs_perslid_voornaam) prs_perslid_voornaam, MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving FROM arbo_imp_prs GROUP BY UPPER (prs_srtperslid_omschrijving); -- Let op! Personen die niet meer in dienst zijn -> niet in arbo_imp_prs! -- Dubbele nummers? Dan wordt slechts 1 set persoongegevens toegevoegd! -- Ook wordt in deze loop de afdelingsomschrijving eventueel bijgewerkt! CURSOR cperslid IS SELECT * FROM arbo_imp_prs; -- Let op! Personen die niet meer in dienst zijn -> niet in arbo_imp_prs! -- Dubbele nummers? Dan krijgt iemand mogelijk de verkeerde plaats! CURSOR cwp IS SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code, ip.alg_verdieping_code, ip.alg_ruimte_nr FROM arbo_imp_prs ip, prs_v_aanwezigperslid p WHERE UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr) AND ( ip.alg_locatie_code IS NOT NULL OR ip.alg_gebouw_code IS NOT NULL OR ip.alg_verdieping_code IS NOT NULL OR ip.alg_ruimte_nr IS NOT NULL); -- Alle actieve personen met nummer (ie. de import-doelgroep) zonder een werkplek CURSOR cnowp IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%' AND NOT EXISTS (SELECT 1 FROM prs_v_aanwezigperslidwerkplek pw WHERE pw.prs_perslid_key = p.prs_perslid_key); -- Alle aanwezige personen met nummer (ie. de import-doelgroep) niet in een groep CURSOR cnogroup IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep g WHERE g.prs_perslid_key = p.prs_perslid_key); BEGIN -- Bepaal nummer-match tussen Facilitor en RECENT importbestand ofwel het aantal -- actieve personen na import. -- RECENT betekent niet meer dan een kwartiertje oud (14,4 minuten); dit voorkomt -- dat - als er geen nieuw importbestand is aangeleverd - telkens dezelfde fouten -- worden gerapporteerd (nl. op basis van een oud importbestand in ARBO_IMP_PRS). SELECT COUNT ( * ) INTO v_count_prs_import FROM prs_v_aanwezigperslid p, arbo_imp_prs ip WHERE p.prs_perslid_nr IS NOT NULL AND UPPER (p.prs_perslid_nr) = UPPER (ip.prs_perslid_nr) AND (ip.imp_datum + 0.01) > SYSDATE; -- Bepaal huidig aantal actieve personen in Facilitor. SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * )) INTO v_count_prs_actual FROM prs_v_aanwezigperslid WHERE prs_perslid_nr IS NOT NULL; IF ( (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) >= (100 - c_max_delta_percentage))) THEN -- Geldig importbestand wat betreft aantal personen v_errorhint := 'Fout bij bepalen profiel'; SELECT MAX (fac_profiel_key), COUNT ( * ) INTO v_profiel_key, v_count FROM fac_profiel WHERE UPPER (TRIM (fac_profiel_omschrijving)) = c_profiel_omschrijving; IF (v_count = 0) THEN fac.imp_writelog ( p_import_key, 'I', 'Standaard profiel [' || c_profiel_omschrijving || '] niet gevonden.', 'Personen zonder profiel kunnen niet worden gekoppeld aan een profiel.' ); COMMIT; END IF; FOR recdelprs IN cdelprs LOOP BEGIN v_aanduiding := recdelprs.prs_perslid_nr || '|' || recdelprs.prs_perslid_naam || '|' || recdelprs.prs_perslid_voornaam || ' - '; v_errorhint := 'Fout bij bepalen verplichtingen'; -- Heeft persoon actuele/toekomstige verplichtingen? SELECT COUNT ( * ) INTO v_count FROM prs_perslid p, prs_v_verplichting_keys r WHERE p.prs_perslid_key = r.prs_perslid_key AND p.prs_perslid_key = recdelprs.prs_perslid_key; IF v_count = 0 THEN v_errorhint := 'Fout bij verwijderen persoon'; UPDATE prs_perslid SET prs_perslid_verwijder = SYSDATE WHERE prs_perslid_key = recdelprs.prs_perslid_key; fac.imp_writelog ( p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is verwijderd', 'Persoon is verwijderd' ); COMMIT; ELSE -- Staat persoon INACTIEF? v_errorhint := 'Fout bij bepalen INACTIEF'; SELECT COUNT ( * ) INTO v_count FROM prs_perslid p WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%' AND p.prs_perslid_key = recdelprs.prs_perslid_key; IF v_count = 0 THEN v_errorhint := 'Fout bij INACTIEF maken persoon'; -- Persoon INACTIEF maken (update naam + reset oslogin) UPDATE prs_perslid SET prs_perslid_naam = SUBSTR (c_persoon_inactief || prs_perslid_naam, 1, 30), prs_perslid_oslogin = NULL WHERE prs_perslid_key = recdelprs.prs_perslid_key; fac.imp_writelog ( p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is INACTIEF gemaakt', 'Persoon is INACTIEF gemaakt' ); ELSE v_errorhint := 'Fout bij INACTIEF houden persoon'; -- Persoon INACTIEF houden (reset oslogin; indien handmatig INACTIEF gemaakt) UPDATE prs_perslid SET prs_perslid_oslogin = NULL WHERE prs_perslid_naam LIKE c_persoon_inactief || '%' AND prs_perslid_oslogin IS NOT NULL; fac.imp_writelog ( p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is INACTIEF', 'Persoon is INACTIEF' ); END IF; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; v_count_tot := 0; v_count_error := 0; FOR recsrtperslid IN csrtperslid LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recsrtperslid.prs_perslid_nr || '|' || recsrtperslid.prs_perslid_naam || '|' || recsrtperslid.prs_perslid_voornaam || '|' || recsrtperslid.prs_srtperslid_omschrijving || ' - '; v_errorhint := 'Fout bij bepalen functie'; SELECT COUNT ( * ) INTO v_count FROM prs_v_aanwezigsrtperslid WHERE UPPER (prs_srtperslid_omschrijving) = UPPER (recsrtperslid.prs_srtperslid_omschrijving); IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen functie'; INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving) VALUES (recsrtperslid.prs_srtperslid_omschrijving); COMMIT; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'Functie: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog ( p_import_key, 'S', 'Functie: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; v_count_tot := 0; v_count_error := 0; FOR recperslid IN cperslid LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recperslid.prs_perslid_nr || '|' || recperslid.prs_perslid_naam || '|' || recperslid.prs_perslid_voornaam || ' - '; v_errorhint := 'Fout bij bepalen functie [' || recperslid.prs_srtperslid_omschrijving || ']'; SELECT prs_srtperslid_key INTO v_srtperslid_key FROM prs_v_aanwezigsrtperslid WHERE UPPER (prs_srtperslid_omschrijving) = UPPER (recperslid.prs_srtperslid_omschrijving); v_errorhint := 'Fout bij bepalen afdeling [' || recperslid.prs_afdeling_naam || ']'; SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_v_aanwezigafdeling WHERE prs_afdeling_upper = UPPER (recperslid.prs_afdeling_naam); v_errorhint := 'Fout bij wijzigen afdelingsomschrijving [' || recperslid.prs_afdeling_naam || '|' || recperslid.prs_afdeling_omschrijving || ']'; UPDATE prs_afdeling SET prs_afdeling_omschrijving = COALESCE (recperslid.prs_afdeling_omschrijving, prs_afdeling_omschrijving) WHERE prs_afdeling_key = v_afdeling_key; COMMIT; v_errorhint := 'Fout bij bepalen kostenplaats [' || recperslid.prs_afdeling_naam || ']'; SELECT COUNT ( * ) INTO v_count FROM prs_v_aanwezigkostenplaats WHERE prs_kostenplaats_upper = UPPER (recperslid.prs_afdeling_naam); IF v_count = 1 THEN SELECT prs_kostenplaats_key INTO v_kostenplaats_key FROM prs_v_aanwezigkostenplaats WHERE prs_kostenplaats_upper = UPPER (recperslid.prs_afdeling_naam); v_errorhint := 'Fout bij wijzigen kostenplaatsomschrijving [' || recperslid.prs_afdeling_naam || '|' || recperslid.prs_afdeling_omschrijving || ']'; UPDATE prs_kostenplaats SET prs_kostenplaats_omschrijving = COALESCE (recperslid.prs_afdeling_omschrijving, prs_kostenplaats_omschrijving) WHERE prs_kostenplaats_key = v_kostenplaats_key; COMMIT; ELSE fac.imp_writelog ( p_import_key, 'I', v_aanduiding || v_errorhint, 'Kostenplaats volgens afdeling bestaat niet!' ); COMMIT; END IF; v_errorhint := 'Fout bij bepalen persoon'; SELECT COUNT ( * ), MAX (prs_perslid_key) INTO v_count, v_perslid_key FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_nr) = UPPER (recperslid.prs_perslid_nr); IF v_count > 1 THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Kan persoon niet 1-duidig bepalen!'); COMMIT; ELSE IF v_count = 0 THEN v_errorhint := 'Fout bij toevoegen persoon'; INSERT INTO prs_perslid ( prs_perslid_module, prs_srtperslid_key, prs_afdeling_key, prs_perslid_nr, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_perslid_titel, prs_perslid_telefoonnr, prs_perslid_email, prs_perslid_oslogin, prs_perslid_ingangsdatum, prs_perslid_einddatum, fac_profiel_key ) VALUES ( 'PRS', v_srtperslid_key, v_afdeling_key, recperslid.prs_perslid_nr, recperslid.prs_perslid_naam, recperslid.prs_perslid_tussenvoegsel, recperslid.prs_perslid_voorletters, recperslid.prs_perslid_voornaam, recperslid.prs_perslid_titel, recperslid.prs_perslid_telefoonnr, recperslid.prs_perslid_email, recperslid.prs_perslid_oslogin, COALESCE ( recperslid.prs_perslid_ingangsdatum, SYSDATE ), recperslid.prs_perslid_einddatum, v_profiel_key ) RETURNING prs_perslid_key INTO v_perslid_key; ELSE v_errorhint := 'Fout bij wijzigen persoon'; UPDATE prs_perslid SET prs_srtperslid_key = v_srtperslid_key, prs_afdeling_key = v_afdeling_key, prs_perslid_naam = recperslid.prs_perslid_naam, prs_perslid_tussenvoegsel = recperslid.prs_perslid_tussenvoegsel, prs_perslid_voorletters = recperslid.prs_perslid_voorletters, prs_perslid_voornaam = recperslid.prs_perslid_voornaam, prs_perslid_titel = recperslid.prs_perslid_titel, prs_perslid_telefoonnr = recperslid.prs_perslid_telefoonnr, prs_perslid_email = recperslid.prs_perslid_email, prs_perslid_oslogin = recperslid.prs_perslid_oslogin, prs_perslid_ingangsdatum = COALESCE (recperslid.prs_perslid_ingangsdatum, prs_perslid_ingangsdatum), prs_perslid_einddatum = recperslid.prs_perslid_einddatum, fac_profiel_key = COALESCE (fac_profiel_key, v_profiel_key) WHERE prs_perslid_key = v_perslid_key; END IF; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'Persoon: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog ( p_import_key, 'S', 'Persoon: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; v_count_tot := 0; v_count_error := 0; FOR recwp IN cwp LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recwp.prs_perslid_nr || '|' || recwp.prs_perslid_naam || '|' || recwp.prs_perslid_voornaam || '|' || recwp.alg_locatie_code || '|' || recwp.alg_gebouw_code || '|' || recwp.alg_verdieping_code || '|' || recwp.alg_ruimte_nr || ' - '; v_errorhint := 'Fout bij bepalen persoon'; SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr); v_locatie_key := NULL; v_gebouw_key := NULL; v_verdieping_key := NULL; v_ruimte_key := NULL; v_errorhint := 'Fout bij bepalen locatie'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_v_aanweziglocatie WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code); v_errorhint := 'Fout bij bepalen gebouw'; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_v_aanweziggebouw WHERE UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code) AND alg_locatie_key = v_locatie_key; v_errorhint := 'Fout bij bepalen verdieping'; SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_v_aanwezigverdieping WHERE UPPER (alg_verdieping_code) = UPPER (recwp.alg_verdieping_code) AND alg_gebouw_key = v_gebouw_key; v_errorhint := 'Fout bij bepalen ruimte'; SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_v_aanwezigruimte WHERE UPPER (alg_ruimte_nr) = UPPER (recwp.alg_ruimte_nr) AND alg_verdieping_key = v_verdieping_key; -- Verwijder oude werkplek op dezelfde locatie, tenzij ongewijzigd! v_errorhint := 'Fout bij bepalen of werkplek is gewijzigd'; SELECT COUNT ( * ) INTO v_count FROM prs_v_aanwezigperslidwerkplek pw, prs_werkplek w WHERE pw.prs_perslid_key = v_perslid_key AND pw.prs_werkplek_key = w.prs_werkplek_key AND w.prs_alg_ruimte_key = v_ruimte_key; IF v_count = 0 THEN v_errorhint := 'Fout bij verwijderen oude werkplek op locatie'; UPDATE prs_perslidwerkplek SET prs_perslidwerkplek_verwijder = SYSDATE WHERE prs_perslidwerkplek_key IN (SELECT pw.prs_perslidwerkplek_key FROM prs_v_aanwezigperslidwerkplek pw, prs_werkplek w, alg_ruimte r, alg_verdieping v, alg_gebouw g WHERE pw.prs_perslid_key = v_perslid_key AND pw.prs_werkplek_key = w.prs_werkplek_key AND w.prs_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = v_locatie_key); COMMIT; END IF; -- Als persoon nu nog een werkplek heeft op locatie, dan gebeurt -- daar niets mee (nl. ongewijzgd)! v_errorhint := 'Fout bij bepalen of persoon op locatie een werkplek heeft'; SELECT COUNT ( * ) INTO v_count FROM prs_v_aanwezigperslidwerkplek pw, prs_werkplek w, alg_ruimte r, alg_verdieping v, alg_gebouw g WHERE pw.prs_perslid_key = v_perslid_key AND pw.prs_werkplek_key = w.prs_werkplek_key AND w.prs_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = v_locatie_key; -- v_count=0 -> persoon verhuist naar/krijgt wp op locatie. IF v_count = 0 AND v_ruimte_key IS NOT NULL THEN v_errorhint := 'Fout bij bepalen vrije werkplek'; SELECT COUNT ( * ) INTO v_count FROM prs_v_aanwezigwerkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key AND NOT EXISTS (SELECT 1 FROM prs_v_aanwezigperslidwerkplek pw WHERE pw.prs_werkplek_key = w.prs_werkplek_key); IF v_count > 0 THEN SELECT MIN (w.prs_werkplek_key) INTO v_wp_key FROM prs_v_aanwezigwerkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key AND NOT EXISTS (SELECT 1 FROM prs_v_aanwezigperslidwerkplek pw WHERE pw.prs_werkplek_key = w.prs_werkplek_key); -- Verwijder (hard) de mogelijk eerder logisch verwijderde -- koppeling tussen dezelfde persoon en werkplek!!! DELETE FROM prs_perslidwerkplek pw WHERE pw.prs_perslid_key = v_perslid_key AND pw.prs_werkplek_key = v_wp_key AND pw.prs_perslidwerkplek_verwijder IS NOT NULL; v_errorhint := 'Fout bij koppelen persoon aan vrije werkplek'; INSERT INTO prs_perslidwerkplek ( prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_wp_key, 100); COMMIT; ELSE v_errorhint := 'Fout bij bepalen nieuwe werkplek'; SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1 INTO v_wp_volgnr FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key; v_wp_oms := v_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr); v_errorhint := 'Fout bij toevoegen nieuwe werkplek'; INSERT INTO prs_werkplek (prs_werkplek_module, prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key) VALUES ('PRR', v_wp_volgnr, v_wp_oms, v_ruimte_key) RETURNING prs_werkplek_key INTO v_wp_key; v_errorhint := 'Fout bij koppelen persoon aan nieuwe werkplek'; INSERT INTO prs_perslidwerkplek ( prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_wp_key, 100); COMMIT; END IF; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; fac.imp_writelog ( p_import_key, 'S', 'Werkplek: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog ( p_import_key, 'S', 'Werkplek: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; FOR recnowp IN cnowp LOOP BEGIN fac.imp_writelog ( p_import_key, 'I', 'Persoon met nummer [' || recnowp.prs_perslid_nr || '] en naam [' || recnowp.prs_perslid_naam || ', ' || recnowp.prs_perslid_voornaam || '] heeft geen werkplek', 'Geen werkplek' ); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); COMMIT; END; END LOOP; FOR recnogroup IN cnogroup LOOP BEGIN v_aanduiding := recnogroup.prs_perslid_nr || '|' || recnogroup.prs_perslid_naam || '|' || recnogroup.prs_perslid_voornaam || ' - '; v_errorhint := 'Fout bij bepalen groep [' || c_groep_upper || ']'; SELECT fac_groep_key INTO v_groep_key FROM fac_groep WHERE fac_groep_upper = c_groep_upper; v_errorhint := 'Fout bij koppelen persoon aan groep [' || c_groep_upper || ']'; INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) VALUES (v_groep_key, recnogroup.prs_perslid_key); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); COMMIT; END; END LOOP; -- Verwijder ongebruikte functies; deze import bepaalt de functies! DELETE FROM prs_srtperslid sp WHERE NOT EXISTS (SELECT 1 FROM prs_perslid p WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key); COMMIT; ELSE IF (v_count_prs_import = 0) THEN fac.imp_writelog ( p_import_key, 'S', 'Geen nieuw/recent bestand met te importeren personen aangetroffen!', '' ); ELSE fac.imp_writelog ( p_import_key, 'E', 'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!', '- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]
' || '- #personen importbestand = [' || TO_CHAR (v_count_prs_import) || ']
' || '- #personen Facilitor = [' || TO_CHAR (v_count_prs_actual) || ']' ); END IF; COMMIT; END IF; COMMIT; END arbo_update_prs; / -- ARBO#20210 AutoClose alle bestellingen noti-dagen na aanmaken. CREATE OR REPLACE PROCEDURE arbo_select_autoclose ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN NULL; END; / CREATE OR REPLACE FORCE VIEW arbo_v_export_autoclose (RESULT, result_order) AS SELECT '', 0 FROM DUAL WHERE 1 = 0; / /* Formatted on 1-4-2011 14:48:18 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE arbo_export_autoclose (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2) AS BEGIN FOR rc IN (SELECT boi.bes_bestelopdr_item_key, bo.bes_bestelopdr_key FROM bes_bestelopdr_item boi, bes_bestelopdr bo, bes_bestelling_item bi, bes_bestelling b, bes_srtdeel sd, bes_srtgroep sg, bes_disc_params bdp WHERE boi.bes_bestelopdr_key = bo.bes_bestelopdr_key AND bo.bes_bestelopdr_status = 4 -- In bestelling AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_bestelling_key = b.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key --AND sg.ins_discipline_key = -1 AND sg.ins_discipline_key = bdp.bes_ins_discipline_key AND bdp.bes_disc_params_noti_dagen IS NOT NULL AND (b.bes_bestelling_datum IS NULL OR fac.datumtijdplusuitvoertijd ( b.bes_bestelling_leverdatum, bdp.bes_disc_params_noti_dagen, 'DAGEN' ) < SYSDATE)) LOOP UPDATE bes_bestelopdr_item SET bes_bestelopdr_item_aantalontv = bes_bestelopdr_item_aantal WHERE bes_bestelopdr_item_key = rc.bes_bestelopdr_item_key; bes.updatebestelopdrstatus (rc.bes_bestelopdr_key, NULL); COMMIT; END LOOP; FOR rc IN (SELECT bi.bes_bestelling_item_key, bi.bes_bestelling_key FROM bes_bestelling_item bi, bes_bestelopdr_item boi WHERE bi.bes_bestelling_item_aantal <> NVL (bi.bes_bestelling_item_aantalontv, 0) AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND boi.bes_bestelopdr_item_aantal = boi.bes_bestelopdr_item_aantalontv) LOOP UPDATE bes_bestelling_item SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal WHERE bes_bestelling_item_key = rc.bes_bestelling_item_key; bes.updatebestellingstatus (rc.bes_bestelling_key, NULL); COMMIT; END LOOP; END; / /* Formatted on 14-10-2011 16:26:54 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_ruimteoverzicht ( fclt_f_locatie, fclt_f_gebouw, fclt_f_verdieping, ruimtenr, omschrijving, fclt_f_ruimtefunctie, fclt_f_vloersoort, oppervlak ) AS SELECT a.alg_locatie_code, a.alg_gebouw_code, a.alg_verdieping_code, a.alg_ruimte_nr, a.alg_ruimte_omschrijving, a.ruimtefunctie, b.vloersoort, a.opp FROM (SELECT r.alg_ruimte_key, r.alg_ruimte_nr, r.alg_ruimte_omschrijving, v.alg_verdieping_code, g.alg_gebouw_code, l.alg_locatie_code, sr.alg_srtruimte_upper ruimtefunctie, r.alg_ruimte_bruto_vloeropp opp FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l, alg_srtruimte sr WHERE r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)) a LEFT JOIN (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr vloersoort FROM alg_onrgoedkenmerk ok, fac_usrdata ud WHERE ok.alg_kenmerk_key = 1020 -- Vloersoort AND ok.alg_onrgoed_niveau = 'R' AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key) b ON a.alg_ruimte_key = b.alg_onrgoed_key; -- Bevat CUST01- en CUST02-reminder naar beheerder verantwoordelijk voor de -- keuring van betreffende objecten. -- CUST01: wekelijks mbt. over 2 tot 3 weken te keuren objecten! -- CUST02: wekelijks mbt. objecten waarvan keuringsdatum een week is verstreken! /* Formatted on 26-1-2012 10:10:10 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_NOTI_KEURINGREMINDER ( code, sender, receiver, text, KEY, par1, par2, xkey ) AS SELECT DISTINCT sn.fac_srtnotificatie_code code, NULL sender, gg.prs_perslid_key receiver, REPLACE ( REPLACE ( REPLACE ( sn.fac_srtnotificatie_oms, '##SRTGROEP##', DECODE (x.min_srtgroep_oms, x.max_srtgroep_oms, x.min_srtgroep_oms, x.min_srtgroep_oms || ', ...') ), '##AANTAL##', x.aantal ), '##REGIO##', (SELECT alg_regio_omschrijving FROM alg_regio WHERE alg_regio_key = x.alg_regio_key) ) subject, x.dummy_deel_key, -- Dummy key!!! NULL, NULL, x.alg_regio_key FROM ( SELECT o.alg_regio_key, MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms, MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms, MIN (o.ins_deel_key) dummy_deel_key, COUNT (DISTINCT o.ins_deel_key) aantal FROM (SELECT scs.ins_srtinstallatie_key ins_srtdeel_key, scs.ins_srtcontrole_key, scs.ins_srtcontrole_omschrijving, scs.ins_srtcontrole_periode FROM ins_srtcontrole scs WHERE scs.ins_srtcontrole_niveau = 'S' UNION ALL SELECT sd.ins_srtdeel_key, scg.ins_srtcontrole_key, scg.ins_srtcontrole_omschrijving, scg.ins_srtcontrole_periode FROM ins_srtcontrole scg, ins_srtdeel sd WHERE scg.ins_srtcontrole_niveau = 'G' AND scg.ins_srtinstallatie_key = sd.ins_srtgroep_key UNION ALL SELECT sd.ins_srtdeel_key, scd.ins_srtcontrole_key, scd.ins_srtcontrole_omschrijving, scd.ins_srtcontrole_periode FROM ins_srtcontrole scd, ins_srtgroep sg, ins_srtdeel sd WHERE scd.ins_srtcontrole_niveau = 'D' AND scd.ins_srtinstallatie_key = sg.ins_discipline_key AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) cso -- ControleSoortObjecten LEFT JOIN (SELECT d.ins_deel_key, d.ins_deel_aanmaak, sd.ins_srtdeel_key, sg.ins_srtgroep_omschrijving, td.ins_discipline_key, td.ins_discipline_omschrijving, d.alg_regio_key FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_tab_discipline td, alg_locatie l, alg_district d WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key AND d.ins_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key) o -- Objecten ON cso.ins_srtdeel_key = o.ins_srtdeel_key LEFT JOIN (SELECT dsc.ins_deel_key, dsc.ins_srtcontrole_key, dsc.ins_deelsrtcontrole_datum, dsc.ins_deelsrtcontrole_opmerking FROM ins_deelsrtcontrole dsc WHERE dsc.ins_deelsrtcontrole_datum = (SELECT MAX ( ins_deelsrtcontrole_datum ) FROM ins_deelsrtcontrole WHERE ins_deel_key = dsc.ins_deel_key AND ins_srtcontrole_key = dsc.ins_srtcontrole_key)) olc -- ObjectLaatsteControle ON o.ins_deel_key = olc.ins_deel_key AND cso.ins_srtcontrole_key = olc.ins_srtcontrole_key WHERE COALESCE (olc.ins_deelsrtcontrole_datum, o.ins_deel_aanmaak) + cso.ins_srtcontrole_periode BETWEEN TRUNC ( SYSDATE + 14 ) AND TRUNC ( SYSDATE + 21 ) GROUP BY o.alg_regio_key) x, alg_district d, alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r, prs_v_aanwezigwerkplek wp, prs_v_aanwezigperslidwerkplek pw, fac_gebruikersgroep gg, fac_srtnotificatie sn WHERE x.alg_regio_key = d.alg_regio_key AND d.alg_district_key = l.alg_district_key AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = wp.prs_alg_ruimte_key AND wp.prs_werkplek_key = pw.prs_werkplek_key AND pw.prs_perslid_key = gg.prs_perslid_key AND gg.fac_groep_key IN (23, 161) -- BO Huismeester/Onderhoudscoordinator AND sn.fac_srtnotificatie_code = 'CUST01' UNION ALL SELECT DISTINCT sn.fac_srtnotificatie_code code, NULL sender, gg.prs_perslid_key receiver, REPLACE ( REPLACE ( REPLACE ( sn.fac_srtnotificatie_oms, '##SRTGROEP##', DECODE (x.min_srtgroep_oms, x.max_srtgroep_oms, x.min_srtgroep_oms, x.min_srtgroep_oms || ', ...') ), '##AANTAL##', x.aantal ), '##REGIO##', (SELECT alg_regio_omschrijving FROM alg_regio WHERE alg_regio_key = x.alg_regio_key) ) subject, x.dummy_deel_key, -- Dummy key!!! NULL, NULL, x.alg_regio_key FROM ( SELECT o.alg_regio_key, MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms, MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms, MIN (o.ins_deel_key) dummy_deel_key, COUNT (DISTINCT o.ins_deel_key) aantal FROM (SELECT scs.ins_srtinstallatie_key ins_srtdeel_key, scs.ins_srtcontrole_key, scs.ins_srtcontrole_omschrijving, scs.ins_srtcontrole_periode FROM ins_srtcontrole scs WHERE scs.ins_srtcontrole_niveau = 'S' UNION ALL SELECT sd.ins_srtdeel_key, scg.ins_srtcontrole_key, scg.ins_srtcontrole_omschrijving, scg.ins_srtcontrole_periode FROM ins_srtcontrole scg, ins_srtdeel sd WHERE scg.ins_srtcontrole_niveau = 'G' AND scg.ins_srtinstallatie_key = sd.ins_srtgroep_key UNION ALL SELECT sd.ins_srtdeel_key, scd.ins_srtcontrole_key, scd.ins_srtcontrole_omschrijving, scd.ins_srtcontrole_periode FROM ins_srtcontrole scd, ins_srtgroep sg, ins_srtdeel sd WHERE scd.ins_srtcontrole_niveau = 'D' AND scd.ins_srtinstallatie_key = sg.ins_discipline_key AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) cso -- ControleSoortObjecten LEFT JOIN (SELECT d.ins_deel_key, d.ins_deel_aanmaak, sd.ins_srtdeel_key, sg.ins_srtgroep_omschrijving, td.ins_discipline_key, td.ins_discipline_omschrijving, d.alg_regio_key FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_tab_discipline td, alg_locatie l, alg_district d WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key AND d.ins_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key) o -- Objecten ON cso.ins_srtdeel_key = o.ins_srtdeel_key LEFT JOIN (SELECT dsc.ins_deel_key, dsc.ins_srtcontrole_key, dsc.ins_deelsrtcontrole_datum, dsc.ins_deelsrtcontrole_opmerking FROM ins_deelsrtcontrole dsc WHERE dsc.ins_deelsrtcontrole_datum = (SELECT MAX ( ins_deelsrtcontrole_datum ) FROM ins_deelsrtcontrole WHERE ins_deel_key = dsc.ins_deel_key AND ins_srtcontrole_key = dsc.ins_srtcontrole_key)) olc -- ObjectLaatsteControle ON o.ins_deel_key = olc.ins_deel_key AND cso.ins_srtcontrole_key = olc.ins_srtcontrole_key WHERE COALESCE (olc.ins_deelsrtcontrole_datum, o.ins_deel_aanmaak) + cso.ins_srtcontrole_periode < TRUNC (SYSDATE - 7) GROUP BY o.alg_regio_key) x, alg_district d, alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r, prs_v_aanwezigwerkplek wp, prs_v_aanwezigperslidwerkplek pw, fac_gebruikersgroep gg, fac_srtnotificatie sn WHERE x.alg_regio_key = d.alg_regio_key AND d.alg_district_key = l.alg_district_key AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = wp.prs_alg_ruimte_key AND wp.prs_werkplek_key = pw.prs_werkplek_key AND pw.prs_perslid_key = gg.prs_perslid_key AND gg.fac_groep_key IN (23, 161) -- BO Huismeester/Onderhoudscoordinator AND sn.fac_srtnotificatie_code = 'CUST02'; /* Formatted on 9-2-2012 13:24:42 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_UC_RELATIES (BEDRIJF_KEY, BEDRIJF_NAAM) AS SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam FROM prs_v_aanwezigbedrijf b WHERE b.prs_bedrijf_uitvoerende = 1 OR b.prs_bedrijf_contract = 1; /* Formatted on 30-3-2012 14:52:32 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_GRAPH_MLD_PMND ( FCLT_XAS_, FCLT_YAS_, VOLGORDE ) AS SELECT DECODE (SUBSTR (TO_CHAR (m.mld_melding_datum, 'yyyymm'), 5), '01', 'Januari', '02', 'Februari', '03', 'Maart', '04', 'April', '05', 'Mei', '06', 'Juni', '07', 'Juli', '08', 'Augustus', '09', 'September', '10', 'Oktober', '11', 'November', 'December'), COUNT (d.ins_discipline_omschrijving), TO_CHAR (m.mld_melding_datum, 'yyyymm') FROM mld_melding m, mld_stdmelding sm, ins_tab_discipline d WHERE m.mld_melding_datum BETWEEN ADD_MONTHS ( TO_DATE ( TO_CHAR (SYSDATE, 'yyyymm') || '01', 'yyyymmdd' ), -11 ) AND SYSDATE AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = d.ins_discipline_key GROUP BY TO_CHAR (m.mld_melding_datum, 'yyyymm'); /* Formatted on 2-4-2012 13:45:04 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_GRAPH_MLD_BEHANDELAAR ( FCLT_XAS_, FCLT_YAS_, FCLT_YAS2_ ) AS SELECT behandelaar, COUNT (mld_key) - SUM (uitvoeringoptijd) totaal, SUM (uitvoeringoptijd) op_tijd FROM (SELECT m.mld_melding_key mld_key, CASE SIGN(fac.datumtijdplusuitvoertijd ( m.mld_melding_datum, m.mld_melding_uitvoertijd, 'DAGEN' ) - SYSDATE) WHEN -1 THEN 0 ELSE 1 END uitvoeringoptijd, DECODE ( m.mld_melding_status, 4, DECODE ( (SELECT COUNT ( * ) FROM mld_opdr o WHERE o.mld_melding_key = m.mld_melding_key AND o.mld_statusopdr_key IN (3, 4, 5, 8)), -- 3-Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd 0, p.prs_perslid_naam_full, NULL ), 7, NULL, p.prs_perslid_naam_full ) behandelaar FROM mld_melding m, prs_v_perslid_fullnames p WHERE m.mld_melding_behandelaar_key = p.prs_perslid_key(+) AND m.mld_melding_status IN (2, 3, 4, 7, 0)) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending WHERE behandelaar IS NOT NULL GROUP BY behandelaar UNION ALL -- Extra kolom zodat voorgaande kolommen helemaal getoond? SELECT '-', 0 totaal, 0 op_tijd FROM DUAL WHERE EXISTS (SELECT 1 FROM mld_melding m WHERE m.mld_melding_status IN (2, 3, 4, 7, 0)); /* Formatted on 2-4-2012 13:45:04 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_GRAPH_MLD_UITVOERENDE ( FCLT_XAS_, FCLT_YAS_, FCLT_YAS2_ ) AS SELECT uitvoerende, COUNT (opdr_key) - SUM (uitvoeringoptijd) totaal, SUM (uitvoeringoptijd) op_tijd FROM (SELECT o.mld_opdr_key opdr_key, CASE SIGN(fac.datumtijdplusuitvoertijd ( m.mld_melding_datum, m.mld_melding_uitvoertijd, 'DAGEN' ) - SYSDATE) WHEN -1 THEN 0 ELSE 1 END uitvoeringoptijd, b.prs_bedrijf_naam uitvoerende FROM mld_opdr o, mld_melding m, prs_bedrijf b WHERE o.mld_melding_key = m.mld_melding_key AND o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_statusopdr_key IN (3, 4, 5, 8)) -- 3-Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd WHERE uitvoerende IS NOT NULL GROUP BY uitvoerende UNION ALL -- Extra kolom zodat voorgaande kolommen helemaal getoond? SELECT '-', 0 totaal, 0 op_tijd FROM DUAL WHERE EXISTS (SELECT 1 FROM mld_opdr o, prs_bedrijf b WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_statusopdr_key IN (3, 4, 5, 8)); /* Formatted on 30-3-2012 15:48:14 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_GRAPH_VAKGROEP_OPEN ( FCLT_XAS_, FCLT_YAS_, FCLT_URL, FCLT_3D_DISCIPLINE_KEY ) AS SELECT md.ins_discipline_omschrijving, COUNT (md.ins_discipline_omschrijving), 'appl/mld/mld_search.asp?urole=fo' || '&' || 'autosearch=1' || '&' || 'disc_key_str=' || md.ins_discipline_key, md.ins_discipline_key FROM mld_melding m, mld_stdmelding sm, mld_discipline md WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending GROUP BY md.ins_discipline_key, md.ins_discipline_omschrijving ORDER BY COUNT (md.ins_discipline_omschrijving) DESC; /* Formatted on 30-3-2012 16:26:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_GRAPH_PPI_ACP ( FCLT_XAS_, FCLT_YAS_ ) AS SELECT SUM (acceptatieoptijd) aantal, COUNT (mld_key) totaal FROM (SELECT DISTINCT m.mld_melding_key mld_key, CASE SIGN(fac.datumtijdplusuitvoertijd ( fac.gettrackingdate ('MLDNEW', m.mld_melding_key), sm.mld_stdmelding_urgentie, 'UREN' ) - SYSDATE) WHEN -1 THEN 0 ELSE 1 END acceptatieoptijd FROM mld_melding m, mld_stdmelding sm WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key AND m.mld_melding_status IN (2, 3) -- 2-Ingevoerd, 3-Ingezien ); /* Formatted on 30-3-2012 16:26:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW ARBO_V_GRAPH_PPI_AFM ( FCLT_XAS_, FCLT_YAS_ ) AS SELECT SUM (uitvoeringoptijd) aantal, COUNT (mld_key) totaal FROM (SELECT DISTINCT m.mld_melding_key mld_key, CASE SIGN(fac.datumtijdplusuitvoertijd ( m.mld_melding_datum, m.mld_melding_uitvoertijd, 'DAGEN' ) - SYSDATE) WHEN -1 THEN 0 ELSE 1 END uitvoeringoptijd FROM mld_melding m WHERE m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending ); /* Formatted on 7-6-2012 14:16:18 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_hv_per_loc ( fclt_f_vestiging, contractnummer, einddatum, opzegtermijn, huurkosten_pj, servkosten_pj, aantal_m2, huurkosten_m2, servkosten_m2, bezet_m2, leeg_m2, bezettingsperc ) AS SELECT basis.alg_locatie_code, hvcnt.contractnummer, TO_CHAR (hvcnt.einddatum, 'dd-mm-yyyy'), hvcnt.opzegtermijn, fac.safe_to_number (hvcnt.huurkosten), fac.safe_to_number (hvcnt.servicekosten), ROUND (COALESCE (totm2.opp, 0), 2) totaal, DECODE ( totm2.opp, NULL, NULL, 0, NULL, REPLACE ( TO_CHAR ( ROUND ( fac.safe_to_number ( COALESCE (hvcnt.huurkosten, '0') / totm2.opp ), 2 ), '999999990D99' ), '.', ',' ) ), DECODE ( totm2.opp, NULL, NULL, 0, NULL, REPLACE ( TO_CHAR ( ROUND ( fac.safe_to_number ( COALESCE (hvcnt.servicekosten, '0') / totm2.opp ), 2 ), '999999990D99' ), '.', ',' ) ), ROUND (COALESCE (bezm2.opp, 0), 2) bezet, ROUND (COALESCE (totm2.opp, 0) - COALESCE (bezm2.opp, 0), 2) leeg, DECODE ( totm2.opp, NULL, NULL, 0, NULL, TO_CHAR (100 * ROUND (COALESCE (bezm2.opp, 0) / totm2.opp, 2)) || '%' ) FROM (SELECT alg_locatie_key, alg_locatie_code FROM alg_v_aanweziglocatie) basis LEFT JOIN ( SELECT g.alg_locatie_key, SUM (g.alg_gebouw_bruto_vloeropp) opp --SUM (r.alg_ruimte_bruto_vloeropp) opp FROM alg_gebouw g --alg_verdieping v, --alg_v_aanwezigruimte r --WHERE g.alg_gebouw_key = v.alg_gebouw_key -- AND v.alg_verdieping_key = -- r.alg_verdieping_key GROUP BY g.alg_locatie_key) totm2 ON basis.alg_locatie_key = totm2.alg_locatie_key LEFT JOIN ( SELECT g.alg_locatie_key, SUM (r.alg_ruimte_bruto_vloeropp) opp FROM alg_gebouw g, alg_verdieping v, alg_v_aanwezigruimte r, prs_v_aanwezigwerkplek wp, ( SELECT prs_werkplek_key, COUNT ( * ) FROM prs_v_aanwezigperslidwerkplek GROUP BY prs_werkplek_key) pw WHERE g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = wp.prs_alg_ruimte_key AND wp.prs_werkplek_key = pw.prs_werkplek_key GROUP BY g.alg_locatie_key) bezm2 ON basis.alg_locatie_key = bezm2.alg_locatie_key LEFT JOIN (SELECT cp.cnt_alg_plaats_key, c.cnt_contract_nummer_intern contractnummer, c.cnt_contract_looptijd_tot einddatum, t.cnt_termijn_omschrijving opzegtermijn, (SELECT kc.cnt_kenmerkcontract_waarde FROM cnt_kenmerkcontract kc WHERE kc.cnt_kenmerk_key = 44 -- Huur AND kc.cnt_contract_key = c.cnt_contract_key) huurkosten, (SELECT kc.cnt_kenmerkcontract_waarde FROM cnt_kenmerkcontract kc WHERE kc.cnt_kenmerk_key = 101 -- Service AND kc.cnt_contract_key = c.cnt_contract_key) servicekosten FROM cnt_contract_plaats cp, cnt_v_aanwezigcontract c, cnt_termijn t WHERE cp.cnt_alg_plaats_code = 'L' AND cp.cnt_contract_key = c.cnt_contract_key AND c.ins_discipline_key = 181 -- Huurcontracten AND c.cnt_contract_opzegtermijn = t.cnt_termijn_key) hvcnt ON basis.alg_locatie_key = hvcnt.cnt_alg_plaats_key; /* Formatted on 7-6-2012 14:16:18 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_hv_per_afd ( hide_f_sortering, fclt_f_afdeling, fclt_f_vestiging, tot_m2, afd_m2, bezettingsperc ) AS SELECT prs_afdeling_naam || '1', prs_afdeling_omschrijving || ' (' || prs_afdeling_naam || ')', totm2.alg_locatie_code, REPLACE ( TO_CHAR (ROUND (COALESCE (totm2.opp, 0), 2), '999999990D99'), '.', ',' ), REPLACE ( TO_CHAR (ROUND (COALESCE (afdm2.opp, 0), 2), '999999990D99'), '.', ',' ), DECODE ( totm2.opp, NULL, NULL, 0, NULL, TO_CHAR (100 * ROUND (COALESCE (afdm2.opp, 0) / totm2.opp, 2)) || '%' ) bezetting FROM (SELECT prs_afdeling_key, prs_afdeling_naam, prs_afdeling_omschrijving FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL) basis LEFT JOIN ( SELECT ra.prs_afdeling_key, g.alg_locatie_key, SUM( (r.alg_ruimte_bruto_vloeropp * ra.prs_ruimteafdeling_bezetting) / 100) opp FROM prs_ruimteafdeling ra, alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g WHERE ra.alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key GROUP BY ra.prs_afdeling_key, g.alg_locatie_key) afdm2 ON basis.prs_afdeling_key = afdm2.prs_afdeling_key LEFT JOIN ( SELECT l.alg_locatie_key, l.alg_locatie_code, SUM (r.alg_ruimte_bruto_vloeropp) opp FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l WHERE r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key GROUP BY l.alg_locatie_key, l.alg_locatie_code) totm2 ON afdm2.alg_locatie_key = totm2.alg_locatie_key WHERE totm2.alg_locatie_code IS NOT NULL UNION ALL SELECT prs_afdeling_naam || '2', prs_afdeling_omschrijving || ' (' || prs_afdeling_naam || ')', '*** Landelijk ***', REPLACE ( TO_CHAR (ROUND (COALESCE (totm2.opp, 0), 2), '999999990D99'), '.', ',' ), REPLACE ( TO_CHAR (ROUND (COALESCE (afdm2.opp, 0), 2), '999999990D99'), '.', ',' ), DECODE ( totm2.opp, NULL, NULL, 0, NULL, TO_CHAR (100 * ROUND (COALESCE (afdm2.opp, 0) / totm2.opp, 2)) || '%' ) bezetting FROM (SELECT prs_afdeling_key, prs_afdeling_naam, prs_afdeling_omschrijving FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL) basis LEFT JOIN ( SELECT ra.prs_afdeling_key, SUM( (r.alg_ruimte_bruto_vloeropp * ra.prs_ruimteafdeling_bezetting) / 100) opp FROM prs_ruimteafdeling ra, alg_v_aanwezigruimte r WHERE ra.alg_ruimte_key = r.alg_ruimte_key GROUP BY ra.prs_afdeling_key) afdm2 ON basis.prs_afdeling_key = afdm2.prs_afdeling_key LEFT JOIN (SELECT SUM (g.alg_gebouw_bruto_vloeropp) opp FROM alg_v_aanweziggebouw g) totm2 ON 1 = 1; /* Formatted on 7-6-2012 14:22:35 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_cntoverzicht ( fclt_f_dienst, fclt_f_contractsoort, contractnummer, startdatum, einddatum, opzegtermijn, fclt_f_scope, contractwaarde ) AS SELECT basis.dienst, basis.contractsoort, basis.contractnummer, TO_CHAR (basis.startdatum, 'dd-mm-yyyy'), TO_CHAR (basis.einddatum, 'dd-mm-yyyy'), basis.opzegtermijn, x.scope, basis.contractwaarde FROM (SELECT c.cnt_contract_key, c.cnt_contract_nummer_intern contractnummer, c.cnt_contract_looptijd_van startdatum, c.cnt_contract_looptijd_tot einddatum, c.cnt_contract_kosten contractwaarde, cd.ins_discipline_omschrijving contractsoort, t.cnt_termijn_omschrijving opzegtermijn, d.prs_dienst_omschrijving dienst FROM cnt_v_aanwezigcontract c, cnt_discipline cd, cnt_termijn t, prs_dienst d WHERE c.ins_discipline_key != 181 -- Huurcontracten AND c.ins_discipline_key = cd.ins_discipline_key AND c.cnt_contract_opzegtermijn = t.cnt_termijn_key AND c.prs_dienst_key = d.prs_dienst_key) basis LEFT JOIN (SELECT cp.cnt_contract_key, l.alg_locatie_code || ' (' || l.alg_locatie_omschrijving || ')' scope FROM cnt_contract_plaats cp, alg_locatie l WHERE cp.cnt_alg_plaats_code = 'L' AND cp.cnt_contract_plaats_verwijder IS NULL AND cp.cnt_alg_plaats_key = l.alg_locatie_key UNION ALL SELECT cp.cnt_contract_key, g.alg_gebouw_code || ' ' || g.alg_gebouw_naam scope FROM cnt_contract_plaats cp, alg_gebouw g WHERE cp.cnt_alg_plaats_code = 'G' AND cp.cnt_contract_plaats_verwijder IS NULL AND cp.cnt_alg_plaats_key = g.alg_gebouw_key UNION ALL SELECT co.cnt_contract_key, sd.ins_srtdeel_omschrijving scope FROM cnt_contract_object co, ins_srtdeel sd WHERE co.cnt_contract_object_verwijder IS NULL AND co.cnt_ins_srtdeel_key = sd.ins_srtdeel_key UNION ALL SELECT co.cnt_contract_key, d.ins_deel_omschrijving || ' (' || sd.ins_srtdeel_omschrijving || ')' scope FROM cnt_contract_object co, ins_deel d, ins_srtdeel sd WHERE co.cnt_contract_object_verwijder IS NULL AND co.cnt_ins_deel_key = d.ins_deel_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key) x ON basis.cnt_contract_key = x.cnt_contract_key; /* Formatted on 15-5-2012 10:55:15 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_rtm_openmld ( fclt_f_rubriek, kengetal ) AS SELECT '# Totaal', TO_CHAR (COUNT ( * )) aantal FROM mld_melding m WHERE m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending UNION ALL SELECT 'Intern: ' || FCLT_XAS_, TO_CHAR (FCLT_YAS_ + FCLT_YAS2_) aantal FROM ARBO_V_GRAPH_MLD_BEHANDELAAR WHERE FCLT_XAS_ != '-' UNION ALL SELECT 'Extern: ' || FCLT_XAS_, TO_CHAR (FCLT_YAS_ + FCLT_YAS2_) aantal FROM ARBO_V_GRAPH_MLD_UITVOERENDE WHERE FCLT_XAS_ != '-' UNION ALL SELECT 'Vakgroep: ' || FCLT_XAS_, TO_CHAR (FCLT_YAS_) aantal FROM ARBO_V_GRAPH_VAKGROEP_OPEN UNION ALL SELECT '% Acceptatie (nog) op tijd', DECODE ( FCLT_YAS_, 0, NULL, NULL, NULL, REPLACE ( TO_CHAR ( ROUND ( (COALESCE (FCLT_XAS_, 0) / FCLT_YAS_) * 100, 1), '990D9' ), '.', ',' ) || '%' ) aantal FROM ARBO_V_GRAPH_PPI_ACP UNION ALL SELECT '% Uitvoering (nog) op tijd', DECODE ( FCLT_YAS_, 0, NULL, NULL, NULL, REPLACE ( TO_CHAR ( ROUND ( (COALESCE (FCLT_XAS_, 0) / FCLT_YAS_) * 100, 1), '990D9' ), '.', ',' ) || '%' ) aantal FROM ARBO_V_GRAPH_PPI_AFM; /* Formatted on 15-5-2012 11:12:04 (QP5 v5.115.810.9015) CREATE OR REPLACE VIEW arbo_v_rap_res_top5_noshow ( fclt_f_maand, gebruiker, afdeling, no_shows ) AS SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm') maand, pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving || ' (' || a.prs_afdeling_naam || ')', COUNT ( * ) aantal FROM res_v_aanwezigrsv_ruimte rrr, prs_perslid p, prs_v_perslid_fullnames pf, prs_afdeling a WHERE (rrr.res_rsv_ruimte_noshow = 1 OR rrr.res_rsv_ruimte_bezoekers_shown IS NOT NULL) AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rrr.res_rsv_ruimte_van > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') AND rrr.res_rsv_ruimte_van < TO_DATE (TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd') GROUP BY TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm'), pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving || ' (' || a.prs_afdeling_naam || ')'; */ /* Formatted on 15-5-2012 12:44:46 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_res_top5_noshow ( fclt_f_maand, hide_f_sortering, gebruiker, afdeling, no_shows ) AS SELECT maand, r, gebruiker, afdeling, aantal FROM (SELECT maand, gebruiker, afdeling, aantal, RANK () OVER (PARTITION BY maand ORDER BY maand, aantal DESC, gebruiker) r FROM ( SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm') maand, pf.prs_perslid_naam_full gebruiker, a.prs_afdeling_omschrijving || ' (' || a.prs_afdeling_naam || ')' afdeling, COUNT ( * ) aantal FROM res_v_aanwezigrsv_ruimte rrr, prs_perslid p, prs_v_perslid_fullnames pf, prs_afdeling a WHERE (rrr.res_rsv_ruimte_noshow = 1 OR rrr.res_rsv_ruimte_bezoekers_shown IS NOT NULL) AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rrr.res_rsv_ruimte_van > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') AND rrr.res_rsv_ruimte_van < TO_DATE ( TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd' ) GROUP BY TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm'), pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving || ' (' || a.prs_afdeling_naam || ')')) WHERE r <= 5; /* Formatted on 15-5-2012 9:58:14 (QP5 v5.115.810.9015) CREATE OR REPLACE VIEW arbo_v_rap_res_bezetting ( fclt_f_maand, fclt_f_zaal, gebruik_uren, beschikbaar_uren, bezettingsperc ) AS SELECT bes.maand, bes.res_ruimte_nr, bez.uren bez_uren, bes.uren bes_uren, DECODE ( bes.uren, 0, NULL, REPLACE ( TO_CHAR ( ROUND ( (COALESCE (bez.uren, 0) / bes.uren) * 100, 1), '990D9' ), '.', ',' ) || '%' ) bezetting FROM (SELECT periode.maand, rr.res_ruimte_nr, DECODE ( periode.maand, '2012-05', -- T/m 5.2.1 fout in count_work_days! 21, fac.count_work_days ( TO_DATE (periode.maand || '-01', 'yyyy-mm-dd') - 1, LAST_DAY(TO_DATE (periode.maand || '-01', 'yyyy-mm-dd')) ) ) * (COALESCE (rr.res_ruimte_eindtijd, 20) - COALESCE (rr.res_ruimte_begintijd, 7)) uren FROM res_ruimte rr, ( SELECT TO_CHAR (ADD_MONTHS (bdate, LEVEL - 1), 'yyyy-mm') maand FROM (SELECT TRUNC ( ADD_MONTHS (SYSDATE, -12), 'yyyy' ) bdate, TO_DATE ( TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd' ) - 1 edate FROM DUAL) CONNECT BY LEVEL <= MONTHS_BETWEEN ( TRUNC (edate, 'mm'), TRUNC (bdate, 'mm') ) + 1) periode WHERE rr.res_discipline_key NOT IN (121, 401) AND rr.res_ruimte_aanmaak < TO_DATE (periode.maand || '-01', 'yyyy-mm-dd') AND (rr.res_ruimte_verwijder IS NULL OR rr.res_ruimte_verwijder > LAST_DAY(TO_DATE (periode.maand || '-01', 'yyyy-mm-dd')))) bes LEFT JOIN ( SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm') maand, rr.res_ruimte_nr, SUM(LEAST ( fac.safe_to_number ( TO_CHAR (rrr.res_rsv_ruimte_tot, 'sssss') ) / 3600, COALESCE (rr.res_ruimte_eindtijd, 20) ) - GREATEST ( fac.safe_to_number(TO_CHAR ( rrr.res_rsv_ruimte_van, 'sssss' )) / 3600, COALESCE (rr.res_ruimte_begintijd, 7) )) uren FROM res_rsv_ruimte rrr, res_ruimte_opstelling ro, res_ruimte rr WHERE rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_status_fo_key IN (1, 2) -- Optie/Def. AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rrr.res_rsv_ruimte_van > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') AND TO_CHAR (rrr.res_rsv_ruimte_van, 'd') >= 2 -- Ma AND TO_CHAR (rrr.res_rsv_ruimte_van, 'd') <= 6 -- Vr AND TRUNC (rrr.res_rsv_ruimte_van) NOT IN (SELECT TRUNC (mld_vrije_dagen_datum) FROM mld_vrije_dagen) GROUP BY TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm'), rr.res_ruimte_nr) bez ON bes.maand = bez.maand AND bes.res_ruimte_nr = bez.res_ruimte_nr; */ /* Formatted on 7-6-2012 14:10:48 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_res_bezetting ( fclt_f_maand, fclt_f_vestiging, fclt_f_kamer, gebruik_uren, beschikbaar_uren, bezettingsperc ) AS SELECT bes.maand, rg.alg_locatie_code, rg.alg_ruimte_aanduiding || ' [' || rr.res_ruimte_nr || DECODE (bes.aantal, 1, ']', '...]'), bez.uren bez_uren, bes.uren bes_uren, DECODE ( bes.uren, 0, NULL, REPLACE ( TO_CHAR ( ROUND ( (COALESCE (bez.uren, 0) / bes.uren) * 100, 1), '990D9' ), '.', ',' ) || '%' ) bezetting FROM ( SELECT periode.maand, ra.alg_ruimte_key, COUNT (rr.res_ruimte_key) aantal, MAX(DECODE ( periode.maand, '2012-05', -- T/m 5.2.1 fout in count_work_days! 21, fac.count_work_days ( TO_DATE (periode.maand || '-01', 'yyyy-mm-dd') - 1, LAST_DAY(TO_DATE (periode.maand || '-01', 'yyyy-mm-dd')) ) ) * (COALESCE (rr.res_ruimte_eindtijd, 20) - COALESCE (rr.res_ruimte_begintijd, 7))) uren FROM res_ruimte rr, res_alg_ruimte ra, ( SELECT TO_CHAR (ADD_MONTHS (bdate, LEVEL - 1), 'yyyy-mm') maand FROM (SELECT TRUNC ( ADD_MONTHS (SYSDATE, -12), 'yyyy' ) bdate FROM DUAL) CONNECT BY LEVEL <= MONTHS_BETWEEN ( TRUNC (SYSDATE, 'mm'), TRUNC (bdate, 'mm') )) periode WHERE rr.res_discipline_key NOT IN (121, 401) AND rr.res_ruimte_key = ra.res_ruimte_key AND ra.res_alg_ruimte_aanmaak < TO_DATE (periode.maand || '-01', 'yyyy-mm-dd') AND (ra.res_alg_ruimte_verwijder IS NULL OR ra.res_alg_ruimte_verwijder > LAST_DAY(TO_DATE (periode.maand || '-01', 'yyyy-mm-dd'))) GROUP BY periode.maand, ra.alg_ruimte_key) bes LEFT JOIN ( SELECT TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm') maand, ra.alg_ruimte_key, SUM(LEAST ( fac.safe_to_number ( TO_CHAR (rrr.res_rsv_ruimte_tot, 'sssss') ) / 3600, COALESCE (rr.res_ruimte_eindtijd, 20) ) - GREATEST ( fac.safe_to_number(TO_CHAR ( rrr.res_rsv_ruimte_van, 'sssss' )) / 3600, COALESCE (rr.res_ruimte_begintijd, 7) )) uren FROM res_rsv_ruimte rrr, res_ruimte_opstelling ro, res_ruimte rr, res_alg_ruimte ra WHERE rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_status_fo_key IN (1, 2) -- Optie/Def. AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_ruimte_key = ra.res_ruimte_key AND rrr.res_rsv_ruimte_van > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') AND TO_CHAR (rrr.res_rsv_ruimte_van, 'd') >= 2 -- Ma AND TO_CHAR (rrr.res_rsv_ruimte_van, 'd') <= 6 -- Vr AND TRUNC (rrr.res_rsv_ruimte_van) NOT IN (SELECT TRUNC (mld_vrije_dagen_datum) FROM mld_vrije_dagen) GROUP BY TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm'), ra.alg_ruimte_key) bez ON bes.maand = bez.maand AND bes.alg_ruimte_key = bez.alg_ruimte_key, alg_v_ruimte_gegevens_all rg, (SELECT alg_ruimte_key, res_ruimte_key FROM (SELECT rar1.alg_ruimte_key, rar1.res_ruimte_key, RANK () OVER ( PARTITION BY rar1.alg_ruimte_key ORDER BY rar1.alg_ruimte_key, DECODE ( rar1.res_alg_ruimte_verwijder, NULL, 1, 2 ), rar2.aantal ) r FROM res_alg_ruimte rar1, ( SELECT res_ruimte_key, COUNT (alg_ruimte_key) aantal FROM res_alg_ruimte GROUP BY res_ruimte_key) rar2 WHERE rar1.res_ruimte_key = rar2.res_ruimte_key(+)) WHERE r = 1) rar, res_ruimte rr WHERE bes.alg_ruimte_key = rg.alg_ruimte_key AND rg.alg_ruimte_key = rar.alg_ruimte_key AND rar.res_ruimte_key = rr.res_ruimte_key; /* Formatted on 15-5-2012 9:58:14 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW arbo_v_rap_bez_aantal ( fclt_f_maand, fclt_f_vestiging, aantal_bezoekers ) AS SELECT TO_CHAR (a.bez_afspraak_datum, 'yyyy-mm') maand, l.alg_locatie_code, COUNT ( * ) sum_visitors FROM bez_afspraak a, bez_bezoekers b, alg_locatie l WHERE a.bez_afspraak_key = b.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND a.bez_afspraak_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') AND a.bez_afspraak_datum < TO_DATE (TO_CHAR (SYSDATE, 'yyyy-mm') || '-01', 'yyyy-mm-dd') GROUP BY TO_CHAR (a.bez_afspraak_datum, 'yyyy-mm'), l.alg_locatie_code; -- ARBO#26005 view tbv kenmerkdomein met koffieautomaten -- key 202 = groep koffieautomaat CREATE OR REPLACE VIEW ARBO_V_MLD_KOFFIEAUTOMATEN ( INS_DEEL_KEY, OMSCHRIJVING ) AS SELECT ins_deel_key, l.alg_locatie_omschrijving || ' - ' || v.alg_verdieping_code || '-' || r.alg_ruimte_nr || ' (' || r.alg_ruimte_omschrijving || ')' || ' - ' || ins_deel_omschrijving omschrijving FROM ins_deel d, ins_srtdeel srt, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l WHERE d.ins_srtdeel_key = srt.ins_srtdeel_key AND srt.ins_srtgroep_key = 202 -- objectgroep koffieautomaat AND ins_deel_verwijder IS NULL AND ins_srtdeel_verwijder IS NULL AND d.ins_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key ORDER BY alg_locatie_omschrijving, alg_verdieping_code; BEGIN fac.registercustversion('ARBO', 6); END; / BEGIN adm.systrackscript('$Workfile: arbo.sql $', '$Revision$', 0); END; / commit; spool off