-- Script containing customer specific db-configuration for RENK.
-- (c) 2011 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
set echo on
spool xrenk.lst

/* Formatted on 4-4-2012 16:44:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_rap_import_log
AS
   SELECT   imp_log_status fclt_f_status,
            imp_log_omschrijving omschrijving,
            imp_log_hint opmerking
     FROM   imp_log l
    WHERE   l.fac_import_key = (SELECT   MAX (fac_import_key)
                                  FROM   fac_import
                                 WHERE   fac_import_app_key = 41);

/* Formatted on 24-2-2012 11:44:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE renk_import_prs (p_import_key IN NUMBER)
IS
   c_fielddelimitor                VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);              -- Input line
   v_aanduiding                    VARCHAR2 (200);
   v_errorhint                     VARCHAR2 (1000);
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER := 0;
   v_ongeldig                      NUMBER (1);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_count                         NUMBER;
   -- De importvelden:
   v_prs_perslid_oslogin           VARCHAR2 (256);
   v_prs_perslid_titel             VARCHAR2 (256);
   v_prs_perslid_naam              VARCHAR2 (256);
   v_prs_perslid_tussenvoegsel     VARCHAR2 (256);
   v_prs_perslid_voorletters       VARCHAR2 (256);
   v_prs_perslid_voornaam          VARCHAR2 (256);
   v_prs_afdeling_naam             VARCHAR2 (256);
   v_prs_afdeling_omschrijving     VARCHAR2 (256);
   v_prs_srtperslid_omschrijving   VARCHAR2 (256);
   --v_alg_locatie_code              VARCHAR2 (256);
   v_alg_gebouw_code               VARCHAR2 (256);
   --v_alg_verdieping_code           VARCHAR2 (256);
   v_alg_ruimte_nr                 VARCHAR2 (256);
   v_prs_perslid_telefoonnr        VARCHAR2 (256);
   v_prs_perslid_mobiel            VARCHAR2 (256);
   v_prs_perslid_email             VARCHAR2 (256);
   v_prs_perslid_nr                VARCHAR2 (256);
   v_prs_perslid_ingangsdatum      VARCHAR2 (256);
   v_prs_perslid_einddatum         VARCHAR2 (256);
   -- Overig:
   v_prs_perslid_ingangs_date      DATE;
   v_prs_perslid_eind_date         DATE;

   CURSOR c1
   IS
        SELECT   *
          FROM   fac_imp_file
         WHERE   fac_import_key = p_import_key
      ORDER BY   fac_imp_file_index;
BEGIN
   -- Eerst opruiming
   DELETE FROM   renk_imp_prs;

   COMMIT;
   v_count_tot := 0;
   v_count_import := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_aanduiding := '';
         v_errorhint := 'Fout bij opvragen te importeren rij';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         -- 01
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_oslogin);
         -- 02
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_titel);
         -- 03
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
         -- 04
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_tussenvoegsel);
         -- 05
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_voorletters);
         -- 06
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_voornaam);
         -- 07
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
         -- 08
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_afdeling_omschrijving);
         -- 09
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_srtperslid_omschrijving);
         -- xx
         --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
         -- 10
         fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
         -- xx
         --fac.imp_getfield (v_newline,
         --                  c_fielddelimitor,
         --                  v_alg_verdieping_code);
         -- 11
         fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr);
         -- 12
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_telefoonnr);
         -- 13
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);
         -- 14
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
         -- 15
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
         -- 16
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_ingangsdatum);
         -- 17
         fac.imp_getfield (v_newline,
                           c_fielddelimitor,
                           v_prs_perslid_einddatum);
         --
         v_aanduiding :=
               '['
            || v_prs_perslid_oslogin
            || '|'
            || v_prs_perslid_naam
            || '|'
            || v_prs_perslid_tussenvoegsel
            || '|'
            || v_prs_perslid_voornaam
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF     UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM'
               AND UPPER (v_prs_perslid_titel) = 'TITEL'
               AND UPPER (v_prs_perslid_naam) = 'PERSOONACHTERNAAM'
               AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSEL'
               AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS'
               AND UPPER (v_prs_perslid_voornaam) = 'VOORNAAM'
               AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE'
               AND UPPER (v_prs_afdeling_omschrijving) =
                     'AFDELINGSOMSCHRIJVING'
               AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
               --AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
               AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
               --AND UPPER (v_alg_verdieping_code) = 'BOUWLAAGVOLGNUMMER'
               AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
               AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOONNUMMER'
               AND UPPER (v_prs_perslid_mobiel) = 'MOBIEL'
               AND UPPER (v_prs_perslid_email) = 'EMAIL'
               AND UPPER (v_prs_perslid_nr) = 'PERSONEELSNUMMER'
               AND UPPER (v_prs_perslid_ingangsdatum) = 'INDIENSTDATUM'
               AND UPPER (v_prs_perslid_einddatum) = 'UITDIENSTDATUM'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errorhint := 'Ongeldige loginnaam';
            v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);

            IF (v_prs_perslid_oslogin IS NULL
                OR LENGTH (v_prs_perslid_oslogin) > 30)
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (
                  p_import_key,
                  'E',
                  v_aanduiding || 'Loginnaam onbekend of te lang',
                  'Loginnaam is verplicht; regel wordt overgeslagen!'
               );
               COMMIT;
            END IF;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            /*
                        --
                        v_errorhint := 'Ongeldige locatiecode';
                        v_alg_locatie_code := TRIM (v_alg_locatie_code);

                        IF LENGTH (v_alg_locatie_code) > 10
                        THEN
                           v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
                           fac.imp_writelog (
                              p_import_key,
                              'W',
                              v_aanduiding || 'Locatiecode te lang',
                                 'Locatiecode wordt afgebroken tot ['
                              || v_alg_locatie_code
                              || ']'
                           );
                           COMMIT;
                        END IF;
            */
            --
            v_errorhint := 'Ongeldige gebouwcode';
            v_alg_gebouw_code := TRIM (v_alg_gebouw_code);

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

            /*
                        --
                        v_errorhint := 'Ongeldige verdiepingcode';
                        v_alg_verdieping_code := TRIM (v_alg_verdieping_code);

                        IF LENGTH (v_alg_verdieping_code) > 10
                        THEN
                           v_alg_verdieping_code := SUBSTR (v_alg_verdieping_code, 1, 10);
                           fac.imp_writelog (
                              p_import_key,
                              'W',
                              v_aanduiding || 'Verdiepingcode te lang',
                                 'Verdiepingcode wordt afgebroken tot ['
                              || v_alg_verdieping_code
                              || ']'
                           );
                           COMMIT;
                        END IF;
            */
            --
            v_errorhint := 'Ongeldig ruimtenummer';
            v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);

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

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

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

            --
            v_errorhint := 'Ongeldig mobielnummer';
            v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);

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

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

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

            -- LET OP: Personeelsnummer - nog - niet gebruikt!
            v_errorhint := 'Ongeldig personeelsnummer';
            v_prs_perslid_nr := TRIM (v_prs_perslid_nr);

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

            --
            v_errorhint := 'Ongeldige datum in dienst';
            v_prs_perslid_ingangsdatum := TRIM (v_prs_perslid_ingangsdatum);

            IF v_prs_perslid_ingangsdatum IS NOT NULL
            THEN
               BEGIN
                  v_prs_perslid_ingangs_date :=
                     TO_DATE (v_prs_perslid_ingangsdatum, 'dd-mm-yyyy');
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     v_ongeldig := 1;
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg :=
                           v_errorhint
                        || ' ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                     COMMIT;
               END;
            ELSE
               v_prs_perslid_ingangs_date := NULL;
            END IF;

            --
            v_errorhint := 'Ongeldige datum uit dienst';
            v_prs_perslid_einddatum := TRIM (v_prs_perslid_einddatum);

            IF v_prs_perslid_einddatum IS NOT NULL
            THEN
               BEGIN
                  v_prs_perslid_eind_date :=
                     TO_DATE (v_prs_perslid_einddatum, 'dd-mm-yyyy');
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     v_ongeldig := 1;
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg :=
                           v_errorhint
                        || ' ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                     COMMIT;
               END;
            ELSE
               v_prs_perslid_eind_date := NULL;
            END IF;

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

                  INSERT INTO renk_imp_prs (imp_datum,
                                            prs_perslid_oslogin,
                                            prs_perslid_titel,
                                            prs_perslid_naam,
                                            prs_perslid_tussenvoegsel,
                                            prs_perslid_voorletters,
                                            prs_perslid_voornaam,
                                            prs_afdeling_naam,
                                            prs_afdeling_omschrijving,
                                            prs_srtperslid_omschrijving,
                                            --alg_locatie_code,
                                            alg_gebouw_code,
                                            --alg_verdieping_code,
                                            alg_ruimte_nr,
                                            prs_perslid_telefoonnr,
                                            prs_perslid_mobiel,
                                            prs_perslid_email,
                                            prs_perslid_nr,
                                            prs_perslid_ingangsdatum,
                                            prs_perslid_einddatum)
                    VALUES   (SYSDATE,
                              v_prs_perslid_oslogin,
                              v_prs_perslid_titel,
                              v_prs_perslid_naam,
                              v_prs_perslid_tussenvoegsel,
                              v_prs_perslid_voorletters,
                              v_prs_perslid_voornaam,
                              v_prs_afdeling_naam,
                              v_prs_afdeling_omschrijving,
                              v_prs_srtperslid_omschrijving,
                              --v_alg_locatie_code,
                              v_alg_gebouw_code,
                              --v_alg_verdieping_code,
                              v_alg_ruimte_nr,
                              v_prs_perslid_telefoonnr,
                              v_prs_perslid_mobiel,
                              v_prs_perslid_email,
                              v_prs_perslid_nr,
                              v_prs_perslid_ingangs_date,
                              v_prs_perslid_eind_date);

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

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

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

/* Formatted on 24-2-2012 11:44:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE renk_update_prs (p_import_key IN NUMBER)
IS
   c_persoon_inactief       VARCHAR2 (30) := 'INACTIEF: ';
   -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een e-mail
   c_max_delta_percentage   NUMBER (10) := 40;       -- Per RENK#27766 op 40%!
   -- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
   c_ruimte_nr              VARCHAR2 (10) := '0.00';
   -- Groep waar personen in geplaatst worden (indien nog geen groep)
   c_groep_upper            VARCHAR2 (30) := '_DEFAULT';
   c_profiel_omschrijving   VARCHAR2 (30) := 'DEFAULT';
   v_aanduiding             VARCHAR2 (200);
   v_errorhint              VARCHAR2 (1000);
   v_errormsg               VARCHAR2 (1000);
   oracle_err_num           NUMBER;
   oracle_err_mes           VARCHAR2 (200);
   v_count_prs_import       NUMBER (10);     -- #actieve personen  na  import!
   v_count_prs_actual       NUMBER (10);     -- #actieve personen voor import!
   v_count_tot              NUMBER (10);
   v_count_error            NUMBER (10);
   v_count                  NUMBER (10);
   --
   v_perslid_key            NUMBER (10);
   v_afdeling_key           NUMBER (10);
   v_srtperslid_key         NUMBER (10);
   --v_locatie_key            NUMBER (10);
   v_gebouw_key             NUMBER (10);
   v_gebouw_code            VARCHAR2 (10);
   --v_verdieping_key         NUMBER (10);
   v_ruimte_key             NUMBER (10);
   v_ruimte_nr              VARCHAR2 (10);
   v_wp_volgnr              NUMBER (3);
   v_wp_oms                 VARCHAR2 (30);
   v_wp_key                 NUMBER (10);
   v_groep_key              NUMBER (10);
   v_profiel_key            NUMBER (10);

   -- Let op! Personen die niet meer in dienst zijn -> niet in renk_imp_prs!
   -- Dubbele oslogins? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
   CURSOR cdelprs
   IS
      SELECT   p.prs_perslid_key,
               p.prs_perslid_oslogin,
               p.prs_perslid_naam,
               p.prs_perslid_voornaam
        FROM   prs_v_aanwezigperslid p
       WHERE   (p.prs_perslid_oslogin IS NULL
                OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\')
               AND p.prs_perslid_oslogin2 IS NULL
               AND NOT EXISTS
                     (SELECT   1
                        FROM   renk_imp_prs ip
                       WHERE   UPPER (ip.prs_perslid_oslogin) =
                                  UPPER (p.prs_perslid_oslogin));

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

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

   -- Let op! Personen die niet meer in dienst zijn -> niet in renk_imp_prs!
   -- Dubbele oslogins? Dan krijgt iemand mogelijk de verkeerde plaats!
   CURSOR cwp
   IS
      SELECT   p.*, ip.alg_gebouw_code, ip.alg_ruimte_nr
        FROM   renk_imp_prs ip, prs_v_aanwezigperslid p
       WHERE   ip.alg_gebouw_code IS NOT NULL
               AND UPPER (ip.prs_perslid_oslogin) =
                     UPPER (p.prs_perslid_oslogin);

   -- Alle actieve personen met oslogin (ie. de import-doelgroep) zonder een werkplek
   CURSOR cnowp
   IS
      SELECT   p.prs_perslid_key,
               p.prs_perslid_oslogin,
               p.prs_perslid_naam,
               p.prs_perslid_voornaam
        FROM   prs_v_aanwezigperslid p
       WHERE   p.prs_perslid_oslogin IS NOT NULL
               AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
               AND NOT EXISTS
                     (SELECT   1
                        FROM   prs_perslidwerkplek pw
                       WHERE   pw.prs_perslid_key = p.prs_perslid_key);

   -- Alle aanwezige personen met oslogin (ie. de import-doelgroep) niet in een groep
   CURSOR cnogroup
   IS
      SELECT   p.prs_perslid_key,
               p.prs_perslid_oslogin,
               p.prs_perslid_naam,
               p.prs_perslid_voornaam
        FROM   prs_v_aanwezigperslid p
       WHERE   p.prs_perslid_oslogin IS NOT NULL
               AND NOT EXISTS
                     (SELECT   1
                        FROM   fac_gebruikersgroep g
                       WHERE   g.prs_perslid_key = p.prs_perslid_key);
BEGIN
   -- Bepaal oslogin-match tussen Facilitor en RECENT importbestand ofwel het aantal
   -- actieve personen na import.
   -- RECENT betekent niet meer dan een kwartiertje oud (14,4 minuten); dit voorkomt
   -- dat - als er geen nieuw importbestand is aangeleverd - telkens dezelfde fouten
   -- worden gerapporteerd (nl. op basis van een oud importbestand in RENK_IMP_PRS).
   SELECT   COUNT ( * )
     INTO   v_count_prs_import
     FROM   prs_v_aanwezigperslid p, renk_imp_prs ip
    WHERE   p.prs_perslid_oslogin IS NOT NULL
            AND UPPER (p.prs_perslid_oslogin) =
                  UPPER (ip.prs_perslid_oslogin)
            AND (ip.imp_datum + 0.01) > SYSDATE;

   -- Bepaal huidig aantal actieve personen in Facilitor.
   SELECT   DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
     INTO   v_count_prs_actual
     FROM   prs_v_aanwezigperslid
    WHERE   prs_perslid_oslogin IS NOT NULL;

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

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

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

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

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

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

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

               fac.imp_writelog (
                  p_import_key,
                  'I',
                     'Persoon met loginnaam ['
                  || recdelprs.prs_perslid_oslogin
                  || '] en naam ['
                  || recdelprs.prs_perslid_naam
                  || ', '
                  || recdelprs.prs_perslid_voornaam
                  || '] is verwijderd',
                  'Persoon is verwijderd'
               );
               COMMIT;
            ELSE
               -- Staat persoon INACTIEF?
               v_errorhint := 'Fout bij bepalen INACTIEF';

               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   prs_perslid p
                WHERE   p.prs_perslid_naam LIKE c_persoon_inactief || '%'
                        AND p.prs_perslid_key = recdelprs.prs_perslid_key;

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

                  -- Persoon INACTIEF maken (update naam + reset oslogin)
                  UPDATE   prs_perslid
                     SET   prs_perslid_naam =
                              SUBSTR (c_persoon_inactief || prs_perslid_naam,
                                      1,
                                      30),
                           prs_perslid_oslogin = NULL
                   WHERE   prs_perslid_key = recdelprs.prs_perslid_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                        'Persoon met loginnaam ['
                     || recdelprs.prs_perslid_oslogin
                     || '] en naam ['
                     || recdelprs.prs_perslid_naam
                     || ', '
                     || recdelprs.prs_perslid_voornaam
                     || '] is INACTIEF gemaakt',
                     'Persoon is INACTIEF gemaakt'
                  );
               ELSE
                  v_errorhint := 'Fout bij INACTIEF houden persoon';

                  -- Persoon INACTIEF houden (reset oslogin; indien handmatig INACTIEF gemaakt)
                  UPDATE   prs_perslid
                     SET   prs_perslid_oslogin = NULL
                   WHERE   prs_perslid_naam LIKE c_persoon_inactief || '%'
                           AND prs_perslid_oslogin IS NOT NULL;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                        'Persoon met loginnaam ['
                     || recdelprs.prs_perslid_oslogin
                     || '] en naam ['
                     || recdelprs.prs_perslid_naam
                     || ', '
                     || recdelprs.prs_perslid_voornaam
                     || '] is INACTIEF',
                     'Persoon is INACTIEF'
                  );
               END IF;

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

      v_count_tot := 0;
      v_count_error := 0;

      FOR recsrtperslid IN csrtperslid
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  recsrtperslid.prs_perslid_oslogin
               || '|'
               || recsrtperslid.prs_perslid_naam
               || '|'
               || recsrtperslid.prs_perslid_voornaam
               || '|'
               || recsrtperslid.prs_srtperslid_omschrijving
               || ' - ';
            v_errorhint := 'Fout bij bepalen functie';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   prs_v_aanwezigsrtperslid
             WHERE   UPPER (prs_srtperslid_omschrijving) =
                        UPPER (recsrtperslid.prs_srtperslid_omschrijving);

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

               INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
                 VALUES   (recsrtperslid.prs_srtperslid_omschrijving);

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

      fac.imp_writelog (
         p_import_key,
         'S',
         'Functie: verwerkte regels zonder foutmelding: '
         || TO_CHAR (v_count_tot - v_count_error),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Functie: verwerkte regels met foutmelding: '
         || TO_CHAR (v_count_error),
         ''
      );
      COMMIT;
      v_count_tot := 0;
      v_count_error := 0;

      FOR recperslid IN cperslid
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  recperslid.prs_perslid_oslogin
               || '|'
               || recperslid.prs_perslid_naam
               || '|'
               || recperslid.prs_perslid_voornaam
               || ' - ';
            v_errorhint :=
                  'Fout bij bepalen functie ['
               || recperslid.prs_srtperslid_omschrijving
               || ']';

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

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

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

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

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

            COMMIT;

            v_errorhint := 'Fout bij bepalen persoon';

            SELECT   COUNT ( * ), MAX (prs_perslid_key)
              INTO   v_count, v_perslid_key
              FROM   prs_v_aanwezigperslid
             WHERE   UPPER (prs_perslid_oslogin) =
                        UPPER (recperslid.prs_perslid_oslogin);

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

                  INSERT INTO prs_perslid (
                                              prs_perslid_module,
                                              prs_srtperslid_key,
                                              prs_afdeling_key,
                                              prs_perslid_oslogin,
                                              prs_perslid_naam,
                                              prs_perslid_tussenvoegsel,
                                              prs_perslid_voorletters,
                                              prs_perslid_voornaam,
                                              prs_perslid_titel,
                                              prs_perslid_telefoonnr,
                                              prs_perslid_mobiel,
                                              prs_perslid_email,
                                              prs_perslid_nr,
                                              prs_perslid_ingangsdatum,
                                              prs_perslid_einddatum,
                                              fac_profiel_key
                              )
                     VALUES   (
                                  'PRS',
                                  v_srtperslid_key,
                                  v_afdeling_key,
                                  recperslid.prs_perslid_oslogin,
                                  recperslid.prs_perslid_naam,
                                  recperslid.prs_perslid_tussenvoegsel,
                                  recperslid.prs_perslid_voorletters,
                                  recperslid.prs_perslid_voornaam,
                                  recperslid.prs_perslid_titel,
                                  recperslid.prs_perslid_telefoonnr,
                                  recperslid.prs_perslid_mobiel,
                                  recperslid.prs_perslid_email,
                                  recperslid.prs_perslid_nr,
                                  COALESCE (
                                     recperslid.prs_perslid_ingangsdatum,
                                     SYSDATE
                                  ),
                                  recperslid.prs_perslid_einddatum,
                                  v_profiel_key
                              )
                  RETURNING   prs_perslid_key      INTO   v_perslid_key;
               ELSE
                  v_errorhint := 'Fout bij wijzigen persoon';

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

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

      fac.imp_writelog (
         p_import_key,
         'S',
         'Persoon: verwerkte regels zonder foutmelding: '
         || TO_CHAR (v_count_tot - v_count_error),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Persoon: verwerkte regels met foutmelding: '
         || TO_CHAR (v_count_error),
         ''
      );
      COMMIT;
      v_count_tot := 0;
      v_count_error := 0;

      FOR recwp IN cwp
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  recwp.prs_perslid_oslogin
               || '|'
               || recwp.prs_perslid_naam
               || '|'
               || recwp.prs_perslid_voornaam
               || '|'
               || recwp.alg_gebouw_code
               || '|'
               || recwp.alg_ruimte_nr
               || ' - ';
            v_errorhint := 'Fout bij bepalen persoon';

            SELECT   prs_perslid_key
              INTO   v_perslid_key
              FROM   prs_v_aanwezigperslid
             WHERE   UPPER (prs_perslid_oslogin) =
                        UPPER (recwp.prs_perslid_oslogin);

            v_errorhint := 'Fout bij bepalen gebouw';

            SELECT   alg_gebouw_key
              INTO   v_gebouw_key
              FROM   alg_v_aanweziggebouw
             WHERE   UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code);

            v_errorhint := 'Fout bij bepalen beoogde ruimte in gebouw';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   alg_v_aanwezigruimte r, alg_verdieping v
             WHERE       r.alg_ruimte_upper_nr = UPPER (recwp.alg_ruimte_nr)
                     AND r.alg_verdieping_key = v.alg_verdieping_key
                     AND v.alg_gebouw_key = v_gebouw_key;

            IF v_count <> 1
            THEN
               v_errorhint := 'Fout bij bepalen default ruimte in gebouw';

               SELECT   r.alg_ruimte_key
                 INTO   v_ruimte_key
                 FROM   alg_v_aanwezigruimte r, alg_verdieping v
                WHERE       r.alg_ruimte_upper_nr = c_ruimte_nr
                        AND r.alg_verdieping_key = v.alg_verdieping_key
                        AND v.alg_gebouw_key = v_gebouw_key;
            ELSE
               SELECT   r.alg_ruimte_key
                 INTO   v_ruimte_key
                 FROM   alg_v_aanwezigruimte r, alg_verdieping v
                WHERE   r.alg_ruimte_upper_nr = UPPER (recwp.alg_ruimte_nr)
                        AND r.alg_verdieping_key = v.alg_verdieping_key
                        AND v.alg_gebouw_key = v_gebouw_key;
            END IF;

            v_errorhint :=
               'Fout bij bepalen of persoon in gebouw een werkplek heeft';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   prs_perslidwerkplek pw,
                     prs_werkplek w,
                     alg_ruimte r,
                     alg_verdieping v
             WHERE       pw.prs_perslid_key = v_perslid_key
                     AND pw.prs_werkplek_key = w.prs_werkplek_key
                     AND w.prs_alg_ruimte_key = r.alg_ruimte_key
                     AND r.alg_verdieping_key = v.alg_verdieping_key
                     AND v.alg_gebouw_key = v_gebouw_key;

            -- Als persoon in gebouw reeds een werkplek heeft en de nieuwe zou
            -- in de default ruimte zijn (want ongedefinieerd bij import!), dan
            -- wordt onderstaande overgeslagen.
            IF (v_count = 0 OR recwp.alg_ruimte_nr != c_ruimte_nr)
            THEN
               v_errorhint := 'Fout bij verhuizen naar nieuwe werkplek';
               PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'G');
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint);
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (
         p_import_key,
         'S',
         'Werkplek: verwerkte regels zonder foutmelding: '
         || TO_CHAR (v_count_tot - v_count_error),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Werkplek: verwerkte regels met foutmelding: '
         || TO_CHAR (v_count_error),
         ''
      );
      COMMIT;

      FOR recnowp IN cnowp
      LOOP
         BEGIN
            fac.imp_writelog (
               p_import_key,
               'I',
                  'Persoon met nummer ['
               || recnowp.prs_perslid_oslogin
               || '] en naam ['
               || recnowp.prs_perslid_naam
               || ', '
               || recnowp.prs_perslid_voornaam
               || '] heeft geen werkplek',
               'Geen werkplek'
            );
            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_errormsg,
                                 v_errorhint);
               COMMIT;
         END;
      END LOOP;

      FOR recnogroup IN cnogroup
      LOOP
         BEGIN
            v_aanduiding :=
                  recnogroup.prs_perslid_oslogin
               || '|'
               || recnogroup.prs_perslid_naam
               || '|'
               || recnogroup.prs_perslid_voornaam
               || ' - ';
            v_errorhint := 'Fout bij bepalen groep [' || c_groep_upper || ']';

            SELECT   fac_groep_key
              INTO   v_groep_key
              FROM   fac_groep
             WHERE   fac_groep_upper = c_groep_upper;

            v_errorhint :=
                  'Fout bij koppelen persoon aan groep ['
               || c_groep_upper
               || ']';

            INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
              VALUES   (v_groep_key, recnogroup.prs_perslid_key);

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

      -- Verwijder ongebruikte functies; deze import bepaalt de functies!
      DELETE FROM   prs_srtperslid sp
            WHERE   NOT EXISTS
                       (SELECT   1
                          FROM   prs_perslid p
                         WHERE   p.prs_srtperslid_key = sp.prs_srtperslid_key);

      COMMIT;
   ELSE
      IF (v_count_prs_import = 0)
      THEN
         fac.imp_writelog (
            p_import_key,
            'S',
            'Geen nieuw/recent bestand met te importeren personen aangetroffen!',
            ''
         );
      ELSE
         fac.imp_writelog (
            p_import_key,
            'E',
            'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!',
               '- max. verschilpercentage = ['
            || TO_CHAR (c_max_delta_percentage)
            || '%] <br> '
            || '- #personen importbestand = ['
            || TO_CHAR (v_count_prs_import)
            || '] <br> '
            || '- #personen Facilitor = ['
            || TO_CHAR (v_count_prs_actual)
            || ']'
         );
      END IF;

      COMMIT;
   END IF;

   COMMIT;
END renk_update_prs;
/

/* Formatted on 19-9-2013 14:58:52 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_kostensoorten
AS
   SELECT   prs_kostensoort_key,
            prs_kostensoort_oms || '-' || prs_kostensoort_opmerking
               prs_kostensoort_oms
     FROM   prs_kostensoort;

/* Formatted on 4-12-2013 10:05:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_res_huurders
AS
   SELECT   b.prs_bedrijf_key, b.prs_bedrijf_naam
     FROM   prs_v_aanwezigbedrijf b
    WHERE   b.prs_bedrijf_huurder = 1
            AND EXISTS
                  (SELECT   1  -- Actief relatie-veld 1021=Geadr./1022=Aanhef?
                     FROM   prs_v_aanwezigkenmerklink
                    WHERE   prs_kenmerk_key IN (1021, 1022)
                            AND prs_link_key = b.prs_bedrijf_key)
   UNION  -- Doorsnede met alle bedrijven (ooit) gekoppeld aan Verhuur-boeking
   SELECT   b.prs_bedrijf_key,
            DECODE (b.prs_bedrijf_verwijder,
                    NULL, b.prs_bedrijf_naam,
                    'VERVALLEN:' || b.prs_bedrijf_naam)
     FROM   prs_bedrijf b
    WHERE   EXISTS
               (SELECT   1               -- Actief boeking-veld 9/426=Relatie?
                  FROM   res_v_aanwezigkenmerkwaarde rk,
                         res_v_aanwezigrsv_ruimte rr
                 WHERE       rk.res_kenmerk_key IN (9, 426)
                         AND rk.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                         AND fac.safe_to_number (
                               rk.res_kenmerkreservering_waarde
                            ) = b.prs_bedrijf_key);

/* Formatted on 30-1-2014 9:56:26 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW renk_v_rap_mldinsres_qrc
(
   fclt_f_soortmelding,
   fclt_f_locatie,
   fclt_f_gebouw,
   fclt_f_verdieping,
   plaats,
   ruimte_key,
   ruimtefunctie,
   fclt_f_objectdiscipline,
   fclt_f_objectgroep,
   objectsoort_key,
   fclt_f_objectsoort,
   objectsoort_code,
   deel_key,
   deel_omschrijving,
   deel_upper,
   hide_f_bookmark_id,
   variabele
)
AS
   SELECT    md.ins_discipline_omschrijving
          || '-'
          || msd.mld_stdmelding_omschrijving,
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          o.alg_plaatsaanduiding plaats,
          d.ins_alg_ruimte_key ruimte_key,
          sr.alg_srtruimte_omschrijving,
          disc.ins_discipline_omschrijving,
          sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_key,
          sd.ins_srtdeel_omschrijving,
          sd.ins_srtdeel_code,
          d.ins_deel_key,
          d.ins_deel_omschrijving,
          d.ins_deel_upper,
          b.fac_bookmark_id,
          'INS_KEY'
     FROM (SELECT DECODE (
                     INSTR (
                        SUBSTR (
                           UPPER (fac_bookmark_query),
                           INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')),
                        '&'),
                     0,
                     SUBSTR (
                        SUBSTR (
                           UPPER (fac_bookmark_query),
                           INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')),
                        10),
                     SUBSTR (
                        SUBSTR (
                           UPPER (fac_bookmark_query),
                           INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')),
                        10,
                        INSTR (
                           SUBSTR (
                              UPPER (fac_bookmark_query),
                              INSTR (UPPER (fac_bookmark_query), 'STDM_KEY=')),
                           '&')
                        - 10))
                     stdm_key,
                  fac_bookmark_id
             FROM fac_bookmark
            WHERE TRUNC (fac_bookmark_aanmaak) >=
                     TO_DATE ('10062013', 'ddmmyyyy')
                  AND UPPER (fac_bookmark_path) = 'APPL/PDA/MELDING.ASP'
                  AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') > 0) b, -- stdm_key-bookmarks
          (SELECT   sm.mld_ins_discipline_key,
                    sm.mld_stdmelding_key,
                    sm.mld_stdmelding_omschrijving,
                    si.ins_srtinstallatie_key ins_srtdeel_key
             FROM   mld_stdmelding sm,
                    mld_stdmelding_srtinst si
            WHERE       sm.mld_stdmelding_key = si.mld_stdmelding_key
                    AND sm.mld_stdmelding_verwijder IS NULL
                    AND si.ins_srtinstallatie_niveau = 'S'
           UNION ALL
           SELECT   sm.mld_ins_discipline_key,
                    sm.mld_stdmelding_key,
                    sm.mld_stdmelding_omschrijving,
                    sd.ins_srtdeel_key
             FROM   mld_stdmelding sm,
                    mld_stdmelding_srtinst si,
                    ins_srtdeel sd
            WHERE       sm.mld_stdmelding_key = si.mld_stdmelding_key
                    AND sm.mld_stdmelding_verwijder IS NULL
                    AND si.ins_srtinstallatie_niveau = 'G'
                    AND si.ins_srtinstallatie_key = sd.ins_srtgroep_key
           UNION ALL
           SELECT   sm.mld_ins_discipline_key,
                    sm.mld_stdmelding_key,
                    sm.mld_stdmelding_omschrijving,
                    sd.ins_srtdeel_key
             FROM   mld_stdmelding sm,
                    mld_stdmelding_srtinst si,
                    ins_srtgroep sg,
                    ins_srtdeel sd
            WHERE       sm.mld_stdmelding_key = si.mld_stdmelding_key
                    AND sm.mld_stdmelding_verwijder IS NULL
                    AND si.ins_srtinstallatie_niveau = 'D'
                    AND si.ins_srtinstallatie_key = sg.ins_discipline_key
                    AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) msd, -- object-meldingen
          mld_discipline md,
          ins_v_aanwezigdeel d,
          ins_srtdeel sd,
          ins_srtgroep sg,
          ins_discipline disc,
          ins_v_alg_overzicht o,
          alg_locatie l,
          alg_ruimte r,
          alg_srtruimte sr
    WHERE     fac.safe_to_number (b.stdm_key) = msd.mld_stdmelding_key
          AND msd.mld_ins_discipline_key = md.ins_discipline_key
          AND msd.ins_srtdeel_key = d.ins_srtdeel_key
          AND d.ins_alg_ruimte_type IN ('T', 'R', 'W')
          AND d.ins_deel_parent_key IS NULL
          AND d.ins_srtdeel_key = sd.ins_srtdeel_key
          AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
          AND sg.ins_discipline_key = disc.ins_discipline_key
          AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys
          AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type
          AND d.ins_alg_locatie_key = o.alg_locatie_key          -- redundant?
          AND o.alg_locatie_key = l.alg_locatie_key
          AND d.ins_alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
   UNION ALL
   SELECT 'Melding op object',
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          o.alg_plaatsaanduiding plaats,
          NULL ruimte_key,
          sr.alg_srtruimte_omschrijving,
          disc.ins_discipline_omschrijving,
          sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_key,
          sd.ins_srtdeel_omschrijving,
          sd.ins_srtdeel_code,
          d.ins_deel_key,
          d.ins_deel_omschrijving,
          d.ins_deel_upper,
          b.fac_bookmark_id,
          'INS_KEY'
     FROM fac_bookmark b,
          ins_v_aanwezigdeel d,
          ins_srtdeel sd,
          ins_srtgroep sg,
          ins_discipline disc,
          ins_v_alg_overzicht o,
          alg_locatie l,
          alg_ruimte r,
          alg_srtruimte sr
    WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('10062013', 'ddmmyyyy')
          AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/INS_DEEL.ASP'
          AND d.ins_alg_ruimte_type IN ('T', 'R', 'W')
          AND d.ins_deel_parent_key IS NULL
          AND d.ins_srtdeel_key = sd.ins_srtdeel_key
          AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
          AND sg.ins_discipline_key = disc.ins_discipline_key
          AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys
          AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type
          AND d.ins_alg_locatie_key = o.alg_locatie_key          -- redundant?
          AND o.alg_locatie_key = l.alg_locatie_key
          AND d.ins_alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
   UNION ALL
   SELECT 'Melding op ruimte',
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          o.alg_plaatsaanduiding plaats,
          r.alg_ruimte_key ruimte_key,
          sr.alg_srtruimte_omschrijving,
          NULL ins_discipline_omschrijving,
          NULL ins_srtgroep_omschrijving,
          NULL ins_srtdeel_key,
          NULL ins_srtdeel_omschrijving,
          NULL ins_srtdeel_code,
          NULL ins_deel_key,
          NULL ins_deel_omschrijving,
          NULL ins_deel_upper,
          b.fac_bookmark_id,
          'RUIMTE_KEY'
     FROM fac_bookmark b,
          alg_v_aanwezigruimte r,
          alg_srtruimte sr,
          ins_v_alg_overzicht o,
          alg_locatie l
    WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('10062013', 'ddmmyyyy')
          AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP'
          AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') = 0
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
          AND r.alg_ruimte_key = o.alg_onroerendgoed_keys
          AND o.alg_onroerendgoed_type = 'R'
          AND o.alg_locatie_key = l.alg_locatie_key
   UNION ALL
   SELECT 'Melding op gebouw',
          l.alg_locatie_omschrijving,
          g.alg_gebouw_omschrijving,
          NULL alg_verdieping_omschrijving,
          l.alg_locatie_code || '-' || g.alg_gebouw_code plaats,
          g.alg_gebouw_key ruimte_key,
          sg.alg_srtgebouw_omschrijving,
          NULL ins_discipline_omschrijving,
          NULL ins_srtgroep_omschrijving,
          NULL ins_srtdeel_key,
          NULL ins_srtdeel_omschrijving,
          NULL ins_srtdeel_code,
          NULL ins_deel_key,
          NULL ins_deel_omschrijving,
          NULL ins_deel_upper,
          b.fac_bookmark_id,
          'GEBOUW_KEY'
     FROM fac_bookmark b,
          alg_v_aanweziggebouw g,
          alg_v_aanwezigsrtgebouw sg,
          alg_locatie l
    WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('30012014', 'ddmmyyyy')
          AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/MELDING.ASP'
          AND INSTR (UPPER (fac_bookmark_query), 'STDM_KEY') = 0
          AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key(+)
          AND g.alg_locatie_key = l.alg_locatie_key
   UNION ALL                          -- Reserveerbare ruimtes 50=Gemeentehuis
   SELECT 'Reserveer ruimte',
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_verdieping_omschrijving,
          rr.res_ruimte_nr plaats,
          rar.res_ruimte_key ruimte_key,
          sr.alg_srtruimte_omschrijving,
          NULL ins_discipline_omschrijving,
          NULL ins_srtgroep_omschrijving,
          NULL ins_srtdeel_key,
          NULL ins_srtdeel_omschrijving,
          NULL ins_srtdeel_code,
          NULL ins_deel_key,
          NULL ins_deel_omschrijving,
          NULL ins_deel_upper,
          b.fac_bookmark_id,
          'RES_RUIMTE_KEY'
     FROM fac_bookmark b,
          res_ruimte rr,
          (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
               FROM res_alg_ruimte
              WHERE res_alg_ruimte_verwijder IS NULL
           GROUP BY res_ruimte_key) rar,
          alg_ruimte r,
          alg_srtruimte sr,
          ins_v_alg_overzicht o,
          alg_locatie l
    WHERE TRUNC (b.fac_bookmark_aanmaak) = TO_DATE ('10062013', 'ddmmyyyy')
          AND UPPER (b.fac_bookmark_naam) LIKE '%GENERIEK%'
          AND UPPER (b.fac_bookmark_path) = 'APPL/PDA/RESERVERINGEN.ASP'
          AND rr.res_discipline_key != 62                          -- OV kaart
          AND rr.res_ruimte_key = rar.res_ruimte_key
          AND rar.alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
          AND r.alg_ruimte_key = o.alg_onroerendgoed_keys
          AND o.alg_onroerendgoed_type = 'R'
          AND o.alg_locatie_key = l.alg_locatie_key
          AND l.alg_locatie_key = 50;

/* Formatted on 29-8-2013 17:20:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PACKAGE RENK
AS
   -- PACKAGES voor de RENK specifieke ondersteuning
   PROCEDURE freezereserveringen (p_groepering   IN VARCHAR2,
                                  p_kenmerk      IN VARCHAR2);
END;
/

/* Formatted on 29-8-2013 17:20:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PACKAGE BODY RENK
AS
   PROCEDURE freezereserveringen (p_groepering   IN VARCHAR2,
                                  p_kenmerk      IN VARCHAR2)
   AS
      -- Volgende cursors lopen over boekingen door de huurder geidentificeerd
      -- door 'p_groepering' in de lopende jaarhelft hebben plaatsgevonden (of
      -- nog moeten plaatsvinden) en nog niet zijn gefactuureerd; betreffende
      -- ruimte-reservering worden NIET Administratief Verwerkt!
      -- Ook wordt aan deze reserveringen een (nieuw) Docman-kenmerk gekoppeld.
      CURSOR cobj
      IS
         SELECT   v.resid,
                  rr.res_rsv_ruimte_key,
                  rr.res_reservering_key,
                  rr.res_rsv_ruimte_volgnr,
                  rd.res_rsv_deel_key,
                  rd.res_status_bo_key
           FROM   renk_v_verhuurregels_alle v,
                  res_v_aanwezigrsv_ruimte rr,
                  res_v_aanwezigrsv_deel rd
          WHERE       v.groepering = p_groepering
                  AND v.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                  AND rr.res_rsv_ruimte_key = rd.res_rsv_ruimte_key;

      CURSOR cart
      IS
         SELECT   v.resid,
                  rr.res_rsv_ruimte_key,
                  rr.res_reservering_key,
                  rr.res_rsv_ruimte_volgnr,
                  ra.res_rsv_artikel_key,
                  ra.res_status_bo_key
           FROM   renk_v_verhuurregels_alle v,
                  res_v_aanwezigrsv_ruimte rr,
                  res_v_aanwezigrsv_artikel ra
          WHERE       v.groepering = p_groepering
                  AND v.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                  AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key;

      CURSOR crui
      IS
         SELECT   v.resid,
                  rr.res_rsv_ruimte_key,
                  rr.res_reservering_key,
                  rr.res_rsv_ruimte_volgnr,
                  rr.res_status_bo_key
           FROM   renk_v_verhuurregels_alle v, res_v_aanwezigrsv_ruimte rr
          WHERE   v.groepering = p_groepering
                  AND v.res_rsv_ruimte_key = rr.res_rsv_ruimte_key;

      c_applname       VARCHAR2 (50) := 'FREEZE_RES';
      v_errormsg       VARCHAR2 (1000);
      oracle_err_num   NUMBER;
      oracle_err_mes   VARCHAR2 (200);
      v_aanduiding     VARCHAR2 (200) := '-';
      v_count          NUMBER (10);
      v_count_upd      NUMBER (10);
   --v_factuurnr       VARCHAR2 (20);
   --v_prskey          NUMBER (10);
   --v_huurderlid      VARCHAR2 (1) := 'N';
   --v_factuurbedrag   NUMBER (12, 2);
   --v_prijs           NUMBER (9, 2);
   BEGIN
      v_count_upd := 0;

      -- Bevriezen RES-objecten!
      FOR rec IN cobj
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.resid
               || '|'
               || rec.res_rsv_ruimte_key
               || '|'
               || TO_CHAR (p_groepering)
               || '] ';

            -- Eerst maar eens afmelden (als dat nog niet is gedaan)!
            IF (rec.res_status_bo_key = 2)
            THEN
               v_errormsg := 'Fout bij TV-en RES-object.';

               UPDATE   res_rsv_deel
                  SET   res_status_bo_key = 5
                WHERE   res_rsv_deel_key = rec.res_rsv_deel_key;

               COMMIT;
               v_count_upd := v_count_upd + 1;
            END IF;
         --v_errormsg := 'Fout bij bepalen res_rsv_deel_prijs.';

         --SELECT   res.getdeelprijs (rec.res_rsv_deel_key)
         --  INTO   v_prijs
         --  FROM   DUAL;

         --v_errormsg := 'Fout bij bijwerken res_rsv_deel_prijs.';

         --UPDATE   res_rsv_deel
         --   SET   res_rsv_deel_prijs = v_prijs
         -- WHERE   res_rsv_deel_key = rec.res_rsv_deel_key;

         --v_errormsg := 'Fout bij AV-en RES-object.';

         --UPDATE   res_rsv_deel
         --   SET   res_status_bo_key = 6
         -- WHERE   res_rsv_deel_key = rec.res_rsv_deel_key;

         --COMMIT;
         --v_count_upd := v_count_upd + 1;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' ORACLE (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.writelog (c_applname,
                             'W',
                             v_aanduiding || v_errormsg,
                             'RES-object');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (c_applname,
                    'S',
                    'RES-object/#afgemeld: ' || TO_CHAR (v_count_upd),
                    '');
      COMMIT;

      v_count_upd := 0;

      -- Bevriezen RES-artikelen!
      FOR rec IN cart
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.resid
               || '|'
               || rec.res_rsv_ruimte_key
               || '|'
               || TO_CHAR (p_groepering)
               || '] ';

            -- Eerst maar eens afmelden (als dat nog niet is gedaan)!
            IF (rec.res_status_bo_key = 2)
            THEN
               v_errormsg := 'Fout bij TV-en RES-artikel.';

               UPDATE   res_rsv_artikel
                  SET   res_status_bo_key = 5
                WHERE   res_rsv_artikel_key = rec.res_rsv_artikel_key;

               COMMIT;
               v_count_upd := v_count_upd + 1;
            END IF;
         --IF (rec.res_artikel_prijs_vast = 1)
         --THEN
         --   v_errormsg := 'Fout bij bepalen res_rsv_artikel_prijs.';

         --   SELECT   res.getartikelprijs (rec.res_rsv_artikel_key)
         --     INTO   v_prijs
         --     FROM   DUAL;

         --   v_errormsg := 'Fout bij bijwerken res_rsv_artikel_prijs.';

         --   UPDATE   res_rsv_artikel
         --      SET   res_rsv_artikel_prijs = v_prijs,
         --            res_rsv_artikel_inkoopprijs =
         --               (SELECT   res_artikel_inkoopprijs
         --                  FROM   res_artikel
         --                 WHERE   res_artikel_key = rec.res_artikel_key),
         --            res_rsv_artikel_btw =
         --               (SELECT   res_artikel_btw
         --                  FROM   res_artikel
         --                 WHERE   res_artikel_key = rec.res_artikel_key)
         --    WHERE   res_rsv_artikel_key = rec.res_rsv_artikel_key;
         --END IF;

         --v_errormsg := 'Fout bij AV-en RES-artikel.';

         --UPDATE   res_rsv_artikel
         --   SET   res_status_bo_key = 6
         -- WHERE   res_rsv_artikel_key = rec.res_rsv_artikel_key;

         --COMMIT;
         --v_count_upd := v_count_upd + 1;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' ORACLE (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.writelog (c_applname,
                             'W',
                             v_aanduiding || v_errormsg,
                             'RES-artikel');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (c_applname,
                    'S',
                    'RES-artikel/#afgemeld: ' || TO_CHAR (v_count_upd),
                    '');
      COMMIT;

      v_count_upd := 0;

      -- Eerst maar eens afmelden (als dat nog niet is gedaan)!
      FOR rec IN crui
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.resid
               || '|'
               || rec.res_rsv_ruimte_key
               || '|'
               || TO_CHAR (p_groepering)
               || '] ';

            -- Niet voor reeds afgemelde reserveringen en "roomservice"!
            IF (rec.res_status_bo_key = 2)
            THEN
               v_errormsg := 'Fout bij TV-en RES-ruimte.';

               UPDATE   res_rsv_ruimte
                  SET   res_status_bo_key = 5
                WHERE   res_rsv_ruimte_key = rec.res_rsv_ruimte_key;

               fac.trackaction ('RESAFM',
                                rec.res_rsv_ruimte_key,
                                NULL,
                                NULL,
                                NULL);

               COMMIT;
               v_count_upd := v_count_upd + 1;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' ORACLE (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.writelog (c_applname,
                             'W',
                             v_aanduiding || v_errormsg,
                             'RES-ruimte/TV');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (c_applname,
                    'S',
                    'RES-ruimte/#afgemeld: ' || TO_CHAR (v_count_upd),
                    '');
      COMMIT;

      v_count_upd := 0;

      FOR rec IN crui
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.resid
               || '|'
               || rec.res_rsv_ruimte_key
               || '|'
               || TO_CHAR (p_groepering)
               || '] ';

            v_errormsg := 'Fout bij bijwerken kenmerk.';

            UPDATE   res_rsv_ruimte
               SET   res_rsv_ruimte_ordernr = p_kenmerk
             WHERE   res_rsv_ruimte_key = rec.res_rsv_ruimte_key;

            -- Niet voor "roomservice"!
            --IF (rec.res_status_bo_key = 5)
            --THEN
            --   IF (rec.old_prijs <> rec.new_prijs)
            --   THEN
            --      v_errormsg := 'Fout bij bijwerken res_rsv_ruimte_prijs';

            --      UPDATE   res_rsv_ruimte rr
            --         SET   rr.res_rsv_ruimte_prijs = rec.new_prijs
            --       WHERE   rr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
            --   END IF;

            --   v_errormsg := 'Fout bij AV-en RES-ruimte.';

            --   UPDATE   res_rsv_ruimte
            --      SET   res_status_bo_key = 6
            --    WHERE   res_rsv_ruimte_key = rec.res_rsv_ruimte_key;

            --   fac.trackaction ('RESVER',
            --                    rec.res_rsv_ruimte_key,
            --                    NULL,
            --                    NULL,
            --                    NULL);
            --END IF;

            COMMIT;
            v_count_upd := v_count_upd + 1;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' ORACLE (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.writelog (c_applname,
                             'W',
                             v_aanduiding || v_errormsg,
                             'RES-ruimte/AV');
               COMMIT;
         END;
      END LOOP;

      fac.writelog (c_applname,
                    'S',
                    'RES-ruimte/#bijgewerkt: ' || TO_CHAR (v_count_upd),
                    '');
      COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         oracle_err_num := SQLCODE;
         oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
         v_errormsg :=
               v_errormsg
            || ' ORACLE (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
         fac.writelog (c_applname,
                       'E',
                       v_aanduiding || v_errormsg,
                       '');
         COMMIT;
   END freezereserveringen;
END;
/

/* Formatted on 4-12-2013 12:30:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_verhuurregels_alle
(
   groepering,
   sortering1,
   sortering2,
   fclt_f_naam,
   naam,
   afd,
   tav,
   aanhef,
   adres,
   postcode,
   plaats,
   factuurdatum,
   res_rsv_ruimte_key,
   resid,
   ordernr,
   sys_helft,
   dagnaam,
   dagnr,
   van,
   tot,
   omschrijving,
   opmerking,
   datumverzoek,
   soortverzoek,
   tarief_code,
   termijnen,
   korting,
   behandelaar_naam,
   behandelaar_tel,
   behandelaar_mail,
   res_discipline_key,
   res_ruimte_key,
   alg_locatie_key,
   res_type,
   res_ruimte_nr,
   vnr,
   onderwerp,
   res_voorziening,
   res_rsv_prijs,
   aantal,
   ps,
   po,
   pm,
   pa,
   pd,
   btw
)
AS
   SELECT   DECODE ( -- V -> per jaarhelft/locatie; I of C -> per reservering!
               tarief.res_kenmerkreservering_waarde,
               '84',                                                   -- Vast
               TO_CHAR (rvc.alg_locatie_key) || '-'                   -- Dash!
               || COALESCE (TO_CHAR (r.bedr_key),
                            --inaam.res_kenmerkreservering_waarde,
                            UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                            '[naam]'),
               TO_CHAR (x.res_key) || '/' || TO_CHAR (x.res_vnr)     -- Slash!
            )
               groepering,
               TO_CHAR (x.van, 'yyyy-mm-dd hh24:mi')
            || rvc.res_ruimte_nr
            || x.res_key
               sortering1,      -- Factuurregels op datum-tijd en dan ruimtenr
            rvc.res_type || SUBSTR ('000000' || TO_CHAR (rvc.vnr), -6)
               sortering2,      -- ..daarbinnen op type (1R2V3C) en dan volgnr
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                         '[naam]'),
               TRIM (r.prs_bedrijf_naam)
            )
               fclt_f_naam,
            DECODE (r.bedr_key,
                    NULL,
                    COALESCE (inaam.res_kenmerkreservering_waarde, '[naam]'),
                    COALESCE (rnaam.prs_kenmerklink_waarde, '[naam]'))
               naam,
            DECODE (r.bedr_key,
                    NULL, iafd.res_kenmerkreservering_waarde,
                    rafd.prs_kenmerklink_waarde)
               afd,
            DECODE (r.bedr_key,
                    NULL, itav.res_kenmerkreservering_waarde,
                    rtav.prs_kenmerklink_waarde)
               tav,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (iaanhef.res_kenmerkreservering_waarde, '[aanhef]'),
               COALESCE (raanhef.prs_kenmerklink_waarde, '[aanhef]')
            )
               aanhef,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (iadres.res_kenmerkreservering_waarde, '[adres]'),
               COALESCE (r.adres, '[adres]')
            )
               adres,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (ipostcode.res_kenmerkreservering_waarde, '[pc]'),
               COALESCE (r.postcode, '[pc]')
            )
               postcode,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (iplaats.res_kenmerkreservering_waarde, '[plaats]'),
               COALESCE (r.plaats, '[plaats]')
            )
               plaats,
            TO_CHAR (SYSDATE, 'dd')
            || DECODE (TO_CHAR (SYSDATE, 'mm'),
                       '01', ' januari ',
                       '02', ' februari ',
                       '03', ' maart ',
                       '04', ' april ',
                       '05', ' mei ',
                       '06', ' juni ',
                       '07', ' juli ',
                       '08', ' augustus ',
                       '09', ' september ',
                       '10', ' okotober ',
                       '11', ' november ',
                       ' december ')
            || TO_CHAR (SYSDATE, 'yyyy')
               factuurdatum,
            x.res_rsv_ruimte_key,
            x.res_key || '/' || x.res_vnr resid,
            x.res_rsv_ruimte_ordernr ordernr,
            x.sys_helft,         -- 1e of 2e jaarhelft in formaat yyyyh(elft)!
            DECODE (TO_CHAR (x.van, 'd'),
                    '2', 'maandag',
                    '3', 'dinsdag',
                    '4', 'woensdag',
                    '5', 'donderdag',
                    '6', 'vrijdag',
                    '7', 'zaterdag',
                    'zondag')
               dagnaam,
            DECODE (TO_CHAR (x.van, 'd'),
                    '1', 7,
                    TO_NUMBER (TO_CHAR (x.van, 'd')) - 1)
               dagnr,
            x.van,                           --TO_CHAR (x.van, 'hh24:mi') van,
            x.tot,                           --TO_CHAR (x.tot, 'hh24:mi') tot,
            x.res_rsv_ruimte_omschrijving oms,
            x.res_rsv_ruimte_opmerking opm,
            COALESCE (datumverzoek.res_kenmerkreservering_waarde,
                      'dd-mm-jjjj')
               datumverzoek,
            DECODE (soortverzoek.res_kenmerkreservering_waarde,
                    '81', 'telefonische',
                    '82', 'schriftelijke',
                    '[soortverzoek]')
               soortverzoek,
            DECODE (tarief.res_kenmerkreservering_waarde,
                    '84', 'V',                                        -- Vast!
                    '85', 'C',                                 -- Commercieel!
                    'I')                                       -- Incidenteel!
               tarief_code,
            rtermijnen.prs_kenmerklink_waarde termijnen,
            DECODE (
               rkorting.prs_kenmerklink_waarde,
               '1',
               DECODE (
                  rvc.res_discipline_key,
                  41,                                              -- Sporthal
                  DECODE (
                     TO_CHAR (x.tot, 'd'),
                     '1',                                            -- Zondag
                     1,
                     '4',                                          -- Woensdag
                     DECODE (SIGN ( ( (x.van - TRUNC (x.van)) * 24) - 12),
                             -1, 0.5,
                             1),
                     '7',                                          -- Zaterdag
                     1,
                     DECODE (SIGN ( ( (x.van - TRUNC (x.van)) * 24) - 18),
                             -1, 0.5,
                             1)
                  ),
                  1
               ),
               1
            )
               korting,             -- Eventueel te hanteren korting (factor)!
            x.behandelaar_naam,
            x.behandelaar_tel,
            x.behandelaar_mail,
            rvc.res_discipline_key,
            rvc.res_ruimte_key,
            rvc.alg_locatie_key,
            rvc.res_type,
            rvc.res_ruimte_nr,
            rvc.vnr,
            rvc.onderwerp,
            rvc.res_voorziening,
            rvc.res_rsv_prijs,
            rvc.aantal,
            rvc.ps,                                              -- Uur-tarief
            rvc.po,                                      -- Incidenteel tarief
            rvc.pm,                                           -- Vast tarief/K
            rvc.pa,                                    -- Commercieel tarief/H
            rvc.pd,                                            -- Jaartarief/J
            rvc.btw
     FROM                                                         (SELECT   rr.res_rsv_ruimte_key,
                                                                            rr.res_reservering_key res_key,
                                                                            rr.res_rsv_ruimte_volgnr res_vnr,
                                                                            rr.res_rsv_ruimte_ordernr,
                                                                            rr.res_rsv_ruimte_van van,
                                                                            rr.res_rsv_ruimte_tot tot,
                                                                            rr.res_rsv_ruimte_omschrijving,
                                                                            rr.res_rsv_ruimte_opmerking,
                                                                            p.prs_perslid_key,
                                                                            DECODE (
                                                                               p.prs_perslid_voornaam,
                                                                               '', '',
                                                                               p.prs_perslid_voornaam
                                                                               || ' '
                                                                            )
                                                                            || DECODE (
                                                                                  p.prs_perslid_tussenvoegsel,
                                                                                  '', '',
                                                                                  p.prs_perslid_tussenvoegsel
                                                                                  || ' '
                                                                               )
                                                                            || p.prs_perslid_naam
                                                                               behandelaar_naam,
                                                                            COALESCE (
                                                                               p.prs_perslid_telefoonnr,
                                                                               p.prs_perslid_mobiel
                                                                            )
                                                                               behandelaar_tel,
                                                                            p.prs_perslid_email
                                                                               behandelaar_mail,
                                                                            TO_CHAR (
                                                                               rr.res_rsv_ruimte_tot,
                                                                               'yyyy'
                                                                            )
                                                                            || DECODE (
                                                                                  TRUNC (
                                                                                     ADD_MONTHS (
                                                                                        rr.res_rsv_ruimte_tot, 5
                                                                                     ),
                                                                                     'yyyy'
                                                                                  ),
                                                                                  TRUNC (
                                                                                     rr.res_rsv_ruimte_tot,
                                                                                     'yyyy'
                                                                                  ),
                                                                                  '1',
                                                                                  '2'
                                                                               ) res_helft,
                                                                            TO_CHAR (
                                                                               ADD_MONTHS (
                                                                                  SYSDATE, 1
                                                                               ),
                                                                               'yyyy'
                                                                            )
                                                                            || DECODE (
                                                                                  TRUNC (
                                                                                     ADD_MONTHS (
                                                                                        SYSDATE, 6
                                                                                     ),
                                                                                     'yyyy'
                                                                                  ),
                                                                                  TRUNC (
                                                                                     ADD_MONTHS (
                                                                                        SYSDATE, 1
                                                                                     ),
                                                                                     'yyyy'
                                                                                  ),
                                                                                  '1',
                                                                                  '2'
                                                                               ) sys_helft
                                                                     FROM   res_v_aanwezigrsv_ruimte rr,
                                                                            prs_perslid p
                                                                    WHERE   rr.res_activiteit_key IN (30, 230) -- Verhuur/Schoollokaal
                                                                            AND rr.res_status_fo_key IN (1, 2)
                                                                            AND rr.res_rsv_ruimte_dirtlevel = 0
                                                                            --AND COALESCE (
                                                                            --      rr.res_status_bo_key, 2
                                                                            --   ) != 6 -- Nog niet AV
                                                                            AND rr.res_rsv_ruimte_tot >
                                                                                  ADD_MONTHS (
                                                                                     TRUNC (
                                                                                        ADD_MONTHS (
                                                                                           SYSDATE,
                                                                                           -6
                                                                                        ),
                                                                                        'yyyy'
                                                                                     ),
                                                                                     7
                                                                                  )
                                                                            AND rr.res_rsv_ruimte_contact_key =
                                                                                  p.prs_perslid_key)
                                                                  x
                                                               LEFT JOIN -- 301/422 = Datum verzoek
                                                                  res_v_aanwezigkenmerkwaarde datumverzoek
                                                               ON x.res_rsv_ruimte_key = datumverzoek.res_rsv_ruimte_key
                                                                  AND datumverzoek.res_kenmerk_key IN (301, 422)
                                                            LEFT JOIN -- 302/423 = Soort verzoek
                                                               res_v_aanwezigkenmerkwaarde soortverzoek
                                                            ON x.res_rsv_ruimte_key = soortverzoek.res_rsv_ruimte_key
                                                               AND soortverzoek.res_kenmerk_key IN (302, 423)
                                                         LEFT JOIN -- 303/424 = Verhuur tarief
                                                            res_v_aanwezigkenmerkwaarde tarief
                                                         ON x.res_rsv_ruimte_key = tarief.res_rsv_ruimte_key
                                                            AND tarief.res_kenmerk_key IN (303, 424)
                                                      LEFT JOIN -- Regelmatige relatiegegevens
                                                         (SELECT   kw.res_rsv_ruimte_key,
                                                                   b.prs_bedrijf_key bedr_key,
                                                                   b.prs_bedrijf_naam,
                                                                   COALESCE (
                                                                      b.prs_bedrijf_post_adres,
                                                                      b.prs_bedrijf_bezoek_adres
                                                                   ) adres,
                                                                   COALESCE (
                                                                      b.prs_bedrijf_post_postcode,
                                                                      b.prs_bedrijf_bezoek_postcode
                                                                   ) postcode,
                                                                   COALESCE (
                                                                      b.prs_bedrijf_post_plaats,
                                                                      b.prs_bedrijf_bezoek_plaats
                                                                   ) plaats
                                                            FROM   res_v_aanwezigkenmerkwaarde kw,
                                                                   prs_bedrijf b
                                                           WHERE   kw.res_kenmerk_key IN (9, 426) -- Relatie
                                                                   AND fac.safe_to_number(kw.res_kenmerkreservering_waarde) =
                                                                         b.prs_bedrijf_key)
                                                         r
                                                      ON x.res_rsv_ruimte_key = r.res_rsv_ruimte_key
                                                   LEFT JOIN -- 2/428 = Incidentele relatie/Naam
                                                      res_v_aanwezigkenmerkwaarde inaam
                                                   ON x.res_rsv_ruimte_key = inaam.res_rsv_ruimte_key
                                                      AND inaam.res_kenmerk_key IN (2, 428)
                                                LEFT JOIN -- 341/429 = Incidentele relatie/Afd
                                                   res_v_aanwezigkenmerkwaarde iafd
                                                ON x.res_rsv_ruimte_key = iafd.res_rsv_ruimte_key
                                                   AND iafd.res_kenmerk_key IN (341, 429)
                                             LEFT JOIN -- 342/430 = Incidentele relatie/Tav
                                                res_v_aanwezigkenmerkwaarde itav
                                             ON x.res_rsv_ruimte_key = itav.res_rsv_ruimte_key
                                                AND itav.res_kenmerk_key IN (342, 430)
                                          LEFT JOIN -- 304/436 = Incidentele relatie/Aanhef
                                             res_v_aanwezigkenmerkwaarde iaanhef
                                          ON x.res_rsv_ruimte_key = iaanhef.res_rsv_ruimte_key
                                             AND iaanhef.res_kenmerk_key IN (304, 436)
                                       LEFT JOIN -- 3/431 = Incidentele relatie/Adres
                                          res_v_aanwezigkenmerkwaarde iadres
                                       ON x.res_rsv_ruimte_key = iadres.res_rsv_ruimte_key
                                          AND iadres.res_kenmerk_key IN (3, 431)
                                    LEFT JOIN -- 4/432 = Incidentele relatie/Postcode
                                       res_v_aanwezigkenmerkwaarde ipostcode
                                    ON x.res_rsv_ruimte_key = ipostcode.res_rsv_ruimte_key
                                       AND ipostcode.res_kenmerk_key IN (4, 432)
                                 LEFT JOIN -- 5/433 = Incidentele relatie/Plaats
                                    res_v_aanwezigkenmerkwaarde iplaats
                                 ON x.res_rsv_ruimte_key = iplaats.res_rsv_ruimte_key
                                    AND iplaats.res_kenmerk_key IN (5, 433)
                              LEFT JOIN     -- 1021 = Regelmatige relatie/Naam
                                 prs_v_aanwezigkenmerklink rnaam
                              ON r.bedr_key = rnaam.prs_link_key
                                 AND rnaam.prs_kenmerk_key = 1021
                           LEFT JOIN         -- 1040 = Regelmatige relatie/Afd
                              prs_v_aanwezigkenmerklink rafd
                           ON r.bedr_key = rafd.prs_link_key
                              AND rafd.prs_kenmerk_key = 1040
                        LEFT JOIN            -- 1041 = Regelmatige relatie/Tav
                           prs_v_aanwezigkenmerklink rtav
                        ON r.bedr_key = rtav.prs_link_key
                           AND rtav.prs_kenmerk_key = 1041
                     LEFT JOIN            -- 1022 = Regelmatige relatie/Aanhef
                        prs_v_aanwezigkenmerklink raanhef
                     ON r.bedr_key = raanhef.prs_link_key
                        AND raanhef.prs_kenmerk_key = 1022
                  LEFT JOIN            -- 1023 = Regelmatige relatie/Termijnen
                     prs_v_aanwezigkenmerklink rtermijnen
                  ON r.bedr_key = rtermijnen.prs_link_key
                     AND rtermijnen.prs_kenmerk_key = 1023
               LEFT JOIN                 -- 1060 = Regelmatige relatie/Korting
                  prs_v_aanwezigkenmerklink rkorting
               ON r.bedr_key = rkorting.prs_link_key
                  AND rkorting.prs_kenmerk_key = 1060
            LEFT JOIN
               (SELECT   rrr.res_rsv_ruimte_key,
                         rr.res_discipline_key,
                         rr.res_ruimte_key,
                         l.alg_locatie_key,
                         '1R' res_type,
                         rr.res_ruimte_nr,
                         TO_NUMBER (NULL) vnr,
                         'Huur '
                         || DECODE (
                               rrr.res_activiteit_key,
                               30,
                               rdi.ins_discipline_omschrijving || ' '
                               || TRIM(SUBSTR (
                                          rr.res_ruimte_nr,
                                          1,
                                          INSTR (rr.res_ruimte_nr || '(',
                                                 '(')
                                          - 1
                                       )),
                               'locatie ' || l.alg_locatie_omschrijving
                            )
                            onderwerp,
                         rr.res_ruimte_nr res_voorziening,
                         rrr.res_rsv_ruimte_prijs res_rsv_prijs,
                         (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van)
                         * 24
                            aantal,                            -- Duur in uren
                         rr.res_ruimte_prijs ps,                 -- Uur-tarief
                         rr.res_ruimte_prijs_ochtend po, -- Incidenteel tarief
                         rr.res_ruimte_prijs_middag pm,       -- Vast tarief/K
                         rr.res_ruimte_prijs_avond pa, -- Commercieel tarief/H
                         rr.res_ruimte_prijs_dag pd,           -- Jaartarief/J
                         6 btw
                  FROM   res_v_aanwezigrsv_ruimte rrr,
                         res_ruimte_opstelling rro,
                         res_ruimte rr,
                         res_discipline rdi,
                         res_v_res_ruimte_gegevens_all rga,
                         alg_locatie l
                 WHERE   rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                         AND rro.res_ruimte_key = rr.res_ruimte_key
                         AND rr.res_discipline_key = rdi.ins_discipline_key
                         AND rr.res_ruimte_key = rga.res_ruimte_key
                         AND rga.alg_locatie_key = l.alg_locatie_key
                UNION ALL
                SELECT   rrd.res_rsv_ruimte_key,
                         rr.res_discipline_key,
                         rr.res_ruimte_key,
                         l.alg_locatie_key,
                         '2V' res_type,
                         rr.res_ruimte_nr,
                         rd.res_ins_deel_key vnr,
                         NULL onderwerp,
                         LTRIM (ID.ins_deel_omschrijving)
                         || DECODE (rd.res_deel_eenheid,
                                    NULL, '',
                                    ' (' || rd.res_deel_eenheid || ')')
                            res_voorziening,
                         rrd.res_rsv_deel_prijs res_rsv_prijs,
                         (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24
                            aantal,                            -- Duur in uren
                         rd.res_deel_prijs ps,                   -- Uur-tarief
                         TO_NUMBER (NULL) po,            -- Incidenteel tarief
                         TO_NUMBER (NULL) pm,                 -- Vast tarief/K
                         TO_NUMBER (NULL) pa,          -- Commercieel tarief/H
                         TO_NUMBER (NULL) pd,                  -- Jaartarief/J
                         6 btw
                  FROM   res_v_aanwezigrsv_ruimte rrr,
                         res_ruimte_opstelling rro,
                         res_ruimte rr,
                         res_v_res_ruimte_gegevens_all rga,
                         alg_locatie l,
                         res_v_aanwezigrsv_deel rrd,
                         res_deel rd,
                         ins_deel ID
                 WHERE   rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                         AND rro.res_ruimte_key = rr.res_ruimte_key
                         AND rr.res_ruimte_key = rga.res_ruimte_key
                         AND rga.alg_locatie_key = l.alg_locatie_key
                         AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
                         AND rrd.res_deel_key = rd.res_deel_key
                         AND rd.res_ins_deel_key = ID.ins_deel_key
                UNION ALL
                SELECT   rra.res_rsv_ruimte_key,
                         rr.res_discipline_key,
                         rr.res_ruimte_key,
                         l.alg_locatie_key,
                         '3C' res_type,
                         rr.res_ruimte_nr,
                         ra.res_artikel_volgnummer vnr,
                         NULL onderwerp,
                         LTRIM (ra.res_artikel_omschrijving)
                         || DECODE (ra.res_artikel_eenheid,
                                    NULL, '',
                                    ' (' || ra.res_artikel_eenheid || ')')
                            res_voorziening,
                         rra.res_rsv_artikel_prijs res_rsv_prijs,
                         rra.res_rsv_artikel_aantal aantal,
                         ra.res_artikel_prijs ps,                -- Stuksprijs
                         TO_NUMBER (NULL) po,            -- Incidenteel tarief
                         TO_NUMBER (NULL) pm,                 -- Vast tarief/K
                         TO_NUMBER (NULL) pa,          -- Commercieel tarief/H
                         TO_NUMBER (NULL) pd,                  -- Jaartarief/J
                         COALESCE (rra.res_rsv_artikel_btw,
                                   ra.res_artikel_btw,
                                   21)
                            btw
                  FROM   res_v_aanwezigrsv_ruimte rrr,
                         res_ruimte_opstelling rro,
                         res_ruimte rr,
                         res_v_res_ruimte_gegevens_all rga,
                         alg_locatie l,
                         res_v_aanwezigrsv_artikel rra,
                         res_artikel ra
                 WHERE   rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
                         AND rro.res_ruimte_key = rr.res_ruimte_key
                         AND rr.res_ruimte_key = rga.res_ruimte_key
                         AND rga.alg_locatie_key = l.alg_locatie_key
                         AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                         AND rra.res_artikel_key = ra.res_artikel_key) rvc
            ON x.res_rsv_ruimte_key = rvc.res_rsv_ruimte_key
    WHERE   x.res_helft <= x.sys_helft    -- Facturatie t/m lopende jaarhelft!
            AND (x.res_rsv_ruimte_ordernr IS NULL  -- Niet eerder gefactureerd
                 OR (x.res_rsv_ruimte_ordernr IS NOT NULL  --  .. of correctie
                     AND x.res_helft = x.sys_helft))      -- ..nog toegestaan!
            AND tarief.res_kenmerkreservering_waarde != '261'      -- Niet nul
/

/* Formatted on 6-3-2014 13:30:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW renk_v_lokaalverhuur_vast
(
   groepering,                                   -- Huurder/locatie -> factuur
   sys_helft,
   res_ruimte_key,                                                   -- Ruimte
   khj_tarief                              -- K(wartaal), H(alfjaar) of J(aar)
)
AS
   SELECT x.groepering,
          TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'yyyy')
          || DECODE (TRUNC (ADD_MONTHS (SYSDATE, 6), 'yy'),
                     TRUNC (ADD_MONTHS (SYSDATE, 1), 'yy'), '1',
                     '2')
             sys_helft,
          x.res_ruimte_key,
          DECODE (
             DECODE (TRUNC (ADD_MONTHS (SYSDATE, 6), 'yy'),
                     TRUNC (ADD_MONTHS (SYSDATE, 1), 'yy'), '1',
                     '2'),
             '1',
             DECODE (x.k1 + x.k2,
                     2, DECODE (x.k3 + x.k4, 2, 'J', 'H'),
                     'K'),    -- Deze helft geen boekingen in beide kwartalen!
             DECODE (x.k3 + x.k4,
                     2, DECODE (x.k1 + x.k2, 2, 'J', 'H'),
                     'K')     -- Deze helft geen boekingen in beide kwartalen!
          )
             khj
     FROM (  SELECT TO_CHAR (x.alg_locatie_key) || '-'
                    || COALESCE (bedr_key.res_kenmerkreservering_waarde,
                                 UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                                 '[naam]')
                       groepering,
                    x.res_ruimte_key,
                    DECODE (SIGN (SUM (x.k1) - 8), -1, 0, 1) k1,
                    DECODE (SIGN (SUM (x.k2) - 8), -1, 0, 1) k2,
                    DECODE (SIGN (SUM (x.k3) - 8), -1, 0, 1) k3,
                    DECODE (SIGN (SUM (x.k4) - 8), -1, 0, 1) k4
               FROM (SELECT rrr.res_rsv_ruimte_key,
                            rrr.res_rsv_ruimte_omschrijving,
                            rr.res_ruimte_key,
                            rga.alg_locatie_key,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    1, 1,
                                    0)
                               k1,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    2, 1,
                                    0)
                               k2,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    3, 1,
                                    0)
                               k3,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    4, 1,
                                    0)
                               k4
                       FROM res_v_aanwezigrsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            res_ruimte rr,
                            res_v_res_ruimte_gegevens_all rga
                      WHERE     rrr.res_activiteit_key = 230   -- Schoollokaal
                            AND rrr.res_status_fo_key IN (1, 2)
                            AND 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 rr.res_discipline_key = 43
                            AND rr.res_ruimte_key = rga.res_ruimte_key
                            AND rrr.res_rsv_ruimte_tot BETWEEN ADD_MONTHS (
                                                                  TRUNC (
                                                                     ADD_MONTHS (
                                                                        SYSDATE,
                                                                        -6),
                                                                     'yyyy'),
                                                                  7)
                                                           AND  ADD_MONTHS (
                                                                   TRUNC (
                                                                      ADD_MONTHS (
                                                                         SYSDATE,
                                                                         -6),
                                                                      'yyyy'),
                                                                   19)) x
                    LEFT JOIN                          -- 424 = Verhuur tarief
                             res_v_aanwezigkenmerkwaarde tarief
                       ON x.res_rsv_ruimte_key = tarief.res_rsv_ruimte_key
                          AND tarief.res_kenmerk_key = 424
                    LEFT JOIN             -- 426 = Regelmatige relatiegegevens
                             res_v_aanwezigkenmerkwaarde bedr_key
                       ON x.res_rsv_ruimte_key = bedr_key.res_rsv_ruimte_key
                          AND bedr_key.res_kenmerk_key = 426
              WHERE tarief.res_kenmerkreservering_waarde = '84'
           GROUP BY TO_CHAR (x.alg_locatie_key) || '-'
                    || COALESCE (
                          bedr_key.res_kenmerkreservering_waarde,
                          UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                          '[naam]'),
                    x.res_ruimte_key) x;

/* Formatted on 2-8-2013 10:00:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_rap_res_actual
(
   hide_f_groepering,
   hide_f_mindatum,
   hide_f_maxdatum,
   hide_f_restype,
   fclt_f_naam,
   naam,
   afd,
   tav,
   aanhef,
   adres,
   postcode,
   plaats,
   factuurdatum,
   ordernr,
   periode,                                                       -- sys_helft
   dagnaam,
   dagnr,
   van,
   tot,
   rvc_oms,
   aantal,
   stuksprijs,
   bruto,
   onderwerp,
   datumverzoek,
   soortverzoek,
   tarief_code,
   termijnen,
   korting,
   kenmerk,
   behandelaar_naam,
   behandelaar_tel,
   behandelaar_mail,
   res_discipline_key,
   res_ruimte_key,
   aant_weken
)
AS
     SELECT   x.groepering,
              MIN (x.sortering1),
              MAX (x.sortering1),
              x.sortering2,
              MIN (x.fclt_f_naam),
              MIN (x.naam),
              MIN (x.afd),
              MIN (x.tav),
              MIN (x.aanhef),
              MIN (x.adres),
              MIN (x.postcode),
              MIN (x.plaats),
              MIN (x.factuurdatum),
              MIN (x.ordernr),
              MIN (x.sys_helft),
              MIN (x.dagnaam),
              x.dagnr,
              x.van,
              x.tot,
              MIN (x.res_voorziening),
              MIN (x.aantal),
              MIN (x.stuksprijs),
              DECODE (x.khj_tarief,
                      NULL, SUM (x.bruto),
                      SUM (x.bruto) / COUNT ( * )),
              MIN (x.onderwerp),
              MIN (x.datumverzoek),            -- Langst geleden verzoekdatum!
              MIN (x.soortverzoek),                      -- Schriftelijk wint!
              MIN (x.tarief_code),
              MIN (x.termijnen),
              MIN (x.korting),
              '***CONCEPT***' kenmerk,
              MIN (x.behandelaar_naam),
              MIN (x.behandelaar_tel),
              MIN (x.behandelaar_mail),
              MIN (x.res_discipline_key),
              x.res_ruimte_key,
              COUNT ( * ) aant_weken
       FROM   (SELECT   x.groepering,
                        x.sortering1,
                        x.sortering2,
                        x.fclt_f_naam,
                        x.naam,
                        x.afd,
                        x.tav,
                        x.aanhef,
                        x.adres,
                        x.postcode,
                        x.plaats,
                        x.factuurdatum,
                        x.ordernr,
                        x.sys_helft,
                        x.dagnaam,
                        x.dagnr,
                        TO_CHAR (x.van, 'hh24:mi') van,
                        TO_CHAR (x.tot, 'hh24:mi') tot,
                        x.res_voorziening,
                        x.aantal,
                        ROUND (
                           DECODE (
                              x.res_rsv_prijs,
                              NULL,
                              DECODE (
                                 x.res_type,
                                 '1R',
                                 DECODE (
                                    x.tarief_code,
                                    'V',    -- Speciale tarieven igv. lokalen!
                                    DECODE (y.khj_tarief,
                                            'H', x.pa,             -- Halfjaar
                                            'J', x.pd,                 -- Jaar
                                            x.pm),            -- Vast/Kwartaal
                                    'C',
                                    x.pa,                      -- Commercieel!
                                    x.po                       -- Incidenteel!
                                 ),
                                 x.ps                                -- 2V/3C!
                              ),
                              x.res_rsv_prijs
                              / DECODE (x.aantal, NULL, 1, 0, 1, x.aantal)
                           ),
                           2
                        )
                           stuksprijs,
                        ROUND (
                           DECODE (
                              x.res_type,
                              '1R', -- ZIE OOK ONDERSTAANDE - GEVAARLIJKE - AANNAME!
                              COALESCE (
                                 x.res_rsv_prijs, -- NULL totdat door MVH "bevroren"
                                 --DECODE (x.res_ruimte_key,
                                 --        121, CEIL (x.aantal / 4),
                                 --        x.aantal) -- Instructieruimte per dagdeel
                                 x.aantal
                                 * DECODE (
                                      x.tarief_code,
                                      'V',  -- Speciale tarieven igv. lokalen!
                                      DECODE (y.khj_tarief,
                                              'H', x.pa,           -- Halfjaar
                                              'J', x.pd,               -- Jaar
                                              x.pm),          -- Vast/Kwartaal
                                      'C',
                                      x.pa,                    -- Commercieel!
                                      x.po                     -- Incidenteel!
                                   )
                                 * x.korting
                              ),
                              COALESCE (x.res_rsv_prijs, x.aantal * x.ps) -- 2V/3C!
                           ),
                           2
                        )
                           bruto,
                        x.onderwerp,
                           SUBSTR (x.datumverzoek, 7, 4)
                        || SUBSTR (x.datumverzoek, 4, 2)
                        || SUBSTR (x.datumverzoek, 1, 2)
                           datumverzoek,
                        x.soortverzoek,
                        x.tarief_code,
                        x.termijnen,
                        x.korting,
                        x.behandelaar_naam,
                        x.behandelaar_tel,
                        x.behandelaar_mail,
                        x.res_discipline_key,
                        x.res_ruimte_key,
                        y.khj_tarief
                 FROM   renk_v_verhuurregels_alle x,
                        renk_v_lokaalverhuur_vast y
                WHERE       x.groepering = y.groepering(+)
                        AND x.sys_helft = y.sys_helft(+)
                        AND x.res_ruimte_key = y.res_ruimte_key(+)) x
   GROUP BY   x.groepering,
              x.sortering2,
              x.dagnr,
              x.van,
              x.tot,
              x.res_ruimte_key,
              x.khj_tarief;

/* Formatted on 25-11-2013 11:10:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_verhuurregels_frozen
(
   groepering1,
   groepering2,
   sortering1,
   sortering2,
   fclt_f_naam,
   naam,
   afd,
   tav,
   aanhef,
   adres,
   postcode,
   plaats,
   factuurdatum,
   res_rsv_ruimte_key,
   resid,
   ordernr,
   sys_helft,
   dagnaam,
   dagnr,
   van,
   tot,
   omschrijving,
   opmerking,
   datumverzoek,
   soortverzoek,
   tarief_code,
   termijnen,
   korting,
   behandelaar_naam,
   behandelaar_tel,
   behandelaar_mail,
   res_discipline_key,
   res_ruimte_key,
   alg_locatie_key,
   res_type,
   res_ruimte_nr,
   vnr,
   onderwerp,
   res_voorziening,
   res_rsv_prijs,
   aantal,
   ps,
   po,
   pm,
   pa,
   pd,
   btw
)
AS
   SELECT   x.res_rsv_ruimte_ordernr groepering1,
            DECODE ( -- V -> per jaarhelft/locatie; I of C -> per reservering!
               tarief.res_kenmerkreservering_waarde,
               '84',                                                   -- Vast
               TO_CHAR (rvc.alg_locatie_key) || '-'                   -- Dash!
               || COALESCE (TO_CHAR (r.bedr_key),
                            --inaam.res_kenmerkreservering_waarde,
                            UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                            '[naam]'),
               TO_CHAR (x.res_key) || '/' || TO_CHAR (x.res_vnr)     -- Slash!
            )
               groepering2,
               TO_CHAR (x.van, 'yyyy-mm-dd hh24:mi')
            || rvc.res_ruimte_nr
            || x.res_key
               sortering1,      -- Factuurregels op datum-tijd en dan ruimtenr
            rvc.res_type || SUBSTR ('000000' || TO_CHAR (rvc.vnr), -6)
               sortering2,      -- ..daarbinnen op type (1R2V3C) en dan volgnr
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                         '[naam]'),
               TRIM (r.prs_bedrijf_naam)
            )
               fclt_f_naam,
            DECODE (r.bedr_key,
                    NULL,
                    COALESCE (inaam.res_kenmerkreservering_waarde, '[naam]'),
                    COALESCE (rnaam.prs_kenmerklink_waarde, '[naam]'))
               naam,
            DECODE (r.bedr_key,
                    NULL, iafd.res_kenmerkreservering_waarde,
                    rafd.prs_kenmerklink_waarde)
               afd,
            DECODE (r.bedr_key,
                    NULL, itav.res_kenmerkreservering_waarde,
                    rtav.prs_kenmerklink_waarde)
               tav,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (iaanhef.res_kenmerkreservering_waarde, '[aanhef]'),
               COALESCE (raanhef.prs_kenmerklink_waarde, '[aanhef]')
            )
               aanhef,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (iadres.res_kenmerkreservering_waarde, '[adres]'),
               COALESCE (r.adres, '[adres]')
            )
               adres,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (ipostcode.res_kenmerkreservering_waarde, '[pc]'),
               COALESCE (r.postcode, '[pc]')
            )
               postcode,
            DECODE (
               r.bedr_key,
               NULL,
               COALESCE (iplaats.res_kenmerkreservering_waarde, '[plaats]'),
               COALESCE (r.plaats, '[plaats]')
            )
               plaats,
            TO_CHAR (SYSDATE, 'dd')
            || DECODE (TO_CHAR (SYSDATE, 'mm'),
                       '01', ' januari ',
                       '02', ' februari ',
                       '03', ' maart ',
                       '04', ' april ',
                       '05', ' mei ',
                       '06', ' juni ',
                       '07', ' juli ',
                       '08', ' augustus ',
                       '09', ' september ',
                       '10', ' okotober ',
                       '11', ' november ',
                       ' december ')
            || TO_CHAR (SYSDATE, 'yyyy')
               factuurdatum,
            x.res_rsv_ruimte_key,
            x.res_key || '/' || x.res_vnr resid,
            x.res_rsv_ruimte_ordernr ordernr,
            x.res_helft,         -- 1e of 2e jaarhelft in formaat yyyyh(elft)!
            DECODE (TO_CHAR (x.van, 'd'),
                    '2', 'maandag',
                    '3', 'dinsdag',
                    '4', 'woensdag',
                    '5', 'donderdag',
                    '6', 'vrijdag',
                    '7', 'zaterdag',
                    'zondag')
               dagnaam,
            DECODE (TO_CHAR (x.van, 'd'),
                    '1', 7,
                    TO_NUMBER (TO_CHAR (x.van, 'd')) - 1)
               dagnr,
            x.van,                           --TO_CHAR (x.van, 'hh24:mi') van,
            x.tot,                           --TO_CHAR (x.tot, 'hh24:mi') tot,
            x.res_rsv_ruimte_omschrijving oms,
            x.res_rsv_ruimte_opmerking opm,
            COALESCE (datumverzoek.res_kenmerkreservering_waarde,
                      'dd-mm-jjjj')
               datumverzoek,
            DECODE (soortverzoek.res_kenmerkreservering_waarde,
                    '81', 'telefonische',
                    '82', 'schriftelijke',
                    '[soortverzoek]')
               soortverzoek,
            DECODE (tarief.res_kenmerkreservering_waarde,
                    '84', 'V',                                        -- Vast!
                    '85', 'C',                                 -- Commercieel!
                    'I')                                       -- Incidenteel!
               tarief_code,
            rtermijnen.prs_kenmerklink_waarde termijnen,
            DECODE (
               rkorting.prs_kenmerklink_waarde,
               '1',
               DECODE (
                  rvc.res_discipline_key,
                  41,                                              -- Sporthal
                  DECODE (
                     TO_CHAR (x.tot, 'd'),
                     '1',                                            -- Zondag
                     1,
                     '4',                                          -- Woensdag
                     DECODE (SIGN ( ( (x.van - TRUNC (x.van)) * 24) - 12),
                             -1, 0.5,
                             1),
                     '7',                                          -- Zaterdag
                     1,
                     DECODE (SIGN ( ( (x.van - TRUNC (x.van)) * 24) - 18),
                             -1, 0.5,
                             1)
                  ),
                  1
               ),
               1
            )
               korting,             -- Eventueel te hanteren korting (factor)!
            x.behandelaar_naam,
            x.behandelaar_tel,
            x.behandelaar_mail,
            rvc.res_discipline_key,
            rvc.res_ruimte_key,
            rvc.alg_locatie_key,
            rvc.res_type,
            rvc.res_ruimte_nr,
            rvc.vnr,
            rvc.onderwerp,
            rvc.res_voorziening,
            rvc.res_rsv_prijs,
            rvc.aantal,
            rvc.ps,                                              -- Uur-tarief
            rvc.po,                                      -- Incidenteel tarief
            rvc.pm,                                           -- Vast tarief/K
            rvc.pa,                                    -- Commercieel tarief/H
            rvc.pd,                                            -- Jaartarief/J
            rvc.btw
     FROM                                                         (SELECT   rr.res_rsv_ruimte_key,
                                                                            rr.res_reservering_key res_key,
                                                                            rr.res_rsv_ruimte_volgnr res_vnr,
                                                                            rr.res_rsv_ruimte_ordernr,
                                                                            rr.res_rsv_ruimte_van van,
                                                                            rr.res_rsv_ruimte_tot tot,
                                                                            rr.res_rsv_ruimte_omschrijving,
                                                                            rr.res_rsv_ruimte_opmerking,
                                                                            p.prs_perslid_key,
                                                                            DECODE (
                                                                               p.prs_perslid_voornaam,
                                                                               '', '',
                                                                               p.prs_perslid_voornaam
                                                                               || ' '
                                                                            )
                                                                            || DECODE (
                                                                                  p.prs_perslid_tussenvoegsel,
                                                                                  '', '',
                                                                                  p.prs_perslid_tussenvoegsel
                                                                                  || ' '
                                                                               )
                                                                            || p.prs_perslid_naam
                                                                               behandelaar_naam,
                                                                            COALESCE (
                                                                               p.prs_perslid_telefoonnr,
                                                                               p.prs_perslid_mobiel
                                                                            )
                                                                               behandelaar_tel,
                                                                            p.prs_perslid_email
                                                                               behandelaar_mail,
                                                                            TO_CHAR (
                                                                               rr.res_rsv_ruimte_tot,
                                                                               'yyyy'
                                                                            )
                                                                            || DECODE (
                                                                                  TRUNC (
                                                                                     ADD_MONTHS (
                                                                                        rr.res_rsv_ruimte_tot, 5
                                                                                     ),
                                                                                     'yyyy'
                                                                                  ),
                                                                                  TRUNC (
                                                                                     rr.res_rsv_ruimte_tot,
                                                                                     'yyyy'
                                                                                  ),
                                                                                  '1',
                                                                                  '2'
                                                                               )
                                                                               res_helft
                                                                     FROM   res_v_aanwezigrsv_ruimte rr,
                                                                            prs_perslid p
                                                                    WHERE   rr.res_rsv_ruimte_ordernr IS NOT NULL
                                                                            AND rr.res_activiteit_key IN (30, 230) -- Verhuur/Schoollokaal
                                                                            AND rr.res_status_fo_key IN (1, 2)
                                                                            AND rr.res_rsv_ruimte_dirtlevel = 0
                                                                            --AND COALESCE (
                                                                            --      rr.res_status_bo_key, 2
                                                                            --   ) != 6 -- Nog niet AV
                                                                            AND rr.res_rsv_ruimte_tot >
                                                                                  TO_DATE (
                                                                                     '01072013', 'ddmmyyyy'
                                                                                  )
                                                                            AND rr.res_rsv_ruimte_tot >
                                                                                  TRUNC (
                                                                                     ADD_MONTHS (
                                                                                        SYSDATE, -12
                                                                                     ),
                                                                                     'yyyy'
                                                                                  )
                                                                            AND rr.res_rsv_ruimte_contact_key =
                                                                                  p.prs_perslid_key)
                                                                  x
                                                               LEFT JOIN -- 301/422 = Datum verzoek
                                                                  res_v_aanwezigkenmerkwaarde datumverzoek
                                                               ON x.res_rsv_ruimte_key = datumverzoek.res_rsv_ruimte_key
                                                                  AND datumverzoek.res_kenmerk_key IN (301, 422)
                                                            LEFT JOIN -- 302/423 = Soort verzoek
                                                               res_v_aanwezigkenmerkwaarde soortverzoek
                                                            ON x.res_rsv_ruimte_key = soortverzoek.res_rsv_ruimte_key
                                                               AND soortverzoek.res_kenmerk_key IN (302, 423)
                                                         LEFT JOIN -- 303/424 = Verhuur tarief
                                                            res_v_aanwezigkenmerkwaarde tarief
                                                         ON x.res_rsv_ruimte_key = tarief.res_rsv_ruimte_key
                                                            AND tarief.res_kenmerk_key IN (303, 424)
                                                      LEFT JOIN -- Regelmatige relatiegegevens
                                                         (SELECT   kw.res_rsv_ruimte_key,
                                                                   b.prs_bedrijf_key bedr_key,
                                                                   b.prs_bedrijf_naam,
                                                                   COALESCE (
                                                                      b.prs_bedrijf_post_adres,
                                                                      b.prs_bedrijf_bezoek_adres
                                                                   ) adres,
                                                                   COALESCE (
                                                                      b.prs_bedrijf_post_postcode,
                                                                      b.prs_bedrijf_bezoek_postcode
                                                                   ) postcode,
                                                                   COALESCE (
                                                                      b.prs_bedrijf_post_plaats,
                                                                      b.prs_bedrijf_bezoek_plaats
                                                                   ) plaats
                                                            FROM   res_v_aanwezigkenmerkwaarde kw,
                                                                   prs_bedrijf b
                                                           WHERE   kw.res_kenmerk_key IN (9, 426) -- Relatie
                                                                   AND fac.safe_to_number(kw.res_kenmerkreservering_waarde) =
                                                                         b.prs_bedrijf_key)
                                                         r
                                                      ON x.res_rsv_ruimte_key = r.res_rsv_ruimte_key
                                                   LEFT JOIN -- 2/428 = Incidentele relatie/Naam
                                                      res_v_aanwezigkenmerkwaarde inaam
                                                   ON x.res_rsv_ruimte_key = inaam.res_rsv_ruimte_key
                                                      AND inaam.res_kenmerk_key IN (2, 428)
                                                LEFT JOIN -- 341/429 = Incidentele relatie/Afd
                                                   res_v_aanwezigkenmerkwaarde iafd
                                                ON x.res_rsv_ruimte_key = iafd.res_rsv_ruimte_key
                                                   AND iafd.res_kenmerk_key IN (341, 429)
                                             LEFT JOIN -- 342/430 = Incidentele relatie/Tav
                                                res_v_aanwezigkenmerkwaarde itav
                                             ON x.res_rsv_ruimte_key = itav.res_rsv_ruimte_key
                                                AND itav.res_kenmerk_key IN (342, 430)
                                          LEFT JOIN -- 304/436 = Incidentele relatie/Aanhef
                                             res_v_aanwezigkenmerkwaarde iaanhef
                                          ON x.res_rsv_ruimte_key = iaanhef.res_rsv_ruimte_key
                                             AND iaanhef.res_kenmerk_key IN (304, 436)
                                       LEFT JOIN -- 3/431 = Incidentele relatie/Adres
                                          res_v_aanwezigkenmerkwaarde iadres
                                       ON x.res_rsv_ruimte_key = iadres.res_rsv_ruimte_key
                                          AND iadres.res_kenmerk_key IN (3, 431)
                                    LEFT JOIN -- 4/432 = Incidentele relatie/Postcode
                                       res_v_aanwezigkenmerkwaarde ipostcode
                                    ON x.res_rsv_ruimte_key = ipostcode.res_rsv_ruimte_key
                                       AND ipostcode.res_kenmerk_key IN (4, 432)
                                 LEFT JOIN -- 5/433 = Incidentele relatie/Plaats
                                    res_v_aanwezigkenmerkwaarde iplaats
                                 ON x.res_rsv_ruimte_key = iplaats.res_rsv_ruimte_key
                                    AND iplaats.res_kenmerk_key IN (5, 433)
                              LEFT JOIN     -- 1021 = Regelmatige relatie/Naam
                                 prs_v_aanwezigkenmerklink rnaam
                              ON r.bedr_key = rnaam.prs_link_key
                                 AND rnaam.prs_kenmerk_key = 1021
                           LEFT JOIN         -- 1040 = Regelmatige relatie/Afd
                              prs_v_aanwezigkenmerklink rafd
                           ON r.bedr_key = rafd.prs_link_key
                              AND rafd.prs_kenmerk_key = 1040
                        LEFT JOIN            -- 1041 = Regelmatige relatie/Tav
                           prs_v_aanwezigkenmerklink rtav
                        ON r.bedr_key = rtav.prs_link_key
                           AND rtav.prs_kenmerk_key = 1041
                     LEFT JOIN            -- 1022 = Regelmatige relatie/Aanhef
                        prs_v_aanwezigkenmerklink raanhef
                     ON r.bedr_key = raanhef.prs_link_key
                        AND raanhef.prs_kenmerk_key = 1022
                  LEFT JOIN            -- 1023 = Regelmatige relatie/Termijnen
                     prs_v_aanwezigkenmerklink rtermijnen
                  ON r.bedr_key = rtermijnen.prs_link_key
                     AND rtermijnen.prs_kenmerk_key = 1023
               LEFT JOIN                 -- 1060 = Regelmatige relatie/Korting
                  prs_v_aanwezigkenmerklink rkorting
               ON r.bedr_key = rkorting.prs_link_key
                  AND rkorting.prs_kenmerk_key = 1060
            LEFT JOIN
               (SELECT   rrr.res_rsv_ruimte_key,
                         rr.res_discipline_key,
                         rr.res_ruimte_key,
                         l.alg_locatie_key,
                         '1R' res_type,
                         rr.res_ruimte_nr,
                         TO_NUMBER (NULL) vnr,
                         'Huur '
                         || DECODE (
                               rrr.res_activiteit_key,
                               30,
                               rdi.ins_discipline_omschrijving || ' '
                               || TRIM(SUBSTR (
                                          rr.res_ruimte_nr,
                                          1,
                                          INSTR (rr.res_ruimte_nr || '(',
                                                 '(')
                                          - 1
                                       )),
                               'locatie ' || l.alg_locatie_omschrijving
                            )
                            onderwerp,
                         rr.res_ruimte_nr res_voorziening,
                         rrr.res_rsv_ruimte_prijs res_rsv_prijs,
                         (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van)
                         * 24
                            aantal,                            -- Duur in uren
                         rr.res_ruimte_prijs ps,                 -- Uur-tarief
                         rr.res_ruimte_prijs_ochtend po, -- Incidenteel tarief
                         rr.res_ruimte_prijs_middag pm,       -- Vast tarief/K
                         rr.res_ruimte_prijs_avond pa, -- Commercieel tarief/H
                         rr.res_ruimte_prijs_dag pd,           -- Jaartarief/J
                         6 btw
                  FROM   res_v_aanwezigrsv_ruimte rrr,
                         res_ruimte_opstelling rro,
                         res_ruimte rr,
                         res_discipline rdi,
                         res_v_res_ruimte_gegevens_all rga,
                         alg_locatie l
                 WHERE   rrr.res_ruimte_opstel_key =
                            rro.res_ruimte_opstel_key
                         AND rro.res_ruimte_key = rr.res_ruimte_key
                         AND rr.res_discipline_key = rdi.ins_discipline_key
                         AND rr.res_ruimte_key = rga.res_ruimte_key
                         AND rga.alg_locatie_key = l.alg_locatie_key
                UNION ALL
                SELECT   rrd.res_rsv_ruimte_key,
                         rr.res_discipline_key,
                         rr.res_ruimte_key,
                         l.alg_locatie_key,
                         '2V' res_type,
                         rr.res_ruimte_nr,
                         rd.res_ins_deel_key vnr,
                         NULL onderwerp,
                         LTRIM (ID.ins_deel_omschrijving)
                         || DECODE (rd.res_deel_eenheid,
                                    NULL, '',
                                    ' (' || rd.res_deel_eenheid || ')')
                            res_voorziening,
                         rrd.res_rsv_deel_prijs res_rsv_prijs,
                         (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24
                            aantal,                            -- Duur in uren
                         rd.res_deel_prijs ps,                   -- Uur-tarief
                         TO_NUMBER (NULL) po,            -- Incidenteel tarief
                         TO_NUMBER (NULL) pm,                 -- Vast tarief/K
                         TO_NUMBER (NULL) pa,          -- Commercieel tarief/H
                         TO_NUMBER (NULL) pd,                  -- Jaartarief/J
                         6 btw
                  FROM   res_v_aanwezigrsv_ruimte rrr,
                         res_ruimte_opstelling rro,
                         res_ruimte rr,
                         res_v_res_ruimte_gegevens_all rga,
                         alg_locatie l,
                         res_v_aanwezigrsv_deel rrd,
                         res_deel rd,
                         ins_deel ID
                 WHERE   rrr.res_ruimte_opstel_key =
                            rro.res_ruimte_opstel_key
                         AND rro.res_ruimte_key = rr.res_ruimte_key
                         AND rr.res_ruimte_key = rga.res_ruimte_key
                         AND rga.alg_locatie_key = l.alg_locatie_key
                         AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
                         AND rrd.res_deel_key = rd.res_deel_key
                         AND rd.res_ins_deel_key = ID.ins_deel_key
                UNION ALL
                SELECT   rra.res_rsv_ruimte_key,
                         rr.res_discipline_key,
                         rr.res_ruimte_key,
                         l.alg_locatie_key,
                         '3C' res_type,
                         rr.res_ruimte_nr,
                         ra.res_artikel_volgnummer vnr,
                         NULL onderwerp,
                         LTRIM (ra.res_artikel_omschrijving)
                         || DECODE (ra.res_artikel_eenheid,
                                    NULL, '',
                                    ' (' || ra.res_artikel_eenheid || ')')
                            res_voorziening,
                         rra.res_rsv_artikel_prijs res_rsv_prijs,
                         rra.res_rsv_artikel_aantal aantal,
                         ra.res_artikel_prijs ps,                -- Stuksprijs
                         TO_NUMBER (NULL) po,            -- Incidenteel tarief
                         TO_NUMBER (NULL) pm,                 -- Vast tarief/K
                         TO_NUMBER (NULL) pa,          -- Commercieel tarief/H
                         TO_NUMBER (NULL) pd,                  -- Jaartarief/J
                         COALESCE (rra.res_rsv_artikel_btw,
                                   ra.res_artikel_btw,
                                   21)
                            btw
                  FROM   res_v_aanwezigrsv_ruimte rrr,
                         res_ruimte_opstelling rro,
                         res_ruimte rr,
                         res_v_res_ruimte_gegevens_all rga,
                         alg_locatie l,
                         res_v_aanwezigrsv_artikel rra,
                         res_artikel ra
                 WHERE   rrr.res_ruimte_opstel_key =
                            rro.res_ruimte_opstel_key
                         AND rro.res_ruimte_key = rr.res_ruimte_key
                         AND rr.res_ruimte_key = rga.res_ruimte_key
                         AND rga.alg_locatie_key = l.alg_locatie_key
                         AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                         AND rra.res_artikel_key = ra.res_artikel_key) rvc
            ON x.res_rsv_ruimte_key = rvc.res_rsv_ruimte_key
    WHERE   tarief.res_kenmerkreservering_waarde != '261'          -- Niet nul
/

/* Formatted on 6-3-2014 13:45:45 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW renk_v_lokaalverhuur_frozen
(
   groepering2,                                  -- Huurder/locatie -> factuur
   sys_helft,
   res_ruimte_key,                                                   -- Ruimte
   khj_tarief                              -- K(wartaal), H(alfjaar) of J(aar)
)
AS
   SELECT x.groepering2,
          x.res_helft,
          x.res_ruimte_key,
          DECODE (
             SUBSTR (x.res_helft, -1),
             '1',
             DECODE (x.k1 + x.k2,
                     2, DECODE (x.k3 + x.k4, 2, 'J', 'H'),
                     'K'),  -- Deze helft geen boekingen in beide kwartalen!
             DECODE (x.k3 + x.k4,
                     2, DECODE (x.k1 + x.k2, 2, 'J', 'H'),
                     'K')   -- Deze helft geen boekingen in beide kwartalen!
          )
             khj
     FROM (  SELECT TO_CHAR (x.alg_locatie_key) || '-'
                    || COALESCE (bedr_key.res_kenmerkreservering_waarde,
                                 UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                                 '[naam]')
                       groepering2,
                    x.res_helft,
                    x.res_ruimte_key,
                    DECODE (SIGN (SUM (x.k1) - 8), -1, 0, 1) k1,
                    DECODE (SIGN (SUM (x.k2) - 8), -1, 0, 1) k2,
                    DECODE (SIGN (SUM (x.k3) - 8), -1, 0, 1) k3,
                    DECODE (SIGN (SUM (x.k4) - 8), -1, 0, 1) k4
               FROM (SELECT rrr.res_rsv_ruimte_key,
                            rrr.res_rsv_ruimte_omschrijving,
                            rr.res_ruimte_key,
                            rga.alg_locatie_key,
                            TO_CHAR (DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'mm'),
                                             '07', ADD_MONTHS (rrr.res_rsv_ruimte_tot, -12),
                                             rrr.res_rsv_ruimte_tot),
                                     'yyyy')
                            || DECODE (TRUNC (ADD_MONTHS (rrr.res_rsv_ruimte_tot, 6), 'yy'),
                                       TRUNC (rrr.res_rsv_ruimte_tot, 'yy'), '1',
                                       '2')
                               res_helft,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    1, 1,
                                    0)
                               k1,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    2, 1,
                                    0)
                               k2,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    3, 1,
                                    0)
                               k3,
                            DECODE (TO_CHAR (rrr.res_rsv_ruimte_tot, 'Q'),
                                    4, 1,
                                    0)
                               k4
                       FROM res_v_aanwezigrsv_ruimte rrr,
                            res_ruimte_opstelling rro,
                            res_ruimte rr,
                            res_v_res_ruimte_gegevens_all rga
                      WHERE     rrr.res_rsv_ruimte_ordernr IS NOT NULL
                            AND rrr.res_activiteit_key = 230   -- Schoollokaal
                            AND rrr.res_status_fo_key IN (1, 2)
                            AND 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 rr.res_discipline_key = 43
                            AND rr.res_ruimte_key = rga.res_ruimte_key) x
                    LEFT JOIN                          -- 424 = Verhuur tarief
                             res_v_aanwezigkenmerkwaarde tarief
                       ON x.res_rsv_ruimte_key = tarief.res_rsv_ruimte_key
                          AND tarief.res_kenmerk_key = 424
                    LEFT JOIN             -- 426 = Regelmatige relatiegegevens
                             res_v_aanwezigkenmerkwaarde bedr_key
                       ON x.res_rsv_ruimte_key = bedr_key.res_rsv_ruimte_key
                          AND bedr_key.res_kenmerk_key = 426
              WHERE tarief.res_kenmerkreservering_waarde = '84'
           GROUP BY TO_CHAR (x.alg_locatie_key) || '-'
                    || COALESCE (
                          bedr_key.res_kenmerkreservering_waarde,
                          UPPER (TRIM (x.res_rsv_ruimte_omschrijving)),
                          '[naam]'),
                    x.res_helft,
                    x.res_ruimte_key) x;

/* Formatted on 25-11-2013 11:12:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_rap_res_frozen
(
   hide_f_groepering,
   hide_f_mindatum,
   hide_f_maxdatum,
   hide_f_restype,
   fclt_f_naam,
   naam,
   afd,
   tav,
   aanhef,
   adres,
   postcode,
   plaats,
   factuurdatum,
   ordernr,
   periode,                                                       -- res_helft
   dagnaam,
   dagnr,
   van,
   tot,
   rvc_oms,
   aantal,
   stuksprijs,
   bruto,
   onderwerp,
   datumverzoek,
   soortverzoek,
   tarief_code,
   termijnen,
   korting,
   fclt_f_kenmerk,
   behandelaar_naam,
   behandelaar_tel,
   behandelaar_mail,
   res_discipline_key,
   res_ruimte_key,
   aant_weken
)
AS
     SELECT   x.groepering1,
              MIN (x.sortering1),
              MAX (x.sortering1),
              x.sortering2,
              MIN (x.fclt_f_naam),
              MIN (x.naam),
              MIN (x.afd),
              MIN (x.tav),
              MIN (x.aanhef),
              MIN (x.adres),
              MIN (x.postcode),
              MIN (x.plaats),
              MIN (x.factuurdatum),
              MIN (x.ordernr),
              MIN (x.sys_helft),
              MIN (x.dagnaam),
              x.dagnr,
              x.van,
              x.tot,
              MIN (x.res_voorziening),
              MIN (x.aantal),
              MIN (x.stuksprijs),
              DECODE (x.khj_tarief,
                      NULL, SUM (x.bruto),
                      SUM (x.bruto) / COUNT ( * )),
              MIN (x.onderwerp),
              MIN (x.datumverzoek),            -- Langst geleden verzoekdatum!
              MIN (x.soortverzoek),                      -- Schriftelijk wint!
              MIN (x.tarief_code),
              MIN (x.termijnen),
              MIN (x.korting),
              x.ordernr kenmerk,
              MIN (x.behandelaar_naam),
              MIN (x.behandelaar_tel),
              MIN (x.behandelaar_mail),
              MIN (x.res_discipline_key),
              x.res_ruimte_key,
              COUNT ( * ) aant_weken
       FROM   (SELECT   x.groepering1,
                        x.sortering1,
                        x.sortering2,
                        x.fclt_f_naam,
                        x.naam,
                        x.afd,
                        x.tav,
                        x.aanhef,
                        x.adres,
                        x.postcode,
                        x.plaats,
                        x.factuurdatum,
                        x.ordernr,
                        x.sys_helft,
                        x.dagnaam,
                        x.dagnr,
                        TO_CHAR (x.van, 'hh24:mi') van,
                        TO_CHAR (x.tot, 'hh24:mi') tot,
                        x.res_voorziening,
                        x.aantal,
                        ROUND (
                           DECODE (
                              x.res_rsv_prijs,
                              NULL,
                              DECODE (
                                 x.res_type,
                                 '1R',
                                 DECODE (
                                    x.tarief_code,
                                    'V',    -- Speciale tarieven igv. lokalen!
                                    DECODE (y.khj_tarief,
                                            'H', x.pa,             -- Halfjaar
                                            'J', x.pd,                 -- Jaar
                                            x.pm),            -- Vast/Kwartaal
                                    'C',
                                    x.pa,                      -- Commercieel!
                                    x.po                       -- Incidenteel!
                                 ),
                                 x.ps                                -- 2V/3C!
                              ),
                              x.res_rsv_prijs
                              / DECODE (x.aantal, NULL, 1, 0, 1, x.aantal)
                           ),
                           2
                        )
                           stuksprijs,
                        ROUND (
                           DECODE (
                              x.res_type,
                              '1R', -- ZIE OOK ONDERSTAANDE - GEVAARLIJKE - AANNAME!
                              COALESCE (
                                 x.res_rsv_prijs, -- NULL totdat door MVH "bevroren"
                                 --DECODE (x.res_ruimte_key,
                                 --        121, CEIL (x.aantal / 4),
                                 --        x.aantal) -- Instructieruimte per dagdeel
                                 x.aantal
                                 * DECODE (
                                      x.tarief_code,
                                      'V',  -- Speciale tarieven igv. lokalen!
                                      DECODE (y.khj_tarief,
                                              'H', x.pa,           -- Halfjaar
                                              'J', x.pd,               -- Jaar
                                              x.pm),          -- Vast/Kwartaal
                                      'C',
                                      x.pa,                    -- Commercieel!
                                      x.po                     -- Incidenteel!
                                   )
                                 * x.korting
                              ),
                              COALESCE (x.res_rsv_prijs, x.aantal * x.ps) -- 2V/3C!
                           ),
                           2
                        )
                           bruto,
                        x.onderwerp,
                           SUBSTR (x.datumverzoek, 7, 4)
                        || SUBSTR (x.datumverzoek, 4, 2)
                        || SUBSTR (x.datumverzoek, 1, 2)
                           datumverzoek,
                        x.soortverzoek,
                        x.tarief_code,
                        x.termijnen,
                        x.korting,
                        x.behandelaar_naam,
                        x.behandelaar_tel,
                        x.behandelaar_mail,
                        x.res_discipline_key,
                        x.res_ruimte_key,
                        y.khj_tarief
                 FROM   renk_v_verhuurregels_frozen x,
                        renk_v_lokaalverhuur_frozen y
                WHERE       x.groepering2 = y.groepering2(+)
                        AND x.sys_helft = y.sys_helft(+)
                        AND x.res_ruimte_key = y.res_ruimte_key(+)) x
   GROUP BY   x.groepering1,
              x.sortering2,
              x.dagnr,
              x.van,
              x.tot,
              x.res_ruimte_key,
              x.khj_tarief;

/* Formatted on 2-8-2013 10:05:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW renk_v_rap_freezereserveringen
(
   hide_f_groepering,
   fclt_f_naam,
   aantal,
   eerder_kenmerk
)
AS
     SELECT   v.hide_f_groepering,
              v.fclt_f_naam,
              SUM (v.aant_weken) aantal,
              MAX (v.ordernr)
       FROM   renk_v_rap_res_actual v
      WHERE   SUBSTR (v.hide_f_restype, 1, 2) = '1R'
   GROUP BY   v.hide_f_groepering, v.fclt_f_naam;

-- View voor notificatiejob controleert elk uur of er nieuwe (srtnoti 59)/
-- gewijzigde (srtnoti 60) reserveringen zijn voor zalen B&W kamer, raadzaal
-- en trouwzaal (resp. keys 5, 6 en 7).
-- Met RENK#27558 alleen reserveringen tussen 18:00 en 24:00 controleren.
CREATE OR REPLACE VIEW RENK_V_NOTI_SPEC_RESREMINDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   DISTINCT
            'RESUPD',
            NULL,
            usr.prs_perslid_key,
            (CASE str.fac_srtnotificatie_key
                WHEN 60
                THEN
                      'Reservering '
                   || rrr.res_reservering_key
                   || '/'
                   || rrr.res_rsv_ruimte_volgnr
                   || ' ('
                   || res_rsv_ruimte_van
                   || ' - '
                   || res_ruimte_nr
                   || ') is op '
                   || fac_tracking_datum
                   || ' gewijzigd door '
                   || pf.prs_perslid_naam_full
                ELSE
                      '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
             END)
               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,
            (SELECT   DISTINCT p.prs_perslid_key
               FROM   fac_groeprechten g,
                      fac_functie f,
                      fac_gebruikersgroep gg,
                      prs_v_aanwezigperslid p
              WHERE       g.fac_functie_key = f.fac_functie_key
                      AND g.fac_groep_key = gg.fac_groep_key
                      AND p.prs_perslid_key = gg.prs_perslid_key
                      AND fac_functie_code = 'WEB_USER02') usr
    WHERE       rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
            AND rro.res_ruimte_key = rr.res_ruimte_key
            AND res_rsv_ruimte_verwijder IS NULL
            AND rr.res_ruimte_key IN (5, 6, 7)
            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 IN (59, 60)
            AND tr.fac_tracking_datum >
                  (SELECT   fac_notificatie_job_nextrun
                            - fac_notificatie_job_interval / 24
                     FROM   fac_notificatie_job
                    WHERE   fac_notificatie_job_view =
                               'RENK_V_NOTI_SPEC_RESREMINDER')
            AND ( (TO_CHAR (rrr.res_rsv_ruimte_van, 'HH24MISS') BETWEEN '180000'
                                                                    AND  '235959')
                 OR (TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24MISS') BETWEEN '180000'
                                                                      AND  '235959'));


-- RENK#30936 RTMs
/* Formatted on 17-11-2014 17:30:24 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW RENK_V_GRAPH_NEW12M_AANVR
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE
)
AS
     SELECT DECODE (TO_CHAR (mld_melding_datum, 'mm'),
                    '01', 'Januari',
                    '02', 'Februari',
                    '03', 'Maart',
                    '04', 'April',
                    '05', 'Mei',
                    '06', 'Juni',
                    '07', 'Juli',
                    '08', 'Augustus',
                    '09', 'September',
                    '10', 'Oktober',
                    '11', 'November',
                    'December'),
            COUNT ( * ),
            TO_CHAR (mld_melding_datum, 'yyyymm')
       FROM mld_melding m, mld_stdmelding sm, mld_discipline md
      WHERE m.mld_melding_datum BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -11)
                                    AND  SYSDATE
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = md.ins_discipline_key
            AND md.ins_srtdiscipline_key = 44                      -- Aanvraag
   GROUP BY TO_CHAR (mld_melding_datum, 'mm'),
            TO_CHAR (mld_melding_datum, 'yyyymm');

CREATE OR REPLACE VIEW RENK_V_GRAPH_NEW12M_BODES
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE
)
AS
     SELECT DECODE (TO_CHAR (mld_melding_datum, 'mm'),
                    '01', 'Januari',
                    '02', 'Februari',
                    '03', 'Maart',
                    '04', 'April',
                    '05', 'Mei',
                    '06', 'Juni',
                    '07', 'Juli',
                    '08', 'Augustus',
                    '09', 'September',
                    '10', 'Oktober',
                    '11', 'November',
                    'December'),
            COUNT ( * ),
            TO_CHAR (mld_melding_datum, 'yyyymm')
       FROM mld_melding m, mld_stdmelding sm, mld_discipline md
      WHERE m.mld_melding_datum BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -11)
                                    AND  SYSDATE
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = md.ins_discipline_key
            AND md.ins_srtdiscipline_key = 1    -- Melding voor Bodes (intern)
   GROUP BY TO_CHAR (mld_melding_datum, 'mm'),
            TO_CHAR (mld_melding_datum, 'yyyymm');

CREATE OR REPLACE VIEW RENK_V_GRAPH_NEW12M_VASTG
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE
)
AS
     SELECT DECODE (TO_CHAR (mld_melding_datum, 'mm'),
                    '01', 'Januari',
                    '02', 'Februari',
                    '03', 'Maart',
                    '04', 'April',
                    '05', 'Mei',
                    '06', 'Juni',
                    '07', 'Juli',
                    '08', 'Augustus',
                    '09', 'September',
                    '10', 'Oktober',
                    '11', 'November',
                    'December'),
            COUNT ( * ),
            TO_CHAR (mld_melding_datum, 'yyyymm')
       FROM mld_melding m, mld_stdmelding sm, mld_discipline md
      WHERE m.mld_melding_datum BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -11)
                                    AND  SYSDATE
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = md.ins_discipline_key
            AND md.ins_srtdiscipline_key = 61     -- Melding Vastgoed (extern)
   GROUP BY TO_CHAR (mld_melding_datum, 'mm'),
            TO_CHAR (mld_melding_datum, 'yyyymm');

CREATE OR REPLACE VIEW RENK_V_GRAPH_BHNDLR_OPEN
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
     SELECT DECODE (
               o.mld_melding_key,
               NULL,
               x.behandelaar,
               DECODE (o.mld_statusopdr_key,
                       3, o.budgethouder,                    -- Nvt. bij RENK?
                       10, 'Beheerder',                      -- Nvt. bij RENK!
                       o.uitvoerende))
               behandelaar,
            COUNT ( * ) - SUM (uitvoeringoptijd) telaat,
            SUM (uitvoeringoptijd) optijd,
            0 - COUNT ( * ) volgorde
       FROM    (SELECT m.mld_melding_key,
                       m.mld_melding_status,
                       p.prs_perslid_naam_full behandelaar,
                       DECODE (
                          SIGN(m.mld_melding_einddatum_std
                               - TRUNC (SYSDATE, 'mi')),
                          -1,
                          0,
                          1)
                          uitvoeringoptijd
                  FROM mld_melding m,
                       mld_stdmelding sm,
                       mld_discipline md,
                       prs_v_perslid_fullnames_all p
                 WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
                       AND sm.mld_ins_discipline_key = md.ins_discipline_key
                       --AND md.ins_srtdiscipline_key = -1
                       AND m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending
                       AND m.mld_melding_behandelaar_key = p.prs_perslid_key) x
            LEFT JOIN -- Gegevens van lopende opdracht met laagste volgnummer!
               (SELECT o.mld_melding_key,
                       o.mld_statusopdr_key,
                       COALESCE (b.prs_bedrijf_naam, p1.prs_perslid_naam_full)
                          uitvoerende,
                       p2.prs_perslid_naam_full budgethouder
                  FROM mld_opdr o,
                       prs_bedrijf b,                   -- Externe leverancier
                       prs_v_perslid_fullnames_all p1,  -- Interne uitvoerende
                       prs_v_perslid_fullnames_all p2          -- Budgethouder
                 WHERE     o.mld_statusopdr_key IN (3, 4, 5, 8, 10) -- 3-Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd, 10-Ter goedkeuring
                       AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
                       AND o.mld_uitvoerende_keys = p1.prs_perslid_key(+)
                       AND prs.getkpverantwoordelijke (o.prs_kostenplaats_key,
                                                       1,
                                                       -1) =
                             p2.prs_perslid_key(+)
                       AND NOT EXISTS
                             (SELECT 1
                                FROM mld_opdr
                               WHERE mld_melding_key = o.mld_melding_key
                                     AND mld_opdr_bedrijfopdr_volgnr <
                                           o.mld_opdr_bedrijfopdr_volgnr)) o
            ON x.mld_melding_key = o.mld_melding_key
   GROUP BY DECODE (
               o.mld_melding_key,
               NULL,
               x.behandelaar,
               DECODE (o.mld_statusopdr_key,
                       3, o.budgethouder,
                       10, 'Beheerder',
                       o.uitvoerende))
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ' behandelaar,
          0 telaat,
          0 optijd,
          0 volgorde
     FROM DUAL;

CREATE OR REPLACE VIEW RENK_V_GRAPH_VAKGRP_OPEN
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_URL
--FCLT_3D_DISCIPLINE_KEY
)
AS
     SELECT    sd.ins_srtdiscipline_prefix
            || '-'
            || md.ins_discipline_omschrijving,
            COUNT ( * ),
               'appl/mld/mld_search.asp?urole=fo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'disc_key_str='
            || md.ins_discipline_key
       --md.ins_discipline_key
       FROM mld_melding m,
            mld_stdmelding sm,
            mld_discipline md,
            ins_srtdiscipline sd
      WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = md.ins_discipline_key
            AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            --AND sd.ins_srtdiscipline_key = -1
            AND m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending
   GROUP BY    sd.ins_srtdiscipline_prefix
            || '-'
            || md.ins_discipline_omschrijving,
            md.ins_discipline_key
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ', 0, ' ' FROM DUAL;

CREATE OR REPLACE VIEW RENK_V_GRAPH_PPI_ACP
(
   FCLT_XAS_,
   FCLT_YAS_
)
AS
   SELECT   SUM (acceptatieoptijd) aantal, COUNT (mld_key) totaal
     FROM   (SELECT   DISTINCT
                      m.mld_melding_key mld_key,
                      --DECODE (
                      --   SIGN(m.mld_melding_acceptdatum_std - TRUNC (SYSDATE, 'mi')),
                      --   -1, 0,
                      --   1)
                      CASE SIGN(fac.datumtijdplusuitvoertijd (
                                   m.mld_melding_datum,
                                   m.mld_melding_t_accepttijd.tijdsduur,
                                   m.mld_melding_t_accepttijd.eenheid
                                )
                                - SYSDATE)
                         WHEN -1
                         THEN
                            0
                         ELSE
                            1
                      END
                         acceptatieoptijd
               FROM   mld_melding m
              --WHERE   m.mld_melding_status IN (2, 3) -- 2-Ingevoerd, 3-Ingezien
              WHERE   m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending
                                                        );

CREATE OR REPLACE VIEW RENK_V_GRAPH_PPI_AFM
(
   FCLT_XAS_,
   FCLT_YAS_
)
AS
   SELECT   SUM (uitvoeringoptijd) aantal, COUNT (mld_key) totaal
     FROM   (SELECT   DISTINCT
                      m.mld_melding_key mld_key,
                      --DECODE (
                      --   SIGN(m.mld_melding_einddatum_std - TRUNC (SYSDATE, 'mi')),
                      --   -1, 0,
                      --   1)
                      CASE SIGN(fac.datumtijdplusuitvoertijd (
                                   m.mld_melding_datum,
                                   m.mld_melding_t_uitvoertijd.tijdsduur,
                                   m.mld_melding_t_uitvoertijd.eenheid
                                )
                                - SYSDATE)
                         WHEN -1
                         THEN
                            0
                         ELSE
                            1
                      END
                         uitvoeringoptijd
               FROM   mld_melding m
              WHERE   m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending
                                                             );

-- RENK#35126 Extra CUST contractreminder
CREATE OR REPLACE FORCE VIEW renk_v_noti_cntreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
   SELECT   '',
            '',
            c.prs_perslid_key_beh,
            'Rappèl: Contract ' || c.cnt_contract_nummer_intern
            || DECODE (cnt_contract_versie,
                       NULL, '',
                       '.' || cnt_contract_versie)
            || ' ('
            || c.cnt_contract_omschrijving
            || ' '
            || b.prs_bedrijf_naam
            || ')'
            || ' moet uiterlijk per '
            || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
                        'DD-MM-YYYY')
            || ' worden verlengd of opgezegd.',
            c.cnt_contract_key,
            c.cnt_contract_nummer_intern,
            cnt.cnt_getopzegdatum (c.cnt_contract_key),
            NULL
     FROM   cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE       b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
            AND cnt_contract_verwijder IS NULL
            AND cnt_contract_status = 0
            AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
                             AND  cnt.cnt_getopzegdatum (c.cnt_contract_key))
   UNION ALL
   SELECT   '',
            '',
            c.prs_perslid_key_beh,
            'Rappèl: Contract ' || c.cnt_contract_nummer_intern
            || DECODE (cnt_contract_versie,
                       NULL, '',
                       '.' || cnt_contract_versie)
            || ' ('
            || c.cnt_contract_omschrijving
            || ' '
            || b.prs_bedrijf_naam
            || ')'
            || ' de extra rappèldatum '
            || TO_CHAR (opz.waarde, 'DD-MM-YYYY')
            || ' zal binnenkort verstrijken.',
            c.cnt_contract_key,
            c.cnt_contract_nummer_intern,
            cnt.cnt_getopzegdatum (c.cnt_contract_key),
            NULL
     FROM   cnt_v_aanwezigcontract c,
            prs_bedrijf b,
            (SELECT   ckc.cnt_contract_key,
                      fac.safe_to_date (cnt_kenmerkcontract_waarde,
                                        'DD-MM-YYYY')
                         waarde
               FROM   cnt_kenmerkcontract ckc, cnt_kenmerk ck
              WHERE       ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                      AND ck.cnt_srtkenmerk_key = 161
                      AND ckc.cnt_kenmerkcontract_waarde IS NOT NULL
                      AND ckc.cnt_kenmerkcontract_verwijder IS NULL) opz
    WHERE       b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
            AND cnt_contract_verwijder IS NULL
            AND cnt_contract_status = 0
            AND opz.cnt_contract_key = c.cnt_contract_key
            AND opz.waarde >= TRUNC (SYSDATE + 7)
            AND opz.waarde <= TRUNC (SYSDATE + 14);


-- RENK#52155 Rapport Contracten met relatiegegevens
CREATE OR REPLACE VIEW RENK_V_CONTRACTEN
(
    CONTRACTNR,
    SOORT_CONTRACT,
    BESCHRIJVING,
    OMSCHRIJVING,
    VAN,
    TOT,
    OPMERKING,
    BEDRIJFSNAAM,
    LEVERANCIERSNR,
    ADRES,
    POSTCODE,
    PLAATS,
    LAND,
    POSTADRES,
    POSTADRES_PC,
    POSTADRES_PLAATS,
    POSTADRES_LAND,
    CONTACTPERSOON,
    TELEFOON,
    FAX
)
AS
    SELECT c.cnt_contract_key,
                    (select ins_tab_discipline.ins_discipline_omschrijving
                    from ins_tab_discipline
                    where ins_tab_discipline.ins_discipline_key=c.ins_discipline_key),
                c.cnt_contract_omschrijving,c.cnt_contract_document, c.cnt_contract_looptijd_van, cnt_contract_looptijd_tot, c.cnt_contract_opmerking,
                b.prs_bedrijf_naam, b.prs_leverancier_nr, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_adres, b.prs_bedrijf_post_postcode, b.prs_bedrijf_post_plaats, b.prs_bedrijf_post_land,
                b.prs_bedrijf_contact_persoon, b.prs_bedrijf_contact_telefoon, b.prs_bedrijf_contact_fax
    FROM cnt_contract c, prs_bedrijf b
    WHERE
                c.cnt_prs_bedrijf_key =b.PRS_BEDRIJF_KEY
                and c.CNT_CONTRACT_VERWIJDER is null;

COMMIT;



BEGIN fac.registercustversion('RENK', 13); END;
/
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
commit;
spool off
