-- 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)
            || '%] <br> '
            || '- #personen importbestand = ['
            || TO_CHAR (v_count_prs_import)
            || '] <br> '
            || '- #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
