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

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

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

/* Formatted on 4-4-2012 16:44:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW wehk_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 = 29);

CREATE OR REPLACE PROCEDURE wehk_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_count_error               NUMBER(10);
  v_count_tot                 NUMBER(10);
  v_count_import              NUMBER(10);
  v_position                  NUMBER(10);

  -- De importvelden:
  v_alg_locatie_code                VARCHAR2(256);
  v_alg_gebouw_code                 VARCHAR2(256);
  v_alg_verdieping_volgnr           VARCHAR2(256);
  v_prs_afdeling_naam               VARCHAR2(256);
  v_prs_perslid_naam                VARCHAR2(256);
  v_prs_perslid_naam_all            VARCHAR2(256);
  v_prs_perslid_voornaam            VARCHAR2(256);
  v_prs_perslid_titel               VARCHAR2(256);
  v_prs_perslid_voorletters         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);
  v_prs_perslid_oslogin             VARCHAR2(256);
  v_prs_perslid_telefoonnr          VARCHAR2(256);


  -- De importvelden:
  v_alg_verdieping_volgnr_num       NUMBER(3);
  v_alg_ruimte_nr                   VARCHAR2(256);
  v_prs_werkplek_volgnr             VARCHAR2(256);
  v_prs_perslid_tussenvoegsel       VARCHAR2(256);

  -- PRS_BEDRIJF
  CURSOR c1(p_import_key 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;

BEGIN
   DELETE FROM wehk_imp_prs;

   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;
            IF (v_count_tot = 0) THEN FETCH c1 INTO rec1; EXIT WHEN c1%NOTFOUND; END IF; -- Sla eerste regel van het importbestand over
            v_newline   := rec1. fac_imp_file_line;
            v_count_tot := v_count_tot + 1;

            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
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_locatie_code
                               );
              -- 02
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_gebouw_code
                               );
              -- 03
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_verdieping_volgnr
                               );
              -- 04
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_alg_ruimte_nr
                               );
              -- 05
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_afdeling_naam
                               );
              -- 06
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_naam_all
                               );
              -- 07
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_voornaam
                               );
              -- 08
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_titel
                               );
              -- 09
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_telefoonnr
                               );
              -- 10
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_mobiel
                               );
              -- 11
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_email
                               );
              -- 12
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_srtperslid_omschrijving
                               );
              -- 13
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_nr
                               );
              -- 14
              fac.imp_getfield (v_newline,
                                C_FIELDDELIMITOR,
                                v_prs_perslid_oslogin
                               );

              v_aanduiding := v_prs_perslid_naam_all||' - ';

              -- 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 := 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 := 'Afleiden naam niet succesvol';
              -- Markeer de positie van ',' of anders positie 257 (dwz geen komma)
              SELECT  DECODE (INSTR (v_prs_perslid_naam_all, ','), 0, 257,  INSTR (v_prs_perslid_naam_all, ',') )
              INTO    v_position
              FROM    DUAL;
              --
              SELECT SUBSTR (v_prs_perslid_naam_all,
                             1,
                             v_position - 1
                            )
              INTO  v_prs_perslid_naam
              FROM DUAL;
              -- v_position + 2 --> komma overslaan
              SELECT  TRIM(SUBSTR (v_prs_perslid_naam_all, v_position + 1))
              INTO    v_prs_perslid_naam_all
              FROM    DUAL;
              --
              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'
                                  ,'Persoon heeft geen achternaam, personeelsnummer: '||v_prs_perslid_nr
                                  ,'Naam persoon moet worden opgegeven'
                                );
                END IF;
              END IF;
              v_errorhint := 'Afleiden voorletters niet succesvol';
              -- Markeer de positie van ' ' (spatie) of anders positie 257 (dwz geen spatie)
              SELECT  DECODE (INSTR (v_prs_perslid_naam_all, ' '), 0, 257,  INSTR (v_prs_perslid_naam_all, ' ') )
              INTO    v_position
              FROM    DUAL;
              --
              SELECT SUBSTR (v_prs_perslid_naam_all,
                             1,
                             v_position - 1
                            )
              INTO  v_prs_perslid_voorletters
              FROM DUAL;
              -- v_position + 2 --> spatie overslaan
              SELECT  SUBSTR (v_prs_perslid_naam_all, v_position + 1)
              INTO    v_prs_perslid_naam_all
              FROM    DUAL;
              --
              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 := 'Ongeldige tussenvoegsel persoon';
              v_prs_perslid_tussenvoegsel := trim(v_prs_perslid_naam_all);
              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 := '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_errorhint := 'Geen voornaam gevonden, is ook niet verplicht';
                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 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) > 50
              THEN
                v_prs_perslid_email:= SUBSTR(v_prs_perslid_email,1,50);
                fac.imp_writelog(p_import_key
                                ,'W'
                                ,v_aanduiding||'Email persoon is te lang'
                                ,'Aanduiding wordt afgebroken tot <' || v_prs_perslid_email || '>'
                                );
              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;
              --
              IF v_prs_perslid_nr IS NULL
              THEN
                v_prs_perslid_nr := SUBSTR(v_prs_perslid_nr,1,16);
                fac.imp_writelog(p_import_key
                                ,'E'
                                ,v_aanduiding||'Persoonnr. persoon is te lang'
                                ,'Persoon heeft geen personeelsnummer <' || v_prs_perslid_naam || '>'
                                );
              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 persoon';

                 INSERT INTO wehk_imp_prs (
                     ALG_LOCATIE_CODE
                    ,ALG_GEBOUW_CODE
                    ,ALG_VERDIEPING_VOLGNR
                    ,ALG_RUIMTE_NR
                    ,PRS_AFDELING_NAAM
                    ,PRS_PERSLID_NAAM
                    ,PRS_PERSLID_VOORNAAM
                    ,PRS_PERSLID_VOORLETTERS
                    ,PRS_PERSLID_TUSSENVOEGSEL
                    ,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_VOORNAAM
                    ,v_PRS_PERSLID_VOORLETTERS
                    ,v_PRS_PERSLID_TUSSENVOEGSEL
                    --,DECODE(v_PRS_PERSLID_TITEL,'M','De heer',DECODE(v_PRS_PERSLID_TITEL,'V','Mevrouw',v_PRS_PERSLID_TITEL))
                    ,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
                  );

                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 ingelezen ongeldige importregels: <b>'||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 wehk_import_prs;
/

CREATE OR REPLACE PROCEDURE wehk_update_prs (
   p_import_key IN NUMBER
)
IS
   c_fielddelimitor     VARCHAR2 (1)          := ';';
   c_persoon_inactief   VARCHAR2 (30)         := 'INACTIEF: ';
   -- Groep waar personen in geplaatst worden (indien nog geen groep)
   c_groep_upper        VARCHAR2 (30)         := 'ALGEMEEN';
   c_profiel_oms        VARCHAR2 (30)         := 'ALGEMEEN';
   v_errormsg           VARCHAR2 (1000);
   v_errorhint          VARCHAR2 (1000);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_aanduiding         VARCHAR2 (200);
   v_percentage         NUMBER;
   v_count              NUMBER (10);
   v_count2             NUMBER (10);
   v_count_prev_log     NUMBER (10);
   v_ongeldig           NUMBER (1);
   v_count_update       NUMBER (10);
   v_count_error        NUMBER (10);
   v_count_tot          NUMBER (10);
   --
   v_perslid_key        NUMBER (10);
   v_afdeling_key       NUMBER (10);
   v_srtperslid_key     NUMBER (10);
   v_locatie_key        NUMBER (10);
   v_gebouw_key         NUMBER (10);
   v_verdieping_key     NUMBER (10);
   v_ruimte_key         NUMBER (10);
   v_wp_volgnr          NUMBER (3);
   v_wp_oms             VARCHAR2 (30);
   v_wp_key             NUMBER (10);
   v_groep_key          NUMBER (10);
   v_profiel_key        NUMBER (10);

   CURSOR csperslid
   IS
      SELECT   MIN (prs_perslid_naam) prs_perslid_naam,
               MIN (prs_perslid_voornaam) prs_perslid_voornaam,
               MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
          FROM wehk_imp_prs
         WHERE 1 = 1
      GROUP BY UPPER (prs_srtperslid_omschrijving);

   recsperslid          csperslid%ROWTYPE;

   CURSOR cperslid
   IS
      SELECT *
        FROM wehk_imp_prs
       WHERE 1 = 1;

   recperslid           cperslid%ROWTYPE;

   CURSOR cpersliddel
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
             p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL
         AND NOT EXISTS (
                     SELECT 1
                       FROM wehk_imp_prs ip
                      WHERE UPPER (ip.prs_perslid_nr) =
                                                      UPPER (p.prs_perslid_nr));

   recpersliddel        cpersliddel%ROWTYPE;

   -- Sluit personen uit die niet in Facilitor voorkomen. Deze konden kennelijk bij de ADD
   -- actie niet worden toegevoegd waarvoor waarschijnlijk al een logmelding gegenereerd is,
   -- vandaar dus uitsluiten van deelname.
   CURSOR cwp
   IS
      SELECT wip.*, TO_NUMBER (NULL) prs_werkplek_volgnr,
             '' prs_werkplek_omschrijving
        FROM wehk_imp_prs wip,
             (SELECT prs_perslid_nr
                FROM prs_perslid
               WHERE prs_perslid_verwijder IS NULL) p
       WHERE 1 = 1
         AND p.prs_perslid_nr = wip.prs_perslid_nr
         AND (   (wip.alg_locatie_code IS NOT NULL)
              OR (wip.alg_gebouw_code IS NOT NULL)
              OR (wip.alg_verdieping_volgnr IS NOT NULL)
              OR (wip.alg_ruimte_nr IS NOT NULL)
             );

   recwp                cwp%ROWTYPE;

   -- Alle personen met nummer (ie. de import-doelgroep) niet in een groep
   -- komen in ALGEMEEN.
   CURSOR cnogroup
   IS
      SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
             p.prs_perslid_voornaam
        FROM prs_v_aanwezigperslid p
       WHERE p.prs_perslid_nr IS NOT NULL
         AND NOT EXISTS (SELECT 1
                           FROM fac_gebruikersgroep g
                          WHERE g.prs_perslid_key = p.prs_perslid_key);
BEGIN
   v_count_prev_log := 1;

   -- Aantal aktieve personen
   SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
     INTO v_count
     FROM prs_perslid p
    WHERE 1 = 1
      AND p.prs_perslid_verwijder IS NULL
      AND p.prs_perslid_naam NOT LIKE '%INACTIEF%';

   -- Aantal personen importbestand
   SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
     INTO v_count2
     FROM wehk_imp_prs p
    WHERE 1 = 1 AND p.prs_perslid_nr IS NULL;

   v_percentage := (v_count2 / v_count2) * 100;

   IF (    ((v_percentage < 80) OR (v_percentage > 120))
       AND (v_count_prev_log > 0)
      )
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                           'Het verschil tussen de actieve personen ('
                        || v_count
                        || ') en te importeren aantallen ('
                        || v_count
                        || ') is te groot, zie specificaties',
                        'Afwijking (' || v_percentage || ')'
                       );
   ELSE
      v_errorhint := 'Fout bij bepalen profiel';

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

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

      OPEN csperslid;

      v_count_update := 0;
      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: <b>'
                || TO_CHAR (v_count_error),
                ''
               );
         COMMIT;

         CLOSE csperslid;
      END IF;

      OPEN cperslid;

      v_count_update := 0;
      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_naam
                  || '|'
                  || recperslid.prs_perslid_naam
                  || ' - ';
               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 ['
                  || recperslid.prs_afdeling_naam
                  || '] bestaat niet | personeelsnummer ['
                  || recperslid.prs_perslid_nr
                  || ']';

               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 prs_perslid_nr = recperslid.prs_perslid_nr
                  AND prs_perslid_nr IS NOT NULL;

               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_geslacht,
                               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,
                               DECODE(UPPER(recperslid.prs_perslid_titel),'M','De heer','V','Mevrouw',recperslid.prs_perslid_titel),
                               DECODE(UPPER(recperslid.prs_perslid_titel),'M',1,'V',0,NULL),
                               recperslid.prs_perslid_oslogin,
                               v_profiel_key
                              );

                  COMMIT;
                  v_count_update := v_count_update + 1;
               ELSE
                  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_titel = recperslid.prs_perslid_titel,
                         prs_perslid_titel = DECODE(UPPER(recperslid.prs_perslid_titel),'M','De heer','V','Mevrouw',recperslid.prs_perslid_titel),
                         prs_perslid_geslacht = DECODE(UPPER(recperslid.prs_perslid_titel),'M',1,'V',0,NULL),
                         prs_perslid_oslogin = recperslid.prs_perslid_oslogin,
                         fac_profiel_key =
                                      COALESCE (fac_profiel_key, v_profiel_key)
                   WHERE prs_perslid_key = v_perslid_key;

                  COMMIT;
                  v_count_update := v_count_update + 1;
               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: <b>'
                          || TO_CHAR (v_count_error),
                          ''
                         );

         CLOSE cperslid;
      END IF;

      OPEN cwp;

      v_count_update := 0;
      v_count_tot := 0;
      v_count_error := 0;

      IF cwp%ISOPEN
      THEN
         COMMIT;

         LOOP
            BEGIN
               v_aanduiding := '';
               v_errormsg := '';
               v_errorhint := '';

               FETCH cwp
                INTO recwp;

               EXIT WHEN cwp%NOTFOUND;              -- Geen werkplekken meer?
               v_count_tot := v_count_tot + 1;
               v_aanduiding :=
                     recwp.alg_locatie_code
                  || '|'
                  || recwp.alg_gebouw_code
                  || '|'
                  || recwp.alg_verdieping_volgnr
                  || '|'
                  || recwp.alg_ruimte_nr
                  || '|'
                  || recwp.prs_perslid_nr
                  || ' - ';
               v_errormsg := '';
               v_errorhint :=
                   'Fout bij bepalen persoon [' || recwp.prs_perslid_nr || ']';

               SELECT prs_perslid_key
                 INTO v_perslid_key
                 FROM prs_perslid
                WHERE prs_perslid_verwijder IS NULL
                  AND prs_perslid_nr = recwp.prs_perslid_nr
                  AND prs_perslid_nr IS NOT NULL;

               v_errorhint := 'Fout bij bepalen locatie';

               SELECT alg_locatie_key
                 INTO v_locatie_key
                 FROM alg_v_aanweziglocatie
                WHERE UPPER (alg_locatie_code) =
                                                UPPER (recwp.alg_locatie_code)
                  AND alg_locatie_verwijder IS NULL;

               v_errorhint :=
                   'Fout bij bepalen gebouw [' || recwp.alg_gebouw_code || ']';

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

               v_errorhint := 'Fout bij bepalen verdieping';

               SELECT alg_verdieping_key
                 INTO v_verdieping_key
                 FROM alg_v_aanwezigverdieping
                WHERE alg_gebouw_key = v_gebouw_key
                  AND alg_verdieping_volgnr = recwp.alg_verdieping_volgnr
                  AND alg_verdieping_verwijder IS NULL;

               v_errorhint :=
                     'Fout bij bepalen ruimte ['
                  || TO_CHAR (recwp.alg_ruimte_nr)
                  || ']';

               SELECT alg_ruimte_key
                 INTO v_ruimte_key
                 FROM alg_v_aanwezigruimte
                WHERE alg_verdieping_key = v_verdieping_key
                  AND UPPER (alg_ruimte_nr) = UPPER (recwp.alg_ruimte_nr);

               v_errorhint := 'Fout bij verhuizen naar nieuwe werkplek';
               PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'G');
            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;                                    -- Volgende werkplek ...

         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: <b>'
                         || TO_CHAR (v_count_error),
                         ''
                        );
      END IF;

      CLOSE cwp;

      OPEN cpersliddel;

      v_count_update := 0;
      v_count_tot := 0;
      v_count_error := 0;

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

               FETCH cpersliddel
                INTO recpersliddel;

               EXIT WHEN cpersliddel%NOTFOUND;
               v_count_tot := v_count_tot + 1;
               v_aanduiding :=
                     recpersliddel.prs_perslid_nr
                  || '|'
                  || recpersliddel.prs_perslid_naam
                  || '|'
                  || recpersliddel.prs_perslid_voornaam
                  || ' - ';
               v_errorhint := 'Fout bij bepalen verplichtingen';

               -- Heeft persoon actuele/toekomstige verplichtingen?
               SELECT COUNT (*)
                 INTO v_count
                 FROM prs_v_verplichting_keys r
                WHERE r.prs_perslid_key = recpersliddel.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 = recpersliddel.prs_perslid_key;

                  fac.imp_writelog (p_import_key,
                                    'I',
                                       'Persoon met nummer ['
                                    || recpersliddel.prs_perslid_nr
                                    || '] en naam ['
                                    || recpersliddel.prs_perslid_naam
                                    || ', '
                                    || recpersliddel.prs_perslid_voornaam
                                    || '] is verwijderd',
                                    'Persoon is verwijderd'
                                   );
                  COMMIT;
               ELSE
                  -- Staat persoon INACTIEF?
                  SELECT COUNT (*)
                    INTO v_count
                    FROM prs_perslid p
                   WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%'
                     AND p.prs_perslid_key = recpersliddel.prs_perslid_key;

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

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

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

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

                     fac.imp_writelog (p_import_key,
                                       'I',
                                          'Persoon met nummer ['
                                       || recpersliddel.prs_perslid_nr
                                       || '] en naam ['
                                       || recpersliddel.prs_perslid_naam
                                       || ', '
                                       || recpersliddel.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_aanduiding || v_errormsg,
                                    v_errorhint
                                   );
                  COMMIT;
            END;
         END LOOP;

         fac.imp_writelog
             (p_import_key,
              'S',
                 'Persoon verwijderen: verwerkte regels zonder foutmelding: '
              || TO_CHAR (v_count_tot - v_count_error),
              ''
             );
         fac.imp_writelog
             (p_import_key,
              'S',
                 'Persoon verwijderen: verwerkte regels met foutmelding: <b>'
              || TO_CHAR (v_count_error),
              ''
             );
         COMMIT;

         CLOSE cpersliddel;
      END IF;

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

            SELECT fac_groep_key
              INTO v_groep_key
              FROM fac_groep
             WHERE fac_groep_upper = c_groep_upper;

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

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

            COMMIT;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     ' (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;
   END IF;                                           -- Controle importbestand
END wehk_update_prs;
/

CREATE OR REPLACE PROCEDURE wehk_import_leverancier (p_import_key IN NUMBER
)
AS
BEGIN
    fac_import_ext_bedrijf(p_import_key);
END;
/

CREATE OR REPLACE PROCEDURE wehk_update_leverancier (p_import_key IN NUMBER
)
AS
BEGIN
    fac_update_bedrijf_body(p_import_key, 1);
END;
/

CREATE OR REPLACE PROCEDURE wehk_processemail (pfrom        IN VARCHAR2,
                                               pto          IN VARCHAR2,
                                               psubject     IN VARCHAR2,
                                               pbody        IN VARCHAR2,
                                               psessionid   IN VARCHAR2,
                                               pemailkey    IN NUMBER)
AS
   v_sender                    prs_perslid.prs_perslid_key%TYPE;
   v_melding_key               mld_melding.mld_melding_key%TYPE;
   v_stdmelding_key            mld_stdmelding.mld_stdmelding_key%TYPE;
   v_mld_kenmerk_key           mld_kenmerk.mld_kenmerk_key%TYPE;
   v_mld_kenmerkmelding_waarde mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
   errormsg                    fac_result.fac_result_waarde%TYPE;
   v_count                     NUMBER;
   v_error                     NUMBER;
   v_errormsg                  VARCHAR2 (100);
   v_from                      VARCHAR2 (4000);
   v_body                      VARCHAR2 (4000);
BEGIN
   errormsg := 'Geen geldige reply';
   v_error := 0;
   v_errormsg := '';

   -- Check of dit een reply is op CUST07 waar de sender coversheet@wehk.facilitor.nl is.
   CASE
      WHEN UPPER (pto) LIKE '%COVERSHEET@%'
      THEN
         errormsg := 'Geen coversheet email gevonden.';

         v_body := regexp_substr (pbody, '[A-z]*');
         errormsg := 'Geen geldige reply gevonden, dit moet JA of NEE zijn.';

         v_melding_key := REGEXP_SUBSTR (psubject,
                                         '[[:digit:]]{1,}',
                                         1,
                                         1,
                                        'i');
         errormsg := 'Error code 1.';

         SELECT mld_stdmelding_key
         INTO v_stdmelding_key
         FROM mld_melding
         WHERE mld_melding_key = v_melding_key;

         errormsg := 'Error code 2.';

         SELECT mld_kenmerk_key
         INTO v_mld_kenmerk_key
         FROM mld_kenmerk
         WHERE mld_stdmelding_key = v_stdmelding_key
         AND mld_srtkenmerk_key IN (1831, 1832, 1833, 1834, 1835);

         errormsg := 'Error code 3.';

         CASE WHEN UPPER (v_body) LIKE '%JA%'
         THEN
             v_mld_kenmerkmelding_waarde := 41;
         WHEN UPPER (v_body) LIKE '%NEE%'
         THEN
             v_mld_kenmerkmelding_waarde := 42;
         END CASE;

         errormsg := 'Error code 4.';

         INSERT INTO mld_kenmerkmelding
                                 (mld_melding_key,
                                 mld_kenmerk_key,
                                 mld_kenmerkmelding_waarde)
             VALUES (v_melding_key,
                     v_mld_kenmerk_key,                                                            -- email
                     v_mld_kenmerkmelding_waarde)
          RETURNING mld_melding_key
               INTO v_melding_key;

         errormsg := 'Error code 5.';

         UPDATE mld_melding
         SET    mld_melding_status = 5
         WHERE  mld_melding_key = v_melding_key;

         errormsg := '(0x165)';
         mld.setmeldingstatus (v_melding_key, 2, v_sender);
   END CASE;

EXCEPTION
   WHEN OTHERS
   THEN
      INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
          VALUES (psessionid,
                  'maillog',
                  'Database fout - Neem contact op met uw systeembeheerder ' || errormsg);

      fac.writelog ('PROCESSEMAIL',
                    'E',
                    'Mail kon niet ingelezen worden afzender:' || pfrom || '[' || errormsg || ']',
                    'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')');
END;
/

/* Formatted on 2008/07/31 14:25 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW wehk_v_rap_ruimteoverzicht (fclt_f_locatie,
                                                   fclt_f_gebouw,
                                                   fclt_f_verdieping,
                                                   ruimtenr,
                                                   omschrijving,
                                                   fclt_f_ruimtefunctie,
                                                   fclt_f_vloersoort,
                                                   teken_opp,
                                                   fclt_f_schoonmaak,
                                                   fclt_f_programma
                                                  )
AS
   (SELECT a.alg_locatie_code, a.alg_gebouw_code, a.alg_verdieping_code,
           a.alg_ruimte_nr, a.alg_ruimte_omschrijving, a.ruimtefunctie,
           b.vloersoort, a.opp, c.schoonmaak, d.programma
      FROM (SELECT r.alg_ruimte_key, r.alg_ruimte_nr,
                   r.alg_ruimte_omschrijving, v.alg_verdieping_code,
                   g.alg_gebouw_code, l.alg_locatie_code,
                   sr.alg_srtruimte_upper ruimtefunctie,
                   r.alg_ruimte_bruto_vloeropp opp
              FROM alg_v_aanwezigruimte r,
                   alg_verdieping v,
                   alg_gebouw g,
                   alg_locatie l,
                   alg_srtruimte sr
             WHERE 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 ok.alg_onrgoed_key, ud.fac_usrdata_omschr vloersoort
              FROM alg_onrgoedkenmerk ok, fac_usrdata ud
             WHERE ok.alg_kenmerk_key = 1020                     -- vloersoort
               AND ok.alg_onrgoed_niveau = 'R'
               AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key) b
           ON a.alg_ruimte_key = b.alg_onrgoed_key
           LEFT JOIN
           (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr schoonmaak
              FROM alg_onrgoedkenmerk ok, fac_usrdata ud
             WHERE ok.alg_kenmerk_key = 1041                     -- schoonmaak
               AND ok.alg_onrgoed_niveau = 'R'
               AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key) c
           ON a.alg_ruimte_key = c.alg_onrgoed_key
           LEFT JOIN
           (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr programma
              FROM alg_onrgoedkenmerk ok, fac_usrdata ud
             WHERE ok.alg_kenmerk_key = 1060            -- schoonmaakprogramma
               AND ok.alg_onrgoed_niveau = 'R'
               AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key) d
           ON a.alg_ruimte_key = d.alg_onrgoed_key
           )
/

CREATE OR REPLACE VIEW wehk_v_thema_sch_prog (alg_ruimte_key, waarde)
AS
   SELECT a.alg_ruimte_key, b.programma
     FROM (SELECT r.alg_ruimte_key
             FROM alg_v_aanwezigruimte r) a
          LEFT JOIN
          (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr programma
             FROM alg_onrgoedkenmerk ok, fac_usrdata ud
            WHERE ok.alg_kenmerk_key = 1060             -- schoonmaakprogramma
              AND ok.alg_onrgoed_niveau = 'R'
              AND ok.alg_onrgoedkenmerk_verwijder IS NULL
              AND ok.alg_onrgoedkenmerk_waarde = ud.fac_usrdata_key) b
          ON a.alg_ruimte_key = b.alg_onrgoed_key
/

/* Formatted on 19-8-2009 12:30:30 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW wehk_v_ophaalafleverbedr
(
   prs_bedrijf_key,
   bedrijfsgegevens
)
AS
   SELECT   b.prs_bedrijf_key,
               b.prs_bedrijf_naam
            || ','
            || COALESCE (cp.prs_contactpersoon_naam, '-')
            || ','
            || COALESCE (cp.prs_contactpersoon_telefoon_1,
                         cp.prs_contactpersoon_telefoon_2,
                         '-')
            || ','
            || COALESCE (b.prs_bedrijf_bezoek_adres, '-')
            || ','
            || COALESCE (b.prs_bedrijf_bezoek_postcode, '-')
            || ' '
            || COALESCE (b.prs_bedrijf_bezoek_plaats, '-')
     FROM   prs_v_aanwezigbedrijf b,
            prs_v_aanwezigkenmerklink kl,
            prs_contactpersoon cp
    WHERE       b.prs_bedrijf_uitvoerende = 1
            AND b.prs_bedrijf_key = kl.prs_link_key
            AND kl.prs_kenmerk_key = 1040                     -- Vervoersadres
            AND kl.prs_kenmerklink_waarde = 41                           -- Ja
            AND b.prs_bedrijf_key = cp.prs_bedrijf_key(+)
/

/* Formatted on 27-8-2009 13:30:00 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW wehk_v_perslid_info
(
   prs_perslid_key,
   prs_perslid_info
)
AS
   SELECT   prs_perslid_key,
            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 || ')')
            || ' / '
            || a.prs_afdeling_naam
            || ' / '
            || sp.prs_srtperslid_omschrijving
               prs_perslid_info
     FROM   prs_v_aanwezigperslid p, prs_afdeling a, prs_srtperslid sp
    WHERE   p.prs_afdeling_key = a.prs_afdeling_key(+)
            AND p.prs_srtperslid_key = sp.prs_srtperslid_key(+)
/

/* Formatted on 1-12-2009 16:44:12 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW wehk_v_rap_contractdetails
(
   hide_f_einddatum,
   hide_f_opzegdatum,
   cnt_nr,
   fclt_f_cnt_soort,
   fclt_f_beschrijving,
   mantel_nr,
   fclt_f_ingangsdatum,
   fclt_f_rappeldatum,
   fclt_f_opzegdatum,
   fclt_f_einddatum,
   uitvoerder,
   fclt_f_eigenaar,
   fclt_f_beheerder,
   cnt_bedrag,
   fclt_f_type_ovkomst,
   fclt_f_uurtarief,
   fclt_f_bet_cond,
   fclt_f_eindemnd,
   fclt_f_bet_term,
   fclt_f_lev_nr,
   fclt_f_korting,
   fclt_f_cnt_vot,
   fclt_f_directeur,
   fclt_f_ink_voorw
)
AS
   SELECT   TO_CHAR (basis.einddatum, 'yyyymmdd'),
            TO_CHAR (basis.opzegdatum, 'yyyymmdd'),
            basis.cnt_nr,
            basis.cnt_soort,
            basis.beschrijving,
            basis.mantel_nr,
            TO_CHAR (basis.ingangsdatum, 'dd-mm-yyyy'),
            TO_CHAR (basis.rappeldatum, 'dd-mm-yyyy'),
            TO_CHAR (basis.opzegdatum, 'dd-mm-yyyy'),
            TO_CHAR (basis.einddatum, 'dd-mm-yyyy'),
            basis.prs_bedrijf_naam,
            basis.cnt_eigenaar,
            basis.cnt_beheerder,
            REPLACE (
               TO_CHAR (fac.safe_to_number (basis.bedrag), '999999990D99'),
               '.',
               ','
            ),
            basis.type_ovkomst,
            REPLACE (
               TO_CHAR (fac.safe_to_number (basis.cnt_contract_uurloon), '990D99'),
               '.',
               ','
            ),
            basis.bet_cond,
            basis.eindemnd,
            basis.bet_term,
            basis.lev_nr,
            basis.korting,
            basis.cnt_vot,
            basis.directeur,
            basis.ink_voorw
     FROM   (SELECT   c.cnt_contract_nummer_intern cnt_nr,
                      td.ins_discipline_omschrijving cnt_soort,
                      c.cnt_contract_uurloon,
                      c.cnt_contract_omschrijving beschrijving,
                      mc.cnt_contract_nummer_intern mantel_nr,
                      c.cnt_contract_looptijd_van ingangsdatum,
                      cnt.cnt_getrappeldatum (c.cnt_contract_key) rappeldatum,
                      cnt.cnt_getopzegdatum (c.cnt_contract_key) opzegdatum,
                      c.cnt_contract_looptijd_tot einddatum,
                      b.prs_bedrijf_naam,
                         a.prs_afdeling_upper
                      || '-'
                      || a.prs_afdeling_omschrijving
                         cnt_eigenaar,
                      p.prs_perslid_naam_full cnt_beheerder,
                      c.cnt_contract_kosten bedrag,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 241
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         type_ovkomst,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 181
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         bet_cond,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 121
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         eindemnd,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 61
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         bet_term,
                      (SELECT   kc.cnt_kenmerkcontract_waarde
                         FROM   cnt_kenmerkcontract kc, cnt_kenmerk k
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 203)
                         lev_nr,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 161
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         korting,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 202
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         cnt_vot,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 201
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         directeur,
                      (SELECT   ud.fac_usrdata_omschr
                         FROM   cnt_kenmerkcontract kc,
                                cnt_kenmerk k,
                                fac_usrdata ud
                        WHERE       kc.cnt_contract_key = c.cnt_contract_key
                                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                AND k.cnt_srtkenmerk_key = 221
                                AND fac.safe_to_number (
                                      kc.cnt_kenmerkcontract_waarde
                                   ) = ud.fac_usrdata_key)
                         ink_voorw
               FROM   cnt_v_aanwezigcontract c,
                      cnt_contract mc,
                      ins_tab_discipline td,
                      prs_afdeling a,
                      prs_v_perslid_fullnames p,
                      prs_bedrijf b
              WHERE       c.ins_discipline_key = td.ins_discipline_key
                      AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+)
                      AND c.prs_afdeling_key_eig = a.prs_afdeling_key
                      AND c.prs_perslid_key_beh = p.prs_perslid_key
                      AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) basis;

/* Formatted on 12-11-2009 13:52:28 (QP5 v5.115.810.9015) */
-- PACKAGE voor WEHK specifieke rapportages!
CREATE OR REPLACE PACKAGE WEHK_RAP
AS
   TYPE t_cursor IS REF CURSOR;

   PROCEDURE wehk_rap_cntopeind (user_key      IN     NUMBER,
                                 p_datum_van   IN     VARCHAR2,
                                 p_datum_tot   IN     VARCHAR2,
                                 p_cursor         OUT t_cursor);

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

/* Formatted on 12-11-2009 13:58:28 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PACKAGE BODY wehk_rap
AS
   --
   -- Algemene procedures en functies.
   --
   -- Contracten op einddatum in een bepaalde periode.
   PROCEDURE wehk_rap_cntopeind (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   hide_f_einddatum,
                    cnt_nr,
                    fclt_f_cnt_soort,
                    fclt_f_beschrijving,
                    mantel_nr,
                    fclt_f_ingangsdatum,
                    fclt_f_rappeldatum,
                    fclt_f_opzegdatum,
                    fclt_f_einddatum,
                    uitvoerder,
                    fclt_f_eigenaar,
                    fclt_f_beheerder,
                    cnt_bedrag,
                    fclt_f_type_ovkomst,
                    fclt_f_bet_cond,
                    fclt_f_eindemnd,
                    fclt_f_bet_term,
                    fclt_f_lev_nr,
                    fclt_f_korting,
                    fclt_f_cnt_vot,
                    fclt_f_directeur,
                    fclt_f_ink_voorw
             FROM   wehk_v_rap_contractdetails
            WHERE   TO_DATE (fclt_f_einddatum, 'dd-mm-yyyy') BETWEEN v_datum_van
                                                                 AND  v_datum_tot
         ORDER BY   hide_f_einddatum;
   END;

   -- Contracten op opzegdatum in een bepaalde periode.
   PROCEDURE wehk_rap_cntopopzeg (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   hide_f_opzegdatum,
                    cnt_nr,
                    fclt_f_cnt_soort,
                    fclt_f_beschrijving,
                    mantel_nr,
                    fclt_f_ingangsdatum,
                    fclt_f_rappeldatum,
                    fclt_f_opzegdatum,
                    fclt_f_einddatum,
                    uitvoerder,
                    fclt_f_eigenaar,
                    fclt_f_beheerder,
                    cnt_bedrag,
                    fclt_f_type_ovkomst,
                    fclt_f_bet_cond,
                    fclt_f_eindemnd,
                    fclt_f_bet_term,
                    fclt_f_lev_nr,
                    fclt_f_korting,
                    fclt_f_cnt_vot,
                    fclt_f_directeur,
                    fclt_f_ink_voorw
             FROM   wehk_v_rap_contractdetails
            WHERE   TO_DATE (fclt_f_opzegdatum, 'dd-mm-yyyy') BETWEEN v_datum_van
                                                                  AND  v_datum_tot
         ORDER BY   hide_f_opzegdatum;
   END;
END;
/

-- Contractkenmerken vullen met waarden uit Coversheet meldingen
CREATE OR REPLACE PROCEDURE wehk_export_contractopvoer (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2,
   p_filedir    IN VARCHAR2,
   p_filename   IN VARCHAR2)
AS
   CURSOR wehk_c_opvoer -- Contracten die het meldingnummer van een coversheetmelding hebben in het kenmerkveld, conform kenmerkkeys op PRODUCTIE!!!
   IS
     SELECT DISTINCT *
        FROM (SELECT c.cnt_contract_key,
                     m.mld_melding_key,
                     mk.mld_kenmerk_key,
                     mk.mld_kenmerkmelding_waarde,
                     DECODE (mk.mld_kenmerk_key,
                             2565, 1200,
                             2531, 1401,
                             2594, 1402,
                             2534, 1403,
                             2598, 1184,
                             2587, 1194,
                             2521, 1178)
                        cntkenmerkkey
                FROM cnt_contract c,
                     mld_melding m,
                     mld_kenmerkmelding mk,
                     cnt_kenmerkcontract ck
               WHERE m.mld_melding_start_key = ck.cnt_kenmerkcontract_waarde
                     AND ck.cnt_kenmerk_key = 1482           -- meldingsnummer
                     AND m.mld_melding_status = 5            -- afgemeld, dus coversheet is goedgekeurd
                     AND m.mld_stdmelding_key = 1601         -- coversheet en contract
                     AND ck.cnt_contract_key = c.cnt_contract_key
                     AND mk.mld_melding_key = m.mld_melding_key) sub
       WHERE sub.cntkenmerkkey IS NOT NULL
       AND NOT EXISTS                                        -- Alleen kenmerken die nog leeg zijn
                      (SELECT 1
                         FROM cnt_kenmerkcontract ck
                       WHERE ck.cnt_contract_key = sub.cnt_contract_key
                             AND ck.cnt_kenmerk_key = sub.cntkenmerkkey);
BEGIN
   FOR rec IN wehk_c_opvoer
   LOOP
      INSERT INTO cnt_kenmerkcontract (cnt_contract_key,
                                       cnt_kenmerk_key,
                                       cnt_kenmerkcontract_waarde,
                                       cnt_kenmerkcontract_aanmaak,
                                       cnt_kenmerkcontract_wijzig)
          VALUES (rec.cnt_contract_key,
                  rec.cntkenmerkkey,
                  rec.mld_kenmerkmelding_waarde,
                  SYSDATE,
                  SYSDATE);
   END LOOP;
END;
/

/* Formatted on 17-12-2009 16:10:32 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW wehk_v_rap_mld_schade
(
   hide_f_melddatum,
   fclt_f_maand,
   fclt_f_locatie,
   fclt_f_melding_nr,
   fclt_f_melding,
   fclt_f_status,
   fclt_f_ev_nr,
   fclt_f_rit_nr,
   fclt_f_rit_datum,
   vvp_waarde,
   fclt_f_art_oms,
   fclt_f_art_nr,
   fclt_f_eigen_risico,
   fclt_f_klant_nr,
   opkoop_waarde,
   fclt_f_schade_intern,
   fclt_f_soort_schade,
   fclt_f_vervoerder,
   finance_waarde,
   wehkamp_waarde
)
AS
   SELECT   m.mld_melding_datum,
            TO_CHAR (m.mld_melding_datum, 'yyyy-mm'),
            l.alg_locatie_code,
            TO_CHAR (m.mld_melding_key),
            sm.mld_stdmelding_omschrijving,
            s.mld_statuses_omschrijving,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 543)
               ev_nr,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 541)
               rit_nr,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 581)
               rit_datum,
            (SELECT   fac.safe_to_number (km.mld_kenmerkmelding_waarde)
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 624)
               vvp_waarde,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 562)
               art_oms,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 561)
               art_nr,
            (SELECT   ud.fac_usrdata_omschr
               FROM   mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 546
                      AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) =
                            ud.fac_usrdata_key)
               eigen_risico,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 544)
               klant_nr,
            COALESCE (
               (  SELECT   SUM (fac.safe_to_number (ko.mld_kenmerkopdr_waarde))
                    FROM   mld_kenmerkopdr ko, mld_opdr o, mld_kenmerk k
                   WHERE       ko.mld_opdr_key = o.mld_opdr_key
                           AND o.mld_typeopdr_key = 681
                           AND o.mld_melding_key = m.mld_melding_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 623
                GROUP BY   ko.mld_opdr_key),
               (SELECT   fac.safe_to_number (
                            REPLACE (km.mld_kenmerkmelding_waarde, ',', '.')
                         )
                  FROM   mld_kenmerkmelding km, mld_kenmerk k
                 WHERE       km.mld_melding_key = m.mld_melding_key
                         AND km.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 564)
            )
               opkoop_waarde,
            COALESCE (
               (  SELECT   MAX (ud.fac_usrdata_omschr)
                    FROM   mld_kenmerkopdr ko,
                           mld_opdr o,
                           mld_kenmerk k,
                           fac_usrdata ud
                   WHERE       ko.mld_opdr_key = o.mld_opdr_key
                           AND o.mld_melding_key = m.mld_melding_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 565
                           AND fac.safe_to_number (ko.mld_kenmerkopdr_waarde) =
                                 ud.fac_usrdata_key
                GROUP BY   ko.mld_opdr_key),
               (SELECT   ud.fac_usrdata_omschr
                  FROM   mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
                 WHERE       km.mld_melding_key = m.mld_melding_key
                         AND km.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 565
                         AND fac.safe_to_number (
                               km.mld_kenmerkmelding_waarde
                            ) = ud.fac_usrdata_key)
            )
               schade_intern,
            (SELECT   km.mld_kenmerkmelding_waarde
               FROM   mld_kenmerkmelding km, mld_kenmerk k
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 425)
               soort_schade,
            (SELECT   ud.fac_usrdata_omschr
               FROM   mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
              WHERE       km.mld_melding_key = m.mld_melding_key
                      AND km.mld_kenmerk_key = k.mld_kenmerk_key
                      AND k.mld_srtkenmerk_key = 566
                      AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) =
                            ud.fac_usrdata_key)
               vervoerder,
            COALESCE (
               (  SELECT   SUM (fac.safe_to_number (ko.mld_kenmerkopdr_waarde))
                    FROM   mld_kenmerkopdr ko, mld_opdr o, mld_kenmerk k
                   WHERE       ko.mld_opdr_key = o.mld_opdr_key
                           AND o.mld_typeopdr_key = 681
                           AND o.mld_melding_key = m.mld_melding_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 622
                GROUP BY   ko.mld_opdr_key),
               (SELECT   fac.safe_to_number (
                            REPLACE (km.mld_kenmerkmelding_waarde, ',', '.')
                         )
                  FROM   mld_kenmerkmelding km, mld_kenmerk k
                 WHERE       km.mld_melding_key = m.mld_melding_key
                         AND km.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 563)
            )
               finance_waarde,
            COALESCE (
               (  SELECT   SUM (fac.safe_to_number (ko.mld_kenmerkopdr_waarde))
                    FROM   mld_kenmerkopdr ko, mld_opdr o, mld_kenmerk k
                   WHERE       ko.mld_opdr_key = o.mld_opdr_key
                           AND o.mld_typeopdr_key = 681
                           AND o.mld_melding_key = m.mld_melding_key
                           AND ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = 641
                GROUP BY   ko.mld_opdr_key),
               (SELECT   fac.safe_to_number (
                            REPLACE (km.mld_kenmerkmelding_waarde, ',', '.')
                         )
                  FROM   mld_kenmerkmelding km, mld_kenmerk k
                 WHERE       km.mld_melding_key = m.mld_melding_key
                         AND km.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = 569)
            )
               wehkamp_waarde
     FROM   mld_melding m,
            mld_stdmelding sm,
            mld_statuses s,
            alg_locatie l
    WHERE       TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'yyyymm')) > 200909
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = 621                      -- schade
            AND m.mld_melding_status = s.mld_statuses_key
            AND m.mld_alg_locatie_key = l.alg_locatie_key;

-- WEHK#20053 - Notificaties naar specifiek geregistreerde personen binnen de
-- afdeling gedefinieerd als contracteigenaar en - indien ongedefinieerd -
-- naar de persoon gedefinieerd als contractbeheerder. Tenminste, als vandaag
-- is de rappeldatum!
/*
CREATE OR REPLACE VIEW wehk_v_noti_cntreminder
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey
)
AS
   SELECT   'CUST01',
            '',
            COALESCE (y.prs_eigenaar, x.prs_beheerder),
               'Rappel: Contract '
            || x.cnt_contract_nummer_intern
            || ' ('
            || x.cnt_contract_omschrijving
            || ' '
            || x.prs_bedrijf_naam
            || ')'
            || ' moet uiterlijk per '
            || TO_CHAR (cnt.cnt_getopzegdatum (x.cnt_contract_key),
                        'dd-mm-yyyy')
            || ' worden verlengd of opgezegd.',
            x.cnt_contract_key,
            x.cnt_contract_nummer_intern,
            NULL,
            NULL
     FROM      (SELECT   c.prs_afdeling_key_eig afd_eigenaar,
                         c.prs_perslid_key_beh prs_beheerder,
                         c.cnt_contract_nummer_intern,
                         c.cnt_contract_omschrijving,
                         b.prs_bedrijf_naam,
                         c.cnt_contract_key
                  FROM   cnt_v_aanwezigcontract c, prs_bedrijf b
                 WHERE   c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
                   AND c.cnt_contract_status = 0
                         --AND SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
                         --                 AND  cnt.cnt_getopzegdatum (c.cnt_contract_key)
                         AND TRUNC (
                               cnt.cnt_getRappeldatum (c.cnt_contract_key)
                            ) = TRUNC (SYSDATE)) x
            LEFT JOIN
               (SELECT   kl.prs_link_key afd_eigenaar,
                         fac.safe_to_number (kl.prs_kenmerklink_waarde)
                            prs_eigenaar
                  FROM   prs_v_aanwezigkenmerklink kl
                 WHERE   kl.prs_kenmerk_key IN (1100, 1101, 1140) -- Eigenaar 1 + 2 + 3
                         AND kl.prs_kenmerklink_niveau = 'A') y
            ON x.afd_eigenaar = y.afd_eigenaar;
*/
-- WEHK#39464 - Notificaties naar Contracteigenaar functie, Contractbeheerder
-- en - indien gedefineerd voor contractsoort - Contracteigenaar procurement,
-- tenminste, als vandaag is de rappeldatum!
/* Formatted on 4-7-2017 14:52:08 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW wehk_v_noti_cntreminder
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT 'CUST01',
          NULL,
          c.prs_perslid_key_eig,
             'Rappel: 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,
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE c.prs_perslid_key_eig IS NOT NULL
          AND c.cnt_contract_status = 0
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND TRUNC (cnt.cnt_getRappeldatum (c.cnt_contract_key)) = TRUNC (SYSDATE)
   UNION ALL
   SELECT 'CUST01',
          NULL,
          c.prs_perslid_key_beh,
             'Rappel: 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,
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE c.cnt_contract_status = 0
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND TRUNC (cnt.cnt_getRappeldatum (c.cnt_contract_key)) = TRUNC (SYSDATE)
   UNION ALL
   SELECT 'CUST01',
          NULL,
          fac.safe_to_number (epkc.cnt_kenmerkcontract_waarde),
             'Rappel: 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,
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_kenmerkcontract epkc, cnt_kenmerk epk
    WHERE c.cnt_contract_status = 0
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_key = epkc.cnt_contract_key
          AND epkc.cnt_kenmerkcontract_verwijder IS NULL
          AND epkc.cnt_kenmerk_key = epk.cnt_kenmerk_key
          AND epk.cnt_kenmerk_verwijder IS NULL
          AND epk.cnt_srtkenmerk_key = 301     -- Contracteigenaar procurement
          AND TRUNC (cnt.cnt_getRappeldatum (c.cnt_contract_key)) = TRUNC (SYSDATE)
   UNION ALL
   SELECT 'CUST01',
          NULL,
          fac.safe_to_number (ud.fac_usrdata_code), -- Te notificeren PRS_PERSLID_KEY voor Top50-contracten!
             'Rappel: 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,
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_kenmerkcontract hotkc, cnt_kenmerk hotk, fac_usrdata ud
    WHERE c.cnt_contract_status = 0
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_key = hotkc.cnt_contract_key
          AND hotkc.cnt_kenmerkcontract_verwijder IS NULL
          AND hotkc.cnt_kenmerk_key = hotk.cnt_kenmerk_key
          AND hotk.cnt_kenmerk_verwijder IS NULL
          AND hotk.cnt_srtkenmerk_key = 481                     -- Top50 spend
          AND ud.fac_usrtab_key = 741
          AND TRUNC (cnt.cnt_getRappeldatum (c.cnt_contract_key)) = TRUNC (SYSDATE)
   UNION ALL
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          c.prs_perslid_key_eig,
          REPLACE (
             REPLACE (
                REPLACE (
                   REPLACE (sn.fac_srtnotificatie_oms,
                            '##NR##', c.cnt_contract_nummer_intern),
                   '##OMS##', c.cnt_contract_omschrijving),
                '##BEDR##', b.prs_bedrijf_naam),
             '##DAT##', prkc.cnt_kenmerkcontract_waarde),
          c.cnt_contract_key,
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_kenmerkcontract prkc, cnt_kenmerk prk, fac_srtnotificatie sn
    WHERE c.prs_perslid_key_eig IS NOT NULL
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_status = 0
          AND c.cnt_contract_key = prkc.cnt_contract_key
          AND prkc.cnt_kenmerkcontract_verwijder IS NULL
          AND prkc.cnt_kenmerk_key = prk.cnt_kenmerk_key
          AND prk.cnt_kenmerk_verwijder IS NULL
          AND prk.cnt_srtkenmerk_key = 315   -- Performance review rappeldatum
          AND fac.safe_to_date (prkc.cnt_kenmerkcontract_waarde, 'dd-mm-yyyy') = TRUNC (SYSDATE)
          AND sn.fac_srtnotificatie_code = 'CUST04'
   UNION ALL
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          c.prs_perslid_key_beh,
          REPLACE (
             REPLACE (
                REPLACE (
                   REPLACE (sn.fac_srtnotificatie_oms,
                            '##NR##', c.cnt_contract_nummer_intern),
                   '##OMS##', c.cnt_contract_omschrijving),
                '##BEDR##', b.prs_bedrijf_naam),
             '##DAT##', prkc.cnt_kenmerkcontract_waarde),
          c.cnt_contract_key,
          NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_kenmerkcontract prkc, cnt_kenmerk prk, fac_srtnotificatie sn
    WHERE c.cnt_contract_status = 0
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_key = prkc.cnt_contract_key
          AND prkc.cnt_kenmerkcontract_verwijder IS NULL
          AND prkc.cnt_kenmerk_key = prk.cnt_kenmerk_key
          AND prk.cnt_kenmerk_verwijder IS NULL
          AND prk.cnt_srtkenmerk_key = 315   -- Performance review rappeldatum
          AND fac.safe_to_date (prkc.cnt_kenmerkcontract_waarde, 'dd-mm-yyyy') = TRUNC (SYSDATE)
          AND sn.fac_srtnotificatie_code = 'CUST04'
   UNION ALL
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          fac.safe_to_number (epkc.cnt_kenmerkcontract_waarde),
          REPLACE (
             REPLACE (
                REPLACE (
                   REPLACE (sn.fac_srtnotificatie_oms,
                            '##NR##', c.cnt_contract_nummer_intern),
                   '##OMS##', c.cnt_contract_omschrijving),
                '##BEDR##', b.prs_bedrijf_naam),
             '##DAT##', prkc.cnt_kenmerkcontract_waarde),
          c.cnt_contract_key,
          NULL
     FROM cnt_v_aanwezigcontract c,
          prs_bedrijf b,
          cnt_kenmerkcontract epkc,
          cnt_kenmerk epk,
          cnt_kenmerkcontract prkc,
          cnt_kenmerk prk,
          fac_srtnotificatie sn
    WHERE c.ins_discipline_key IN (1564, 1565)      -- Non-merchandise/Inhuur!
          AND c.cnt_contract_status = 0
          AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
          AND c.cnt_contract_key = epkc.cnt_contract_key
          AND epkc.cnt_kenmerkcontract_verwijder IS NULL
          AND epkc.cnt_kenmerk_key = epk.cnt_kenmerk_key
          AND epk.cnt_kenmerk_verwijder IS NULL
          AND epk.cnt_srtkenmerk_key = 301     -- Contracteigenaar procurement
          AND c.cnt_contract_key = prkc.cnt_contract_key
          AND prkc.cnt_kenmerkcontract_verwijder IS NULL
          AND prkc.cnt_kenmerk_key = prk.cnt_kenmerk_key
          AND prk.cnt_kenmerk_verwijder IS NULL
          AND prk.cnt_srtkenmerk_key = 315   -- Performance review rappeldatum
          AND fac.safe_to_date (prkc.cnt_kenmerkcontract_waarde, 'dd-mm-yyyy') = TRUNC (SYSDATE)
          AND sn.fac_srtnotificatie_code = 'CUST04';



-- WEHK#56252 - Kenmerkdomein voor alleen bhvers-
CREATE OR REPLACE VIEW WEHK_V_PRS_BHVNAMEN
(
prs_perslid_key,
prs_perslid_naam
)
AS
SELECT na.prs_perslid_key, na.prs_perslid_naam_friendly
from prs_v_perslid_fullnames na , prs_perslid p
where na.prs_perslid_key IN (Select PRS_LINK_KEY
from prs_kenmerklink
WHERE PRS_KENMERKLINK_WAARDE = '41'
AND prs_kenmerk_key = 1120)
AND na.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_verwijder is null;






-- WEHK#20113 AutoClose ALLE bestellingen noti-dagen na geplande leverdatum!
CREATE OR REPLACE PROCEDURE wehk_select_autoclose (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
   NULL;
END;
/

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

/* Formatted on 1-4-2011 14:48:18 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE wehk_export_autoclose (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2,
                                                   p_filedir    IN VARCHAR2,
                                                   p_filename   IN VARCHAR2)
AS
   CURSOR cres
   IS
      SELECT   rrr.res_rsv_ruimte_key
        FROM   res_rsv_ruimte rrr
       WHERE       res_status_bo_key = 2
               AND res_rsv_ruimte_verwijder IS NULL
               AND res_rsv_ruimte_van < SYSDATE - 14;

   CURSOR cart
   IS
      SELECT   ra.res_rsv_artikel_key
        FROM   res_rsv_artikel ra
       WHERE       res_status_bo_key = 2
           AND res_rsv_artikel_verwijder IS NULL
           AND res_rsv_artikel_levering < SYSDATE - 14;

   CURSOR cobj
   IS
       SELECT   rd.res_rsv_deel_key
         FROM   res_rsv_deel rd
        WHERE       res_status_bo_key = 2
            AND res_rsv_deel_verwijder IS NULL
            AND res_rsv_deel_tot < SYSDATE - 14;

BEGIN
   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 = -1
                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_item bi, bes_bestelopdr_item boi
        WHERE   bi.bes_bestelling_item_aantal <>
                   NVL (bi.bes_bestelling_item_aantalontv, 0)
                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;

   FOR rc IN cart
   LOOP
      UPDATE   res_rsv_artikel
         SET   res_status_bo_key = 5
       WHERE   res_rsv_artikel_key = rc.res_rsv_artikel_key;

      fac.trackaction ('RESAFM',
                       rc.res_rsv_artikel_key,
                       NULL,
                       NULL,
                       NULL);
     COMMIT;
   END LOOP;

   FOR rc IN cobj
   LOOP
      UPDATE   res_rsv_deel
         SET   res_status_bo_key = 5
       WHERE   res_rsv_deel_key = rc.res_rsv_deel_key;

      fac.trackaction ('RESAFM',
                       rc.res_rsv_deel_key,
                       NULL,
                       NULL,
                       NULL);
     COMMIT;
   END LOOP;

   FOR rc IN cres
   LOOP
      UPDATE   res_rsv_ruimte
         SET   res_status_bo_key = 5
       WHERE   res_rsv_ruimte_key = rc.res_rsv_ruimte_key;

      fac.trackaction ('RESAFM',
                       rc.res_rsv_ruimte_key,
                       NULL,
                       NULL,
                       NULL);
     COMMIT;
   END LOOP;
END;
/

-- Bevat CUST02- en CUST03-reminders naar verantwoordelijken voor inspectie
-- van betreffende objecten.
-- LET OP: Notificatiejob via xemail!!!
-- CUST02: wekelijks mbt. over 1 tot 2 weken te keuren objecten!
-- CUST03: wekelijks mbt. objecten waarvan keuringsdatum is verstreken!
/* Formatted on 20-6-2013 9:58:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW WEHK_V_NOTI_INSPECTIEREMINDER
(
   code,
   sender,
   receiver,
   text,
   KEY,
   par1,
   par2,
   xkey,
   xemail,
   xmobile
)
AS
   SELECT   sn.fac_srtnotificatie_code code,
            NULL sender,
            NULL,                                                --x.receiver,
            REPLACE (
               REPLACE (
                  sn.fac_srtnotificatie_oms,
                  '##SRTGROEP##',
                  DECODE (
                     x.min_srtgroep_oms,
                     x.max_srtgroep_oms,
                     x.min_srtgroep_oms
                     || DECODE (x.aantal, 1, '-' || max_controle_oms, ''),
                     x.min_srtgroep_oms || ', ...'
                  )
               ),
               '##AANTAL##',
               x.aantal
            )
               subject,
            x.dummy_deel_key,                                  -- Dummy key!!!
            NULL,
            NULL,
            NULL,
            (SELECT   prs_perslid_email
               FROM   prs_perslid
              WHERE   prs_perslid_key = x.receiver),
            NULL
     FROM   (  SELECT   DECODE (
                           o.ins_discipline_key,
                           1161,                      -- Controles -> eigenaar
                           DECODE (o.ins_alg_ruimte_type,
                                   'P', o.ins_alg_ruimte_key,
                                   NULL),
                           lv.prs_perslid_key      -- Rest -> locatie-verantw.
                        )
                           receiver,
                        MAX (cso.ins_srtcontrole_omschrijving) max_controle_oms,
                        MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms,
                        MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms,
                        MIN (o.ins_deel_key) dummy_deel_key,
                        COUNT (DISTINCT o.ins_deel_key) aantal
                 FROM               (SELECT   scs.ins_srtinstallatie_key
                                                 ins_srtdeel_key,
                                              scs.ins_srtcontrole_key,
                                              scs.ins_srtcontrole_omschrijving,
                                              scs.ins_srtcontrole_periode
                                       FROM   ins_srtcontrole scs
                                      WHERE   scs.ins_srtcontrole_niveau = 'S'
                                     UNION ALL
                                     SELECT   sd.ins_srtdeel_key,
                                              scg.ins_srtcontrole_key,
                                              scg.ins_srtcontrole_omschrijving,
                                              scg.ins_srtcontrole_periode
                                       FROM   ins_srtcontrole scg,
                                              ins_srtdeel sd
                                      WHERE   scg.ins_srtcontrole_niveau = 'G'
                                              AND scg.ins_srtinstallatie_key =
                                                    sd.ins_srtgroep_key
                                     UNION ALL
                                     SELECT   sd.ins_srtdeel_key,
                                              scd.ins_srtcontrole_key,
                                              scd.ins_srtcontrole_omschrijving,
                                              scd.ins_srtcontrole_periode
                                       FROM   ins_srtcontrole scd,
                                              ins_srtgroep sg,
                                              ins_srtdeel sd
                                      WHERE   scd.ins_srtcontrole_niveau = 'D'
                                              AND scd.ins_srtinstallatie_key =
                                                    sg.ins_discipline_key
                                              AND sg.ins_srtgroep_key =
                                                    sd.ins_srtgroep_key) cso -- ControleSoortObjecten
                                 LEFT JOIN
                                    (SELECT   d.ins_deel_key,
                                              d.ins_deel_aanmaak,
                                              d.ins_alg_ruimte_key,
                                              d.ins_alg_ruimte_type,
                                              sd.ins_srtdeel_key,
                                              sg.ins_srtgroep_omschrijving,
                                              td.ins_discipline_key,
                                              td.ins_discipline_omschrijving,
                                              DECODE (d.ins_discipline_key,
                                                      41, 4, -- Vervoersmiddelen -> Zwolle
                                                      d.ins_alg_locatie_key)
                                                 alg_locatie_key
                                       FROM   ins_v_aanwezigdeel d,
                                              ins_srtdeel sd,
                                              ins_srtgroep sg,
                                              ins_tab_discipline td,
                                              alg_locatie l
                                      WHERE   d.ins_srtdeel_key =
                                                 sd.ins_srtdeel_key
                                              AND sd.ins_srtgroep_key =
                                                    sg.ins_srtgroep_key
                                              AND sg.ins_discipline_key =
                                                    td.ins_discipline_key
                                              AND d.ins_alg_locatie_key =
                                                    l.alg_locatie_key(+)) o -- Objecten
                                 ON cso.ins_srtdeel_key = o.ins_srtdeel_key
                              LEFT JOIN
                                 (SELECT   ok.alg_onrgoed_key alg_locatie_key,
                                           fac.safe_to_number (
                                              ok.alg_onrgoedkenmerk_waarde
                                           )
                                              prs_perslid_key
                                    FROM   alg_v_aanwezigonrgoedkenmerk ok
                                   WHERE   ok.alg_kenmerk_key = 1120
                                           AND ok.alg_onrgoed_niveau = 'L') lv -- LocatieVerantwoordelijke
                              ON o.alg_locatie_key = lv.alg_locatie_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        ins_kenmerkdeel_waarde afgekeurd
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = -1) oa -- ObjectAfgekeurd
                           ON o.ins_deel_key = oa.ins_deel_key
                        LEFT JOIN
                           (SELECT   dsc.ins_deel_key,
                                     dsc.ins_srtcontrole_key,
                                     dsc.ins_deelsrtcontrole_datum,
                                     dsc.ins_deelsrtcontrole_opmerking
                              FROM   ins_deelsrtcontrole dsc
                             WHERE   dsc.ins_deelsrtcontrole_datum =
                                        (SELECT   MAX (
                                                     ins_deelsrtcontrole_datum
                                                  )
                                           FROM   ins_deelsrtcontrole
                                          WHERE   ins_deel_key =
                                                     dsc.ins_deel_key
                                                  AND ins_srtcontrole_key =
                                                        dsc.ins_srtcontrole_key))
                           olc                        -- ObjectLaatsteControle
                        ON o.ins_deel_key = olc.ins_deel_key
                           AND cso.ins_srtcontrole_key =
                                 olc.ins_srtcontrole_key
                WHERE   (oa.afgekeurd IS NULL OR oa.afgekeurd = -1)   -- 'Nee'
                        AND COALESCE (olc.ins_deelsrtcontrole_datum,
                                      o.ins_deel_aanmaak)
                           + cso.ins_srtcontrole_periode BETWEEN TRUNC (
                                                                    SYSDATE + 7
                                                                 )
                                                             AND  TRUNC(SYSDATE
                                                                        + 14)
             GROUP BY   DECODE (
                           o.ins_discipline_key,
                           1161,                      -- Controles -> eigenaar
                           DECODE (o.ins_alg_ruimte_type,
                                   'P', o.ins_alg_ruimte_key,
                                   NULL),
                           lv.prs_perslid_key      -- Rest -> locatie-verantw.
                        )) x,
            fac_srtnotificatie sn
    WHERE   sn.fac_srtnotificatie_code = 'CUST02'
   UNION ALL                            -- Verstreken naar verantwoordelijken!
   SELECT   sn.fac_srtnotificatie_code code,
            NULL sender,
            NULL,                                                --x.receiver,
            REPLACE (
               REPLACE (
                  sn.fac_srtnotificatie_oms,
                  '##SRTGROEP##',
                  DECODE (
                     x.min_srtgroep_oms,
                     x.max_srtgroep_oms,
                     x.min_srtgroep_oms
                     || DECODE (x.aantal, 1, '-' || max_controle_oms, ''),
                     x.min_srtgroep_oms || ', ...'
                  )
               ),
               '##AANTAL##',
               x.aantal
            )
               subject,
            x.dummy_deel_key,                                  -- Dummy key!!!
            NULL,
            NULL,
            NULL,
            (SELECT   prs_perslid_email
               FROM   prs_perslid
              WHERE   prs_perslid_key = x.receiver),
            NULL
     FROM   (  SELECT   DECODE (
                           o.ins_discipline_key,
                           1161,                      -- Controles -> eigenaar
                           DECODE (o.ins_alg_ruimte_type,
                                   'P', o.ins_alg_ruimte_key,
                                   NULL),
                           lv.prs_perslid_key      -- Rest -> locatie-verantw.
                        )
                           receiver,
                        MAX (cso.ins_srtcontrole_omschrijving) max_controle_oms,
                        MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms,
                        MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms,
                        MIN (o.ins_deel_key) dummy_deel_key,
                        COUNT (DISTINCT o.ins_deel_key) aantal
                 FROM               (SELECT   scs.ins_srtinstallatie_key
                                                 ins_srtdeel_key,
                                              scs.ins_srtcontrole_key,
                                              scs.ins_srtcontrole_omschrijving,
                                              scs.ins_srtcontrole_periode
                                       FROM   ins_srtcontrole scs
                                      WHERE   scs.ins_srtcontrole_niveau = 'S'
                                     UNION ALL
                                     SELECT   sd.ins_srtdeel_key,
                                              scg.ins_srtcontrole_key,
                                              scg.ins_srtcontrole_omschrijving,
                                              scg.ins_srtcontrole_periode
                                       FROM   ins_srtcontrole scg,
                                              ins_srtdeel sd
                                      WHERE   scg.ins_srtcontrole_niveau = 'G'
                                              AND scg.ins_srtinstallatie_key =
                                                    sd.ins_srtgroep_key
                                     UNION ALL
                                     SELECT   sd.ins_srtdeel_key,
                                              scd.ins_srtcontrole_key,
                                              scd.ins_srtcontrole_omschrijving,
                                              scd.ins_srtcontrole_periode
                                       FROM   ins_srtcontrole scd,
                                              ins_srtgroep sg,
                                              ins_srtdeel sd
                                      WHERE   scd.ins_srtcontrole_niveau = 'D'
                                              AND scd.ins_srtinstallatie_key =
                                                    sg.ins_discipline_key
                                              AND sg.ins_srtgroep_key =
                                                    sd.ins_srtgroep_key) cso -- ControleSoortObjecten
                                 LEFT JOIN
                                    (SELECT   d.ins_deel_key,
                                              d.ins_deel_aanmaak,
                                              d.ins_alg_ruimte_key,
                                              d.ins_alg_ruimte_type,
                                              sd.ins_srtdeel_key,
                                              sg.ins_srtgroep_omschrijving,
                                              td.ins_discipline_key,
                                              td.ins_discipline_omschrijving,
                                              DECODE (d.ins_discipline_key,
                                                      41, 4, -- Vervoersmiddelen -> Zwolle
                                                      d.ins_alg_locatie_key)
                                                 alg_locatie_key
                                       FROM   ins_v_aanwezigdeel d,
                                              ins_srtdeel sd,
                                              ins_srtgroep sg,
                                              ins_tab_discipline td,
                                              alg_locatie l
                                      WHERE   d.ins_srtdeel_key =
                                                 sd.ins_srtdeel_key
                                              AND sd.ins_srtgroep_key =
                                                    sg.ins_srtgroep_key
                                              AND sg.ins_discipline_key =
                                                    td.ins_discipline_key
                                              AND d.ins_alg_locatie_key =
                                                    l.alg_locatie_key(+)) o -- Objecten
                                 ON cso.ins_srtdeel_key = o.ins_srtdeel_key
                              LEFT JOIN
                                 (SELECT   ok.alg_onrgoed_key alg_locatie_key,
                                           fac.safe_to_number (
                                              ok.alg_onrgoedkenmerk_waarde
                                           )
                                              prs_perslid_key
                                    FROM   alg_v_aanwezigonrgoedkenmerk ok
                                   WHERE   ok.alg_kenmerk_key = 1120
                                           AND ok.alg_onrgoed_niveau = 'L') lv -- LocatieVerantwoordelijke
                              ON o.alg_locatie_key = lv.alg_locatie_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        ins_kenmerkdeel_waarde afgekeurd
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = -1) oa -- ObjectAfgekeurd
                           ON o.ins_deel_key = oa.ins_deel_key
                        LEFT JOIN
                           (SELECT   dsc.ins_deel_key,
                                     dsc.ins_srtcontrole_key,
                                     dsc.ins_deelsrtcontrole_datum,
                                     dsc.ins_deelsrtcontrole_opmerking
                              FROM   ins_deelsrtcontrole dsc
                             WHERE   dsc.ins_deelsrtcontrole_datum =
                                        (SELECT   MAX (
                                                     ins_deelsrtcontrole_datum
                                                  )
                                           FROM   ins_deelsrtcontrole
                                          WHERE   ins_deel_key =
                                                     dsc.ins_deel_key
                                                  AND ins_srtcontrole_key =
                                                        dsc.ins_srtcontrole_key))
                           olc                        -- ObjectLaatsteControle
                        ON o.ins_deel_key = olc.ins_deel_key
                           AND cso.ins_srtcontrole_key =
                                 olc.ins_srtcontrole_key
                WHERE   (oa.afgekeurd IS NULL OR oa.afgekeurd = -1)   -- 'Nee'
                        AND COALESCE (olc.ins_deelsrtcontrole_datum,
                                      o.ins_deel_aanmaak)
                           + cso.ins_srtcontrole_periode < TRUNC (SYSDATE)
             GROUP BY   DECODE (
                           o.ins_discipline_key,
                           1161,                      -- Controles -> eigenaar
                           DECODE (o.ins_alg_ruimte_type,
                                   'P', o.ins_alg_ruimte_key,
                                   NULL),
                           lv.prs_perslid_key      -- Rest -> locatie-verantw.
                        )) x,
            fac_srtnotificatie sn
    WHERE   sn.fac_srtnotificatie_code = 'CUST03'
   UNION ALL                               -- Verstreken naar fabu@wehkamp.nl!
   SELECT   sn.fac_srtnotificatie_code code,
            NULL sender,
            NULL receiver,
            REPLACE (
               REPLACE (
                  sn.fac_srtnotificatie_oms,
                  '##SRTGROEP##',
                  DECODE (x.min_srtgroep_oms,
                          x.max_srtgroep_oms, x.min_srtgroep_oms,
                          x.min_srtgroep_oms || ', ...')
               ),
               '##AANTAL##',
               x.aantal
            )
               subject,
            x.dummy_deel_key,                                  -- Dummy key!!!
            NULL,
            NULL,
            NULL,
            'fabu@wehkamp.nl',
            NULL
     FROM   (  SELECT   1 receiver,
                        MIN (o.ins_srtgroep_omschrijving) min_srtgroep_oms,
                        MAX (o.ins_srtgroep_omschrijving) max_srtgroep_oms,
                        MIN (o.ins_deel_key) dummy_deel_key,
                        COUNT (DISTINCT o.ins_deel_key) aantal
                 FROM            (SELECT   scs.ins_srtinstallatie_key
                                              ins_srtdeel_key,
                                           scs.ins_srtcontrole_key,
                                           scs.ins_srtcontrole_omschrijving,
                                           scs.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scs
                                   WHERE   scs.ins_srtcontrole_niveau = 'S'
                                  UNION ALL
                                  SELECT   sd.ins_srtdeel_key,
                                           scg.ins_srtcontrole_key,
                                           scg.ins_srtcontrole_omschrijving,
                                           scg.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scg, ins_srtdeel sd
                                   WHERE   scg.ins_srtcontrole_niveau = 'G'
                                           AND scg.ins_srtinstallatie_key =
                                                 sd.ins_srtgroep_key
                                  UNION ALL
                                  SELECT   sd.ins_srtdeel_key,
                                           scd.ins_srtcontrole_key,
                                           scd.ins_srtcontrole_omschrijving,
                                           scd.ins_srtcontrole_periode
                                    FROM   ins_srtcontrole scd,
                                           ins_srtgroep sg,
                                           ins_srtdeel sd
                                   WHERE   scd.ins_srtcontrole_niveau = 'D'
                                           AND scd.ins_srtinstallatie_key =
                                                 sg.ins_discipline_key
                                           AND sg.ins_srtgroep_key =
                                                 sd.ins_srtgroep_key) cso -- ControleSoortObjecten
                              LEFT JOIN
                                 (SELECT   d.ins_deel_key,
                                           d.ins_deel_aanmaak,
                                           d.ins_alg_ruimte_key,
                                           d.ins_alg_ruimte_type,
                                           sd.ins_srtdeel_key,
                                           sg.ins_srtgroep_omschrijving,
                                           td.ins_discipline_key,
                                           td.ins_discipline_omschrijving,
                                           DECODE (d.ins_discipline_key,
                                                   41, 4, -- Vervoersmiddelen -> Zwolle
                                                   d.ins_alg_locatie_key)
                                              alg_locatie_key
                                    FROM   ins_v_aanwezigdeel d,
                                           ins_srtdeel sd,
                                           ins_srtgroep sg,
                                           ins_tab_discipline td,
                                           alg_locatie l
                                   WHERE   d.ins_srtdeel_key =
                                              sd.ins_srtdeel_key
                                           AND sd.ins_srtgroep_key =
                                                 sg.ins_srtgroep_key
                                           AND sg.ins_discipline_key =
                                                 td.ins_discipline_key
                                           AND d.ins_alg_locatie_key =
                                                 l.alg_locatie_key(+)) o -- Objecten
                              ON cso.ins_srtdeel_key = o.ins_srtdeel_key
                           LEFT JOIN
                              (SELECT   ins_deel_key,
                                        ins_kenmerkdeel_waarde afgekeurd
                                 FROM   ins_v_aanwezigkenmerkdeel kd,
                                        ins_kenmerk k
                                WHERE   kd.ins_kenmerk_key = k.ins_kenmerk_key
                                        AND k.ins_srtkenmerk_key = -1) oa -- ObjectAfgekeurd
                           ON o.ins_deel_key = oa.ins_deel_key
                        LEFT JOIN
                           (SELECT   dsc.ins_deel_key,
                                     dsc.ins_srtcontrole_key,
                                     dsc.ins_deelsrtcontrole_datum,
                                     dsc.ins_deelsrtcontrole_opmerking
                              FROM   ins_deelsrtcontrole dsc
                             WHERE   dsc.ins_deelsrtcontrole_datum =
                                        (SELECT   MAX (
                                                     ins_deelsrtcontrole_datum
                                                  )
                                           FROM   ins_deelsrtcontrole
                                          WHERE   ins_deel_key =
                                                     dsc.ins_deel_key
                                                  AND ins_srtcontrole_key =
                                                        dsc.ins_srtcontrole_key))
                           olc                        -- ObjectLaatsteControle
                        ON o.ins_deel_key = olc.ins_deel_key
                           AND cso.ins_srtcontrole_key =
                                 olc.ins_srtcontrole_key
                WHERE   (oa.afgekeurd IS NULL OR oa.afgekeurd = -1)   -- 'Nee'
                        AND COALESCE (olc.ins_deelsrtcontrole_datum,
                                      o.ins_deel_aanmaak)
                           + cso.ins_srtcontrole_periode < TRUNC (SYSDATE)
             GROUP BY   1) x,
            fac_srtnotificatie sn
    WHERE   sn.fac_srtnotificatie_code = 'CUST03';

/* Formatted on 2-8-2013 14:38:16 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW wehk_v_inspectie_results
(
   hide_f_ins_deel_key,
   fclt_f_discipline,
   fclt_f_groep,
   fclt_f_objectsoort,
   fclt_f_object,
   fclt_f_locatie,
   --[REDACTED],
   fclt_f_district,
   fclt_f_regio,
   fclt_f_inspectiepunt,
   fclt_f_inspectieinfo,
   --fclt_f_jaar,
   --fclt_f_maand,
   fclt_d_datum,
   fclt_f_inspecteur,
   fclt_f_beoordeling,
   opmerking
)
AS
   SELECT   insp.ins_deel_key,
            dis.ins_discipline_omschrijving,
            sg.ins_srtgroep_omschrijving,
            sd.ins_srtdeel_omschrijving,
            d.ins_deel_omschrijving,
            l.alg_locatie_code || '-' || l.alg_locatie_omschrijving,
            --l.alg_locatie_key,
            di.alg_district_omschrijving,
            r.alg_regio_omschrijving,
            sc.ins_srtcontrole_omschrijving,
            sc.ins_srtcontrole_info,
            --TO_CHAR (insp.ins_deelsrtcontrole_datum, 'yyyy'),
            --TO_CHAR (insp.ins_deelsrtcontrole_datum, 'mm'),
            TO_CHAR (insp.ins_deelsrtcontrole_datum, 'dd-mm-yyyy'),
            pf.prs_perslid_naam_full,
            cm.ins_controlemode_oms,
            insp.ins_deelsrtcontrole_opmerking
     FROM   ins_deelsrtcontrole insp,
            ins_controlemode cm,
            ins_srtcontrole sc,
            prs_v_perslid_fullnames_all pf,
            ins_deel d,
            ins_srtdeel sd,
            ins_srtgroep sg,
            ins_tab_discipline dis,
            alg_locatie l,
            alg_district di,
            alg_regio r
    WHERE       insp.ins_controlemode_key = cm.ins_controlemode_key
            AND insp.ins_srtcontrole_key = sc.ins_srtcontrole_key
            AND insp.prs_perslid_key = pf.prs_perslid_key(+)
            AND insp.ins_deel_key = d.ins_deel_key
            AND d.ins_srtdeel_key = sd.ins_srtdeel_key
            AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
            AND sg.ins_discipline_key = dis.ins_discipline_key
            AND d.ins_alg_locatie_key = l.alg_locatie_key
            AND l.alg_district_key = di.alg_district_key
            AND di.alg_regio_key = r.alg_regio_key;


-- KPIs/Contracten
CREATE OR REPLACE VIEW wehk_v_kpi_cnt_data
AS
   SELECT c.cnt_contract_key,
          c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') contractid,
          cd.ins_discipline_key,
          cd.ins_discipline_omschrijving contractsoort,
          a.prs_afdeling_key contractafd3_key,
          a.prs_afdeling_omschrijving contractafd3_oms,
          c.cnt_contract_kosten,
          DECODE (vrkt.cnt_kenmerkcontract_waarde, NULL, 'Nee', 'Ja') verrijkt,
          DECODE (appr.aant, 3, 'Ja', 'Nee') approved,
          CASE
             WHEN SYSDATE < c.cnt_contract_looptijd_van
             THEN 'Toekomstig'
             WHEN SYSDATE BETWEEN c.cnt_contract_looptijd_van AND cnt.cnt_getrappeldatum (c.cnt_contract_key)
             THEN 'Actueel'
             WHEN SYSDATE BETWEEN cnt.cnt_getopzegdatum (c.cnt_contract_key) AND c.cnt_contract_looptijd_tot
             THEN 'In opzegtermijn'
             WHEN SYSDATE > c.cnt_contract_looptijd_tot
             THEN 'Verlopen'
             ELSE 'Rappel'
          END
             contractfase,
          afd1.fac_usrdata_omschr afd1_aanvrager,
          afd2.fac_usrdata_omschr afd2_aanvrager
     FROM cnt_v_aanwezigcontract c, cnt_discipline cd,
          prs_v_afdeling_boom ab, prs_afdeling a,
          (SELECT kc.*
             FROM cnt_kenmerkcontract kc, cnt_kenmerk k
            WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
              AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
              AND k.cnt_kenmerk_verwijder IS NULL
              AND k.cnt_srtkenmerk_key = 304) vrkt,      -- Groepsmaatschappij
          (  SELECT kc.cnt_contract_key, SUM (DECODE (kc.cnt_kenmerkcontract_waarde, 'Ja', 1, 0)) aant
               FROM cnt_kenmerkcontract kc, cnt_kenmerk k
              WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                AND k.cnt_kenmerk_verwijder IS NULL
                AND k.cnt_srtkenmerk_key IN (291, 292, 293) -- Approval Budgethouder/Legal/Buyer
           GROUP BY kc.cnt_contract_key) appr,
          (SELECT kc.cnt_contract_key, ud.fac_usrdata_omschr
             FROM cnt_kenmerkcontract kc, cnt_kenmerk k, fac_usrdata ud
            WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
              AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
              AND k.cnt_kenmerk_verwijder IS NULL
              AND k.cnt_srtkenmerk_key = 288             -- Afdeling 1e level Aanvrager
              AND kc.cnt_kenmerkcontract_waarde = TO_CHAR (ud.fac_usrdata_key)) afd1,
          (SELECT kc.cnt_contract_key, ud.fac_usrdata_omschr
             FROM cnt_kenmerkcontract kc, cnt_kenmerk k, fac_usrdata ud
            WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
              AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
              AND k.cnt_kenmerk_verwijder IS NULL
              AND k.cnt_srtkenmerk_key = 289             -- Afdeling 2e level Aanvrager
              AND kc.cnt_kenmerkcontract_waarde = TO_CHAR (ud.fac_usrdata_key)) afd2
    WHERE c.cnt_contract_status = 0                                  -- Actief
          --AND SYSDATE BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot
          AND c.ins_discipline_key = cd.ins_discipline_key
          AND cd.ins_discipline_key IN (1561, 1562, 1563, 1564, 1565)
          AND c.prs_afdeling_key_eig = ab.prs_afdeling_key
          AND COALESCE (ab.[REDACTED], ab.[REDACTED]) = a.prs_afdeling_key
          AND c.cnt_contract_key = vrkt.cnt_contract_key(+)
          AND c.cnt_contract_key = appr.cnt_contract_key(+)
          AND c.cnt_contract_key = afd1.cnt_contract_key(+)
          AND c.cnt_contract_key = afd2.cnt_contract_key(+);
/*
CREATE OR REPLACE VIEW wehk_v_kpi_cnt_coverage -- WEG?
AS
   SELECT c.cnt_contract_key,
          c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') contractid,
          cd.ins_discipline_omschrijving contractsoort,
          a.prs_afdeling_omschrijving contractafd3,
          c.cnt_contract_kosten
     FROM cnt_v_aanwezigcontract c, cnt_discipline cd,
          prs_v_afdeling_boom ab, prs_afdeling a
    WHERE c.cnt_contract_status = 0                                  -- Actief
          --AND SYSDATE BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot
          AND c.ins_discipline_key = cd.ins_discipline_key
          AND cd.ins_discipline_key IN (1561, 1562, 1563, 1564, 1565)
          AND c.prs_afdeling_key_eig = ab.prs_afdeling_key
          AND COALESCE (ab.[REDACTED], ab.[REDACTED]) = a.prs_afdeling_key;

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_verrijkt -- WEG?
AS
   SELECT c.cnt_contract_key,
          c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') contractid,
          DECODE (vrkt.cnt_kenmerkcontract_waarde, NULL, 'Nee', 'Ja') verrijkt
     FROM cnt_v_aanwezigcontract c,
          (SELECT kc.*
             FROM cnt_kenmerkcontract kc, cnt_kenmerk k
            WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
              AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
              AND k.cnt_kenmerk_verwijder IS NULL
              AND k.cnt_srtkenmerk_key = 304) vrkt       -- Groepsmaatschappij
    WHERE c.cnt_contract_status = 0                                  -- Actief
          --AND SYSDATE BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot
          AND c.ins_discipline_key IN (1561, 1562, 1563, 1564, 1565)
          AND c.cnt_contract_key = vrkt.cnt_contract_key(+);

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_approved -- WEG?
AS
   SELECT c.cnt_contract_key,
          c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') contractid,
          DECODE (appr.aant, 3, 'Ja', 'Nee') approved
     FROM cnt_v_aanwezigcontract c,
          (  SELECT kc.cnt_contract_key, SUM (DECODE (kc.cnt_kenmerkcontract_waarde, 'Ja', 1, 0)) aant
               FROM cnt_kenmerkcontract kc, cnt_kenmerk k
              WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
                AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                AND k.cnt_kenmerk_verwijder IS NULL
                AND k.cnt_srtkenmerk_key IN (291, 292, 293) -- Approval Budgethouder/Legal/Buyer
           GROUP BY kc.cnt_contract_key) appr
    WHERE c.cnt_contract_status = 0                                  -- Actief
          --AND SYSDATE BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot
          AND c.ins_discipline_key IN (1561, 1562, 1563, 1564, 1565)
          AND c.cnt_contract_key = appr.cnt_contract_key(+);
*/
CREATE OR REPLACE VIEW wehk_v_kpi_cnt_covaant
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE,
   FCLT_URL
)
AS
     SELECT contractsoort,
            COUNT ( * ),
            0 - COUNT ( * ),
               'appl/cnt/cnt_search.asp?urole=bo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'disc='
            || TO_CHAR (ins_discipline_key)
       FROM wehk_v_kpi_cnt_data
   GROUP BY contractsoort, TO_CHAR (ins_discipline_key)
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ',
          0,
          999999,
          ' '
     FROM DUAL;

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_covaant_afd3
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE,
   FCLT_URL
)
AS
     SELECT contractafd3_oms,
            COUNT ( * ),
            0 - COUNT ( * ),
               'appl/cnt/cnt_search.asp?urole=bo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'dep_key='
            || TO_CHAR (contractafd3_key)
       FROM wehk_v_kpi_cnt_data
   GROUP BY contractafd3_oms,
            TO_CHAR (contractafd3_key)
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ',
          0,
          999999,
          ' '
     FROM DUAL;

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_coveuro
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE,
   FCLT_URL
)
AS
     SELECT contractsoort,
            SUM ( cnt_contract_kosten ),
            0 - COUNT ( * ),
               'appl/cnt/cnt_search.asp?urole=bo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'disc='
            || TO_CHAR (ins_discipline_key)
       FROM wehk_v_kpi_cnt_data
   GROUP BY contractsoort, TO_CHAR (ins_discipline_key)
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ',
          0,
          999999,
          ' '
     FROM DUAL;

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_coveuro_afd3
(
   FCLT_XAS_,
   FCLT_YAS_,
   VOLGORDE,
   FCLT_URL
)
AS
     SELECT contractafd3_oms,
            SUM ( cnt_contract_kosten ),
            0 - COUNT ( * ),
               'appl/cnt/cnt_search.asp?urole=bo'
            || '&'
            || 'autosearch=1'
            || '&'
            || 'dep_key='
            || TO_CHAR (contractafd3_key)
       FROM wehk_v_kpi_cnt_data
   GROUP BY contractafd3_oms, TO_CHAR (contractafd3_key)
   UNION ALL        -- Extra kolom zodat voorgaande kolommen helemaal getoond?
   SELECT ' ',
          0,
          999999,
          ' '
     FROM DUAL;

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_soortfase
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   FCLT_YAS3_,
   FCLT_YAS4_,
   FCLT_YAS5_,
   FCLT_SORT
)
AS
   WITH contracten
           AS (SELECT cnt_contract_key, ins_discipline_key,
                      CASE
                         WHEN SYSDATE < cnt_contract_looptijd_van
                         THEN 'Toekomstig'
                         WHEN SYSDATE BETWEEN cnt_contract_looptijd_van AND cnt.cnt_getrappeldatum (cnt_contract_key)
                         THEN 'Actueel'
                         WHEN SYSDATE BETWEEN cnt.cnt_getopzegdatum (cnt_contract_key) AND cnt_contract_looptijd_tot
                         THEN 'In opzegtermijn'
                         WHEN SYSDATE > cnt_contract_looptijd_tot
                         THEN 'Verlopen'
                         ELSE 'Rappel'
                      END
                         contractfase
                 FROM cnt_v_aanwezigcontract
                WHERE cnt_contract_status = 0                        -- Actief
                      AND ins_discipline_key IN (1561, 1562, 1563, 1564, 1565))
     SELECT cd.ins_discipline_omschrijving,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'T', 1, 0)) toekomstig,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'A', 1, 0)) actueel,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'R', 1, 0)) rappel,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'I', 1, 0)) opzeg,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'V', 1, 0)) verlopen,
            0 - COUNT ( * )
       FROM contracten c, cnt_discipline cd
      WHERE c.ins_discipline_key = cd.ins_discipline_key
   GROUP BY cd.ins_discipline_omschrijving;

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_bandsfase
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   FCLT_YAS3_,
   FCLT_YAS4_,
   FCLT_YAS5_,
   FCLT_SORT
)
AS
   WITH contracten
           AS (SELECT cnt_contract_key,
                      CASE
                         WHEN SYSDATE < cnt_contract_looptijd_van
                         THEN 'Toekomstig'
                         WHEN SYSDATE BETWEEN cnt_contract_looptijd_van AND cnt.cnt_getrappeldatum (cnt_contract_key)
                         THEN 'Actueel'
                         WHEN SYSDATE BETWEEN cnt.cnt_getopzegdatum (cnt_contract_key) AND cnt_contract_looptijd_tot
                         THEN 'In opzegtermijn'
                         WHEN SYSDATE > cnt_contract_looptijd_tot
                         THEN 'Verlopen'
                         ELSE 'Rappel'
                      END
                         contractfase
                 FROM cnt_v_aanwezigcontract
                WHERE cnt_contract_status = 0                        -- Actief
                      AND ins_discipline_key IN (1561, 1562, 1563, 1564, 1565))
     SELECT COALESCE (afd2.fac_usrdata_omschr, '???') afd2,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'T', 1, 0)) toekomstig,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'A', 1, 0)) actueel,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'R', 1, 0)) rappel,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'I', 1, 0)) opzeg,
            SUM (DECODE (SUBSTR (c.contractfase, 1, 1), 'V', 1, 0)) verlopen,
            0 - COUNT ( * )
       FROM contracten c,
            (SELECT kc.cnt_contract_key, ud.fac_usrdata_key, ud.fac_usrdata_omschr
               FROM cnt_kenmerkcontract kc, cnt_kenmerk k, fac_usrdata ud
              WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
                    AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                    AND k.cnt_kenmerk_verwijder IS NULL
                    AND k.cnt_srtkenmerk_key = 288 -- Afdeling 1e level Aanvrager
                    AND kc.cnt_kenmerkcontract_waarde = TO_CHAR (ud.fac_usrdata_key)) afd1,
            (SELECT kc.cnt_contract_key, ud.fac_usrdata_key, ud.fac_usrdata_omschr
               FROM cnt_kenmerkcontract kc, cnt_kenmerk k, fac_usrdata ud
              WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
                    AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                    AND k.cnt_kenmerk_verwijder IS NULL
                    AND k.cnt_srtkenmerk_key = 289 -- Afdeling 2e level Aanvrager
                    AND kc.cnt_kenmerkcontract_waarde = TO_CHAR (ud.fac_usrdata_key)) afd2
      WHERE c.cnt_contract_key = afd1.cnt_contract_key
            AND afd1.fac_usrdata_key = 2967                   -- Buying and Sales
            AND c.cnt_contract_key = afd2.cnt_contract_key(+)
   GROUP BY COALESCE (afd2.fac_usrdata_omschr, '???');

CREATE OR REPLACE VIEW wehk_v_kpi_cnt_afloop
AS
   SELECT c.cnt_contract_key,
          c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') contractid,
          TO_CHAR (c.cnt_contract_looptijd_tot, 'yyyy-mm') afloopmaand
     FROM cnt_v_aanwezigcontract c, cnt_discipline cd
    WHERE c.cnt_contract_status = 0                                  -- Actief
          AND c.cnt_contract_looptijd_tot BETWEEN TRUNC (SYSDATE, 'mm') AND ADD_MONTHS (TRUNC (SYSDATE, 'mm'), 24) - 1 -- 24 maanden in toekomst
          AND c.ins_discipline_key = cd.ins_discipline_key
          AND cd.ins_discipline_key IN (1561, 1562, 1563, 1564, 1565);

-- WEHK#40548: Openstaande meldingen per locatie/vakgroep (anders dan ongeval)
CREATE OR REPLACE VIEW wehk_v_rtm_meld_locvg
AS
   SELECT m.mld_melding_key,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          sm.mld_stdmelding_key,
          sm.mld_stdmelding_omschrijving,
          md.ins_discipline_key,
          md.ins_discipline_omschrijving,
          COALESCE (l.alg_locatie_code, 'Onbekend') || '-' || md.ins_discipline_omschrijving locvg
     FROM mld_melding m, alg_locatie l, mld_stdmelding sm, mld_discipline md
    WHERE     m.mld_melding_status IN (2, 3, 4, 7, 0, 99) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending, 99-Niet opgelost
          AND m.mld_alg_locatie_key = l.alg_locatie_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 != 41;

-- WEHK#40548: Openstaande meldingen per locatie/vakgroep (anders dan ongeval)
CREATE OR REPLACE VIEW WEHK_V_RTM_MELD_LOCVGSLA
(
   MLD_MELDING_KEY,
   ALG_LOCATIE_KEY,
   ALG_LOCATIE_CODE,
   ALG_LOCATIE_OMSCHRIJVING,
   MLD_STDMELDING_KEY,
   MLD_STDMELDING_OMSCHRIJVING,
   INS_DISCIPLINE_KEY,
   INS_DISCIPLINE_OMSCHRIJVING,
   LOCVG,
   MLDSTART,
   MLDEIND_RESPIJT,
   SLA
)
AS
   SELECT m.mld_melding_key,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          sm.mld_stdmelding_key,
          sm.mld_stdmelding_omschrijving,
          md.ins_discipline_key,
          md.ins_discipline_omschrijving,
             COALESCE (l.alg_locatie_code, 'Onbekend')
          || '-'
          || md.ins_discipline_omschrijving
             locvg,
          fac.gettrackingdate ('MLDNEW', m.mld_melding_key),
          m.mld_melding_einddatum_std,
          CASE
             WHEN (COALESCE( fac.gettrackingdate ('MLDAFM', m.mld_melding_key), (SYSDATE))
                  <= m.mld_melding_einddatum)
             THEN
                'Binnen'
             ELSE
                'Buiten'
          END
             binnen_buiten_SLA
     FROM mld_melding m,
          alg_locatie l,
          mld_stdmelding sm,
          mld_discipline md
    WHERE     m.mld_melding_status IN (2, 3, 4, 7, 0, 99) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending, 99-Niet opgelost
          AND m.mld_alg_locatie_key = l.alg_locatie_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 != 41;

-- WEHK#40548: Openstaande ongeval-meldingen per locatie/soortmelding
CREATE OR REPLACE VIEW WEHK_V_RTM_ONGEVAL_LOCSM
(
   MLD_MELDING_KEY,
   ALG_LOCATIE_KEY,
   ALG_LOCATIE_CODE,
   ALG_LOCATIE_OMSCHRIJVING,
   MLD_STDMELDING_KEY,
   MLD_STDMELDING_OMSCHRIJVING,
   INS_DISCIPLINE_KEY,
   INS_DISCIPLINE_OMSCHRIJVING,
   LOCSM
)
AS
   SELECT m.mld_melding_key,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          sm.mld_stdmelding_key,
          sm.mld_stdmelding_omschrijving,
          md.ins_discipline_key,
          md.ins_discipline_omschrijving,
             COALESCE (l.alg_locatie_code, 'Onbekend')
          || '-'
          || sm.mld_stdmelding_omschrijving
             locsm
     FROM mld_melding m,
          alg_locatie l,
          mld_stdmelding sm,
          mld_discipline md
    WHERE  m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND sm.mld_ins_discipline_key IN (1641, 1642, 1643, 1644) -- Enkel de 4 nieuwe discipline key, voor de nieuwe ongevalsmeldingen
          AND md.ins_srtdiscipline_key = 41;

-- WEHK#40548: Openstaande ongeval-meldingen per locatie/soortmelding
CREATE OR REPLACE VIEW WEHK_V_RTM_ONGEVAL_LOCSMSLA
(
   MLD_MELDING_KEY,
   ALG_LOCATIE_KEY,
   ALG_LOCATIE_CODE,
   ALG_LOCATIE_OMSCHRIJVING,
   MLD_STDMELDING_KEY,
   MLD_STDMELDING_OMSCHRIJVING,
   INS_DISCIPLINE_KEY,
   INS_DISCIPLINE_OMSCHRIJVING,
   LOCSM,
   MLDSTART,
   MLDEIND_RESPIJT,
   SLA
)
AS
   SELECT m.mld_melding_key,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          sm.mld_stdmelding_key,
          sm.mld_stdmelding_omschrijving,
          md.ins_discipline_key,
          md.ins_discipline_omschrijving,
             COALESCE (l.alg_locatie_code, 'Onbekend')
          || '-'
          || sm.mld_stdmelding_omschrijving
             locsm,
                                 fac.gettrackingdate ('MLDNEW', m.mld_melding_key),
          m.mld_melding_einddatum_std,
           CASE
             WHEN
                (SYSDATE) -
                (COALESCE
                    (FAC.datumtijdplusuitvoertijd(m.mld_melding_einddatum_std, m.mld_melding_t_respijt.tijdsduur, m.mld_melding_t_respijt.eenheid),
                    m.mld_melding_einddatum_std))
                < 0
            THEN 'Binnen'
            ELSE 'Buiten'
          END binnen_buiten_SLA
     FROM mld_melding m,
          alg_locatie l,
          mld_stdmelding sm,
          mld_discipline md
    WHERE     m.mld_melding_status IN (2, 3, 4, 7, 0, 99) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending, 99-Niet opgelost
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
	AND sm.mld_ins_discipline_key IN (1641,1642,1643,1644)  -- Enkel de 4 nieuwe discipline key, voor de nieuwe ongevalsmeldingen
          AND md.ins_srtdiscipline_key = 41;

-- WEHK#40548: Openstaande opdrachten per (locatie/)leverancier
CREATE OR REPLACE VIEW wehk_v_rtm_opdr_lev
AS
   SELECT o.mld_opdr_key,
          o.mld_melding_key,
          o.mld_opdr_bedrijfopdr_volgnr,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          l.alg_locatie_code || '-' || b.prs_bedrijf_naam locuv,
          'B' uv_type,
          b.prs_bedrijf_naam uv
     FROM mld_opdr o, prs_bedrijf b, mld_melding m, alg_locatie l
    WHERE     o.mld_statusopdr_key IN (3, 4, 5, 8, 10) -- 3-Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd, Ter goedkeuring
          AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
   UNION ALL
   SELECT o.mld_opdr_key,
          o.mld_melding_key,
          o.mld_opdr_bedrijfopdr_volgnr,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          l.alg_locatie_code || '-' || pf.prs_perslid_naam_full locuv,
          'P' uv_type,
          pf.prs_perslid_naam_full uv
     FROM mld_opdr o, prs_v_perslid_fullnames_all pf, mld_melding m, alg_locatie l
    WHERE     o.mld_statusopdr_key IN (3, 4, 5, 8, 10) -- 3-Ter fiattering, 4-Gefiatteerd, 5-Uitgegeven, 8-Geaccepteerd, Ter goedkeuring
          AND o.mld_uitvoerende_keys = pf.prs_perslid_key
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+);




-- WEHK#58706 Contracten met datum laatst gewijzigd.
CREATE OR REPLACE  VIEW WEHK_CNT_V_CNTBEH_WIJZIG
(
    CONTRACT_KEY,
    CONTRACT_NR,
    CONTRACT_OMSCH,
    CONTRACT_BEHEERDER,
    LOOPTIJD_VAN,
    LOOPTIJD_TOT,
    CONTRACT_FASE,
    STATUS,
    CONTRACT_KOSTEN,
    LAATSTE_WIJZIG_DATUM
)
AS
    SELECT CNT_CONTRACT_KEY,
           COALESCE (CNT_CONTRACT_NUMMER_INTERN, TO_CHAR (CNT_CONTRACT_KEY)),
           CNT_CONTRACT_OMSCHRIJVING,
          (select prs_perslid_naam_friendly from prs_v_perslid_fullnames where prs_perslid_key = prs_perslid_key_beh ) daan,
           c.CNT_CONTRACT_LOOPTIJD_VAN,
           CNT_CONTRACT_LOOPTIJD_TOT,
           DECODE (cnt.cnt_contract_status (
                       c.cnt_contract_looptijd_van,
                       cnt.cnt_getrappeldatum (c.cnt_contract_key),
                       cnt.cnt_getopzegdatum (c.cnt_contract_key),
                       c.cnt_contract_looptijd_tot),
                   0, lcl.l ('lcl_cnt_future'),
                   1, lcl.l ('lcl_cnt_topical'),
                   2, lcl.l ('lcl_cnt_warn'),
                   3, lcl.l ('lcl_cnt_cancel'),
                   4, lcl.l ('lcl_cnt_past'))
               fase_actief,
           DECODE (
               C.cnt_contract_status,
               0, DECODE (fac.getsetting ('cnt_contract_approval'),
                          1, lcl.l ('lcl_cnt_active_approval'),
                          lcl.l ('lcl_cnt_active')),
               1, lcl.l ('lcl_cnt_inactive'),
               2, lcl.l ('lcl_cnt_new'),
               3, lcl.l ('lcl_cnt_forapproval'))
               cnt_contract_status,
           CNT_CONTRACT_KOSTEN,
           (SELECT MAX (fac_tracking_datum)
              FROM fac_tracking ft, fac_srtnotificatie sn
             WHERE     fac_tracking_refkey = cnt_contract_key
                   AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key
                   AND sn.fac_srtnotificatie_xmlnode = 'contract')
               LAATST_GEWIJZIGD
      FROM cnt_contract c
     WHERE c.cnt_contract_verwijder IS NULL;


-- WEHK#40548: Afgehandelde meldingen per (locatie/)maand
CREATE OR REPLACE VIEW wehk_v_rtm_meld_afm_mnd
AS
   SELECT m.mld_melding_key,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          sm.mld_stdmelding_key,
          sm.mld_stdmelding_omschrijving,
          md.ins_discipline_key,
          md.ins_discipline_omschrijving,
          l.alg_locatie_code || '-' ||  TO_CHAR (t.fac_tracking_datum, 'yyyy-mm') locmnd,
          TO_CHAR (t.fac_tracking_datum, 'yyyy-mm') mnd,
          DECODE (SUBSTR (TO_CHAR (t.fac_tracking_datum, 'yyyymm'), 5),
                  '01', 'Januari',
                  '02', 'Februari',
                  '03', 'Maart',
                  '04', 'April',
                  '05', 'Mei',
                  '06', 'Juni',
                  '07', 'Juli',
                  '08', 'Augustus',
                  '09', 'September',
                  '10', 'Oktober',
                  '11', 'November',
                  'December')
             mnd_oms
     FROM mld_melding m, alg_locatie l, mld_stdmelding sm, mld_discipline md, fac_tracking t
    WHERE     m.mld_melding_status IN (5, 6)         -- 5-Afgemeld, 6-Verwerkt
          AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND m.mld_melding_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = 18                          -- MLDAFM
          AND t.fac_tracking_datum BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -11) AND SYSDATE;

-- WEHK#53429: Notificatiejob nieuwe ongevalsmeldingen:
CREATE OR REPLACE VIEW wehk_v_rap_newmldongeval
(
   locatie,
   locatiecode,
   locatieomschrijving,
   hrmedewerker,
   melding_key,
   trackdatum,
   datum,
   tijd,
   invoerder,
   aanvrager,
   behandelaar,
   stdmeldingomschrijving,
   meldingonderwerp,
   meldingomschrijving
)
AS
   SELECT l.alg_locatie_omschrijving,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          COALESCE (
            (SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde)
              FROM alg_onrgoedkenmerk
              WHERE     alg_kenmerk_key = 1140 --Kenmerk 'Persoon ongevalsmelding' bij locatie
                AND alg_onrgoed_niveau = 'L'
                AND alg_onrgoedkenmerk_verwijder IS NULL
                AND alg_onrgoed_key = l.alg_locatie_key),
             2693)        hrmedewerker,
          m.mld_melding_key,
          t.fac_tracking_datum trackingdatum,
          TRUNC (t.fac_tracking_datum) datum,
          SUBSTR (t.fac_tracking_datum, 12, 8) tijd,
          t.prs_perslid_key invoerder,
          m.prs_perslid_key_voor aanvrager,
          m.mld_melding_behandelaar_key behandelaar,
          sm.mld_stdmelding_omschrijving,
          m.mld_melding_onderwerp,
          m.mld_melding_omschrijving
     FROM mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline d,
          fac_tracking t,
          alg_locatie l
    WHERE (    t.fac_tracking_refkey = m.mld_melding_key
           AND m.mld_alg_locatie_key = l.alg_locatie_key
           AND l.alg_locatie_verwijder IS NULL
           AND t.fac_srtnotificatie_key = 21
           AND m.mld_stdmelding_key = sm.mld_stdmelding_key
           AND sm.mld_ins_discipline_key = d.ins_discipline_key
           AND d.ins_srtdiscipline_key = 41
           AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE)
           AND TO_CHAR (t.fac_tracking_datum, 'HH24') =
                 TO_CHAR (SYSDATE - 1 / 24, 'HH24'))
          OR (    t.fac_tracking_refkey = m.mld_melding_key
              AND m.mld_alg_locatie_key = l.alg_locatie_key
              AND l.alg_locatie_verwijder IS NULL
              AND t.fac_srtnotificatie_key = 21
              AND m.mld_stdmelding_key = sm.mld_stdmelding_key
              AND sm.mld_ins_discipline_key = d.ins_discipline_key
              AND d.ins_srtdiscipline_key = 41
              AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE - 1)
              AND TO_CHAR (t.fac_tracking_datum, 'HH24') =
                    TO_CHAR (SYSDATE - 1 / 24, 'HH24')
              AND TO_CHAR (SYSDATE - 1 / 24, 'HH24') = 23);

-- Rapportage t.b.v. facturatieschema
CREATE OR REPLACE VIEW WEHK_V_RAP_FACTUURSCHEMA
(
   CONTRACTKEY,
   CONTRACT_NUMMER,
   CONTRACTSOORT,
   INKOOPCATEGORIE_1E_LEVEL,
   INKOOPSCATEGORIE_2E_LEVEL,
   AFDELING_LEVEL1_AANVRAGER,
   AFDELING_LEVEL2_AANVRAGER,
   BEDRIJFSNAAM,
   CONTRACT_OMSCHRIJVING,
   FACTUURMAAND,
   BEDRAG,
   OPMERKING
)
AS
   SELECT c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          cd.ins_discipline_omschrijving,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT ckc.cnt_kenmerkcontract_waarde
                        FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
                       WHERE     ckc.cnt_contract_key = c.cnt_contract_key
                             AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                             AND ck.cnt_srtkenmerk_key = 319))
             inkoop1,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT ckc.cnt_kenmerkcontract_waarde
                        FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
                       WHERE     ckc.cnt_contract_key = c.cnt_contract_key
                             AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                             AND ck.cnt_srtkenmerk_key = 320))
             inkoop2,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT ckc.cnt_kenmerkcontract_waarde
                        FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
                       WHERE     ckc.cnt_contract_key = c.cnt_contract_key
                             AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                             AND ck.cnt_srtkenmerk_key = 288))
             afdeling1,
          (SELECT fac_usrdata_omschr
             FROM fac_usrdata
            WHERE fac_usrdata_key =
                     (SELECT ckc.cnt_kenmerkcontract_waarde
                        FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
                       WHERE     ckc.cnt_contract_key = c.cnt_contract_key
                             AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                             AND ck.cnt_srtkenmerk_key = 289))
             afdeling2,
          pb.prs_bedrijf_naam,
          c.cnt_contract_omschrijving,
          cf.cnt_factuurschema_boekmaand,
          cf.cnt_factuurschema_bedrag,
          cf.cnt_factuurschema_opmerking
     FROM cnt_factuurschema cf,
          cnt_contract c,
          cnt_v_aanwezigdiscipline cd,
          prs_bedrijf pb
    WHERE     c.cnt_contract_key = cf.cnt_contract_key
          AND c.cnt_contract_verwijder IS NULL              -- niet verwijderd
          AND c.ins_discipline_key = cd.ins_discipline_key
          AND c.cnt_prs_bedrijf_key = pb.prs_bedrijf_key;

-- WEHK#53429: Notificatiejob nieuwe ongevalsmeldingen:
CREATE OR REPLACE VIEW WEHK_V_NOTI_NEWMLDONGEVAL
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY,
   XEMAIL,
   XMOBILE
)
AS
   SELECT 'CUST05',
          NULL,
          mldv.hrmedewerker,
          (   'Er is een nieuwe ongevalsmelding ('
           || 'o /'
           || mldv.melding_key
           || ') op locatie '
           || mldv.locatieomschrijving),
          mldv.melding_key,
          NULL,
          NULL,
          NULL
     FROM WEHK_V_RAP_NEWMLDONGEVAL mldv;

CREATE OR REPLACE VIEW WEHK_V_NOTI_OPVOERENCONTRACT
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY,
   XEMAIL,
   XMOBILE
)
AS
-- Bij nieuwe "opvoeren contract" meldingen moet er een mail gaan naar
-- de verzamelbox van de contractafdeling, voor nu even mijn eigen ter test.
-- Flag = 1 instellen bij de notificatiejob! (i.v.m. xemail)
   SELECT 'CUST06',
          NULL,
          NULL,
          (   'Er staat een nieuwe melding voor opvoeren contract voor u klaar ('
           || 'i /'
           || m.mld_melding_key)
           || ')',
          m.mld_melding_key,
          NULL,
          'contracten@wehkamp.nl',
          NULL
     FROM mld_melding m,
     fac_tracking t
     WHERE m.mld_stdmelding_key = 1641
     AND m.mld_melding_key = t.fac_tracking_refkey
     AND t.fac_srtnotificatie_key =
            (SELECT fac_srtnotificatie_key
               FROM fac_srtnotificatie
              WHERE fac_srtnotificatie_code = 'MLDNEW')
     AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                                 - fac_notificatie_job_interval
                                                     / 24
                                              FROM fac_notificatie_job
                                             WHERE fac_notificatie_job_view =
                                                      'WEHK_V_NOTI_OPVOERENCONTRACT')
                                       AND  (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE fac_notificatie_job_view =
                                                       'WEHK_V_NOTI_OPVOERENCONTRACT');


-- Melding naar de in de coversheet melding geselecteerde goedkeurder.
-- Flag 8 instellen voor XSENDER!
CREATE OR REPLACE VIEW WEHK_V_NOTI_GOEDKEURDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY,
   XSENDER,
   XEMAIL,
   XMOBILE
)
AS
   SELECT 'CUST07',
          NULL,
          mkm.mld_kenmerkmelding_waarde,
          'Er staat een coversheet voor u klaar ter goedkeuring ('
           || 'i /'
           || m.mld_melding_key
          || ')',
          m.mld_melding_key,
          NULL,
          'coversheet@wehk.facilitor.nl',
          NULL,
          NULL
     FROM mld_melding m, mld_kenmerkmelding mkm, mld_kenmerk mk, fac_tracking t
    WHERE     m.mld_stdmelding_key IN (1621, 1622, 1623, 1624, 1625) -- een van de goedkeuringsmeldingen
          AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
          AND mkm.mld_melding_key = m.mld_melding_key
          AND mk.mld_srtkenmerk_key = 1847
          AND t.fac_tracking_refkey = m.mld_melding_key
          AND t.fac_srtnotificatie_key =
            (SELECT fac_srtnotificatie_key
               FROM fac_srtnotificatie
              WHERE fac_srtnotificatie_code = 'MLDNEW')
          AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                                 - fac_notificatie_job_interval
                                                     / 24
                                              FROM fac_notificatie_job
                                             WHERE fac_notificatie_job_view =
                                                      'WEHK_V_NOTI_GOEDKEURDER')
                                       AND  (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE fac_notificatie_job_view =
                                                       'WEHK_V_NOTI_GOEDKEURDER');


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