-- Script containing customer specific db-configuration for GOUD. -- (c) 2011 SG|facilitor bv -- $Revision$ -- $Id$ -- -- Support: +31 53 4800700 set echo on spool xgoud.lst CREATE OR REPLACE VIEW goud_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 = 21); /* Formatted on 5-7-2011 17:06:36 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE goud_import_prs (p_import_key IN NUMBER) IS c_fielddelimitor VARCHAR2 (1) := ';'; -- LET OP: moet idem zijn als declaratie bij GOUD_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_oslogin 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_mobiel VARCHAR2 (256); v_prs_perslid_email VARCHAR2 (256); v_prs_perslid_nr 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 goud_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_oslogin); -- 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); -- xx --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code); -- xx --fac.imp_getfield (v_newline, -- c_fielddelimitor, -- v_alg_verdieping_code); -- 11 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr); -- 12 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr); -- 13 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel); -- 14 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- 15 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- 16 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_ingangsdatum); -- 17 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_einddatum); -- v_aanduiding := '[' || v_prs_perslid_oslogin || '|' || 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_oslogin) = 'LOGINNAAM' AND UPPER (v_prs_perslid_titel) = 'TITEL' AND UPPER (v_prs_perslid_naam) = 'PERSOONACHTERNAAM' 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) = 'TELEFOONNUMMER' AND UPPER (v_prs_perslid_mobiel) = 'MOBIEL' AND UPPER (v_prs_perslid_email) = 'EMAIL' AND UPPER (v_prs_perslid_nr) = 'PERSONEELSNUMMER' 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 := 'Ongeldige loginnaam'; v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin); IF (v_prs_perslid_oslogin IS NULL OR LENGTH (v_prs_perslid_oslogin) > 30) THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || 'Loginnaam onbekend of te lang', 'Correcte loginnaam is verplicht; regel wordt overgeslagen!' ); COMMIT; 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 mobielnummer'; v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel); IF LENGTH (v_prs_perslid_mobiel) > 15 THEN v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Mobielnummer te lang', 'Mobielnummer wordt afgebroken tot [' || v_prs_perslid_mobiel || ']' ); 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 - nog - niet gebruikt! v_errorhint := 'Ongeldig personeelsnummer'; v_prs_perslid_nr := TRIM (v_prs_perslid_nr); 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; -- 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 GOUD_IMP_PRS'; INSERT INTO goud_imp_prs (imp_datum, prs_perslid_oslogin, 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_locatie_code, --alg_gebouw_code, --alg_verdieping_code, alg_ruimte_nr, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_email, prs_perslid_nr, prs_perslid_ingangsdatum, prs_perslid_einddatum) VALUES (SYSDATE, v_prs_perslid_oslogin, 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_locatie_code, --v_alg_gebouw_code, --v_alg_verdieping_code, v_alg_ruimte_nr, v_prs_perslid_telefoonnr, v_prs_perslid_mobiel, v_prs_perslid_email, v_prs_perslid_nr, 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 goud_import_prs; / /* Formatted on 25-8-2011 16:02:25 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE goud_update_prs (p_import_key IN NUMBER) IS -- LET OP: moet idem zijn als declaratie bij GOUD_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; -- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw) c_ruimte_nr VARCHAR2 (10) := '0.00'; -- 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 goud_imp_prs! -- Dubbele oslogins? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR cdelprs IS SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE (p.prs_perslid_oslogin IS NULL OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\') AND p.prs_perslid_oslogin2 IS NULL AND NOT EXISTS (SELECT 1 FROM goud_imp_prs ip WHERE UPPER (ip.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin)); -- Let op! Personen die niet meer in dienst zijn -> niet in goud_imp_prs! CURSOR csrtperslid IS SELECT MIN (prs_perslid_oslogin) prs_perslid_oslogin, MIN (prs_perslid_naam) prs_perslid_naam, MIN (prs_perslid_voornaam) prs_perslid_voornaam, MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving FROM goud_imp_prs GROUP BY UPPER (prs_srtperslid_omschrijving); -- Let op! Personen die niet meer in dienst zijn -> niet in goud_imp_prs! -- Dubbele oslogins? Dan wordt slechts 1 set persoongegevens toegevoegd! -- Ook wordt in deze loop de afdelingsomschrijving eventueel bijgewerkt! CURSOR cperslid IS SELECT * FROM goud_imp_prs; -- Let op! Personen die niet meer in dienst zijn -> niet in goud_imp_prs! -- Dubbele oslogins? Dan krijgt iemand mogelijk de verkeerde plaats! CURSOR cwp IS SELECT p.*, ip.alg_locatie_code, COALESCE (ip.alg_ruimte_nr, c_ruimte_nr) alg_ruimte_nr FROM goud_imp_prs ip, prs_v_aanwezigperslid p WHERE ip.alg_locatie_code IS NOT NULL AND UPPER (ip.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin); -- Alle actieve personen met oslogin (ie. de import-doelgroep) zonder een werkplek CURSOR cnowp IS SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_oslogin IS NOT NULL AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%' AND NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek pw WHERE pw.prs_perslid_key = p.prs_perslid_key); -- Alle aanwezige personen met oslogin (ie. de import-doelgroep) niet in een groep CURSOR cnogroup IS SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_oslogin IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep g WHERE g.prs_perslid_key = p.prs_perslid_key); BEGIN -- Bepaal oslogin-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 GOUD_IMP_PRS). SELECT COUNT ( * ) INTO v_count_prs_import FROM prs_v_aanwezigperslid p, goud_imp_prs ip WHERE p.prs_perslid_oslogin IS NOT NULL AND UPPER (p.prs_perslid_oslogin) = UPPER (ip.prs_perslid_oslogin) 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_oslogin 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_oslogin || '|' || 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 loginnaam [' || recdelprs.prs_perslid_oslogin || '] 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 loginnaam [' || recdelprs.prs_perslid_oslogin || '] 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 loginnaam [' || recdelprs.prs_perslid_oslogin || '] 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_oslogin || '|' || 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_oslogin || '|' || 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_oslogin) = UPPER (recperslid.prs_perslid_oslogin); 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_oslogin, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_perslid_titel, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_email, prs_perslid_nr, prs_perslid_ingangsdatum, prs_perslid_einddatum, fac_profiel_key ) VALUES ( 'PRS', v_srtperslid_key, v_afdeling_key, recperslid.prs_perslid_oslogin, 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_mobiel, recperslid.prs_perslid_email, recperslid.prs_perslid_nr, 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_mobiel = recperslid.prs_perslid_mobiel, prs_perslid_email = recperslid.prs_perslid_email, prs_perslid_nr = recperslid.prs_perslid_nr, 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_oslogin || '|' || 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_oslogin) = UPPER (recwp.prs_perslid_oslogin); 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 ruimte op locatie'; SELECT r.alg_ruimte_key INTO v_ruimte_key FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g WHERE r.alg_ruimte_upper_nr = UPPER (recwp.alg_ruimte_nr) 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_errorhint := 'Fout bij bepalen of persoon op locatie een werkplek heeft'; SELECT COUNT ( * ) INTO v_count FROM prs_perslidwerkplek 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; -- Als persoon op locatie reeds een werkplek heeft en de nieuwe zou -- in de default ruimte zijn (want ongedefinieerd bij import!), dan -- wordt onderstaande overgeslagen. IF v_count = 0 OR recwp.alg_ruimte_nr != c_ruimte_nr THEN v_errorhint := 'Fout bij verhuizen naar nieuwe werkplek'; PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'L'); 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_oslogin || '] 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_oslogin || '|' || 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 goud_update_prs; / /* Formatted on 13-10-2014 15:48:12 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW GOUD_V_GRAPH_ITMLD_AFM ( FCLT_XAS_, FCLT_YAS_ ) AS SELECT SUM (nog_op_tijd) aantal, COUNT (mld_key) totaal FROM (SELECT m.mld_melding_key mld_key, DECODE ( SIGN (m.mld_melding_einddatum_std - TRUNC (SYSDATE, 'mi')), -1, 0, 1) nog_op_tijd 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 md.ins_srtdiscipline_key = 1 -- Helpdesk IT AND m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending ); CREATE OR REPLACE VIEW GOUD_V_GRAPH_FDMLD_AFM ( FCLT_XAS_, FCLT_YAS_ ) AS SELECT SUM (nog_op_tijd) aantal, COUNT (mld_key) totaal FROM (SELECT m.mld_melding_key mld_key, DECODE ( SIGN (m.mld_melding_einddatum_std - TRUNC (SYSDATE, 'mi')), -1, 0, 1) nog_op_tijd 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 md.ins_srtdiscipline_key = 2 -- Servicedesk FD AND m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending ); BEGIN fac.registercustversion('GOUD', 1); END; / BEGIN adm.systrackscriptId('$Id$', 0); END; / commit; spool off