diff --git a/ALLV/allv.sql b/ALLV/allv.sql index 92fe14da5..93c68532e 100644 --- a/ALLV/allv.sql +++ b/ALLV/allv.sql @@ -1,5 +1,5 @@ --- Script containing customer specific configuration sql statements for ALLV: Allévo/Allité. --- (c) 2007 Dijkoraad IT bv +-- Script containing customer specific db-configuration for ALLV. +-- (c) 2007 SG|facilitor bv -- $Revision$ -- $Id$ -- @@ -8,6 +8,1600 @@ spool xallv.lst set echo on +/* Formatted on 29-3-2013 20:52:02 (QP5 v5.115.810.9015) */ +CREATE OR REPLACE VIEW allv_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 = 421); + +/* Formatted on 29-3-2013 20:52:02 (QP5 v5.115.810.9015) */ +CREATE OR REPLACE PROCEDURE allv_import_prs (p_import_key IN NUMBER) +IS + c_fielddelimitor VARCHAR2 (1) := ';'; + 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_naam VARCHAR2 (256); + v_prs_perslid_tussenvoegsel VARCHAR2 (256); + v_prs_perslid_voorletters VARCHAR2 (256); + v_prs_perslid_voornaam VARCHAR2 (256); + v_prs_perslid_geslacht VARCHAR2 (256); + --v_prs_afdeling_naam VARCHAR2 (256); + --v_prs_afdeling_omschrijving VARCHAR2 (256); + v_prs_kostenplaats_nr 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_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 allv_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_naam); + -- 03 + fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel); + -- 04 + fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters); + -- 05 + fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam); + -- 06 + fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_geslacht); + -- xx + --fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam); + -- xx + --fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_omschrijving); + -- 07 + fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_kostenplaats_nr); + -- 09 + fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving); + -- xx + --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); + -- 10 + 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_oslogin); + -- 16 + 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_naam) = 'ACHTERNAAM' + 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_perslid_geslacht) = 'GESLACHT' + --AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE' + --AND UPPER (v_prs_afdeling_omschrijving) = 'AFDELINGSOMSCHRIJVING' + AND UPPER (v_prs_kostenplaats_nr) = 'KOSTENPLAATSNUMMER' + 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_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 OR LENGTH (v_prs_perslid_nr) > 16) + THEN + v_ongeldig := 1; + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding || 'Personeelsnummer onbekend/te lang', + 'Personeelsnummer verplicht; regel wordt overgeslagen!' + ); + COMMIT; + END IF; + + -- + v_errorhint := 'Ongeldige achternaam'; + 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 || 'Achternaam te lang', + 'Achternaam wordt afgebroken tot [' + || v_prs_perslid_naam + || ']' + ); + COMMIT; + ELSIF (v_prs_perslid_naam IS NULL) + THEN + v_ongeldig := 1; + fac.imp_writelog ( + p_import_key, + 'E', + v_aanduiding || 'Achternaam onbekend', + 'Achternaam verplicht; regel wordt overgeslagen!' + ); + COMMIT; + 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 te lang', + 'Voornaam wordt afgebroken tot [' + || v_prs_perslid_voornaam + || ']' + ); + COMMIT; + ELSIF (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; + + -- + v_errorhint := 'Ongeldig geslacht'; + v_prs_perslid_geslacht := TRIM (v_prs_perslid_geslacht); + + IF (LENGTH (v_prs_perslid_geslacht) > 1) + THEN + v_prs_perslid_geslacht := NULL; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || 'Geslacht te lang', + 'Geslacht wordt niet gezet'); + COMMIT; + END IF; + + /* + -- + v_errorhint := 'Ongeldige afdelingscode'; + v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam); + + IF (v_prs_afdeling_naam IS NULL OR LENGTH (v_prs_afdeling_naam) > 10) + THEN + v_ongeldig := 1; + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding || 'Afdelingscode onbekend/te lang', + 'Afdelingscode verplicht; regel wordt overgeslagen!' + ); + COMMIT; + 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 := 'Ongeldig kostenplaatsnummer'; + v_prs_kostenplaats_nr := TRIM (v_prs_kostenplaats_nr); + + IF (v_prs_kostenplaats_nr IS NULL + OR LENGTH (v_prs_kostenplaats_nr) > 30) + THEN + v_ongeldig := 1; + fac.imp_writelog ( + p_import_key, + 'W', + v_aanduiding || 'Kostenplaatsnummer onbekend/te lang', + 'Kostenplaatsnummer verplicht; regel wordt overgeslagen!' + ); + 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; + ELSIF (v_prs_srtperslid_omschrijving IS NULL) + THEN + v_prs_srtperslid_omschrijving := 'Onbekend'; + fac.imp_writelog (p_import_key, + 'W', + v_aanduiding || 'Functie onbekend', + 'Functie wordt gezet op [Onbekend]'); + COMMIT; + 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) > 12) + THEN + v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12); + 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; + + -- + v_errorhint := 'Ongeldige loginnaam'; + v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin); + + 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 ALLV_IMP_PRS'; + + INSERT INTO allv_imp_prs ( + imp_datum, + prs_perslid_nr, + prs_perslid_naam, + prs_perslid_tussenvoegsel, + prs_perslid_voorletters, + prs_perslid_voornaam, + prs_perslid_geslacht, + --prs_afdeling_naam, + --prs_afdeling_omschrijving, + prs_kostenplaats_nr, + 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_oslogin, + prs_perslid_ingangsdatum, + prs_perslid_einddatum + ) + VALUES ( + SYSDATE, + v_prs_perslid_nr, + v_prs_perslid_naam, + v_prs_perslid_tussenvoegsel, + v_prs_perslid_voorletters, + v_prs_perslid_voornaam, + DECODE (v_prs_perslid_geslacht, + '2', 1, + '1', 0, + NULL), + --v_prs_afdeling_naam, + --v_prs_afdeling_omschrijving, + v_prs_kostenplaats_nr, + 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_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/#ingelezen regels: ' || TO_CHAR (v_count_tot), + '' + ); + fac.imp_writelog ( + p_import_key, + 'S', + 'Persoon/#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, 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 allv_import_prs; +/ + +/* Formatted on 1-7-2013 12:35:25 (QP5 v5.115.810.9015) */ +CREATE OR REPLACE PROCEDURE allv_update_prs (p_import_key IN NUMBER) +IS + 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) := '000'; + -- 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 (12); + --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 allv_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 allv_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 allv_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 allv_imp_prs + GROUP BY UPPER (prs_srtperslid_omschrijving); + + -- Let op! Personen die niet meer in dienst zijn -> niet in allv_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 allv_imp_prs; + + -- Let op! Personen die niet meer in dienst zijn -> niet in allv_imp_prs! + -- Dubbele nummers? Dan krijgt iemand mogelijk de verkeerde plaats! + CURSOR cwp + IS + SELECT p.*, ip.alg_gebouw_code, ip.alg_ruimte_nr + FROM allv_imp_prs ip, prs_v_aanwezigperslid p + WHERE UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr) + AND (ip.alg_gebouw_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 ALLV_IMP_PRS). + SELECT COUNT ( * ) + INTO v_count_prs_import + FROM prs_v_aanwezigperslid p, allv_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 met kostenplaats [' + || recperslid.prs_kostenplaats_nr + || ']'; + + SELECT a1.prs_afdeling_key + INTO v_afdeling_key + FROM prs_v_aanwezigafdeling a1, prs_v_aanwezigkostenplaats k1 + WHERE a1.prs_kostenplaats_key = k1.prs_kostenplaats_key + AND k1.prs_kostenplaats_upper = + UPPER (recperslid.prs_kostenplaats_nr) + AND NOT EXISTS + (SELECT 1 + FROM prs_v_aanwezigafdeling a2, + prs_v_aanwezigkostenplaats k2 + WHERE a2.prs_kostenplaats_key = + k2.prs_kostenplaats_key + AND k2.prs_kostenplaats_upper = + UPPER ( + recperslid.prs_kostenplaats_nr + ) + AND a2.prs_afdeling_key > + a1.prs_afdeling_key); + + --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 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, + 'W', + v_aanduiding || v_errorhint, + 'Kan persoon niet 1-duidig bepalen!'); + ELSIF (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_geslacht, + --prs_perslid_telefoonnr, + --prs_perslid_mobiel, + 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_geslacht, + --recperslid.prs_perslid_telefoonnr, + --recperslid.prs_perslid_mobiel, + 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_geslacht = recperslid.prs_perslid_geslacht, + --prs_perslid_telefoonnr = + -- recperslid.prs_perslid_telefoonnr, + --prs_perslid_mobiel = recperslid.prs_perslid_mobiel, + --prs_perslid_email = recperslid.prs_perslid_email, + prs_perslid_email = + COALESCE (prs_perslid_email, + recperslid.prs_perslid_email), + prs_perslid_oslogin = + COALESCE (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; + 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); + + --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 beoogde ruimte in gebouw'; + + SELECT COUNT ( * ) + INTO v_count + FROM alg_v_aanwezigruimte r, alg_verdieping v + 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 = v_gebouw_key; + + IF (v_count <> 1) + THEN + v_errorhint := 'Fout bij bepalen default ruimte in gebouw'; + + SELECT r.alg_ruimte_key + INTO v_ruimte_key + FROM alg_v_aanwezigruimte r, alg_verdieping v + WHERE r.alg_ruimte_upper_nr = c_ruimte_nr + AND r.alg_verdieping_key = v.alg_verdieping_key + AND v.alg_gebouw_key = v_gebouw_key; + ELSE + SELECT r.alg_ruimte_key + INTO v_ruimte_key + FROM alg_v_aanwezigruimte r, alg_verdieping v + 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 = v_gebouw_key; + END IF; + + v_errorhint := + 'Fout bij bepalen of persoon in gebouw een werkplek heeft'; + + SELECT COUNT ( * ) + INTO v_count + FROM prs_v_aanwezigperslidwerkplek pw, + prs_werkplek w, + alg_ruimte r, + alg_verdieping v + 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 = v_gebouw_key; + + -- Als persoon in gebouw 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 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(ken) in gebouw'; + + 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 + 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 = + v_gebouw_key); + + -- Persoon krijgt wp op de hierboven eerder bepaalde ruimte. + 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 (keihard) 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; + 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 allv_update_prs; +/ + /* Formatted on 16-3-2010 10:44:04 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW allv_v_reserveringdetails ( @@ -569,7 +2163,182 @@ AS AND bs.bes_staffeltabel_key(+) = sd.bes_staffeltabel_key; -/* Formatted on 22-1-2013 14:18:54 (QP5 v5.115.810.9015) */ +/* Formatted on 28-5-2013 10:25:25 (QP5 v5.115.810.9015) */ +CREATE OR REPLACE VIEW allv_v_kostensoort +( + kostensoort_key, + kostensoort_ref +) +AS + SELECT prs_kostensoort_key, + prs_kostensoort_oms || ' - ' || prs_kostensoort_opmerking + FROM prs_kostensoort ks; + +/* Formatted on 27-5-2013 11:30:24 (QP5 v5.115.810.9015) */ +CREATE OR REPLACE VIEW allv_v_rap_ext_orders_exp +( + leveranciernr, + orderdatum, + ordernr, + bedrag, + aantal, + kostensoort, + omschrijving, + kostenplaats +) +AS + SELECT bedr.prs_leverancier_nr, + TO_CHAR (bo.bes_bestelopdr_datum, 'dd-mm-yyyy') orderdatum, + bo.bes_bestelopdr_id ordernr, + ROUND ( + SUM( boi.bes_bestelopdr_item_prijs + * boi.bes_bestelopdr_item_aantal + * (COALESCE (100 + bsd.bes_srtdeel_btw, 121) / 100)), + 2 + ) + bedrag, -- Incl. BTW! + 1 aantal, + ks.prs_kostensoort_oms kostensoort, + ks.prs_kostensoort_opmerking omschrijving, + kp.prs_kostenplaats_nr kostenplaats + FROM bes_bestelopdr bo, + bes_bestelopdr_item boi, + bes_bestelling_item bi, + bes_srtdeel bsd, + bes_srtgroep bsg, + bes_discipline bd, + bes_disc_params dp, + prs_kostensoort ks, + bes_bestelling b, + --prs_perslid p, + --prs_afdeling a, + prs_kostenplaats kp, + prs_bedrijf bedr + WHERE bo.bes_bestelopdr_status = 6 -- Geleverd (#besteld=#ontv.) + AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key + AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key + AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key + AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key + AND bsg.ins_discipline_key = bd.ins_discipline_key + AND bd.ins_discipline_key = dp.bes_ins_discipline_key + AND dp.bes_ins_discipline_key_inkoop IS NULL + AND bd.prs_kostensoort_key = ks.prs_kostensoort_key(+) + AND bi.bes_bestelling_key = b.bes_bestelling_key + --AND b.prs_perslid_key = p.prs_perslid_key + --AND p.prs_afdeling_key = a.prs_afdeling_key + AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key + AND bo.prs_bedrijf_key = bedr.prs_bedrijf_key + GROUP BY bedr.prs_leverancier_nr, + TO_CHAR (bo.bes_bestelopdr_datum, 'dd-mm-yyyy'), + bo.bes_bestelopdr_id, + ks.prs_kostensoort_oms, + ks.prs_kostensoort_opmerking, + kp.prs_kostenplaats_nr + UNION ALL + SELECT bedr.prs_leverancier_nr, + TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy') orderdatum, + sd.ins_srtdiscipline_prefix + || o.mld_melding_key + || '/' + || o.mld_opdr_bedrijfopdr_volgnr + ordernr, + o.mld_opdr_kosten bedrag, -- Incl. BTW! + 1 aantal, + ok.prs_kostensoort_oms kostensoort, + ok.prs_kostensoort_opmerking omschrijving, + kp.prs_kostenplaats_nr kostenplaats + FROM mld_opdr o, + mld_melding m, + mld_stdmelding sm, + mld_discipline md, + ins_srtdiscipline sd, + --prs_kostensoort ks1, + --prs_kostensoort ks2, + --prs_perslid p, + --prs_afdeling a, + prs_kostenplaats kp, + prs_bedrijf bedr, + (SELECT ok.mld_opdr_key, + ks.prs_kostensoort_oms, + ks.prs_kostensoort_opmerking + FROM mld_kenmerkopdr ok, mld_kenmerk k, prs_kostensoort ks + WHERE ok.mld_kenmerkopdr_verwijder IS NULL + AND ok.mld_kenmerk_key = k.mld_kenmerk_key + AND k.mld_kenmerk_verwijder IS NULL + AND k.mld_srtkenmerk_key = 101 + AND fac.safe_to_number (ok.mld_kenmerkopdr_waarde) = + ks.prs_kostensoort_key) ok + WHERE o.mld_statusopdr_key = 6 -- Afgemeld + AND o.mld_melding_key = m.mld_melding_key + AND m.mld_stdmelding_key = sm.mld_stdmelding_key + --AND sm.prs_kostensoort_key = ks1.prs_kostensoort_key(+) + AND sm.mld_ins_discipline_key = md.ins_discipline_key + --AND md.prs_kostensoort_key = ks2.prs_kostensoort_key(+) + AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key + AND sd.ins_srtdiscipline_key = 21 -- Bestelling + --AND m.prs_perslid_key = p.prs_perslid_key + --AND p.prs_afdeling_key = a.prs_afdeling_key + AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key + AND o.mld_uitvoerende_keys = bedr.prs_bedrijf_key + AND o.mld_opdr_key = ok.mld_opdr_key(+); + +/* Formatted on 27-5-2013 11:30:36 (QP5 v5.115.810.9015) */ +CREATE OR REPLACE VIEW allv_v_rap_int_orders_exp +( + boekingsdatum, + bedrag, + kostensoort, + omschrijving, + kostenplaats +) +AS + SELECT --bedr.prs_leverancier_nr, + TO_CHAR (fac.gettrackingdate ('BES2AF', bo.bes_bestelopdr_key), + 'dd-mm-yyyy') + boekingsdatum, + --bo.bes_bestelopdr_id ordernr, + SUM ( + boi.bes_bestelopdr_item_prijs * boi.bes_bestelopdr_item_aantal + ) + bedrag, -- Incl. BTW! + --1 aantal, + ks.prs_kostensoort_oms kostensoort, + ks.prs_kostensoort_opmerking omschrijving, + kp.prs_kostenplaats_nr kostenplaats + FROM bes_bestelopdr bo, + bes_bestelopdr_item boi, + bes_bestelling_item bi, + bes_srtdeel bsd, + bes_srtgroep bsg, + bes_discipline bd, + bes_disc_params dp, + prs_kostensoort ks, + bes_bestelling b, + --prs_perslid p, + --prs_afdeling a, + prs_kostenplaats kp + WHERE bo.bes_bestelopdr_status = 6 -- Geleverd (#besteld=#ontv.) + AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key + AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key + AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key + AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key + AND bsg.ins_discipline_key = bd.ins_discipline_key + AND bd.ins_discipline_key = dp.bes_ins_discipline_key + AND dp.bes_ins_discipline_key_inkoop IS NOT NULL + AND bd.prs_kostensoort_key = ks.prs_kostensoort_key(+) + AND bi.bes_bestelling_key = b.bes_bestelling_key + --AND b.prs_perslid_key = p.prs_perslid_key + --AND p.prs_afdeling_key = a.prs_afdeling_key + AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key + GROUP BY TO_CHAR (fac.gettrackingdate ('BES2AF', bo.bes_bestelopdr_key), + 'dd-mm-yyyy'), + --bo.bes_bestelopdr_id, + ks.prs_kostensoort_oms, + ks.prs_kostensoort_opmerking, + kp.prs_kostenplaats_nr; + + +/* Formatted on 21-2-2013 12:36:24 (QP5 v5.115.810.9015) */ CREATE OR REPLACE VIEW allv_v_rap_voorraad ( hide_f_ext_disc_key, @@ -581,60 +2350,84 @@ CREATE OR REPLACE VIEW allv_v_rap_voorraad ext_artikel_nr, ext_artikel_oms, ext_artikel_prijs, + intern_extern, -- UIT: "normalisatie-factor" naar IN-aantal min_voorraad, max_voorraad, inkoop_geleverd, -- IN: daadwerkelijk geleverd - intern_besteld, -- UIT: in bestelling + besteld + geleverd - intern_extern, -- UIT/genormaliseerd: in bestelling + besteld + geleverd + intern_geleverd, -- UIT: daadwerkelijk geleverd voorraad, hide_f_voorraad_gisteren, - inkoop_besteld, -- IN: in bestelling + besteld + inkoop_besteld, -- IN: in bestelling + besteld (nog niet geleverd) + intern_besteld, -- UIT: in bestelling + besteld (nog niet geleverd) inkoop_gewenst -- IN: tot maximum als onder minimum ) AS SELECT extern.dkey, COALESCE (extern.ins_discipline_omschrijving, - intern.ins_discipline_omschrijving), - DECODE (intern.besteld, - intern.geleverd, - DECODE (extern.besteld, extern.geleverd, 'Nee', 'Ja'), - 'Ja'), - intern.art_nr, - intern.art_oms, - TO_CHAR (intern.art_prijs), - COALESCE (extern.art_nr, intern.match_nr), - extern.art_oms, - TO_CHAR (extern.art_prijs), + intern.ins_discipline_omschrijving) + catalogus, + DECODE ( + COALESCE (intern.besteld, 0), + COALESCE (intern.geleverd, 0), + DECODE (COALESCE (extern.besteld, 0), + COALESCE (extern.geleverd, 0), 'Nee', + 'Ja'), + 'Ja' + ) + actueel, + intern.art_nr intern_nr, + intern.art_oms intern_oms, + TO_CHAR (intern.art_prijs) intern_prijs, + COALESCE (extern.art_nr, intern.match_nr) extern_nr, + extern.art_oms extern_oms, + TO_CHAR (extern.art_prijs) extern_prijs, + COALESCE (intern.depotverdeelpct, 1) intern_extern, extern.vmin, extern.vmax, - extern.geleverd, - intern.besteld intern_besteld, - ROUND (intern.besteld / intern.depotverdeelpct, 2) intern_extern, - extern.geleverd - - COALESCE (ROUND (intern.besteld / intern.depotverdeelpct, 2), - 0) + extern.geleverd extern_geleverd, + intern.geleverd intern_geleverd, + COALESCE (extern.geleverd, 0) + - ROUND ( + COALESCE (intern.geleverd, 0) + / COALESCE (intern.depotverdeelpct, 1), + 2 + ) voorraad, - extern.geleverd_gisteren - - COALESCE ( - ROUND (intern.besteld_gisteren / intern.depotverdeelpct, 2), - 0 + COALESCE (extern.geleverd_gisteren, 0) + - ROUND ( + COALESCE (intern.geleverd_gisteren, 0) + / COALESCE (intern.depotverdeelpct, 1), + 2 ) voorraad_gisteren, - extern.besteld, + DECODE ( + COALESCE (extern.besteld, 0), + COALESCE (extern.geleverd, 0), + NULL, + COALESCE (extern.besteld, 0) - COALESCE (extern.geleverd, 0) + ) + extern_besteld, + DECODE ( + COALESCE (intern.besteld, 0), + COALESCE (intern.geleverd, 0), + NULL, + COALESCE (intern.besteld, 0) - COALESCE (intern.geleverd, 0) + ) + intern_besteld, CASE - WHEN ( (COALESCE (extern.besteld, 0) - + COALESCE (extern.geleverd, 0)) - - COALESCE ( - ROUND (intern.besteld / intern.depotverdeelpct, 2), - 0 + WHEN (COALESCE (extern.besteld, 0) + - ROUND ( + COALESCE (intern.besteld, 0) + / COALESCE (intern.depotverdeelpct, 1), + 2 )) < COALESCE (extern.vmin, 0) THEN COALESCE (extern.vmax, 0) - - ( (COALESCE (extern.besteld, 0) - + COALESCE (extern.geleverd, 0)) - - COALESCE ( - ROUND (intern.besteld / intern.depotverdeelpct, 2), - 0 + - (COALESCE (extern.besteld, 0) + - ROUND ( + COALESCE (intern.besteld, 0) + / COALESCE (intern.depotverdeelpct, 1), + 2 )) ELSE NULL @@ -650,7 +2443,8 @@ AS sd.bes_srtdeel_voorraadmax vmax, -- ext. voorraadmax (SELECT SUM (bi.bes_bestelling_item_aantal) FROM bes_bestelling b, bes_bestelling_item bi - WHERE b.bes_bestelling_status IN (2, 3, 4, 5) + WHERE b.bes_bestelling_status IN + (2, 3, 4, 5, 6, 7) AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = @@ -658,7 +2452,7 @@ AS besteld, (SELECT SUM (bi.bes_bestelling_item_aantal) FROM bes_bestelling b, bes_bestelling_item bi - WHERE b.bes_bestelling_status > 5 + WHERE b.bes_bestelling_status IN (6, 7) AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = @@ -667,7 +2461,7 @@ AS (SELECT SUM (bi.bes_bestelling_item_aantal) FROM bes_bestelling b, bes_bestelling_item bi WHERE b.bes_bestelling_datum < TRUNC (SYSDATE) - AND b.bes_bestelling_status > 5 + AND b.bes_bestelling_status IN (6, 7) AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = @@ -682,10 +2476,11 @@ AS AND bd.ins_discipline_key = dp.bes_ins_discipline_key AND dp.bes_ins_discipline_key_inkoop IS NULL - AND bd.ins_discipline_key IN - (SELECT bes_ins_discipline_key_inkoop - FROM bes_disc_params - WHERE bes_ins_discipline_key_inkoop IS NOT NULL)) + AND (bd.ins_discipline_key = 1141 -- Weststrate extern + OR bd.ins_discipline_key IN + (SELECT bes_ins_discipline_key_inkoop + FROM bes_disc_params + WHERE bes_ins_discipline_key_inkoop IS NOT NULL))) extern -- Inkoop artikelen uit externe catalogus! FULL JOIN (SELECT intern.dkey, -- ext. cataloguskey (INKOOP-key) @@ -701,8 +2496,6 @@ AS besteld_gisteren.geleverd geleverd_gisteren FROM ( SELECT bde.ins_discipline_key dkey, bde.ins_discipline_omschrijving, - --COALESCE (sd.bes_srtdeel_image, - -- sd.bes_srtdeel_nr) sd.bes_srtdeel_nr match_nr, MIN(COALESCE ( SUBSTR ( @@ -728,9 +2521,13 @@ AS NULL )) art_prijs, - MAX(COALESCE ( + MAX(DECODE ( sd.bes_srtdeel_depotverdeelpct, - 1 + NULL, + 1, + 0, + 1, + sd.bes_srtdeel_depotverdeelpct )) depotverdeelpct FROM bes_srtdeel sd, @@ -749,21 +2546,18 @@ AS bde.ins_discipline_key GROUP BY bde.ins_discipline_key, bde.ins_discipline_omschrijving, - --COALESCE (sd.bes_srtdeel_image, - -- sd.bes_srtdeel_nr), bes_srtdeel_nr) intern LEFT JOIN ( SELECT dp.bes_ins_discipline_key_inkoop dkey, -- INKOOP-key - --COALESCE (sd.bes_srtdeel_image, - -- sd.bes_srtdeel_nr) sd.bes_srtdeel_nr match_nr, SUM (bi.bes_bestelling_item_aantal) aantal, SUM(DECODE ( - SIGN(b.bes_bestelling_status - - 5), - -1, + b.bes_bestelling_status, + 6, + bi.bes_bestelling_item_aantal, + 7, bi.bes_bestelling_item_aantal, 0 )) @@ -787,23 +2581,19 @@ AS dp.bes_ins_discipline_key AND dp.bes_ins_discipline_key_inkoop IS NOT NULL GROUP BY dp.bes_ins_discipline_key_inkoop, - --COALESCE (sd.bes_srtdeel_image, - -- sd.bes_srtdeel_nr), bes_srtdeel_nr) besteld ON intern.dkey = besteld.dkey AND intern.match_nr = besteld.match_nr LEFT JOIN ( SELECT dp.bes_ins_discipline_key_inkoop dkey, -- INKOOP-key - --COALESCE (sd.bes_srtdeel_image, - -- sd.bes_srtdeel_nr) sd.bes_srtdeel_nr match_nr, SUM (bi.bes_bestelling_item_aantal) aantal, SUM(DECODE ( - SIGN ( - b.bes_bestelling_status - 5 - ), - -1, + b.bes_bestelling_status, + 6, + bi.bes_bestelling_item_aantal, + 7, bi.bes_bestelling_item_aantal, 0 )) @@ -829,13 +2619,12 @@ AS dp.bes_ins_discipline_key AND dp.bes_ins_discipline_key_inkoop IS NOT NULL GROUP BY dp.bes_ins_discipline_key_inkoop, - --COALESCE (sd.bes_srtdeel_image, - -- sd.bes_srtdeel_nr), bes_srtdeel_nr) besteld_gisteren ON intern.dkey = besteld_gisteren.dkey AND intern.match_nr = besteld_gisteren.match_nr) intern -- Verkoop artikelen uit interne masker-catalogi! - ON extern.dkey = intern.dkey AND extern.art_nr = intern.match_nr + --ON extern.dkey = intern.dkey AND extern.art_nr = intern.match_nr + ON extern.art_nr = intern.match_nr WHERE intern.art_nr IS NOT NULL; -- Bevat CUST01/02-notificaties (eind van de dag) naar magazijn-medewerkers @@ -893,7 +2682,7 @@ AS AND sn.fac_srtnotificatie_code = 'CUST02'; */ -BEGIN fac.registercustversion('ALLV', 4); END; +BEGIN fac.registercustversion('ALLV', 5); END; / BEGIN adm.systrackscript('$Workfile: allv.sql $', '$Revision$', 0); END; /