-- Script containing customer specific db-configuration for ALLV.
-- (c) 2007 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700

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 11-7-2013 10:48:58 (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_key            NUMBER (10) := 21;  -- Niet bevoegd tot bestellen!
   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_perslidwerkplek 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   fac_profiel_key = c_profiel_key;

      IF (v_count = 0)
      THEN
         fac.imp_writelog (
            p_import_key,
            'I',
               'Standaard profiel [key='
            || TO_CHAR (c_profiel_key)
            || '] niet gevonden.',
            'Personen zonder profiel krijgen geen default 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_perslidwerkplek 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 verhuizen naar nieuwe werkplek';
               PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'G');
            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)
            || '%] <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 allv_update_prs;
/

/* Formatted on 16-3-2010 10:44:04 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ALLV_V_RESERVERINGDETAILS
(
   HIDE_F_SORT,
   FCLT_F_LOCATIE,
   FCLT_F_DATUM,
   RESNR,
   AANTAL,
   RUIMTE,
   VAN,
   TOT,
   VOORZIENINGEN,
   OMSCHRIJVING,
   OPMERKING,
   HIDE_F_RSV_RUIMTE_KEY
)
AS
   SELECT   l.alg_locatie_code
            || TO_CHAR (res_geg.res_reservering_van, 'YYYY-MM-DD HH24:MI')
            || COALESCE (opstelalg.res_ruimte_nr,
                         ruimte_geg.alg_ruimte_aanduiding)
            || rrr.res_reservering_key
            || rrr.res_rsv_ruimte_volgnr
            || res_geg.res_type
               sort_loc_tijd_ruimte_resnr_cat,
            l.alg_locatie_code locatie,
            TO_CHAR (res_geg.res_reservering_van, 'DD-MM-YYYY') datum,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                      rrr.res_reservering_key
                   || '/'
                   || rrr.res_rsv_ruimte_volgnr
             END)
               resnr,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   TO_CHAR (rrr.res_rsv_ruimte_bezoekers)
             END)
               aantal,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   COALESCE (opstelalg.res_ruimte_nr,
                             ruimte_geg.alg_ruimte_aanduiding)
             END)
               ruimte,
            TO_CHAR (res_geg.res_reservering_van, 'HH24:MI') van,
            TO_CHAR (res_geg.res_reservering_tot, 'HH24:MI') tot,
            (CASE
                WHEN res_geg.aantal IS NOT NULL
                THEN
                      TO_CHAR (res_geg.aantal)
                   || ' * '
                   || res_geg.res_voorziening
                ELSE
                   res_geg.res_voorziening
             END)
               voorzieningen,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   res_rsv_ruimte_omschrijving
             END)
               omschrijving,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   res_rsv_ruimte_opmerking
             END)
               opmerking,
            rrr.res_rsv_ruimte_key
     FROM   (SELECT   '1R' AS res_type,
                      rrr.res_rsv_ruimte_key,
                      rro.res_ruimte_key,
                      rrr.res_rsv_ruimte_key AS res_item_key,
                      rrr.res_rsv_ruimte_van AS res_reservering_van,
                      rrr.res_rsv_ruimte_tot AS res_reservering_tot,
                      TO_NUMBER (NULL) AS aantal,
                      ro.res_opstelling_omschrijving AS res_voorziening,
                      rr.res_discipline_key AS res_ins_discipline_key,
                      rrr.res_status_bo_key,
                      TO_NUMBER (NULL) AS res_artikel_key,
                      rrr.res_rsv_ruimte_prijs AS prijs,
                      TO_NUMBER (NULL) AS stuks_prijs,
                      1 AS rsv_ruimte_aantal,
                      NULL AS artikelnummer,
                      '' AS artikel_groep,
                      fac.gettrackinguserkey ('RESAFM',
                                              rrr.res_rsv_ruimte_key)
                         afmelder_key,
                      fac.gettrackingdate ('RESAFM', rrr.res_rsv_ruimte_key)
                         afmeld_datum
               FROM   res_v_aanwezigrsv_ruimte rrr,
                      res_ruimte_opstelling rro,
                      res_ruimte rr,
                      res_opstelling ro
              WHERE   rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rro.res_ruimte_key = rr.res_ruimte_key
                      AND rro.res_opstelling_key = ro.res_opstelling_key
                      AND rrr.res_rsv_ruimte_van BETWEEN TO_DATE (
                                                            TO_CHAR (
                                                               SYSDATE,
                                                               'yyyymmdd'
                                                            ),
                                                            'yyyymmdd'
                                                         )
                                                     AND  TO_DATE (
                                                             TO_CHAR (
                                                                SYSDATE + 10,
                                                                'yyyymmdd'
                                                             ),
                                                             'yyyymmdd'
                                                          )
             UNION ALL
             SELECT   '2V' AS res_type,
                      rrd.res_rsv_ruimte_key,
                      (SELECT   rro.res_ruimte_key
                         FROM   res_ruimte_opstelling rro
                        WHERE   rrr.res_ruimte_opstel_key =
                                   rro.res_ruimte_opstel_key)
                         AS res_ruimte_key,
                      rrd.res_rsv_deel_key AS res_item_key,
                      rrd.res_rsv_deel_van AS res_reservering_van,
                      rrd.res_rsv_deel_tot AS res_reservering_tot,
                      TO_NUMBER (NULL) AS aantal,
                         ID.ins_deel_omschrijving
                      || ' ('
                      || COALESCE (rd.res_deel_eenheid, '')
                      || ')'
                         AS res_voorziening,
                      rd.res_discipline_key AS res_ins_discipline_key,
                      rrd.res_status_bo_key,
                      TO_NUMBER (NULL) AS res_artikel_key,
                      TO_NUMBER (NULL) AS prijs,
                      rd.res_deel_prijs AS stuks_prijs,
                      TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                      NULL AS artikelnummer,
                      '' AS artikel_groep,
                      fac.gettrackinguserkey ('RESAFM', rrd.res_rsv_deel_key)
                         afmelder_key,
                      fac.gettrackingdate ('RESAFM', rrd.res_rsv_deel_key)
                         afmeld_datum
               FROM   res_v_aanwezigrsv_deel rrd,
                      res_v_aanwezigrsv_ruimte rrr,
                      res_deel rd,
                      ins_deel ID
              WHERE       rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                      AND rrd.res_deel_key = rd.res_deel_key
                      AND rd.res_ins_deel_key = ID.ins_deel_key
                      AND rrd.res_rsv_deel_van BETWEEN TO_DATE (
                                                          TO_CHAR (
                                                             SYSDATE,
                                                             'yyyymmdd'
                                                          ),
                                                          'yyyymmdd'
                                                       )
                                                   AND  TO_DATE (
                                                           TO_CHAR (
                                                              SYSDATE + 10,
                                                              'yyyymmdd'
                                                           ),
                                                           'yyyymmdd'
                                                        )
             UNION ALL
             SELECT   '3C' AS res_type,
                      rra.res_rsv_ruimte_key,
                      (SELECT   rro.res_ruimte_key
                         FROM   res_ruimte_opstelling rro
                        WHERE   rrr.res_ruimte_opstel_key =
                                   rro.res_ruimte_opstel_key)
                         AS res_ruimte_key,
                      res_rsv_artikel_key AS res_item_key,
                      rra.res_rsv_artikel_levering AS res_reservering_van,
                      res_rsv_ruimte_tot AS res_reservering_tot,
                      rra.res_rsv_artikel_aantal AS aantal,
                         LTRIM (ra.res_artikel_omschrijving)
                      || ' ('
                      || COALESCE (ra.res_artikel_eenheid, '')
                      || ')'
                         AS res_voorziening,
                      ra.res_discipline_key AS res_ins_discipline_key,
                      rra.res_status_bo_key,
                      ra.res_artikel_key AS res_artikel_key,
                      rra.res_rsv_artikel_prijs AS prijs,
                      ra.res_artikel_prijs / rra.res_rsv_artikel_aantal
                         AS stuks_prijs,
                      TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                      ra.res_artikel_nr AS artikelnummer,
                      ra.res_artikel_groep AS artikel_groep,
                      fac.gettrackinguserkey ('RESAFM',
                                              rra.res_rsv_artikel_key)
                         afmelder_key,
                      fac.gettrackingdate ('RESAFM', rra.res_rsv_artikel_key)
                         afmeld_datum
               FROM   res_v_aanwezigrsv_artikel rra,
                      res_v_aanwezigrsv_ruimte rrr,
                      res_artikel ra
              WHERE   rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                      AND rra.res_artikel_key = ra.res_artikel_key
                      AND rra.res_rsv_artikel_levering BETWEEN TO_DATE (
                                                                  TO_CHAR (
                                                                     SYSDATE,
                                                                     'yyyymmdd'
                                                                  ),
                                                                  'yyyymmdd'
                                                               )
                                                           AND  TO_DATE (
                                                                   TO_CHAR (
                                                                      SYSDATE
                                                                      + 10,
                                                                      'yyyymmdd'
                                                                   ),
                                                                   'yyyymmdd'
                                                                )) res_geg,
            res_rsv_ruimte rrr,
            alg_v_ruimte_gegevens ruimte_geg,
            (  SELECT   res_ruimte_opstel_key,
                        res_ruimte_nr,
                        MIN (alg_ruimte_key) alg_ruimte_key
                 FROM   res_ruimte_opstelling rro,
                        res_alg_ruimte rar,
                        res_ruimte rr
                WHERE       rro.res_ruimte_key = rar.res_ruimte_key
                        AND rr.res_ruimte_key = rar.res_ruimte_key
                        AND rar.res_alg_ruimte_verwijder IS NULL
             GROUP BY   res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
            alg_locatie l
    WHERE   res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
            AND rrr.res_ruimte_opstel_key =
                  opstelalg.res_ruimte_opstel_key(+)
            AND ruimte_geg.alg_ruimte_key =
                  COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)
            AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
            AND res_geg.res_status_bo_key < 5
/

/* Formatted on 16-3-2010 11:01:01 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_rap_resweekdetails
(
   fclt_f_locatie,
   hide_f_sort_datum_tijd,
   hide_f_sort_ruimte,
   hide_f_sort_resnr,
   hide_f_sort_categorie,
   fclt_f_week,
   dag,
   resnr,
   aantal,
   ruimte,
   van,
   tot,
   voorzieningen,
   omschrijving,
   opmerking
)
AS
   SELECT   l.alg_locatie_code locatie,
            TO_CHAR (res_geg.res_reservering_van, 'YYYY-MM-DD HH24:MI')
               sort_datum_tijd,
            COALESCE (opstelalg.res_ruimte_nr,
                      ruimte_geg.alg_ruimte_aanduiding)
               sort_ruimte,
            rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
               sort_resnr,
            res_geg.res_type sort_categorie,
            'Week ' || TO_CHAR (res_geg.res_reservering_van, 'WW') week,
            TO_CHAR (res_geg.res_reservering_van, 'DD/MM') dag,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                      rrr.res_reservering_key
                   || '/'
                   || rrr.res_rsv_ruimte_volgnr
             END)
               resnr,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   TO_CHAR (rrr.res_rsv_ruimte_bezoekers)
             END)
               aantal,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   COALESCE (opstelalg.res_ruimte_nr,
                             ruimte_geg.alg_ruimte_aanduiding)
             END)
               ruimte,
            TO_CHAR (res_geg.res_reservering_van, 'HH24:MI') van,
            TO_CHAR (res_geg.res_reservering_tot, 'HH24:MI') tot,
            (CASE
                WHEN res_geg.aantal IS NOT NULL
                THEN
                      TO_CHAR (res_geg.aantal)
                   || ' * '
                   || res_geg.res_voorziening
                ELSE
                   res_geg.res_voorziening
             END)
               voorzieningen,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   res_rsv_ruimte_omschrijving
             END)
               omschrijving,
            (CASE
                WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                THEN
                   ''
                ELSE
                   res_rsv_ruimte_opmerking
             END)
               opmerking
     FROM   (SELECT   '1R' AS res_type,
                      rrr.res_rsv_ruimte_key,
                      rro.res_ruimte_key,
                      rrr.res_rsv_ruimte_key AS res_item_key,
                      rrr.res_rsv_ruimte_van AS res_reservering_van,
                      rrr.res_rsv_ruimte_tot AS res_reservering_tot,
                      TO_NUMBER (NULL) AS aantal,
                      ro.res_opstelling_omschrijving AS res_voorziening,
                      rr.res_discipline_key AS res_ins_discipline_key,
                      rrr.res_status_bo_key,
                      TO_NUMBER (NULL) AS res_artikel_key,
                      rrr.res_rsv_ruimte_prijs AS prijs,
                      TO_NUMBER (NULL) AS stuks_prijs,
                      1 AS rsv_ruimte_aantal,
                      NULL AS artikelnummer,
                      '' AS artikel_groep,
                      fac.gettrackinguserkey ('RESAFM',
                                              rrr.res_rsv_ruimte_key)
                         afmelder_key,
                      fac.gettrackingdate ('RESAFM', rrr.res_rsv_ruimte_key)
                         afmeld_datum
               FROM   res_v_aanwezigrsv_ruimte rrr,
                      res_ruimte_opstelling rro,
                      res_ruimte rr,
                      res_opstelling ro
              WHERE   rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                      AND rro.res_ruimte_key = rr.res_ruimte_key
                      AND rro.res_opstelling_key = ro.res_opstelling_key
                      AND rrr.res_rsv_ruimte_van BETWEEN SYSDATE - 7
                                                     AND  SYSDATE + 14
                      AND TO_CHAR (rrr.res_rsv_ruimte_van, 'WW') IN
                               (TO_CHAR (SYSDATE, 'WW'),
                                TO_CHAR (SYSDATE + 7, 'WW'))
             UNION ALL
             SELECT   '2V' AS res_type,
                      rrd.res_rsv_ruimte_key,
                      (SELECT   rro.res_ruimte_key
                         FROM   res_ruimte_opstelling rro
                        WHERE   rrr.res_ruimte_opstel_key =
                                   rro.res_ruimte_opstel_key)
                         AS res_ruimte_key,
                      rrd.res_rsv_deel_key AS res_item_key,
                      rrd.res_rsv_deel_van AS res_reservering_van,
                      rrd.res_rsv_deel_tot AS res_reservering_tot,
                      TO_NUMBER (NULL) AS aantal,
                         ID.ins_deel_omschrijving
                      || ' ('
                      || COALESCE (rd.res_deel_eenheid, '')
                      || ')'
                         AS res_voorziening,
                      rd.res_discipline_key AS res_ins_discipline_key,
                      rrd.res_status_bo_key,
                      TO_NUMBER (NULL) AS res_artikel_key,
                      TO_NUMBER (NULL) AS prijs,
                      rd.res_deel_prijs AS stuks_prijs,
                      TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                      NULL AS artikelnummer,
                      '' AS artikel_groep,
                      fac.gettrackinguserkey ('RESAFM', rrd.res_rsv_deel_key)
                         afmelder_key,
                      fac.gettrackingdate ('RESAFM', rrd.res_rsv_deel_key)
                         afmeld_datum
               FROM   res_v_aanwezigrsv_deel rrd,
                      res_v_aanwezigrsv_ruimte rrr,
                      res_deel rd,
                      ins_deel ID
              WHERE       rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                      AND rrd.res_deel_key = rd.res_deel_key
                      AND rd.res_ins_deel_key = ID.ins_deel_key
                      AND rrd.res_rsv_deel_van BETWEEN SYSDATE - 7
                                                   AND  SYSDATE + 14
                      AND TO_CHAR (rrd.res_rsv_deel_van, 'WW') IN
                               (TO_CHAR (SYSDATE, 'WW'),
                                TO_CHAR (SYSDATE + 7, 'WW'))
             UNION ALL
             SELECT   '3C' AS res_type,
                      rra.res_rsv_ruimte_key,
                      (SELECT   rro.res_ruimte_key
                         FROM   res_ruimte_opstelling rro
                        WHERE   rrr.res_ruimte_opstel_key =
                                   rro.res_ruimte_opstel_key)
                         AS res_ruimte_key,
                      res_rsv_artikel_key AS res_item_key,
                      rra.res_rsv_artikel_levering AS res_reservering_van,
                      res_rsv_ruimte_tot AS res_reservering_tot,
                      rra.res_rsv_artikel_aantal AS aantal,
                         LTRIM (ra.res_artikel_omschrijving)
                      || ' ('
                      || COALESCE (ra.res_artikel_eenheid, '')
                      || ')'
                         AS res_voorziening,
                      ra.res_discipline_key AS res_ins_discipline_key,
                      rra.res_status_bo_key,
                      ra.res_artikel_key AS res_artikel_key,
                      rra.res_rsv_artikel_prijs AS prijs,
                      ra.res_artikel_prijs / rra.res_rsv_artikel_aantal
                         AS stuks_prijs,
                      TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                      ra.res_artikel_nr AS artikelnummer,
                      ra.res_artikel_groep AS artikel_groep,
                      fac.gettrackinguserkey ('RESAFM',
                                              rra.res_rsv_artikel_key)
                         afmelder_key,
                      fac.gettrackingdate ('RESAFM', rra.res_rsv_artikel_key)
                         afmeld_datum
               FROM   res_v_aanwezigrsv_artikel rra,
                      res_v_aanwezigrsv_ruimte rrr,
                      res_artikel ra
              WHERE   rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                      AND rra.res_artikel_key = ra.res_artikel_key
                      AND rra.res_rsv_artikel_levering BETWEEN SYSDATE - 7
                                                           AND  SYSDATE + 14
                      AND TO_CHAR (rra.res_rsv_artikel_levering, 'WW') IN
                               (TO_CHAR (SYSDATE, 'WW'),
                                TO_CHAR (SYSDATE + 7, 'WW'))) res_geg,
            res_rsv_ruimte rrr,
            alg_v_ruimte_gegevens ruimte_geg,
            (  SELECT   res_ruimte_opstel_key,
                        res_ruimte_nr,
                        MIN (alg_ruimte_key) alg_ruimte_key
                 FROM   res_ruimte_opstelling rro,
                        res_alg_ruimte rar,
                        res_ruimte rr
                WHERE       rro.res_ruimte_key = rar.res_ruimte_key
                        AND rr.res_ruimte_key = rar.res_ruimte_key
                        AND rar.res_alg_ruimte_verwijder IS NULL
             GROUP BY   res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
            alg_locatie l
    WHERE   res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
            AND rrr.res_ruimte_opstel_key =
                  opstelalg.res_ruimte_opstel_key(+)
            AND ruimte_geg.alg_ruimte_key =
                  COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)
            AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
            AND res_geg.res_status_bo_key < 5
/

-- Dummy export NACHTWERK!
/* Formatted on 29-11-2010 16:25:20 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_export_nachtwerk (RESULT, result_order)
AS
   SELECT '', 0
     FROM DUAL
    WHERE 1 = 0
/

CREATE OR REPLACE PROCEDURE allv_select_nachtwerk (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count          NUMBER;
BEGIN
   v_count := 0;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
         'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname,
                    'E',
                    'Proces NACHTWERK afgebroken!',
                    v_errormsg);
      COMMIT;
END allv_select_nachtwerk;
/

/* Formatted on 14-1-2013 12:08:42 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_imp_bes_artikel_sync
(
   fclt_f_catalogusnaam,
   leverancier,
   catdatum,
   artikelnr,
   groep,
   omschrijving,
   prijs,
   eenheid,
   picture,
   orderaantal,
   tax,
   duedate,
   inkoopprijs,
   minimum,
   staffeltabel,
   wijzigdagen,
   annuleerdagen
)
AS
   SELECT   td.ins_discipline_omschrijving,
            b.prs_bedrijf_naam,
            TO_CHAR (td.ins_discipline_aanmaak, 'yyyymmdd'),
            sd.bes_srtdeel_nr,
            sg.bes_srtgroep_omschrijving,
            sd.bes_srtdeel_omschrijving,
            TO_CHAR (bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)),
            sd.bes_srtdeel_eenheid,
            sd.bes_srtdeel_image,
            TO_CHAR (sd.bes_srtdeel_veelvoud),
            TO_CHAR (sd.bes_srtdeel_btw),
            TO_CHAR (sd.bes_srtdeel_vervaldatum, 'yyyymmdd'),
            TO_CHAR (bes.getsrtdeelinkprijs (sd.bes_srtdeel_key, NULL)),
            NULL,
            bs.bes_staffeltabel_naam,
            sd.bes_srtdeel_wijzigdagen,
            sd.bes_srtdeel_annuleerdagen
     FROM   ins_tab_discipline td,
            bes_srtgroep sg,
            bes_srtdeel sd,
            prs_bedrijf b,
            bes_staffeltabel bs
    WHERE       td.ins_discipline_module = 'BES'
            AND td.ins_discipline_verwijder IS NULL
            AND td.ins_discipline_key = sg.ins_discipline_key
            AND sg.bes_srtgroep_verwijder IS NULL
            AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
            AND sd.bes_srtdeel_verwijder IS NULL
            AND sd.prs_bedrijf_key = b.prs_bedrijf_key
            AND bs.bes_staffeltabel_key(+) = sd.bes_staffeltabel_key;


/* 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,
   fclt_f_catalogus,                                  -- externe catalogusnaam
   fclt_x_actueel,
   int_artikel_nr,                                    -- min. intern artikelnr
   int_artikel_oms,                        -- min. interne artikelomschrijving
   int_artikel_prijs,                             -- min. interne artikelprijs
   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_geleverd,                             -- UIT: daadwerkelijk geleverd
   voorraad,
   hide_f_voorraad_gisteren,
   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)
               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 extern_geleverd,
            intern.geleverd intern_geleverd,
            COALESCE (extern.geleverd, 0)
            - ROUND (
                 COALESCE (intern.geleverd, 0)
                 / COALESCE (intern.depotverdeelpct, 1),
                 2
              )
               voorraad,
            COALESCE (extern.geleverd_gisteren, 0)
            - ROUND (
                 COALESCE (intern.geleverd_gisteren, 0)
                 / COALESCE (intern.depotverdeelpct, 1),
                 2
              )
               voorraad_gisteren,
            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)
                     - ROUND (
                          COALESCE (intern.besteld, 0)
                          / COALESCE (intern.depotverdeelpct, 1),
                          2
                       )) < COALESCE (extern.vmin, 0)
               THEN
                  COALESCE (extern.vmax, 0)
                  - (COALESCE (extern.besteld, 0)
                     - ROUND (
                          COALESCE (intern.besteld, 0)
                          / COALESCE (intern.depotverdeelpct, 1),
                          2
                       ))
               ELSE
                  NULL
            END
               extern_gewenst
     FROM      (SELECT   bd.ins_discipline_key dkey, -- ext. cataloguskey (INKOOP-key)
                         bd.ins_discipline_omschrijving, -- ext. catalogusnaam
                         sd.bes_srtdeel_nr art_nr,           -- ext. artikelnr
                         sd.bes_srtdeel_omschrijving art_oms,
                         bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
                            art_prijs,
                         sd.bes_srtdeel_voorraadmin vmin,  -- ext. voorraadmin
                         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, 6, 7)
                                   AND b.bes_bestelling_key =
                                         bi.bes_bestelling_key
                                   AND bi.bes_srtdeel_key =
                                         sd.bes_srtdeel_key)
                            besteld,
                         (SELECT   SUM (bi.bes_bestelling_item_aantal)
                            FROM   bes_bestelling b, bes_bestelling_item bi
                           WHERE   b.bes_bestelling_status IN (6, 7)
                                   AND b.bes_bestelling_key =
                                         bi.bes_bestelling_key
                                   AND bi.bes_srtdeel_key =
                                         sd.bes_srtdeel_key)
                            geleverd,
                         (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 IN (6, 7)
                                   AND b.bes_bestelling_key =
                                         bi.bes_bestelling_key
                                   AND bi.bes_srtdeel_key =
                                         sd.bes_srtdeel_key)
                            geleverd_gisteren
                  FROM   bes_srtdeel sd, -- ook de verwijderde (igv. punchout)!
                         bes_srtgroep g,
                         bes_discipline bd,
                         bes_disc_params dp
                 WHERE   sd.bes_srtgroep_key = g.bes_srtgroep_key
                         AND g.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.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)
                         intern.ins_discipline_omschrijving,  -- ext. cat.naam
                         intern.match_nr,                    -- ext. artikelnr
                         intern.art_nr,               -- min. intern artikelnr
                         intern.art_oms,   -- min. interne artikelomschrijving
                         intern.art_prijs,        -- min. interne artikelprijs
                         intern.depotverdeelpct,
                         besteld.aantal besteld,
                         besteld.geleverd geleverd,
                         besteld_gisteren.aantal besteld_gisteren,
                         besteld_gisteren.geleverd geleverd_gisteren
                  FROM         (  SELECT   bde.ins_discipline_key dkey,
                                           bde.ins_discipline_omschrijving,
                                           sd.bes_srtdeel_nr match_nr,
                                           MIN(COALESCE (
                                                  SUBSTR (
                                                     sd.bes_srtdeel_omschrijving,
                                                     INSTR (
                                                        sd.bes_srtdeel_omschrijving,
                                                        '['
                                                     )
                                                     + 1,
                                                     INSTR (
                                                        sd.bes_srtdeel_omschrijving,
                                                        ']'
                                                     )
                                                     - 2
                                                  ),
                                                  sd.bes_srtdeel_nr
                                               ))
                                              art_nr,
                                           MIN (sd.bes_srtdeel_omschrijving)
                                              art_oms,
                                           MIN(bes.getsrtdeelprijs (
                                                  sd.bes_srtdeel_key,
                                                  NULL
                                               ))
                                              art_prijs,
                                           MAX(DECODE (
                                                  sd.bes_srtdeel_depotverdeelpct,
                                                  NULL,
                                                  1,
                                                  0,
                                                  1,
                                                  sd.bes_srtdeel_depotverdeelpct
                                               ))
                                              depotverdeelpct
                                    FROM   bes_srtdeel sd,
                                           bes_srtgroep g,
                                           bes_discipline bdi,
                                           bes_disc_params dp,
                                           bes_discipline bde
                                   WHERE   sd.bes_srtdeel_verwijder IS NULL
                                           AND sd.bes_srtgroep_key =
                                                 g.bes_srtgroep_key
                                           AND g.ins_discipline_key =
                                                 bdi.ins_discipline_key
                                           AND bdi.ins_discipline_key =
                                                 dp.bes_ins_discipline_key
                                           AND dp.bes_ins_discipline_key_inkoop =
                                                 bde.ins_discipline_key
                                GROUP BY   bde.ins_discipline_key,
                                           bde.ins_discipline_omschrijving,
                                           bes_srtdeel_nr) intern
                            LEFT JOIN
                               (  SELECT   dp.bes_ins_discipline_key_inkoop
                                              dkey,              -- INKOOP-key
                                           sd.bes_srtdeel_nr match_nr,
                                           SUM (bi.bes_bestelling_item_aantal)
                                              aantal,
                                           SUM(DECODE (
                                                  b.bes_bestelling_status,
                                                  6,
                                                  bi.bes_bestelling_item_aantal,
                                                  7,
                                                  bi.bes_bestelling_item_aantal,
                                                  0
                                               ))
                                              geleverd
                                    FROM   bes_bestelling b,
                                           bes_bestelling_item bi,
                                           bes_srtdeel sd,
                                           bes_srtgroep g,
                                           bes_discipline bd,
                                           bes_disc_params dp
                                   WHERE   b.bes_bestelling_key =
                                              bi.bes_bestelling_key
                                           AND bi.bes_srtdeel_key =
                                                 sd.bes_srtdeel_key
                                           AND sd.bes_srtdeel_verwijder IS NULL
                                           AND sd.bes_srtgroep_key =
                                                 g.bes_srtgroep_key
                                           AND g.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
                                GROUP BY   dp.bes_ins_discipline_key_inkoop,
                                           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
                                        sd.bes_srtdeel_nr match_nr,
                                        SUM (bi.bes_bestelling_item_aantal)
                                           aantal,
                                        SUM(DECODE (
                                               b.bes_bestelling_status,
                                               6,
                                               bi.bes_bestelling_item_aantal,
                                               7,
                                               bi.bes_bestelling_item_aantal,
                                               0
                                            ))
                                           geleverd
                                 FROM   bes_bestelling b,
                                        bes_bestelling_item bi,
                                        bes_srtdeel sd,
                                        bes_srtgroep g,
                                        bes_discipline bd,
                                        bes_disc_params dp
                                WHERE   b.bes_bestelling_datum <
                                           TRUNC (SYSDATE)
                                        AND b.bes_bestelling_key =
                                              bi.bes_bestelling_key
                                        AND bi.bes_srtdeel_key =
                                              sd.bes_srtdeel_key
                                        AND sd.bes_srtdeel_verwijder IS NULL
                                        AND sd.bes_srtgroep_key =
                                              g.bes_srtgroep_key
                                        AND g.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
                             GROUP BY   dp.bes_ins_discipline_key_inkoop,
                                        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.art_nr = intern.match_nr
    WHERE   intern.art_nr IS NOT NULL;

-- Bevat CUST01/02-notificaties (eind van de dag) naar magazijn-medewerkers
-- dat 1 of meer producten onder de minimale voorraad zitten!
/* Formatted on 10-12-2010 16:34:34 (QP5 v5.115.810.9015) */
/*
CREATE OR REPLACE VIEW allv_v_noti_voorraadreminder
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey
)
AS
   SELECT   DISTINCT sn.fac_srtnotificatie_code,
                     NULL,
                     gg.prs_perslid_key,
                     sn.fac_srtnotificatie_oms,
                     (SELECT   fac_usrrap_key
                        FROM   fac_usrrap
                       WHERE   fac_usrrap_view_name = 'allv_v_rap_voorraad'),
                     NULL,
                     NULL,
                     NULL
     FROM   allv_v_rap_voorraad v,
            fac_gebruikersgroep gg,
            fac_srtnotificatie sn
    WHERE       v.voorraad < v.min_voorraad
            AND v.hide_f_voorraad_gisteren >= v.min_voorraad
            AND v.hide_f_extern_diskey = 561   -- Representatiegeschenken-cat.
            AND gg.fac_groep_key = 61          -- COMM/Representatiegeschenken
            AND sn.fac_srtnotificatie_code = 'CUST01'
   UNION ALL
   SELECT   DISTINCT sn.fac_srtnotificatie_code,
                     NULL,
                     gg.prs_perslid_key,
                     sn.fac_srtnotificatie_oms,
                     (SELECT   fac_usrrap_key
                        FROM   fac_usrrap
                       WHERE   fac_usrrap_view_name = 'allv_v_rap_voorraad'),
                     NULL,
                     NULL,
                     NULL
     FROM   allv_v_rap_voorraad v,
            fac_gebruikersgroep gg,
            fac_srtnotificatie sn
    WHERE       v.voorraad < v.min_voorraad
            AND v.hide_f_voorraad_gisteren >= v.min_voorraad
            AND v.hide_f_extern_diskey = 562        -- Bestuursgeschenken-cat.
            AND gg.fac_groep_key = 121              -- COMM/Bestuursgeschenken
            AND sn.fac_srtnotificatie_code = 'CUST02';
*/

BEGIN fac.registercustversion('ALLV', 6); END;
/
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
COMMIT;
spool off
