--
-- $Id$
--
-- Script containing customer specific db-configuration for HOUT.
DEFINE thisfile = 'HOUT.SQL'
DEFINE dbuser   = '^HOUT'
DEFINE custid   = 'HOUT'

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

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

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

CREATE OR REPLACE PROCEDURE hout_import_prs (
  p_import_key IN NUMBER
) IS

  c_fielddelimitor            VARCHAR2(1)   :=  ';';

  v_newline                   VARCHAR2 (1000); -- Input line
  v_errormsg                  VARCHAR (1000);
  v_errorhint                 VARCHAR (1000);
  oracle_err_num              NUMBER;
  oracle_err_mes              VARCHAR2 (200);
  v_count                     NUMBER;
  v_ongeldig                  NUMBER(1);
  v_mode                      NUMBER(1);
  v_aanduiding                VARCHAR (200);
  v_all_null                  BOOLEAN;
  v_first_time                BOOLEAN;
  v_count_error               NUMBER(10);
  v_count_tot                 NUMBER(10);
  v_count_import              NUMBER(10);

  -- De importvelden:
  v_alg_locatie_code                VARCHAR2(256); -- 01
  v_alg_gebouw_code                 VARCHAR2(256);
  v_alg_verdieping_volgnr           VARCHAR2(256);
  v_alg_ruimte_nr                   VARCHAR2(256);
  v_prs_afdeling_naam               VARCHAR2(256); -- 05
  v_prs_perslid_naam                VARCHAR2(256);
  v_prs_perslid_tussenvoegsel       VARCHAR2(256);
  v_prs_perslid_voorletters         VARCHAR2(256);
  v_prs_perslid_voornaam            VARCHAR2(256);
  v_prs_perslid_titel               VARCHAR2(256); -- 10
  v_prs_perslid_telefoonnr          VARCHAR2(256);
  v_prs_perslid_mobiel              VARCHAR2(256);
  v_prs_perslid_email               VARCHAR2(256);
  v_prs_srtperslid_omschrijving     VARCHAR2(256);
  v_prs_perslid_nr                  VARCHAR2(256); -- 15
  v_prs_perslid_oslogin             VARCHAR2(256);

  -- Overig
  v_alg_verdieping_volgnr_num       NUMBER(3);
  v_prs_werkplek_volgnr_num         NUMBER(3);
  v_prs_werkplek_omschrijving       VARCHAR2(256);
  v_prs_werkplek_volgnr             VARCHAR2(256);

  -- PRS_BEDRIJF
  CURSOR c1(p_import_key IN NUMBER)
  IS
    SELECT    *
    FROM      fac_imp_file
    WHERE     1=1
    AND       fac_import_key = p_import_key
    ORDER BY  fac_imp_file_index;

  rec1                        c1%ROWTYPE;

  -- Tot slot Procedures:

  PROCEDURE local_imp_getfield (
     p_parseline        IN OUT   VARCHAR2,
     p_fielddelimitor   IN       VARCHAR2,
     p_field            OUT      VARCHAR2
  )
  AS
     v_firstdelim   NUMBER;
  BEGIN
     v_firstdelim := INSTR (p_parseline, p_fielddelimitor, 1);

     IF v_firstdelim = 0
     THEN
        p_field := SUBSTR(trim(p_parseline), 2, length(p_parseline)-2);
        p_parseline := '';
        RETURN;
     END IF;

     p_field := SUBSTR(TRIM(p_parseline), 2, v_firstdelim - 3); -- Waarom 3? Om de quotes eraf te halen
     p_parseline := SUBSTR2 (p_parseline, v_firstdelim + 1);
     RETURN;
  END;


BEGIN
   DELETE FROM hout_imp_prs;

   COMMIT;

   v_count_error  := 0;
   v_count_tot    := 0;
   v_count_import := 0;
   v_aanduiding   := '';
   OPEN c1(p_import_key);

   IF (c1%ISOPEN)
   THEN
      LOOP
         BEGIN
            v_errormsg := 'Fout FETCH te importeren rij';

            FETCH c1 INTO rec1;
            EXIT WHEN c1%NOTFOUND;
            v_newline   := rec1. fac_imp_file_line;
            v_count_tot := v_count_tot + 1;

            IF (v_count_tot = 1) THEN
              -- Sla header-regel over
              FETCH c1 INTO rec1;
              EXIT WHEN c1%NOTFOUND;
              v_newline   := rec1. fac_imp_file_line;
            END IF;

            v_errormsg  := '';
            v_errorhint := 'Fout opvragen te importeren rij';
            v_aanduiding := '';
            v_ongeldig  := 0;

            IF (1=0)
            THEN
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding||'Ongeldig importbestand',
                                 'Toelichting: ... '
                                );
            ELSE

              -- Lees alle veldwaarden
              -- 01
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_locatie_code
                               );
              -- 02
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_gebouw_code
                               );
              -- 03
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_verdieping_volgnr
                               );
              -- 04
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_ruimte_nr
                               );
              -- 05
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_afdeling_naam
                               );
              -- 06
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_naam
                               );
              -- 07
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_tussenvoegsel
                               );
              -- 08
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_voorletters
                               );
              -- 09
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_voornaam
                               );
              -- 10
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_titel
                               );
              -- 11
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_telefoonnr
                               );
              -- 12
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_mobiel
                               );
              -- 13
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_email
                               );
              -- 14
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_srtperslid_omschrijving
                               );
              -- 15
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_nr
                               );
              -- 16
              local_imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_oslogin
                               );
              --

              v_aanduiding := v_prs_perslid_naam||'|'||v_prs_perslid_voornaam||' - ';

              -- Controleer alle veldwaarde
              v_errorhint := 'Ongeldige locatie code';
              v_alg_locatie_code := trim(v_alg_locatie_code);
              IF LENGTH (v_alg_locatie_code) > 5
              THEN
                v_alg_locatie_code:= SUBSTR(v_alg_locatie_code,1,5);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Locatie-aanduiding is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_alg_locatie_code || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige gebouw code';
              v_alg_gebouw_code := trim(v_alg_gebouw_code);
              IF LENGTH (v_alg_gebouw_code) > 10
              THEN
                v_alg_gebouw_code:= SUBSTR(v_alg_gebouw_code,1,10);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Gebouw-aanduiding is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_alg_gebouw_code || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldig verdieping volgnummer ['||v_alg_verdieping_volgnr||']';
              v_alg_verdieping_volgnr := trim(v_alg_verdieping_volgnr);
              IF (v_alg_verdieping_volgnr IS NULL) THEN
                v_alg_verdieping_volgnr_num := TO_NUMBER(v_alg_verdieping_volgnr);
              ELSE
                BEGIN
                  v_alg_verdieping_volgnr_num:= TO_NUMBER(v_alg_verdieping_volgnr);

                  EXCEPTION
                     WHEN OTHERS
                     THEN
                        v_ongeldig      := 1;
                        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
                                         );
                END;
              END IF;
              --
              v_errorhint := 'Ongeldige ruimte nr';
              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||'Ruimtenr-aanduiding is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_alg_ruimte_nr || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldig werkplek volgnummer';
              v_prs_werkplek_volgnr := trim(v_prs_werkplek_volgnr);
              IF (v_prs_werkplek_volgnr IS NULL) THEN
                v_prs_werkplek_volgnr_num := TO_NUMBER(v_prs_werkplek_volgnr);
              ELSE
                BEGIN
                  v_alg_verdieping_volgnr_num:= TO_NUMBER(v_alg_verdieping_volgnr);

                  EXCEPTION
                     WHEN OTHERS
                     THEN
                        v_ongeldig      := 1;
                        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
                                         );
                END;
              END IF;
              --
              v_errorhint := 'Ongeldige werkplek omschrijving';
              v_prs_werkplek_omschrijving := trim(v_prs_werkplek_omschrijving);
              IF LENGTH (v_prs_werkplek_omschrijving) > 30
              THEN
                v_prs_werkplek_omschrijving:= SUBSTR(v_prs_werkplek_omschrijving,1,30);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Werkplek-aanduiding is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_werkplek_omschrijving || ']'
                                );
              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 is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_afdeling_naam || ']'
                              );
              ELSE
                IF (v_prs_afdeling_naam IS NULL) THEN
                  v_ongeldig      := 1;
                  fac.imp_writelog(p_import_key
                                  ,'E'
                                  ,v_aanduiding||'Afdelingscode onbekend'
                                  ,'Afdelingscode moet worden opgegeven'
                                );
                END IF;
              END IF;
              --
              v_errorhint := 'Ongeldige naam persoon';
              v_prs_perslid_naam := trim(v_prs_perslid_naam);
              IF LENGTH (v_prs_perslid_naam) > 30
              THEN
                v_prs_perslid_naam:= SUBSTR(v_prs_perslid_naam,1,30);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Naam persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_naam || ']'
                              );
              ELSE
                IF (v_prs_perslid_naam IS NULL) THEN
                  v_ongeldig      := 1;
                  fac.imp_writelog(p_import_key
                                  ,'E'
                                  ,v_aanduiding||'Naam persoon onbekend'
                                  ,'Naam persoon moet worden opgegeven'
                                );
                END IF;
              END IF;
              --
              v_errorhint := 'Ongeldige tussenvoegsel persoon';
              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 persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_tussenvoegsel || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige voorletters persoon';
              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 persoon zijn te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_voorletters || ']'
                                );
              END IF;
              --
              v_errorhint := 'Voornaam persoon';
              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 persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_voornaam || ']'
                              );
              ELSE
                IF (v_prs_perslid_voornaam IS NULL) THEN
                  v_ongeldig      := 1;
                  fac.imp_writelog(p_import_key
                                  ,'E'
                                  ,v_aanduiding||'Voornaam persoon onbekend'
                                  ,'Voornaam persoon moet worden opgegeven'
                                );
                END IF;
              END IF;
              --
              v_errorhint := 'Ongeldige titel persoon';
              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 persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_titel || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige titel persoon';
              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 persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_titel || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige telefoonnr. persoon';
              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||'Telefoonnr. persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_telefoonnr || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige mobielnr. persoon';
              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||'Mobielnr. persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_mobiel || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige email persoon';
              v_prs_perslid_email := trim(v_prs_perslid_email);
              IF LENGTH (v_prs_perslid_email) > 200
              THEN
                v_prs_perslid_email:= SUBSTR(v_prs_perslid_email,1,200);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Email persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_email || ']'
                                );
              ELSE -- HOUT#39072: Per 2017 matching op e-mail, dus verplicht veld!
                IF (v_prs_perslid_email IS NULL) THEN
                  v_ongeldig      := 1;
                  fac.imp_writelog(p_import_key
                                  ,'E'
                                  ,v_aanduiding||'Email persoon onbekend'
                                  ,'Email persoon moet worden opgegeven'
                                );
                END IF;
              END IF;
              --
              v_errorhint := 'Ongeldige functie persoon';
              v_prs_srtperslid_omschrijving := trim(v_prs_srtperslid_omschrijving);
              IF LENGTH (v_prs_srtperslid_omschrijving) > 30
              THEN
                v_prs_srtperslid_omschrijving:= SUBSTR(v_prs_srtperslid_omschrijving,1,30);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Functie-aanduiding persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_srtperslid_omschrijving || ']'
                              );
              ELSE
                IF (v_prs_srtperslid_omschrijving IS NULL) THEN
                  v_ongeldig      := 1;
                  fac.imp_writelog(p_import_key
                                  ,'E'
                                  ,v_aanduiding||'Functie persoon onbekend'
                                  ,'Functie persoon moet worden opgegeven'
                                );
                END IF;
              END IF;
              --
              v_errorhint := 'Ongeldige persoonnr.';
              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||'Persoonnr. persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_nr || ']'
                                );
              END IF;
              --
              v_errorhint := 'Ongeldige loginnaam';
              v_prs_perslid_oslogin := trim(v_prs_perslid_oslogin);
              IF LENGTH (v_prs_perslid_oslogin) > 30
              THEN
                v_prs_perslid_oslogin := SUBSTR(v_prs_perslid_oslogin,1,30);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Loginnaam persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot [' || v_prs_perslid_oslogin || ']'
                                );
              END IF;
              --

              -- Insert geformatteerde import record
              IF v_ongeldig = 0
              THEN
                v_errormsg  := 'Fout bij toevoegen te importeren bedrijf/afdeling ['||v_prs_afdeling_naam||']';

                INSERT INTO HOUT_IMP_PRS (
                   alg_locatie_code
                  ,alg_gebouw_code
                  ,alg_verdieping_volgnr
                  ,alg_ruimte_nr
                  ,prs_afdeling_naam
                  ,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_srtperslid_omschrijving
                  ,prs_perslid_nr
                  ,prs_perslid_oslogin
                  ) VALUES (
                   v_alg_locatie_code
                  ,v_alg_gebouw_code
                  ,v_alg_verdieping_volgnr
                  ,v_alg_ruimte_nr
                  ,v_prs_afdeling_naam
                  ,v_prs_perslid_naam
                  ,v_prs_perslid_tussenvoegsel
                  ,v_prs_perslid_voorletters
                  ,v_prs_perslid_voornaam
                  ,v_prs_perslid_titel
                  ,v_prs_perslid_telefoonnr
                  ,v_prs_perslid_mobiel
                  ,v_prs_perslid_email
                  ,v_prs_srtperslid_omschrijving
                  ,v_prs_perslid_nr
                  ,v_prs_perslid_oslogin
                  );

                commit;

                v_count_import := v_count_import + 1;

              END IF;

            END IF;

         END;

      END LOOP;

   END IF;



   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),
                      ''
                    );


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

END hout_import_prs;
/

/* Formatted on 13-9-2012 17:38:08 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE hout_update_prs (p_import_key IN NUMBER)
IS
   -- LET OP: moet idem zijn als declaratie bij HOUT_IMPORT_PRS
   c_persoon_inactief       VARCHAR (30) := 'INACTIEF: ';
   -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
   c_max_delta_percentage   NUMBER (10) := 20;
   -- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
   c_locatie_code           VARCHAR2 (10) := 'RTD';
   c_gebouw_code            VARCHAR2 (10) := 'WT';
   c_verdieping_volgnr      NUMBER (10) := 99;
   c_ruimte_nr              VARCHAR2 (10) := '99.00';
   -- Groep waar personen in geplaatst worden (indien nog geen groep)
   c_groep_upper            VARCHAR2 (30) := '_DEFAULT';
   c_profiel_omschrijving   VARCHAR (30) := 'DEFAULT';
   v_errormsg               VARCHAR2 (1000);
   v_errorhint              VARCHAR2 (1000);
   oracle_err_num           NUMBER;
   oracle_err_mes           VARCHAR2 (200);
   v_aanduiding             VARCHAR2 (300);
   v_count_tot_new          NUMBER (10);
   v_count_tot_perslid      NUMBER (10);
   v_count_error            NUMBER (10);
   v_count_tot              NUMBER (10);
   v_count                  NUMBER (10);
   --
   v_srtperslid_key         NUMBER (10);
   v_afdeling_key           NUMBER (10);
   v_perslid_key            NUMBER (10);
   v_secretaresse           NUMBER (10);
   v_locatie_key            NUMBER (10);
   v_gebouw_key             NUMBER (10);
   v_verdieping_key         NUMBER (10);
   v_ruimte_key             NUMBER (10);
   v_groep_key              NUMBER (10);
   v_profiel_key            NUMBER (10);

   -- Let op! Personen die niet meer in dienst zijn -> niet in hout_imp_prs!
   -- Dubbele e-mails? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
   CURSOR cdelprs
   IS
        SELECT p.prs_perslid_key, p.prs_perslid_email, p.prs_perslid_naam, p.prs_perslid_voornaam
          FROM prs_v_aanwezigperslid p
         WHERE p.prs_perslid_nr IS NOT NULL               -- Import-doelgroep!
               AND p.prs_perslid_email IS NOT NULL
               AND NOT EXISTS
                     (SELECT 1
                        FROM hout_imp_prs ip              -- Import-doelgroep!
                       WHERE ip.prs_perslid_nr IS NOT NULL
                         AND UPPER (ip.prs_perslid_email) = UPPER (p.prs_perslid_email))
      ORDER BY 1;

   recdelprs                cdelprs%ROWTYPE;

   -- Let op! Personen die niet meer in dienst zijn -> niet in hout_imp_prs!
   CURSOR csperslid
   IS
        SELECT MIN (prs_perslid_email) prs_perslid_email,
               MIN (prs_perslid_naam) prs_perslid_naam,
               MIN (prs_perslid_voornaam) prs_perslid_voornaam,
               MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
          FROM hout_imp_prs
         WHERE prs_perslid_nr IS NOT NULL                 -- Import-doelgroep!
               AND prs_perslid_email IS NOT NULL
      GROUP BY UPPER (prs_srtperslid_omschrijving);

   recsperslid              csperslid%ROWTYPE;

   -- Let op! Personen die niet meer in dienst zijn -> niet in hout_imp_prs!
   -- Dubbele e-mails? Dan worden gewoon 2 (of meer) personen toegevoegd!
   CURSOR cperslid
   IS
      SELECT *
        FROM hout_imp_prs
       WHERE prs_perslid_nr IS NOT NULL                   -- Import-doelgroep!
             AND prs_perslid_email IS NOT NULL;

   recperslid               cperslid%ROWTYPE;

   -- Let op! Personen die niet meer in dienst zijn -> niet in hout_imp_prs!
   -- Alle personen met e-mail (ie. de import-doelgroep) zonder werkplek
   -- krijgen "fictieve" werkplek in locatie/gebouw volgens EMIS of anders
   -- Rotterdam/Weena!
   -- Dubbele e-mails? Dan krijgt iemand mogelijk de verkeerde plaats!
   CURSOR cwp
   IS
      SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code
        FROM hout_imp_prs ip, prs_v_aanwezigperslid p
       WHERE ip.prs_perslid_nr IS NOT NULL                -- Import-doelgroep!
             AND UPPER (ip.prs_perslid_email) = UPPER (p.prs_perslid_email)
             AND p.prs_perslid_nr IS NOT NULL             -- Import-doelgroep!
             AND NOT EXISTS
                   (SELECT 1
                      FROM prs_perslidwerkplek pw
                     WHERE pw.prs_perslid_key = p.prs_perslid_key);

   -- Alle actieve personen met e-mail (ie. de import-doelgroep) en "fictieve"
   -- werkplek (ie. ruimtenummer 99.00) worden gelogd.
   CURSOR cnowp
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_email, p.prs_perslid_naam, p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL                 -- Import-doelgroep!
             AND p.prs_perslid_email IS NOT NULL
             AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
             AND EXISTS
                   (SELECT 1
                      FROM prs_perslidwerkplek pw, prs_werkplek w, alg_ruimte r
                     WHERE pw.prs_perslid_key = p.prs_perslid_key
                           AND pw.prs_werkplek_key = w.prs_werkplek_key
                           AND w.prs_alg_ruimte_key = r.alg_ruimte_key
                           AND r.alg_ruimte_upper_nr = c_ruimte_nr);
/*
   -- Alle personen met e-mail (ie. de import-doelgroep) niet in een groep
   -- komen in _DEFAULT.
   CURSOR cnogroup
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_email, p.prs_perslid_naam, p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL                 -- Import-doelgroep!
             AND p.prs_perslid_email IS NOT NULL
             AND NOT EXISTS (SELECT 1
                               FROM fac_gebruikersgroep g
                              WHERE g.prs_perslid_key = p.prs_perslid_key);
*/
BEGIN
   SELECT COUNT ( * )
     INTO v_count
     FROM imp_log
    WHERE fac_import_key = p_import_key;

SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
    INTO v_count_tot_perslid
     FROM prs_v_aanwezigperslid
    WHERE prs_perslid_oslogin IS NOT NULL;

SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
  INTO v_count_tot_new
  FROM prs_v_aanwezigperslid p, hout_imp_prs ip
 WHERE p.prs_perslid_oslogin IS NOT NULL
       AND UPPER (p.prs_perslid_oslogin) = UPPER (ip.prs_perslid_oslogin);


   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;

   IF ( (v_count > 0)
       OR (TRUNC ( (v_count_tot_new / v_count_tot_perslid) * 100) >=
              (100 - c_max_delta_percentage))
       OR (TRUNC ( (v_count_tot_new / v_count_tot_perslid) * 100) <=
              (100 + c_max_delta_percentage)))
   THEN
      -- Geldig importbestand wat betreft aantal inserts
      OPEN cdelprs;

      IF cdelprs%ISOPEN
      THEN
         LOOP
            BEGIN
               FETCH cdelprs INTO   recdelprs;

               EXIT WHEN cdelprs%NOTFOUND;

               v_errorhint := 'Fout bij bepalen verplichtingen';

               -- Heeft de persoon actuele/toekomstige verplichtigen?
               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   prs_v_verplichting_keys r
                WHERE   r.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 e-mail ['
                     || recdelprs.prs_perslid_email
                     || '] en naam ['
                     || recdelprs.prs_perslid_naam
                     || ', '
                     || recdelprs.prs_perslid_voornaam
                     || '] is verwijderd.',
                     'Persoon is verwijderd.'
                  );
                  COMMIT;
               ELSE
                  -- Staat de persoon al op 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,
                              prs_perslid_ingids = NULL
                      WHERE   prs_perslid_key = recdelprs.prs_perslid_key;

                     fac.imp_writelog (
                        p_import_key,
                        'I',
                           'Persoon met e-mail ['
                        || recdelprs.prs_perslid_email
                        || '] en naam ['
                        || recdelprs.prs_perslid_naam
                        || ', '
                        || recdelprs.prs_perslid_voornaam
                        || '] is INACTIEF gemaakt.',
                        'Persoon is (voorlopig) 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,
                              prs_perslid_ingids = NULL
                      WHERE   prs_perslid_naam LIKE c_persoon_inactief || '%'
                              AND (prs_perslid_oslogin IS NOT NULL
                                   OR prs_perslid_ingids IS NOT NULL);

                     fac.imp_writelog (
                        p_import_key,
                        'I',
                           'Persoon met e-mail ['
                        || recdelprs.prs_perslid_email
                        || '] en naam ['
                        || recdelprs.prs_perslid_naam
                        || ', '
                        || recdelprs.prs_perslid_voornaam
                        || '] is INACTIEF',
                        'Persoon is INACTIEF'
                     );
                  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 :=
                        ' (ORACLE error number = <'
                     || oracle_err_num
                     || '> ORACLE error message = <'
                     || oracle_err_mes
                     || '>)';
                  fac.imp_writelog (p_import_key,
                                    'E',
                                    v_errormsg,
                                    v_errorhint);
                  COMMIT;
            END;
         END LOOP;

         COMMIT;

         CLOSE cdelprs;
      END IF;

      -- Dezelfde persoon met dezelfde e-mail kan vaker voorkomen (1x actief + 1x inactief).
      -- prs_perslid_email hoeft niet uniek te zijn, prs_perslid_oslogin wel; vandaar onderstaande update.
      UPDATE   prs_perslid
         SET   prs_perslid_oslogin = NULL, prs_perslid_ingids = NULL
       WHERE   prs_perslid_naam LIKE c_persoon_inactief || '%'
               AND (prs_perslid_oslogin IS NOT NULL OR prs_perslid_ingids IS NOT NULL);

      COMMIT;

      OPEN csperslid;

      v_count_tot := 0;
      v_count_error := 0;

      IF csperslid%ISOPEN
      THEN
         LOOP
            BEGIN
               v_aanduiding := '';
               v_errormsg := '';
               v_errorhint := '';

               FETCH csperslid INTO   recsperslid;

               EXIT WHEN csperslid%NOTFOUND;
               v_count_tot := v_count_tot + 1;
               v_aanduiding :=
                     recsperslid.prs_perslid_naam
                  || '|'
                  || recsperslid.prs_perslid_voornaam
                  || '|'
                  || recsperslid.prs_srtperslid_omschrijving
                  || ' - ';
               v_errorhint := 'Fout bij bepalen functie';

               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   prs_srtperslid
                WHERE   UPPER (prs_srtperslid_omschrijving) =
                           UPPER (recsperslid.prs_srtperslid_omschrijving)
                        AND prs_srtperslid_verwijder IS NULL;

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

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

                  COMMIT;
               END IF;

               COMMIT;
            EXCEPTION
               WHEN OTHERS
               THEN
                  v_count_error := v_count_error + 1;
                  oracle_err_num := SQLCODE;
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg :=
                        ' (ORACLE error number = <'
                     || oracle_err_num
                     || '> ORACLE error message = <'
                     || 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',
            'Personeelsfunctie: verwerkte regels zonder foutmelding: '
            || TO_CHAR (v_count_tot - v_count_error),
            ''
         );
         fac.imp_writelog (
            p_import_key,
            'S',
            'Personeelsfunctie: verwerkte regels met foutmelding: '
            || TO_CHAR (v_count_error),
            ''
         );
         COMMIT;

         CLOSE csperslid;
      END IF;

      OPEN cperslid;

      v_count_tot := 0;
      v_count_error := 0;

      IF cperslid%ISOPEN
      THEN
         LOOP
            BEGIN
               v_aanduiding := '';
               v_errormsg := '';
               v_errorhint := '';

               FETCH cperslid INTO   recperslid;

               EXIT WHEN cperslid%NOTFOUND;
               v_count_tot := v_count_tot + 1;
               v_aanduiding :=
                     recperslid.prs_perslid_email
                  || '|'
                  || recperslid.prs_perslid_naam
                  || '|'
                  || recperslid.prs_perslid_voornaam
                  || ' - ';
               v_errormsg := '';
               v_errorhint := 'Fout bij bepalen functie';

               SELECT   prs_srtperslid_key
                 INTO   v_srtperslid_key
                 FROM   prs_srtperslid
                WHERE   prs_srtperslid_verwijder IS NULL
                        AND UPPER (prs_srtperslid_omschrijving) =
                              UPPER (recperslid.prs_srtperslid_omschrijving);

               v_errorhint :=
                     'Afdeling niet gevonden ['
                  || recperslid.prs_afdeling_naam
                  || ']';

               SELECT   prs_afdeling_key
                 INTO   v_afdeling_key
                 FROM   prs_afdeling
                WHERE   UPPER (prs_afdeling_naam) =
                           UPPER (recperslid.prs_afdeling_naam)
                        AND prs_afdeling_verwijder IS NULL;

               v_errorhint := 'Kijken of de persoon al bestaat';

               SELECT   COUNT ( * ), MAX (prs_perslid_key)
                 INTO   v_count, v_perslid_key
                 FROM   prs_perslid
                WHERE   prs_perslid_verwijder IS NULL
                        AND UPPER (prs_perslid_email) =
                              UPPER (recperslid.prs_perslid_email);

               IF (v_count > 1)
               THEN
                  fac.imp_writelog (
                     p_import_key,
                     'E',
                     v_aanduiding || ' kan persoon niet 1-duidig bepalen',
                     v_errorhint
                  );
                  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_naam,
                                              prs_perslid_voorletters,
                                              prs_perslid_tussenvoegsel,
                                              prs_perslid_voornaam,
                                              prs_perslid_telefoonnr,
                                              prs_perslid_mobiel,
                                              prs_perslid_email,
                                              prs_perslid_nr,
                                              prs_perslid_titel,
                                              prs_perslid_oslogin,
                                              fac_profiel_key)
                        VALUES   ('PRS',
                                  v_srtperslid_key,
                                  v_afdeling_key,
                                  recperslid.prs_perslid_naam,
                                  recperslid.prs_perslid_voorletters,
                                  recperslid.prs_perslid_tussenvoegsel,
                                  recperslid.prs_perslid_voornaam,
                                  recperslid.prs_perslid_telefoonnr,
                                  recperslid.prs_perslid_mobiel,
                                  recperslid.prs_perslid_email,
                                  recperslid.prs_perslid_nr,
                                  recperslid.prs_perslid_titel,
                                  recperslid.prs_perslid_oslogin,
                                  v_profiel_key)
                     RETURNING   prs_perslid_key      INTO   v_perslid_key;
                  ELSE
                     -- HOUT#24024: Secretaresse en huidige afdeling anders dan afdeling
                     --             volgens import, dan mandaat schonen (zo nodig wordt
                     --             mandaat voor nieuwe afdeling hierna weer toegekend).
                     v_errorhint := 'Fout bij bepalen WAS-secretaresse';

                     SELECT   COUNT ( * )
                       INTO   v_secretaresse
                       FROM   prs_perslid p
                      WHERE   p.prs_perslid_key = v_perslid_key
                              AND p.prs_afdeling_key != v_afdeling_key
                              AND EXISTS
                                    (SELECT   1
                                       FROM   prs_afdeling a,
                                              prs_kostenplaats k,
                                              fac_usrdata ud
                                      WHERE   a.prs_afdeling_key =
                                                 p.prs_afdeling_key
                                              AND a.prs_kostenplaats_key =
                                                    k.prs_kostenplaats_key
                                              AND k.prs_kostenplaats_verwijder IS NULL
                                              AND k.prs_kostenplaats_upper =
                                                    ud.fac_usrdata_upper
                                              AND ud.fac_usrtab_key = 601 -- Kostenpl.mandaat
                                              AND ud.fac_usrdata_verwijder IS NULL);

                     IF (v_secretaresse > 0)
                     THEN
                        v_errorhint := 'Fout bij schonen mandaat';

                        DELETE FROM   prs_perslidkostenplaats
                              WHERE   prs_perslid_key = v_perslid_key;

                        fac.imp_writelog (
                           p_import_key,
                           'I',
                           v_aanduiding || ' mandaat geschoond',
                           'WAS secretaresse'
                        );
                     END IF;

                     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_voorletters =
                                 recperslid.prs_perslid_voorletters,
                              prs_perslid_tussenvoegsel =
                                 recperslid.prs_perslid_tussenvoegsel,
                              prs_perslid_voornaam =
                                 recperslid.prs_perslid_voornaam,
                              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_titel = recperslid.prs_perslid_titel,
                              prs_perslid_oslogin =
                                 recperslid.prs_perslid_oslogin,
                              fac_profiel_key =
                                 COALESCE (fac_profiel_key, v_profiel_key)
                      WHERE   prs_perslid_key = v_perslid_key;
                  END IF;

                  COMMIT;

                  -- HOUT#24024: Indien nog nergens voor gemandateerd, dan secretaresses
                  --             mandateren voor alles!
                  v_errorhint := 'Fout bij bepalen WORDT-secretaresse';

                  SELECT   COUNT ( * )
                    INTO   v_secretaresse
                    FROM   prs_afdeling a, prs_kostenplaats k, fac_usrdata ud
                   WHERE   a.prs_afdeling_key = v_afdeling_key
                           AND a.prs_kostenplaats_key =
                                 k.prs_kostenplaats_key
                           AND k.prs_kostenplaats_verwijder IS NULL
                           AND k.prs_kostenplaats_upper =
                                 ud.fac_usrdata_upper
                           AND ud.fac_usrtab_key = 601     -- Kostenpl.mandaat
                           AND ud.fac_usrdata_verwijder IS NULL
                           AND NOT EXISTS
                                 (SELECT   1
                                    FROM   prs_perslidkostenplaats pk
                                   WHERE   pk.prs_perslid_key = v_perslid_key);

                  IF (v_secretaresse > 0)
                  THEN
                     v_errorhint := 'Fout bij toekennen mandaat';

                     INSERT INTO prs_perslidkostenplaats pk (
                                                                prs_perslid_key,
                                                                prs_kostenplaats_key,
                                                                prs_perslidkostenplaats_boeken,
                                                                prs_perslidkostenplaats_inzage
                                )
                       VALUES   (v_perslid_key,
                                 NULL,
                                 1,
                                 1);

                     fac.imp_writelog (p_import_key,
                                       'I',
                                       v_aanduiding || ' mandaat toegekend',
                                       'WORDT secretaresse');

                     COMMIT;
                  END IF;
               END IF;
            EXCEPTION
               WHEN OTHERS
               THEN
                  v_count_error := v_count_error + 1;
                  oracle_err_num := SQLCODE;
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  v_errormsg :=
                        ' (ORACLE error number = <'
                     || oracle_err_num
                     || '> ORACLE error message = <'
                     || 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),
            ''
         );

         CLOSE cperslid;
      END IF;

      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_email
               || '|'
               || recwp.prs_perslid_naam
               || '|'
               || recwp.prs_perslid_voornaam
               || '|'
               || recwp.alg_locatie_code
               || '|'
               || recwp.alg_gebouw_code
               || ' - ';
            v_errorhint := 'Fout bij bepalen persoon';

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

            v_locatie_key := NULL;
            v_gebouw_key := NULL;
            v_verdieping_key := NULL;
            v_ruimte_key := NULL;
            v_errorhint := 'Fout bij bepalen EMIS-locatie';

            SELECT   COUNT ( * )
              INTO   v_count
              FROM   alg_v_aanweziglocatie
             WHERE   alg_locatie_code = recwp.alg_locatie_code;

            IF v_count = 1
            THEN
               SELECT   alg_locatie_key
                 INTO   v_locatie_key
                 FROM   alg_v_aanweziglocatie
                WHERE   alg_locatie_code = recwp.alg_locatie_code;
            ELSE                         -- Locatie bestaat niet (of >1 keer)!
               fac.imp_writelog (p_import_key,
                                 'I',
                                 v_aanduiding || v_errorhint,
                                 'Kan EMIS-locatie niet (1-duidig) bepalen!');
               COMMIT;
            END IF;

            v_errorhint := 'Fout bij bepalen EMIS-gebouw';

            IF v_locatie_key IS NOT NULL
            THEN
               SELECT   COUNT ( * )
                 INTO   v_count
                 FROM   alg_v_aanweziggebouw
                WHERE   alg_locatie_key = v_locatie_key
                        AND alg_gebouw_upper = UPPER (recwp.alg_gebouw_code);

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

            v_errorhint :=
                  'Fout bij bepalen default locatie/gebouw ('
               || c_locatie_code
               || '-'
               || c_gebouw_code
               || ')';

            IF v_gebouw_key IS NULL
            THEN
               SELECT   alg_gebouw_key
                 INTO   v_gebouw_key
                 FROM   alg_v_aanweziglocatie l, alg_v_aanweziggebouw g
                WHERE       l.alg_locatie_code = c_locatie_code
                        AND l.alg_locatie_key = g.alg_locatie_key
                        AND g.alg_gebouw_upper = UPPER (c_gebouw_code);
            END IF;

            v_errorhint :=
                  'Fout bij bepalen "fictieve" verdieping ('
               || TO_CHAR (c_verdieping_volgnr)
               || ')';

            SELECT   alg_verdieping_key
              INTO   v_verdieping_key
              FROM   alg_v_aanwezigverdieping v
             WHERE   v.alg_gebouw_key = v_gebouw_key
                     AND v.alg_verdieping_volgnr = c_verdieping_volgnr;

            v_errorhint :=
               'Fout bij bepalen "fictieve" ruimte (' || c_ruimte_nr || ')';

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

            -- Persoon (zonder wp!) krijgt wp op de hierboven bepaalde ruimte.
            v_errorhint := 'Fout bij toewijzen werkplek';
            PRS.movetoruimte (v_perslid_key, v_ruimte_key, NULL);
            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' (ORACLE error number = <'
                  || oracle_err_num
                  || '> ORACLE error message = <'
                  || 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 e-mail ['
               || recnowp.prs_perslid_email
               || '] en naam ['
               || recnowp.prs_perslid_naam
               || ', '
               || recnowp.prs_perslid_voornaam
               || '] heeft een "fictieve" werkplek',
               'Fictieve werkplek'
            );
            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' (ORACLE error number = <'
                  || oracle_err_num
                  || '> ORACLE error message = <'
                  || 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_email
               || '|'
               || 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 :=
                     ' (ORACLE error number = <'
                  || oracle_err_num
                  || '> ORACLE error message = <'
                  || 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
      fac.imp_writelog (
         p_import_key,
         'E',
         'Het verschil tussen het aantal actieve personen met personeelsnummer en de te importeren/wijzigen aantallen is te groot, zie specificatie.',
            '* Max. aan wijzigingen toegestaan = ['
         || TO_CHAR (c_max_delta_percentage)
         || '%] <br>* '
         || 'Aantal personen importbestand = ['
         || TO_CHAR (v_count_tot_new)
         || '] <br>* '
         || 'Aantal personen Facilitor = ['
         || TO_CHAR (v_count_tot_perslid)
         || ']'
      );
      COMMIT;
   END IF;                  -- Geldig importbestand wat betreft aantal inserts

   COMMIT;
END hout_update_prs;
/

/* Formatted on 2008/04/25 15:20 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW hout_v_rap_res_overzicht (fclt_f_locatie,
                                                 hide_f_sort_datum_tijd,
                                                 hide_f_sort_ruimte,
                                                 hide_f_sort_resnr,
                                                 hide_f_sort_categorie,
                                                 fclt_f_res_datum,
                                                 res_ruimtenummer,
                                                 van,
                                                 tot,
                                                 naam_gastheer,
                                                 aant,
                                                 voorzieningen,
                                                 omschrijving,
                                                 naam_aanvrager,
                                                 res_num,
                                                 opmerkingen,
                                                 fclt_3d_locatie_key
                                                )
AS
   SELECT l.alg_locatie_code locatie,
          TO_CHAR (res_geg.res_reservering_van,
                   'YYYY-MM-DD HH24:MI'
                  ) sort_datum_tijd,
          COALESCE (opstelalg.res_ruimte_nr,
                    ruimte_geg.alg_ruimte_aanduiding
                   ) sort_ruimte,
             rrr.res_reservering_key
          || '/'
          || rrr.res_rsv_ruimte_volgnr sort_resnr,
          res_geg.res_type sort_categorie,
          TO_CHAR (res_geg.res_reservering_van, 'DD-MM-YYYY') datum,
          (CASE
              WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                 THEN ''
              ELSE COALESCE (opstelalg.res_ruimte_nr,
                             ruimte_geg.alg_ruimte_aanduiding
                            )
           END
          ) ruimte,
          TO_CHAR (res_geg.res_reservering_van, 'HH24:MI') van,
          TO_CHAR (res_geg.res_reservering_tot, 'HH24:MI') tot, gastheer,
          (CASE
              WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                 THEN ''
              ELSE TO_CHAR (rrr.res_rsv_ruimte_bezoekers)
           END
          ) aantal,
          (CASE
              WHEN res_geg.aantal IS NOT NULL
                 THEN    TO_CHAR (res_geg.aantal)
                      || ' * '
                      || res_geg.res_voorziening
              ELSE res_geg.res_voorziening
           END
          ) voorzieningen,
          (CASE
              WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                 THEN ''
              ELSE res_rsv_ruimte_omschrijving
           END
          ) omschrijving,
          aanvrager,
          (CASE
              WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                 THEN ''
              ELSE rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
           END
          ) resnr,
          (CASE
              WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
                 THEN ''
              ELSE res_rsv_ruimte_opmerking
           END
          ) opmerking,
          l.alg_locatie_key
     FROM (SELECT '1R' AS res_type, rrr.res_rsv_ruimte_key,
                  rro.res_ruimte_key, rrr.res_rsv_ruimte_key AS res_item_key,
                  rrr.res_rsv_ruimte_van AS res_reservering_van,
                  rrr.res_rsv_ruimte_tot AS res_reservering_tot,
                  TO_NUMBER (NULL) AS aantal,
                  ro.res_opstelling_omschrijving AS res_voorziening,
                  rr.res_discipline_key AS res_ins_discipline_key,
                  rrr.res_status_bo_key, TO_NUMBER (NULL) AS res_artikel_key,
                  rrr.res_rsv_ruimte_prijs AS prijs,
                  TO_NUMBER (NULL) AS stuks_prijs, 1 AS rsv_ruimte_aantal,
                  NULL AS artikelnummer, '' AS artikel_groep,
                  (SELECT    prs_perslid_naam
                          || DECODE (p.prs_perslid_voorletters,
                                     NULL, '',
                                     ', ' || p.prs_perslid_voorletters
                                    )
                          || DECODE (p.prs_perslid_tussenvoegsel,
                                     NULL, '',
                                     ' ' || p.prs_perslid_tussenvoegsel
                                    )
                          || DECODE (p.prs_perslid_voornaam,
                                     NULL, '',
                                     ' (' || p.prs_perslid_voornaam || ')'
                                    )
                     FROM prs_perslid p
                    WHERE p.prs_perslid_key = rrr.res_rsv_ruimte_host_key)
                                                                     gastheer,
                  (SELECT    prs_perslid_naam
                          || DECODE (p.prs_perslid_voorletters,
                                     NULL, '',
                                     ', ' || p.prs_perslid_voorletters
                                    )
                          || DECODE (p.prs_perslid_tussenvoegsel,
                                     NULL, '',
                                     ' ' || p.prs_perslid_tussenvoegsel
                                    )
                          || DECODE (p.prs_perslid_voornaam,
                                     NULL, '',
                                     ' (' || p.prs_perslid_voornaam || ')'
                                    )
                     FROM prs_perslid p
                    WHERE p.prs_perslid_key = rrr.res_rsv_ruimte_host_key)
                                                                    aanvrager
             FROM res_v_aanwezigrsv_ruimte rrr,
                  res_ruimte_opstelling rro,
                  res_ruimte rr,
                  res_opstelling ro
            WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
              AND rro.res_ruimte_key = rr.res_ruimte_key
              AND rro.res_opstelling_key = ro.res_opstelling_key
           UNION ALL
           SELECT '2V' AS res_type, rrd.res_rsv_ruimte_key,
                  (SELECT rro.res_ruimte_key
                     FROM res_ruimte_opstelling rro
                    WHERE rrr.res_ruimte_opstel_key =
                                  rro.res_ruimte_opstel_key)
                                                            AS res_ruimte_key,
                  rrd.res_rsv_deel_key AS res_item_key,
                  rrd.res_rsv_deel_van AS res_reservering_van,
                  rrd.res_rsv_deel_tot AS res_reservering_tot,
                  TO_NUMBER (NULL) AS aantal,
                     ID.ins_deel_omschrijving
                  || ' ('
                  || COALESCE (rd.res_deel_eenheid, '')
                  || ')' AS res_voorziening,
                  rd.res_discipline_key AS res_ins_discipline_key,
                  rrd.res_status_bo_key, TO_NUMBER (NULL) AS res_artikel_key,
                  TO_NUMBER (NULL) AS prijs, rd.res_deel_prijs AS stuks_prijs,
                  TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                  NULL AS artikelnummer, '' AS artikel_groep,
                  '' gastheer,
                  '' aanvrager
             FROM res_v_aanwezigrsv_deel rrd,
                  res_v_aanwezigrsv_ruimte rrr,
                  res_deel rd,
                  ins_deel ID
            WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
              AND rrd.res_deel_key = rd.res_deel_key
              AND rd.res_ins_deel_key = ID.ins_deel_key
           UNION ALL
           SELECT '3C' AS res_type, rra.res_rsv_ruimte_key,
                  (SELECT rro.res_ruimte_key
                     FROM res_ruimte_opstelling rro
                    WHERE rrr.res_ruimte_opstel_key =
                                  rro.res_ruimte_opstel_key)
                                                            AS res_ruimte_key,
                  res_rsv_artikel_key AS res_item_key,
                  rra.res_rsv_artikel_levering AS res_reservering_van,
                  res_rsv_ruimte_tot AS res_reservering_tot,
                  rra.res_rsv_artikel_aantal AS aantal,
                     LTRIM (ra.res_artikel_omschrijving)
                  || ' ('
                  || COALESCE (ra.res_artikel_eenheid, '')
                  || ')' AS res_voorziening,
                  ra.res_discipline_key AS res_ins_discipline_key,
                  rra.res_status_bo_key,
                  ra.res_artikel_key AS res_artikel_key,
                  rra.res_rsv_artikel_prijs AS prijs,
                    ra.res_artikel_prijs
                  / rra.res_rsv_artikel_aantal AS stuks_prijs,
                  TO_NUMBER (NULL) AS rsv_ruimte_aantal,
                  ra.res_artikel_nr AS artikelnummer,
                  ra.res_artikel_groep AS artikel_groep,
                  '' gastheer,
                  '' aanvrager
             FROM res_v_aanwezigrsv_artikel rra,
                  res_v_aanwezigrsv_ruimte rrr,
                  res_artikel ra
            WHERE rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
              AND rra.res_artikel_key = ra.res_artikel_key) res_geg,
          res_rsv_ruimte rrr,
          alg_v_ruimte_gegevens ruimte_geg,
          (SELECT   res_ruimte_opstel_key, res_ruimte_nr,
                    MIN (alg_ruimte_key) alg_ruimte_key
               FROM res_ruimte_opstelling rro,
                    res_alg_ruimte rar,
                    res_ruimte rr
              WHERE rro.res_ruimte_key = rar.res_ruimte_key
                AND rr.res_ruimte_key = rar.res_ruimte_key
                AND rar.res_alg_ruimte_verwijder IS NULL
           GROUP BY res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
          alg_locatie l
    WHERE res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
      AND rrr.res_ruimte_opstel_key = opstelalg.res_ruimte_opstel_key(+)
      AND ruimte_geg.alg_ruimte_key =
                       COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)
      AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
      AND res_geg.res_status_bo_key < 5
/

/* Formatted on 2008/12/05 16:12 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW hout_v_res_bezet_raw (
   res_ruimte_naam,
   alg_ruimte_nr,
   van,
   tot,
   t0800,
   t0830,
   t0900,
   t0930,
   t1000,
   t1030,
   t1100,
   t1130,
   t1200,
   t1230,
   t1300,
   t1330,
   t1400,
   t1430,
   t1500,
   t1530,
   t1600,
   t1630,
   t1700,
   t1730,
   aant_deelnemers,
   activiteit,
   kostenplaats,
   max_personen
   )
AS
   SELECT res.res_ruimte_nr,
          res.alg_ruimte_nr,
          res.res_rsv_ruimte_van,
          res.res_rsv_ruimte_tot,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 8 AND res.tot >= 8.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 8.25 AND res.tot >= 8.5), 0
            )
             t0800,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 8.5 AND res.tot >= 8.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 8.75 AND res.tot >= 9), 0
            )
             t0830,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 9 AND res.tot >= 9.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 9.25 AND res.tot >= 9.5), 0
            )
             t0900,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 9.5 AND res.tot >= 9.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 9.75 AND res.tot >= 10), 0
            )
             t0930,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 10 AND res.tot >= 10.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 10.25 AND res.tot >= 10.5), 0
            )
             t1000,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 10.5 AND res.tot >= 10.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 10.75 AND res.tot >= 11), 0
            )
             t1030,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 11 AND res.tot >= 11.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 11.25 AND res.tot >= 11.5), 0
            )
             t1100,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 11.5 AND res.tot >= 11.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 11.75 AND res.tot >= 12), 0
            )
             t1130,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 12 AND res.tot >= 12.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 12.25 AND res.tot >= 12.5), 0
            )
             t1200,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 12.5 AND res.tot >= 12.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 12.75 AND res.tot >= 13), 0
            )
             t1230,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 13 AND res.tot >= 13.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 13.25 AND res.tot >= 13.5), 0
            )
             t1300,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 13.5 AND res.tot >= 13.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 13.75 AND res.tot >= 14), 0
            )
             t1330,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 14 AND res.tot >= 14.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 14.25 AND res.tot >= 14.5), 0
            )
             t1400,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 14.5 AND res.tot >= 14.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 14.75 AND res.tot >= 15), 0
            )
             t1430,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 15 AND res.tot >= 15.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 15.25 AND res.tot >= 15.5), 0
            )
             t1500,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 15.5 AND res.tot >= 15.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 15.75 AND res.tot >= 16), 0
            )
             t1530,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 16 AND res.tot >= 16.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 16.25 AND res.tot >= 16.5), 0
            )
             t1600,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 16.5 AND res.tot >= 16.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 16.75 AND res.tot >= 17), 0
            )
             t1630,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 17 AND res.tot >= 17.25), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 17.25 AND res.tot >= 17.5), 0
            )
             t1700,
          NVL ( (SELECT 1 / 2
                 FROM DUAL
                 WHERE res.van <= 17.5 AND res.tot >= 17.75), 0
          )
          + NVL ( (SELECT 1 / 2
                   FROM DUAL
                   WHERE res.van <= 17.75 AND res.tot >= 18), 0
            )
             t1730,
          res_rsv_ruimte_bezoekers,
          res_activiteit_omschrijving,
          prs_kostenplaats_nr,
          res_ruimte_opstel_bezoekers
   FROM (SELECT (rrr.res_rsv_ruimte_van - TRUNC (rrr.res_rsv_ruimte_van))
                * 24
                   van,
                (rrr.res_rsv_ruimte_tot - TRUNC (rrr.res_rsv_ruimte_tot)) * 24
                   tot,
                rr.res_ruimte_nr,
                ar.alg_ruimte_nr,
                rrr.res_rsv_ruimte_van,
                rrr.res_rsv_ruimte_tot,
                rrr.res_rsv_ruimte_bezoekers,
                rra.res_activiteit_omschrijving,
                kp.prs_kostenplaats_nr,
                rro.res_ruimte_opstel_bezoekers
         FROM res_rsv_ruimte rrr,
              res_ruimte_opstelling rro,
              res_ruimte rr,
              res_alg_ruimte rar,
              alg_ruimte ar,
              res_activiteit rra,
              prs_kostenplaats kp
         WHERE     rrr.res_rsv_ruimte_verwijder IS NULL
               AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
               AND rro.res_ruimte_key = rr.res_ruimte_key
               AND rr.res_ruimte_key = rar.res_ruimte_key
               AND rar.alg_ruimte_key = ar.alg_ruimte_key
               AND rrr.res_activiteit_key = rra.res_activiteit_key
               AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)) res;

/* Formatted on 2008/10/16 14:38 (Formatter Plus v4.8.7) */
-- RAP-PACKAGE
CREATE OR REPLACE PACKAGE hout_rap
AS
   TYPE t_cursor IS REF CURSOR;

   PROCEDURE res_bezet_raw (
      user_key      IN       NUMBER,
      p_datum_van   IN       VARCHAR2,
      p_datum_tot   IN       VARCHAR2,
      p_cursor      OUT      t_cursor
   );
END;
/

/* Formatted on 2008/10/20 11:28 (Formatter Plus v4.8.7) */
-- RAP-PROCEDURES in PACKAGE BODY (1 per rapportage)
CREATE OR REPLACE PACKAGE BODY hout_rap
AS
   -- Ruwe bezettingsdata
   PROCEDURE res_bezet_raw (
      user_key      IN       NUMBER,
      p_datum_van   IN       VARCHAR2,
      -- Let wel: formaat '16-01-2006'
      p_datum_tot   IN       VARCHAR2,
      p_cursor      OUT      t_cursor
   )
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
         SELECT   r.res_ruimte_naam ruimte_naam, r.alg_ruimte_nr ruimte_nr,
                  TO_CHAR (r.van, 'dd-mm-yyyy') datum,
                  TO_CHAR (r.van, 'HH24:MI') van,
                  TO_CHAR (r.tot, 'HH24:MI') tot, t0800, t0830, t0900, t0930,
                  t1000, t1030, t1100, t1130, t1200, t1230, t1300, t1330,
                  t1400, t1430, t1500, t1530, t1600, t1630, t1700, t1730,
                  aant_deelnemers, activiteit, kostenplaats, max_personen
             FROM hout_v_res_bezet_raw r
            WHERE r.van BETWEEN v_datum_van AND v_datum_tot
         ORDER BY 1, 3, 4, 5;
   END;
END;
/

-- HOUT#15589 AutoClose repro-bestellingen noti-dagen na aanmaken.
CREATE OR REPLACE PROCEDURE hout_select_autoclose (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
   DELETE FROM imp_log
         WHERE imp_log_applicatie = p_applname;
END;
/

CREATE OR REPLACE FORCE VIEW hout_v_export_autoclose (RESULT, result_order)
AS
   SELECT '', 0
     FROM DUAL
    WHERE 1 = 0;
/

/* Formatted on 23-8-2012 17:02:18 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE hout_export_autoclose (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2,
                                                   p_filedir    IN VARCHAR2,
                                                   p_filename   IN VARCHAR2)
AS
BEGIN
   UPDATE   bes_bestelopdr
      SET   bes_bestelopdr_status = 4
    WHERE   bes_bestelopdr_key IN
                  (SELECT   DISTINCT bo.bes_bestelopdr_key
                     FROM   bes_bestelopdr bo,
                            bes_bestelopdr_item boi,
                            bes_bestelling_item bi,
                            bes_bestelling b,
                            bes_srtdeel sd,
                            bes_srtgroep sg,
                            bes_disc_params bdp
                    WHERE   bo.bes_bestelopdr_status = 3
                            AND bo.bes_bestelopdr_key =
                                  boi.bes_bestelopdr_key
                            AND boi.bes_bestelopdr_item_key =
                                  bi.bes_bestelopdr_item_key
                            AND bi.bes_bestelling_key = b.bes_bestelling_key
                            AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                            AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                            AND sg.ins_discipline_key = 1041 -- repro-bestellingen
                            AND sg.ins_discipline_key =
                                  bdp.bes_ins_discipline_key
                            AND bdp.bes_disc_params_noti_dagen IS NOT NULL
                            AND (b.bes_bestelling_datum IS NULL
                                 OR fac.datumtijdplusuitvoertijd (
                                      b.bes_bestelling_datum,
                                      bdp.bes_disc_params_noti_dagen,
                                      'DAGEN'
                                   ) < SYSDATE));

   FOR rc
   IN (SELECT   boi.bes_bestelopdr_item_key, bo.bes_bestelopdr_key
         FROM   bes_bestelopdr_item boi,
                bes_bestelopdr bo,
                bes_bestelling_item bi,
                bes_bestelling b,
                bes_srtdeel sd,
                bes_srtgroep sg,
                bes_disc_params bdp
        WHERE       boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
                AND bo.bes_bestelopdr_status = 4              -- In bestelling
                AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
                AND bi.bes_bestelling_key = b.bes_bestelling_key
                AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                AND sg.ins_discipline_key = 1041         -- repro-bestellingen
                AND sg.ins_discipline_key = bdp.bes_ins_discipline_key
                AND bdp.bes_disc_params_noti_dagen IS NOT NULL
                AND (b.bes_bestelling_datum IS NULL
                     OR fac.datumtijdplusuitvoertijd (
                          b.bes_bestelling_leverdatum,
                          bdp.bes_disc_params_noti_dagen,
                          'DAGEN'
                       ) < SYSDATE))
   LOOP
      UPDATE   bes_bestelopdr_item
         SET   bes_bestelopdr_item_aantalontv = bes_bestelopdr_item_aantal
       WHERE   bes_bestelopdr_item_key = rc.bes_bestelopdr_item_key;

      bes.updatebestelopdrstatus (rc.bes_bestelopdr_key, NULL);

      COMMIT;
   END LOOP;

   FOR rc
   IN (SELECT   bi.bes_bestelling_item_key, bi.bes_bestelling_key
         FROM   bes_bestelling b,
                bes_bestelling_item bi,
                bes_srtdeel sd,
                bes_srtgroep sg,
                bes_bestelopdr_item boi
        WHERE       b.bes_bestelling_status = 5                     -- Besteld
                AND b.bes_bestelling_key = bi.bes_bestelling_key
                --AND bi.bes_bestelling_item_aantal <>
                --   NVL (bi.bes_bestelling_item_aantalontv, 0)
                AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
                AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
                AND sg.ins_discipline_key = 1041         -- repro-bestellingen
                AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
                AND boi.bes_bestelopdr_item_aantal =
                      boi.bes_bestelopdr_item_aantalontv)
   LOOP
      UPDATE   bes_bestelling_item
         SET   bes_bestelling_item_aantalontv = bes_bestelling_item_aantal
       WHERE   bes_bestelling_item_key = rc.bes_bestelling_item_key;

      bes.updatebestellingstatus (rc.bes_bestelling_key, NULL);

      COMMIT;
   END LOOP;
END;
/

-- HOUT#15762 - Werkplekstatistieken
/* Formatted on 6-8-2009 17:16:30 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_werkplek_geg
(
   locatie_key,
   locatie_code,
   gebouw_key,
   gebouw_code,
   verdieping_code,
   verdieping_oms,
   ruimte_nr,
   ruimte_functie,
   werkplek_volgnr,
   gebruiker
)
AS
   SELECT   a.alg_locatie_key,
            a.alg_locatie_code,
            a.alg_gebouw_key,
            a.alg_gebouw_code,
            a.alg_verdieping_code,
            a.alg_verdieping_omschrijving,
            a.alg_ruimte_nr,
            a.alg_srtruimte_omschrijving,
            a.prs_werkplek_volgnr,
            DECODE (b.aantal,
                    NULL, NULL,
                    1, b.gebruiker,
                    'Meer dan 1 kostenplaats')
     FROM      (SELECT   w.prs_werkplek_key,
                         l.alg_locatie_key,
                         l.alg_locatie_code,
                         g.alg_gebouw_key,
                         g.alg_gebouw_code,
                         v.alg_verdieping_code,
                         v.alg_verdieping_omschrijving,
                         r.alg_ruimte_nr,
                         sr.alg_srtruimte_key,
                         sr.alg_srtruimte_omschrijving,
                         w.prs_werkplek_volgnr
                  FROM   prs_werkplek w,
                         alg_v_aanwezigruimte r,
                         alg_verdieping v,
                         alg_gebouw g,
                         alg_locatie l,
                         alg_srtruimte sr
                 WHERE       w.prs_alg_ruimte_key = r.alg_ruimte_key
                         AND r.alg_verdieping_key = v.alg_verdieping_key
                         AND v.alg_gebouw_key = g.alg_gebouw_key
                         AND g.alg_locatie_key = l.alg_locatie_key
                         AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)) a
            LEFT JOIN
               (  SELECT   pw.prs_werkplek_key,
                           MIN (a.prs_afdeling_omschrijving) gebruiker,
                           COUNT (DISTINCT a.prs_afdeling_key) aantal
                    FROM   prs_perslidwerkplek pw,
                           prs_perslid p,
                           prs_afdeling a
                   WHERE   pw.prs_perslid_key = p.prs_perslid_key
                           AND p.prs_afdeling_key = a.prs_afdeling_key
                GROUP BY   pw.prs_werkplek_key) b
            ON a.prs_werkplek_key = b.prs_werkplek_key
    WHERE   a.alg_srtruimte_key IN (23, 25, 81);

CREATE OR REPLACE VIEW hout_v_rap_wp_func_rui (fclt_f_gebouw_code,
                                               fclt_f_verdieping_code,
                                               fclt_f_ruimte_functie,
                                               ruimte_nr,
                                               aantal_bezet,
                                               aantal_mogelijk
                                              )
AS
   SELECT   v.gebouw_code, v.verdieping_code, v.ruimte_functie, v.ruimte_nr,
            SUM (DECODE (v.gebruiker, NULL, 0, 1)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, v.verdieping_code, v.ruimte_functie, v.ruimte_nr
   UNION ALL
   SELECT   v.gebouw_code, v.verdieping_code, v.ruimte_functie,
            'zzzTotaal functie', SUM (DECODE (v.gebruiker, NULL, 0, 1)),
            COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code,
            v.verdieping_code,
            v.ruimte_functie,
            'zzzTotaal functie'
   UNION ALL
   SELECT   v.gebouw_code, v.verdieping_code, 'zzzTotaal etage', 'zzzTotaal etage',
            SUM (DECODE (v.gebruiker, NULL, 0, 1)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, v.verdieping_code, 'zzzTotaal etage', 'zzzTotaal etage'
/

CREATE OR REPLACE VIEW hout_v_rap_wp_func_ver (fclt_f_gebouw_code,
                                               fclt_f_ruimte_functie,
                                               verdieping_code,
                                               aantal_bezet,
                                               aantal_mogelijk
                                               )
AS
   SELECT   v.gebouw_code, v.ruimte_functie, v.verdieping_code,
            SUM (DECODE (v.gebruiker, NULL, 0, 1)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, v.verdieping_code, v.ruimte_functie
   UNION ALL
   SELECT   v.gebouw_code, v.ruimte_functie, '99999',
            SUM (DECODE (v.gebruiker, NULL, 0, 1)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, v.ruimte_functie, '99999'
   UNION ALL
   SELECT   v.gebouw_code, 'zzzTotaal gebouw', v.verdieping_code,
            SUM (DECODE (v.gebruiker, NULL, 0, 1)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, 'zzzTotaal gebouw', v.verdieping_code
   UNION ALL
   SELECT   v.gebouw_code, 'zzzTotaal gebouw', '99999',
            SUM (DECODE (v.gebruiker, NULL, 0, 1)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, 'zzzTotaal gebouw', '99999'
/

CREATE OR REPLACE VIEW hout_v_rap_wp_ver_gebr (fclt_f_gebouw_code,
                                               fclt_f_verdieping_code,
                                               fclt_f_kostenplaats,
                                               aantal,
                                               totaal
                                              )
AS
   SELECT a.gebouw_code, a.verdieping_code, a.gebruiker, a.aantal, b.totaal
     FROM (SELECT   v.gebouw_code, v.verdieping_code, v.gebruiker,
                    COUNT (*) aantal
               FROM hout_v_werkplek_geg v
              WHERE v.gebruiker IS NOT NULL
           GROUP BY v.gebouw_code, v.verdieping_code, v.gebruiker) a
          LEFT JOIN
          (SELECT   v.gebouw_code, v.verdieping_code, COUNT (*) totaal
               FROM hout_v_werkplek_geg v
           GROUP BY v.gebouw_code, v.verdieping_code) b
          ON a.gebouw_code = b.gebouw_code
        AND a.verdieping_code = b.verdieping_code
   UNION ALL
   SELECT   v.gebouw_code, v.verdieping_code, 'zzzVrij',
            SUM (DECODE (v.gebruiker, NULL, 1, 0)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, v.verdieping_code, 'zzzVrij'
   UNION ALL
   SELECT a.gebouw_code, '99999', a.gebruiker, a.aantal, b.totaal
     FROM (SELECT   v.gebouw_code, v.gebruiker, COUNT (*) aantal
               FROM hout_v_werkplek_geg v
              WHERE v.gebruiker IS NOT NULL
           GROUP BY v.gebouw_code, v.gebruiker) a
          LEFT JOIN
          (SELECT   v.gebouw_code, COUNT (*) totaal
               FROM hout_v_werkplek_geg v
           GROUP BY v.gebouw_code) b ON a.gebouw_code = b.gebouw_code
   UNION ALL
   SELECT   v.gebouw_code, '99999', 'zzzVrij',
            SUM (DECODE (v.gebruiker, NULL, 1, 0)), COUNT (*)
       FROM hout_v_werkplek_geg v
   GROUP BY v.gebouw_code, '99999', 'zzzVrij'
/

/* HOUT#15981 - UNCO aanvragen! */
/* Formatted on 7-8-2009 11:20:08 (QP5 v5.115.810.9015) */
CREATE OR REPLACE FUNCTION hout_mld_flexcontent (p_mldkey IN NUMBER)
   RETURN VARCHAR2
IS
   CURSOR c1
   IS
        SELECT   k.mld_kenmerk_key,
                 COALESCE (k.mld_kenmerk_volgnummer, 0) volgnummer,
                 sk.mld_srtkenmerk_kenmerktype,
                 sk.mld_srtkenmerk_omschrijving,
                 sk.mld_srtkenmerk_upper,
                 rsk.fac_kenmerkdomein_objectnaam,
                 rsk.fac_kenmerkdomein_kolomnaam,
                 rsk.fac_kenmerkdomein_kolomtxt,
                 rsk.fac_usrtab_key,
                 k.mld_kenmerk_default
          FROM   mld_melding m,
                 mld_stdmelding std,
                 mld_kenmerk k,
                 mld_srtkenmerk sk,
                 fac_kenmerkdomein rsk
         WHERE   m.mld_melding_key = p_mldkey
                 AND m.mld_stdmelding_key = std.mld_stdmelding_key
                 AND ( (std.mld_ins_discipline_key = k.mld_stdmelding_key
                        AND k.mld_kenmerk_niveau = 'D')
                      OR (m.mld_stdmelding_key = k.mld_stdmelding_key
                          AND k.mld_kenmerk_niveau = 'S'))
                 AND k.mld_kenmerk_verwijder IS NULL
                 AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                 AND sk.mld_srtkenmerk_kenmerktype <> 'L'            -- label!
                 AND sk.mld_srtkenmerk_kenmerktype <> 'Q'           -- blanco!
                 AND sk.mld_srtkenmerk_verwijder IS NULL
                 AND sk.fac_kenmerkdomein_key = rsk.fac_kenmerkdomein_key(+)
      ORDER BY   COALESCE (k.mld_kenmerk_volgnummer, 0);

   v_flexcontent          VARCHAR2 (4000);
   v_kenmerk_waarde       VARCHAR2 (1000);
   v_ref_kenmerk_waarde   VARCHAR2 (1000);
   sql_stmt               VARCHAR2 (1000);
   v_count                NUMBER (3);
BEGIN
   v_flexcontent := '';

   FOR rec IN c1
   LOOP
      BEGIN
         SELECT   COUNT (km.mld_kenmerkmelding_key)
           INTO   v_count
           FROM   mld_kenmerkmelding km
          WHERE       km.mld_melding_key = p_mldkey
                  AND km.mld_kenmerk_key = rec.mld_kenmerk_key
                  AND km.mld_kenmerkmelding_verwijder IS NULL;

         IF (v_count = 1)
         THEN
            SELECT   km.mld_kenmerkmelding_waarde
              INTO   v_kenmerk_waarde
              FROM   mld_kenmerkmelding km
             WHERE       km.mld_melding_key = p_mldkey
                     AND km.mld_kenmerk_key = rec.mld_kenmerk_key
                     AND km.mld_kenmerkmelding_verwijder IS NULL;

            IF (rec.mld_srtkenmerk_kenmerktype = 'R')
            THEN
               sql_stmt :=
                     'SELECT MIN('
                  || rec.fac_kenmerkdomein_kolomtxt
                  || ')'
                  || '  FROM '
                  || rec.fac_kenmerkdomein_objectnaam
                  || ' WHERE '
                  || rec.fac_kenmerkdomein_kolomnaam
                  || ' = '
                  || v_kenmerk_waarde;

               EXECUTE IMMEDIATE sql_stmt INTO   v_ref_kenmerk_waarde;

               v_flexcontent :=
                  SUBSTR (
                        v_flexcontent
                     || rec.mld_srtkenmerk_omschrijving
                     || ': '
                     || v_ref_kenmerk_waarde
                     || CHR (13)
                     || CHR (10),
                     1,
                     4000
                  );
            ELSE
               v_flexcontent :=
                  SUBSTR (
                        v_flexcontent
                     || rec.mld_srtkenmerk_omschrijving
                     || ': '
                     || v_kenmerk_waarde
                     || CHR (13)
                     || CHR (10),
                     1,
                     4000
                  );
            END IF;
         ELSE                        -- geen kenmerkwaarde, dus optioneel veld
            v_flexcontent :=
               SUBSTR (
                     v_flexcontent
                  || rec.mld_srtkenmerk_omschrijving
                  || ': <leeg>'
                  || CHR (13)
                  || CHR (10),
                  1,
                  4000
               );
         END IF;
      END;
   END LOOP;

   RETURN v_flexcontent;
END;
/

-- lijst van repromeldingen, met hun bijbehorende bestelling, if any
/* Formatted on 9-6-2010 17:52:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_rap_repro_bes_match
(
   fclt_f_meld_maand,
   fclt_f_vakgroeptype,
   melding,
   meld_datum,
   bestelling,
   bestel_datum
)
AS
   SELECT   TO_CHAR (m.mld_melding_datum, 'yyyy-mm') meldmaand,
            sd.ins_srtdiscipline_omschrijving vakgroeptype,
            TO_CHAR (m.mld_melding_key) melding,
            TO_CHAR (m.mld_melding_datum, 'dd-mm-yyyy') melddatum,
            TO_CHAR (b.bes_bestelling_key) bestelling,
            TO_CHAR (b.bes_bestelling_datum, 'dd-mm-yyyy') besteldatum
     FROM   mld_melding m,
            mld_stdmelding std,
            bes_bestelling b,
            mld_discipline d,
            ins_srtdiscipline sd
    WHERE       m.mld_melding_key = b.mld_melding_key(+)
            AND m.mld_stdmelding_key = std.mld_stdmelding_key
            AND std.mld_ins_discipline_key = d.ins_discipline_key
            AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            AND sd.ins_srtdiscipline_key IN (21, 41);

-- telling van repromeldingen en bestellingen per maand
/* Formatted on 9-6-2010 17:52:25 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_rap_repro_bes_count
(
   fclt_f_meld_maand,
   fclt_f_vakgroeptype,
   meldingen,
   bestellingen
)
AS
     SELECT   TO_CHAR (mld_melding_datum, 'yyyy-mm') meldmaand,
              ins_srtdiscipline_omschrijving vakgroeptype,
              COUNT (mld_melding_key) meldingen,
              COUNT (bes_bestelling_key) bestellingen
       FROM   (SELECT   m.mld_melding_datum,
                        sd.ins_srtdiscipline_omschrijving,
                        m.mld_melding_key,
                        b.bes_bestelling_key
                 FROM   mld_melding m,
                        mld_stdmelding std,
                        bes_bestelling b,
                        mld_discipline d,
                        ins_srtdiscipline sd
                WHERE       m.mld_melding_key = b.mld_melding_key(+)
                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                        AND std.mld_ins_discipline_key = d.ins_discipline_key
                        AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                        AND sd.ins_srtdiscipline_key IN (21, 41))
   GROUP BY   TO_CHAR (mld_melding_datum, 'yyyy-mm'),
              ins_srtdiscipline_omschrijving;

/* Formatted on 16-6-2011 10:08:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_thema_ruimte_afd
(
   alg_ruimte_key,
   waarde
)
AS
     SELECT   w.prs_alg_ruimte_key, MIN (a.prs_afdeling_omschrijving)
       FROM   prs_perslidwerkplek pw,
              (SELECT   p.prs_perslid_key,
                        DECODE (p.prs_afdeling_key,
                                b.prs_afdeling_key3, b.prs_afdeling_key2,
                                b.prs_afdeling_key4, b.prs_afdeling_key2,
                                b.prs_afdeling_key5, b.prs_afdeling_key2,
                                p.prs_afdeling_key)
                           prs_afdeling_key
                 FROM   prs_perslid p, prs_v_afdeling_boom b
                WHERE   p.prs_afdeling_key = b.prs_afdeling_key) pa,
              prs_afdeling a,
              prs_werkplek w
      WHERE       pw.prs_perslid_key = pa.prs_perslid_key
              AND pa.prs_afdeling_key = a.prs_afdeling_key
              AND pw.prs_werkplek_key = w.prs_werkplek_key
   GROUP BY   w.prs_alg_ruimte_key;

/* Formatted on 16-6-2011 10:08:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_label_ruimte_afd
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   DISTINCT
            w.prs_alg_ruimte_key, SUBSTR (a.prs_afdeling_omschrijving, 1, 60)
     FROM   prs_perslidwerkplek pw,
            (SELECT   p.prs_perslid_key,
                      DECODE (p.prs_afdeling_key,
                              b.prs_afdeling_key3, b.prs_afdeling_key2,
                              b.prs_afdeling_key4, b.prs_afdeling_key2,
                              b.prs_afdeling_key5, b.prs_afdeling_key2,
                              p.prs_afdeling_key)
                         prs_afdeling_key
               FROM   prs_perslid p, prs_v_afdeling_boom b
              WHERE   p.prs_afdeling_key = b.prs_afdeling_key) pa,
            prs_afdeling a,
            prs_werkplek w
    WHERE       pw.prs_perslid_key = pa.prs_perslid_key
            AND pa.prs_afdeling_key = a.prs_afdeling_key
            AND pw.prs_werkplek_key = w.prs_werkplek_key;


/* Formatted on 16-6-2011 10:25:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_prj_thema_ruimte_afd
(
   prj_ruimte_key,
   waarde
)
AS
     SELECT   w.prj_ruimte_key, MIN (a.prs_afdeling_omschrijving)
       FROM   prj_perslidwerkplek pw,
              (SELECT   p.prs_perslid_key,
                        DECODE (p.prs_afdeling_key,
                                b.prs_afdeling_key3, b.prs_afdeling_key2,
                                b.prs_afdeling_key4, b.prs_afdeling_key2,
                                b.prs_afdeling_key5, b.prs_afdeling_key2,
                                p.prs_afdeling_key)
                           prs_afdeling_key
                 FROM   prs_perslid p, prs_v_afdeling_boom b
                WHERE   p.prs_afdeling_key = b.prs_afdeling_key) pa,
              prs_afdeling a,
              prj_werkplek w
      WHERE       pw.prs_perslid_key = pa.prs_perslid_key
              AND pw.prj_perslidwerkplek_verwijder IS NULL
              AND pa.prs_afdeling_key = a.prs_afdeling_key
              AND pw.prj_werkplek_key = w.prj_werkplek_key
              AND w.prj_werkplek_verwijder IS NULL
   GROUP BY   w.prj_ruimte_key;

/* Formatted on 16-6-2011 10:25:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_prj_label_ruimte_afd
(
   prj_ruimte_key,
   waarde
)
AS
   SELECT   DISTINCT
            w.prj_ruimte_key, SUBSTR (a.prs_afdeling_omschrijving, 1, 60)
     FROM   prj_perslidwerkplek pw,
            (SELECT   p.prs_perslid_key,
                      DECODE (p.prs_afdeling_key,
                              b.prs_afdeling_key3, b.prs_afdeling_key2,
                              b.prs_afdeling_key4, b.prs_afdeling_key2,
                              b.prs_afdeling_key5, b.prs_afdeling_key2,
                              p.prs_afdeling_key)
                         prs_afdeling_key
               FROM   prs_perslid p, prs_v_afdeling_boom b
              WHERE   p.prs_afdeling_key = b.prs_afdeling_key) pa,
            prs_afdeling a,
            prj_werkplek w
    WHERE       pw.prs_perslid_key = pa.prs_perslid_key
            AND pw.prj_perslidwerkplek_verwijder IS NULL
            AND pa.prs_afdeling_key = a.prs_afdeling_key
            AND pw.prj_werkplek_key = w.prj_werkplek_key
            AND w.prj_werkplek_verwijder IS NULL;

CREATE OR REPLACE VIEW hout_v_label_bewoner_voornaam
(
   ALG_RUIMTE_KEY,
   WAARDE
)
AS
   SELECT   prs_w.prs_alg_ruimte_key,
            prs_p.prs_perslid_naam
            || DECODE (prs_p.prs_perslid_voornaam,
                       NULL, '',
                       ' (' || prs_p.prs_perslid_voornaam || ')')
     FROM   prs_werkplek prs_w,
            prs_perslidwerkplek prs_pw,
            prs_perslid prs_p
    WHERE       prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
            AND prs_pw.prs_perslid_key IS NOT NULL
            AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
            AND prs_w.prs_werkplek_virtueel = 0
   UNION
   SELECT   prs_w.prs_alg_ruimte_key, '[Vrij]'
     FROM   prs_werkplek prs_w, prs_v_werkplek_bezetting prs_wb
    WHERE       prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key
            AND prs_w.prs_werkplek_virtueel = 0
            AND prs_wb.prs_werkplek_bezetting < 100
/

CREATE OR REPLACE VIEW hout_v_label_bewoner_voorl
(
   ALG_RUIMTE_KEY,
   WAARDE
)
AS
   SELECT   prs_w.prs_alg_ruimte_key,
            prs_p.prs_perslid_naam
            || DECODE (prs_p.prs_perslid_voorletters,
                       NULL, '',
                       ', ' || prs_p.prs_perslid_voorletters)
     FROM   prs_werkplek prs_w,
            prs_perslidwerkplek prs_pw,
            prs_perslid prs_p
    WHERE       prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
            AND prs_pw.prs_perslid_key IS NOT NULL
            AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
            AND prs_w.prs_werkplek_virtueel = 0
   UNION
   SELECT   prs_w.prs_alg_ruimte_key, '[Vrij]'
     FROM   prs_werkplek prs_w, prs_v_werkplek_bezetting prs_wb
    WHERE       prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key
            AND prs_w.prs_werkplek_virtueel = 0
            AND prs_wb.prs_werkplek_bezetting < 100
/

/* Formatted on 16-8-2010 14:11:01 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW HOUT_V_LABEL_BEWONERWP
(
   ALG_RUIMTE_KEY,
   WAARDE
)
AS
   SELECT   DISTINCT prs_alg_ruimte_key, waarde
     FROM   (SELECT   prs_w.prs_alg_ruimte_key,
                      prs_p.prs_perslid_naam
                      || DECODE (prs_p.prs_perslid_voorletters,
                                 NULL, '',
                                 ', ' || prs_p.prs_perslid_voorletters)
                      || ' '
                      || DECODE (prs_w.prs_werkplek_omschrijving,
                                 NULL, '',
                                 ' (' || prs_w.prs_werkplek_omschrijving || ')')
                         waarde
               FROM   prs_werkplek prs_w,
                      prs_perslidwerkplek prs_pw,
                      prs_perslid prs_p
              WHERE       prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
                      AND prs_pw.prs_perslid_key IS NOT NULL
                      AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
             UNION
               SELECT   prs_w.prs_alg_ruimte_key,
                        ' Vrij '
                        || DECODE (prs_w.prs_werkplek_omschrijving,
                                   NULL, '',
                                   '(' || prs_w.prs_werkplek_omschrijving || ')')
                 FROM   prs_werkplek prs_w,
                        prs_perslidwerkplek prs_wb
                WHERE   prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key(+)
             GROUP BY   prs_w.prs_alg_ruimte_key,
                        prs_w.prs_werkplek_key,
                        prs_w.prs_werkplek_omschrijving
               HAVING   SUM (NVL (prs_wb.prs_perslidwerkplek_bezetting, 0)) <
                           100);
/

/* Formatted on 16-8-2010 14:09:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW HOUT_V_PRJ_LABEL_BEWONERWP
(
   PRJ_RUIMTE_KEY,
   WAARDE,
   HIGHLIGHT
)
AS
   SELECT   DISTINCT
            prj_ruimte_key, waarde, DECODE (prj_selectie_key, NULL, 0, 1)
     FROM   (SELECT   prj_r.prj_scenario_key,
                      prs_w.prj_ruimte_key,
                      prs_p.prs_perslid_naam
                      || DECODE (prs_p.prs_perslid_voorletters,
                                 NULL, '',
                                 ', ' || prs_p.prs_perslid_voorletters)
                      || ' '
                      || DECODE (prs_w.prj_werkplek_omschrijving,
                                 NULL, '',
                                 '(' || prs_w.prj_werkplek_omschrijving || ')')
                         waarde,
                      'PRJ_WERKPLEK' label_soort,
                      prs_pw.prj_werkplek_key label_key
               FROM   PRJ_RUIMTE prj_r,
                      PRJ_WERKPLEK prs_w,
                      (SELECT   *
                         FROM   PRJ_PERSLIDWERKPLEK
                        WHERE   prj_perslidwerkplek_verwijder IS NULL) prs_pw,
                      PRS_PERSLID prs_p
              WHERE       prs_w.prj_werkplek_key = prs_pw.prj_werkplek_key
                      AND prs_pw.prs_perslid_key IS NOT NULL
                      AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
                      AND prs_w.prj_ruimte_key = prj_r.prj_ruimte_key
             UNION
               SELECT   -1,
                        prs_w.prj_ruimte_key,
                        ' Vrij: '
                        || DECODE (prs_w.prj_werkplek_omschrijving,
                                   NULL, '',
                                   '(' || prs_w.prj_werkplek_omschrijving || ')'),
                        'PRJ_WERKPLEK',
                        prs_w.prj_werkplek_key
                 FROM   PRJ_WERKPLEK prs_w,
                        (SELECT   *
                           FROM   PRJ_PERSLIDWERKPLEK
                          WHERE   prj_perslidwerkplek_verwijder IS NULL) prs_wb
                WHERE   prs_w.prj_werkplek_key = prs_wb.prj_werkplek_key(+)
                        AND prj_werkplek_verwijder IS NULL
             GROUP BY   prs_w.prj_ruimte_key,
                        prs_w.prj_werkplek_key,
                        prs_w.prj_werkplek_omschrijving
               HAVING   SUM (NVL (prs_wb.prj_perslidwerkplek_bezetting, 0)) <
                           100) DATA,
            PRJ_SELECTIE ps
    WHERE       ps.prj_scenario_key(+) = DATA.prj_scenario_key
            AND ps.prj_selectie_tabelnaam(+) = label_soort
            AND ps.prj_selectie_tabelkey(+) = label_key;
/

/* Formatted on 26-1-2017 9:35:25 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW HOUT_V_RAP_MLD_AFHANDELING_ICT
(
   FCLT_H_MLD_KEY,
   VAKGROEPTYPE_KEY,
   VAKGROEPTYPE,
   AANMAAK,
   NUMMER,
   VAKGROEP_MELDING,
   FCLT_F_STATUS,
   FCLT_F_ACCEPT_USER,
   FCLT_F_UPDATE_USER,
   FCLT_F_AFMELD_USER,
   PLAATS_OMSCHRIJVING,
   MELDER,
   EMAIL,
   EINDDATUM
)
AS
   SELECT meld.mld_key,
          vakgroeptype_key,
          vakgroeptype,
          mldnew.fac_tracking_datum,
          meld.vakgroeptype_prefix || TO_CHAR (meld.mld_key),
          meld.vakgroep_oms || CHR (10) || CHR (13) || meld.stdmld_oms,
          meld.mld_statuses_omschrijving,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames
            WHERE prs_perslid_key = COALESCE (mldacp.prs_perslid_key, mldrej.prs_perslid_key)),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames
            WHERE prs_perslid_key = mldbeh.prs_perslid_key),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames
            WHERE prs_perslid_key = mldafm.prs_perslid_key),
          meld.plaatsaanduiding || CHR (10) || CHR (13)
          || CASE
                WHEN LENGTH (meld.mld_oms) < 1000
                THEN
                   meld.mld_oms
                ELSE
                   SUBSTR (meld.mld_oms, 1, 1000) || '...'
             END,
          meld.prs_perslid_naam_full,
          (SELECT prs_perslid_email
             FROM prs_perslid
            WHERE prs_perslid_key = meld.prs_perslid_key),
          TO_CHAR (meld.einddatum, 'dd-mm-yyyy')
     FROM (SELECT m.mld_melding_key mld_key,
                  sd.ins_srtdiscipline_key vakgroeptype_key,
                  sd.ins_srtdiscipline_omschrijving vakgroeptype,
                  sd.ins_srtdiscipline_prefix vakgroeptype_prefix,
                  td.ins_discipline_key vakgroep_key,
                  td.ins_discipline_omschrijving vakgroep_oms,
                  sm.mld_stdmelding_key stdmld_key,
                  sm.mld_stdmelding_omschrijving stdmld_oms,
                  m.mld_melding_datum begindatum,
                  m.mld_melding_einddatum einddatum,
                  m.mld_melding_omschrijving mld_oms,
                  m.mld_melding_opmerking mld_opm,
                  s.mld_statuses_omschrijving,
                  COALESCE (pa.alg_plaatsaanduiding, l.alg_locatie_code) plaatsaanduiding,
                  m.prs_perslid_key,
                  p.prs_perslid_naam_full
             FROM mld_melding m,
                  mld_stdmelding sm,
                  ins_tab_discipline td,
                  ins_srtdiscipline sd,
                  mld_statuses s,
                  alg_v_plaatsaanduiding pa,
                  alg_locatie l,
                  prs_v_perslid_fullnames p
            WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_ins_discipline_key = td.ins_discipline_key
                  AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND m.mld_melding_status = s.mld_statuses_key
                  AND m.mld_alg_onroerendgoed_keys = pa.alg_onroerendgoed_keys(+)
                  AND m.mld_alg_locatie_key = l.alg_locatie_key
                  AND m.prs_perslid_key = p.prs_perslid_key) meld
          LEFT JOIN fac_tracking mldnew
             ON meld.mld_key = mldnew.fac_tracking_refkey
                AND mldnew.fac_srtnotificatie_key = 21
          LEFT JOIN (SELECT t.fac_tracking_refkey, t.fac_tracking_datum, t.prs_perslid_key
                       FROM fac_tracking t
                      WHERE t.fac_srtnotificatie_key = 17
                            AND t.fac_tracking_key IN
                                     (SELECT MAX (fac_tracking_key)
                                        FROM fac_tracking
                                       WHERE fac_srtnotificatie_key = 17
                                             AND fac_tracking_refkey = t.fac_tracking_refkey))
                    mldacp
             ON meld.mld_key = mldacp.fac_tracking_refkey
          LEFT JOIN fac_tracking mldrej
             ON meld.mld_key = mldrej.fac_tracking_refkey
                AND mldrej.fac_srtnotificatie_key = 22
          LEFT JOIN (SELECT t.fac_tracking_refkey, t.fac_tracking_datum, t.prs_perslid_key
                       FROM fac_tracking t
                      WHERE t.fac_srtnotificatie_key = 144
                            AND t.fac_tracking_key IN
                                     (SELECT MAX (fac_tracking_key)
                                        FROM fac_tracking
                                       WHERE fac_srtnotificatie_key = 144
                                             AND fac_tracking_refkey = t.fac_tracking_refkey))
                    mldbeh
             ON meld.mld_key = mldbeh.fac_tracking_refkey
          LEFT JOIN fac_tracking mldafm
             ON meld.mld_key = mldafm.fac_tracking_refkey
                AND mldafm.fac_srtnotificatie_key = 18
    WHERE mldafm.fac_tracking_datum IS NULL
          OR mldafm.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY');

-- Rapportage voor FZ+Repro RTD+Repro ASD (keys 1, 21 en 41).
CREATE OR REPLACE VIEW HOUT_V_RAP_MLD_AFHANDELING_FAC
(
   FCLT_H_MLD_KEY,
   VAKGROEPTYPE_KEY,
   VAKGROEPTYPE,
   AANMAAK,
   NUMMER,
   VAKGROEP_MELDING,
   FCLT_F_STATUS,
   FCLT_F_ACCEPT_USER,
   FCLT_F_UPDATE_USER,
   FCLT_F_AFMELD_USER,
   PLAATS_OMSCHRIJVING,
   MELDER,
   EMAIL,
   EINDDATUM
)
AS
   SELECT *
     FROM HOUT_V_RAP_MLD_AFHANDELING_ICT
    WHERE vakgroeptype_key IN (1, 21, 41);

-- HOUT#27850: Urenregistratie tbv. Facilities (HOUT#23679) naar PSC omgebouwd!
/* Formatted on 24-10-2013 14:08:22 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_rap_urenreg_psc
(
   fclt_x_vakgroep,
   fclt_f_melding,
   fclt_f_opdrachttype,
   fclt_f_projectnummer,
   fclt_x_opdrachtnr,
   html_opdrachtnr,
   omschrijving,
   dag,
   fclt_d_datum,
   fclt_f_medewerker,
   --fclt_f_type_personeel,
   uren,
   uurtarief,
   kmtarief,
   kmperwk
)
AS
   SELECT   opdr.ins_discipline_omschrijving vakgroep,
            opdr.mld_stdmelding_omschrijving melding,
            opdr.mld_typeopdr_omschrijving opdrachttype,
            TO_CHAR (opdr.mld_melding_key) projectnummer,
            opdr.mld_melding_key || '/' || opdr.mld_opdr_bedrijfopdr_volgnr
               opdrachtnr,
            DECODE (
               opdr.mld_opdr_key,
               NULL,
               NULL,
               '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_opdr.asp?urole=bo&'
               || 'opdr_key='
               || opdr.mld_opdr_key
               || '")''>'
               || opdr.mld_melding_key
               || '/'
               || opdr.mld_opdr_bedrijfopdr_volgnr
               || '</a>'
            )
               html_opdrachtnr,
            opdr.mld_opdr_omschrijving opdr_oms,
            DECODE (TO_CHAR (ou.mld_opdr_uren_datum, 'D'),
                    2, 'Ma',
                    3, 'Di',
                    4, 'Wo',
                    5, 'Do',
                    6, 'Vr',
                    7, 'Za',
                    'Zo')
               dag,
            TO_CHAR (ou.mld_opdr_uren_datum, 'dd-mm-yyyy') datum,
            opdr.prs_perslid_naam_full
            || DECODE (b.prs_perslid_key,
                       NULL, '',
                       ' (' || b.prs_bedrijf_naam || ')')
               medewerker,
            --kl.fac_usrdata_omschr type_pers,
            ou.mld_opdr_uren_besteed,
            k1.uurtarief,
            k2.kmtarief,
            k3.kmperwk
     FROM                     (SELECT   o.mld_melding_key,
                                        o.mld_opdr_key,
                                        o.mld_opdr_bedrijfopdr_volgnr,
                                        sm.mld_stdmelding_omschrijving,
                                        md.ins_discipline_omschrijving,
                                        ot.mld_typeopdr_omschrijving,
                                        o.mld_opdr_omschrijving,
                                        pf.prs_perslid_key,
                                        pf.prs_perslid_naam_full
                                 FROM   mld_opdr o,
                                        mld_typeopdr ot,
                                        mld_melding m,
                                        mld_stdmelding sm,
                                        mld_discipline md,
                                        prs_v_perslid_fullnames pf
                                WHERE   o.mld_statusopdr_key != 1 -- Afgewezen
                                        AND o.mld_typeopdr_key =
                                              ot.mld_typeopdr_key
                                        AND ot.mld_typeopdr_matchtype = 3 -- Wekelijks geregistreerde uren
                                        AND o.mld_melding_key =
                                              m.mld_melding_key
                                        AND m.mld_stdmelding_key =
                                              sm.mld_stdmelding_key
                                        AND sm.mld_ins_discipline_key =
                                              md.ins_discipline_key
                                        AND md.ins_srtdiscipline_key = 181 -- PSC urenregistratie
                                        AND o.mld_uitvoerende_keys =
                                              pf.prs_perslid_key) opdr
                           LEFT JOIN
                              (SELECT   cp.prs_perslid_key,
                                        b.prs_bedrijf_naam
                                 FROM   prs_contactpersoon cp, prs_bedrijf b
                                WHERE   cp.prs_bedrijf_key =
                                           b.prs_bedrijf_key) b
                           ON opdr.prs_perslid_key = b.prs_perslid_key
                        LEFT JOIN
                           mld_opdr_uren ou
                        ON opdr.mld_opdr_key = ou.mld_opdr_key
                     LEFT JOIN                                       -- Weg???
                        (SELECT   kl.prs_link_key, ud.fac_usrdata_omschr
                           FROM   prs_kenmerklink kl, fac_usrdata ud
                          WHERE       kl.prs_kenmerk_key = 1020 -- Type personeel
                                  AND fac.safe_to_number (
                                        kl.prs_kenmerklink_waarde
                                     ) = ud.fac_usrdata_key
                                  AND ud.fac_usrtab_key = 581) k0 -- Type personeel
                     ON opdr.prs_perslid_key = k0.prs_link_key
                  LEFT JOIN
                     (SELECT   ko.mld_opdr_key,
                               ko.mld_kenmerkopdr_waarde uurtarief
                        FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                       WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                               AND k.mld_srtkenmerk_key = 1161    -- Uurtarief
                               AND k.mld_kenmerk_niveau = 'O') k1 -- Uurtarief
                  ON opdr.mld_opdr_key = k1.mld_opdr_key
               LEFT JOIN
                  (SELECT   ko.mld_opdr_key,
                            ko.mld_kenmerkopdr_waarde kmtarief
                     FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                    WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_srtkenmerk_key = 1181       -- Km-tarief
                            AND k.mld_kenmerk_niveau = 'O') k2    -- Km-tarief
               ON opdr.mld_opdr_key = k2.mld_opdr_key
            LEFT JOIN
               (SELECT   ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde kmperwk
                  FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                 WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 1182          -- Km per wk
                         AND k.mld_kenmerk_niveau = 'O') k3       -- Km per wk
            ON opdr.mld_opdr_key = k3.mld_opdr_key
    WHERE   ou.mld_opdr_uren_besteed IS NOT NULL;

/* Formatted on 2-1-2014 14:22:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_rap_wk_uren_psc
(
   hide_f_bv,
   wknr,
   maandag,
   fclt_d_zondag,
   begindatum,
   einddatum,
   uren_vast,
   loon_vast,
   uurtarief,
   kmtarief,
   kmperwk,
   fclt_f_opdrachttype,
   fclt_f_projectnummer,
   opdr_oms,
   fclt_f_locatie,
   fclt_f_medewerker,
   --mdw_type,
   uren_besteed,
   loon_besteed,
   ma_uren,
   di_uren,
   wo_uren,
   do_uren,
   vr_uren,
   za_uren,
   zo_uren
)
AS
   SELECT   'B' bv,                                                 -- Besteed
            TO_CHAR (wk.dag, 'IYYY-IW') wknr,
            TO_CHAR (TRUNC (wk.dag, 'IW'), 'dd-mm-yyyy') maandag,
            TO_CHAR (TRUNC (wk.dag, 'IW') + 6, 'dd-mm-yyyy') fclt_d_zondag, -- Ref.datum bij van/tot-selectie!
            ou.mld_opdr_datumbegin,
            ou.mld_opdr_einddatum,
            NULL uren_vast,                                    --ou.uren_vast,
            NULL loon_vast,
            --NULL uurtarief,                                    --k1.uurtarief,
            --NULL kmtarief,                                      --k2.kmtarief,
            --NULL kmperwk,                                        --k3.kmperwk,
            COALESCE (k1.uurtarief, '0') uurtarief,
            COALESCE (k2.kmtarief, '0') kmtarief,
            COALESCE (k3.kmperwk, '0') kmperwk,
            ou.mld_typeopdr_omschrijving opdrachttype,
            TO_CHAR (ou.mld_melding_key) projectnummer,
            ou.mld_opdr_omschrijving opdr_oms,
            ou.alg_locatie_omschrijving locatie,
            --opdr.ins_discipline_omschrijving vakgroep,
            --opdr.mld_stdmelding_omschrijving melding,
            --opdr.mld_melding_key || '/' || opdr.mld_opdr_bedrijfopdr_volgnr
            --   opdrachtnr,
            --ou.prs_perslid_naam_full mdw_naam,
            ou.prs_perslid_naam_full
            || DECODE (b.prs_perslid_key,
                       NULL, '',
                       ' (' || b.prs_bedrijf_naam || ')')
               medewerker,
              --NULL mdw_type,
              COALESCE (ou.ma, 0)
            + COALESCE (ou.di, 0)
            + COALESCE (ou.wo, 0)
            + COALESCE (ou.do, 0)
            + COALESCE (ou.vr, 0)
            + COALESCE (ou.za, 0)
            + COALESCE (ou.zo, 0)
               uren_besteed,
            (  COALESCE (ou.ma, 0)
             + COALESCE (ou.di, 0)
             + COALESCE (ou.wo, 0)
             + COALESCE (ou.do, 0)
             + COALESCE (ou.vr, 0)
             + COALESCE (ou.za, 0)
             + COALESCE (ou.zo, 0))
            * COALESCE (fac.safe_to_number (k1.uurtarief), 0)
               loon_besteed,
            COALESCE (ou.ma, 0),
            COALESCE (ou.di, 0),
            COALESCE (ou.wo, 0),
            COALESCE (ou.do, 0),
            COALESCE (ou.vr, 0),
            COALESCE (ou.za, 0),
            COALESCE (ou.zo, 0)
     FROM                  (    SELECT   TRUNC (ADD_MONTHS (SYSDATE, -12),
                                                'YYYY')
                                         + (ROWNUM * 7)
                                            dag
                                  FROM   DUAL
                            CONNECT BY   LEVEL <=
                                            (CEIL( (SYSDATE
                                                    - TRUNC (
                                                         ADD_MONTHS (SYSDATE,
                                                                     -12),
                                                         'YYYY'
                                                      ))
                                                  / 7)
                                             + 2)) wk
                        LEFT JOIN   -- Tbv. te berekenen bestede uren per dag!
                           (SELECT   ou.wk,
                                     o.mld_melding_key,
                                     o.mld_opdr_key,
                                     o.mld_opdr_bedrijfopdr_volgnr,
                                     o.mld_opdr_datumbegin,
                                     o.mld_opdr_einddatum,
                                     o.mld_opdr_uren uren_vast,
                                     ot.mld_typeopdr_omschrijving,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  '*Verlof/ziek',
                                             o.mld_opdr_omschrijving)
                                        mld_opdr_omschrijving,
                                     --sm.mld_stdmelding_omschrijving,
                                     l.alg_locatie_omschrijving,
                                     pf.prs_perslid_key,
                                     pf.prs_perslid_naam_full,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.ma,            -- -!
                                             ou.ma)                      -- +!
                                        ma,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.di,            -- -!
                                             ou.di)                      -- +!
                                        di,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.wo,            -- -!
                                             ou.wo)                      -- +!
                                        wo,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.do,            -- -!
                                             ou.do)                      -- +!
                                        do,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.vr,            -- -!
                                             ou.vr)                      -- +!
                                        vr,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.za,            -- -!
                                             ou.za)                      -- +!
                                        za,
                                     DECODE (sm.mld_ins_discipline_key,
                                             1841,  -- Afwezigheidsregistratie
                                                  -1 * ou.zo,            -- -!
                                             ou.zo)                      -- +!
                                        zo
                              FROM   (  SELECT   TO_CHAR (mld_opdr_uren_datum,
                                                          'IYYY-IW')
                                                    wk,
                                                 mld_opdr_key,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        2,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    ma,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        3,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    di,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        4,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    wo,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        5,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    do,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        6,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    vr,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        7,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    za,
                                                 SUM(DECODE (
                                                        TO_CHAR (
                                                           mld_opdr_uren_datum,
                                                           'D'
                                                        ),
                                                        1,
                                                        mld_opdr_uren_besteed,
                                                        0
                                                     ))
                                                    zo
                                          FROM   mld_opdr_uren
                                      GROUP BY   TO_CHAR (
                                                    mld_opdr_uren_datum,
                                                    'IYYY-IW'
                                                 ),
                                                 mld_opdr_key) ou,
                                     mld_opdr o,
                                     mld_typeopdr ot,
                                     mld_melding m,
                                     mld_stdmelding sm,
                                     mld_discipline md,
                                     alg_v_aanweziglocatie l,
                                     prs_v_perslid_fullnames pf
                             WHERE   ou.mld_opdr_key = o.mld_opdr_key
                                     AND o.mld_statusopdr_key != 1 -- Afgewezen
                                     AND o.mld_typeopdr_key =
                                           ot.mld_typeopdr_key
                                     AND ot.mld_typeopdr_matchtype = 3 -- Wekelijks geregistreerde uren
                                     AND o.mld_melding_key =
                                           m.mld_melding_key
                                     AND m.mld_stdmelding_key =
                                           sm.mld_stdmelding_key
                                     AND sm.mld_ins_discipline_key =
                                           md.ins_discipline_key
                                     AND md.ins_srtdiscipline_key = 181 -- PSC urenregistratie
                                     AND m.mld_alg_locatie_key =
                                           l.alg_locatie_key(+)
                                     AND o.mld_uitvoerende_keys =
                                           pf.prs_perslid_key) ou
                        ON TO_CHAR (wk.dag, 'IYYY-IW') = ou.wk
                     LEFT JOIN
                        (  SELECT   cp.prs_perslid_key,
                                    MIN (b.prs_bedrijf_naam) prs_bedrijf_naam
                             FROM   prs_contactpersoon cp, prs_bedrijf b
                            WHERE   cp.prs_bedrijf_key = b.prs_bedrijf_key
                         GROUP BY   cp.prs_perslid_key) b
                     ON ou.prs_perslid_key = b.prs_perslid_key
                  LEFT JOIN
                     (SELECT   ko.mld_opdr_key,
                               ko.mld_kenmerkopdr_waarde uurtarief
                        FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                       WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                               AND k.mld_srtkenmerk_key = 1161    -- Uurtarief
                               AND k.mld_kenmerk_niveau = 'O') k1 -- Uurtarief
                  ON ou.mld_opdr_key = k1.mld_opdr_key
               LEFT JOIN
                  (SELECT   ko.mld_opdr_key,
                            ko.mld_kenmerkopdr_waarde kmtarief
                     FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                    WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_srtkenmerk_key = 1181       -- Km-tarief
                            AND k.mld_kenmerk_niveau = 'O') k2    -- Km-tarief
               ON ou.mld_opdr_key = k2.mld_opdr_key
            LEFT JOIN
               (SELECT   ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde kmperwk
                  FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                 WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 1182          -- Km per wk
                         AND k.mld_kenmerk_niveau = 'O') k3       -- Km per wk
            ON ou.mld_opdr_key = k3.mld_opdr_key
   UNION ALL
   SELECT   'V' bv,                                                    -- Vast
            TO_CHAR (o.dag, 'IYYY-IW') wknr,
            TO_CHAR (TRUNC (o.dag, 'IW'), 'dd-mm-yyyy') maandag,
            TO_CHAR (TRUNC (o.dag, 'IW') + 6, 'dd-mm-yyyy') fclt_d_zondag, -- Ref.datum bij van/tot-selectie!
            o.mld_opdr_datumbegin,
            o.mld_opdr_einddatum,
            o.uren_vast,
            o.uren_vast * COALESCE (fac.safe_to_number (k1.uurtarief), 0)
               loon_vast,
            COALESCE (k1.uurtarief, '0') uurtarief,
            COALESCE (k2.kmtarief, '0') kmtarief,
            COALESCE (k3.kmperwk, '0') kmperwk,
            o.mld_typeopdr_omschrijving opdrachttype,
            TO_CHAR (o.mld_melding_key) projectnummer,
            o.mld_opdr_omschrijving opdr_oms,
            o.alg_locatie_omschrijving locatie,
            --opdr.ins_discipline_omschrijving vakgroep,
            --opdr.mld_stdmelding_omschrijving melding,
            --opdr.mld_melding_key || '/' || opdr.mld_opdr_bedrijfopdr_volgnr
            --   opdrachtnr,
            --o.prs_perslid_naam_full mdw_naam,
            o.prs_perslid_naam_full
            || DECODE (b.prs_perslid_key,
                       NULL, '',
                       ' (' || b.prs_bedrijf_naam || ')')
               medewerker,
            --kl.fac_usrdata_omschr mdw_type,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0,
            0
     FROM                  (SELECT   wk.dag,
                                     o.mld_melding_key,
                                     o.mld_opdr_key,
                                     o.mld_opdr_bedrijfopdr_volgnr,
                                     o.mld_opdr_datumbegin,
                                     o.mld_opdr_einddatum,
                                     o.mld_opdr_uren uren_vast,
                                     ot.mld_typeopdr_omschrijving,
                                     o.mld_opdr_omschrijving,
                                     --sm.mld_stdmelding_omschrijving,
                                     l.alg_locatie_omschrijving,
                                     pf.prs_perslid_key,
                                     pf.prs_perslid_naam_full
                              FROM   mld_opdr o,
                                     mld_typeopdr ot,
                                     mld_melding m,
                                     mld_stdmelding sm,
                                     mld_discipline md,
                                     alg_v_aanweziglocatie l,
                                     prs_v_perslid_fullnames pf,
                                     (    SELECT   TRUNC (
                                                      ADD_MONTHS (SYSDATE, -12),
                                                      'YYYY'
                                                   )
                                                   + (ROWNUM * 7)
                                                      dag
                                            FROM   DUAL
                                      CONNECT BY   LEVEL <=
                                                      (CEIL( (SYSDATE
                                                              - TRUNC (
                                                                   ADD_MONTHS (
                                                                      SYSDATE,
                                                                      -12
                                                                   ),
                                                                   'YYYY'
                                                                ))
                                                            / 7)
                                                       + 2)) wk
                             WHERE   o.mld_statusopdr_key != 1    -- Afgewezen
                                     AND o.mld_typeopdr_key =
                                           ot.mld_typeopdr_key
                                     AND ot.mld_typeopdr_matchtype = 3 -- Wekelijks geregistreerde uren
                                     AND o.mld_melding_key =
                                           m.mld_melding_key
                                     AND m.mld_stdmelding_key =
                                           sm.mld_stdmelding_key
                                     AND sm.mld_ins_discipline_key =
                                           md.ins_discipline_key
                                     AND md.ins_srtdiscipline_key = 181 -- PSC urenregistratie
                                     AND m.mld_alg_locatie_key =
                                           l.alg_locatie_key(+)
                                     AND o.mld_uitvoerende_keys =
                                           pf.prs_perslid_key
                                     AND TO_CHAR (wk.dag, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                                o.mld_opdr_datumbegin,
                                                                                'IYYY-IW'
                                                                             )
                                                                         AND  TO_CHAR (
                                                                                 o.mld_opdr_einddatum,
                                                                                 'IYYY-IW'
                                                                              ))
                           o
                        LEFT JOIN
                           (  SELECT   cp.prs_perslid_key,
                                       MIN (b.prs_bedrijf_naam)
                                          prs_bedrijf_naam
                                FROM   prs_contactpersoon cp, prs_bedrijf b
                               WHERE   cp.prs_bedrijf_key = b.prs_bedrijf_key
                            GROUP BY   cp.prs_perslid_key) b
                        ON o.prs_perslid_key = b.prs_perslid_key
                     LEFT JOIN                                       -- Weg???
                        (SELECT   kl.prs_link_key, ud.fac_usrdata_omschr
                           FROM   prs_kenmerklink kl, fac_usrdata ud
                          WHERE       kl.prs_kenmerk_key = 1020 -- Type personeel
                                  AND fac.safe_to_number (
                                        kl.prs_kenmerklink_waarde
                                     ) = ud.fac_usrdata_key
                                  AND ud.fac_usrtab_key = 581) k0 -- Type personeel
                     ON o.prs_perslid_key = k0.prs_link_key
                  LEFT JOIN
                     (SELECT   ko.mld_opdr_key,
                               ko.mld_kenmerkopdr_waarde uurtarief
                        FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                       WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                               AND k.mld_srtkenmerk_key = 1161    -- Uurtarief
                               AND k.mld_kenmerk_niveau = 'O') k1 -- Uurtarief
                  ON o.mld_opdr_key = k1.mld_opdr_key
               LEFT JOIN
                  (SELECT   ko.mld_opdr_key,
                            ko.mld_kenmerkopdr_waarde kmtarief
                     FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                    WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_srtkenmerk_key = 1181       -- Km-tarief
                            AND k.mld_kenmerk_niveau = 'O') k2    -- Km-tarief
               ON o.mld_opdr_key = k2.mld_opdr_key
            LEFT JOIN
               (SELECT   ko.mld_opdr_key, ko.mld_kenmerkopdr_waarde kmperwk
                  FROM   mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k
                 WHERE       ko.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 1182          -- Km per wk
                         AND k.mld_kenmerk_niveau = 'O') k3       -- Km per wk
            ON o.mld_opdr_key = k3.mld_opdr_key;


-- HOUT#56289: Mail2Melding tbv. icthelpdesk/helpdeskict!
/* Formatted on 13-10-2014 16:08:52 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE HOUT_processemail (
   pfrom        IN VARCHAR2,
   pto          IN VARCHAR2,
   psubject     IN VARCHAR2,
   pbody        IN VARCHAR2,
   psessionid   IN VARCHAR2,
   puserkey     IN NUMBER DEFAULT NULL)
AS
   -- Soortmelding 2481 (MF Ricoh automatische melding) onder Vakgroep 82 (Apparatuur) onder Vakgroeptype 1!
   -- Soortmelding 3781 (Automatische E-mail melding) onder Vakgroep 2282 (Ondersteuning) onder Vakgroeptype 2!
   c_onbekend_key       NUMBER (10) := 45181;             -- Afzender Onbekend
   v_errormsg           VARCHAR2 (1000);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_exist_ticket       VARCHAR2 (255) := '';
   v_perslid_key        NUMBER (10);
   v_kostenplaats_key   NUMBER (10);
   v_deel_key           NUMBER (10);
   v_onrgoed_keys       NUMBER (10);
   v_locatie_key        NUMBER (10);
   v_stdmelding_key     NUMBER (10);
   v_melding_key        NUMBER (10);
   v_folder_kkey        NUMBER (10);
   v_count              NUMBER (10);
BEGIN
   CASE
      WHEN UPPER (pto) LIKE 'PRINTERS@%'               -- Vervallen per 2014!?
      THEN
         -- Valideer bestaan van persoon met key=10081 (Externe partij/leverancier)?
         v_errormsg := 'Fout bij bepalen printer-melder';
         SELECT p.prs_perslid_key, a.prs_kostenplaats_key
           INTO v_perslid_key, v_kostenplaats_key
           FROM prs_v_aanwezigperslid p, prs_afdeling a
          WHERE p.prs_perslid_key = 10081
                AND p.prs_afdeling_key = a.prs_afdeling_key;

         -- Valideer bestaan van stdmelding met key=2481 (MF Ricoh automatische melding)?
         v_errormsg := 'Fout bij bepalen printer-melding';
         SELECT sm.mld_stdmelding_key
           INTO v_stdmelding_key
           FROM mld_stdmelding sm
          WHERE sm.mld_stdmelding_key = 2481
                AND sm.mld_stdmelding_verwijder IS NULL;

         -- Valideer de sender in pfrom: kennen we deze als object in de groep met
         -- key=21 (Multifunctionals)?
         v_errormsg := 'Fout bij bepalen printer-object: ' || SUBSTR (pfrom, 1, INSTR (pfrom, '@') - 1);
         SELECT d.ins_deel_key, og.alg_onrgoed_keys, og.alg_locatie_key
           INTO v_deel_key, v_onrgoed_keys, v_locatie_key
           FROM ins_v_aanwezigdeel d, ins_v_aanwezigsrtdeel sd, ins_v_alg_onroerendgoed og
          WHERE UPPER (d.ins_deel_omschrijving) LIKE UPPER (SUBSTR (pfrom, 1, INSTR (pfrom, '@') - 1)) || '%'
                AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                AND sd.ins_srtgroep_key = 21
                AND d.ins_alg_ruimte_key = og.alg_onrgoed_keys;

         -- Suggested extensions:
         -- - Check for MLDUSE-write autorisations
         -- - Parse the subject to find the appropriate stdmelding, if uniquely possible
         -- - Append (as a note?) to an existing melding if #key is found in the subject
         v_errormsg := 'Fout bij toevoegen melding';
         INSERT INTO mld_melding (mld_melding_module,
                                  mld_meldbron_key,
                                  mld_alg_locatie_key,
                                  mld_alg_onroerendgoed_keys,
                                  mld_melding_datum,
                                  mld_melding_omschrijving,
                                  mld_stdmelding_key,
                                  mld_melding_t_uitvoertijd,
                                  prs_kostenplaats_key,
                                  prs_perslid_key,
                                  prs_perslid_key_voor,
                                  mld_melding_status,
                                  mld_melding_spoed,
                                  mld_melding_onderwerp)
             VALUES ('MLD',
                     4,                                               -- email
                     v_locatie_key,
                     v_onrgoed_keys,
                     SYSDATE,
                     SUBSTR (psubject, 1, 4000),
                     v_stdmelding_key,
                     NULL,
                     v_kostenplaats_key,
                     v_perslid_key,
                     v_perslid_key,
                     NULL,
                     3,
                     NULL)                                     -- prio normaal
          RETURNING mld_melding_key
               INTO v_melding_key;

         v_errormsg := 'Fout bij toevoegen melding-object';
         INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key)
             VALUES (v_melding_key, v_deel_key);

         mld.setmeldingstatus (v_melding_key, 2, v_perslid_key);

         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key);
      WHEN UPPER (pto) LIKE 'ICTHELPDESK@%' OR UPPER (pto) LIKE 'HELPDESKICT@%'
      THEN
         -- Negeer mails vanaf adressen opgenomen in Eigen tabel met key = 801
         -- en vanaf elk ander domein dan '@houthoff.com'!
         SELECT COUNT (*)
           INTO v_count
           FROM fac_v_aanwezigusrdata
          WHERE fac_usrtab_key = 801                        -- M2M E-mail blok
                AND INSTR (UPPER (TRIM (fac_usrdata_code)), UPPER (pfrom)) > 0
                AND COALESCE (fac_usrdata_vervaldatum, SYSDATE + 1) > SYSDATE;

         IF v_count = 0 AND INSTR (UPPER (pfrom), '@HOUTHOFF.COM') > 0
         THEN
            -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom?
            v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???');
            SELECT COUNT (*)
              INTO v_count
              FROM prs_v_aanwezigperslid
             WHERE UPPER (prs_perslid_email) LIKE '%' || UPPER (pfrom) || '%';

            IF v_count = 1
            THEN
                 SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key)
                   INTO v_perslid_key, v_kostenplaats_key, v_locatie_key
                   FROM prs_v_aanwezigperslid p, prs_afdeling a,
                        (SELECT pw.prs_perslid_key, pw.prs_werkplek_key
                           FROM prs_perslidwerkplek pw
                          WHERE NOT EXISTS
                                   (SELECT 1
                                      FROM prs_perslidwerkplek
                                     WHERE prs_perslid_key = pw.prs_perslid_key
                                           AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw,
                        prs_v_werkplekperslid_gegevens wpg
                  WHERE p.prs_afdeling_key = a.prs_afdeling_key
                        AND UPPER (p.prs_perslid_email) LIKE '%' || UPPER (pfrom) || '%'
                        AND p.prs_perslid_key = pw.prs_perslid_key(+)
                        AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+)
               GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key;
            ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 21=A'dam!
               SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 21
                 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key
                 FROM prs_v_aanwezigperslid p, prs_afdeling a
                WHERE p.prs_afdeling_key = a.prs_afdeling_key
                      AND p.prs_perslid_key = c_onbekend_key;
            END IF;

            v_errormsg := 'Fout bepalen bestaande melding';
            v_exist_ticket := psubject;
            IF REGEXP_INSTR (v_exist_ticket, '\d') > 0
            THEN
               v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'!
               v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket!
            ELSE
               v_exist_ticket := 'x';
            END IF;

            SELECT COUNT (*)
              INTO v_count
              FROM mld_melding
             WHERE TO_CHAR (mld_melding_key) = v_exist_ticket;

            IF v_count = 1
            THEN                             -- Notitie bij bestaande melding!
               SELECT mld_stdmelding_key, mld_melding_key
                 INTO v_stdmelding_key, v_melding_key
                 FROM mld_melding
                WHERE TO_CHAR (mld_melding_key) = v_exist_ticket;

               v_errormsg := 'Fout toevoegen notitie';
               INSERT INTO mld_melding_note (mld_melding_key,
                                             prs_perslid_key,
                                             mld_melding_note_omschrijving,
                                             mld_melding_note_flag)
                   VALUES (v_melding_key,
                           v_perslid_key,
                           pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000),
                           0);

               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                   VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key);
            ELSE                                            -- Nieuwe melding!
               -- Bepaal de afgesproken soortmelding met key=3781=Automatische E-mail melding!
               v_errormsg := 'Fout bepalen soortmelding';
               SELECT mld_stdmelding_key
                 INTO v_stdmelding_key
                 FROM mld_stdmelding
                WHERE mld_stdmelding_key = 3781;

               -- Suggested extensions:
               -- - Check for MLDUSE-write autorisations
               -- - Parse the subject to find the appropriate stdmelding, if uniquely possible
               -- - Append (as a note?) to an existing melding if #key is found in the subject
               v_errormsg := 'Fout toevoegen melding';
               INSERT INTO mld_melding (mld_melding_module,
                                        mld_meldbron_key,
                                        mld_alg_locatie_key,
                                        mld_alg_onroerendgoed_keys,
                                        mld_melding_datum,
                                        mld_melding_omschrijving,
                                        mld_stdmelding_key,
                                        mld_melding_t_uitvoertijd,
                                        prs_kostenplaats_key,
                                        prs_perslid_key,
                                        prs_perslid_key_voor,
                                        mld_melding_status,
                                        mld_melding_spoed,
                                        mld_melding_onderwerp)
                   VALUES ('MLD',
                           4,                                         -- email
                           v_locatie_key,                     --v_locatie_key,
                           NULL,                             --v_onrgoed_keys,
                           SYSDATE,
                           pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000),
                           v_stdmelding_key,
                           NULL,
                           v_kostenplaats_key,
                           v_perslid_key,
                           v_perslid_key,
                           NULL,
                           3,                                  -- prio normaal
                           SUBSTR (psubject, 1, 80))
                RETURNING mld_melding_key
                     INTO v_melding_key;

               mld.setmeldingstatus (v_melding_key, 2, v_perslid_key);

               -- Handle workflow actions for completion.
               MLD.mld_nextworkflowstep (v_melding_key, -1);     -- -1=Initial

               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                   VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key);
            END IF;

            -- Find the lowest volgnummer of the Folder-flexfield.
            SELECT MIN (k1.mld_kenmerk_key)
              INTO v_folder_kkey
              FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1
             WHERE sm1.mld_stdmelding_key = v_stdmelding_key
                   AND sm1.mld_ins_discipline_key = td1.ins_discipline_key
                   AND k1.mld_kenmerk_verwijder IS NULL
                   AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
                   AND sk1.mld_srtkenmerk_kenmerktype = 'M'
                   AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S')
                         OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D')
                         OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T'))
                   AND NOT EXISTS
                          (SELECT 1
                             FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2
                            WHERE sm2.mld_stdmelding_key = v_stdmelding_key
                                  AND sm2.mld_ins_discipline_key = td2.ins_discipline_key
                                  AND k2.mld_kenmerk_verwijder IS NULL
                                  AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
                                  AND sk2.mld_srtkenmerk_kenmerktype = 'M'
                                  AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S')
                                       OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D')
                                       OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T'))
                                  AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer);

            IF v_folder_kkey IS NOT NULL
            THEN
               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                   VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\');
            END IF;
         ELSE
            INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                VALUES (psessionid, 'maillog', 'Mail genegeerd van afzender ' || pfrom);
         END IF;
      ELSE
         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder ');
   END CASE;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog ('PROCESSEMAIL', 'E', 'HOUT_processemail afgebroken!', '[' || pfrom || '] ' || v_errormsg);
      INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
          VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder ');
      COMMIT;
END;
/

/* Formatted on 14-1-2013 14:52:58 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW hout_v_rap_mail_error
(
   hide_f_offset,
   datum,
   hint,
   error
)
AS
   SELECT SYSDATE - imp_log_datum,
          imp_log_datum,
          imp_log_hint,
          imp_log_omschrijving
     FROM imp_log
    WHERE imp_log_applicatie = 'PROCESSEMAIL'
          AND imp_log_datum > SYSDATE - 30;


-- HOUT#27713
CREATE OR REPLACE VIEW HOUT_V_RAP_PRJ_OVZ
(
   FCLT_F_PROJECTTYPE,
   FCLT_F_Project,
   Projectnr,
   Projectomschrijving,
   Projectmanager,
   Adviseur,
   Opdrachtgever,
   Startdatum,
   Einddatum,
   Status,
   Innovatief,
   Samen,
   Duurzaam,
   Divers
)
AS
     SELECT   md.ins_discipline_omschrijving vakgroep,
              std.mld_stdmelding_omschrijving project,
              ins_srtdiscipline_prefix || m.mld_melding_key projectnr,
              mld_melding_omschrijving projectomschrijving,
              prm.prs_perslid_naam_full projectmanager,
              adv.prs_perslid_naam_full adviseur,
              (SELECT   opd.prs_perslid_naam_full
                 FROM   mld_kenmerkmelding mkm, prs_v_perslid_fullnames opd
                WHERE   m.mld_melding_key = mkm.mld_melding_key
                        AND mkm.mld_kenmerk_key = 1441 -- kenmerk opdrachtgever
                        AND opd.prs_perslid_key =
                              mkm.mld_kenmerkmelding_waarde(+))
                 opdrachtgever,
              TO_CHAR (mld_melding_datum, 'DD-MM-YYYY') startdatum,
              TO_CHAR (mld_melding_einddatum, 'DD-MM-YYYY') geplande_einddatum,
              (SELECT   fac_usrdata_omschr
                 FROM   mld_kenmerkmelding mkm, fac_usrdata
                WHERE       m.mld_melding_key = mkm.mld_melding_key
                        AND mkm.mld_kenmerk_key = 1444       -- kenmerk status
                        AND fac_usrtab_key = 661         -- eigen tabel status
                        AND fac_usrdata_key = mld_kenmerkmelding_waarde)
                 status,
              (SELECT   mkm.mld_kenmerkmelding_waarde
                 FROM   mld_kenmerkmelding mkm
                WHERE   m.mld_melding_key = mkm.mld_melding_key
                        AND mkm.mld_kenmerk_key = 1452)  -- kenmerk innovatief
                 Innovatief,
              (SELECT   mkm.mld_kenmerkmelding_waarde
                 FROM   mld_kenmerkmelding mkm
                WHERE   m.mld_melding_key = mkm.mld_melding_key
                        AND mkm.mld_kenmerk_key = 1453)       -- kenmerk samen
                 Samen,
              (SELECT   mkm.mld_kenmerkmelding_waarde
                 FROM   mld_kenmerkmelding mkm
                WHERE   m.mld_melding_key = mkm.mld_melding_key
                        AND mkm.mld_kenmerk_key = 1454)    -- kenmerk duurzaam
                 Duurzaam,
              (SELECT   mkm.mld_kenmerkmelding_waarde
                 FROM   mld_kenmerkmelding mkm
                WHERE   m.mld_melding_key = mkm.mld_melding_key
                        AND mkm.mld_kenmerk_key = 1455)      -- kenmerk divers
                 Divers
       FROM   mld_melding m,
              mld_stdmelding std,
              mld_discipline md,
              ins_srtdiscipline srt,
              prs_v_perslid_fullnames adv,
              prs_v_perslid_fullnames prm
      WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
              AND md.ins_discipline_key = std.mld_ins_discipline_key
              AND srt.ins_srtdiscipline_key = md.ins_srtdiscipline_key
              AND m.mld_melding_status NOT IN (1, 5, 6) -- alleen lopende meldingen
              AND adv.prs_perslid_key(+) = m.mld_melding_behandelaar_key
              AND prm.prs_perslid_key = m.prs_perslid_key
              AND m.fac_activiteit_key IS NULL
              AND srt.ins_srtdiscipline_key = 181 -- vakgroeptype project support centre
   ORDER BY   1, 2;

/* Formatted on 10-2-2014 14:48:12 (QP5 v5.136.908.31019) */
/*
CREATE OR REPLACE VIEW HOUT_V_CNT_EXTRA_NOTI
(
   perslid_key,
   perslid_naam
)
AS
   SELECT pf.prs_perslid_key, pf.prs_perslid_naam_full
     FROM fac_gebruikersgroep gg, prs_v_perslid_fullnames pf
    WHERE gg.fac_groep_key IN (921, 941, 961, 962, 981, 982)    -- CNT-groepen
          AND gg.prs_perslid_key = pf.prs_perslid_key;
*/

/* Formatted on 10-2-2014 14:48:12 (QP5 v5.136.908.31019) */
-- HOUT#30074 union toegevoegd. Extra notificatie op basis van flexkenmerk van kenmerksoort met key 41
CREATE OR REPLACE VIEW HOUT_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
            || ' ('
            || 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       c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.cnt_contract_verwijder IS NULL
            AND c.cnt_contract_status = 0
            AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
                             AND  cnt.cnt_getopzegdatum (c.cnt_contract_key))
   UNION
   SELECT   '',
            '',
            c.prs_perslid_key_eig,
               'Rappèl: Contract '
            || c.cnt_contract_nummer_intern
            || ' ('
            || 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       c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.cnt_contract_verwijder IS NULL
            AND c.cnt_contract_status = 0
            AND c.prs_perslid_key_eig IS NOT NULL
            AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
                             AND  cnt.cnt_getopzegdatum (c.cnt_contract_key))
   UNION
   SELECT   '',
            '',
            fac.safe_to_number (kc.cnt_kenmerkcontract_waarde),
               'Rappèl: Contract '
            || c.cnt_contract_nummer_intern
            || ' ('
            || 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_kenmerkcontract kc,
            cnt_kenmerk k,
            cnt_v_aanwezigcontract c,
            prs_bedrijf b
    WHERE       kc.cnt_kenmerk_key = k.cnt_kenmerk_key
            AND k.cnt_srtkenmerk_key = 41
            AND cnt_kenmerkcontract_verwijder IS NULL
            AND cnt_kenmerk_verwijder IS NULL
            AND kc.cnt_contract_key = c.cnt_contract_key
            AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
            AND c.cnt_contract_verwijder IS NULL
            AND c.cnt_contract_status = 0
            AND kc.cnt_kenmerkcontract_waarde IS NOT NULL
            AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
                             AND  cnt.cnt_getopzegdatum (c.cnt_contract_key));


/* Formatted on 23-9-2014 12:24:42 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW HOUT_V_GRAPH_VAKGRP_ALL24H_ICT
(
   FCLT_XAS_,
   FCLT_YAS_
--FCLT_3D_DISCIPLINE_KEY
)
AS
     SELECT md.ins_discipline_omschrijving, COUNT ( * )
       --md.ins_discipline_key
       FROM mld_melding m, mld_stdmelding sm, mld_discipline md
      WHERE     m.mld_melding_datum BETWEEN SYSDATE - 1 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 = 2                            -- ICT
   GROUP BY md.ins_discipline_omschrijving;

CREATE OR REPLACE VIEW HOUT_V_GRAPH_VAKGRP_OPEN_ICT
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_URL
--FCLT_3D_DISCIPLINE_KEY
)
AS
     SELECT 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
      WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = md.ins_discipline_key
            AND md.ins_srtdiscipline_key = 2                            -- ICT
            AND m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending
   GROUP BY md.ins_discipline_omschrijving, md.ins_discipline_key;

CREATE OR REPLACE VIEW HOUT_V_GRAPH_NEWMND_ALL12M_ICT
(
   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 = 2                            -- ICT
   GROUP BY TO_CHAR (mld_melding_datum, 'mm'),
            TO_CHAR (mld_melding_datum, 'yyyymm');

CREATE OR REPLACE VIEW HOUT_V_GRAPH_NEWDAY_ALL28D_ICT
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE
)
AS
     SELECT TO_CHAR (mld_melding_datum, 'fmdd/mm'),
            COUNT ( * ),
            TO_CHAR (mld_melding_datum, 'yyyymmdd')
       FROM mld_melding m, mld_stdmelding sm, mld_discipline md
      WHERE     m.mld_melding_datum BETWEEN TRUNC (SYSDATE - 28) 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 = 2                            -- ICT
   GROUP BY TO_CHAR (mld_melding_datum, 'fmdd/mm'),
            TO_CHAR (mld_melding_datum, 'yyyymmdd');

/*
CREATE OR REPLACE VIEW HOUT_V_GRAPH_BHNDLR_OPEN_ICT
(
   FCLT_XAS_,
   FCLT_YAS_
)
AS
     SELECT p.prs_perslid_naam_full, COUNT ( * )
       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 = 2                            -- ICT
            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
   GROUP BY p.prs_perslid_naam_full;
*/
CREATE OR REPLACE VIEW HOUT_V_GRAPH_BHNDLR_OPEN_ICT
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
     SELECT x.prs_perslid_naam_full,
            COUNT ( * ) - SUM (uitvoeringoptijd),
            SUM (uitvoeringoptijd),
            0 - COUNT ( * )
       FROM (SELECT p.prs_perslid_naam_full,
                    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 = 2                    -- ICT
                    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
   GROUP BY x.prs_perslid_naam_full
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ', 0, 0, 0 FROM DUAL;

-- HOUT#37759: Servicedesk-rapportages (incl. exports via Servicedesk-taak)
-- 57=PRSSYS
/* Formatted on 23-2-2018 15:45:15 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW hout_v_rap_ict_mld
AS
   SELECT mld_melding_key melding_key,
          meldingnummer,
          --alg_regio_omschrijving,
          alg_district_omschrijving melding_district,
          locatie melding_locatiecode,
          locatie_omschrijving melding_locatie,
          --locatie_plaats,
          alg_locatie_key fclt_3d_locatie_key,
          gebouw melding_gebouwcode,
          gebouw_naam melding_gebouw,
          verdieping melding_verdieping,
          ruimte melding_ruimtenr,
          ruimte_omschrijving melding_ruimte,
          melding_ordernr,
          kostensoortgroep,
          kostensoort,
          kostenplaats,
          kostenplaats_oms,
          melder,
          prs_perslid_key melder_key,
          afdeling,
          afdeling_omschrijving,
          afdeling_key fclt_3d_afdeling_key,
          prs_bedrijf_key bedrijf_key,
          invoerder,
          meldbron,
          soortmelding,
          ins_discipline_key fclt_3d_discipline_key,
          productgroep,
          subproductgroep,
          behandelgroep,
          behandelaar,
          behandelaar_key,
          subproductgroepgroep,
          status melding_status,
          sla_nvt,
          sla_werkdgn,
          sla_werkuren,
          sla_respijtdgn,
          sla_respijturen,
          sla_accptdgn,
          sla_accpturen,
          --plan_uitvoertijd_sla,
          datum melding_datum,
          einddatum melding_einddatum,
          acceptdatum melding_acceptdatum,
          afgemeld melding_afgemeld,
          accepted melding_accepted,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', x.t_doorlooptijd.tijdsduur,
                  NULL)
             doorlooptijd_werkdgn,
          DECODE (x.t_doorlooptijd.eenheid,
                  'U', x.t_doorlooptijd.tijdsduur,
                  NULL)
             doorlooptijd_werkuren,
          onderwerp,
          --CASE WHEN LENGTH (omschrijving) > 1000 THEN '[Zie FACILITOR]' ELSE REPLACE (REPLACE (x.vomschrijving, CHR(10), ' '), CHR(13), '') END omschrijving,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (omschrijving, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') omschrijving,
          --CASE WHEN LENGTH (opmerking) > 1000 THEN '[Zie FACILITOR]' ELSE REPLACE (REPLACE (x.melding_opmerking, CHR(10), ' '), CHR(13), '') END melding_opmerking,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (opmerking, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') melding_opmerking,
          mld_melding_spoed prioriteit,
          --DECODE (mld_melding_spoed,
          --        3, lcl.l ('lcl_mld_urg_normaal'),
          --        1, lcl.l ('lcl_mld_urg_kritiek'),
          --        2, lcl.l ('lcl_mld_urg_hoog'),
          --        4, lcl.l ('lcl_mld_urg_laag')),
          mld_melding_satisfaction rating,
          mld_melding_satisfaction_op rating_opmerking,
          mld_melding_flag bolletje,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', acceptdatum - COALESCE (accepted, afgemeld),
                  NULL)
             accept_sla_dagen,
          DECODE (x.t_doorlooptijd.eenheid,
                  'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                  NULL)
             accept_sla_uren,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'D', mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0),
             NULL)
             uitvoering_sla_dagen,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'U', ( (mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijturen, 0),
             NULL)
             uitvoering_sla_uren,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0),
             NULL)
             afspraak_sla_dagen,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'U', ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0),
             NULL)
             afspraak_sla_uren,
          CASE
             WHEN acceptdatum IS NULL
                  OR -- Dan is er geen acceptatietijd gedefinieerd en dus altijd op tijd.
                    DECODE (x.t_doorlooptijd.eenheid,
                            'D', acceptdatum - COALESCE (accepted, afgemeld),
                            0)
                    + DECODE (
                         x.t_doorlooptijd.eenheid,
                         'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                         0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             accept_sla_optijd,
          CASE
             WHEN DECODE (
                     x.t_doorlooptijd.eenheid,
                     'D', mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0),
                     0)
                  + DECODE (
                       x.t_doorlooptijd.eenheid,
                       'U', ( (mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijturen, 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             uitvoering_sla_optijd,
          CASE
             WHEN DECODE (
                     x.t_doorlooptijd.eenheid,
                     'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0),
                     0)
                  + DECODE (
                       x.t_doorlooptijd.eenheid,
                       'U', ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             afspraak_sla_optijd,
          DECODE (invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no'))
             selfservice
     FROM (SELECT m.mld_melding_key,
                  m.prs_perslid_key,
                  sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingnummer,
                  alg_regio_omschrijving,
                  alg_district_omschrijving,
                  alg_locatie_code locatie,
                  alg_locatie_omschrijving locatie_omschrijving,
                  alg_locatie_plaats locatie_plaats,
                  l.alg_locatie_key,
                  og.alg_gebouw_code gebouw,
                  og.alg_gebouw_naam gebouw_naam,
                  og.alg_verdieping_code verdieping,
                  og.alg_ruimte_nr ruimte,
                  og.alg_ruimte_omschrijving ruimte_omschrijving,
                  m.mld_melding_ordernr melding_ordernr,
                  (SELECT ksg.prs_kostensoortgrp_oms
                     FROM prs_kostensoortgrp ksg, prs_kostensoort ks
                    WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
                          AND ks.prs_kostensoort_key =
                                (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key)
                                   FROM mld_stdmelding sm, mld_discipline disc
                                  WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key
                                        AND sm.mld_stdmelding_key = s.mld_stdmelding_key))
                     kostensoortgroep,
                  (SELECT ks.prs_kostensoort_oms
                     FROM prs_kostensoort ks
                    WHERE ks.prs_kostensoort_key =
                             (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key)
                                FROM mld_stdmelding sm, mld_discipline disc
                               WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key
                                     AND sm.mld_stdmelding_key = s.mld_stdmelding_key))
                     kostensoort,
                  (SELECT k.prs_kostenplaats_nr
                     FROM prs_kostenplaats k
                    WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                     kostenplaats,
                  (SELECT k.prs_kostenplaats_omschrijving
                     FROM prs_kostenplaats k
                    WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                     kostenplaats_oms,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.prs_perslid_key)
                     melder,
                  (SELECT prs_afdeling_naam
                     FROM prs_afdeling afd, prs_perslid pp
                    WHERE afd.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling,
                  (SELECT prs_afdeling_omschrijving
                     FROM prs_afdeling afd, prs_perslid pp
                    WHERE afd.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling_omschrijving,
                  (SELECT prs_afdeling_key
                     FROM prs_perslid pp
                    WHERE pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling_key,
                  (SELECT prs_bedrijf_key
                     FROM prs_v_afdeling pva, prs_perslid pp
                    WHERE pva.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     prs_bedrijf_key,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = mld.getmeldinguser (m.mld_melding_key))
                     invoerder,
                  (SELECT mb.mld_meldbron_omschrijving
                     FROM mld_meldbron mb
                    WHERE mb.mld_meldbron_key = m.mld_meldbron_key)
                     meldbron,
                  m.mld_meldbron_key,
                  sd.ins_srtdiscipline_key ins_srtdiscipline_key,
                  sd.ins_srtdiscipline_omschrijving soortmelding,
                  md.ins_discipline_key ins_discipline_key,
                  md.ins_discipline_omschrijving productgroep,
                  s.mld_stdmelding_omschrijving subproductgroep,
                  smg.mld_stdmeldinggroep_naam subproductgroepgroep,
                  mbg.mld_behandelgroep_naam behandelgroep,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key)
                     behandelaar,
                  m.mld_melding_behandelaar_key behandelaar_key,
                  (SELECT mld_statuses_omschrijving
                     FROM mld_statuses sta
                    WHERE sta.mld_statuses_key = m.mld_melding_status)
                     status,
                  CASE
                     WHEN m.mld_melding_einddatum >
                             COALESCE (
                                fac.gettrackingdate ('MLDAFM', m.mld_melding_key),
                                fac.gettrackingdate ('MLDREJ', m.mld_melding_key),
                                SYSDATE)
                     THEN
                        1
                     ELSE
                        0
                  END
                     plan_uitvoertijd_sla,
                  CASE
                     WHEN m.mld_melding_indult = 1
                          OR s.mld_stdmelding_slabewaken = 0
                     THEN
                        1
                     ELSE
                        0
                  END
                     sla_nvt,
                  DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                          'D', m.mld_melding_t_uitvoertijd.tijdsduur,
                          NULL)
                     sla_werkdgn,
                  DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                          'U', m.mld_melding_t_uitvoertijd.tijdsduur,
                          NULL)
                     sla_werkuren,
                  DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL)
                     sla_respijtdgn,
                  DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL)
                     sla_respijturen,
                  DECODE (m.mld_melding_t_accepttijd.eenheid,
                          'D', m.mld_melding_t_accepttijd.tijdsduur,
                          NULL)
                     sla_accptdgn,
                  DECODE (m.mld_melding_t_accepttijd.eenheid,
                          'U', m.mld_melding_t_accepttijd.tijdsduur,
                          NULL)
                     sla_accpturen,
                  m.mld_melding_datum datum,
                  m.mld_melding_einddatum einddatum,
                  mld.getacceptdatum (m.mld_melding_datum, m.mld_stdmelding_key, og.alg_onroerendgoed_keys)
                     acceptdatum,
                  COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1))
                     afgemeld,
                  COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1))
                     accepted,
                  mld.getactualuitvoer (m.mld_melding_key) t_doorlooptijd,
                  m.mld_melding_onderwerp onderwerp,
                  m.mld_melding_omschrijving omschrijving,
                  m.mld_melding_opmerking opmerking,
                  m.mld_melding_spoed,
                  m.mld_melding_satisfaction,
                  m.mld_melding_satisfaction_op,
                  m.mld_melding_flag
             FROM mld_melding m,
                  mld_stdmelding s,
                  mld_discipline md,
                  ins_srtdiscipline sd,
                  alg_locatie l,
                  alg_district d,
                  alg_regio r,
                  alg_v_allonrgoed_gegevens og,
                  mld_disc_params mdp,
                  mld_behandelgroep mbg,
                  mld_stdmeldinggroep smg
            WHERE m.mld_stdmelding_key = s.mld_stdmelding_key
                  AND s.mld_ins_discipline_key = md.ins_discipline_key
                  AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND sd.ins_srtdiscipline_key IN (1, 2, 21, 41, 261) -- Servicedesk Facilities, IT Helpdesk, Repro A'dam, Repro R'dam, IT Beheer en Projecten
                  AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                  AND l.alg_district_key = d.alg_district_key(+)
                  AND d.alg_regio_key = r.alg_regio_key(+)
                  AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
                  AND md.ins_discipline_key = mdp.mld_ins_discipline_key
                  AND mdp.mld_behandelgroep_key = mbg.mld_behandelgroep_key(+)
                  AND s.mld_stdmeldinggroep_key = smg.mld_stdmeldinggroep_key(+)
                  AND m.fac_activiteit_key IS NULL
                  AND m.mld_melding_datum > TO_DATE ('05092016', 'ddmmyyyy')
                  AND m.mld_melding_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24)) x;

CREATE OR REPLACE VIEW hout_v_export_ict_mld
(
   result,
   result_order
)
AS
   SELECT    '"melding_key"'
          || ';"meldingnummer"'
          || ';"melding_district"'
          || ';"melding_locatiecode"'
          || ';"melding_locatie"'
          || ';"fclt_3d_locatie_key"'
          || ';"melding_gebouwcode"'
          || ';"melding_gebouw"'
          || ';"melding_verdieping"'
          || ';"melding_ruimtenr"'
          || ';"melding_ruimte"'
          || ';"melding_ordernr"'
          || ';"kostensoortgroep"'
          || ';"kostensoort"'
          || ';"kostenplaats"'
          || ';"kostenplaats_oms"'
          || ';"melder"'
          || ';"melder_key"'
          || ';"afdeling"'
          || ';"afdeling_omschrijving"'
          || ';"fclt_3d_afdeling_key"'
          || ';"bedrijf_key"'
          || ';"invoerder"'
          || ';"meldbron"'
          || ';"soortmelding"'
          || ';"fclt_3d_discipline_key"'
          || ';"productgroep"'
          || ';"subproductgroep"'
          || ';"behandelgroep"'
          || ';"behandelaar"'
          || ';"behandelaar_key"'
          || ';"subproductgroepgroep"'
          || ';"melding_status"'
          || ';"sla_nvt"'
          || ';"sla_werkdgn"'
          || ';"sla_werkuren"'
          || ';"sla_respijtdgn"'
          || ';"sla_respijturen"'
          || ';"sla_accptdgn"'
          || ';"sla_accpturen"'
          || ';"melding_datum"'
          || ';"melding_einddatum"'
          || ';"melding_acceptdatum"'
          || ';"melding_afgemeld"'
          || ';"melding_accepted"'
          || ';"doorlooptijd_werkdgn"'
          || ';"doorlooptijd_werkuren"'
          || ';"onderwerp"'
          || ';"omschrijving"'
          || ';"melding_opmerking"'
          || ';"prioriteit"'
          || ';"rating"'
          || ';"rating_opmerking"'
          || ';"bolletje"'
          || ';"accept_sla_dagen"'
          || ';"accept_sla_uren"'
          || ';"uitvoering_sla_dagen"'
          || ';"uitvoering_sla_uren"'
          || ';"afspraak_sla_dagen"'
          || ';"afspraak_sla_uren"'
          || ';"accept_sla_optijd"'
          || ';"uitvoering_sla_optijd"'
          || ';"afspraak_sla_optijd"'
          || ';"selfservice"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || melding_key
          || '";"'
          || meldingnummer
          || '";"'
          || melding_district
          || '";"'
          || melding_locatiecode
          || '";"'
          || melding_locatie
          || '";"'
          || fclt_3d_locatie_key
          || '";"'
          || melding_gebouwcode
          || '";"'
          || melding_gebouw
          || '";"'
          || melding_verdieping
          || '";"'
          || melding_ruimtenr
          || '";"'
          || melding_ruimte
          || '";"'
          || melding_ordernr
          || '";"'
          || kostensoortgroep
          || '";"'
          || kostensoort
          || '";"'
          || kostenplaats
          || '";"'
          || kostenplaats_oms
          || '";"'
          || melder
          || '";"'
          || melder_key
          || '";"'
          || afdeling
          || '";"'
          || afdeling_omschrijving
          || '";"'
          || fclt_3d_afdeling_key
          || '";"'
          || bedrijf_key
          || '";"'
          || invoerder
          || '";"'
          || meldbron
          || '";"'
          || soortmelding
          || '";"'
          || fclt_3d_discipline_key
          || '";"'
          || productgroep
          || '";"'
          || subproductgroep
          || '";"'
          || behandelgroep
          || '";"'
          || behandelaar
          || '";"'
          || behandelaar_key
          || '";"'
          || subproductgroepgroep
          || '";"'
          || melding_status
          || '";"'
          || sla_nvt
          || '";"'
          || sla_werkdgn
          || '";"'
          || sla_werkuren
          || '";"'
          || sla_respijtdgn
          || '";"'
          || sla_respijturen
          || '";"'
          || sla_accptdgn
          || '";"'
          || sla_accpturen
          || '";"'
          || TO_CHAR (melding_datum, 'dd-mm-yyyy hh24:mi:ss')
          || '";"'
          || TO_CHAR (melding_einddatum, 'dd-mm-yyyy hh24:mi:ss')
          || '";"'
          || TO_CHAR (melding_acceptdatum, 'dd-mm-yyyy hh24:mi:ss')
          || '";"'
          || TO_CHAR (melding_afgemeld, 'dd-mm-yyyy hh24:mi:ss')
          || '";"'
          || TO_CHAR (melding_accepted, 'dd-mm-yyyy hh24:mi:ss')
          || '";"'
          || doorlooptijd_werkdgn
          || '";"'
          || doorlooptijd_werkuren
          || '";"'
          || onderwerp
          || '";"'
          || omschrijving
          || '";"'
          || melding_opmerking
          || '";"'
          || prioriteit
          || '";"'
          || rating
          || '";"'
          || rating_opmerking
          || '";"'
          || bolletje
          || '";"'
          || accept_sla_dagen
          || '";"'
          || accept_sla_uren
          || '";"'
          || uitvoering_sla_dagen
          || '";"'
          || uitvoering_sla_uren
          || '";"'
          || afspraak_sla_dagen
          || '";"'
          || afspraak_sla_uren
          || '";"'
          || accept_sla_optijd
          || '";"'
          || uitvoering_sla_optijd
          || '";"'
          || afspraak_sla_optijd
          || '";"'
          || selfservice
          || '"',
          1
     FROM hout_v_rap_ict_mld;

CREATE OR REPLACE VIEW hout_v_rap_ict_mldtrk
AS
   SELECT m.mld_melding_key melding_key,
          --t.fac_tracking_datum tracking_datumtijd,
          TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss') tracking_datumtijd,
          sn.fac_srtnotificatie_code tracking_code,
          --REPLACE (REPLACE (t.fac_tracking_oms, CHR(10), ' '), CHR(13), '') tracking_actie,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (t.fac_tracking_oms, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') tracking_actie,
          pf.prs_perslid_naam_full tracking_door
     FROM mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          fac_tracking t,
          fac_srtnotificatie sn,
          prs_v_perslid_fullnames_all pf
    WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key IN (1, 2, 21, 41, 261) -- Servicedesk Facilities, IT Helpdesk, Repro A'dam, Repro R'dam, IT Beheer en Projecten
          AND m.mld_melding_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
          --AND sn.fac_srtnotificatie_code LIKE 'MLD%'
          AND sn.fac_srtnotificatie_xmlnode = 'melding'
          AND t.prs_perslid_key = pf.prs_perslid_key
          AND m.mld_melding_datum > TO_DATE ('05092016', 'ddmmyyyy')
          AND m.mld_melding_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24);

CREATE OR REPLACE VIEW hout_v_export_ict_mldtrk
(
   result,
   result_order
)
AS
   SELECT    '"melding_key"'
          || ';"tracking_datumtijd"'
          || ';"tracking_code"'
          || ';"tracking_actie"'
          || ';"tracking_door"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || melding_key
          || '";"'
          || tracking_datumtijd
          || '";"'
          || tracking_code
          || '";"'
          || tracking_actie
          || '";"'
          || tracking_door
          || '"',
          1
     FROM hout_v_rap_ict_mldtrk;

CREATE OR REPLACE VIEW hout_v_rap_ict_mldnot
AS
   SELECT m.mld_melding_key melding_key,
          --n.mld_melding_note_aanmaak notitie_datumtijd,
          TO_CHAR (n.mld_melding_note_aanmaak, 'dd-mm-yyyy hh24:mi:ss') notitie_datumtijd,
          --CASE WHEN LENGTH (n.mld_melding_note_omschrijving) > 1000 THEN '[Zie FACILITOR]' ELSE REPLACE (REPLACE (n.mld_melding_note_omschrijving, CHR(10), ' '), CHR(13), '') END notitie_omschrijving,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (n.mld_melding_note_omschrijving, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') notitie_omschrijving,
          pf.prs_perslid_naam_full notitie_door,
          n.mld_melding_note_flag notitie_zichtbaar
     FROM mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          mld_melding_note n,
          prs_v_perslid_fullnames_all pf
    WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key IN (1, 2, 21, 41, 261) -- Servicedesk Facilities, IT Helpdesk, Repro A'dam, Repro R'dam, IT Beheer en Projecten
          AND m.mld_melding_key = n.mld_melding_key
          AND n.prs_perslid_key = pf.prs_perslid_key
          AND m.mld_melding_datum > TO_DATE ('05092016', 'ddmmyyyy')
          AND m.mld_melding_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24);

CREATE OR REPLACE VIEW hout_v_export_ict_mldnot
(
   result,
   result_order
)
AS
   SELECT    '"melding_key"'
          || ';"notitie_datumtijd"'
          || ';"notitie_omschrijving"'
          || ';"notitie_door"'
          || ';"notitie_zichtbaar"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || melding_key
          || '";"'
          || notitie_datumtijd
          || '";"'
          || notitie_omschrijving
          || '";"'
          || notitie_door
          || '";"'
          || notitie_zichtbaar
          || '"',
          1
     FROM hout_v_rap_ict_mldnot;

CREATE OR REPLACE VIEW hout_v_rap_ict_ord
AS
   SELECT m.mld_melding_spoed prioriteit,
          m.mld_melding_key,
          x.opdracht_nummer opdracht,
          x.opdracht_type opdrachttype,
          x.opdracht_district,
          x.opdracht_locatie_code,
          x.opdracht_locatie,
          x.fclt_3d_locatie_key,
          x.opdracht_gebouwcode,
          x.opdracht_gebouw,
          x.opdracht_verdieping,
          x.opdracht_ruimtenr,
          x.opdracht_ruimte,
          sd.ins_srtdiscipline_omschrijving type,
          md.ins_discipline_omschrijving vakgroep,
          sm.mld_stdmelding_omschrijving issue,
          --CASE WHEN LENGTH (x.opdracht_omschrijving) > 1000 THEN '[Zie FACILITOR]' ELSE REPLACE (REPLACE (x.opdracht_omschrijving, CHR(10), ' '), CHR(13), '') END omschrijving,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (x.opdracht_omschrijving, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') omschrijving,
          TO_CHAR (x.opdracht_datum, 'dd-mm-yyyy') opdrachtdatum,
          TO_CHAR (x.opdracht_datum, 'hh24:mi:ss') opdrachttijd,
          (SELECT mld_statuses_omschrijving
             FROM mld_statuses
            WHERE mld_statuses_key = m.mld_melding_status)
             issuestatus,
          x.opdracht_status opdrachtstatus,
          TO_CHAR (x.opdracht_einddatum, 'dd-mm-yyyy') einddatum,
          TO_CHAR (x.opdracht_einddatum, 'hh24:mi:ss') eindtijd,
          x.opdracht_uitvoerende uitvoerende,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all
            WHERE prs_perslid_key = o.prs_perslid_key)
             behandelaar,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all
            WHERE prs_perslid_key = m.prs_perslid_key)
             aanvrager,
          --CASE WHEN LENGTH (x.opdracht_opmerking) > 1000 THEN '[Zie FACILITOR]' ELSE REPLACE (REPLACE (x.opdracht_opmerking, CHR(10), ' '), CHR(13), '') END afhandeling,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (x.opdracht_opmerking, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') afhandeling,
          x.opdracht_kosten kosten
     FROM mld_v_udr_opdracht x,
          mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd
    WHERE     x.opdracht_key = o.mld_opdr_key
          AND o.mld_melding_key = m.mld_melding_key
          AND 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 IN (1, 2, 21, 41, 261) -- Servicedesk Facilities, IT Helpdesk, Repro A'dam, Repro R'dam, IT Beheer en Projecten
          --AND m.mld_melding_datum > TO_DATE ('01092014', 'ddmmyyyy')
          --AND m.mld_melding_datum < TO_DATE ('05092016', 'ddmmyyyy')) x
          AND m.mld_melding_datum > TO_DATE ('05092016', 'ddmmyyyy')
          AND m.mld_melding_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24);

CREATE OR REPLACE VIEW hout_v_export_ict_ord
(
   result,
   result_order
)
AS
   SELECT    '"prioriteit"'
          || ';"melding_key"'
          || ';"opdracht"'
          || ';"opdrachttype"'
          || ';"melding_district"'
          || ';"melding_locatiecode"'
          || ';"melding_locatie"'
          || ';"fclt_3d_locatie_key"'
          || ';"melding_gebouwcode"'
          || ';"melding_gebouw"'
          || ';"melding_verdieping"'
          || ';"melding_ruimtenr"'
          || ';"melding_ruimte"'
          || ';"type"'
          || ';"vakgroep"'
          || ';"issue"'
          || ';"omschrijving"'
          || ';"opdrachtdatum"'
          || ';"opdrachttijd"'
          || ';"issuestatus"'
          || ';"opdrachtstatus"'
          || ';"einddatum"'
          || ';"eindtijd"'
          || ';"uitvoerende"'
          || ';"behandelaar"'
          || ';"aanvrager"'
          || ';"afhandeling"'
          || ';"kosten"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || prioriteit
          || '";"'
          || mld_melding_key
          || '";"'
          || opdracht
          || '";"'
          || opdrachttype
          || '";"'
          || opdracht_district
          || '";"'
          || opdracht_locatie_code
          || '";"'
          || opdracht_locatie
          || '";"'
          || fclt_3d_locatie_key
          || '";"'
          || opdracht_gebouwcode
          || '";"'
          || opdracht_gebouw
          || '";"'
          || opdracht_verdieping
          || '";"'
          || opdracht_ruimtenr
          || '";"'
          || opdracht_ruimte
          || '";"'
          || type
          || '";"'
          || vakgroep
          || '";"'
          || issue
          || '";"'
          || omschrijving
          || '";"'
          || opdrachtdatum
          || '";"'
          || opdrachttijd
          || '";"'
          || issuestatus
          || '";"'
          || opdrachtstatus
          || '";"'
          || einddatum
          || '";"'
          || eindtijd
          || '";"'
          || uitvoerende
          || '";"'
          || behandelaar
          || '";"'
          || aanvrager
          || '";"'
          || afhandeling
          || '";"'
          || kosten
          || '"',
          1
     FROM hout_v_rap_ict_ord;

CREATE OR REPLACE VIEW hout_v_rap_ict_ordtrk
AS
   SELECT sd.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) opdracht,
          --t.fac_tracking_datum tracking_datumtijd,
          TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss') tracking_datumtijd,
          sn.fac_srtnotificatie_code tracking_code,
          --REPLACE (REPLACE (t.fac_tracking_oms, CHR(10), ' '), CHR(13), '') tracking_actie,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (t.fac_tracking_oms, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') tracking_actie,
          pf.prs_perslid_naam_full tracking_door
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          ins_srtdiscipline sd,
          fac_tracking t,
          fac_srtnotificatie sn,
          prs_v_perslid_fullnames_all pf
    WHERE     o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND sd.ins_srtdiscipline_key IN (1, 2, 21, 41, 261) -- Servicedesk Facilities, IT Helpdesk, Repro A'dam, Repro R'dam, IT Beheer en Projecten
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
          --AND sn.fac_srtnotificatie_code LIKE 'ORD%'
          AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
          AND t.prs_perslid_key = pf.prs_perslid_key
          AND m.mld_melding_datum > TO_DATE ('05092016', 'ddmmyyyy')
          AND m.mld_melding_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24);

CREATE OR REPLACE VIEW hout_v_export_ict_ordtrk
(
   result,
   result_order
)
AS
   SELECT    '"opdracht"'
          || ';"tracking_datumtijd"'
          || ';"tracking_code"'
          || ';"tracking_actie"'
          || ';"tracking_door"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || opdracht
          || '";"'
          || tracking_datumtijd
          || '";"'
          || tracking_code
          || '";"'
          || tracking_actie
          || '";"'
          || tracking_door
          || '"',
          1
     FROM hout_v_rap_ict_ordtrk;

CREATE OR REPLACE VIEW hout_v_rap_ict_ordnot
AS
   SELECT sd.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) opdracht,
          --n.mld_opdr_note_aanmaak notitie_datumtijd,
          TO_CHAR (n.mld_opdr_note_aanmaak, 'dd-mm-yyyy hh24:mi:ss') notitie_datumtijd,
          --CASE WHEN LENGTH (n.mld_opdr_note_omschrijving) > 1000 THEN '[Zie FACILITOR]' ELSE REPLACE (REPLACE (n.mld_opdr_note_omschrijving, CHR(10), ' '), CHR(13), '') END notitie_omschrijving,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (n.mld_opdr_note_omschrijving, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') notitie_omschrijving,
          pf.prs_perslid_naam_full notitie_door
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          ins_srtdiscipline sd,
          mld_opdr_note n,
          prs_v_perslid_fullnames_all pf
    WHERE     o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND sd.ins_srtdiscipline_key IN (1, 2, 21, 41, 261) -- Servicedesk Facilities, IT Helpdesk, Repro A'dam, Repro R'dam, IT Beheer en Projecten
          AND o.mld_opdr_key = n.mld_opdr_key
          AND n.prs_perslid_key = pf.prs_perslid_key
          AND m.mld_melding_datum > TO_DATE ('05092016', 'ddmmyyyy')
          AND m.mld_melding_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24);

CREATE OR REPLACE VIEW hout_v_export_ict_ordnot
(
   result,
   result_order
)
AS
   SELECT    '"opdracht"'
          || ';"notitie_datumtijd"'
          || ';"notitie_omschrijving"'
          || ';"notitie_door"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || opdracht
          || '";"'
          || notitie_datumtijd
          || '";"'
          || notitie_omschrijving
          || '";"'
          || notitie_door
          || '"',
          1
     FROM hout_v_rap_ict_ordnot;

-- HOUT#53357: Data-export reserveringen.
CREATE OR REPLACE VIEW hout_v_rap_resbasis
AS
   SELECT rrr.res_rsv_ruimte_key key,
          rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr nummer,
          rsa.res_srtactiviteit_omschrijving activiteitsoort,
          ra.res_activiteit_omschrijving activiteit,
          --rrr.res_rsv_ruimte_omschrijving res_oms,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (rrr.res_rsv_ruimte_omschrijving, CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') res_oms,
          rrr.res_rsv_ruimte_van van,
          rrr.res_rsv_ruimte_tot tot,
          (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24 duur,
          rrr.res_rsv_ruimte_bezoekers bezoekers,
          --rrr.res_rsv_ruimte_bezoekers_shown bezoekers_shown,
          rd.ins_discipline_omschrijving catalogus,
          l.alg_locatie_code locatie_code,
          l.alg_locatie_omschrijving locatie_oms,
          g.alg_gebouw_code gebouw_code,
          v.alg_verdieping_code verdieping,
          COALESCE (rr.res_ruimte_nr, r.alg_ruimte_nr) ruimte,
          ro.res_opstelling_omschrijving opstelling,
          rro.res_ruimte_opstel_bezoekers capaciteit,
          (SELECT res_status_fo_omschrijving FROM res_status_fo WHERE res_status_fo_key = rrr.res_status_fo_key)
             fo_status,
          pfc.prs_perslid_naam_full contact,
          pfh.prs_perslid_naam_full host,
          a.prs_afdeling_naam afdeling_code,
          a.prs_afdeling_omschrijving afdeling_oms,
          k.prs_kostenplaats_nr kostenplaats_nr,
          k.prs_kostenplaats_omschrijving kostenplaats_oms,
          (SELECT res_status_bo_omschrijving FROM res_status_bo WHERE res_status_bo_key = rrr.res_status_bo_key)
             bo_status,
          --rrr.res_rsv_ruimte_prijs prijs,
          --rrr.res_rsv_ruimte_noshow no_show,
          rrr.res_rsv_ruimte_aanmaak aanmaak,
          rrr.res_rsv_ruimte_verwijder verwijder,
          rrr.res_rsv_ruimte_dirtlevel dirtlevel
     FROM res_rsv_ruimte rrr,
          res_activiteit ra,
          res_srtactiviteit rsa,
          res_ruimte_opstelling rro,
          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) rar1,
          (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key
               FROM res_alg_ruimte
              WHERE res_alg_ruimte_verwijder IS NOT NULL
           GROUP BY res_ruimte_key) rar2,
          alg_v_allonroerendgoed aog,
          alg_locatie l,
          alg_gebouw g,
          alg_verdieping v,
          alg_ruimte r,
          res_discipline rd,
          res_opstelling ro,
          prs_perslid pc,
          prs_v_perslid_fullnames_all pfc,
          prs_perslid ph,
          prs_v_perslid_fullnames_all pfh,
          prs_afdeling a,
          prs_kostenplaats k
    WHERE rrr.res_rsv_ruimte_van > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24)
          AND rrr.res_rsv_ruimte_van < TRUNC (SYSDATE)
          AND rrr.res_activiteit_key = ra.res_activiteit_key
          --AND ra.res_activiteit_verwijder IS NULL
          AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key
          AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
          AND rro.res_ruimte_key = rr.res_ruimte_key(+)
          AND rr.res_ruimte_key = rar1.res_ruimte_key(+)
          AND rr.res_ruimte_key = rar2.res_ruimte_key(+)
          AND COALESCE (rar1.alg_ruimte_key, rar2.alg_ruimte_key, rrr.alg_ruimte_key) = aog.alg_ruimte_key
          AND aog.alg_locatie_key = l.alg_locatie_key
          AND aog.alg_gebouw_key = g.alg_gebouw_key
          AND aog.alg_verdieping_key = v.alg_verdieping_key
          AND aog.alg_ruimte_key = r.alg_ruimte_key
          AND rr.res_discipline_key = rd.ins_discipline_key
          AND rro.res_opstelling_key = ro.res_opstelling_key(+)
          AND rrr.res_rsv_ruimte_contact_key = pc.prs_perslid_key
          AND pc.prs_perslid_key = pfc.prs_perslid_key
          AND rrr.res_rsv_ruimte_host_key = ph.prs_perslid_key
          AND ph.prs_perslid_key = pfh.prs_perslid_key
          AND ph.prs_afdeling_key = a.prs_afdeling_key
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+);

CREATE OR REPLACE VIEW hout_v_export_resbasis
(
   result,
   result_order
)
AS
   SELECT    '"key"'
          || ';"nummer"'
          || ';"activiteitsoort"'
          || ';"activiteit"'
          || ';"res_oms"'
          || ';"van"'
          || ';"tot"'
          || ';"duur"'
          || ';"bezoekers"'
          || ';"catalogus"'
          || ';"locatie_code"'
          || ';"locatie_oms"'
          || ';"gebouw_code"'
          || ';"verdieping"'
          || ';"ruimte"'
          || ';"opstelling"'
          || ';"capaciteit"'
          || ';"fo_status"'
          || ';"contact"'
          || ';"host"'
          || ';"afdeling_code"'
          || ';"afdeling_oms"'
          || ';"kostenplaats_nr"'
          || ';"kostenplaats_oms"'
          || ';"bo_status"'
          || ';"aanmaak"'
          || ';"verwijder"'
          || ';"dirtlevel"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || key
          || '";"'
          || nummer
          || '";"'
          || activiteitsoort
          || '";"'
          || activiteit
          || '";"'
          || res_oms
          || '";"'
          || van
          || '";"'
          || tot
          || '";"'
          || duur
          || '";"'
          || bezoekers
          || '";"'
          || catalogus
          || '";"'
          || locatie_code
          || '";"'
          || locatie_oms
          || '";"'
          || gebouw_code
          || '";"'
          || verdieping
          || '";"'
          || ruimte
          || '";"'
          || opstelling
          || '";"'
          || capaciteit
          || '";"'
          || fo_status
          || '";"'
          || contact
          || '";"'
          || host
          || '";"'
          || afdeling_code
          || '";"'
          || afdeling_oms
          || '";"'
          || kostenplaats_nr
          || '";"'
          || kostenplaats_oms
          || '";"'
          || bo_status
          || '";"'
          || aanmaak
          || '";"'
          || verwijder
          || '";"'
          || dirtlevel
          || '"',
          1
     FROM hout_v_rap_resbasis;

CREATE OR REPLACE VIEW hout_v_rap_resvoorz
AS
   SELECT rrr.res_rsv_ruimte_key key,
          rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr nummer,
          rv.van,
          rv.tot,
          rv.catalogus,
          --rv.omschrijving,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (rv.omschrijving, CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') omschrijving,
          rv.eenheid,
          rv.aantal,
          (SELECT res_status_bo_omschrijving FROM res_status_bo WHERE res_status_bo_key = rv.res_status_bo_key)
             bo_status,
          rv.aanmaak
     FROM res_rsv_ruimte rrr,
          (SELECT rra.res_rsv_ruimte_key,
                  rra.res_rsv_artikel_levering van,
                  NULL tot,
                  d.ins_discipline_omschrijving catalogus,
                  ra.res_artikel_omschrijving omschrijving,
                  ra.res_artikel_eenheid eenheid,
                  rra.res_rsv_artikel_aantal aantal,
                  --ra.res_artikel_prijs res_prijs,
                  --COALESCE (rra.res_rsv_artikel_btw, ra.res_artikel_btw) btw,
                  --rra.res_rsv_artikel_prijs res_rsv_prijs,
                  rra.res_status_bo_key,
                  rra.res_rsv_artikel_aanmaak aanmaak,
                  rra.res_rsv_artikel_verwijder verwijder,
                  rra.res_rsv_artikel_dirtlevel dirtlevel
             FROM res_v_aanwezigrsv_artikel rra,
                  res_artikel ra,
                  res_discipline d
            WHERE rra.res_artikel_key = ra.res_artikel_key
                  AND ra.res_discipline_key = d.ins_discipline_key
           UNION ALL
           SELECT rrd.res_rsv_ruimte_key,
                  rrd.res_rsv_deel_van van,
                  rrd.res_rsv_deel_tot tot,
                  d.ins_discipline_omschrijving catalogus,
                  rd.res_deel_omschrijving omschrijving,
                  rd.res_deel_eenheid eenheid,
                  1 aantal,
                  --rd.res_deel_prijs res_prijs,
                  --NULL btw,
                  --rrd.res_rsv_deel_prijs res_rsv_prijs,
                  rrd.res_status_bo_key,
                  rrd.res_rsv_deel_aanmaak aanmaak,
                  rrd.res_rsv_deel_verwijder verwijder,
                  rrd.res_rsv_deel_dirtlevel dirtlevel
             FROM res_v_aanwezigrsv_deel rrd, res_deel rd, res_discipline d
            WHERE rrd.res_deel_key = rd.res_deel_key
                  AND rd.res_discipline_key = d.ins_discipline_key) rv
    WHERE rrr.res_rsv_ruimte_van > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24)
          AND rrr.res_rsv_ruimte_van < TRUNC (SYSDATE)
          AND rrr.res_rsv_ruimte_key = rv.res_rsv_ruimte_key;

CREATE OR REPLACE VIEW hout_v_export_resvoorz
(
   result,
   result_order
)
AS
   SELECT    '"key"'
          || ';"nummer"'
          || ';"van"'
          || ';"tot"'
          || ';"catalogus"'
          || ';"omschrijving"'
          || ';"eenheid"'
          || ';"aantal"'
          || ';"bo_status"'
          || ';"aanmaak"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || key
          || '";"'
          || nummer
          || '";"'
          || van
          || '";"'
          || tot
          || '";"'
          || catalogus
          || '";"'
          || omschrijving
          || '";"'
          || eenheid
          || '";"'
          || aantal
          || '";"'
          || bo_status
          || '";"'
          || aanmaak
          || '"',
          1
     FROM hout_v_rap_resvoorz;

CREATE OR REPLACE VIEW hout_v_rap_restrk
AS
   SELECT  TO_CHAR (rrr.res_reservering_key) || '/' || TO_CHAR (rrr.res_rsv_ruimte_volgnr) reservering,
          --t.fac_tracking_datum tracking_datumtijd,
          TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy hh24:mi:ss') tracking_datumtijd,
          sn.fac_srtnotificatie_code tracking_code,
          --REPLACE (REPLACE (t.fac_tracking_oms, CHR(10), ' '), CHR(13), '') tracking_actie,
          REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (SUBSTR (t.fac_tracking_oms, 1, 1000), CHR (10), ' '), CHR (13), ' '), CHR (128), 'EUR'), '"', ''''), ';', '') tracking_actie,
          pf.prs_perslid_naam_full tracking_door
     FROM res_rsv_ruimte rrr,
          fac_tracking t,
          fac_srtnotificatie sn,
          prs_v_perslid_fullnames_all pf
    WHERE     rrr.res_rsv_ruimte_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
          --AND sn.fac_srtnotificatie_code LIKE 'RES%'
          AND sn.fac_srtnotificatie_xmlnode IN ('reservering', 'xreservering')
          AND t.prs_perslid_key = pf.prs_perslid_key
          AND rrr.res_rsv_ruimte_van > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -24)
          AND rrr.res_rsv_ruimte_van < TRUNC (SYSDATE);

CREATE OR REPLACE VIEW hout_v_export_restrk
(
   result,
   result_order
)
AS
   SELECT    '"reservering"'
          || ';"tracking_datumtijd"'
          || ';"tracking_code"'
          || ';"tracking_actie"'
          || ';"tracking_door"',
          0
     FROM DUAL
   UNION ALL
   SELECT    '"'
          || reservering
          || '";"'
          || tracking_datumtijd
          || '";"'
          || tracking_code
          || '";"'
          || tracking_actie
          || '";"'
          || tracking_door
          || '"',
          1
     FROM hout_v_rap_restrk;

/* Formatted on 7-10-2016 12:24:06 (QP5 v5.136.908.31019) */
/*
CREATE OR REPLACE VIEW hout_v_ordbo2_mdw
(
   prs_perslid_key,
   prs_perslid_naam_full,
   prs_perslid_naam_friendly
)
AS
   SELECT DISTINCT pf.*
     FROM prs_v_perslid_fullnames_all pf, fac_gebruikersgroep gg
    WHERE pf.prs_perslid_key = gg.prs_perslid_key
          AND EXISTS
                (SELECT 1
                   FROM fac_groeprechten
                  WHERE fac_groep_key = gg.fac_groep_key
                        AND fac_functie_key = 102);
*/

-- HOUT#54391: CUSTxx-notificaties naar A'dam (InterneDienstASD@houthoff.com)
--             of R'dam (InterneDienstASD@houthoff.com) bij RESNEW, RESUPD of
--             RESDEL van fiets-reserveringen voor vandaag!
CREATE OR REPLACE VIEW hout_v_noti_res_fiets
(
   sender,
   receiver,
   text,
   code,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS
   SELECT NULL sender,
          NULL receiver,
          REPLACE (
             REPLACE (
                lcl.x ('fac_srtnotificatie_oms', sn.fac_srtnotificatie_key, sn.fac_srtnotificatie_oms),
                '##KEY##', TO_CHAR (rrr.res_reservering_key) || '/' || TO_CHAR (rrr.res_rsv_ruimte_volgnr)),
             '##DESC##', TO_CHAR (rd.res_deel_omschrijving)) onderwerp,
          sn.fac_srtnotificatie_code,
          rrr.res_rsv_ruimte_key,
          NULL xkey,
          NULL xsender,
          DECODE (aog.alg_locatie_key, 21, 'InterneDienstASD@houthoff.com', 'InterneDienstRTD@houthoff.com') xemail,
          NULL xmobile,
          NULL attachments
     FROM fac_tracking t,
          res_rsv_ruimte rrr,
          res_rsv_deel rrd,
          res_deel rd,
          alg_v_allonroerendgoed aog,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE TRUNC (rrr.res_rsv_ruimte_tot) = TRUNC (SYSDATE)     -- Voor vandaag
          AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key
          AND rrd.res_deel_key = rd.res_deel_key
          AND rd.res_discipline_key = 2481                  -- Uitleen Fietsen
          AND rrr.alg_ruimte_key = aog.alg_ruimte_key     -- Losse voorziening
          AND aog.alg_locatie_key IN (21, 25)                -- A'dam of R'dam
          AND rrr.res_rsv_ruimte_key = t.fac_tracking_refkey
          AND (   (t.fac_srtnotificatie_key = 30 AND sn.fac_srtnotificatie_code = 'CUST01')  -- RESNEW
               OR (t.fac_srtnotificatie_key = 31 AND sn.fac_srtnotificatie_code = 'CUST02')  -- RESUPD
               OR (t.fac_srtnotificatie_key = 34 AND sn.fac_srtnotificatie_code = 'CUST03')) -- RESDEL
          AND nj.fac_notificatie_job_view = 'HOUT_V_NOTI_RES_FIETS'
          AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun;

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

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

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