--
-- $Id$
--
-- Script containing customer specific db-configuration for IVET.

DEFINE thisfile = 'IVET.SQL'
DEFINE dbuser   = '^IVET'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF

------ payload begin ------

CREATE OR REPLACE VIEW ivet_v_import_log
AS
   SELECT   imp_log_status fclt_f_status,
            imp_log_omschrijving omschrijving,
            imp_log_hint opmerking
     FROM   imp_log l
    WHERE   l.fac_import_key = (SELECT   MAX (fac_import_key)
                                  FROM   fac_import
                                 WHERE   fac_import_app_key = 21);

-- IVET#25262: Van SAP_ID naar WIN_ID!
/* Formatted on 30-1-2013 10:24:44 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE ivet_import_prs (p_import_key IN NUMBER)
IS
   c_fielddelimitor                VARCHAR2 (1) := ';';
   -- LET OP: moet idem zijn als declaratie bij IVET_UPDATE_PRS
   v_newline                       VARCHAR2 (1000);              -- Input line
   v_aanduiding                    VARCHAR2 (200);
   v_errorhint                     VARCHAR2 (1000);
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER := 0;
   v_ongeldig                      NUMBER (1);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_count                         NUMBER;
   -- De importvelden:
   v_sap_id                        VARCHAR2 (256);
   v_pers_nr                       VARCHAR2 (256);
   v_win_id                        VARCHAR2 (256);
   v_prs_perslid_titel             VARCHAR2 (256);
   v_prs_perslid_naam              VARCHAR2 (256);
   v_prs_perslid_tussenvoegsel     VARCHAR2 (256);
   v_prs_perslid_voorletters       VARCHAR2 (256);
   v_prs_perslid_voornaam          VARCHAR2 (256);
   v_prs_afdeling_naam             VARCHAR2 (256);
   v_prs_afdeling_omschrijving     VARCHAR2 (256);
   v_prs_srtperslid_omschrijving   VARCHAR2 (256);
   v_kantoor                       VARCHAR2 (256);
   v_prs_perslid_telefoonnr        VARCHAR2 (256);
   v_prs_perslid_email             VARCHAR2 (256);
   v_prs_perslid_oslogin           VARCHAR2 (256);
   v_prs_perslid_ingangsdatum      VARCHAR2 (256);
   v_prs_perslid_einddatum         VARCHAR2 (256);
   v_postadres                     VARCHAR2 (256);
   -- Overig:
   v_alg_gebouw_code               VARCHAR2 (256);
   v_alg_verdieping_code           VARCHAR2 (256);
   v_alg_ruimte_nr                 VARCHAR2 (256);
   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   ivet_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_sap_id);
         -- 02
         fac.imp_getfield (v_newline, c_fielddelimitor, v_pers_nr);
         -- 03
         fac.imp_getfield (v_newline, c_fielddelimitor, v_win_id);
         -- 04
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_titel);
         -- 05
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
         -- 06
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_tussenvoegsel);
         -- 07
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_voorletters);
         -- 08
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_voornaam);
         -- 09
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
         -- 10
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_afdeling_omschrijving);
         -- 11
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_srtperslid_omschrijving);
         -- 12
         fac.imp_getfield (v_newline, c_fielddelimitor, v_kantoor);
         -- 13
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_telefoonnr);
         -- 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);
         -- 17
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_einddatum);
         -- 18
         fac.imp_getfield (v_newline, c_fielddelimitor, v_postadres);
         --
         v_aanduiding :=
               '['
            || v_sap_id
            || '|'
            || 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_sap_id) = 'SAP-ID'
               AND UPPER (v_pers_nr) = 'PERSONEELSNUMMER'
               AND UPPER (v_win_id) = 'WIN-ID'
               AND UPPER (v_prs_perslid_titel) = 'TITEL'
               AND UPPER (v_prs_perslid_naam) = 'NAAM'
               AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSEL'
               AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS'
               AND UPPER (v_prs_perslid_voornaam) = 'VOORNAAM'
               AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE'
               AND UPPER (v_prs_afdeling_omschrijving) =
                     'AFDELINGSOMSCHRIJVING'
               AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
               AND UPPER (v_kantoor) = 'KANTOOR'
               AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOON'
               AND UPPER (v_prs_perslid_email) = 'EMAIL'
               AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM'
               AND UPPER (v_prs_perslid_ingangsdatum) = 'INDIENSTDATUM'
               AND UPPER (v_prs_perslid_einddatum) = 'UITDIENSTDATUM'
            --AND UPPER (v_prs_perslid_einddatum) = 'POSTADRES'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errorhint := 'Ongeldige SAP-ID';
            v_sap_id := TRIM (v_sap_id);

            IF v_sap_id IS NULL OR LENGTH (v_sap_id) > 16
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'SAP-ID onbekend/te lang',
                  'SAP-ID is verplicht; regel wordt overgeslagen!'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldig personeelsnummer';
            v_pers_nr := TRIM (v_pers_nr);

            IF LENGTH (v_pers_nr) > 50
            THEN
               v_pers_nr := SUBSTR (v_pers_nr, 1, 50);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Personeelsnummer te lang',
                     'Personeelsnummer wordt afgebroken tot ['
                  || v_pers_nr
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige WIN-ID';
            v_win_id := TRIM (v_win_id);

            IF v_win_id IS NULL OR LENGTH (v_win_id) > 100
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'WIN-ID onbekend/te lang',
                  'WIN-ID is verplicht; regel wordt overgeslagen!'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige titel';
            v_prs_perslid_titel := TRIM (v_prs_perslid_titel);

            IF LENGTH (v_prs_perslid_titel) > 15
            THEN
               v_prs_perslid_titel := SUBSTR (v_prs_perslid_titel, 1, 15);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Titel te lang',
                     'Titel wordt afgebroken tot ['
                  || v_prs_perslid_titel
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige naam';
            v_prs_perslid_naam := TRIM (v_prs_perslid_naam);

            IF LENGTH (v_prs_perslid_naam) > 30
            THEN
               v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Naam te lang',
                  'Naam wordt afgebroken tot [' || v_prs_perslid_naam || ']'
               );
               COMMIT;
            ELSE
               IF (v_prs_perslid_naam IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (
                     p_import_key,
                     'E',
                     v_aanduiding || 'Naam onbekend',
                     'Naam is verplicht; regel wordt overgeslagen!'
                  );
                  COMMIT;
               END IF;
            END IF;

            --
            v_errorhint := 'Ongeldig tussenvoegsel';
            v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);

            IF LENGTH (v_prs_perslid_tussenvoegsel) > 10
            THEN
               v_prs_perslid_tussenvoegsel :=
                  SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Tussenvoegsel te lang',
                     'Tussenvoegsel wordt afgebroken tot ['
                  || v_prs_perslid_tussenvoegsel
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige voorletters';
            v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);

            IF LENGTH (v_prs_perslid_voorletters) > 10
            THEN
               v_prs_perslid_voorletters :=
                  SUBSTR (v_prs_perslid_voorletters, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Voorletters te lang',
                     'Voorletters worden afgebroken tot ['
                  || v_prs_perslid_voorletters
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige voornaam';
            v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);

            IF LENGTH (v_prs_perslid_voornaam) > 30
            THEN
               v_prs_perslid_voornaam :=
                  SUBSTR (v_prs_perslid_voornaam, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Voornaam is te lang',
                     'Voornaam wordt afgebroken tot ['
                  || v_prs_perslid_voornaam
                  || ']'
               );
               COMMIT;
            ELSE
               IF (v_prs_perslid_voornaam IS NULL)
               THEN
                  v_prs_perslid_voornaam := '-';
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || 'Voornaam onbekend',
                                    'Voornaam wordt gezet op [-]');
                  COMMIT;
               END IF;
            END IF;

            --
            v_errorhint := 'Ongeldige afdelingscode';
            v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);

            IF LENGTH (v_prs_afdeling_naam) > 10
            THEN
               v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Afdelingscode te lang',
                     'Afdelingscode wordt afgebroken tot ['
                  || v_prs_afdeling_naam
                  || ']'
               );
               COMMIT;
            ELSE
               IF (v_prs_afdeling_naam IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (
                     p_import_key,
                     'E',
                     v_aanduiding || 'Afdelingscode onbekend',
                     'Afdelingscode is verplicht; regel wordt overgeslagen!'
                  );
                  COMMIT;
               END IF;
            END IF;

            --
            v_errorhint := 'Ongeldige afdelingsomschrijving';
            v_prs_afdeling_omschrijving := TRIM (v_prs_afdeling_omschrijving);

            IF LENGTH (v_prs_afdeling_omschrijving) > 60
            THEN
               v_prs_afdeling_omschrijving :=
                  SUBSTR (v_prs_afdeling_omschrijving, 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Afdelingsomschrijving te lang',
                     'Afdelingsomschrijving wordt afgebroken tot ['
                  || v_prs_afdeling_omschrijving
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldige functie';
            v_prs_srtperslid_omschrijving :=
               TRIM (v_prs_srtperslid_omschrijving);

            IF LENGTH (v_prs_srtperslid_omschrijving) > 60
            THEN
               v_prs_srtperslid_omschrijving :=
                  SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Functie te lang',
                     'Functie wordt afgebroken tot ['
                  || v_prs_srtperslid_omschrijving
                  || ']'
               );
               COMMIT;
            ELSE
               IF (v_prs_srtperslid_omschrijving IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (
                     p_import_key,
                     'E',
                     v_aanduiding || 'Functie onbekend',
                     'Functie is verplicht; regel wordt overgeslagen!'
                  );
                  COMMIT;
               END IF;
            END IF;

            -- LET OP: Kantoor wordt uitgesplitst naar gebouw, verdieping en ruimte!
            v_errorhint := 'Ongeldige locatieomschrijving';
            v_kantoor := TRIM (v_kantoor);
            -- Neem tekens voor de - (streep) en vervang v_kantoor door tekens na de streep.
            v_errorhint := 'Ongeldige gebouwcode';
            v_alg_gebouw_code :=
               SUBSTR (v_kantoor, 1, INSTR (v_kantoor,
                                            '-',
                                            1,
                                            1)
                                     - 1);
            v_kantoor :=
               SUBSTR (v_kantoor, INSTR (v_kantoor,
                                         '-',
                                         1,
                                         1)
                                  + 1);

            IF LENGTH (v_alg_gebouw_code) > 10
            THEN
               v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Gebouwcode te lang',
                     'Aanduiding wordt afgebroken tot ['
                  || v_alg_gebouw_code
                  || ']'
               );
               COMMIT;
            END IF;

            -- Neem tekens voor de . (punt) en vervang v_kantoor door tekens na de punt.
            v_errorhint := 'Ongeldige verdiepingcode';
            v_alg_verdieping_code :=
               SUBSTR (v_kantoor, 1, INSTR (v_kantoor,
                                            '.',
                                            1,
                                            1)
                                     - 1);
            v_kantoor :=
               SUBSTR (v_kantoor, INSTR (v_kantoor,
                                         '.',
                                         1,
                                         1)
                                  + 1);

            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',
                     'Aanduiding wordt afgebroken tot ['
                  || v_alg_verdieping_code
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldig ruimtenummer';
            v_alg_ruimte_nr := v_kantoor; -- v_kantoor bevat nu het gedeelte na de punt.

            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',
                     'Aanduiding wordt afgebroken tot ['
                  || v_alg_ruimte_nr
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldig telefoonnummer';
            v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);

            IF LENGTH (v_prs_perslid_telefoonnr) > 15
            THEN
               v_prs_perslid_telefoonnr :=
                  SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Telefoonnummer te lang',
                     'Telefoonnummer wordt afgebroken tot ['
                  || v_prs_perslid_telefoonnr
                  || ']'
               );
               COMMIT;
            END IF;

            --
            v_errorhint := 'Ongeldig e-mailadres';
            v_prs_perslid_email := TRIM (v_prs_perslid_email);

            IF LENGTH (v_prs_perslid_email) > 50
            THEN
               v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 50);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'E-mailadres te lang',
                     'E-mailadres wordt afgebroken tot ['
                  || v_prs_perslid_email
                  || ']'
               );
               COMMIT;
            END IF;

            --
            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;

            --
            v_errorhint := 'Ongeldig postadres';
            v_postadres := TRIM (v_postadres);

            IF LENGTH (v_postadres) > 30
            THEN
               v_postadres := SUBSTR (v_postadres, 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Postadres te lang',
                  'Postadres wordt afgebroken tot [' || v_postadres || ']'
               );
               COMMIT;
            END IF;

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errorhint :=
                     'Fout bij toevoegen regel aan importtabel IVET_IMP_PRS';

                  INSERT INTO ivet_imp_prs (imp_datum,
                                            sap_id,
                                            pers_nr,
                                            win_id,
                                            prs_perslid_titel,
                                            prs_perslid_naam,
                                            prs_perslid_tussenvoegsel,
                                            prs_perslid_voorletters,
                                            prs_perslid_voornaam,
                                            prs_afdeling_naam,
                                            prs_afdeling_omschrijving,
                                            prs_srtperslid_omschrijving,
                                            alg_gebouw_code,
                                            alg_verdieping_code,
                                            alg_ruimte_nr,
                                            prs_perslid_telefoonnr,
                                            prs_perslid_email,
                                            prs_perslid_oslogin,
                                            prs_perslid_ingangsdatum,
                                            prs_perslid_einddatum,
                                            postadres)
                    VALUES   (SYSDATE,
                              v_sap_id,
                              v_pers_nr,
                              v_win_id,
                              v_prs_perslid_titel,
                              v_prs_perslid_naam,
                              v_prs_perslid_tussenvoegsel,
                              v_prs_perslid_voorletters,
                              v_prs_perslid_voornaam,
                              v_prs_afdeling_naam,
                              v_prs_afdeling_omschrijving,
                              v_prs_srtperslid_omschrijving,
                              v_alg_gebouw_code,
                              v_alg_verdieping_code,
                              v_alg_ruimte_nr,
                              v_prs_perslid_telefoonnr,
                              v_prs_perslid_email,
                              v_prs_perslid_oslogin,
                              v_prs_perslid_ingangs_date,
                              v_prs_perslid_eind_date,
                              v_postadres);

                  COMMIT;
                  v_count_import := v_count_import + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg :=
                           v_errorhint
                        || ' ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog (
                        p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Ingelezen regel kan niet worden weggeschreven!'
                     );
                     COMMIT;
               END;
            END IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (
         p_import_key,
         'S',
         'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Persoon: aantal ongeldige importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
         'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        v_errorhint);
      COMMIT;
END ivet_import_prs;
/

-- IVET#25262: Van SAP_ID naar WIN_ID!
/* Formatted on 12-9-2013 10:20:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE ivet_update_prs (p_import_key IN NUMBER)
IS
   -- LET OP: moet idem zijn als declaratie bij IVET_IMPORT_PRS
   c_persoon_inactief       VARCHAR2 (30) := 'INACTIEF: ';
   -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een e-mail
   c_max_delta_percentage   NUMBER (10) := 20;
   -- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
   c_gebouw_code            VARCHAR2 (10) := 'PP001';
   c_ruimte_nr              VARCHAR2 (10) := '000';
   -- Groep waar personen in geplaatst worden (indien nog geen groep)
   c_groep_upper            VARCHAR2 (30) := '_DEFAULT';
   c_profiel_omschrijving   VARCHAR2 (30) := 'DEFAULT';
   c_postadres_kkey         NUMBER (10) := 1000;
   c_win_id_kkey            NUMBER (10) := 1020;
   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_srtperslid_key         NUMBER (10);
   v_afdeling_key           NUMBER (10);
   v_kostenplaats_key       NUMBER (10);
   v_perslid_key            NUMBER (10);
   v_kenmerklink_key        NUMBER (10);
   v_district_key           NUMBER (10);
   v_gebouw_key             NUMBER (10);
   v_gebouw_code            VARCHAR2 (10);
   v_verdieping_key         NUMBER (10);
   v_ruimte_key             NUMBER (10);
   v_ruimte_nr              VARCHAR2 (10);
   v_wp_volgnr              NUMBER (3);
   v_wp_oms                 VARCHAR2 (30);
   v_wp_key                 NUMBER (10);
   v_groep_key              NUMBER (10);
   v_profiel_key            NUMBER (10);

   -- Let op! Personen die niet meer in dienst zijn -> niet in ivet_imp_prs!
   -- Dubbele WIN-IDs? 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, prs_v_aanwezigkenmerklink kl
       WHERE   p.prs_perslid_key = kl.prs_link_key
               AND kl.prs_kenmerk_key = c_win_id_kkey
               AND NOT EXISTS
                     (SELECT   1
                        FROM   ivet_imp_prs ip
                       WHERE   UPPER (ip.win_id) =
                                  UPPER (kl.prs_kenmerklink_waarde));

   -- Let op! Personen die niet meer in dienst zijn -> niet in ivet_imp_prs!
   CURSOR csrtperslid
   IS
        SELECT   MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
          FROM   ivet_imp_prs
      GROUP BY   UPPER (prs_srtperslid_omschrijving);

   -- Let op! Personen die niet meer in dienst zijn -> niet in ivet_imp_prs!
   -- Dubbele WIN-IDs? Dan wordt slechts 1 set persoongegevens toegevoegd!
   -- Ook wordt in deze loop de afdelingsomschrijving eventueel bijgewerkt!
   CURSOR cperslid
   IS
      SELECT   * FROM ivet_imp_prs;

   -- Let op! Personen die niet meer in dienst zijn -> niet in ivet_imp_prs!
   -- Dubbele WIN-IDs? Dan krijgt iemand mogelijk de verkeerde plaats!
   CURSOR cwp
   IS
      SELECT   p.*,
               ip.win_id,
               ip.alg_gebouw_code,
               ip.alg_verdieping_code,
               ip.alg_verdieping_code || '.' || ip.alg_ruimte_nr
                  alg_ruimte_nr
        FROM   ivet_imp_prs ip,
               prs_v_aanwezigkenmerklink kl,
               prs_v_aanwezigperslid p
       WHERE       UPPER (ip.win_id) = UPPER (kl.prs_kenmerklink_waarde)
               AND kl.prs_kenmerk_key = c_win_id_kkey
               AND kl.prs_link_key = p.prs_perslid_key;

   -- Alle actieve personen met WIN-ID (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, prs_v_aanwezigkenmerklink kl
       WHERE       p.prs_perslid_key = kl.prs_link_key
               AND kl.prs_kenmerk_key = c_win_id_kkey
               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 WIN-ID (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, prs_v_aanwezigkenmerklink kl
       WHERE   p.prs_perslid_key = kl.prs_link_key
               AND kl.prs_kenmerk_key = c_win_id_kkey
               AND NOT EXISTS
                     (SELECT   1
                        FROM   fac_gebruikersgroep g
                       WHERE   g.prs_perslid_key = p.prs_perslid_key);
BEGIN
   -- Bepaal WIN-ID-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 IVET_IMP_PRS).
   SELECT   COUNT ( * )
     INTO   v_count_prs_import
     FROM   prs_v_aanwezigperslid p,
            prs_v_aanwezigkenmerklink kl,
            ivet_imp_prs ip
    WHERE       p.prs_perslid_key = kl.prs_link_key
            AND kl.prs_kenmerk_key = c_win_id_kkey
            AND UPPER (kl.prs_kenmerklink_waarde) = UPPER (ip.win_id)
            AND (ip.imp_datum + 0.01) > SYSDATE;

   -- Bepaal huidig aantal actieve personen met WIN_ID in Facilitor.
   SELECT   DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
     INTO   v_count_prs_actual
     FROM   prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
    WHERE   p.prs_perslid_key = kl.prs_link_key
            AND kl.prs_kenmerk_key = c_win_id_kkey;

   IF ( (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) >=
            (100 - c_max_delta_percentage)))
   THEN
      -- Geldig importbestand wat betreft aantal personen
      v_errorhint := 'Fout bij bepalen profiel';

      SELECT   MAX (fac_profiel_key), COUNT ( * )
        INTO   v_profiel_key, v_count
        FROM   fac_profiel
       WHERE   UPPER (TRIM (fac_profiel_omschrijving)) =
                  c_profiel_omschrijving;

      IF (v_count = 0)
      THEN
         fac.imp_writelog (
            p_import_key,
            'I',
               'Standaard profiel ['
            || c_profiel_omschrijving
            || '] niet gevonden.',
            'Personen zonder profiel kunnen niet worden gekoppeld aan een profiel.'
         );
         COMMIT;
      END IF;

      FOR recdelprs IN cdelprs
      LOOP
         BEGIN
            v_aanduiding :=
                  recdelprs.prs_perslid_nr
               || '|'
               || recdelprs.prs_perslid_naam
               || '|'
               || recdelprs.prs_perslid_voornaam
               || ' - ';
            v_errorhint := 'Fout bij bepalen verplichtingen';

            -- Heeft persoon actuele/toekomstige verplichtingen?
            SELECT   COUNT ( * )
              INTO   v_count
              FROM   prs_perslid p, prs_v_verplichting_keys r
             WHERE   p.prs_perslid_key = r.prs_perslid_key
                     AND p.prs_perslid_key = recdelprs.prs_perslid_key;

            IF v_count = 0
            THEN
               v_errorhint := 'Fout bij verwijderen persoon';

               UPDATE   prs_perslid
                  SET   prs_perslid_verwijder = SYSDATE
                WHERE   prs_perslid_key = recdelprs.prs_perslid_key;

               fac.imp_writelog (
                  p_import_key,
                  'I',
                     'Persoon met SAP-ID ['
                  || 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 SAP-ID ['
                     || 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 SAP-ID ['
                     || 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_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.sap_id
               || '|'
               || recperslid.prs_perslid_naam
               || '|'
               || recperslid.prs_perslid_voornaam
               || ' - ';
            v_errorhint :=
                  'Fout bij bepalen functie ['
               || recperslid.prs_srtperslid_omschrijving
               || ']';

            SELECT   prs_srtperslid_key
              INTO   v_srtperslid_key
              FROM   prs_v_aanwezigsrtperslid
             WHERE   UPPER (prs_srtperslid_omschrijving) =
                        UPPER (recperslid.prs_srtperslid_omschrijving);

            v_errorhint :=
                  'Fout bij bepalen afdeling ['
               || recperslid.prs_afdeling_naam
               || ']';

            SELECT   prs_afdeling_key
              INTO   v_afdeling_key
              FROM   prs_v_aanwezigafdeling
             WHERE   prs_afdeling_upper =
                        UPPER (recperslid.prs_afdeling_naam);

            v_errorhint :=
                  'Fout bij wijzigen afdelingsomschrijving ['
               || recperslid.prs_afdeling_naam
               || '|'
               || recperslid.prs_afdeling_omschrijving
               || ']';

            UPDATE   prs_afdeling
               SET   prs_afdeling_omschrijving =
                        COALESCE (recperslid.prs_afdeling_omschrijving,
                                  prs_afdeling_omschrijving)
             WHERE   prs_afdeling_key = v_afdeling_key;

            COMMIT;

            v_errorhint :=
                  'Fout bij bepalen kostenplaats ['
               || recperslid.prs_afdeling_naam
               || ']';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   prs_v_aanwezigkostenplaats
             WHERE   prs_kostenplaats_upper =
                        UPPER (recperslid.prs_afdeling_naam);

            IF v_count = 1
            THEN
               SELECT   prs_kostenplaats_key
                 INTO   v_kostenplaats_key
                 FROM   prs_v_aanwezigkostenplaats
                WHERE   prs_kostenplaats_upper =
                           UPPER (recperslid.prs_afdeling_naam);

               v_errorhint :=
                     'Fout bij wijzigen kostenplaatsomschrijving ['
                  || recperslid.prs_afdeling_naam
                  || '|'
                  || recperslid.prs_afdeling_omschrijving
                  || ']';

               UPDATE   prs_kostenplaats
                  SET   prs_kostenplaats_omschrijving =
                           COALESCE (recperslid.prs_afdeling_omschrijving,
                                     prs_kostenplaats_omschrijving)
                WHERE   prs_kostenplaats_key = v_kostenplaats_key;

               COMMIT;
            ELSE
               fac.imp_writelog (
                  p_import_key,
                  'I',
                  v_aanduiding || v_errorhint,
                  'Kostenplaats volgens afdeling bestaat niet!'
               );
               COMMIT;
            END IF;

            v_errorhint := 'Fout bij bepalen persoon';

            SELECT   COUNT ( * ), MAX (prs_perslid_key)
              INTO   v_count, v_perslid_key
              FROM   prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
             WHERE   p.prs_perslid_key = kl.prs_link_key
                     AND kl.prs_kenmerk_key = c_win_id_kkey
                     AND UPPER (kl.prs_kenmerklink_waarde) =
                           UPPER (recperslid.win_id);

            IF v_count > 1
            THEN
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errorhint,
                                 'Kan persoon niet 1-duidig bepalen!');
               COMMIT;
            ELSE
               IF v_count = 0
               THEN
                  v_errorhint := 'Fout bij toevoegen persoon';

                  INSERT INTO prs_perslid (
                                              prs_perslid_module,
                                              prs_srtperslid_key,
                                              prs_afdeling_key,
                                              prs_perslid_nr,
                                              prs_perslid_naam,
                                              prs_perslid_tussenvoegsel,
                                              prs_perslid_voorletters,
                                              prs_perslid_voornaam,
                                              prs_perslid_titel,
                                              prs_perslid_telefoonnr,
                                              prs_perslid_email,
                                              prs_perslid_oslogin,
                                              prs_perslid_ingangsdatum,
                                              prs_perslid_einddatum,
                                              fac_profiel_key
                              )
                     VALUES   (
                                  'PRS',
                                  v_srtperslid_key,
                                  v_afdeling_key,
                                  recperslid.sap_id,
                                  recperslid.prs_perslid_naam,
                                  recperslid.prs_perslid_tussenvoegsel,
                                  recperslid.prs_perslid_voorletters,
                                  recperslid.prs_perslid_voornaam,
                                  recperslid.prs_perslid_titel,
                                  recperslid.prs_perslid_telefoonnr,
                                  recperslid.prs_perslid_email,
                                  recperslid.prs_perslid_oslogin,
                                  COALESCE (
                                     recperslid.prs_perslid_ingangsdatum,
                                     SYSDATE
                                  ),
                                  recperslid.prs_perslid_einddatum,
                                  v_profiel_key
                              )
                  RETURNING   prs_perslid_key      INTO   v_perslid_key;

                  v_errorhint := 'Fout bij toevoegen WIN-ID';

                  INSERT INTO prs_kenmerklink (prs_link_key,
                                               prs_kenmerklink_niveau,
                                               prs_kenmerk_key,
                                               prs_kenmerklink_waarde)
                    VALUES   (v_perslid_key,
                              'P',
                              c_win_id_kkey,
                              recperslid.win_id);

                  COMMIT;
               ELSE
                  v_errorhint := 'Fout bij wijzigen persoon';

                  UPDATE   prs_perslid
                     SET   prs_srtperslid_key = v_srtperslid_key,
                           prs_afdeling_key = v_afdeling_key,
                           prs_perslid_naam = recperslid.prs_perslid_naam,
                           prs_perslid_tussenvoegsel =
                              recperslid.prs_perslid_tussenvoegsel,
                           prs_perslid_voorletters =
                              recperslid.prs_perslid_voorletters,
                           prs_perslid_voornaam =
                              recperslid.prs_perslid_voornaam,
                           prs_perslid_titel = recperslid.prs_perslid_titel,
                           prs_perslid_telefoonnr =
                              recperslid.prs_perslid_telefoonnr,
                           prs_perslid_email = recperslid.prs_perslid_email,
                           prs_perslid_oslogin =
                              recperslid.prs_perslid_oslogin,
                           prs_perslid_ingangsdatum =
                              COALESCE (recperslid.prs_perslid_ingangsdatum,
                                        prs_perslid_ingangsdatum),
                           prs_perslid_einddatum =
                              recperslid.prs_perslid_einddatum,
                           fac_profiel_key =
                              COALESCE (fac_profiel_key, v_profiel_key)
                   WHERE   prs_perslid_key = v_perslid_key;
               END IF;

               COMMIT;

               IF LENGTH (recperslid.postadres) > 0
               THEN
                  v_errorhint := 'Fout bij bepalen postadres';

                  SELECT   COUNT ( * ), MAX (prs_kenmerklink_key)
                    INTO   v_count, v_kenmerklink_key
                    FROM   prs_v_aanwezigkenmerklink
                   WHERE       prs_link_key = v_perslid_key
                           AND prs_kenmerklink_niveau = 'P'
                           AND prs_kenmerk_key = c_postadres_kkey;

                  IF v_count = 0
                  THEN
                     v_errorhint := 'Fout bij toevoegen postadres';

                     INSERT INTO prs_kenmerklink (prs_link_key,
                                                  prs_kenmerklink_niveau,
                                                  prs_kenmerk_key,
                                                  prs_kenmerklink_waarde)
                       VALUES   (v_perslid_key,
                                 'P',
                                 c_postadres_kkey,
                                 recperslid.postadres);
                  ELSE                                          -- v_count = 1
                     v_errorhint := 'Fout bij wijzigen postadres';

                     UPDATE   prs_kenmerklink
                        SET   prs_kenmerklink_waarde = recperslid.postadres
                      WHERE   prs_kenmerklink_key = v_kenmerklink_key;
                  END IF;

                  COMMIT;
               END IF;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint);
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (
         p_import_key,
         'S',
         '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_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 p, prs_v_aanwezigkenmerklink kl
             WHERE   p.prs_perslid_key = kl.prs_link_key
                     AND kl.prs_kenmerk_key = c_win_id_kkey
                     AND UPPER (kl.prs_kenmerklink_waarde) =
                           UPPER (recwp.win_id);

            v_district_key := NULL;
            v_gebouw_key := NULL;
            v_gebouw_code := recwp.alg_gebouw_code;
            v_verdieping_key := NULL;
            v_ruimte_key := NULL;
            v_ruimte_nr := recwp.alg_ruimte_nr;
            v_errorhint := 'Fout bij bepalen gebouw';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   alg_v_aanweziggebouw
             WHERE   alg_gebouw_upper = UPPER (v_gebouw_code);

            IF v_count = 1
            THEN
               SELECT   alg_gebouw_key
                 INTO   v_gebouw_key
                 FROM   alg_v_aanweziggebouw
                WHERE   alg_gebouw_upper = UPPER (v_gebouw_code);
            ELSE                          -- Gebouw bestaat niet (of >1 keer)!
               v_gebouw_code := c_gebouw_code;
               fac.imp_writelog (p_import_key,
                                 'I',
                                 v_aanduiding || v_errorhint,
                                 'Kan gebouw niet (1-duidig) bepalen!');
               COMMIT;
            END IF;

            v_errorhint := 'Fout bij bepalen district';

            SELECT   l.alg_district_key
              INTO   v_district_key
              FROM   alg_gebouw g, alg_locatie l
             WHERE   g.alg_gebouw_upper = UPPER (v_gebouw_code)
                     AND g.alg_locatie_key = l.alg_locatie_key;

            v_errorhint := 'Fout bij bepalen verdieping';

            IF v_gebouw_key IS NOT NULL
            THEN
               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   alg_v_aanwezigverdieping
                WHERE   alg_gebouw_key = v_gebouw_key
                        AND UPPER (alg_verdieping_code) =
                              UPPER (recwp.alg_verdieping_code);

               IF v_count = 0
               THEN
                  fac.imp_writelog (p_import_key,
                                    'I',
                                    v_aanduiding || v_errorhint,
                                    'Verdieping bestaat niet!');
                  COMMIT;
               ELSE                                     -- Verdieping bestaat!
                  SELECT   alg_verdieping_key
                    INTO   v_verdieping_key
                    FROM   alg_v_aanwezigverdieping
                   WHERE   alg_gebouw_key = v_gebouw_key
                           AND UPPER (alg_verdieping_code) =
                                 UPPER (recwp.alg_verdieping_code);
               END IF;
            END IF;

            v_errorhint := 'Fout bij bepalen ruimte';

            IF v_verdieping_key IS NOT NULL
            THEN
               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   alg_v_aanwezigruimte
                WHERE   alg_verdieping_key = v_verdieping_key
                        AND alg_ruimte_upper_nr = UPPER (recwp.alg_ruimte_nr);

               IF v_count = 0
               THEN
                  fac.imp_writelog (p_import_key,
                                    'I',
                                    v_aanduiding || v_errorhint,
                                    'Ruimte bestaat niet!');
                  COMMIT;
               ELSE                                         -- Ruimte bestaat!
                  SELECT   alg_ruimte_key
                    INTO   v_ruimte_key
                    FROM   alg_v_aanwezigruimte
                   WHERE   alg_verdieping_key = v_verdieping_key
                           AND alg_ruimte_upper_nr =
                                 UPPER (recwp.alg_ruimte_nr);
               END IF;
            END IF;

            -- Als hierboven de ruimte uit de import niet is gevonden, dan
            -- koppel de persoon aan ruimte '000' op default verdieping in
            -- gebouw uit de import (of anders 'PP001')!
            v_errorhint :=
               'Fout bij bepalen default verdieping in gebouw '
               || v_gebouw_code;

            IF v_verdieping_key IS NULL
            THEN
               SELECT   alg_verdieping_key
                 INTO   v_verdieping_key
                 FROM   alg_v_aanweziggebouw g, alg_v_aanwezigverdieping v
                WHERE   g.alg_gebouw_upper = UPPER (v_gebouw_code)
                        AND g.alg_gebouw_key = v.alg_gebouw_key
                        AND v.alg_verdieping_volgnr =
                              (SELECT   MIN (alg_verdieping_volgnr)
                                 FROM   alg_verdieping
                                WHERE   alg_gebouw_key = g.alg_gebouw_key);
            END IF;

            v_errorhint :=
               'Fout bij bepalen fictieve ruimte in gebouw ' || v_gebouw_code;

            IF v_ruimte_key IS NULL
            THEN
               v_ruimte_nr := c_ruimte_nr;

               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   alg_v_aanwezigruimte
                WHERE   alg_verdieping_key = v_verdieping_key
                        AND alg_ruimte_upper_nr = c_ruimte_nr;

               IF v_count = 0
               THEN
                  v_errorhint :=
                     'Fout bij toevoegen fictieve ruimte in gebouw '
                     || v_gebouw_code;

                  INSERT INTO alg_ruimte (
                                             alg_verdieping_key,
                                             alg_srtruimte_key,
                                             alg_ruimte_nr
                              )
                     VALUES   (v_verdieping_key, 1241,      -- Fictieve ruimte
                                                      c_ruimte_nr)
                  RETURNING   alg_ruimte_key      INTO   v_ruimte_key;

                  COMMIT;
               ELSE
                  SELECT   r.alg_ruimte_key
                    INTO   v_ruimte_key
                    FROM   alg_v_aanwezigruimte r
                   WHERE   r.alg_verdieping_key = v_verdieping_key
                           AND r.alg_ruimte_upper_nr = c_ruimte_nr;
               END IF;
            END IF;

            v_errorhint := 'Fout bij bepalen of werkplek is gewijzigd';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   prs_perslidwerkplek pw, prs_werkplek w
             WHERE       pw.prs_perslid_key = v_perslid_key
                     AND pw.prs_werkplek_key = w.prs_werkplek_key
                     AND w.prs_alg_ruimte_key = v_ruimte_key;

            IF (v_count = 0)
            THEN
               -- Verwijderen oude -niet virtuele!- werkplek(ken) in hetzelfde
               -- district!
               -- 12-03-10/MvdH: NIET verwijderen bij bezetting < 5, afgestemd
               -- dat dat -tijdelijk- speciale gevallen zijn (tbv. autorisatie;
               -- hoezo obscuur...)!
               v_errorhint := 'Fout bij verwijderen oude werkplek in district';

               IF (fac.getSetting ('prs_werkplek_implicit') = '0') --Expliciet
               THEN
                  DELETE FROM   prs_perslidwerkplek pw
                        WHERE   pw.prs_perslid_key = v_perslid_key
                                AND pw.prs_perslidwerkplek_bezetting > 5
                                AND EXISTS
                                      (SELECT   1
                                         FROM   prs_werkplek w,
                                                alg_ruimte r,
                                                alg_verdieping v,
                                                alg_gebouw g,
                                                alg_locatie l
                                        WHERE   w.prs_werkplek_virtueel = 0
                                                AND w.prs_werkplek_key = pw.prs_werkplek_key
                                                AND w.prs_alg_ruimte_key = r.alg_ruimte_key
                                                AND r.alg_verdieping_key = v.alg_verdieping_key
                                                AND v.alg_gebouw_key = g.alg_gebouw_key
                                                AND g.alg_locatie_key = l.alg_locatie_key
                                                AND l.alg_district_key = v_district_key);
               ELSE                                               -- Impliciet
                  DELETE FROM   prs_werkplek w
                        WHERE   w.prs_werkplek_virtueel = 0
                                AND EXISTS
                                      (SELECT   1
                                         FROM   prs_perslidwerkplek pw,
                                                alg_ruimte r,
                                                alg_verdieping v,
                                                alg_gebouw g,
                                                alg_locatie l
                                        WHERE   pw.prs_perslid_key =
                                                   v_perslid_key
                                                AND pw.prs_perslidwerkplek_bezetting > 5
                                                AND pw.prs_werkplek_key = w.prs_werkplek_key
                                                AND w.prs_alg_ruimte_key = r.alg_ruimte_key
                                                AND r.alg_verdieping_key = v.alg_verdieping_key
                                                AND v.alg_gebouw_key = g.alg_gebouw_key
                                                AND g.alg_locatie_key = l.alg_locatie_key
                                                AND l.alg_district_key = v_district_key);
               END IF;

               COMMIT;

               -- Persoon krijgt wp op fictieve of echte ruimte.
               PRS.movetoruimte (v_perslid_key, v_ruimte_key, NULL);
            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 SAP-ID ['
               || 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!
      UPDATE   prs_srtperslid sp
         SET   sp.prs_srtperslid_verwijder = SYSDATE
       WHERE   sp.prs_srtperslid_verwijder IS NULL
               AND NOT EXISTS
                     (SELECT   1
                        FROM   prs_v_aanwezigperslid 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 ivet_update_prs;
/

/* Formatted on 29-4-2016 11:18:05 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW ivet_v_rap_zalenzetters
(
   hide_f_sort_datum_tijd_ruimte,
   hide_f_sort_res_nr,
   hide_f_sort_categorie,
   fclt_f_datum,
   res_nr,
   begin_eind,
   tijd,
   tijd_vc,
   ruimte,
   deelnemers,
   activiteit_voorzieningen,
   budgetnummer,
   opmerking
)
AS
     SELECT DECODE (
               rrr.alg_ruimte_key,
               NULL,
               (SELECT DECODE (SUBSTR (rr.res_ruimte_nr, -1), '*', '99')
                       || TO_CHAR (res_geg.res_reservering_van, 'YYYYMMDD HH24:MI')
                       || rr.res_ruimte_nr
                  FROM res_ruimte_opstelling rro, res_ruimte rr
                 WHERE rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key
                       AND rro.res_ruimte_key = rr.res_ruimte_key),
               (SELECT TO_CHAR (res_geg.res_reservering_van, 'YYYYMMDD HH24:MI')
                       || rg.alg_ruimte_aanduiding
                  FROM alg_v_ruimte_gegevens rg
                 WHERE rg.alg_ruimte_key = rrr.alg_ruimte_key))
               sort_ruimte,
            rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
               sort_resnr,
            res_geg.res_type sort_categorie,
            TO_CHAR (res_geg.res_reservering_van, 'DD-MM-YYYY') datum,
            (CASE
                WHEN res_geg.res_type = '1R' OR res_geg.wissel = 1
                THEN
                   rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
                ELSE
                   ''
             END)
               resnr,
            (CASE
                WHEN res_geg.res_type = '1R'
                     AND res_geg.res_reservering_tot IS NOT NULL
                THEN
                   'Begin'
                ELSE
                   DECODE (res_geg.res_reservering_tot,
                           NULL, 'Eind',
                           DECODE (res_geg.wissel, 1, 'Wissel', ''))
             END)
               begin_eind,
            (CASE
                WHEN res_geg.res_type = '1R' OR res_geg.wissel = 1
                THEN
                   TO_CHAR (res_geg.res_reservering_van, 'HH24:MI')
                ELSE
                   ''
             END)
               van,
            DECODE (
               res_geg.res_activiteit_key,
               21, TO_CHAR (res_geg.res_reservering_van + (1 / 96), 'HH24:MI'),
               NULL)
               van_vc,
            (CASE
                WHEN res_geg.res_type = '1R' OR res_geg.wissel = 1
                THEN
                   DECODE (
                      rrr.alg_ruimte_key,
                      NULL,
                      (SELECT rr.res_ruimte_nr
                         FROM res_ruimte_opstelling rro, res_ruimte rr
                        WHERE rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key
                              AND rro.res_ruimte_key = rr.res_ruimte_key),
                      (SELECT rg.alg_ruimte_aanduiding
                         FROM alg_v_ruimte_gegevens rg
                        WHERE rg.alg_ruimte_key = rrr.alg_ruimte_key))
                ELSE
                   ''
             END)
               ruimte,
            TO_CHAR (res_geg.deelnemers) deelnemers,
            (CASE
                WHEN res_geg.res_type = '2V'
                THEN
                   res_geg.res_voorziening
                WHEN res_geg.res_type = '3C'
                THEN
                   TO_CHAR (res_geg.aantal) || ' x ' || res_geg.res_voorziening
                ELSE
                   DECODE (res_geg.res_next_van,
                           NULL, res_geg.res_voorziening,
                           TO_CHAR (res_geg.res_next_van, 'HH24:MI'))
             END)
               voorzieningen,
            DECODE (res_geg.res_type, '1R', res_geg.res_kostenplaats_nr, NULL)
               budgetnummer,
            DECODE (res_geg.res_type, '1R', res_geg.res_reservering_opm, NULL)
               opmerking
       FROM (SELECT '1R' res_type,     -- begin/wissel-ruimten met v, c of vc!
                    rrr.res_rsv_ruimte_key,
                    rrr.res_activiteit_key,
                    rrr.res_rsv_ruimte_bezoekers deelnemers,
                    rrr.res_rsv_ruimte_van res_reservering_van,
                    rrr.res_rsv_ruimte_tot res_reservering_tot,
                    rrr.res_rsv_ruimte_opmerking res_reservering_opm,
                    TO_NUMBER (NULL) aantal,
                    ra.res_activiteit_omschrijving res_voorziening,
                    NULL artikelnummer,
                    kp.prs_kostenplaats_nr res_kostenplaats_nr,
                    NULL res_next_van,
                    0 wissel,
                    DECODE (
                       rrr.res_activiteit_key,
                       21, 1,                          -- videoconference (vc)
                       (SELECT COUNT ( * )
                          FROM res_v_aanwezigrsv_deel rrd, res_v_aanwezigrsv_artikel rra
                         WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                               OR rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key))
                       service
               FROM res_v_aanwezigrsv_ruimte rrr, res_activiteit ra, prs_kostenplaats kp
              WHERE     rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_activiteit_key = ra.res_activiteit_key
                    AND ra.res_activiteit_key NOT IN (101, 161, 281, 301, 321) -- Uitleen, Lunchvoucher, Brandmeldcentrale, Pas sessie, Passen orth. schoenen
                    AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5)
             UNION ALL                        -- eind-ruimten (reserveerbaar)!
             SELECT '1R' res_type,
                    rrr.res_rsv_ruimte_key,
                    NULL res_activiteit_key,
                    NULL deelnemers,
                    rrr.res_rsv_ruimte_tot res_reservering_van,
                    NULL res_reservering_tot,
                    NULL res_reservering_opm,
                    TO_NUMBER (NULL) aantal,
                    NULL res_voorziening,
                    NULL artikelnummer,
                    NULL res_kostenplaats_nr,
                    (SELECT MIN (x.res_rsv_ruimte_van)
                       FROM res_v_aanwezigrsv_ruimte x, res_ruimte_opstelling y
                      WHERE x.res_ruimte_opstel_key = y.res_ruimte_opstel_key
                            AND y.res_ruimte_key = rr.res_ruimte_key
                            AND TRUNC (x.res_rsv_ruimte_van) = TRUNC (rrr.res_rsv_ruimte_tot)
                            AND x.res_rsv_ruimte_van > rrr.res_rsv_ruimte_tot)
                       res_next_van,
                    0 wissel,
                    1 service
               FROM res_v_aanwezigrsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr
              WHERE     rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                    AND rro.res_ruimte_key = rr.res_ruimte_key
                    AND rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5)
             UNION ALL                  -- eind-ruimten (meerdaags los=met v)!
             SELECT '1R' res_type,
                    rrr.res_rsv_ruimte_key,
                    rrr.res_activiteit_key,
                    rrr.res_rsv_ruimte_bezoekers deelnemers,
                    rrr.res_rsv_ruimte_tot res_reservering_van,
                    NULL res_reservering_tot,
                    rrr.res_rsv_ruimte_opmerking res_reservering_opm,
                    TO_NUMBER (NULL) aantal,
                    ra.res_activiteit_omschrijving res_voorziening,
                    NULL artikelnummer,
                    kp.prs_kostenplaats_nr res_kostenplaats_nr,
                    NULL res_next_van,
                    0 wissel,
                    1 service
               FROM res_v_aanwezigrsv_ruimte rrr,
                    res_activiteit ra,
                    prs_kostenplaats kp
              WHERE     rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_activiteit_key = ra.res_activiteit_key
                    AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                    AND ra.res_activiteit_key NOT IN (281, 101, 301, 321) -- Brandmeldcentrale, Uitellenauto, Pas sessie, Passen orth schoenen
                    AND TRUNC (rrr.res_rsv_ruimte_van) != TRUNC (rrr.res_rsv_ruimte_tot)
                    AND rrr.res_rsv_ruimte_tot BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5)
             UNION ALL      -- begin/wissel-voorzieningen (bij ruimte en los)!
             SELECT '2V' res_type,
                    rrr.res_rsv_ruimte_key,
                    NULL res_activiteit_key,
                    NULL deelnemers,
                    rrd.res_rsv_deel_van res_reservering_van,
                    rrd.res_rsv_deel_tot res_reservering_tot,
                    NULL res_reservering_opm,
                    (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal, -- duur in uren
                    LTRIM (id.ins_deel_omschrijving) || DECODE (rd.res_deel_eenheid, NULL, '', ' (' || rd.res_deel_eenheid || ')')
                       res_voorziening,
                    NULL artikelnummer,
                    NULL res_kostenplaats_nr,
                    NULL res_next_van,
                    DECODE (rrd.res_rsv_deel_van, rrr.res_rsv_ruimte_van, 0, 1)
                       wissel,
                    1 service
               FROM res_v_aanwezigrsv_deel rrd, res_v_aanwezigrsv_ruimte rrr, res_deel rd, ins_deel id
              WHERE     rrd.res_rsv_deel_dirtlevel = 0
                    AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                    AND rrd.res_deel_key = rd.res_deel_key
                    AND rd.res_discipline_key NOT IN (741, 2121, 2162, 2221) --  Bestelauto, Brandmeldcentrale, Pasbus, Orthopedie
                    AND rd.res_ins_deel_key = id.ins_deel_key
                    AND rrd.res_rsv_deel_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5)
             UNION ALL            -- eind-voorzieningen (meerdaags los=met v)!
             SELECT '2V' res_type,
                    rrr.res_rsv_ruimte_key,
                    NULL res_activiteit_key,
                    NULL deelnemers,
                    rrd.res_rsv_deel_tot res_reservering_van,
                    rrd.res_rsv_deel_tot res_reservering_tot,
                    NULL res_reservering_opm,
                    (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal, -- duur in uren
                    LTRIM (id.ins_deel_omschrijving) || DECODE (rd.res_deel_eenheid, NULL, '', ' (' || rd.res_deel_eenheid || ')')
                       res_voorziening,
                    NULL artikelnummer,
                    NULL res_kostenplaats_nr,
                    NULL res_next_van,
                    0 wissel,
                    1 service
               FROM res_v_aanwezigrsv_deel rrd, res_v_aanwezigrsv_ruimte rrr, res_deel rd, ins_deel id
              WHERE     rrd.res_rsv_deel_dirtlevel = 0
                    AND 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 rd.res_discipline_key NOT IN (2121, 741, 2162, 2221) --  Branmdeldcentrale, Bestelauto, Pasbus, Orthopedie
                    AND TRUNC (rrd.res_rsv_deel_van) != TRUNC (rrd.res_rsv_deel_tot)
                    AND rrd.res_rsv_deel_tot BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5)
             UNION ALL                          -- koppelruimten wand plaatsen
             SELECT '2V' res_type,
                    rrr.res_rsv_ruimte_key,
                    NULL,
                    rrr.res_rsv_ruimte_bezoekers deelnemers,
                    rrr.res_rsv_ruimte_van res_reservering_van,
                    rrr.res_rsv_ruimte_tot res_reservering_tot,
                    rrr.res_rsv_ruimte_opmerking res_reservering_opm,
                    (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24
                       aantal,
                    wand.voorziening voorziening,
                    NULL artikelnummer,
                    NULL res_kostenplaats_nr,
                    NULL res_next_van,
                    1 wissel,
                    1 service
               FROM res_v_aanwezigrsv_ruimte rrr,
                    res_ruimte_opstelling rro,
                    (SELECT res_rsv_ruimte_key, voorziening
                       FROM (  SELECT rro2.res_ruimte_key org,
                                      LAG (rro2.res_ruimte_key)
                                         OVER (ORDER BY rrr2.res_rsv_ruimte_van)
                                         prev,
                                      res_rsv_ruimte_key,
                                      'Wand ' || rr2.res_ruimte_nr
                                      || DECODE (rro2.res_ruimte_key,
                                                 341, ' Verwijderen',
                                                 ' Plaatsen')
                                         voorziening
                                 FROM res_v_aanwezigrsv_ruimte rrr2,
                                      res_ruimte_opstelling rro2,
                                      res_ruimte rr2
                                WHERE rro2.res_ruimte_opstel_key = rrr2.res_ruimte_opstel_key
                                      AND rr2.res_ruimte_key = rro2.res_ruimte_key
                                      AND rro2.res_ruimte_key IN (282, 283, 341)
                             ORDER BY rrr2.res_rsv_ruimte_van)
                      WHERE (   (org = 341 AND prev IN (282, 283))
                             OR (org IN (282, 283) AND prev = 341)
                             OR (prev IS NULL))
                     UNION
                     SELECT res_rsv_ruimte_key, voorziening
                       FROM (  SELECT rro2.res_ruimte_key org,
                                      LAG (rro2.res_ruimte_key)
                                         OVER (ORDER BY rrr2.res_rsv_ruimte_van)
                                         prev,
                                      res_rsv_ruimte_key,
                                      'Wand ' || rr2.res_ruimte_nr
                                      || DECODE (rro2.res_ruimte_key,
                                                 581, ' Verwijderen',
                                                 ' Plaatsen')
                                         voorziening
                                 FROM res_v_aanwezigrsv_ruimte rrr2,
                                      res_ruimte_opstelling rro2,
                                      res_ruimte rr2
                                WHERE rro2.res_ruimte_opstel_key = rrr2.res_ruimte_opstel_key
                                      AND rr2.res_ruimte_key = rro2.res_ruimte_key
                                      AND rro2.res_ruimte_key IN (562, 563, 581)
                             ORDER BY rrr2.res_rsv_ruimte_van)
                      WHERE (   (org = 581 AND prev IN (562, 563))
                             OR (org IN (562, 563) AND prev = 581)
                             OR (prev IS NULL))) wand
              WHERE rrr.res_rsv_ruimte_dirtlevel = 0
                    AND rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5)
                    AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key
                    AND rrr.res_rsv_ruimte_key = wand.res_rsv_ruimte_key
             UNION ALL           -- begin/wissel-catering (bij ruimte en los)!
             SELECT '3C' res_type,
                    rrr.res_rsv_ruimte_key,
                    NULL res_activiteit_key,
                    NULL deelnemers,
                    rra.res_rsv_artikel_levering res_reservering_van,
                    rrr.res_rsv_ruimte_tot res_reservering_tot,
                    NULL res_reservering_opm,
                    rra.res_rsv_artikel_aantal aantal,
                    LTRIM (ra.res_artikel_omschrijving) || DECODE (ra.res_artikel_eenheid, NULL, '', ' (' || ra.res_artikel_eenheid || ')')
                       res_voorziening,
                    ra.res_artikel_nr artikelnummer,
                    NULL res_kostenplaats_nr,
                    NULL res_next_van,
                    DECODE (rra.res_rsv_artikel_levering, rrr.res_rsv_ruimte_van, 0, 1)
                       wissel,
                    1 service
               FROM res_v_aanwezigrsv_artikel rra, res_v_aanwezigrsv_ruimte rrr, res_artikel ra
              WHERE     rra.res_rsv_artikel_dirtlevel = 0
                    AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                    AND rra.res_artikel_key = ra.res_artikel_key
                    AND ra.res_discipline_key NOT IN (1781)    -- Lunchvoucher
                    AND rra.res_rsv_artikel_levering BETWEEN TRUNC (SYSDATE) AND TRUNC (SYSDATE + 5))
            res_geg,
            res_v_aanwezigrsv_ruimte rrr
      WHERE res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
            AND (res_reservering_opm IS NOT NULL OR res_geg.service > 0)
   ORDER BY 1, 2, 3;

-- Bevat CUST01/02-reminders naar resp. medewerkers in autorisatiegroep 'BO
-- autorisatie (Security)' met key=2462 en medewerkers die 9 maanden geleden
-- om toegang hebben verzocht (dus binnenkort deze toegang verloopt).
-- CUST01: dagelijks ('s ochtends) mbt. de voorgaande dag aangemaakte nieuwe
--         verzoeken!
-- CUST02: dagelijks mbt. 9 maanden (~275d) geleden ingediende verzoeken!
/* Formatted on 3-4-2013 10:36:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_noti_aut_toegang
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey
)
AS
   SELECT   DISTINCT
            sn.fac_srtnotificatie_code,
            NULL,
            gg.prs_perslid_key,
            REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
            m.mld_melding_key,
            sm.mld_stdmelding_omschrijving,
            NULL,
            NULL
     FROM   mld_melding m,
            mld_stdmelding sm,
            fac_srtnotificatie sn,
            fac_gebruikersgroep gg
    WHERE       TRUNC (m.mld_melding_datum + 1) = TRUNC (SYSDATE)
            --AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
            --AND TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24')) + 1 =
            --      TO_NUMBER (TO_CHAR (SYSDATE, 'HH24'))
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = 1421      -- Aut. toegang afdeling
            --AND m.mld_workflowstep_key IS NOT NULL              -- WF-melding?
            AND m.mld_melding_key = mld_melding_start_key  -- WF-startmelding?
            AND sn.fac_srtnotificatie_code = 'CUST01'
            AND gg.fac_groep_key = 2462           -- BO autorisatie (Security)
   UNION ALL
   SELECT   DISTINCT sn.fac_srtnotificatie_code,
                     NULL,
                     m.prs_perslid_key,
                     sn.fac_srtnotificatie_oms,
                     m.mld_melding_key,
                     sm.mld_stdmelding_omschrijving,
                     NULL,
                     NULL
     FROM   mld_melding m, mld_stdmelding sm, fac_srtnotificatie sn
    WHERE       TRUNC (m.mld_melding_datum + 275) = TRUNC (SYSDATE)
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = 1421      -- Aut. toegang afdeling
            --AND m.mld_workflowstep_key IS NOT NULL              -- WF-melding?
            AND m.mld_melding_key = mld_melding_start_key  -- WF-startmelding?
            AND sn.fac_srtnotificatie_code = 'CUST02';

------------------------------------------------------------------------------
-- CAD SYNCHRONISATIE views
-- Er worden per gebouw verschillende ruimtenummeringsconventies gebruikt
-- Per conventie is er een sync-view, die afhankelijk van een gebouwkenmerk
-- (key=?) wordt toegepast.
--
-- Als in database ruimtenr=Rn, verdiepingscode=Vc en verdiepingsvolgnr=Vn,
-- dan herkennen we deze labels in de tekening:
-- 1. Rn-part  -> het gedeelte na de punt '.'
-- 2. Vc.Rn
-- 3. [0]Vn.Rn -> als 0<Vn<10 (dus niet Vn=-1), dan prefix met 0
-- 4. Rn
------------------------------------------------------------------------------
CREATE OR REPLACE VIEW ivet_v_sync_alg_ruimte
(
   alg_ruimte_key,
   alg_verdieping_key,
   cadlabel
)
AS
   SELECT r.alg_ruimte_key,
          r.alg_verdieping_key,
          DECODE (
             k.alg_onrgoedkenmerk_waarde,
             1,
             SUBSTR (r.alg_ruimte_nr, INSTR (r.alg_ruimte_nr, '.') + 1), -- Rn-part
             2,
             v.alg_verdieping_code || '.' || r.alg_ruimte_nr,         -- Vc.Rn
             3,
             SUBSTR ('0' || v.alg_verdieping_volgnr, -2) || '.' || r.alg_ruimte_nr, -- [0]Vn.Rn
             4,
             r.alg_ruimte_nr,                                            -- Rn
             SUBSTR (r.alg_ruimte_nr, INSTR (r.alg_ruimte_nr, '.') + 1)) -- Rn-part
             cadlabel
     FROM alg_v_aanwezigruimte r,
          alg_verdieping v,
          (SELECT *
             FROM alg_v_aanwezigonrgoedkenmerk
            WHERE alg_kenmerk_key = -1) k
    WHERE r.alg_verdieping_key = v.alg_verdieping_key
          AND v.alg_gebouw_key = k.alg_onrgoed_key(+);

CREATE OR REPLACE VIEW ivet_v_sync_prj_ruimte
(
   prj_scenario_key,
   prj_ruimte_key,
   alg_verdieping_key,
   cadlabel
)
AS
   SELECT r.prj_scenario_key,
          r.prj_ruimte_key,
          r.alg_verdieping_key,
          --r.prj_ruimte_nr,
          DECODE (
             k.alg_onrgoedkenmerk_waarde,
             1,
             SUBSTR (r.prj_ruimte_nr, INSTR (r.prj_ruimte_nr, '.') + 1), -- Rn-part
             2,
             v.alg_verdieping_code || '.' || r.prj_ruimte_nr,         -- Vc.Rn
             3,
             SUBSTR ('0' || v.alg_verdieping_volgnr, -2) || '.' || r.prj_ruimte_nr, -- [0]Vn.Rn
             4,
             r.prj_ruimte_nr,                                            -- Rn
             SUBSTR (r.prj_ruimte_nr, INSTR (r.prj_ruimte_nr, '.') + 1)) -- Rn-part
             cadlabel
     FROM prj_ruimte r,
          alg_verdieping v,
          (SELECT *
             FROM alg_v_aanwezigonrgoedkenmerk
            WHERE alg_kenmerk_key = -1) k
    WHERE r.alg_verdieping_key = v.alg_verdieping_key
          AND v.alg_gebouw_key = k.alg_onrgoed_key(+);

/* Formatted on 6-9-2011 10:57:39 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_label_wpbewoner
(
   prs_werkplek_key,
   waarde
)
AS
   SELECT   wp.prs_werkplek_key,
            DECODE (bew.aantal, 0, '[Vrij]', 1, bew.naam, bew.naam || '...')
     FROM      (SELECT   prs_werkplek_key FROM prs_werkplek) wp
            LEFT JOIN
               (  SELECT   pw.prs_werkplek_key,
                           COUNT ( * ) aantal,
                           MAX (p.prs_perslid_naam_full) naam
                    FROM   prs_perslidwerkplek pw,
                           prs_v_perslid_fullnames p
                   WHERE   pw.prs_perslid_key = p.prs_perslid_key
                GROUP BY   pw.prs_werkplek_key) bew
            ON wp.prs_werkplek_key = bew.prs_werkplek_key;

/* Formatted on 19-4-2012 17:00:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_label_bg_match
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   a.prs_alg_ruimte_key,
            DECODE (
               SIGN (ROUND ( (b.opp / (a.aantal * 7)) * 100, 0) - 110),
               1,
               2,                                                   -- Te Leeg
               DECODE (
                  SIGN (ROUND ( (b.opp / (a.aantal * 7)) * 100, 0) - 90),
                  -1,
                  1,                                                 -- Te vol
                  0                                            -- Volgens norm
               )
            )
     FROM      (  SELECT   wp.prs_alg_ruimte_key,
                           COUNT (pw.prs_perslid_key) aantal
                    FROM   prs_perslidwerkplek pw,
                           prs_werkplek wp
                   WHERE   pw.prs_werkplek_key = wp.prs_werkplek_key
                GROUP BY   wp.prs_alg_ruimte_key) a
            LEFT JOIN
               (SELECT   r.alg_ruimte_key,
                         COALESCE (r.alg_ruimte_bruto_vloeropp, 0) opp
                  FROM   alg_v_aanwezigruimte r) b
            ON a.prs_alg_ruimte_key = b.alg_ruimte_key;

/* Formatted on 19-4-2012 17:00:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_label_bg_delta
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   a.prs_alg_ruimte_key, TO_CHAR (ROUND (b.opp - (a.aantal * 7), 2))
     FROM      (  SELECT   wp.prs_alg_ruimte_key,
                           COUNT (pw.prs_perslid_key) aantal
                    FROM   prs_perslidwerkplek pw,
                           prs_werkplek wp
                   WHERE   pw.prs_werkplek_key = wp.prs_werkplek_key
                GROUP BY   wp.prs_alg_ruimte_key) a
            LEFT JOIN
               (SELECT   r.alg_ruimte_key,
                         COALESCE (r.alg_ruimte_bruto_vloeropp, 0) opp
                  FROM   alg_v_aanwezigruimte r) b
            ON a.prs_alg_ruimte_key = b.alg_ruimte_key;

/* Formatted on 19-4-2012 17:00:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_label_gemopp_pp
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   a.prs_alg_ruimte_key, TO_CHAR (ROUND (b.opp / a.aantal, 2))
     FROM      (  SELECT   wp.prs_alg_ruimte_key,
                           COUNT (pw.prs_perslid_key) aantal
                    FROM   prs_perslidwerkplek pw,
                           prs_werkplek wp
                   WHERE   pw.prs_werkplek_key = wp.prs_werkplek_key
                GROUP BY   wp.prs_alg_ruimte_key) a
            LEFT JOIN
               (SELECT   r.alg_ruimte_key,
                         COALESCE (r.alg_ruimte_bruto_vloeropp, 0) opp
                  FROM   alg_v_aanwezigruimte r) b
            ON a.prs_alg_ruimte_key = b.alg_ruimte_key;

/* Formatted on 16-3-2012 15:40:50 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_thema_ruimte_afd
(
   alg_ruimte_key,
   waarde
--waarde_key
)
AS
   SELECT   x.alg_ruimte_key,
            DECODE (y.aantal,
                    NULL, '[Geen]',
                    1, SUBSTR (y.prs_afdeling_omschrijving, 1, 60),
                    'Meer dan 1 afdeling!')
     --DECODE (y.aantal, NULL, -1, 1, y.prs_afdeling_key, NULL)
     FROM      (SELECT   r.alg_ruimte_key
                  FROM   alg_v_aanwezigruimte r) x
            LEFT JOIN
               (  SELECT   w.prs_alg_ruimte_key,
                           MIN (a.prs_afdeling_omschrijving)
                              prs_afdeling_omschrijving,
                           MIN (a.prs_afdeling_key) prs_afdeling_key,
                           COUNT (DISTINCT a.prs_afdeling_key) aantal
                    FROM   prs_perslidwerkplek pw,
                           prs_werkplek w,
                           prs_v_aanwezigperslid p,
                           prs_afdeling a
                   WHERE       pw.prs_werkplek_key = w.prs_werkplek_key
                           AND pw.prs_perslid_key = p.prs_perslid_key
                           AND p.prs_afdeling_key = a.prs_afdeling_key
                GROUP BY   w.prs_alg_ruimte_key) y
            ON x.alg_ruimte_key = y.prs_alg_ruimte_key
   UNION ALL
   SELECT   NULL, SUBSTR (a.prs_afdeling_omschrijving, 1, 60) --, a.prs_afdeling_key
     FROM   prs_afdeling a
    WHERE   a.prs_afdeling_verwijder IS NULL
            AND NOT EXISTS
                  (SELECT   1
                     FROM   prs_perslidwerkplek pw,
                            prs_werkplek w,
                            prs_v_aanwezigperslid p
                    WHERE       pw.prs_werkplek_key = w.prs_werkplek_key
                            AND pw.prs_perslid_key = p.prs_perslid_key
                            AND p.prs_afdeling_key = a.prs_afdeling_key)
   UNION ALL
   SELECT   DISTINCT NULL, SUBSTR (a.prs_afdeling_omschrijving, 1, 60) --, a.prs_afdeling_key
     FROM   prs_perslidwerkplek pw,
            prs_v_aanwezigperslid p,
            prs_afdeling a
    WHERE   pw.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND NOT EXISTS
                  (SELECT   1
                     FROM   prs_werkplek w
                    WHERE   w.prs_werkplek_key = pw.prs_werkplek_key)
/

/* Formatted on 16-3-2012 15:40:50 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_thema_ruimte_kpn
(
   alg_ruimte_key,
   waarde
--waarde_key
)
AS
   SELECT   x.alg_ruimte_key,
            DECODE (y.aantal,
                    NULL, '[Geen]',
                    1, SUBSTR (y.prs_kostenplaats_nr, 1, 30),
                    'Meer dan 1 kostenplaats!')
     --DECODE (y.aantal, NULL, -1, 1, y.prs_kostenplaats_key, NULL)
     FROM      (SELECT   r.alg_ruimte_key
                  FROM   alg_v_aanwezigruimte r) x
            LEFT JOIN
               (  SELECT   w.prs_alg_ruimte_key,
                           MIN (kp.prs_kostenplaats_nr) prs_kostenplaats_nr,
                           MIN (kp.prs_kostenplaats_key) prs_kostenplaats_key,
                           COUNT (DISTINCT kp.prs_kostenplaats_key) aantal
                    FROM   prs_perslidwerkplek pw,
                           prs_werkplek w,
                           prs_v_aanwezigperslid p,
                           prs_afdeling a,
                           prs_kostenplaats kp
                   WHERE       pw.prs_werkplek_key = w.prs_werkplek_key
                           AND pw.prs_perslid_key = p.prs_perslid_key
                           AND p.prs_afdeling_key = a.prs_afdeling_key
                           AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key
                GROUP BY   w.prs_alg_ruimte_key) y
            ON x.alg_ruimte_key = y.prs_alg_ruimte_key
   UNION ALL
   SELECT   NULL, SUBSTR (kp.prs_kostenplaats_nr, 1, 30) --, kp.prs_kostenplaats_key
     FROM   prs_v_aanwezigkostenplaats kp
    WHERE   NOT EXISTS
               (SELECT   1
                  FROM   prs_perslidwerkplek pw,
                         prs_werkplek w,
                         prs_v_aanwezigperslid p,
                         prs_afdeling a
                 WHERE       pw.prs_werkplek_key = w.prs_werkplek_key
                         AND pw.prs_perslid_key = p.prs_perslid_key
                         AND p.prs_afdeling_key = a.prs_afdeling_key
                         AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key)
   UNION ALL
   SELECT   DISTINCT NULL, SUBSTR (kp.prs_kostenplaats_nr, 1, 30) --, kp.prs_kostenplaats_key
     FROM   prs_perslidwerkplek pw,
            prs_v_aanwezigperslid p,
            prs_afdeling a,
            prs_kostenplaats kp
    WHERE       pw.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND NOT EXISTS
                  (SELECT   1
                     FROM   prs_werkplek w
                    WHERE   w.prs_werkplek_key = pw.prs_werkplek_key)
/

/* Formatted on 21-12-2012 17:44:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_thema_schprog
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT   a.alg_ruimte_key,
            COALESCE (b.schprog, '[Onbekend]'),
            COALESCE (b.schprog_key, -1)
     FROM      (SELECT   r.alg_ruimte_key
                  FROM   alg_v_aanwezigruimte r) a
            LEFT JOIN
               (SELECT   ok.alg_onrgoed_key,
                         ud.fac_usrdata_omschr schprog,
                         ud.fac_usrdata_key schprog_key
                  FROM   alg_v_aanwezigonrgoedkenmerk ok,
                         fac_v_aanwezigusrdata ud
                 WHERE       ok.alg_kenmerk_key = 1020      -- schoonmaakprog.
                         AND ok.alg_onrgoed_niveau = 'R'
                         AND fac.safe_to_number (
                               ok.alg_onrgoedkenmerk_waarde
                            ) = ud.fac_usrdata_key) b
            ON a.alg_ruimte_key = b.alg_onrgoed_key
   UNION ALL
   SELECT   NULL,
            ud.fac_usrdata_omschr schprog,
            ud.fac_usrdata_key schprog_key
     FROM   fac_v_aanwezigusrdata ud
    WHERE   ud.fac_usrtab_key = 2301
            AND NOT EXISTS
                  (SELECT   1
                     FROM   alg_v_aanwezigonrgoedkenmerk ok
                    WHERE   ok.alg_kenmerk_key = 1020       -- schoonmaakprog.
                            AND fac.safe_to_number (
                                  ok.alg_onrgoedkenmerk_waarde
                               ) = ud.fac_usrdata_key)
/

/* Formatted on 21-12-2012 17:44:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE TRIGGER ivet_v_thema_schprog_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON ivet_v_thema_schprog
BEGIN
   IF UPDATING           -- oude hard weggooien; dus DELETE (lekker opruimen)!
   THEN
      DELETE FROM   alg_onrgoedkenmerk
            WHERE   alg_onrgoed_key = :new.alg_ruimte_key
                    AND fac.safe_to_number (alg_onrgoedkenmerk_waarde) <>
                          :new.waarde_key;
   END IF;

   BEGIN
      IF :new.waarde_key <> -1
      THEN
         INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
                                         alg_onrgoed_niveau,
                                         alg_kenmerk_key,
                                         alg_onrgoedkenmerk_waarde)
           VALUES   (:new.alg_ruimte_key,
                     'R',
                     1020,
                     :new.waarde_key);
      END IF;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX                                 -- was al aanwezig
      THEN
         NULL;
   END;
END;
/

/* Formatted on 19-4-2012 16:14:40 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW ivet_v_thema_schprog_ro
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   r.alg_ruimte_key, ud.fac_usrdata_omschr
     FROM   alg_v_aanwezigruimte r,
            alg_v_aanwezigonrgoedkenmerk ok,
            fac_v_aanwezigusrdata ud
    WHERE       r.alg_ruimte_key = ok.alg_onrgoed_key
            AND ok.alg_kenmerk_key = 1020                   -- schoonmaakprog.
            AND ok.alg_onrgoed_niveau = 'R'
            AND fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) =
                  ud.fac_usrdata_key
/


-- Synchronisatiemechanisme om dagelijks de Schoonmaakprogramma-kenmerken bij
-- de ruimte te synchroniseren met de Schoonmaak-objecten die worden gebruikt.
CREATE OR REPLACE PROCEDURE ivet_export_sync_schoonmaak (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2,
   p_filedir    IN VARCHAR2,
   p_filename   IN VARCHAR2)
AS
   CURSOR c (c_srtgroep_key NUMBER)
   IS
      SELECT sd.ins_srtdeel_key, rg.alg_ruimte_key, rg.alg_ruimte_aanduiding, sd.ins_srtdeel_omschrijving
        FROM alg_onrgoedkenmerk aogk, alg_v_ruimte_gegevens rg, fac_usrdata ud, ins_srtdeel sd
       WHERE aogk.alg_kenmerk_key = 1020                -- Schoonmaakprogramma
             AND aogk.alg_onrgoed_key = rg.alg_ruimte_key
             AND fac.safe_to_number (aogk.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key
             AND ud.fac_usrdata_code = sd.ins_srtdeel_code
             AND sd.ins_srtgroep_key = c_srtgroep_key;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (1000) := '';
   v_srtgroep_key   NUMBER;
   v_srtdeel_key    NUMBER;
   v_deel_key       NUMBER;
   v_count          NUMBER;
BEGIN
   v_errormsg := 'Fout bepalen schoonmaak-groep';
   SELECT ins_srtgroep_key
     INTO v_srtgroep_key
     FROM ins_v_aanwezigsrtgroep
    WHERE ins_srtgroep_omschrijving = 'Schoonmaak';

   -- Aanmaken objectsoorten volgens Eigen tabel met key=2301!
   v_errormsg := 'Fout toevoegen schoonmaak-objectsoorten';
   INSERT INTO ins_srtdeel (ins_srtgroep_key,
                            ins_srtdeel_code,
                            ins_srtdeel_omschrijving,
                            ins_srtdeel_binding)
      SELECT v_srtgroep_key,
             fac_usrdata_code,
             fac_usrdata_omschr,
             1
        FROM fac_v_aanwezigusrdata ud
       WHERE fac_usrtab_key = 2301
             AND NOT EXISTS
                   (SELECT 1
                      FROM ins_v_aanwezigsrtdeel
                     WHERE ins_srtgroep_key = v_srtgroep_key
                           AND ins_srtdeel_code = ud.fac_usrdata_code);

   -- Bijwerken objectsoorten volgens Eigen tabel met key=2301!
   v_errormsg := 'Fout bijwerken objectsoort-omschrijvingen';
   UPDATE ins_srtdeel
      SET ins_srtdeel_omschrijving =
             (SELECT fac_usrdata_omschr
                FROM fac_v_aanwezigusrdata
               WHERE fac_usrtab_key = 2301
                     AND fac_usrdata_code = ins_srtdeel_code)
    WHERE ins_srtdeel_verwijder IS NULL
          AND ins_srtgroep_key = v_srtgroep_key;

   FOR rec IN c (v_srtgroep_key)
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.alg_ruimte_aanduiding || '|' || rec.ins_srtdeel_omschrijving || '] ';
         BEGIN
            v_errormsg := 'Fout bepalen schoonmaak-object (oud)';
            SELECT d.ins_srtdeel_key, d.ins_deel_key
              INTO v_srtdeel_key, v_deel_key
              FROM ins_v_aanwezigdeel d, ins_srtdeel sd
             WHERE d.ins_deel_vervaldatum IS NULL
                   AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                   AND sd.ins_srtgroep_key = v_srtgroep_key
                   AND d.ins_alg_ruimte_key = rec.alg_ruimte_key
                   AND d.ins_alg_ruimte_type = 'R';

            IF v_srtdeel_key <> rec.ins_srtdeel_key
            THEN
               v_errormsg := 'Fout vervallen schoonmaak-object';
               UPDATE ins_deel
                  SET ins_deel_vervaldatum = SYSDATE
                WHERE ins_deel_key = v_deel_key;

               v_deel_key := -1;
            END IF;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_deel_key := -1;
         END;

         IF v_deel_key = -1
         THEN
            -- IVET#57006: SYNC_SCHOONMAAK-export loopt al een maand niet meer.
            --             Oorzaak volgens MVH dat toe te voegen object soms al
            --             bestaat, daarom voortaan ook objecten reanimeren!
            v_errormsg := 'Fout bepalen schoonmaak-object (nieuw)';
            SELECT COUNT (*)
              INTO v_count
              FROM ins_v_aanwezigdeel d
             WHERE d.ins_srtdeel_key = rec.ins_srtdeel_key
                   AND d.ins_alg_ruimte_key = rec.alg_ruimte_key
                   AND d.ins_alg_ruimte_type = 'R';

            IF v_count = 0
            THEN
               v_errormsg := 'Fout toevoegen schoonmaak-object';
               INSERT INTO ins_deel (ins_srtdeel_key,
                                     ins_alg_ruimte_key,
                                     ins_alg_ruimte_type,
                                     ins_deel_omschrijving,
                                     ins_deel_actief)
                   VALUES (rec.ins_srtdeel_key,
                           rec.alg_ruimte_key,
                           'R',
                           SUBSTR (rec.alg_ruimte_aanduiding || ' / ' || rec.ins_srtdeel_omschrijving, 1, 60),
                           1);
            ELSE
               v_errormsg := 'Fout reanimeren schoonmaak-object';
               UPDATE ins_deel
                  SET ins_deel_vervaldatum = SYSDATE,
                      ins_deel_omschrijving = SUBSTR (rec.alg_ruimte_aanduiding || ' / ' || rec.ins_srtdeel_omschrijving, 1, 60),
                      ins_deel_actief = 1
                WHERE ins_srtdeel_key = rec.ins_srtdeel_key
                      AND ins_alg_ruimte_key = rec.alg_ruimte_key
                      AND ins_alg_ruimte_type = 'R';
            END IF;
         END IF;
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname, 'E', v_aanduiding || v_errormsg, 'SYNC_SCHOONMAAK-export afgebroken!');
END;
/

-- De schoonmaak wordt van 03:00 tot 03:00 uur uitgevoerd. Vandaar dat we alle tijden met 3
-- uur moeten corrigeren.
CREATE OR REPLACE VIEW ivet_v_thema_sch_stat
(
   alg_ruimte_key,
   waarde
)
AS
     SELECT ins_alg_ruimte_key,
            DECODE (SUM (todo),
                    0, DECODE (SUM (done), 0, 'Idle',
                                              'Ready'),
                       DECODE (SUM (done), 0, 'Todo',
                                              'Busy'))
               waarde
       FROM (
             SELECT  ins_alg_ruimte_key,
                     sc.ins_srtcontrole_key,
                     id.ins_deel_omschrijving,
                     sc.ins_srtcontrole_omschrijving,
                     DECODE (
                        SIGN(TRUNC (
                                fac.nextcyclusdatedeel (id.ins_deel_key, sc.ins_srtcontrole_key, 1))
                             - TRUNC (SYSDATE-3/24)),
                        1,
                        0,
                        1)
                        todo,
                     (SELECT COUNT ( * )
                        FROM ins_deelsrtcontrole dsc
                       WHERE dsc.ins_deel_key = id.ins_deel_key
                         AND dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key
                         AND TRUNC (dsc.ins_deelsrtcontrole_datum-3/24) = TRUNC (SYSDATE-3/24))
                        done
                FROM ins_deel id, ins_srtcontrole sc
               WHERE id.ins_srtdeel_key = sc.ins_srtinstallatie_key
                 AND id.ins_deel_verwijder IS NULL
                 AND sc.ins_srtcontrole_niveau = 'S'                                              --
            )
   GROUP BY ins_alg_ruimte_key;

-- Dagelijkse taak.
-- Hieronder vallen:
-- - Synchronisatie schoonmaakprogramma bij ruimte met schoonmaakobjecten.
CREATE OR REPLACE PROCEDURE ivet_export_daily_task (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2,
                                                    p_filedir    IN VARCHAR2,
                                                    p_filename   IN VARCHAR2)
AS
BEGIN
   ivet_export_sync_schoonmaak (p_applname, p_applrun, p_filedir, p_filename);
END;
/

CREATE OR REPLACE VIEW ivet_v_thema_cleanroom
(
   ALG_RUIMTE_KEY,
   WAARDE
)
AS
   SELECT   r.alg_ruimte_key, ud.fac_usrdata_omschr
     FROM   alg_v_aanwezigruimte r,
            alg_v_aanwezigonrgoedkenmerk ok,
            fac_v_aanwezigusrdata ud
    WHERE       r.alg_ruimte_key = ok.alg_onrgoed_key
            AND ok.alg_kenmerk_key = 1020                   -- schoonmaakprog.
            AND ok.alg_onrgoed_niveau = 'R'
            AND fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) =
                  ud.fac_usrdata_key
            AND ud.fac_usrdata_key = 4465                     -- 25-cleanroom
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_ALL
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
SELECT   prs_bedrijf_key,
               prs_bedrijf_naam
            || ' ('
            || prs_bedrijf_bezoek_adres
            || ' - '
            || prs_bedrijf_bezoek_postcode
            || '  '
            || prs_bedrijf_bezoek_plaats
            || ')'
               Adres
     FROM   prs_bedrijf
    WHERE       prs_bedrijf_verwijder IS NULL
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_BEZORG
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1040            -- 1040 Bezorgadres checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_LOCAL
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1060            -- 1060 Local companies checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_AUTHA
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1061            -- 1061 Authoriteit(A) checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_AUTHB
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1062            -- 1062 Authoriteit(B) checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_DIVERSEN
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1063            -- 1063 Diversen checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

-- IVET#29054
CREATE OR REPLACE VIEW IVET_V_ADRESSEN_BEZORG_NL
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1080              -- 1080 Nederland checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

CREATE OR REPLACE VIEW IVET_V_ADRESSEN_BEZORG_INT
(
   PRS_BEDRIJF_KEY,
   ADRES
)
AS
   SELECT   prs_bedrijf_key, ADRES
     FROM   ivet_v_adressen_all, prs_kenmerklink
    WHERE       prs_kenmerklink_verwijder IS NULL
            AND prs_kenmerklink_niveau = 'B'
            AND prs_kenmerk_key = 1081              -- 1081 International buiten EU checkbox
            AND prs_kenmerklink_waarde = 1
            AND prs_link_key = prs_bedrijf_key
/

-- IVET#26822
-- Controleert per internval of er nieuwe transportaanvragen binnen EU zijn en stuurt deze naar gebruiker DistributionCoordination
CREATE OR REPLACE VIEW IVET_V_NOTI_MLD_TRANSPORT
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   'MLDNEW',
            NULL,
            69501,                            -- User DistributionCoordination
               'Nieuwe melding: '
            || m.mld_melding_key
            || ' '
            || std.mld_stdmelding_omschrijving
            || ' - '
            || dat.fac_usrdata_omschr,
            m.mld_melding_key,
            NULL
     FROM   mld_melding m,
            fac_tracking tr,
            fac_srtnotificatie str,
            mld_kenmerkmelding mkm,
            mld_kenmerk k,
            mld_srtkenmerk sk,
            fac_kenmerkdomein kd,
            fac_usrdata dat,
            mld_stdmelding std
    WHERE   mld_melding_status IN (0, 2, 3, 4, 7)            -- open meldingen
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND ( (tr.fac_tracking_refkey = m.mld_melding_key
                   AND str.fac_srtnotificatie_xmlnode IN ('melding')))
            AND fac_srtnotificatie_code = 'MLDNEW'
            AND tr.fac_tracking_datum >
                  (SELECT   fac_notificatie_job_nextrun
                            - fac_notificatie_job_interval / 24
                     FROM   fac_notificatie_job
                    WHERE   fac_notificatie_job_view =
                               'IVET_V_NOTI_MLD_TRANSPORT')
            AND m.mld_stdmelding_key = 2821  -- R-Transportaanvraag-transportaanvraag
            AND mkm.mld_melding_key = m.mld_melding_key
            AND mkm.mld_kenmerk_key = 13641                    -- Kenmerk Land suggest
            AND mkm.mld_kenmerkmelding_waarde IS NOT NULL
            AND mkm.mld_kenmerkmelding_verwijder IS NULL
            AND m.mld_stdmelding_key = std.mld_stdmelding_key
            AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
            AND dat.fac_usrtab_key = kd.fac_usrtab_key
            AND mkm.mld_kenmerkmelding_waarde = dat.fac_usrdata_key
/

-- IVET#28273
-- Controleert per internval of er nieuwe transportaanvragen buiten EU zijn en stuurt deze naar gebruiker DistributionCoordination
CREATE OR REPLACE VIEW IVET_V_NOTI_MLD_TRANS_BUITENEU
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   'MLDNEW',
            NULL,
            69501,                            -- User DistributionCoordination
               'Nieuwe melding: '
            || m.mld_melding_key
            || ' '
            || std.mld_stdmelding_omschrijving
            || ' - '
            || dat.fac_usrdata_omschr,
            m.mld_melding_key,
            NULL
     FROM   mld_melding m,
            fac_tracking tr,
            fac_srtnotificatie str,
            mld_kenmerkmelding mkm,
            mld_kenmerk k,
            mld_srtkenmerk sk,
            fac_kenmerkdomein kd,
            fac_usrdata dat,
            mld_stdmelding std
    WHERE   mld_melding_status IN (0, 2, 3, 4, 7)            -- open meldingen
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND ( (tr.fac_tracking_refkey = m.mld_melding_key
                   AND str.fac_srtnotificatie_xmlnode IN ('melding')))
            AND fac_srtnotificatie_code = 'MLDNEW'
            AND tr.fac_tracking_datum >
                  (SELECT   fac_notificatie_job_nextrun
                            - fac_notificatie_job_interval / 24
                     FROM   fac_notificatie_job
                    WHERE   fac_notificatie_job_view =
                               'IVET_V_NOTI_MLD_TRANS_BUITENEU')
            AND m.mld_stdmelding_key = 3181 -- R-Transportaanvraag-transportaanvraag buiten eu
            AND mkm.mld_melding_key = m.mld_melding_key
            AND mkm.mld_kenmerk_key = 13662     -- Kenmerk Wereldanden suggest
            AND mkm.mld_kenmerkmelding_waarde IS NOT NULL
            AND mkm.mld_kenmerkmelding_verwijder IS NULL
            AND m.mld_stdmelding_key = std.mld_stdmelding_key
            AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
            AND dat.fac_usrtab_key = kd.fac_usrtab_key
            AND mkm.mld_kenmerkmelding_waarde = dat.fac_usrdata_key
/


-- IVET#31601
-- Controleert per internval of er nieuwe ADR transportaanvragen zijn en stuurt deze naar gebruiker DistributionCoordination
CREATE OR REPLACE VIEW IVET_V_NOTI_MLD_ADR_TRANSPORT
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   'MLDNEW',
            NULL,
            69501,                            -- User DistributionCoordination
               'Nieuwe melding: '
            || m.mld_melding_key
            || ' '
            || std.mld_stdmelding_omschrijving
            || ' - '
            || dat.fac_usrdata_omschr
               oms,
            m.mld_melding_key,
            NULL
     FROM   mld_melding m,
            fac_tracking tr,
            fac_srtnotificatie str,
            mld_kenmerkmelding mkm,
            mld_kenmerk k,
            mld_srtkenmerk sk,
            fac_kenmerkdomein kd,
            fac_usrdata dat,
            mld_stdmelding std
    WHERE   mld_melding_status IN (0, 2, 3, 4, 7)            -- open meldingen
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND ( (tr.fac_tracking_refkey = m.mld_melding_key
                   AND str.fac_srtnotificatie_xmlnode IN ('melding')))
            AND fac_srtnotificatie_code = 'MLDNEW'
            AND tr.fac_tracking_datum >
                  (SELECT   fac_notificatie_job_nextrun
                            - fac_notificatie_job_interval / 24
                     FROM   fac_notificatie_job
                    WHERE   fac_notificatie_job_view =
                               'IVET_V_NOTI_MLD_ADR_TRANSPORT')
            AND m.mld_stdmelding_key = 3742 --  ADR ransportaanvraag buiten eu
            AND mkm.mld_melding_key = m.mld_melding_key
            AND mkm.mld_kenmerk_key = 16403     -- Kenmerk Wereldanden suggest
            AND mkm.mld_kenmerkmelding_waarde IS NOT NULL
            AND mkm.mld_kenmerkmelding_verwijder IS NULL
            AND m.mld_stdmelding_key = std.mld_stdmelding_key
            AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
            AND dat.fac_usrtab_key = kd.fac_usrtab_key
            AND mkm.mld_kenmerkmelding_waarde = dat.fac_usrdata_key
   UNION ALL
   SELECT   'MLDNEW',
            NULL,
            69501,                            -- User DistributionCoordination
               'Nieuwe melding: '
            || m.mld_melding_key
            || ' '
            || std.mld_stdmelding_omschrijving
            || ' - '
            || dat.fac_usrdata_omschr,
            m.mld_melding_key,
            NULL
     FROM   mld_melding m,
            fac_tracking tr,
            fac_srtnotificatie str,
            mld_kenmerkmelding mkm,
            mld_kenmerk k,
            mld_srtkenmerk sk,
            fac_kenmerkdomein kd,
            fac_usrdata dat,
            mld_stdmelding std
    WHERE   mld_melding_status IN (0, 2, 3, 4, 7)            -- open meldingen
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND ( (tr.fac_tracking_refkey = m.mld_melding_key
                   AND str.fac_srtnotificatie_xmlnode IN ('melding')))
            AND fac_srtnotificatie_code = 'MLDNEW'
            AND tr.fac_tracking_datum >
                  (SELECT   fac_notificatie_job_nextrun
                            - fac_notificatie_job_interval / 24
                     FROM   fac_notificatie_job
                    WHERE   fac_notificatie_job_view =
                               'IVET_V_NOTI_MLD_ADR_TRANSPORT')
            AND m.mld_stdmelding_key = 3741 -- ADR transportaanvraag binnen eu
            AND mkm.mld_melding_key = m.mld_melding_key
            AND mkm.mld_kenmerk_key = 16362    -- Kenmerk Lidstaten EU suggest
            AND mkm.mld_kenmerkmelding_waarde IS NOT NULL
            AND mkm.mld_kenmerkmelding_verwijder IS NULL
            AND m.mld_stdmelding_key = std.mld_stdmelding_key
            AND mkm.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            AND sk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
            AND dat.fac_usrtab_key = kd.fac_usrtab_key
            AND mkm.mld_kenmerkmelding_waarde = dat.fac_usrdata_key
/

-- IVET#29243
-- Controleert elk uur of er een reservering is gemaakt (=key 34), gewijzigd (=key 35) of verwijderd (=key 38)
-- op de activiteiten VC (=key 21) & No-VC meeting (=key 61) en stuurt deze naar het servicepoint (=key 28881)
CREATE OR REPLACE VIEW IVET_V_NOTI_VC_RESREMINDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   DISTINCT
            'RESUPD',
            NULL,
            28881,
               'Reservering '
            || rrr.res_reservering_key
            || '/'
            || rrr.res_rsv_ruimte_volgnr
            || ' ('
            || res_rsv_ruimte_van
            || ' - '
            || res_ruimte_nr
            || ') is op '
            || fac_tracking_datum
            || ' nieuw aangemaakt door '
            || pf.prs_perslid_naam_full
               text,
            res_reservering_key,
            res_rsv_ruimte_key
     FROM   res_rsv_ruimte rrr,
            res_ruimte_opstelling rro,
            res_ruimte rr,
            fac_tracking tr,
            fac_srtnotificatie str,
            prs_v_perslid_fullnames_all pf
    WHERE       rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
            AND rro.res_ruimte_key = rr.res_ruimte_key
            AND res_activiteit_key IN (21, 61)
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND tr.prs_perslid_key = pf.prs_perslid_key(+)
            AND ( (tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key
                   AND str.fac_srtnotificatie_xmlnode IN
                            ('reservering', 'xreservering')))
            AND str.fac_srtnotificatie_key = 34
            AND tr.fac_tracking_datum > SYSDATE - 1 / 24
   UNION ALL
   SELECT   DISTINCT 'RESUPD',
                     NULL,
                     28881,
                     tr.fac_tracking_oms text,
                     res_reservering_key,
                     res_rsv_ruimte_key
     FROM   res_rsv_ruimte rrr,
            res_ruimte_opstelling rro,
            res_ruimte rr,
            fac_tracking tr,
            fac_srtnotificatie str,
            prs_v_perslid_fullnames_all pf
    WHERE       rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
            AND rro.res_ruimte_key = rr.res_ruimte_key
            AND res_activiteit_key IN (21, 61)
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND tr.prs_perslid_key = pf.prs_perslid_key(+)
            AND ( (tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key
                   AND str.fac_srtnotificatie_xmlnode IN
                            ('reservering', 'xreservering')))
            AND str.fac_srtnotificatie_key = 35
            AND (   fac_tracking_oms LIKE '%gewijzigd%Ruimte:%'
                 OR fac_tracking_oms LIKE '%gewijzigd%Van:%'
                 OR fac_tracking_oms LIKE '%gewijzigd%Tot:%'
                 OR fac_tracking_oms LIKE '%adjusted%Room:%'
                 OR fac_tracking_oms LIKE '%adjusted%From:%'
                 OR fac_tracking_oms LIKE '%adjusted%Until:%')
            AND tr.fac_tracking_datum > SYSDATE - 1 / 24
   UNION ALL
   SELECT   DISTINCT
            'RESUPD',
            NULL,
            28881,
               'Reservering '
            || rrr.res_reservering_key
            || '/'
            || rrr.res_rsv_ruimte_volgnr
            || ' ('
            || res_rsv_ruimte_van
            || ' - '
            || res_ruimte_nr
            || ') is op '
            || fac_tracking_datum
            || ' verwijderd door '
            || pf.prs_perslid_naam_full
               text,
            res_reservering_key,
            res_rsv_ruimte_key
     FROM   res_rsv_ruimte rrr,
            res_ruimte_opstelling rro,
            res_ruimte rr,
            fac_tracking tr,
            fac_srtnotificatie str,
            prs_v_perslid_fullnames_all pf
    WHERE       rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
            AND rro.res_ruimte_key = rr.res_ruimte_key
            AND res_activiteit_key IN (21, 61)
            AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
            AND tr.prs_perslid_key = pf.prs_perslid_key(+)
            AND ( (tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key
                   AND str.fac_srtnotificatie_xmlnode IN
                            ('reservering', 'xreservering')))
            AND str.fac_srtnotificatie_key = 38
            AND tr.fac_tracking_datum > SYSDATE - 1 / 24;

/* Formatted on 15-1-2016 17:00:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW ivet_v_rap_mld_telaat_window
(
   hide_f_sortering,
   prio,
   html_nummer,
   fclt_f_productgroep,
   fclt_f_melding,
   datum,
   plaats,
   omschrijving,
   melder,
   fclt_f_status,
   fclt_f_overschrijding,
   behandelaar,
   einddatum
)
AS
   WITH x
           AS (                         -- Lopende meldingen te laat opgepakt!
               SELECT  m.mld_melding_key, -1 acp, 0 afm
                  FROM mld_melding m, fac_tracking t
                 WHERE     m.mld_melding_status NOT IN (5, 6, 1) -- 5-Afgemeld, 6-Verwerkt, 1-Afgewezen
                       AND m.fac_activiteit_key IS NULL
                       AND m.mld_melding_key = t.fac_tracking_refkey(+)
                       AND t.fac_srtnotificatie_key(+) = 21          -- MLDACP
                       AND m.mld_melding_acceptdatum_std < COALESCE (t.fac_tracking_datum, TRUNC (SYSDATE))
               UNION                    -- Lopende meldingen te laat gesloten!
               SELECT m.mld_melding_key, 0 acp, -1 afm
                 FROM mld_melding m, mld_stdmelding sm
                WHERE     m.mld_melding_status NOT IN (5, 6, 1) -- 5-Afgemeld, 6-Verwerkt, 1-Afgewezen
                      AND m.fac_activiteit_key IS NULL
                      AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                      AND DECODE (COALESCE (sm.mld_stdmelding_planbaar, 0), 0, m.mld_melding_einddatum_std, m.mld_melding_einddatum) < TRUNC (SYSDATE)
               UNION -- Voorgaande 2 werkdagen gesloten meldingen te laat opgepakt of gesloten!
               SELECT mldafm.mld_melding_key,
                      SIGN(mldafm.mld_melding_acceptdatum_std - COALESCE (mldacp.fac_tracking_datum, mldafm.fac_tracking_datum))
                         acp,
                      SIGN(DECODE (COALESCE (mldafm.mld_stdmelding_planbaar, 0), 0, mldafm.mld_melding_einddatum_std, mldafm.mld_melding_einddatum) - mldafm.fac_tracking_datum)
                         afm
                 FROM    (SELECT m.mld_melding_key,
                                 m.mld_melding_acceptdatum_std,
                                 sm.mld_stdmelding_planbaar,
                                 m.mld_melding_einddatum_std,
                                 m.mld_melding_einddatum,
                                 t.fac_tracking_datum
                            FROM fac_tracking t, mld_melding m, mld_stdmelding sm
                           WHERE t.fac_srtnotificatie_key IN (22, 27) -- MLDAFM/MLDREJ
                                 AND t.fac_tracking_datum > TRUNC (SYSDATE - 7) -- Tbv. performance!
                                 --AND fac.datumtijdplusuitvoertijd (t.fac_tracking_datum, 2, 'D') > TRUNC(SYSDATE)
                                 AND fac.count_work_days (t.fac_tracking_datum, SYSDATE) <= 2 -- Exclusief SYSDATE!
                                 AND t.fac_tracking_refkey = m.mld_melding_key
                                 AND m.mld_stdmelding_key = sm.mld_stdmelding_key) mldafm
                      LEFT JOIN
                         fac_tracking mldacp
                      ON mldafm.mld_melding_key = mldacp.fac_tracking_refkey
                         AND mldacp.fac_srtnotificatie_key = 21      -- MLDACP
                WHERE (mldafm.mld_melding_acceptdatum_std < COALESCE (mldacp.fac_tracking_datum, mldafm.fac_tracking_datum)
                       OR DECODE (COALESCE (mldafm.mld_stdmelding_planbaar, 0), 0, mldafm.mld_melding_einddatum_std, mldafm.mld_melding_einddatum) < mldafm.fac_tracking_datum))
   SELECT mld_melding_einddatum_std,
          DECODE (m.mld_melding_spoed, 1, 'Kritisch', 2, 'Hoog', 3, 'Normaal', 'Laag')
             prio,
          --sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key),
          '<a onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=fo&'
          || 'mld_key='
          || m.mld_melding_key
          || '")''>'
          || sd.ins_srtdiscipline_prefix
          || TO_CHAR (m.mld_melding_key)
          || '</a>'
             nummer,
          md.ins_discipline_omschrijving,
          sm.mld_stdmelding_omschrijving,
          m.mld_melding_datum datum,
          DECODE (
             og.alg_type,
             'R',
                l.alg_locatie_code
             || '-'
             || og.alg_gebouw_code
             || '-'
             || og.alg_verdieping_code
             || '-'
             || og.alg_ruimte_nr
             || ' '
             || og.alg_ruimte_omschrijving,
             'V',
                l.alg_locatie_code
             || '-'
             || og.alg_gebouw_code
             || '-'
             || og.alg_verdieping_code,
             'G',
             l.alg_locatie_code || '-' || og.alg_gebouw_code,
             'T',
             l.alg_locatie_code || '-' || og.alg_terreinsector_code,
             l.alg_locatie_code)
             plaats,
          m.mld_melding_omschrijving,
          pm.prs_perslid_naam_full,
          ms.mld_statuses_omschrijving,
          DECODE (x.acp, -1, DECODE (x.afm, -1, 'Acc.+Uitv.', 'Acceptatie'), 'Uitvoering')
             overschrijding,
          pb.prs_perslid_naam_full,
          m.mld_melding_einddatum_std einddatum
     FROM x,
          mld_melding m,
          mld_statuses ms,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          alg_locatie l,
          alg_v_onroerendgoed_gegevens og,
          prs_v_perslid_fullnames_all pm,
          prs_v_perslid_fullnames_all pb
    WHERE     x.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_indult = 0
          AND m.mld_melding_status = ms.mld_statuses_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_stdmelding_slabewaken = 1
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
          AND m.prs_perslid_key_voor = pm.prs_perslid_key
          AND m.mld_melding_behandelaar_key = pb.prs_perslid_key(+);

-- IVET#34141 10 maandelijkse reminder tbv AMI meldingen
CREATE OR REPLACE VIEW IVET_V_NOTI_MLD_AMI
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   'MLDINF',
            NULL,
            82761,                            -- User AMI
               'LET OP: Bewaartermijn overschreden (R'
            || m.mld_melding_key
            || ')',
            m.mld_melding_key,
            NULL
     FROM   mld_melding m, mld_stdmelding std
    WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
            AND std.mld_ins_discipline_key = 1761
            AND m.mld_melding_status != 1
            AND TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE - 305);


-- IVET#38124 rappor bo klussen lijst
-- -- 2881 = bo verhuizingen, 19001 = handyman
-- Kenmerken zijn verschillende soort kenmerken Naam, Van, Contactpersoon, Telefoon met een volgnummer
CREATE OR REPLACE VIEW ivet_v_rap_mldklussen
(
   soort,
   melding,
   omschrijving,
   datum,
   naam,
   van,
   naar,
   contactpersoon,
   telnr,
   meubilair,
   gewenste_bureauhoogte,
   werkaanvraagnummer,
   opmerking,
   gereed
)
AS
   SELECT '0. Leeg' soort,
          NULL melding,
          NULL omschrijving,
          NULL datum,
          NULL naam,
          NULL van,
          NULL naar,
          NULL contactpersoon,
          NULL telnr,
          NULL meubilair,
          NULL gewenste_bureauhoogte,
          NULL werkaanvraagnummerr,
          NULL opmerking,
          NULL gereed
     FROM DUAL
   UNION ALL
   SELECT '1. Verhuizing BO' soort,
          'R' || m.mld_melding_key melding,
          m.mld_melding_opmerking omschrijving,
          (SELECT TO_DATE (mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = 11961)
             datum,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km, mld_kenmerk k2
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                  AND k2.mld_srtkenmerk_key IN
                           (7141,
                            7142,
                            7143,
                            7144,
                            7145,
                            7146,
                            7147,
                            7148,
                            7149)
                  AND k2.mld_kenmerk_groep = m2.mld_kenmerk_groep)
             naam,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km, mld_kenmerk k2
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                  AND k2.mld_srtkenmerk_key IN
                           (7186,
                            7187,
                            7063,
                            7183,
                            7185,
                            7188,
                            7189,
                            7190,
                            7191)
                  AND k2.mld_kenmerk_groep = m2.mld_kenmerk_groep)
             van,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km, mld_kenmerk k2
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                  AND k2.mld_srtkenmerk_key IN
                           (7203,
                            7204,
                            7205,
                            7206,
                            7207,
                            7208,
                            7209,
                            7064,
                            7202)
                  AND k2.mld_kenmerk_groep = m2.mld_kenmerk_groep)
             naar,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = 11962)
             contactpersoon,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km, mld_kenmerk k2
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                  AND k2.mld_srtkenmerk_key IN
                           (7192,
                            7193,
                            7194,
                            7195,
                            7197,
                            7198,
                            7199,
                            7200,
                            7201)
                  AND k2.mld_kenmerk_groep = m2.mld_kenmerk_groep)
             telnr,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km, mld_kenmerk k2
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                  AND k2.mld_srtkenmerk_key IN
                           (7103,
                            7150,
                            7151,
                            7152,
                            7153,
                            7154,
                            7155,
                            7156,
                            7157)
                  AND k2.mld_kenmerk_groep = m2.mld_kenmerk_groep)
             meubilair,
          (SELECT fac_usrdata_omschr
             FROM mld_kenmerkmelding km, mld_kenmerk k2, fac_usrdata fu
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                  AND k2.mld_srtkenmerk_key IN
                           (7481,
                            7482,
                            7483,
                            7484,
                            7485,
                            7486,
                            7486,
                            7487,
                            7488)
                  AND k2.mld_kenmerk_groep = m2.mld_kenmerk_groep
                  AND fu.fac_usrtab_key = 3201
                  AND TO_CHAR (fac_usrdata_key) = mld_kenmerkmelding_waarde)
             gewenste_bureauhoogte,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m2.mld_melding_key
                  AND km.mld_kenmerk_key = 7210)
             werkaanvraagnummerr,
          NULL opmerking,
          NULL gereed
     FROM (SELECT DISTINCT mld_melding_key, k.mld_kenmerk_groep
             FROM mld_kenmerkmelding km, mld_kenmerk k
            WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                  AND mld_kenmerk_groep > 0) m2,
          mld_melding m
    WHERE     m2.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = 2881
          AND m.mld_melding_status IN (0, 2, 3, 99, 4, 7)
   UNION ALL
   SELECT '2. Handymanactiviteiten',
          'R' || m.mld_melding_key melding,
          m.mld_melding_opmerking,
          (SELECT TO_DATE (mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m.mld_melding_key
                  AND km.mld_kenmerk_key = 19001)
             datum,
          p.prs_perslid_naam,
          NULL vanl,
          aog.alg_plaatsaanduiding naar,
          (SELECT mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m.mld_melding_key
                  AND km.mld_kenmerk_key = 19081)
             contactpersoon,
          COALESCE (prs_perslid_telefoonnr, prs_perslid_mobiel) telnr,
          NULL,
          NULL,
          NULL,
          NULL,
          NULL
     FROM mld_melding m, prs_perslid p, alg_v_onroerendgoed_gegevens aog
    WHERE     mld_stdmelding_key = 216
          AND m.mld_melding_status IN (0, 2, 3, 99, 4, 7)
          AND m.prs_perslid_key = p.prs_perslid_key
          AND aog.alg_onroerendgoed_keys = m.mld_alg_onroerendgoed_keys;

CREATE OR REPLACE VIEW ivet_v_rap_mldkenmerk_gebruik
AS
   SELECT mld_kenmerk_key key,
          'Kenmerk' soort,
          niveau,
          sk.mld_srtkenmerk_omschrijving omschrijving,
          mld_stdmelding_key melding_key,
          mld_stdmelding_omschrijving melding_omschrijving,
          ins_discipline_key vakgroep_key,
          ins_discipline_omschrijving vakgroep_omschrijving,
          ins_srtdiscipline_key vakgroeptype_key,
          ins_srtdiscipline_omschrijving vakgroeptype_omschrijving,
          COALESCE (
             NVL2 (mld_stdmelding_verwijder, 'Melding verwijderd', NULL),
             NVL2 (ins_discipline_verwijder, 'Vakgroep verwijderd', NULL),
             NVL2 (ins_srtdiscipline_verwijder,
                   'Vakgroeptype verwijderd',
                   NULL),
             NVL2 (mld_srtkenmerk_verwijder, 'Kenmerksoort verwijderd', NULL),
             NULL)
             opmerking
     FROM (SELECT mld_kenmerk_key,
                  'Vakgroeptype' niveau,
                  mld_srtkenmerk_key,
                  NULL mld_stdmelding_key,
                  NULL mld_stdmelding_omschrijving,
                  NULL mld_stdmelding_vervaldatum,
                  NULL mld_stdmelding_verwijder,
                  NULL ins_discipline_key,
                  NULL ins_discipline_omschrijving,
                  NULL ins_discipline_verwijder,
                  isd.ins_srtdiscipline_key,
                  ins_srtdiscipline_omschrijving,
                  ins_srtdiscipline_verwijder
             FROM mld_kenmerk mk, ins_srtdiscipline isd
            WHERE     mld_kenmerk_verwijder IS NULL
                  AND mld_kenmerk_niveau = 'T'
                  AND mk.mld_stdmelding_key = isd.ins_srtdiscipline_key
           UNION ALL
           SELECT mld_kenmerk_key,
                  'Vakgroep' niveau,
                  mld_srtkenmerk_key,
                  NULL mld_stdmelding_key,
                  NULL mld_stdmelding_omschrijving,
                  NULL mld_stdmelding_vervaldatum,
                  NULL mld_stdmelding_verwijder,
                  d.ins_discipline_key,
                  d.ins_discipline_omschrijving,
                  d.ins_discipline_verwijder,
                  isd.ins_srtdiscipline_key,
                  ins_srtdiscipline_omschrijving,
                  ins_srtdiscipline_verwijder
             FROM mld_kenmerk mk, mld_discipline d, ins_srtdiscipline isd
            WHERE     mld_kenmerk_verwijder IS NULL
                  AND mld_kenmerk_niveau = 'D'
                  AND mk.mld_stdmelding_key = d.ins_discipline_key
                  AND d.ins_srtdiscipline_key = isd.ins_srtdiscipline_key
           UNION ALL
           SELECT mld_kenmerk_key,
                  'Melding' niveau,
                  mld_srtkenmerk_key,
                  std.mld_stdmelding_key,
                  std.mld_stdmelding_omschrijving,
                  std.mld_stdmelding_vervaldatum,
                  std.mld_stdmelding_verwijder,
                  d.ins_discipline_key,
                  d.ins_discipline_omschrijving,
                  d.ins_discipline_verwijder,
                  isd.ins_srtdiscipline_key,
                  ins_srtdiscipline_omschrijving,
                  ins_srtdiscipline_verwijder
             FROM mld_kenmerk mk,
                  mld_discipline d,
                  ins_srtdiscipline isd,
                  mld_stdmelding std
            WHERE     mld_kenmerk_verwijder IS NULL
                  AND mld_kenmerk_niveau = 'S'
                  AND mk.mld_stdmelding_key = std.mld_stdmelding_key
                  AND std.mld_ins_discipline_key = d.ins_discipline_key
                  AND d.ins_srtdiscipline_key = isd.ins_srtdiscipline_key) k,
          mld_srtkenmerk sk
    WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
          AND (   sk.mld_srtkenmerk_verwijder IS NOT NULL
               OR k.mld_stdmelding_verwijder IS NOT NULL
               OR k.ins_discipline_verwijder IS NOT NULL
               OR k.ins_srtdiscipline_verwijder IS NOT NULL)
   UNION ALL
   SELECT key,
          soort,
          NULL niveau,
          omschrijving,
          NULL melding_key,
          NULL melding_omschrijving,
          NULL vakgroep_key,
          NULL vakgroep_omschrijving,
          NULL vakgroeptype_key,
          NULL vakgroeptype_omschrijving,
          opmerking
     FROM (SELECT mld_srtkenmerk_key key,
                  'Kenmerksoort' soort,
                  mld_srtkenmerk_omschrijving omschrijving,
                  'Geen kenmerken voor deze kenmerksoort' opmerking
             FROM mld_srtkenmerk
            WHERE mld_srtkenmerk_verwijder IS NULL
                  AND mld_srtkenmerk_key NOT IN
                           (SELECT mld_srtkenmerk_key
                              FROM mld_kenmerk
                             WHERE mld_kenmerk_verwijder IS NULL)
           UNION ALL
           SELECT fac_usrtab_key,
                  'Eigen tabel',
                  fac_usrtab_naam,
                  'Geen kenmerkdomeinen voor deze Eigen tabel'
             FROM fac_usrtab
            WHERE fac_usrtab_verwijder IS NULL
                  AND fac_usrtab_key NOT IN
                           (SELECT fac_usrtab_key
                              FROM fac_kenmerkdomein
                             WHERE fac_kenmerkdomein_verwijder IS NULL)
           UNION ALL
           SELECT fac_kenmerkdomein_key,
                  'Kenmerkdomein',
                  fac_kenmerkdomein_omschrijving,
                  'Geen kenmerksoorten voor dit Kenmerkdomein'
             FROM fac_kenmerkdomein
            WHERE fac_kenmerkdomein_verwijder IS NULL
                  AND fac_kenmerkdomein_xmlnode = 'MLD'
                  AND fac_kenmerkdomein_key NOT IN
                           (SELECT fac_kenmerkdomein_key
                              FROM mld_srtkenmerk
                             WHERE mld_srtkenmerk_verwijder IS NULL));

CREATE OR REPLACE VIEW ivet_v_rap_bmc_noscan
(
   omschrijving,
   controledatumlaatst,
   datum
)
AS
   SELECT
      d.ins_deel_omschrijving,
      MAX (dsc.ins_deelsrtcontrole_datum) KEEP (DENSE_RANK LAST ORDER BY dsc.ins_deel_key) last_controle_datum,
      SYSDATE
   FROM ins_deelsrtcontrole dsc, ins_deel d, prs_perslid pr
   WHERE     dsc.ins_srtcontrole_key = 310 --Periodieke controletaak BMC bij Objectsoort Brandmeldcentrale (Discipline = Reserveringen; Objectgroep = Brandmeldcentrale)
            AND dsc.ins_deel_key = d.ins_deel_key
            AND  (select MAX (TRUNC(dsc.ins_deelsrtcontrole_datum)) from ins_deelsrtcontrole dsc where d.ins_deel_key = dsc.ins_deel_key) < TRUNC (SYSDATE) - 1
   GROUP BY dsc.ins_deel_key, d.ins_deel_omschrijving;

CREATE OR REPLACE VIEW ivet_v_noti_bmc_noscan
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
     SELECT DISTINCT
            'CUST03' AS CODE,
            NULL,
            98001,                                                                                                      -- Persoon _Security, voor de emailadressen
               'Attentie: bijgevoegde brandmeldcentrales zijn niet gescand',
            (SELECT fac_usrrap_key
               FROM fac_usrrap
              WHERE fac_usrrap_view_name = 'IVET_V_RAP_BMC_NOSCAN') rapportnr,
            NULL
       FROM IVET_V_RAP_BMC_NOSCAN;



------ View voor controleren op OSLOGIN(Alternatieve inlognaam)   ------
CREATE OR REPLACE VIEW IVET_V_PERSLID_OSLOGIN
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_NAAM_FULL,
    PRS_PERSLID_NAAM_FRIENDLY,
    PRS_PERSLID_OSLOGIN2,
    PRS_AFDELING_KEY,
    PRS_PERSLID_EMAIL,
    PRS_PERSLID_TELEFOONNR,
    ALG_GEBOUW_OMSCHRIJVING,
    PRS_PERSLID_NR,
    PRS_KOSTENPLAATS_OMSCHRIJVING
)
AS
    SELECT p.prs_perslid_key,
              p.prs_perslid_naam
           || DECODE (p.prs_perslid_voorletters,
                      NULL, '',
                      ', ' || p.prs_perslid_voorletters)
           || DECODE (p.prs_perslid_tussenvoegsel,
                      NULL, '',
                      ' ' || p.prs_perslid_tussenvoegsel)
           || DECODE (p.prs_perslid_voornaam,
                      NULL, '',
                      ' (' || p.prs_perslid_voornaam || ')')
               prs_perslid_naam_full,
              DECODE (p.prs_perslid_voornaam,
                      NULL, '',
                      p.prs_perslid_voornaam || ' ')
           || DECODE (p.prs_perslid_tussenvoegsel,
                      NULL, '',
                      p.prs_perslid_tussenvoegsel || ' ')
           || prs_perslid_naam
               prs_perslid_naam_friendly,
           p.prs_perslid_oslogin2,
           p.prs_afdeling_key,
           p.prs_perslid_email,
           p.prs_perslid_telefoonnr,
           w.ALG_GEBOUW_OMSCHRIJVING,
           p.prs_perslid_nr,
           k.PRS_KOSTENPLAATS_OMSCHRIJVING
      FROM prs_v_perslidwerkplek_gegevens  w,
           prs_perslid                     p,
           prs_afdeling                    a,
           prs_kostenplaats                k
     WHERE     p.prs_perslid_key = w.prs_perslid_key
           AND p.prs_perslid_oslogin2 IS NOT NULL
           AND a.prs_afdeling_key = p.prs_afdeling_key
           AND a.prs_kostenplaats_key = k.prs_kostenplaats_key;

-- IVET#52961 Rapport voor afhandeling periodieke taken (in eerste instantie voor brandmeldcentrales)
CREATE OR REPLACE VIEW ivet_v_rap_tasks
AS
SELECT
    disc.ins_discipline_omschrijving AS Discipline,
    sg.ins_srtgroep_omschrijving AS Groep,
    sd.ins_srtdeel_omschrijving AS Objectsoort,
    d.ins_deel_omschrijving AS Objectomschrijving,
    sc.ins_srtcontrole_omschrijving AS Taak,
    TRUNC(dsc.ins_deelsrtcontrole_datum_org) AS Controle_datum,
    TRUNC(dsc.ins_deelsrtcontrole_datum) AS Datum_uitvoer,
    TO_CHAR(dsc.ins_deelsrtcontrole_datum , 'HH24:MI' ) AS Tijd_uitvoer,
    (SELECT cm.ins_controlemode_oms
        FROM ins_controlemode cm
        WHERE cm.ins_controlemode_key = dsc.ins_controlemode_key) AS Status,
    dsc.ins_deelsrtcontrole_opmerking AS Opmerking
FROM
    ins_deelsrtcontrole dsc,
    ins_srtcontrole sc,
    ins_deel d,
    ins_srtdeel sd,
    ins_srtgroep sg,
    ins_tab_discipline disc
WHERE
    dsc.ins_deel_key = d.ins_deel_key
    AND dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key
    AND d.ins_srtdeel_key = sd.ins_srtdeel_key
    AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
    AND disc.ins_discipline_key = sg.ins_discipline_key
ORDER BY
    disc.ins_discipline_omschrijving,
    sg.ins_srtgroep_omschrijving,
    sd.ins_srtdeel_omschrijving,
    d.ins_deel_omschrijving,
    sc.ins_srtcontrole_omschrijving,
    dsc.ins_deelsrtcontrole_datum_org DESC;

--IVET#54995 notificaties reserveringen / meldingsreserveringen
CREATE OR REPLACE VIEW ivet_v_noti_resreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT code,
          sender,
          receiver,
          'Herinnering - ' || REPLACE (text, '  ', ' '),
          key,
          xkey,
          NULL,
          NULL
     FROM fac_v_noti_resreminder n, prs_perslid p
    WHERE n.receiver = p.prs_perslid_key
          AND prs_perslid_naam NOT LIKE 'INACTIEF:%';

CREATE OR REPLACE VIEW ivet_v_noti_tafelresreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
SELECT 'CUST04',
          NULL,
          m.prs_perslid_key,
          'Reservering '
          || m.mld_melding_key
          || ': U heeft op '
          || (SELECT km.mld_kenmerkmelding_waarde
                FROM mld_kenmerkmelding km
                WHERE km.mld_kenmerk_key = 16741                                         --Key voor kenmerk datum vanaf
                AND km.mld_melding_key = m.mld_melding_key)
          || ' om '
          || (SELECT km.mld_kenmerkmelding_waarde
                FROM mld_kenmerkmelding km
                WHERE km.mld_kenmerk_key = 15222                                         --Key voor kenmerk tijd
                AND km.mld_melding_key = m.mld_melding_key)
          || ' een tafel gereserveerd.' AS text,
        m.mld_melding_key,
        NULL,
        NULL,
        NULL
FROM mld_melding m
WHERE
        m.mld_stdmelding_key = 2661                                                             --Key voor stdmelding 'Tafel reserveren restaurant'
        AND
                (SELECT (TRUNC (fac.safe_to_date(km.mld_kenmerkmelding_waarde, 'DD-MM-YYYY')))
                        FROM mld_kenmerkmelding km
                        WHERE km.mld_kenmerk_key = 16741                                         --Key voor kenmerk tijd
                        AND km.mld_melding_key = m.mld_melding_key) =
                (CASE WHEN fac.getweekdaynum(SYSDATE) = 6
                        THEN(TRUNC(SYSDATE)+3)
                        ELSE (TRUNC(SYSDATE)+1)
                        END);

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile