--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- Voor dbuser invullen: - indien script voor 1 klant is: 'AADS' (de klantcode, zoals vermeld in fac_version_cust)
--                       - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
--                       - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
-- (dit in tegenstelling tot sample_xxxx.sql)

DEFINE thisfile = 'PNBR.SQL'
DEFINE dbuser   = 'PNBR'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;

SELECT adm.getscriptspoolfile ('&thisfile') AS fcltlogfile FROM DUAL;

SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;

SELECT adm.checkscriptcust ('&dbuser') AS fcltcusttxt FROM DUAL;

WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF

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

CREATE OR REPLACE PROCEDURE pnbr_imp_writelog (p_import_key   IN NUMBER,
                                               p_severity     IN VARCHAR2,
                                               p_errormsg     IN VARCHAR2,
                                               p_errorhint    IN VARCHAR2)
AS
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    fac.imp_writelog (p_import_key,
                      p_severity,
                      p_errormsg,
                      p_errorhint);
    COMMIT;
END;
/

------------ Tijdelijke view voor logging

CREATE OR REPLACE VIEW pnbr_v_cursor_noti_bezoek
(
    bez_bezoekers_key,
    bez_afspraak_key,
    bez_afspraak_datum,
    bez_afspraak_tijd,
    gastheer_email,
    res_reservering_key,
    res_rsv_ruimte_omschrijving,
    fac_srtnotificatie_code
)
AS
    SELECT b.bez_bezoekers_key,
           a.bez_afspraak_key,
           TO_CHAR (bez_afspraak_datum, 'dd-mm-yyyy')    datum,
           TO_CHAR (bez_afspraak_datum, 'hh24:mi')       tijd,
           bk.bez_kenmerkwaarde_waarde                   email,
           res_reservering_key,
           res_rsv_ruimte_omschrijving,
           DECODE (
               (SELECT bk2.bez_kenmerkwaarde_waarde
                  FROM bez_kenmerkwaarde bk2
                 WHERE     bk2.bez_bezoekers_key = b.bez_bezoekers_key
                       AND bk2.bez_kenmerk_key = 1020),
               1, DECODE (rrr.res_rsv_ruimte_key, NULL, 'CUST03', 'CUST01'),
               -- uitnodiging voor gastheer alleen als aangevinkt bij bezoek en gekoppeld aan reservering.
               'CUST03')                                 fac_srtnotificatie_code
      FROM bez_bezoekers      b,
           bez_afspraak       a,
           res_rsv_ruimte     rrr,
           bez_kenmerkwaarde  bk
     WHERE     b.bez_afspraak_key = a.bez_afspraak_key
           AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
           AND bk.bez_bezoekers_key = b.bez_bezoekers_key
           AND bk.bez_kenmerk_key = 1001
           AND ( --Herinnering 3 dagen van te voren is uitgeschakeld. PNBR#31869
                --TRUNC (fac.datumtijdplusuitvoertijd (SYSDATE, 4, 'DAGEN')) =
                --   TRUNC(fac.datumtijdplusuitvoertijd (a.bez_afspraak_datum,
                                   --                                       0,
                             --                                       'UREN'))
                                                                        --  OR
                  EXISTS              -- email adres is als kenmerk toegevoegd
                      (SELECT kw.bez_kenmerkwaarde_key
                         FROM bez_kenmerkwaarde kw
                        WHERE     kw.bez_kenmerk_key = 1001 -- emailadres externe bezoeker
                              AND kw.bez_bezoekers_key = b.bez_bezoekers_key
                              AND TRUNC (kw.bez_kenmerkwaarde_aanmaak) =
                                  TRUNC (SYSDATE))
               OR EXISTS             -- aankomstdatum of tijdstip is aangepast
                      (SELECT fac_tracking_refkey
                         FROM fac_tracking t, fac_srtnotificatie sn
                        WHERE     sn.fac_srtnotificatie_code = 'BEZUPD'
                              AND t.fac_srtnotificatie_key =
                                  sn.fac_srtnotificatie_key
                              AND t.fac_tracking_refkey = a.bez_afspraak_key
                              AND fac_tracking_oms LIKE '%Aankomst:%'
                              AND TRUNC (t.fac_tracking_datum) =
                                  TRUNC (SYSDATE))
               OR EXISTS                             -- afspraak is aangemaakt
                      (SELECT fac_tracking_refkey
                         FROM fac_tracking t, fac_srtnotificatie sn
                        WHERE     sn.fac_srtnotificatie_code = 'BEZMUT'
                              AND t.fac_srtnotificatie_key =
                                  sn.fac_srtnotificatie_key
                              AND t.fac_tracking_refkey = a.bez_afspraak_key
                              AND TRUNC (t.fac_tracking_datum) =
                                  TRUNC (SYSDATE)))
    UNION ALL                                          -- bedank/feedbackbrief
    SELECT b.bez_bezoekers_key,
           a.bez_afspraak_key,
           TO_CHAR (bez_afspraak_datum, 'dd-mm-yyyy')    datum,
           TO_CHAR (bez_afspraak_datum, 'hh24:mi')       tijd,
           bk.bez_kenmerkwaarde_waarde                   email,
           res_reservering_key,
           res_rsv_ruimte_omschrijving,
           'CUST02'                                      fac_srtnotificatie_code
      FROM bez_bezoekers      b,
           bez_afspraak       a,
           res_rsv_ruimte     rrr,
           bez_kenmerkwaarde  bk,
           bez_kenmerkwaarde  bk2
     WHERE     b.bez_afspraak_key = a.bez_afspraak_key
           AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
           AND bk.bez_bezoekers_key = b.bez_bezoekers_key
           AND bk.bez_kenmerk_key = 1001
           AND bk2.bez_bezoekers_key = b.bez_bezoekers_key
           AND bk2.bez_kenmerk_key = 1020
           AND TRUNC (
                   fac.datumtijdplusuitvoertijd (a.bez_afspraak_datum,
                                                 1,
                                                 'DAGEN')) =
               TRUNC (SYSDATE);

CREATE OR REPLACE PACKAGE pnbr
AS
    TYPE t_cursor IS REF CURSOR;

    PROCEDURE update_vertr_bezoeker (p_bezoekers_key NUMBER);

    PROCEDURE noti_bezoek;

    PROCEDURE noti_bezoek_gastheer;

    FUNCTION get_kenmerk (p_module        IN VARCHAR2,
                          p_kenmerk_key   IN NUMBER,
                          p_link_key      IN NUMBER)
        RETURN VARCHAR2;

    FUNCTION get_kenmerkwaarde (p_kenmerk_type        VARCHAR2,
                                p_kenmerkdomein_key   NUMBER,
                                p_kenmerk_waarde      VARCHAR2)
        RETURN VARCHAR2;

    PROCEDURE set_kenmerk (p_module           IN VARCHAR2,
                           p_kenmerk_key      IN NUMBER,
                           p_link_key         IN NUMBER,
                           p_kenmerk_waarde   IN VARCHAR2,
                           p_history          IN NUMBER);

    PROCEDURE export_werkplekbezetting;

    PROCEDURE pnbr_rap_top10_doorlooptijd (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);

    PROCEDURE pnbr_rap_aant_tijdsblok (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);

    PROCEDURE pnbr_rap_top10_melders (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);

    PROCEDURE pnbr_rap_rap_aant_na_17uur (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);

    PROCEDURE pnbr_rap_rap_aant_weekend (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);
END;
/

CREATE OR REPLACE PACKAGE BODY pnbr
AS
    PROCEDURE update_vertr_bezoeker (p_bezoekers_key IN NUMBER)
    AS
        oracle_err_num   NUMBER;
        oracle_err_mes   VARCHAR2 (200);
        v_errormsg       VARCHAR2 (200);
    BEGIN
        -- Overschrijf de naam en het emailadres
        UPDATE bez_bezoekers b
           SET bez_afspraak_naam = 'Vertrouwelijk',
               bez_bezoekers_email = NULL,
               bez_afspraak_bedrijf = 'Vertrouwelijk'
         WHERE b.bez_bezoekers_key = p_bezoekers_key;

        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.writelog ('VERTR_BEZOEKER',
                          'E',
                          v_errormsg,
                          '');
    END;

    /*  PROCEDURE noti_bezoek
       AS
           -- cust01 brief naar cursusleider bij reserververingen
           -- cust02 dank/feedbackbrief naar cursusleider van reservering
           -- cust03 brief naar deelnemer aan reservering en los bezoek

           CURSOR c IS
               SELECT b.bez_bezoekers_key,
                      a.bez_afspraak_key,
                      TO_CHAR (bez_afspraak_datum, 'dd-mm-yyyy')    datum,
                      TO_CHAR (bez_afspraak_datum, 'hh24:mi')       tijd,
                      bk.bez_kenmerkwaarde_waarde                   email,
                      res_reservering_key,
                      res_rsv_ruimte_omschrijving,
                      DECODE (
                          (SELECT bk2.bez_kenmerkwaarde_waarde
                             FROM bez_kenmerkwaarde bk2
                            WHERE     bk2.bez_bezoekers_key =
                                      b.bez_bezoekers_key
                                  AND bk2.bez_kenmerk_key = 1020),
                          1, DECODE (rrr.res_rsv_ruimte_key,
                                     NULL, 'CUST03',
                                     'CUST01'),
                          -- uitnodiging voor gastheer alleen als aangevinkt bij bezoek en gekoppeld aan reservering.
                          'CUST03')                                 fac_srtnotificatie_code
                 FROM bez_bezoekers      b,
                      bez_afspraak       a,
                      res_rsv_ruimte     rrr,
                      bez_kenmerkwaarde  bk
                WHERE     b.bez_afspraak_key = a.bez_afspraak_key
                      AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
                      AND bk.bez_bezoekers_key = b.bez_bezoekers_key
                      AND bk.bez_kenmerk_key = 1001
                      AND ( --Herinnering 3 dagen van te voren is uitgeschakeld. PNBR#31869
                   --TRUNC (fac.datumtijdplusuitvoertijd (SYSDATE, 4, 'DAGEN')) =
                   --   TRUNC(fac.datumtijdplusuitvoertijd (a.bez_afspraak_datum,
                                      --                                       0,
                                --                                       'UREN'))
                                                                          --   OR
                             EXISTS      -- email adres is als kenmerk toegevoegd
                                 (SELECT kw.bez_kenmerkwaarde_key
                                    FROM bez_kenmerkwaarde kw
                                   WHERE     kw.bez_kenmerk_key = 1001 -- emailadres externe bezoeker
                                         AND kw.bez_bezoekers_key =
                                             b.bez_bezoekers_key
                                         AND TRUNC (
                                                 kw.bez_kenmerkwaarde_aanmaak) =
                                             TRUNC (SYSDATE))
                          OR EXISTS     -- aankomstdatum of tijdstip is aangepast
                                 (SELECT fac_tracking_refkey
                                    FROM fac_tracking t, fac_srtnotificatie sn
                                   WHERE     sn.fac_srtnotificatie_code =
                                             'BEZUPD'
                                         AND t.fac_srtnotificatie_key =
                                             sn.fac_srtnotificatie_key
                                         AND t.fac_tracking_refkey =
                                             a.bez_afspraak_key
                                         AND fac_tracking_oms LIKE '%Aankomst:%'
                                         AND TRUNC (t.fac_tracking_datum) =
                                             TRUNC (SYSDATE))
                          OR EXISTS                     -- afspraak is aangemaakt
                                 (SELECT fac_tracking_refkey
                                    FROM fac_tracking t, fac_srtnotificatie sn
                                   WHERE     sn.fac_srtnotificatie_code =
                                             'BEZMUT'
                                         AND t.fac_srtnotificatie_key =
                                             sn.fac_srtnotificatie_key
                                         AND t.fac_tracking_refkey =
                                             a.bez_afspraak_key
                                         AND TRUNC (t.fac_tracking_datum) =
                                             TRUNC (SYSDATE)))
               UNION ALL                                  -- bedank/feedbackbrief
               SELECT b.bez_bezoekers_key,
                      a.bez_afspraak_key,
                      TO_CHAR (bez_afspraak_datum, 'dd-mm-yyyy')    datum,
                      TO_CHAR (bez_afspraak_datum, 'hh24:mi')       tijd,
                      bk.bez_kenmerkwaarde_waarde                   email,
                      res_reservering_key,
                      res_rsv_ruimte_omschrijving,
                      'CUST02'                                      fac_srtnotificatie_code
                 FROM bez_bezoekers      b,
                      bez_afspraak       a,
                      res_rsv_ruimte     rrr,
                      bez_kenmerkwaarde  bk,
                      bez_kenmerkwaarde  bk2
                WHERE     b.bez_afspraak_key = a.bez_afspraak_key
                      AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                      AND bk.bez_bezoekers_key = b.bez_bezoekers_key
                      AND bk.bez_kenmerk_key = 1001
                      AND bk2.bez_bezoekers_key = b.bez_bezoekers_key
                      AND bk2.bez_kenmerk_key = 1020
                      AND TRUNC (
                              fac.datumtijdplusuitvoertijd (
                                  a.bez_afspraak_datum,
                                  1,
                                  'DAGEN')) =
                          TRUNC (SYSDATE);

           oracle_err_num         NUMBER;
           oracle_err_mes         VARCHAR2 (200);
           v_errormsg             VARCHAR2 (200);
           v_srtnotificatie_key   NUMBER (10);
           v_onderwerp            VARCHAR2 (100);
       BEGIN
           -- cleanup kenmerklink
           DELETE bez_kenmerkwaarde
            WHERE bez_kenmerk_key = 1000;                -- link naar reservering

           FOR rec IN c
           LOOP
               IF rec.res_reservering_key IS NOT NULL
               THEN
                   INSERT INTO bez_kenmerkwaarde (bez_bezoekers_key,
                                                  bez_kenmerk_key,
                                                  bez_kenmerkwaarde_waarde)
                            VALUES (rec.bez_bezoekers_key,
                                    1000,
                                    rec.res_reservering_key);

                   IF rec.fac_srtnotificatie_code = 'CUST02'     -- feedbackbrief
                   THEN
                       v_onderwerp :=
                           'Feedback: ' || rec.res_rsv_ruimte_omschrijving;
                   ELSE
                       v_onderwerp :=
                           'Uitnodiging: ' || rec.res_rsv_ruimte_omschrijving;
                   END IF;
               ELSE
                   v_onderwerp :=
                       'Afspraak ' || rec.datum || ' om ' || rec.tijd || ' uur';
               END IF;

               SELECT fac_srtnotificatie_key
                 INTO v_srtnotificatie_key
                 FROM fac_srtnotificatie
                WHERE fac_srtnotificatie_code = rec.fac_srtnotificatie_code;

               INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                            fac_notificatie_status,
                                            fac_notificatie_receiver_email,
                                            fac_notificatie_oms,
                                            fac_notificatie_refkey,
                                            fac_notificatie_extrakey,
                                            fac_notificatie_prioriteit)
                    VALUES (v_srtnotificatie_key,
                            2,
                            rec.email,
                            v_onderwerp,
                            rec.bez_afspraak_key,
                            rec.bez_bezoekers_key,
                            2);

               IF rec.fac_srtnotificatie_code = 'CUST02'         -- feedbackbrief
               THEN
                   INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                                fac_notificatie_status,
                                                prs_perslid_key_receiver,
                                                fac_notificatie_oms,
                                                fac_notificatie_refkey,
                                                fac_notificatie_extrakey,
                                                fac_notificatie_prioriteit)
                        VALUES (v_srtnotificatie_key,
                                2,
                                3593,              -- kopie naar Rob van der Plas
                                v_onderwerp,
                                rec.bez_afspraak_key,
                                rec.bez_bezoekers_key,
                                2);
               END IF;
           END LOOP;

           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.writelog ('NOTI_BEZOEKERS',
                             'E',
                             v_errormsg,
                             '');
       END;
   */

    -- Met 62081 (Inrichten bezoekersmodule + aanzetten) zijn de wensen wat aangepast
    -- Ivm de wat grillige organisatie binnen PNB voorlopig de oorspronkelijke notificaties ook maar even laten staan
    PROCEDURE noti_bezoek
    AS
        -- cust03 brief naar deelnemer aan reservering en los bezoek

        CURSOR c IS
            SELECT b.bez_bezoekers_key,
                   a.bez_afspraak_key,
                   TO_CHAR (a.bez_afspraak_datum, 'dd-mm-yyyy')    datum,
                   TO_CHAR (a.bez_afspraak_datum, 'hh24:mi')       tijd,
                   b.bez_bezoekers_email                           email,
                   res_reservering_key,
                   res_rsv_ruimte_omschrijving,
                   'CUST03'                                        fac_srtnotificatie_code
              FROM bez_bezoekers b, bez_afspraak a, res_rsv_ruimte rrr
             WHERE     b.bez_afspraak_key = a.bez_afspraak_key
                   AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
                   AND b.bez_bezoekers_email IS NOT NULL
                   AND TRUNC (a.bez_afspraak_datum) < TRUNC (SYSDATE) + 4
                   AND TRUNC (a.bez_afspraak_datum) > TRUNC (SYSDATE) - 1
                   AND NOT EXISTS                                           --
                           (SELECT kw.bez_kenmerkwaarde_key
                              FROM bez_kenmerkwaarde kw
                             WHERE     kw.bez_kenmerk_key = 1001 -- time stamp waarop notificatie verstuurd is
                                   AND kw.bez_bezoekers_key =
                                       b.bez_bezoekers_key);


        oracle_err_num         NUMBER;
        oracle_err_mes         VARCHAR2 (200);
        v_errormsg             VARCHAR2 (200);
        v_srtnotificatie_key   NUMBER (10);
        v_onderwerp            VARCHAR2 (100);
    BEGIN
        FOR rec IN c
        LOOP
            v_onderwerp :=
                   'Uw bezoek op '
                || rec.datum
                || ' aan het Provinciehuis Noord-Brabant';


            SELECT fac_srtnotificatie_key
              INTO v_srtnotificatie_key
              FROM fac_srtnotificatie
             WHERE fac_srtnotificatie_code = rec.fac_srtnotificatie_code;

            INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                         fac_notificatie_status,
                                         fac_notificatie_receiver_email,
                                         fac_notificatie_oms,
                                         fac_notificatie_refkey,
                                         fac_notificatie_extrakey,
                                         fac_notificatie_prioriteit)
                 VALUES (v_srtnotificatie_key,
                         2,
                         rec.email,
                         v_onderwerp,
                         rec.bez_afspraak_key,
                         rec.bez_bezoekers_key,
                         2);

            -- een timestamp zetten dat de mail verstuurd is
            pnbr.set_kenmerk ('BEZ',
                              1001,
                              rec.bez_bezoekers_key,
                              TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss'),
                              0);
        END LOOP;

        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.writelog ('NOTI_BEZOEKERS',
                          'E',
                          v_errormsg,
                          '');
    END;

    PROCEDURE noti_bezoek_gastheer
    AS
        -- Notificatie die naar de gastheer verzonden wordt 15 minuten voordat het bezoek verwacht wordt.

        oracle_err_num         NUMBER;
        oracle_err_mes         VARCHAR2 (200);
        v_errormsg             VARCHAR2 (200);
        v_srtnotificatie_key   NUMBER (10);
        v_van                  DATE;
        v_tot                  DATE;
        v_onderwerp            VARCHAR2 (100);
    BEGIN
        -- cleanup kenmerklink
        SELECT GREATEST (
                   COALESCE (
                       fac.safe_to_date (MAX (fac_usrdata_omschr),
                                         'yyyymmdd hh24miss'),
                       SYSDATE - 10),
                   SYSDATE + 1 / (24 * 12))              -- 5 min voor aanvang
          INTO v_van
          FROM fac_usrdata
         WHERE fac_usrdata_code = 'BEZ_NOT_LASTTIME';

        v_tot := SYSDATE + 3 / (24 * 12);               -- 15 min voor aanvang

        SELECT fac_srtnotificatie_key
          INTO v_srtnotificatie_key
          FROM fac_srtnotificatie
         WHERE fac_srtnotificatie_code = 'BEZMAI';

        INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                     fac_notificatie_status,
                                     fac_notificatie_receiver_email,
                                     fac_notificatie_oms,
                                     fac_notificatie_refkey,
                                     fac_notificatie_extrakey,
                                     fac_notificatie_prioriteit,
                                     prs_perslid_key_receiver)
            SELECT v_srtnotificatie_key,
                   2,
                   h.prs_perslid_email,
                      'Herinnering: '
                   || DECODE (
                          rrr.res_rsv_ruimte_key,
                          NULL,    'Reservering '
                                || rrr.res_reservering_key
                                || ': over 15 minuten arriveren deelnemers voor bijeenkomst: '
                                || rrr.res_rsv_ruimte_omschrijving,
                          'Over 15 minuten arriveert bezoek voor uw afspraak'),
                   a.bez_afspraak_key,
                   NULL,
                   2,
                   h.prs_perslid_key
              FROM bez_afspraak a, prs_perslid h, res_rsv_ruimte rrr
             WHERE     a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                   AND bez_afspraak_datum > v_van
                   AND bez_afspraak_datum <= v_tot
                   AND a.bez_afspraak_host_key = h.prs_perslid_key
                   AND h.prs_perslid_email IS NOT NULL;

        UPDATE fac_usrdata
           SET fac_usrdata_omschr = TO_CHAR (v_tot, 'yyyymmdd hh24miss')
         WHERE fac_usrdata_code = 'BEZ_NOT_LASTTIME';

        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.writelog ('NOTI_BEZOEKERS_GASTHEER',
                          'E',
                          v_errormsg,
                          '');
    END;

    FUNCTION get_kenmerk (p_module        IN VARCHAR2,
                          p_kenmerk_key   IN NUMBER,
                          p_link_key      IN NUMBER)
        RETURN VARCHAR2
    AS
        v_kenmerk_type        mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE;
        v_kenmerk_waarde      mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
        v_kenmerkdomein_key   fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE;
    BEGIN
        CASE p_module
            WHEN 'MLD'
            THEN
                SELECT mld_srtkenmerk_kenmerktype,
                       sk.fac_kenmerkdomein_key,
                       km.mld_kenmerkmelding_waarde
                  INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
                  FROM mld_v_aanwezigkenmerkmelding  km,
                       mld_kenmerk                   k,
                       mld_srtkenmerk                sk
                 WHERE     km.mld_melding_key = p_link_key
                       AND km.mld_kenmerk_key = p_kenmerk_key
                       AND km.mld_kenmerk_key = k.mld_kenmerk_key
                       AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            WHEN 'CNT'
            THEN
                SELECT cnt_srtkenmerk_kenmerktype,
                       sk.fac_kenmerkdomein_key,
                       kc.cnt_kenmerkcontract_waarde
                  INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
                  FROM cnt_kenmerkcontract  kc,
                       cnt_kenmerk          k,
                       cnt_srtkenmerk       sk
                 WHERE     kc.cnt_contract_key = p_link_key
                       AND kc.cnt_kenmerk_key = p_kenmerk_key
                       AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                       AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key;
            WHEN 'ALG'
            THEN
                SELECT alg_kenmerk_kenmerktype,
                       k.fac_kenmerkdomein_key,
                       aogk.alg_onrgoedkenmerk_waarde
                  INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
                  FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
                 WHERE     aogk.alg_onrgoed_key = p_link_key
                       AND aogk.alg_kenmerk_key = p_kenmerk_key
                       AND aogk.alg_kenmerk_key = k.alg_kenmerk_key;
            WHEN 'INS'
            THEN
                SELECT sk.ins_srtkenmerk_kenmerktype,
                       sk.fac_kenmerkdomein_key,
                       ikd.ins_kenmerkdeel_waarde
                  INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
                  FROM ins_kenmerkdeel ikd, ins_kenmerk k, ins_srtkenmerk sk
                 WHERE     ikd.ins_deel_key = p_link_key
                       AND ikd.ins_kenmerkdeel_verwijder IS NULL
                       AND ikd.ins_kenmerk_key = p_kenmerk_key
                       AND ikd.ins_kenmerk_key = k.ins_kenmerk_key
                       AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
        END CASE;

        RETURN get_kenmerkwaarde (v_kenmerk_type,
                                  v_kenmerkdomein_key,
                                  v_kenmerk_waarde);
    END;

    PROCEDURE set_kenmerk (p_module           IN VARCHAR2,
                           p_kenmerk_key      IN NUMBER,
                           p_link_key         IN NUMBER,
                           p_kenmerk_waarde   IN VARCHAR2,
                           p_history          IN NUMBER)
    AS
        v_count    NUMBER;
        v_niveau   VARCHAR2 (1);
    BEGIN
        CASE p_module
            WHEN 'PRS'
            THEN
                -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
                -- opgeslagen (da's dus redundant..?)
                SELECT prs_kenmerk_niveau
                  INTO v_niveau
                  FROM prs_kenmerk
                 WHERE prs_kenmerk_key = p_kenmerk_key;

                SELECT COUNT (*)
                  INTO v_count
                  FROM prs_kenmerklink
                 WHERE     prs_link_key = p_link_key
                       AND prs_kenmerk_key = p_kenmerk_key
                       AND prs_kenmerklink_verwijder IS NULL;

                IF v_count = 1
                THEN
                    IF p_kenmerk_waarde IS NULL
                    THEN
                        DELETE prs_kenmerklink
                         WHERE     prs_link_key = p_link_key
                               AND prs_kenmerk_key = p_kenmerk_key
                               AND prs_kenmerklink_verwijder IS NULL;
                    ELSE
                        UPDATE prs_kenmerklink
                           SET prs_kenmerklink_waarde = p_kenmerk_waarde
                         WHERE     prs_link_key = p_link_key
                               AND prs_kenmerk_key = p_kenmerk_key
                               AND prs_kenmerklink_verwijder IS NULL;
                    END IF;
                ELSE
                    IF     p_kenmerk_key IS NOT NULL
                       AND p_kenmerk_waarde IS NOT NULL
                    THEN
                        INSERT INTO prs_kenmerklink (prs_kenmerk_key,
                                                     prs_link_key,
                                                     prs_kenmerklink_niveau,
                                                     prs_kenmerklink_waarde)
                             VALUES (p_kenmerk_key,
                                     p_link_key,
                                     v_niveau,
                                     p_kenmerk_waarde);
                    END IF;
                END IF;
            WHEN 'ALG'
            THEN
                -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
                -- opgeslagen (da's dus redundant..?)
                SELECT alg_kenmerk_niveau
                  INTO v_niveau
                  FROM alg_kenmerk
                 WHERE alg_kenmerk_key = p_kenmerk_key;

                SELECT COUNT (*)
                  INTO v_count
                  FROM alg_onrgoedkenmerk
                 WHERE     alg_onrgoed_key = p_link_key
                       AND alg_kenmerk_key = p_kenmerk_key
                       AND alg_onrgoedkenmerk_verwijder IS NULL;

                IF v_count = 1
                THEN
                    IF p_kenmerk_waarde IS NULL
                    THEN
                        DELETE alg_onrgoedkenmerk
                         WHERE     alg_onrgoed_key = p_link_key
                               AND alg_kenmerk_key = p_kenmerk_key
                               AND alg_onrgoedkenmerk_verwijder IS NULL;
                    ELSE
                        UPDATE alg_onrgoedkenmerk
                           SET alg_onrgoedkenmerk_waarde = p_kenmerk_waarde
                         WHERE     alg_onrgoed_key = p_link_key
                               AND alg_kenmerk_key = p_kenmerk_key
                               AND alg_onrgoedkenmerk_verwijder IS NULL;
                    END IF;
                ELSE
                    IF     p_kenmerk_key IS NOT NULL
                       AND p_kenmerk_waarde IS NOT NULL
                    THEN
                        INSERT INTO alg_onrgoedkenmerk (
                                        alg_kenmerk_key,
                                        alg_onrgoed_key,
                                        alg_onrgoed_niveau,
                                        alg_onrgoedkenmerk_waarde)
                             VALUES (p_kenmerk_key,
                                     p_link_key,
                                     v_niveau,
                                     p_kenmerk_waarde);
                    END IF;
                END IF;
            WHEN 'BEZ'
            THEN
                SELECT COUNT (*)
                  INTO v_count
                  FROM bez_kenmerkwaarde
                 WHERE     bez_bezoekers_key = p_link_key
                       AND bez_kenmerk_key = p_kenmerk_key
                       AND bez_kenmerkwaarde_verwijder IS NULL;

                IF v_count = 1
                THEN
                    IF p_kenmerk_waarde IS NULL
                    THEN
                        DELETE bez_kenmerkwaarde
                         WHERE     bez_bezoekers_key = p_link_key
                               AND bez_kenmerk_key = p_kenmerk_key
                               AND bez_kenmerkwaarde_verwijder IS NULL;
                    ELSE
                        UPDATE bez_kenmerkwaarde
                           SET bez_kenmerkwaarde_waarde = p_kenmerk_waarde
                         WHERE     bez_bezoekers_key = p_link_key
                               AND bez_kenmerk_key = p_kenmerk_key
                               AND bez_kenmerkwaarde_verwijder IS NULL;
                    END IF;
                ELSE
                    IF     p_kenmerk_key IS NOT NULL
                       AND p_kenmerk_waarde IS NOT NULL
                    THEN
                        INSERT INTO bez_kenmerkwaarde (
                                        bez_kenmerk_key,
                                        bez_bezoekers_key,
                                        bez_kenmerkwaarde_waarde)
                                 VALUES (p_kenmerk_key,
                                         p_link_key,
                                         p_kenmerk_waarde);
                    END IF;
                END IF;
            WHEN 'MLD'
            THEN
                -- melding- of opdrachtkenmerk?
                SELECT mld_kenmerk_niveau
                  INTO v_niveau
                  FROM mld_kenmerk
                 WHERE mld_kenmerk_key = p_kenmerk_key;

                CASE v_niveau
                    WHEN 'O'
                    THEN
                        SELECT COUNT (*)
                          INTO v_count
                          FROM mld_kenmerkopdr
                         WHERE     mld_opdr_key = p_link_key
                               AND mld_kenmerk_key = p_kenmerk_key
                               AND mld_kenmerkopdr_verwijder IS NULL;

                        IF v_count = 1
                        THEN
                            IF p_kenmerk_waarde IS NULL
                            THEN
                                DELETE mld_kenmerkopdr
                                 WHERE     mld_opdr_key = p_link_key
                                       AND mld_kenmerk_key = p_kenmerk_key
                                       AND mld_kenmerkopdr_verwijder IS NULL;
                            ELSE
                                UPDATE mld_kenmerkopdr
                                   SET mld_kenmerkopdr_waarde =
                                           p_kenmerk_waarde
                                 WHERE     mld_opdr_key = p_link_key
                                       AND mld_kenmerk_key = p_kenmerk_key
                                       AND mld_kenmerkopdr_verwijder IS NULL;
                            END IF;
                        ELSE
                            IF     p_kenmerk_key IS NOT NULL
                               AND p_kenmerk_waarde IS NOT NULL
                            THEN
                                INSERT INTO mld_kenmerkopdr (
                                                mld_kenmerk_key,
                                                mld_opdr_key,
                                                mld_kenmerkopdr_waarde)
                                         VALUES (p_kenmerk_key,
                                                 p_link_key,
                                                 p_kenmerk_waarde);
                            END IF;
                        END IF;
                    WHEN 'S'
                    THEN
                        SELECT COUNT (*)
                          INTO v_count
                          FROM mld_kenmerkmelding
                         WHERE     mld_melding_key = p_link_key
                               AND mld_kenmerk_key = p_kenmerk_key
                               AND mld_kenmerkmelding_verwijder IS NULL;

                        IF v_count = 1
                        THEN
                            IF p_kenmerk_waarde IS NULL
                            THEN
                                DELETE mld_kenmerkmelding
                                 WHERE     mld_melding_key = p_link_key
                                       AND mld_kenmerk_key = p_kenmerk_key
                                       AND mld_kenmerkmelding_verwijder
                                               IS NULL;
                            ELSE
                                UPDATE mld_kenmerkmelding
                                   SET mld_kenmerkmelding_waarde =
                                           p_kenmerk_waarde
                                 WHERE     mld_melding_key = p_link_key
                                       AND mld_kenmerk_key = p_kenmerk_key
                                       AND mld_kenmerkmelding_verwijder
                                               IS NULL;
                            END IF;
                        ELSE
                            IF     p_kenmerk_key IS NOT NULL
                               AND p_kenmerk_waarde IS NOT NULL
                            THEN
                                INSERT INTO mld_kenmerkmelding (
                                                mld_kenmerk_key,
                                                mld_melding_key,
                                                mld_kenmerkmelding_waarde)
                                         VALUES (p_kenmerk_key,
                                                 p_link_key,
                                                 p_kenmerk_waarde);
                            END IF;
                        END IF;
                END CASE;
            WHEN 'FIN'
            THEN
                -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt
                -- opgeslagen (da's dus redundant..?)
                SELECT fin_kenmerk_type
                  INTO v_niveau
                  FROM fin_kenmerk
                 WHERE fin_kenmerk_key = p_kenmerk_key;


                IF v_niveau = 'F'
                THEN
                    SELECT COUNT (*)
                      INTO v_count
                      FROM fin_kenmerkfactuur
                     WHERE     fin_factuur_key = p_link_key
                           AND fin_kenmerk_key = p_kenmerk_key
                           AND fin_kenmerkfactuur_verwijder IS NULL;

                    IF v_count = 1
                    THEN
                        IF p_kenmerk_waarde IS NULL
                        THEN
                            DELETE fin_kenmerkfactuur
                             WHERE     fin_factuur_key = p_link_key
                                   AND fin_kenmerk_key = p_kenmerk_key
                                   AND fin_kenmerkfactuur_verwijder IS NULL;
                        ELSE
                            UPDATE fin_kenmerkfactuur
                               SET fin_kenmerkfactuur_waarde =
                                       p_kenmerk_waarde
                             WHERE     fin_factuur_key = p_link_key
                                   AND fin_kenmerk_key = p_kenmerk_key
                                   AND fin_kenmerkfactuur_verwijder IS NULL;
                        END IF;
                    ELSE
                        IF     p_kenmerk_key IS NOT NULL
                           AND p_kenmerk_waarde IS NOT NULL
                        THEN
                            INSERT INTO fin_kenmerkfactuur (
                                            fin_kenmerk_key,
                                            fin_factuur_key,
                                            fin_kenmerkfactuur_waarde)
                                     VALUES (p_kenmerk_key,
                                             p_link_key,
                                             p_kenmerk_waarde);
                        END IF;
                    END IF;
                ELSE
                    -- Kenmerk bij factuurregel
                    SELECT COUNT (*)
                      INTO v_count
                      FROM fin_kenmerkfactregel
                     WHERE     fin_factuurregel_key = p_link_key
                           AND fin_kenmerk_key = p_kenmerk_key
                           AND fin_kenmerkfactregel_verwijder IS NULL;

                    IF v_count = 1
                    THEN
                        IF p_kenmerk_waarde IS NULL
                        THEN
                            DELETE fin_kenmerkfactregel
                             WHERE     fin_factuurregel_key = p_link_key
                                   AND fin_kenmerk_key = p_kenmerk_key
                                   AND fin_kenmerkfactregel_verwijder IS NULL;
                        ELSE
                            UPDATE fin_kenmerkfactregel
                               SET fin_kenmerkfactregel_waarde =
                                       p_kenmerk_waarde
                             WHERE     fin_factuurregel_key = p_link_key
                                   AND fin_kenmerk_key = p_kenmerk_key
                                   AND fin_kenmerkfactregel_verwijder IS NULL;
                        END IF;
                    ELSE
                        IF     p_kenmerk_key IS NOT NULL
                           AND p_kenmerk_waarde IS NOT NULL
                        THEN
                            INSERT INTO fin_kenmerkfactregel (
                                            fin_kenmerk_key,
                                            fin_factuurregel_key,
                                            fin_kenmerkfactregel_waarde)
                                     VALUES (p_kenmerk_key,
                                             p_link_key,
                                             p_kenmerk_waarde);
                        END IF;
                    END IF;
                END IF;
            WHEN 'RES'
            THEN
                -- res_rsv_ruimte kenmerk
                SELECT COUNT (*)
                  INTO v_count
                  FROM res_kenmerkwaarde
                 WHERE     res_rsv_ruimte_key = p_link_key
                       AND res_kenmerk_key = p_kenmerk_key
                       AND res_kenmerkwaarde_verwijder IS NULL;

                IF v_count = 1
                THEN
                    IF p_kenmerk_waarde IS NULL
                    THEN
                        DELETE res_kenmerkwaarde
                         WHERE     res_rsv_ruimte_key = p_link_key
                               AND res_kenmerk_key = p_kenmerk_key
                               AND res_kenmerkwaarde_verwijder IS NULL;
                    ELSE
                        UPDATE res_kenmerkwaarde
                           SET res_kenmerkreservering_waarde =
                                   p_kenmerk_waarde
                         WHERE     res_rsv_ruimte_key = p_link_key
                               AND res_kenmerk_key = p_kenmerk_key
                               AND res_kenmerkwaarde_verwijder IS NULL;
                    END IF;
                ELSE
                    IF     p_kenmerk_key IS NOT NULL
                       AND p_kenmerk_waarde IS NOT NULL
                    THEN
                        INSERT INTO res_kenmerkwaarde (
                                        res_kenmerk_key,
                                        res_rsv_ruimte_key,
                                        res_kenmerkreservering_waarde)
                                 VALUES (p_kenmerk_key,
                                         p_link_key,
                                         p_kenmerk_waarde);
                    END IF;
                END IF;
        END CASE;
    END;


    FUNCTION get_kenmerkwaarde (p_kenmerk_type        VARCHAR2,
                                p_kenmerkdomein_key   NUMBER,
                                p_kenmerk_waarde      VARCHAR2)
        RETURN VARCHAR2
    AS
        v_result   VARCHAR2 (2000);
    BEGIN
        IF p_kenmerk_type = 'R' OR p_kenmerk_type = 'S'
        THEN
            v_result :=
                fac.getdomeinwaarde (p_kenmerkdomein_key, p_kenmerk_waarde);
        ELSIF p_kenmerk_type = 'D'
        THEN
            v_result :=
                TO_CHAR (fac.safe_to_date (p_kenmerk_waarde, 'dd-mm-yyyy'),
                         'yyyy-mm-dd');
        ELSE
            v_result := p_kenmerk_waarde;
        END IF;

        RETURN v_result;
    END;

    PROCEDURE export_werkplekbezetting
    AS
        oracle_err_num   NUMBER;
        oracle_err_mes   VARCHAR2 (200);
        v_errormsg       VARCHAR2 (200);

        CURSOR c IS
            SELECT *
              FROM (SELECT *
                      FROM (  SELECT d.ins_deel_key,
                                     r.alg_ruimte_key,
                                     TRUNC (stat_his.ins_deel_statedate)
                                         DATUM,
                                     'BEZET'
                                         waarde,
                                     SUM (stat_his.duur_status)
                                         MINUTEN
                                FROM ins_deel  d,
                                     alg_ruimte r,
                                     (SELECT ranking,
                                             ins_deel_key,
                                             ins_deel_state,
                                             ins_deel_statedate,
                                               (  ins_deel_statedate
                                                - LAG (ins_deel_statedate)
                                                      OVER (
                                                          PARTITION BY ins_deel_key
                                                          ORDER BY ranking))
                                             * -1440    AS duur_status --- duur van de status in minuten
                                        FROM (SELECT ins_deel_key,
                                                     ins_deel_state,
                                                     ins_deel_statedate,
                                                     RANK ()
                                                         OVER (
                                                             PARTITION BY ins_deel_key
                                                             ORDER BY
                                                                 ins_deel_key,
                                                                 ins_deel_statedate DESC)    AS ranking
                                                FROM ins_deel_state_history)
                                             rank_state) stat_his
                               WHERE     d.ins_deel_key = stat_his.ins_deel_key
                                     AND d.ins_alg_ruimte_key =
                                         r.alg_ruimte_key
                                     AND d.ins_srtdeel_key = 3521 --- alleen sensoren van hi-technologies
                                     AND stat_his.ins_deel_state = 1 -- voor de management info houden we het simpel: wat bezet is bewaren we
                            GROUP BY d.ins_deel_key,
                                     r.alg_ruimte_key,
                                     TRUNC (stat_his.ins_deel_statedate)
                            UNION ALL
                              SELECT d.ins_deel_key,
                                     r.alg_ruimte_key,
                                     TRUNC (stat_his.ins_deel_statedate)
                                         DATUM,
                                     'STORING'
                                         waarde,
                                     SUM (stat_his.duur_status)
                                         MINUTEN
                                FROM ins_deel  d,
                                     alg_ruimte r,
                                     (SELECT ranking,
                                             ins_deel_key,
                                             ins_deel_state,
                                             ins_deel_statedate,
                                               (  ins_deel_statedate
                                                - LAG (ins_deel_statedate)
                                                      OVER (
                                                          PARTITION BY ins_deel_key
                                                          ORDER BY ranking))
                                             * -1440    AS duur_status --- duur van de status in minuten
                                        FROM (SELECT ins_deel_key,
                                                     ins_deel_state,
                                                     ins_deel_statedate,
                                                     RANK ()
                                                         OVER (
                                                             PARTITION BY ins_deel_key
                                                             ORDER BY
                                                                 ins_deel_key,
                                                                 ins_deel_statedate DESC)    AS ranking
                                                FROM ins_deel_state_history)
                                             rank_state) stat_his
                               WHERE     d.ins_deel_key = stat_his.ins_deel_key
                                     AND d.ins_alg_ruimte_key =
                                         r.alg_ruimte_key
                                     AND d.ins_srtdeel_key = 3521 --- alleen sensoren van hi-technologies
                                     AND stat_his.ins_deel_state = 99 -- voor de management info houden we het simpel: wat in storing is bewaren we
                            GROUP BY d.ins_deel_key,
                                     r.alg_ruimte_key,
                                     TRUNC (stat_his.ins_deel_statedate)))
             WHERE TRUNC (DATUM) = TRUNC (SYSDATE) - 1;
    BEGIN
        FOR rec IN c
        LOOP
            INSERT INTO pnbr_werkplekbezetting (ins_deel_key,
                                                alg_ruimte_key,
                                                ins_deel_state_date,
                                                status,
                                                duur_status)
                 VALUES (rec.ins_deel_key,
                         rec.alg_ruimte_key,
                         rec.datum,
                         rec.waarde,
                         rec.minuten);
        END LOOP;

        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.writelog ('NOTI_BEZOEKERS',
                          'E',
                          v_errormsg,
                          '');
    END;

    PROCEDURE pnbr_rap_top10_doorlooptijd (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 ranking,
                   vakgroep,
                   standaardmelding,
                   gem_doorloopt_uren
              FROM (  SELECT vg.ins_discipline_omschrijving
                                 AS vakgroep,
                             sm.mld_stdmelding_omschrijving
                                 AS standaardmelding,
                             ROUND (
                                   SUM (
                                       COALESCE (sla.doorlooptijd_werkdgn * 8,
                                                 sla.doorlooptijd_werkuren))
                                 / COUNT (m.mld_melding_key),
                                 1)
                                 gem_doorloopt_uren,
                             DENSE_RANK ()
                                 OVER (
                                     ORDER BY
                                         (ROUND (
                                                SUM (
                                                    COALESCE (
                                                          sla.doorlooptijd_werkdgn
                                                        * 8,
                                                        sla.doorlooptijd_werkuren))
                                              / COUNT (m.mld_melding_key),
                                              1)) DESC)
                                 ranking
                        FROM mld_melding       m,
                             mld_stdmelding    sm,
                             ins_tab_discipline vg,
                             mld_v_udr_melding sla
                       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
                             AND sm.mld_ins_discipline_key =
                                 vg.ins_discipline_key
                             AND m.mld_melding_key = sla.melding_key
                             AND m.mld_melding_datum <= v_datum_tot
                             AND m.mld_melding_datum >= v_datum_van
                    GROUP BY vg.ins_discipline_omschrijving,
                             vg.ins_discipline_key,
                             sm.mld_stdmelding_omschrijving,
                             sm.mld_stdmelding_key) ranking_stdmelding
             WHERE ranking_stdmelding.ranking <= 10;
    END;

    PROCEDURE pnbr_rap_aant_tijdsblok (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 COUNT (m.mld_melding_key)
                       aant_mld,
                   SUM (
                       CASE WHEN m.tijd >= 0 AND m.tijd < 7 THEN 1 ELSE 0 END)
                       AS nacht,
                   ROUND (
                         (  SUM (
                                CASE
                                    WHEN m.tijd >= 0 AND m.tijd < 7 THEN 1
                                    ELSE 0
                                END)
                          / COUNT (m.mld_melding_key))
                       * 100,
                       1)
                       perc_nacht,
                   SUM (
                       CASE
                           WHEN m.tijd >= 7 AND m.tijd < 12 THEN 1
                           ELSE 0
                       END)
                       AS ochtend,
                   ROUND (
                         (  SUM (
                                CASE
                                    WHEN m.tijd >= 7 AND m.tijd < 12 THEN 1
                                    ELSE 0
                                END)
                          / COUNT (m.mld_melding_key))
                       * 100,
                       1)
                       perc_ochtend,
                   SUM (
                       CASE
                           WHEN m.tijd >= 12 AND m.tijd < 18 THEN 1
                           ELSE 0
                       END)
                       AS middag,
                   ROUND (
                         (  SUM (
                                CASE
                                    WHEN m.tijd >= 12 AND m.tijd < 18 THEN 1
                                    ELSE 0
                                END)
                          / COUNT (m.mld_melding_key))
                       * 100,
                       1)
                       perc_middag,
                   SUM (CASE WHEN m.tijd >= 18 THEN 1 ELSE 0 END)
                       AS avond,
                   ROUND (
                         (  SUM (CASE WHEN m.tijd >= 18 THEN 1 ELSE 0 END)
                          / COUNT (m.mld_melding_key))
                       * 100,
                       1)
                       perc_avond
              FROM (SELECT m.mld_melding_key,
                           m.mld_melding_datum,
                           TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24'))
                               tijd,
                           TO_CHAR (m.mld_melding_datum, 'DAY')
                               dag,
                           TO_CHAR (m.mld_melding_datum, 'd')
                               dag_week
                      FROM mld_melding m
                     WHERE     m.mld_melding_datum <= v_datum_tot
                           AND m.mld_melding_datum >= v_datum_van
                           AND   m.mld_melding_datum
                               - TRUNC (m.mld_melding_datum) >
                               0) m;
    END;

    PROCEDURE pnbr_rap_top10_melders (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 ranking, prs_perslid_naam_friendly, aant_mld
              FROM (  SELECT p.prs_perslid_key,
                             p.prs_perslid_naam_friendly,
                             COUNT (m.mld_melding_key)                             aant_mld,
                             DENSE_RANK ()
                                 OVER (ORDER BY COUNT (m.mld_melding_key) DESC)    ranking
                        FROM mld_melding m, prs_v_perslid_fullnames_all p
                       WHERE     m.prs_perslid_key_voor = p.prs_perslid_key
                             AND m.mld_melding_datum <= v_datum_tot
                             AND m.mld_melding_datum >= v_datum_van
                    GROUP BY p.prs_perslid_key, p.prs_perslid_naam_friendly)
                   ranking_users
             WHERE ranking_users.ranking <= 10;
    END;

    PROCEDURE pnbr_rap_rap_aant_na_17uur (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 COUNT (m.mld_melding_key)
                       aant_mld,
                   SUM (CASE WHEN m.tijd > 17 THEN 1 ELSE 0 END)
                       AS na_17uur,
                   ROUND (
                         (  SUM (CASE WHEN m.tijd > 17 THEN 1 ELSE 0 END)
                          / COUNT (m.mld_melding_key))
                       * 100,
                       1)
                       perc_na_17uur
              FROM (SELECT m.mld_melding_key,
                           m.mld_melding_datum,
                           TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24'))
                               tijd,
                           TO_CHAR (m.mld_melding_datum, 'DAY')
                               dag,
                           TO_CHAR (m.mld_melding_datum, 'd')
                               dag_week
                      FROM mld_melding m
                     WHERE     m.mld_melding_datum <= v_datum_tot
                           AND m.mld_melding_datum >= v_datum_van
                           AND   m.mld_melding_datum
                               - TRUNC (m.mld_melding_datum) >
                               0) m;
    END;

    PROCEDURE pnbr_rap_rap_aant_weekend (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 COUNT (m.mld_melding_key)    AANT_MLD,
                   SUM (
                       CASE
                           WHEN (   DAG_WEEK = 1                     -- zondag
                                 OR DAG_WEEK = 7                   -- zaterdag
                                 OR (DAG_WEEK = 2 AND TIJD < 7) --- maandag voor 8 uur
                                 OR (DAG_WEEK = 6 AND TIJD > 17) -- vrijdag na 8 uur
                                                                )
                           THEN
                               1
                           ELSE
                               0
                       END)                     AS AANT_WEEKEND
              FROM (SELECT m.mld_melding_key,
                           m.mld_melding_datum,
                           TO_NUMBER (TO_CHAR (m.mld_melding_datum, 'HH24'))
                               tijd,
                           DECODE (fac.getweekdaynum (m.mld_melding_datum),
                                   2, 'maandag',
                                   3, 'dinsdag',
                                   4, 'woensdag',
                                   5, 'donderdag',
                                   6, 'vrijdag',
                                   7, 'zaterdag',
                                   1, 'zondag')
                               AS dag,
                           TO_CHAR (m.mld_melding_datum, 'd')
                               dag_week
                      FROM mld_melding m
                     WHERE     m.mld_melding_datum <= v_datum_tot
                           AND m.mld_melding_datum >= v_datum_van
                           AND   m.mld_melding_datum
                               - TRUNC (m.mld_melding_datum) >
                               0) m;
    END;
END;
/

-- script om dagelijks terugkerende scripts aan te roepen.

CREATE OR REPLACE PROCEDURE pnbr_select_daily_task (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2)
AS
BEGIN
    -- notificatiejob om voor bezoekers.
    pnbr.noti_bezoek ();
END;
/

-- script om 5-min terugkerende scripts aan te roepen.

CREATE OR REPLACE PROCEDURE pnbr_select_five_min_task (
    p_applname   IN VARCHAR2,
    p_applrun    IN VARCHAR2)
AS
BEGIN
    -- notificatiejob om bezoekers te notificeren naar de gastheer.
    pnbr.noti_bezoek_gastheer ();
END;
/

--=============================================================================
-- IMPORTFUNCTIES
-------------------------------------------------------------------------------

CREATE OR REPLACE PROCEDURE pnbr_import_perslid_mut (p_import_key IN NUMBER)
AS
    v_seq_of_columns   VARCHAR (255);
BEGIN
    v_seq_of_columns :=
        '0;0;0;0;0;0;7;8;9;11;10;0;0;0;0;14;15;16;0;18;17;19;20;13;0;0;12;0;0;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46';
        ---  '0;0;0;0;0;0;7;8;9;11;10;0;0;0;0;13;14;15;0;17;16;18;19;12;0;0;0;0;0;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46';
    prs.import_perslid (
        p_import_key,
        v_seq_of_columns,
        'LOCATIECODE;GEBOUWCODE;BOUWLAAGVOLGNUMMER;RUIMTENUMMER;WERKPLEKVOLGNUMMER;OMSCHRIJVING;AFDELINGSCODE;PERSOONACHTERNAAM;TUSSENVOEGSEL;VOORLETTERS;VOORNAAM;TELEFOONNR3;TITEL_AANHEF;TELEFOONNUMMER;MOBIEL;EMAIL;FUNCTIE;PERSONEELSNUMMER;LOGINNAAM;PASSWORD%');

    -- we gebruikten kenmerk1 om tijdelijk de verdieping op te slaan. Bij PNBR kunnen namelijk letters in de verdieping staan. Deze
    -- proberen we eruit te werken zodat we op het laatst de verdieping weer om kunnen zetten.

    -- Zie Logcentre #63326: aanpassing personen import. De ruimte gegevens geven veel foutmeldingen.
    -- We nemen de locatie gegevens voorlopig niet meer over
    /*
    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'PH',
           alg_gebouw_code = '01',
           alg_verdieping_volgnr =
               DECODE (prs_kenmerk1,
                       'B (Begane grond)', 0,
                       'P (Parkeerkuilniveau)', -1,
                       fac.safe_to_number (SUBSTR (prs_kenmerk1, 12, 2))),
           alg_ruimte_nr =
               DECODE (UPPER (alg_ruimte_nr), 'FLEX', '_FLEX', alg_ruimte_nr)
     WHERE     prs_kenmerk2 = 'Provinciehuis - toren'
           AND prs_kenmerk1 NOT LIKE 'Domein%';

    -- Pas de ruimten van de nieuwbouw aan.
    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'PH',
           alg_gebouw_code = '02',
           alg_verdieping_volgnr =
               fac.safe_to_number (SUBSTR (prs_kenmerk1, 12, 1)),
           alg_ruimte_nr = COALESCE (alg_ruimte_nr, '_FLEX')
     WHERE prs_kenmerk2 = 'Provinciehuis - nieuwbouw';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'PH',
           alg_gebouw_code = '01',
           alg_verdieping_volgnr =
               fac.safe_to_number (SUBSTR (prs_kenmerk1, 11, 2)) + 1,
           alg_ruimte_nr = '_FLEX'
     WHERE     prs_kenmerk2 = 'Provinciehuis - toren'
           AND prs_kenmerk1 LIKE 'Domein%';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'OMWB',
           alg_gebouw_code = 'OMWB',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '1'
     WHERE prs_kenmerk2 = 'Omg.dienst West Brabant';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '27',
           alg_gebouw_code = '27',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Rekenkamer Brabant/Limburg';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'ODZOB',
           alg_gebouw_code = 'ODZOB',
           alg_verdieping_volgnr = '1',
           alg_ruimte_nr = '1'
     WHERE prs_kenmerk2 = 'Omg.dienst Zuid-Oost Brabant';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '26',
           alg_gebouw_code = '26',
           alg_verdieping_volgnr = '1',
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Eindhoven';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'BRU',
           alg_gebouw_code = 'BRU',
           alg_verdieping_volgnr = '1',
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Brussel';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '23',
           alg_gebouw_code = '23',
           alg_verdieping_volgnr = '1',
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Het Noordbrabants museum';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '51',
           alg_gebouw_code = '51',
           alg_verdieping_volgnr = '1',
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Kantoor Den Haag';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = 'ODBN',
           alg_gebouw_code = 'ODBN',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '1'
     WHERE prs_kenmerk2 = 'Omg.dienst Brabant Noord';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '5',
           alg_gebouw_code = '5',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Steunpunt Eethen';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '11',
           alg_gebouw_code = '11',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Steunpunt Helmond';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '2',
           alg_gebouw_code = '2',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Steunpunt Oud Gastel';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '07',
           alg_gebouw_code = '07',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Steunpunt Uden';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '09',
           alg_gebouw_code = '09',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Steunpunt Westerhoven';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '--',
           alg_gebouw_code = '--',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Streekhuis Boven Dommel';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '---',
           alg_gebouw_code = '---',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Streekhuis Kempenland';

    UPDATE fac_imp_perslid
       SET alg_locatie_code = '41',
           alg_gebouw_code = '41',
           alg_verdieping_volgnr = 1,
           alg_ruimte_nr = '01'
     WHERE prs_kenmerk2 = 'Streekhuis Liempde';

    UPDATE fac_imp_perslid
       SET alg_ruimte_nr = 'HJZ'
     WHERE alg_ruimte_nr LIKE 'HJZ%';

     */

    COMMIT;
END pnbr_import_perslid_mut;
/

CREATE OR REPLACE PROCEDURE pnbr_update_perslid_mut (p_import_key IN NUMBER)
IS
    c_fielddelimitor              VARCHAR2 (1) := ';';

    v_errormsg                    VARCHAR2 (1000);
    v_errorhint                   VARCHAR2 (1000);
    oracle_err_num                NUMBER;
    oracle_err_mes                VARCHAR2 (200);
    v_aanduiding                  VARCHAR2 (200);
    v_sleutelkolom                VARCHAR2 (200);

    v_count                       NUMBER (10);
    v_ongeldig                    NUMBER (1);
    v_count_update                NUMBER (10);
    v_count_error                 NUMBER (10);
    v_count_tot                   NUMBER (10);
    v_wpcount_error               NUMBER (10);

    --
    v_perslid_key                 NUMBER (10);
    v_perslid_nr                  VARCHAR2 (100);
    v_afdeling_key                NUMBER (10);
    v_srtperslid_key              NUMBER (10);
    v_prs_perslid_naam            VARCHAR2 (200);
    v_prs_perslid_tussenvoegsel   VARCHAR2 (200);
    v_kostenplaats_nr             VARCHAR2 (100);

    v_locatie_key                 NUMBER (10);
    v_gebouw_key                  NUMBER (10);
    v_verdieping_key              NUMBER (10);
    v_ruimte_key                  NUMBER (10);
    v_space                       VARCHAR2 (1);

    -- OS LOGIN komt meerdere keren voor met verschillende personeelsnrs
    -- Van de personen die dubbel voorkomen in de import (nieuw account is aangemaakt maar oude is nog niet vervallen) zal slechts 1 regel gebruikt worden om de persoonsgegevens bij te werken.
    -- Dat zal op basis van het reeds bestaande personeelsnummer moeten zijn.
    CURSOR c_del_dubbele IS
        SELECT ip.prs_perslid_nr
          FROM fac_imp_perslid ip
         WHERE     EXISTS
                       (  SELECT i.prs_perslid_oslogin
                            FROM fac_imp_perslid i
                           WHERE     i.prs_perslid_oslogin IS NOT NULL
                                 AND i.prs_perslid_oslogin =
                                     ip.prs_perslid_oslogin
                        GROUP BY i.prs_perslid_oslogin
                          HAVING COUNT (i.prs_perslid_nr) > 1)
               AND NOT EXISTS
                       (SELECT p.prs_perslid_nr
                          FROM prs_perslid p
                         WHERE p.prs_perslid_nr = ip.prs_perslid_nr);

    -- In de import is een oslogin bekend
    -- Dan moet de persoon eigenlijk op login gematch worden
    -- Maar de mdw is alleen nog maar met persnr bekend in Facilitor
    CURSOR c_oslogin IS
        SELECT ip.prs_perslid_oslogin, ip.prs_perslid_nr
          FROM fac_imp_perslid ip, prs_perslid p
         WHERE     p.prs_perslid_nr = ip.prs_perslid_nr
               AND ip.prs_perslid_oslogin IS NOT NULL
               AND ip.prs_perslid_nr IS NOT NULL
               AND p.prs_perslid_oslogin IS NULL
               AND NOT EXISTS
                       (SELECT pl.prs_perslid_nr
                          FROM prs_perslid pl
                         WHERE     pl.prs_perslid_oslogin IS NOT NULL
                               AND ip.prs_perslid_nr = pl.prs_perslid_nr);

    --- bijwerken stamtabel met functies als er nieuwe functies in de import zitten
    CURSOR c_imp_functie IS
          SELECT MIN (prs_srtperslid_omschrijving)    prs_srtperslid_omschrijving
            FROM fac_imp_perslid i
           WHERE NOT EXISTS
                     (SELECT prs_srtperslid_key
                        FROM prs_srtperslid sp
                       WHERE     UPPER (sp.prs_srtperslid_omschrijving) =
                                 UPPER (i.prs_srtperslid_omschrijving)
                             AND prs_srtperslid_verwijder IS NULL)
        GROUP BY UPPER (prs_srtperslid_omschrijving);

    --- import van perslid
    CURSOR c_imp_perslid IS
        SELECT *
          FROM fac_imp_perslid ip;

    -- Set kenmerk 'Datum uitdienst' als pers met persnr niet meer in de import file zit
    -- Let op: oslogin kan er wel in zitten, persoon heeft dan nieuw persnummer!
    -- Account wordt dan na 2 maanden definitief beeindigd
    CURSOR c_mark IS
          SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
            FROM fac_imp_perslid            i,
                 prs_perslid                p,
                 prs_v_perslid_fullnames_all pf
           WHERE     p.prs_perslid_nr = i.prs_perslid_nr(+)
                 AND pf.prs_perslid_key = p.prs_perslid_key
                 AND p.prs_perslid_nr IS NOT NULL
                 AND i.prs_perslid_nr IS NULL
                 AND p.prs_perslid_verwijder IS NULL
                 AND NOT EXISTS
                         (SELECT prs_kenmerklink_waarde
                            FROM prs_kenmerklink kl
                           WHERE     kl.prs_kenmerklink_verwijder IS NULL
                                 AND prs_link_key = p.prs_perslid_key
                                 AND prs_kenmerk_key = 1020) -- datum uitdienst
        ORDER BY 2;

    --- Daadwerkelijk beeindigen van account als deze 2 maanden geleden is gemarkeerd
    CURSOR c_del IS
          SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
            FROM fac_imp_perslid            i,
                 prs_perslid                p,
                 prs_v_perslid_fullnames_all pf
           WHERE     p.prs_perslid_nr = i.prs_perslid_nr(+)
                 AND pf.prs_perslid_key = p.prs_perslid_key
                 AND p.prs_perslid_nr IS NOT NULL
                 AND i.prs_perslid_nr IS NULL
                 AND p.prs_perslid_verwijder IS NULL
                 AND ADD_MONTHS (
                         COALESCE (
                             (SELECT fac.safe_to_date (prs_kenmerklink_waarde,
                                                       'dd-mm-yyyy')
                                FROM prs_kenmerklink kl
                               WHERE     kl.prs_kenmerklink_verwijder IS NULL
                                     AND prs_link_key = p.prs_perslid_key
                                     AND prs_kenmerk_key = 1020),
                             SYSDATE),
                         2) <
                     SYSDATE
        ORDER BY 2;

    -- Kenmerk veld 'Datum uitdienst' leegmaken bij perslid als deze toch weer in de import tabel zit
    -- Mdw is waarschijnlijk weer in dienst
    CURSOR c_renew IS
          SELECT p.prs_perslid_key,
                 p.prs_perslid_nr,
                 pf.prs_perslid_naam_full,
                 p.prs_perslid_oslogin
            FROM fac_imp_perslid            i,
                 prs_perslid                p,
                 prs_v_perslid_fullnames_all pf
           WHERE     (   p.prs_perslid_oslogin = i.prs_perslid_oslogin
                      OR p.prs_perslid_nr = i.prs_perslid_nr)
                 AND pf.prs_perslid_key = p.prs_perslid_key
                 AND p.prs_perslid_verwijder IS NULL
                 AND EXISTS
                         (SELECT prs_kenmerklink_waarde
                            FROM prs_kenmerklink kl
                           WHERE     kl.prs_kenmerklink_verwijder IS NULL
                                 AND prs_link_key = p.prs_perslid_key
                                 AND prs_kenmerk_key = 1020) -- datum uitdienst
        ORDER BY 2;


    CURSOR c_tel3 IS
            SELECT p.prs_perslid_key, REPLACE (p.prs_kenmerk1, '-', '') tel3, p.prs_perslid_nr
                  FROM fac_imp_perslid p
                 WHERE     p.prs_kenmerk1 IS NOT NULL
                       AND p.prs_kenmerk1 LIKE '06%'
                       AND p.prs_perslid_key IS NOT NULL
                       AND LENGTH (REPLACE (p.prs_kenmerk1, '-', '')) = 10
                       AND NOT EXISTS
                               (SELECT kl.prs_kenmerklink_waarde
                                  FROM prs_kenmerk k, prs_kenmerklink kl
                                 WHERE     k.prs_kenmerk_key = 1100
                                       AND kl.prs_kenmerk_key = k.prs_kenmerk_key
                                       AND kl.prs_link_key = p.prs_perslid_key);

BEGIN
    v_count_update := 0;
    v_count_tot := 0;
    v_count_error := 0;
    v_wpcount_error := 0;

    SELECT COUNT (*) INTO v_count FROM fac_imp_perslid;

    IF v_count < 1000
    THEN
        fac.imp_writelog (
            p_import_key,
            'E',
               'Het aantal te importeren personen is te klein ('
            || TO_CHAR (v_count)
            || ')',
            'Zie Specificatie');
        RETURN;
    END IF;

    -- Personen die 2x voorkomen in de importtabel op basis van oslogin
    -- Daarvan moet 1 record uit de importtabel verwijderd worden
    FOR rec IN c_del_dubbele
    LOOP
        v_aanduiding := rec.prs_perslid_nr;
        v_errorhint := 'Verwijder records van personen die 2 keer voorkomen';

        BEGIN
            DELETE fac_imp_perslid i
             WHERE i.prs_perslid_nr = rec.prs_perslid_nr;
        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;                                         -- tbv logging
        END;
    END LOOP;

    -- Personen die nu een login in de import hebben maar voorheen alleen een persnr
    -- Dan zetten we eerst de login even goed zodat daarna via login bijgewerkt kan worden
    FOR rec IN c_oslogin
    LOOP
        v_aanduiding :=
            rec.prs_perslid_nr || ' - ' || rec.prs_perslid_oslogin;
        v_errorhint := 'Aanpassen login van mensen die nog geen login hadden';

        BEGIN
            UPDATE prs_perslid p
               SET p.prs_perslid_oslogin = rec.prs_perslid_oslogin
             WHERE     p.prs_perslid_nr = rec.prs_perslid_nr
                   AND p.prs_perslid_verwijder IS NULL;
        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;                                         -- tbv logging
        END;
    END LOOP;

    -- eerst alle functies up to date
    FOR rec IN c_imp_functie
    LOOP
        BEGIN
            v_aanduiding := '';
            v_errormsg := '';
            v_errorhint := '';
            v_count_tot := v_count_tot + 1;

            v_aanduiding := rec.prs_srtperslid_omschrijving;

            v_errorhint := 'Zoek in verwijderde functies';

            SELECT MAX (prs_srtperslid_key)
              INTO v_srtperslid_key
              FROM prs_srtperslid sp
             WHERE UPPER (sp.prs_srtperslid_omschrijving) =
                   UPPER (rec.prs_srtperslid_omschrijving);

            IF v_srtperslid_key IS NULL
            THEN
                v_errorhint := 'Fout bij toevoegen functie';

                INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
                     VALUES (rec.prs_srtperslid_omschrijving);
            ELSE
                v_errorhint := 'Reanimeer functie';

                UPDATE prs_srtperslid
                   SET prs_srtperslid_verwijder = NULL
                 WHERE prs_srtperslid_key = v_srtperslid_key;
            END IF;

            COMMIT;
        EXCEPTION
            WHEN OTHERS
            THEN
                v_count_error := v_count_error + 1;
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                v_errormsg :=
                       ' (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;                                         -- tbv logging
        END;
    END LOOP;

    fac.imp_writelog (
        p_import_key,
        'S',
           'Personeelsfunctie: toegevoegde regels zonder foutmelding: '
        || TO_CHAR (v_count_tot - v_count_error),
        '');

    fac.imp_writelog (
        p_import_key,
        'S',
           'Personeelsfunctie: toegevoegde regels met foutmelding: '
        || TO_CHAR (v_count_error),
        '');
    COMMIT;                                                         -- logging

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

    ----------------------------------------------------
    --- BEGIN STANDAARD IMPORT -------------------------
    ----------------------------------------------------
    FOR rec IN c_imp_perslid
    LOOP
        BEGIN
            v_aanduiding := '';
            v_errormsg := '';
            v_errorhint := '';
            v_count_tot := v_count_tot + 1;

            v_aanduiding :=
                   rec.prs_perslid_naam
                || '|'
                || rec.prs_perslid_voornaam
                || '| ';
            v_errormsg := '';

            v_errorhint := 'Fout bij bepalen functie';

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

            IF rec.prs_perslid_oslogin IS NOT NULL
            THEN
                v_sleutelkolom := 'LOGIN';
            ELSE
                v_sleutelkolom := 'NR';
            END IF;

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

            SELECT a.prs_afdeling_key
              INTO v_afdeling_key
              FROM prs_v_aanwezigafdeling_boom b, prs_afdeling a
             WHERE     UPPER (a.prs_afdeling_naam) =
                       UPPER (rec.prs_afdeling_naam)
                   AND a.prs_afdeling_verwijder IS NULL
                   AND a.prs_afdeling_key = b.prs_afdeling_key;

            v_space := '';

            -- kijk hoe we met partnernamen moeten omgaan:
            IF rec.prs_perslid_naamgebruik_code = 0
            THEN
                -- normaal gebruik van naam. Eigen naam wordt gebruikt
                v_prs_perslid_naam := rec.prs_perslid_naam;
                v_prs_perslid_tussenvoegsel := rec.prs_perslid_tussenvoegsel;
            ELSIF rec.prs_perslid_naamgebruik_code = 1
            THEN
                -- personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
                IF rec.prs_perslid_tussenvoegsel IS NOT NULL
                THEN
                    v_space := ' ';
                END IF;

                v_prs_perslid_naam :=
                       rec.prs_perslid_partner_naam
                    || ' - '
                    || rec.prs_perslid_tussenvoegsel
                    || v_space
                    || rec.prs_perslid_naam;
                v_prs_perslid_tussenvoegsel :=
                    rec.prs_perslid_partner_tussenv;
            ELSIF rec.prs_perslid_naamgebruik_code = 2
            THEN
                -- personen die de geboortenaam van de partner willen gebruiken
                v_prs_perslid_naam := rec.prs_perslid_partner_naam;
                v_prs_perslid_tussenvoegsel :=
                    rec.prs_perslid_partner_tussenv;
            ELSIF rec.prs_perslid_naamgebruik_code = 3
            THEN
                -- personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
                IF rec.prs_perslid_partner_tussenv IS NOT NULL
                THEN
                    v_space := ' ';
                END IF;

                v_prs_perslid_naam :=
                       rec.prs_perslid_naam
                    || ' - '
                    || rec.prs_perslid_partner_tussenv
                    || v_space
                    || rec.prs_perslid_partner_naam;
                v_prs_perslid_tussenvoegsel := rec.prs_perslid_tussenvoegsel;
            END IF;

            IF LENGTH (v_prs_perslid_naam) > 60
            THEN
                v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 60);
                fac.imp_writelog (
                    p_import_key,
                    'W',
                       rec.prs_perslid_naam
                    || '|'
                    || rec.prs_perslid_voornaam
                    || '| '
                    || 'Samengestelde achternaam is te lang',
                       'Aanduiding wordt afgebroken tot ['
                    || v_prs_perslid_naam
                    || ']');
            END IF;

            -- v_sleutelkolom
            --   NR     = prs_perslid_nr
            --   LOGIN  = prs_perslid_oslogin
            v_errorhint := 'Kijken of de persoon al bestaat';

            SELECT MAX (prs_perslid_key), COUNT (*)
              INTO v_perslid_key, v_count
              FROM prs_perslid
             WHERE     prs_perslid_verwijder IS NULL
                   AND (   (    UPPER (v_sleutelkolom) = 'NR'
                            AND UPPER (prs_perslid_nr) =
                                UPPER (rec.prs_perslid_nr))
                        OR (    UPPER (v_sleutelkolom) = 'LOGIN'
                            AND UPPER (prs_perslid_oslogin) =
                                UPPER (rec.prs_perslid_oslogin)));

            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_geslacht,
                                         prs_perslid_titel,
                                         prs_perslid_dienstverband,
                                         prs_perslid_oslogin,
                                         prs_perslid_apikey)
                     VALUES ('PRS',
                             v_srtperslid_key,
                             v_afdeling_key,
                             v_prs_perslid_naam,
                             rec.prs_perslid_voorletters,
                             v_prs_perslid_tussenvoegsel,
                             rec.prs_perslid_voornaam,
                             rec.prs_perslid_telefoonnr,
                             rec.prs_perslid_mobiel,
                             rec.prs_perslid_email,
                             rec.prs_perslid_nr,
                             rec.prs_perslid_geslacht,
                             rec.prs_perslid_titel,
                             rec.prs_perslid_dienstverband,
                             rec.prs_perslid_oslogin,
                             rec.prs_perslid_apikey)
                  RETURNING prs_perslid_key
                       INTO v_perslid_key;

                prs.setpassword (v_perslid_key, rec.prs_perslid_wachtwoord);

                COMMIT;
                v_count_update := v_count_update + 1;
            ELSIF v_count = 1
            THEN
                UPDATE prs_perslid
                   SET prs_srtperslid_key = v_srtperslid_key,
                       prs_afdeling_key = v_afdeling_key,
                       prs_perslid_naam = v_prs_perslid_naam,
                       prs_perslid_voorletters = rec.prs_perslid_voorletters,
                       prs_perslid_tussenvoegsel =
                           v_prs_perslid_tussenvoegsel,
                       prs_perslid_voornaam = rec.prs_perslid_voornaam,
                       prs_perslid_nr = rec.prs_perslid_nr,
                       prs_perslid_dienstverband =
                           rec.prs_perslid_dienstverband,
                       prs_perslid_geslacht = rec.prs_perslid_geslacht,
                       prs_perslid_titel = rec.prs_perslid_titel,
                       prs_perslid_telefoonnr = rec.prs_perslid_telefoonnr,
                       prs_perslid_mobiel = rec.prs_perslid_mobiel,
                       prs_perslid_email = rec.prs_perslid_email,
                       prs_perslid_oslogin = rec.prs_perslid_oslogin,
                       prs_perslid_apikey = rec.prs_perslid_apikey
                 WHERE prs_perslid_key = v_perslid_key;

                IF rec.prs_perslid_wachtwoord IS NOT NULL
                THEN
                    prs.setpassword (v_perslid_key,
                                     rec.prs_perslid_wachtwoord);
                END IF;
            END IF;

            -- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
            UPDATE fac_imp_perslid
               SET prs_perslid_key = v_perslid_key
             WHERE     fac_import_key = rec.fac_import_key
                   AND fac_imp_file_index = rec.fac_imp_file_index;

            COMMIT;                      -- persoon in ieder geval toegevoegd.


            v_aanduiding :=
                   rec.prs_perslid_nr
                || '|'
                || rec.prs_perslid_naam
                || '|'
                || rec.prs_perslid_voornaam
                || '|'
                || rec.alg_locatie_code
                || '|'
                || rec.alg_gebouw_code
                || '|'
                || rec.alg_verdieping_volgnr
                || '|'
                || rec.alg_ruimte_nr
                || ' - ';

            v_locatie_key := NULL;
            v_gebouw_key := NULL;
            v_verdieping_key := NULL;
            v_ruimte_key := NULL;

            v_errorhint := 'Fout bij bepalen locatie';

            SELECT MAX (alg_locatie_key)
              INTO v_locatie_key
              FROM alg_v_aanweziglocatie
             WHERE UPPER (alg_locatie_code) = UPPER (rec.alg_locatie_code);

            v_errorhint := 'Fout bij bepalen gebouw';

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

            v_errorhint := 'Fout bij bepalen verdieping';

            SELECT MAX (alg_verdieping_key)
              INTO v_verdieping_key
              FROM alg_v_aanwezigverdieping
             WHERE     UPPER (alg_verdieping_volgnr) =
                       UPPER (rec.alg_verdieping_volgnr)
                   AND alg_gebouw_key = v_gebouw_key;

            v_errorhint := 'Fout bij bepalen beoogde ruimte';

            SELECT MAX (alg_ruimte_key)
              INTO v_ruimte_key
              FROM alg_v_aanwezigruimte r
             WHERE     r.alg_ruimte_upper_nr = UPPER (rec.alg_ruimte_nr)
                   AND r.alg_verdieping_key = v_verdieping_key;

            -- standaard ruimte moet door cust gedeelte van deFout bij bepalen beoogde ruimte import ingevuld worden.

            -- als er een locatie ingevuld is willen we ook een ruimte vinden.
            IF v_ruimte_key IS NULL AND rec.alg_locatie_code IS NOT NULL
            THEN
                fac.imp_writelog (
                    p_import_key,
                    'W',
                    v_aanduiding || ' Ruimte kan niet gevonden worden',
                    'Controleer locatie,gebouw en verdieping');
            END IF;

            -- fouten bij het bepalen van de werkplek worden als waarschuwing weergegeven.
            BEGIN
                v_errorhint := 'Fout bij het aanpassen van de werkplek';
                PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'A');
            EXCEPTION
                WHEN OTHERS
                THEN
                    v_wpcount_error := v_wpcount_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,
                                      'W',
                                      v_aanduiding || v_errormsg,
                                      v_errorhint);
            END;
        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;                                         -- tbv logging
        END;
    END LOOP;

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

    fac.imp_writelog (
        p_import_key,
        'S',
           'Persoon: verwerkte regels met foutmelding: '
        || TO_CHAR (v_count_error),
        '');

    fac.imp_writelog (
        p_import_key,
        'S',
           'Werkplek: verwerkte regels met foutmelding: '
        || TO_CHAR (v_wpcount_error),
        '');

    -- ken iedereen een profiel toe
    UPDATE prs_perslid
       SET fac_profiel_key = 1
     WHERE fac_profiel_key IS NULL;

    --- PNBR#72332: telefoonnr 3 opnemen indien deze aanwezig.
    FOR rec IN c_tel3
            LOOP
                BEGIN
                    prs.upsertkenmerk (1100, rec.prs_perslid_key, rec.tel3);
                    fac.imp_writelog (
                        p_import_key,
                        'I',
                           'Telefoonnr 3 toegevoegd ['
                        ||  rec.prs_perslid_nr
                        || ']',
                        '');
                END;
            END LOOP;

    FOR rec IN c_renew
    LOOP
        BEGIN
            prs.upsertkenmerk (1020, rec.prs_perslid_key, NULL);
            fac.imp_writelog (
                p_import_key,
                'I',
                   'Uitdienstdatum is verwijderd ['
                || rec.prs_perslid_naam_full
                || ']',
                '');
        END;
    END LOOP;

    FOR rec IN c_mark
    LOOP
        BEGIN
            PRS.upsertkenmerk (1020,
                               rec.prs_perslid_key,
                               TO_CHAR (SYSDATE, 'dd-mm-yyyy'));
            fac.imp_writelog (
                p_import_key,
                'I',
                   'Uitdienstdatum wordt gezet ['
                || rec.prs_perslid_naam_full
                || ']',
                '');

            UPDATE prs_perslid
               SET prs_perslid_email = NULL
             WHERE rec.prs_perslid_key = prs_perslid_key;
        END;
    END LOOP;

    FOR rec IN c_del
    LOOP
        BEGIN
            prs.delete_perslid (p_import_key, rec.prs_perslid_key);
        END;
    END LOOP;

    INSERT INTO prs_perslidkostenplaats (prs_perslid_key,
                                         prs_perslidkostenplaats_boeken)
        SELECT prs_perslid_key, 1
          FROM prs_v_aanwezigperslid p
         WHERE NOT EXISTS
                   (SELECT pk.prs_perslid_key
                      FROM prs_perslidkostenplaats pk
                     WHERE p.prs_perslid_key = pk.prs_perslid_key);

    -- we gaan conflicten in de login notificeren naar Menno Udo (key = 3371)
    SELECT COUNT (*)
      INTO v_count
      FROM imp_log
     WHERE     fac_import_key = p_import_key
           AND imp_log_omschrijving LIKE '%PRS_C_PRS_PERSLID_OSLOGIN%';

    -- we notificeren alleen op maandag
    IF v_count > 0 AND TO_CHAR (SYSDATE, 'D') = 2
    THEN
        INSERT INTO fac_notificatie (fac_notificatie_status,
                                     fac_notificatie_oms,
                                     prs_perslid_key_sender,
                                     prs_perslid_key_receiver)
                 VALUES (
                     2,
                        'Aantal geimporteerde gebruikers met conflict in de login: '
                     || v_count,
                     4,
                     3371);
    END IF;
END pnbr_update_perslid_mut;
/

CREATE OR REPLACE PROCEDURE pnbr_import_organisatie_mut (
    p_import_key   IN NUMBER)
AS
    c_fielddelimitor          VARCHAR2 (1) := ';';
    v_newline                 VARCHAR2 (1000);                   -- Input line
    v_errormsg                VARCHAR2 (1000);
    oracle_err_num            NUMBER;
    oracle_err_mes            VARCHAR2 (200);
    header_is_valid           NUMBER;
    v_count                   NUMBER;
    v_ongeldig                NUMBER (1);
    v_mode                    NUMBER (1);
    v_aanduiding              VARCHAR2 (200);
    v_all_null                BOOLEAN;
    v_count_error             NUMBER (10);
    v_count_tot               NUMBER (10);
    v_count_import            NUMBER (10);
    -- De importvelden:
    v_bedrijf_naam            VARCHAR2 (256);
    v_afdeling_naam           VARCHAR2 (256);
    v_afdeling_naam_parent    VARCHAR2 (256);
    v_afdeling_omschrijving   VARCHAR2 (256);
    v_kostenplaats            VARCHAR2 (256);


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

    DELETE FROM fac_imp_organisatie;

    COMMIT;
    v_count_error := 0;
    header_is_valid := 0;
    v_count_tot := 0;
    v_count_import := 0;

    FOR rec1 IN c1
    LOOP
        BEGIN
            v_errormsg := 'Fout FETCH te importeren rij';

            v_newline := rec1.fac_imp_file_line;
            v_errormsg := 'Fout opvragen te importeren rij';
            v_aanduiding := '';
            v_ongeldig := 0;

            -- Lees alle veldwaarden
            fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam);
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_afdeling_naam_parent);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam);
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_afdeling_omschrijving);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats);
            v_aanduiding :=
                   v_bedrijf_naam
                || '|'
                || v_afdeling_naam
                || '|'
                || v_afdeling_omschrijving
                || '| ';

            IF (header_is_valid = 0)
            THEN
                IF     UPPER (v_bedrijf_naam) = 'BEDRIJFSNAAM'
                   AND UPPER (v_afdeling_naam_parent) = 'AFDELINGSCODEPARENT'
                THEN
                    header_is_valid := 1;
                END IF;
            ELSE
                v_count_tot := v_count_tot + 1;
                v_bedrijf_naam := TRIM (v_bedrijf_naam);

                IF LENGTH (v_bedrijf_naam) > 60
                THEN
                    v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60);
                    fac.imp_writelog (
                        p_import_key,
                        'W',
                        v_aanduiding || 'Bedrijf-aanduiding is te lang',
                           'Aanduiding wordt afgebroken tot ['
                        || v_bedrijf_naam
                        || ']');
                END IF;

                --
                v_afdeling_naam := TRIM (v_afdeling_naam);

                IF LENGTH (v_afdeling_naam) > 10
                THEN
                    v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 10);
                    fac.imp_writelog (
                        p_import_key,
                        'W',
                        v_aanduiding || 'Afdeling-aanduiding is te lang',
                           'Aanduiding wordt afgebroken tot ['
                        || v_afdeling_naam
                        || ']');
                END IF;

                --
                v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent);

                IF LENGTH (v_afdeling_naam_parent) > 10
                THEN
                    v_afdeling_naam_parent :=
                        SUBSTR (v_afdeling_naam_parent, 1, 10);
                    fac.imp_writelog (
                        p_import_key,
                        'W',
                        v_aanduiding || 'Afdeling-aanduiding is te lang',
                           'Aanduiding wordt afgebroken tot ['
                        || v_afdeling_naam_parent
                        || ']');
                END IF;

                --
                v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving);

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

                v_kostenplaats := LTRIM (v_kostenplaats, '0');
                v_all_null :=
                        (v_bedrijf_naam IS NULL)
                    AND (v_afdeling_naam IS NULL)
                    AND (v_afdeling_naam_parent IS NULL)
                    AND (v_afdeling_omschrijving IS NULL);

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

                    INSERT INTO fac_imp_organisatie (
                                    prs_bedrijf_naam,
                                    prs_afdeling_naam,
                                    prs_afdeling_naam_parent,
                                    prs_afdeling_omschrijving,
                                    prs_kostenplaats_nr)
                         VALUES (v_bedrijf_naam,
                                 v_afdeling_naam,
                                 v_afdeling_naam_parent,
                                 v_afdeling_omschrijving,
                                 v_kostenplaats);

                    v_count_import := v_count_import + 1;
                END IF;
            END IF;
        END;
    END LOOP;

    IF (header_is_valid = 0)
    THEN
        fac.imp_writelog (p_import_key,
                          'E',
                          v_aanduiding || 'Ongeldig importbestand',
                          'Geen geldige headerregel aanwezig');
    ELSE
        fac.imp_writelog (
            p_import_key,
            'S',
            'Bedrijf: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
            '');
        fac.imp_writelog (
            p_import_key,
            'S',
               'Bedrijf: aantal ongeldige importregels: '
            || TO_CHAR (v_count_tot - v_count_import),
            '');
    END IF;

    -- De top elementen in de import hebben een parent die wijst naar
    -- een niet bestaande afdeling. Daarom maken we die maar leeg.
    UPDATE fac_imp_organisatie i
       SET prs_afdeling_naam_parent = NULL
     WHERE NOT EXISTS
               (SELECT prs_afdeling_naam
                  FROM fac_imp_organisatie i2
                 WHERE i.prs_afdeling_naam_parent = i2.prs_afdeling_naam);

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


CREATE OR REPLACE PROCEDURE pnbr_update_organisatie_mut (
    p_import_key   IN NUMBER)
AS
    CURSOR c IS
        SELECT i.*, a.prs_afdeling_key
          FROM fac_imp_organisatie i, prs_afdeling a
         WHERE i.prs_afdeling_naam = a.prs_afdeling_naam(+);

    v_errormsg                VARCHAR (200);
    v_errorhint               VARCHAR (200);
    oracle_err_mes            VARCHAR2 (150);
    currentversion            fac_module.fac_module_version%TYPE;
    v_aanduiding              VARCHAR (100);
    v_prs_kostenplaats_oms    PRS_KOSTENPLAATS.PRS_KOSTENPLAATS_OMSCHRIJVING%TYPE;
    v_prs_bedrijf_key         NUMBER;
    v_prs_afd_parent_key      NUMBER;
    v_prs_kostenplaats_key    NUMBER;
    v_prs_afdeling_key        NUMBER;
    v_prs_afd_niveau_parent   NUMBER;
    v_count                   NUMBER;
    v_newcount                NUMBER;
    v_oldcount                NUMBER;
    v_impcount                NUMBER;
BEGIN
    SELECT MAX (fac_module_version) INTO currentversion FROM fac_module;

    fac.imp_writelog (p_import_key,
                      'I',
                      'Facilitor afdeling import version ' || currentversion,
                      '$Revision$');

    -- How many active records are now present?
    SELECT COUNT (*)
      INTO v_oldcount
      FROM prs_afdeling
     WHERE     (prs_afdeling_parentkey IS NULL OR prs_afdeling_parentkey <> 1)
           AND prs_afdeling_verwijder IS NULL;

    -- How many active records are imported?
    SELECT COUNT (*) INTO v_impcount FROM fac_imp_organisatie;

    IF v_impcount < 50
    THEN
        fac.imp_writelog (
            p_import_key,
            'E',
               'Het verschil tussen de actieve afdelingen ('
            || TO_CHAR (v_oldcount)
            || ') en geimporteerde aantallen ('
            || TO_CHAR (v_impcount)
            || ') is te groot',
            'Zie Specificatie');
        RETURN;
    END IF;

    FOR rec IN c
    LOOP
        v_aanduiding := rec.prs_afdeling_naam;
        v_errorhint := 'Kijk of bedrijf al bestaat';

        -- Bestaat het bedrijf al?
        BEGIN
            SELECT prs_bedrijf_key
              INTO v_prs_bedrijf_key
              FROM prs_bedrijf
             WHERE     UPPER (prs_bedrijf_naam) =
                       UPPER (rec.prs_bedrijf_naam)
                   AND prs_bedrijf_verwijder IS NULL;

            v_errorhint := 'Kijk of kostenplaats al bestaat';
            v_prs_kostenplaats_key := NULL;

            BEGIN
                SELECT prs_kostenplaats_key
                  INTO v_prs_kostenplaats_key
                  FROM prs_kostenplaats
                 WHERE     prs_kostenplaats_verwijder IS NULL
                       AND prs_kostenplaats_nr = rec.prs_kostenplaats_nr;

                -- Komt deze kostenplaats ook misschien vaker voor?
                SELECT COUNT (prs_kostenplaats_nr)
                  INTO v_count
                  FROM fac_imp_organisatie
                 WHERE prs_kostenplaats_nr = rec.prs_kostenplaats_nr;

                IF v_count > 1
                THEN
                    -- zo ja, dan pakken we de eerste omschrijving die we in het importbestand tegenkomen.
                    FOR rec_k
                        IN (SELECT prs_afdeling_omschrijving
                              FROM fac_imp_organisatie
                             WHERE prs_kostenplaats_nr =
                                   rec.prs_kostenplaats_nr)
                    LOOP
                        v_prs_kostenplaats_oms :=
                            rec_k.prs_afdeling_omschrijving;
                        EXIT;
                    END LOOP;
                ELSE
                    v_prs_kostenplaats_oms := rec.prs_afdeling_omschrijving;
                END IF;

                UPDATE prs_kostenplaats
                   SET prs_kostenplaats_omschrijving = v_prs_kostenplaats_oms
                 WHERE prs_kostenplaats_key = v_prs_kostenplaats_key;
            EXCEPTION
                WHEN NO_DATA_FOUND
                THEN
                    v_errorhint := 'Nieuwe kostenplaats toevoegen';

                    IF rec.prs_kostenplaats_nr IS NOT NULL
                    THEN
                        INSERT INTO prs_kostenplaats (
                                        prs_kostenplaats_nr,
                                        prs_kostenplaats_omschrijving,
                                        prs_kostenplaats_module)
                             VALUES (rec.prs_kostenplaats_nr,
                                     rec.prs_afdeling_omschrijving,
                                     'PRS')
                          RETURNING prs_kostenplaats_key
                               INTO v_prs_kostenplaats_key;
                    END IF;
            END;

            v_errorhint := 'Kijk of parent bestaat';

            IF rec.prs_afdeling_naam_parent IS NOT NULL
            THEN
                SELECT prs_afdeling_key
                  INTO v_prs_afd_parent_key
                  FROM prs_afdeling
                 WHERE     prs_afdeling_verwijder IS NULL
                       AND prs_afdeling_naam = rec.prs_afdeling_naam_parent;
            ELSE
                v_prs_afd_parent_key := NULL;
            END IF;

            v_errorhint := 'Zoek het niveau van de parent';

            IF v_prs_afd_parent_key IS NOT NULL
            THEN
                SELECT prs_kenmerklink_waarde
                  INTO v_prs_afd_niveau_parent
                  FROM prs_kenmerklink
                 WHERE     prs_kenmerk_key = 1081           -- afdelingsniveau
                       AND prs_link_key = v_prs_afd_parent_key;
            ELSE
                v_prs_afd_niveau_parent := 0;
            END IF;

            v_prs_afd_niveau_parent := v_prs_afd_niveau_parent + 1;

            IF rec.prs_afdeling_key IS NULL
            THEN
                -- toevoegen afdeling
                v_errorhint := 'Toevoegen afdeling';

                INSERT INTO prs_afdeling (prs_bedrijf_key,
                                          prs_afdeling_parentkey,
                                          prs_afdeling_naam,
                                          prs_afdeling_omschrijving,
                                          prs_kostenplaats_key)
                     VALUES (v_prs_bedrijf_key,
                             NULL,
                             rec.prs_afdeling_naam,
                             rec.prs_afdeling_omschrijving,
                             v_prs_kostenplaats_key)
                  RETURNING prs_afdeling_key
                       INTO v_prs_afdeling_key;
            ELSE
                -- aanpassen afdeling
                v_errorhint := 'Aanpassen afdeling';

                UPDATE prs_afdeling
                   SET prs_bedrijf_key = v_prs_bedrijf_key,
                       prs_afdeling_parentkey = NULL,
                       prs_afdeling_naam = rec.prs_afdeling_naam,
                       prs_afdeling_omschrijving =
                           rec.prs_afdeling_omschrijving,
                       prs_kostenplaats_key = v_prs_kostenplaats_key
                 WHERE prs_afdeling_key = rec.prs_afdeling_key;

                v_prs_afdeling_key := rec.prs_afdeling_key;
            END IF;

            PRS.upsertkenmerk (1080,
                               v_prs_afdeling_key,
                               v_prs_afd_parent_key);
            PRS.upsertkenmerk (1081,
                               v_prs_afdeling_key,
                               v_prs_afd_niveau_parent);
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                v_errormsg := 'error ' || SQLCODE || '/' || oracle_err_mes;
                fac.imp_writelog (p_import_key,
                                  'E',
                                  v_errormsg,
                                  v_errorhint || '-' || v_aanduiding);
        END;
    END LOOP;

    SELECT COUNT (*)
      INTO v_newcount
      FROM prs_afdeling
     WHERE     (prs_afdeling_parentkey IS NULL OR prs_afdeling_parentkey <> 1)
           AND prs_afdeling_verwijder IS NULL;


    fac.imp_writelog (
        p_import_key,
        'S',
        'Aantal ingelezen afdelingen: ' || TO_CHAR (v_impcount),
        '');
    fac.imp_writelog (
        p_import_key,
        'S',
           'Aantal afdelingen vooraf: '
        || TO_CHAR (v_oldcount)
        || '  nu: '
        || TO_CHAR (v_newcount),
        '');

    UPDATE prs_kostenplaats k
       SET prs_kostenplaats_verwijder = SYSDATE
     WHERE     NOT EXISTS
                   (SELECT i.prs_kostenplaats_nr
                      FROM fac_imp_organisatie i
                     WHERE i.prs_kostenplaats_nr = k.prs_kostenplaats_nr)
           AND prs_kostenplaats_verwijder IS NULL
           AND prs_kostenplaats_module = 'PRS';

    UPDATE prs_kostenplaats k
       SET prs_kostenplaats_omschrijving = 'Externe dienstverlening'
     WHERE     prs_kostenplaats_verwijder IS NULL
           AND prs_kostenplaats_module = 'PRS'
           AND prs_kostenplaats_nr = 5034;

    UPDATE prs_afdeling a
       SET prs_afdeling_omschrijving =
               SUBSTR ('Inactief - ' || prs_afdeling_omschrijving, 1, 60)
     WHERE     prs_afdeling_key <> 1
           AND prs_afdeling_verwijder IS NULL
           AND prs_afdeling_omschrijving NOT LIKE 'Inactief - %'
           AND NOT EXISTS
                   (SELECT prs_afdeling_naam
                      FROM fac_imp_organisatie i
                     WHERE i.prs_afdeling_naam = a.prs_afdeling_naam);
END pnbr_update_organisatie_mut;
/


CREATE OR REPLACE VIEW pnbr_v_afdeling
(
    prs_bedrijf_key,
    prs_afdeling_key,
    prs_afdeling_parentkey
)
AS
    SELECT a.prs_bedrijf_key, a.prs_afdeling_key, kl.prs_afdeling_parentkey
      FROM prs_afdeling  a,
           (SELECT prs_link_key               prs_afdeling_key,
                   prs_kenmerklink_waarde     prs_afdeling_parentkey
              FROM prs_kenmerklink
             WHERE prs_kenmerk_key = 1080) kl
     WHERE a.prs_afdeling_key = kl.prs_afdeling_key(+);


CREATE OR REPLACE VIEW pnbr_v_afdeling_boom
(
    niveau,
    prs_bedrijf_key,
    prs_afdeling_key,
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED],
    [REDACTED]
)
AS
    SELECT '1'     niveau,
           a1.prs_bedrijf_key,
           a1.prs_afdeling_key,
           a1.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling a1
     WHERE a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '2'     niveau,
           a1.prs_bedrijf_key,
           a2.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling a1, pnbr_v_afdeling a2
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '3'     niveau,
           a1.prs_bedrijf_key,
           a3.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling a1, pnbr_v_afdeling a2, pnbr_v_afdeling a3
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '4'     niveau,
           a1.prs_bedrijf_key,
           a4.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '5'     niveau,
           a1.prs_bedrijf_key,
           a5.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           a5.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4,
           pnbr_v_afdeling  a5
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '6'     niveau,
           a1.prs_bedrijf_key,
           a6.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           a5.prs_afdeling_key,
           a6.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4,
           pnbr_v_afdeling  a5,
           pnbr_v_afdeling  a6
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key
           AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '7'     niveau,
           a1.prs_bedrijf_key,
           a7.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           a5.prs_afdeling_key,
           a6.prs_afdeling_key,
           a7.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4,
           pnbr_v_afdeling  a5,
           pnbr_v_afdeling  a6,
           pnbr_v_afdeling  a7
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key
           AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key
           AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '8'     niveau,
           a1.prs_bedrijf_key,
           a8.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           a5.prs_afdeling_key,
           a6.prs_afdeling_key,
           a7.prs_afdeling_key,
           a8.prs_afdeling_key,
           TO_NUMBER (NULL),
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4,
           pnbr_v_afdeling  a5,
           pnbr_v_afdeling  a6,
           pnbr_v_afdeling  a7,
           pnbr_v_afdeling  a8
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key
           AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key
           AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key
           AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '9'     niveau,
           a1.prs_bedrijf_key,
           a9.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           a5.prs_afdeling_key,
           a6.prs_afdeling_key,
           a7.prs_afdeling_key,
           a8.prs_afdeling_key,
           a9.prs_afdeling_key,
           TO_NUMBER (NULL)
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4,
           pnbr_v_afdeling  a5,
           pnbr_v_afdeling  a6,
           pnbr_v_afdeling  a7,
           pnbr_v_afdeling  a8,
           pnbr_v_afdeling  a9
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key
           AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key
           AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key
           AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key
           AND a9.prs_afdeling_parentkey = a8.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL
    UNION
    SELECT '10'     niveau,
           a1.prs_bedrijf_key,
           a10.prs_afdeling_key,
           a1.prs_afdeling_key,
           a2.prs_afdeling_key,
           a3.prs_afdeling_key,
           a4.prs_afdeling_key,
           a5.prs_afdeling_key,
           a6.prs_afdeling_key,
           a7.prs_afdeling_key,
           a8.prs_afdeling_key,
           a9.prs_afdeling_key,
           a10.prs_afdeling_key
      FROM pnbr_v_afdeling  a1,
           pnbr_v_afdeling  a2,
           pnbr_v_afdeling  a3,
           pnbr_v_afdeling  a4,
           pnbr_v_afdeling  a5,
           pnbr_v_afdeling  a6,
           pnbr_v_afdeling  a7,
           pnbr_v_afdeling  a8,
           pnbr_v_afdeling  a9,
           pnbr_v_afdeling  a10
     WHERE     a2.prs_afdeling_parentkey = a1.prs_afdeling_key
           AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key
           AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key
           AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key
           AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key
           AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key
           AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key
           AND a9.prs_afdeling_parentkey = a8.prs_afdeling_key
           AND a10.prs_afdeling_parentkey = a9.prs_afdeling_key
           AND a1.prs_afdeling_parentkey IS NULL;

/*
CREATE OR REPLACE PROCEDURE pnbr_import_mjob (p_import_key IN NUMBER)
AS
   c_fielddelimitor VARCHAR2 (1) := ';';
   v_newline VARCHAR2 (1000);                                                                              -- Input line
   v_errormsg VARCHAR2 (1000);
   oracle_err_num NUMBER;
   oracle_err_mes VARCHAR2 (200);
   header_is_valid NUMBER;
   v_count NUMBER;
   v_ongeldig NUMBER (1);
   v_mode NUMBER (1);
   v_aanduiding VARCHAR2 (200);
   v_all_null BOOLEAN;
   v_count_error NUMBER (10);
   v_count_tot NUMBER (10);
   v_count_import NUMBER (10);
   -- De importvelden:
   v_alg_object_code VARCHAR2(200);
   v_ins_plaats VARCHAR2(200)
   v_ins_id VARCHAR2(200);
   v_ins_nlsfb VARCHAR2(200);
   v_ins_aanduiding VARCHAR2(200);
   v_ins_bouwjaar VARCHAR2(200);
   v_crt_startjaar VARCHAR2(200);
   v_crt_stopjaar VARCHAR2(200);
   v_ins_dimensie VARCHAR2(200);
   v_ins_aantal VARCHAR2(200);
   v_crt_dimensie VARCHAR2(200);
   v_crt_aantal VARCHAR2(200);
   v_crt_prijs VARCHAR2(200);
   v_crt_opmerking VARCHAR2(200);
   v_crt_kostensoort VARCHAR2(200);
   v_crt_btw VARCHAR2(200);
   v_crt_prioriteit VARCHAR2(200);
   v_ins_levensduur VARCHAR2(200);
   v_ins_cno VARCHAR2(200);
   v_ins_cvo VARCHAR2(200);
   v_crt_omschrijving VARCHAR2(200);
   v_crt_key VARCHAR2(200);
   v_crt_periode VARCHAR2(200);
   v_crt_totaalprijs VARCHAR2(200);
   v_crt_urgentie VARCHAR2(200);
   v_crt_fonds VARCHAR2(200);

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

   DELETE FROM   pnbr_imp_mjob;

   COMMIT;
   v_count_error := 0;
   header_is_valid := 0;
   v_count_tot := 0;
   v_count_import := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_errormsg := 'Fout FETCH te importeren rij';

         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';
         v_ongeldig := 0;

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_object_code);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_id);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_aanduiding);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_aantal);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_dimensie);
         fac.imp_getfield (v_newline, c_fielddelimitor,  v_ins_plaats)
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_nlsfb);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_bouwjaar);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_cno);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_cvo);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_key);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_omschrijving);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_dimensie);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_aantal);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_prijs);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_startjaar);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_prioriteit);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_periode);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_totaalprijs);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_urgentie);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_fonds);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_stopjaar);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_opmerking);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_kostensoort);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_crt_btw);

         --fac.imp_getfield (v_newline, c_fielddelimitor, v_ins_levensduur);


         v_aanduiding := v_ins_id || '|' || v_afdeling_naam || '|' || v_afdeling_omschrijving || '| ';

         IF (header_is_valid = 0)
         THEN
            IF     UPPER (v_bedrijf_naam) = 'BEDRIJFSNAAM'
               AND UPPER (v_afdeling_naam_parent) = 'AFDELINGSCODEPARENT'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            v_bedrijf_naam := TRIM (v_bedrijf_naam);

            IF LENGTH (v_bedrijf_naam) > 60
            THEN
               v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Bedrijf-aanduiding is te lang',
                                 'Aanduiding wordt afgebroken tot [' || v_bedrijf_naam || ']'
                                );
            END IF;

            --
            v_afdeling_naam := TRIM (v_afdeling_naam);

            IF LENGTH (v_afdeling_naam) > 10
            THEN
               v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 10);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Afdeling-aanduiding is te lang',
                                 'Aanduiding wordt afgebroken tot [' || v_afdeling_naam || ']'
                                );
            END IF;

            --
            v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent);

            IF LENGTH (v_afdeling_naam_parent) > 10
            THEN
               v_afdeling_naam_parent := SUBSTR (v_afdeling_naam_parent, 1, 10);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Afdeling-aanduiding is te lang',
                                 'Aanduiding wordt afgebroken tot [' || v_afdeling_naam_parent || ']'
                                );
            END IF;

            --
            v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving);

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

            v_kostenplaats := LTRIM(v_kostenplaats, '0');
            v_all_null :=
                   (v_bedrijf_naam IS NULL)
               AND (v_afdeling_naam IS NULL)
               AND (v_afdeling_naam_parent IS NULL)
               AND (v_afdeling_omschrijving IS NULL);

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

               INSERT INTO fac_imp_organisatie (
                                                   prs_bedrijf_naam,
                                                   prs_afdeling_naam,
                                                   prs_afdeling_naam_parent,
                                                   prs_afdeling_omschrijving,
                                                   prs_kostenplaats_nr
                          )
                 VALUES   (
                              v_bedrijf_naam,
                              v_afdeling_naam,
                              v_afdeling_naam_parent,
                              v_afdeling_omschrijving,
                              v_kostenplaats
                          );

               v_count_import := v_count_import + 1;
            END IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || 'Ongeldig importbestand',
                        'Geen geldige headerregel aanwezig'
                       );
   ELSE
      fac.imp_writelog (p_import_key, 'S', 'Bedrijf: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key,
                        'S',
                        'Bedrijf: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - v_count_import),
                        ''
                       );
   END IF;

   -- De top elementen in de import hebben een parent die wijst naar
   -- een niet bestaande afdeling. Daarom maken we die maar leeg.
   UPDATE fac_imp_organisatie i
      SET prs_afdeling_naam_parent = NULL
    WHERE NOT EXISTS (SELECT prs_afdeling_naam
                        FROM fac_imp_organisatie i2
                       WHERE i.prs_afdeling_naam_parent = i2.prs_afdeling_naam);

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

*/

CREATE OR REPLACE VIEW pnbr_v_perslid_fullnames
(
    prs_perslid_key,
    prs_perslid_naam_full
)
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 || ')')
           || ' ['
           || prs_perslid_oslogin
           || ']'    prs_perslid_naam_full
      FROM prs_v_aanwezigperslid p;

--
-- evenementen
--

CREATE OR REPLACE VIEW pnbr_v_accmngrevenement
(
    prs_perslid_key,
    prs_perslid_naam_full
)
AS
    SELECT p.prs_perslid_key, prs_perslid_naam_full
      FROM prs_perslid                  p,
           prs_v_perslid_fullnames_all  pf,
           fac_usrtab                   t,
           fac_usrdata                  d
     WHERE     p.prs_perslid_key = pf.prs_perslid_key
           AND p.prs_perslid_nr = d.fac_usrdata_code
           AND t.fac_usrtab_key = d.fac_usrtab_key
           AND t.fac_usrtab_naam = 'AccMngrEvenement'
           AND d.fac_usrdata_verwijder IS NULL;

CREATE OR REPLACE VIEW pnbr_v_opermngrevenement
(
    prs_perslid_key,
    prs_perslid_naam_full
)
AS
    SELECT p.prs_perslid_key, prs_perslid_naam_full
      FROM prs_perslid                  p,
           prs_v_perslid_fullnames_all  pf,
           fac_usrtab                   t,
           fac_usrdata                  d
     WHERE     p.prs_perslid_key = pf.prs_perslid_key
           AND p.prs_perslid_nr = d.fac_usrdata_code
           AND t.fac_usrtab_key = d.fac_usrtab_key
           AND t.fac_usrtab_naam = 'OperMngrEvenemen'
           AND d.fac_usrdata_verwijder IS NULL;

CREATE OR REPLACE VIEW pnbr_v_projmngrevenement
(
    prs_perslid_key,
    prs_perslid_naam_full
)
AS
    SELECT p.prs_perslid_key, prs_perslid_naam_full
      FROM prs_perslid                  p,
           prs_v_perslid_fullnames_all  pf,
           fac_usrtab                   t,
           fac_usrdata                  d
     WHERE     p.prs_perslid_key = pf.prs_perslid_key
           AND p.prs_perslid_nr = d.fac_usrdata_code
           AND t.fac_usrtab_key = d.fac_usrtab_key
           AND t.fac_usrtab_naam = 'ProjMngrEvenemen'
           AND d.fac_usrdata_verwijder IS NULL;

CREATE OR REPLACE VIEW pnbr_v_evenement
(
    res_reservering_key,
    res_reservering_omschrijving
)
AS
      SELECT r.res_reservering_key,
                TO_CHAR (r.res_reservering_key)
             || ' - '
             || MAX (res_rsv_ruimte_omschrijving)    res_reservering_omschrijving
        FROM res_reservering r, res_rsv_ruimte rrr
       WHERE     r.res_reservering_key = rrr.res_reservering_key
             AND rrr.res_activiteit_key = 30                    -- evenementen
    GROUP BY r.res_reservering_key;

CREATE OR REPLACE VIEW pnbr_v_rap_evenementen
(
    hide_f_ts,
    dag,
    fclt_d_datum,
    omschrijving,
    ruimte,
    van,
    tot,
    aant,
    om,
    pm,
    am
)
AS
    SELECT TO_CHAR (r.res_rsv_ruimte_van, 'yyyymmddhh24mi')    ts,
           DECODE (TO_CHAR (r.res_rsv_ruimte_van, 'D'),
                   1, 'Zondag',
                   2, 'Maandag',
                   3, 'Dinsdag',
                   4, 'Woensdag',
                   5, 'Donderdag',
                   6, 'Vrijdag',
                   7, 'Zaterdag')                              dag,
           TO_CHAR (r.res_rsv_ruimte_van, 'dd-mm-yyyy')        datum,
           oms.mld_kenmerkmelding_waarde                       oms,
           TRIM (res_ruimte_nr)                                ruimte,
           TO_CHAR (r.res_rsv_ruimte_van, 'hh24:mi')           van,
           TO_CHAR (r.res_rsv_ruimte_tot, 'hh24:mi')           tot,
           r.res_rsv_ruimte_bezoekers,
           om.naam,
           pm.naam,
           am.naam
      FROM mld_melding            m,
           res_ruimte_opstelling  ro,
           res_ruimte             rr,
           (SELECT km.mld_melding_key, rg.*
              FROM res_rsv_ruimte rg, mld_kenmerkmelding km
             WHERE     rg.res_reservering_key =
                       fac.safe_to_number (km.mld_kenmerkmelding_waarde)
                   AND km.mld_kenmerk_key = 6032
                   AND rg.res_rsv_ruimte_volgnr =
                       (SELECT MIN (res_rsv_ruimte_volgnr)
                          FROM res_v_aanwezigrsv_ruimte r
                         WHERE r.res_reservering_key = rg.res_reservering_key))
           r,
           (SELECT km.mld_melding_key, km.mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE km.mld_kenmerk_key = 6028) oms,
           (SELECT km.mld_melding_key,
                      SUBSTR (prs_perslid_voornaam, 1, 1)
                   || SUBSTR (prs_perslid_naam, 1, 1)    naam
              FROM mld_kenmerkmelding km, prs_perslid p
             WHERE     km.mld_kenmerk_key = 6030
                   AND p.prs_perslid_key =
                       fac.safe_to_number (km.mld_kenmerkmelding_waarde)) pm,
           (SELECT km.mld_melding_key,
                      SUBSTR (prs_perslid_voornaam, 1, 1)
                   || SUBSTR (prs_perslid_naam, 1, 1)    naam
              FROM mld_kenmerkmelding km, prs_perslid p
             WHERE     km.mld_kenmerk_key = 6029
                   AND p.prs_perslid_key =
                       fac.safe_to_number (km.mld_kenmerkmelding_waarde)) am,
           (SELECT km.mld_melding_key,
                      SUBSTR (prs_perslid_voornaam, 1, 1)
                   || SUBSTR (prs_perslid_naam, 1, 1)    naam
              FROM mld_kenmerkmelding km, prs_perslid p
             WHERE     km.mld_kenmerk_key = 6031
                   AND p.prs_perslid_key =
                       fac.safe_to_number (km.mld_kenmerkmelding_waarde)) om
     WHERE     m.mld_melding_key = r.mld_melding_key(+)
           AND m.mld_melding_key = oms.mld_melding_key(+)
           AND m.mld_melding_key = am.mld_melding_key(+)
           AND m.mld_melding_key = om.mld_melding_key(+)
           AND m.mld_melding_key = pm.mld_melding_key(+)
           AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)
           AND ro.res_ruimte_key = rr.res_ruimte_key(+)
           AND mld_stdmelding_key = 2441;

----------------------------
-- Rapportages


CREATE OR REPLACE VIEW pnbr_v_rap_errorlog
(
    HIDE_F_IMP_LOG_DATUM,
    FCLT_F_APPLICATIE,
    FCLT_F_DATUM,
    TIJDSTIP,
    FCLT_F_NIVEAU,
    FCLT_F_OMSCHRIJVING,
    HINT
)
AS
    SELECT imp_log_datum                            hide_f_imp_log_datum,
           fac_import_app_code,
           TO_CHAR (imp_log_datum, 'YYYYMMDD')      fclt_f_datum,
           TO_CHAR (imp_log_datum, 'HH24:MI:SS')    tijdstip,
           DECODE (imp_log_status,
                   'F', 'Fataal',
                   'E', 'Error',
                   'W', 'Waarschuwing',
                   'S', 'Samenvatting',
                   'I', 'Informatief',
                   '-')                             fclt_f_niveau,
           imp_log_omschrijving                     fclt_f_omschrijving,
           imp_log_hint
      FROM imp_log l, fac_import i, fac_import_app a
     WHERE     l.fac_import_key = i.fac_import_key
           AND i.fac_import_app_key = a.fac_import_app_key
           AND l.fac_import_key IN (  SELECT MAX (fac_import_key)
                                        FROM fac_import
                                    GROUP BY fac_import_app_key);

CREATE OR REPLACE VIEW pnbr_v_rap_import_status
(
    fclt_f_import,
    datum,
    fclt_f_status,
    omschrijving,
    hint
)
AS
    SELECT fac_import_app_code,
           i.imp_log_datum,
           i.imp_log_status,
           i.imp_log_omschrijving,
           i.imp_log_hint
      FROM imp_log i, fac_import fi, fac_import_app ia
     WHERE     i.fac_import_key = fi.fac_import_key
           AND fi.fac_import_app_key = ia.fac_import_app_key
           AND (   fac_import_app_code = 'PERSLID_MUT'
                OR fac_import_app_code = 'ORGANISATIE_MUT')
           AND i.imp_log_datum > SYSDATE - 1;

CREATE OR REPLACE VIEW pnbr_v_rap_servicdesk_status
(
    behandelgroep,
    bij_frontoffice,
    afgewezen,
    nieuw,
    te_behandelen,
    in_behandeling,
    afgemeld,
    historie,
    uitgegeven,
    actie_vereist
)
AS
      SELECT ins_discipline_omschrijving,
             SUM (bij_frontoffice)     bij_frontoffice,
             SUM (afgewezen)           afgewezen,
             SUM (nieuw)               nieuw,
             SUM (te_behandelen)       te_behandelen,
             SUM (in_behandeling)      in_behandeling,
             SUM (afgemeld)            afgemeld,
             SUM (historie)            historie,
             SUM (uitgegeven)          uitgegeven,
             SUM (actie_vereist)       actie_vereist
        FROM (SELECT ins_discipline_omschrijving,
                     DECODE (mld_melding_status, 0, 1, 0)      bij_frontoffice,
                     DECODE (mld_melding_status, 1, 1, 0)      afgewezen,
                     DECODE (mld_melding_status, 2, 1, 0)      nieuw,
                     DECODE (mld_melding_status, 3, 1, 0)      te_behandelen,
                     DECODE (mld_melding_status, 4, 1, 0)      in_behandeling,
                     DECODE (mld_melding_status, 5, 1, 0)      afgemeld,
                     DECODE (mld_melding_status, 6, 1, 0)      historie,
                     DECODE (mld_melding_status, 7, 1, 0)      uitgegeven,
                     DECODE (mld_melding_status, 99, 1, 0)     actie_vereist
                FROM mld_melding m, mld_stdmelding std, mld_discipline d
               WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
                     AND ins_discipline_key > 400
                     AND std.mld_ins_discipline_key = d.ins_discipline_key)
    GROUP BY ins_discipline_omschrijving;

CREATE OR REPLACE VIEW pnbr_v_rap_perf_servicedesk
(
    naam,
    ingevoerd,
    afgemeld,
    afgewezen
)
AS
      SELECT prs_perslid_naam_full,
             SUM (
                 COALESCE (
                     (SELECT 1
                        FROM fac_srtnotificatie sn
                       WHERE     t.fac_srtnotificatie_key =
                                 sn.fac_srtnotificatie_key
                             AND sn.fac_srtnotificatie_code = 'MLDNEW'),
                     0))    ingevoerd,
             SUM (
                 COALESCE (
                     (SELECT 1
                        FROM fac_srtnotificatie sn
                       WHERE     t.fac_srtnotificatie_key =
                                 sn.fac_srtnotificatie_key
                             AND sn.fac_srtnotificatie_code = 'MLDAFM'),
                     0))    afgemeld,
             SUM (
                 COALESCE (
                     (SELECT 1
                        FROM fac_srtnotificatie sn
                       WHERE     t.fac_srtnotificatie_key =
                                 sn.fac_srtnotificatie_key
                             AND sn.fac_srtnotificatie_code = 'MLDREJ'),
                     0))    afgewezen
        FROM fac_gebruikersgroep gg, prs_v_perslid_fullnames pf, fac_tracking t
       WHERE     gg.prs_perslid_key = pf.prs_perslid_key
             AND gg.fac_groep_key = 253
             AND t.prs_perslid_key = pf.prs_perslid_key
             AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE)
    GROUP BY prs_perslid_naam_full;

CREATE OR REPLACE VIEW pnbr_v_rap_afm_servicedesk
(
    fclt_f_behandelgroep,
    servicedesk,
    totaal,
    fclt_f_periode
)
AS
      SELECT ins_discipline_omschrijving                 behandelgroep,
             SUM (servicedesk)                           servicedesk,
             COUNT (mld_melding_key)                     totaal,
             TO_CHAR (fac_tracking_datum, 'yyyy-mm')     periode
        FROM (SELECT DISTINCT 1 servicedesk, prs_perslid_key
                FROM fac_gebruikersgroep gg
               WHERE gg.fac_groep_key = 253 OR gg.fac_groep_key = 91) gg,
             prs_v_perslid_fullnames pf,
             fac_tracking           t,
             fac_srtnotificatie     sn,
             mld_melding            m,
             mld_stdmelding         std,
             ins_tab_discipline     d
       WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
             AND (   sn.fac_srtnotificatie_code = 'MLDAFM'
                  OR sn.fac_srtnotificatie_code = 'MLDREJ')
             AND t.fac_tracking_refkey = mld_melding_key
             AND m.mld_stdmelding_key = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = d.ins_discipline_key
             AND gg.prs_perslid_key(+) = pf.prs_perslid_key
             AND t.prs_perslid_key = pf.prs_perslid_key
    GROUP BY d.ins_discipline_omschrijving,
             TO_CHAR (fac_tracking_datum, 'yyyy-mm');

-- rapportages tbv het IT dashbord.

CREATE OR REPLACE VIEW pnbr_v_rap_beschikb_dienst
(
    naam,
    mobiel,
    dect,
    ins_key
)
AS
    SELECT SUBSTR (ins_deel_omschrijving, 4, 20),
           kdm.ins_kenmerkdeel_waarde,
           kdd.ins_kenmerkdeel_waarde,
           d.ins_deel_key
      FROM ins_deel  d,
           (SELECT ins_deel_key, ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel kd
             WHERE     ins_kenmerkdeel_verwijder IS NULL
                   AND ins_kenmerk_key = 801) kdm,            -- mobiel nummer
           (SELECT ins_deel_key, ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel kd
             WHERE     ins_kenmerkdeel_verwijder IS NULL
                   AND ins_kenmerk_key = 821) kdd               -- DECT nummer
     WHERE     d.ins_deel_verwijder IS NULL
           AND d.ins_deel_key = kdm.ins_deel_key(+)
           AND d.ins_deel_key = kdd.ins_deel_key(+)
           AND d.ins_srtdeel_key = 562;

CREATE OR REPLACE VIEW pnbr_v_rap_appl_beschikb
(
    applicatie,
    status,
    ins_key
)
AS
    SELECT SUBSTR (ins_deel_omschrijving, 6, 20),
           DECODE (ins_kenmerkdeel_waarde, 1, 'UP', 'DOWN'),
           d.ins_deel_key
      FROM ins_deel  d,
           (SELECT ins_deel_key, ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel kd
             WHERE ins_kenmerk_key = 641) kd
     WHERE d.ins_deel_key = kd.ins_deel_key(+) AND d.ins_srtdeel_key = 561;

CREATE OR REPLACE VIEW pnbr_v_rap_dpl_meldingen
(
    mld_key,
    datum,
    omschrijving,
    eind,
    intervalwijz,
    workaround,
    status,
    afgemeld
)
AS
    SELECT mld_melding_key,
           TO_CHAR (mld_melding_datum, 'yyyy-mm-dd / hh24:mi'),
           mld_melding_omschrijving,
           fac.gettrackingdate ('MLDAFM', m.mld_melding_key)
               einddatum,
             SYSDATE
           - (SELECT MAX (t.fac_tracking_datum)
                FROM fac_tracking t, fac_srtnotificatie sn
               WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                     AND t.fac_tracking_refkey = m.mld_melding_key
                     AND sn.fac_srtnotificatie_xmlnode = 'melding')
               intervalwijz,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     km.mld_kenmerk_key = 6821
                   AND km.mld_melding_key = m.mld_melding_key)
               workaround,
           s.mld_statuses_omschrijving,
           DECODE (m.mld_melding_status,  1, 1,  5, 1,  6, 1,  0)
      FROM mld_melding m, mld_statuses s
     WHERE     mld_stdmelding_key = 5481
           AND m.mld_melding_status = s.mld_statuses_key
           AND COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key),
                         SYSDATE) <
               SYSDATE + 14;

CREATE OR REPLACE VIEW pnbr_v_melding_bestuur
(
    mld_melding_key,
    meldingnummer,
    prs_perslid_naam_full,
    mld_stdmelding_omschrijving,
    mld_melding_omschrijving,
    mld_melding_status,
    opengesloten,
    mld_melding_datum,
    mld_melding_afgemeld
)
AS
    SELECT m.mld_melding_key,
           m.mld_melding_key,
           p.prs_perslid_naam_full,
           sm.mld_stdmelding_omschrijving,
           m.mld_melding_omschrijving,
           ms.mld_statuses_omschrijving,
           DECODE (m.mld_melding_status,
                   1, 'Gesloten',
                   5, 'Gesloten',
                   6, 'Gesloten',
                   'Open')                                    opengesloten,
           m.mld_melding_datum,
           mld.getmeldingstatusdate (m.mld_melding_key, 5)    afgemeld
      FROM (SELECT p.prs_perslid_key, prs_perslid_naam_full
              FROM prs_perslid                  p,
                   prs_v_perslid_fullnames_all  pf,
                   fac_usrtab                   t,
                   fac_usrdata                  d
             WHERE     p.prs_perslid_key = pf.prs_perslid_key
                   AND p.prs_perslid_nr = d.fac_usrdata_code
                   AND t.fac_usrtab_key = d.fac_usrtab_key
                   AND t.fac_usrtab_naam = 'BestuurOnderst'
            UNION ALL
            SELECT p.prs_perslid_key, prs_perslid_naam_full
              FROM prs_perslid p, prs_v_perslid_fullnames_all pf
             WHERE     p.prs_perslid_key = pf.prs_perslid_key
                   AND prs_afdeling_key IN (127, 128)) p,          -- GS en PS
           mld_melding     m,
           mld_statuses    ms,
           mld_stdmelding  sm
     WHERE     m.prs_perslid_key_voor = p.prs_perslid_key
           AND ms.mld_statuses_key = m.mld_melding_status
           AND sm.mld_stdmelding_key = m.mld_stdmelding_key;

CREATE OR REPLACE VIEW pnbr_v_rap_melding_bestuur
(
    fclt_d_datum,
    melding,
    voor,
    soortmelding,
    omschrijving,
    fclt_f_status,
    fclt_f_opengesloten,
    ingediend,
    afgemeld
)
AS
    SELECT TO_CHAR (mld_melding_datum, 'dd-mm-yyyy'),
           meldingnummer,
           prs_perslid_naam_full,
           mld_stdmelding_omschrijving,
           mld_melding_omschrijving,
           mld_melding_status,
           opengesloten,
           mld_melding_datum,
           mld_melding_afgemeld
      FROM pnbr_v_melding_bestuur;

CREATE OR REPLACE VIEW pnbr_v_noti_melding_bestuur
(
    sender,
    receiver,
    text,
    code,
    key,
    xkey
)
AS
    SELECT NULL                        sender,
           4426                        receiver, -- Dominique Verwiel (dverwiel@brabant.nl)
              'Nieuwe melding '
           || meldingnummer
           || ' ingevoerd voor/door: '
           || prs_perslid_naam_full    text,
           'MLDNEW'                    code,
           mld_melding_key             key,
           NULL                        xkey
      FROM pnbr_v_melding_bestuur
     WHERE     mld_melding_datum >
               (SELECT   fac_notificatie_job_nextrun
                       - fac_notificatie_job_interval / 24
                  FROM fac_notificatie_job
                 WHERE fac_notificatie_job_view =
                       'PNBR_V_NOTI_MELDING_BESTUUR')
           AND mld_melding_datum <
               (SELECT fac_notificatie_job_nextrun
                  FROM fac_notificatie_job
                 WHERE fac_notificatie_job_view =
                       'PNBR_V_NOTI_MELDING_BESTUUR');

CREATE OR REPLACE VIEW pnbr_v_rap_notificatie
(
    fclt_f_module,
    code,
    omschrijving,
    fclt_f_status,
    fclt_f_mail,
    fclt_f_sms,
    fclt_f_alert
)
AS
    SELECT SUBSTR (fac_srtnotificatie_code, 1, 3)
               module,
           fac_srtnotificatie_code,
           lcl.x ('fac_srtnotificatie_oms',
                  fac_srtnotificatie_key,
                  fac_srtnotificatie_oms),
           DECODE (BITAND (fac_srtnotificatie_mode, 1), 0, '', 'status')
               status,
           DECODE (BITAND (fac_srtnotificatie_mode, 2), 0, '', 'mail')
               mail,
           DECODE (BITAND (fac_srtnotificatie_mode, 4), 0, '', 'sms')
               sms,
           DECODE (BITAND (fac_srtnotificatie_mode, 8), 0, '', 'alert')
               alert
      FROM fac_srtnotificatie;

CREATE OR REPLACE VIEW PNBR_V_RAP_VOORRAAD
(
    HIDE_F_EXTERN_DISKEY,
    HIDE_F_SRTGROEP_OMSCHRIJVING,
    FCLT_F_CATALOGUS,
    ARTIKEL_NR,
    ARTIKEL_OMSCHRIJVING,
    ARTIKEL_PRIJS,
    MAGAZIJN,
    MIN_VOORRAAD,
    MAX_VOORRAAD,
    INKOOP_GELEVERD,
    INTERN_BESTELD,
    VOORRAAD,
    INKOOP_BESTELD,
    INKOOP_LEVERDATUM,
    INKOOP_GEWENST
)
AS
    SELECT extern.dkey,
           COALESCE (intern.bes_srtgroep_omschrijving,
                     extern.bes_srtgroep_omschrijving),
           COALESCE (intern.ins_discipline_omschrijving,
                     extern.ins_discipline_omschrijving),
           extern.bes_srtdeel_nr,
           COALESCE (intern.bes_srtdeel_omschrijving,
                     extern.bes_srtdeel_omschrijving),
           COALESCE (intern.srtdeel_prijs, extern.srtdeel_prijs),
           intern.magazijn,
           extern.vmin,
           extern.vmax,
           extern.geleverd,
           intern.besteld,
           extern.geleverd - COALESCE (intern.besteld, 0)
               voorraad,
           extern.besteld,
           TO_CHAR (extern.leverdatum, 'dd-mm-yyyy'),
           CASE
               WHEN (  (  COALESCE (extern.besteld, 0)
                        + COALESCE (extern.geleverd, 0))
                     - COALESCE (intern.besteld, 0)) <
                    extern.vmin
               THEN
                     extern.vmax
                   - (  (  COALESCE (extern.besteld, 0)
                         + COALESCE (extern.geleverd, 0))
                      - COALESCE (intern.besteld, 0))
               ELSE
                   NULL
           END
               extern_gewenst
      FROM (SELECT bd.ins_discipline_key
                       dkey,                                     -- INKOOP-key
                   g.bes_srtgroep_omschrijving,
                   sd.bes_srtdeel_nr,                        -- ext. artikelnr
                   sd.bes_srtdeel_omschrijving,
                   bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
                       srtdeel_prijs,
                   bd.ins_discipline_omschrijving,       -- ext. catalogusnaam
                   sd.bes_srtdeel_voorraadmin
                       vmin,                               -- ext. voorraadmin
                   sd.bes_srtdeel_voorraadmax
                       vmax,                               -- ext. voorraadmax
                   (SELECT SUM (
                                 COALESCE (boi.bes_bestelopdr_item_aantal,
                                           bi.bes_bestelling_item_aantal)
                               - COALESCE (
                                     boi.bes_bestelopdr_item_aantalontv,
                                     0))
                      FROM bes_bestelling       b,
                           bes_bestelling_item  bi,
                           bes_bestelopdr_item  boi
                     WHERE     boi.bes_bestelopdr_item_key(+) =
                               bi.bes_bestelopdr_item_key
                           AND bi.bes_bestelling_item_status IN (2,
                                                                 3,
                                                                 4,
                                                                 5)
                           AND b.bes_bestelling_key = bi.bes_bestelling_key
                           AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
                       besteld,
                   (SELECT MIN (b.bes_bestelling_leverdatum)
                      FROM bes_bestelling       b,
                           bes_bestelling_item  bi,
                           bes_bestelopdr_item  boi
                     WHERE     boi.bes_bestelopdr_item_key(+) =
                               bi.bes_bestelopdr_item_key
                           AND bi.bes_bestelling_item_status IN (2,
                                                                 3,
                                                                 4,
                                                                 5)
                           AND COALESCE (bes_bestelopdr_item_aantal,
                                         bi.bes_bestelling_item_aantal) <>
                               COALESCE (bes_bestelopdr_item_aantalontv, 0)
                           AND b.bes_bestelling_key = bi.bes_bestelling_key
                           AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
                       leverdatum,
                   (SELECT SUM (boi.bes_bestelopdr_item_aantalontv)
                      FROM bes_bestelling       b,
                           bes_bestelling_item  bi,
                           bes_bestelopdr_item  boi
                     WHERE    --   boi.bes_bestelopdr_item_status in (6,7) AND
                               b.bes_bestelling_key = bi.bes_bestelling_key
                           AND boi.bes_bestelopdr_item_key =
                               bi.bes_bestelopdr_item_key
                           AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
                       geleverd
              FROM bes_srtdeel      sd,
                   bes_srtgroep     g,
                   bes_discipline   bd,
                   bes_disc_params  dp
             WHERE     sd.bes_srtdeel_verwijder IS NULL
                   AND sd.bes_srtgroep_key = g.bes_srtgroep_key
                   AND g.ins_discipline_key = bd.ins_discipline_key
                   AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                   AND dp.bes_ins_discipline_key_inkoop IS NULL
                   AND bd.ins_discipline_key IN
                           (SELECT bes_ins_discipline_key_inkoop
                              FROM bes_disc_params
                             WHERE bes_ins_discipline_key_inkoop IS NOT NULL))
           extern                   -- Inkoop artikelen uit externe catalogus!
           FULL JOIN
           (SELECT dp.bes_ins_discipline_key_inkoop
                       dkey,                                     -- INKOOP-key
                   g.bes_srtgroep_omschrijving,
                   sd.bes_srtdeel_nr,                        -- int. artikelnr
                   sd.bes_srtdeel_omschrijving,
                   sd.bes_srtdeel_notitie
                       magazijn,
                   bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
                       srtdeel_prijs,
                   bd.ins_discipline_omschrijving,       -- int. catalogusnaam
                   (SELECT SUM (
                               COALESCE (boi.bes_bestelopdr_item_aantal,
                                         bi.bes_bestelling_item_aantal))
                      FROM bes_bestelling       b,
                           bes_bestelling_item  bi,
                           bes_bestelopdr_item  boi
                     WHERE     boi.bes_bestelopdr_item_key(+) =
                               bi.bes_bestelopdr_item_key
                           AND b.bes_bestelling_key = bi.bes_bestelling_key
                           AND bi.bes_srtdeel_key = sd.bes_srtdeel_key)
                       besteld
              FROM bes_srtdeel      sd,
                   bes_srtgroep     g,
                   bes_discipline   bd,
                   bes_disc_params  dp
             WHERE     sd.bes_srtdeel_verwijder IS NULL
                   AND sd.bes_srtgroep_key = g.bes_srtgroep_key
                   AND g.ins_discipline_key = bd.ins_discipline_key
                   AND bd.ins_discipline_key = dp.bes_ins_discipline_key
                   AND dp.bes_ins_discipline_key_inkoop IS NOT NULL) intern -- Verkoop artikelen uit interne catalogus!
               ON     extern.dkey = intern.dkey
                  AND extern.bes_srtdeel_nr = intern.bes_srtdeel_nr;

CREATE OR REPLACE VIEW pnbr_v_rap_bestellingen
(
    bestelnummer,
    fclt_d_bes_bestelling_datum,
    fclt_f_aanvrager,
    fclt_f_afdeling,
    fclt_f_kostenplaats,
    fclt_f_catalogus,
    fclt_f_groep,
    aantal,
    fclt_f_omschrijving,
    stuksprijs,
    totaalprijs
)
AS
    SELECT b.bes_bestelling_key,
           TO_CHAR (b.bes_bestelling_datum, 'dd-mm-yyyy'),
           pf.prs_perslid_naam_full,
           a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving,
           k.prs_kostenplaats_nr || '-' || k.prs_kostenplaats_omschrijving,
           d.ins_discipline_omschrijving,
           sg.bes_srtgroep_omschrijving,
           bes_bestelling_item_aantal,
           sd.bes_srtdeel_omschrijving,
           COALESCE (bi.bes_bestelling_item_prijs,
                     bes.getsrtdeelprijs (sd.bes_srtdeel_key, SYSDATE)),
           ROUND (
                 COALESCE (bi.bes_bestelling_item_prijs,
                           bes.getsrtdeelprijs (sd.bes_srtdeel_key, SYSDATE))
               * bes_bestelling_item_aantal,
               2)
      FROM bes_bestelling               b,
           bes_bestelling_item          bi,
           bes_srtdeel                  sd,
           bes_srtgroep                 sg,
           bes_discipline               d,
           prs_v_perslid_fullnames_all  pf,
           prs_perslid                  p,
           prs_afdeling                 a,
           prs_kostenplaats             k
     WHERE     b.bes_bestelling_key = bi.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 = d.ins_discipline_key
           AND b.prs_perslid_key = pf.prs_perslid_key
           AND b.prs_perslid_key = p.prs_perslid_key
           AND p.prs_afdeling_key = a.prs_afdeling_key
           AND a.prs_kostenplaats_key = k.prs_kostenplaats_key(+);

--
-- Sync view
--

CREATE OR REPLACE VIEW pnbr_v_sync_alg_ruimte
(
    alg_ruimte_key,
    alg_verdieping_key,
    cadlabel
)
AS
    SELECT r.alg_ruimte_key,
           r.alg_verdieping_key,
              DECODE (LENGTH (alg_verdieping_code),
                      1, '0' || alg_verdieping_code,
                      alg_verdieping_code)
           || '.'
           || DECODE (LENGTH (alg_ruimte_nr),
                      1, '00' || alg_ruimte_nr,
                      2, '0' || alg_ruimte_nr,
                      alg_ruimte_nr)
      FROM alg_v_aanwezigruimte r, alg_verdieping v
     WHERE r.alg_verdieping_key = v.alg_verdieping_key;

-- tijdelijk vervangen door:

CREATE OR REPLACE VIEW pnbr_v_sync_alg_ruimte
(
    alg_ruimte_key,
    alg_verdieping_key,
    cadlabel
)
AS
    SELECT r.alg_ruimte_key,
           r.alg_verdieping_key,
           DECODE (fac.safe_to_number (alg_ruimte_nr),
                   NULL, alg_ruimte_nr,
                   TO_CHAR (TO_NUMBER (alg_ruimte_nr)))
      FROM alg_v_aanwezigruimte r, alg_verdieping v
     WHERE r.alg_verdieping_key = v.alg_verdieping_key;

CREATE OR REPLACE VIEW pnbr_v_rap_dagstaat
(
    res_rsv_ruimte_key,
    res_rsv_ruimte_omschrijving,
    res_rsv_ruimte_van,
    res_rsv_ruimte_tot,
    res_rsv_ruimte_bezoekers,
    res_ruimte_key,
    res_ruimte_nr,
    tonen
)
AS
    SELECT * FROM 
    (SELECT r.res_rsv_ruimte_key,
           res_rsv_ruimte_omschrijving,
              TO_CHAR (r.res_rsv_ruimte_van, 'yyyy-mm-dd')
           || 'T'
           || TO_CHAR (r.res_rsv_ruimte_van, 'hh24:mi:ss') van,
              TO_CHAR (r.res_rsv_ruimte_tot, 'yyyy-mm-dd')
           || 'T'
           || TO_CHAR (r.res_rsv_ruimte_tot, 'hh24:mi:ss') tot,
           COALESCE (res_rsv_ruimte_bezoekers, 0) bezoekers,
           rr.res_ruimte_key,
           DECODE (
               INSTR (res_ruimte_nr, '('),
               0, res_ruimte_nr,
               SUBSTR (
                   res_ruimte_nr,
                   INSTR (res_ruimte_nr, '(') + 1,
                     INSTR (res_ruimte_nr, ')')
                   - INSTR (res_ruimte_nr, '(')
                   - 1)) ruimtenr,
          CASE WHEN res_rsv_ruimte_tot + INTERVAL '15' MINUTE < SYSDATE 
                THEN 'Nee' ELSE 'Ja' END
            AS tonen       
      FROM res_rsv_ruimte         r,
           res_ruimte_opstelling  rro,
           res_ruimte             rr,
           (SELECT rrr.res_rsv_ruimte_key,
                   (SELECT w.res_kenmerkreservering_waarde
                      FROM res_kenmerkwaarde w, res_kenmerk k
                     WHERE     w.res_kenmerk_key = k.res_kenmerk_key
                           AND w.res_kenmerk_key = k.res_kenmerk_key
                           AND rrr.res_rsv_ruimte_key = w.res_rsv_ruimte_key
                           AND k.res_srtkenmerk_key = 1 -- zichtbaar op planbord
                           AND k.res_activiteit_key = rrr.res_activiteit_key)    res_kenmerkreservering_waarde
              FROM res_rsv_ruimte rrr) ds
     WHERE     r.res_rsv_ruimte_verwijder IS NULL
           AND r.res_status_fo_key = 2
           AND r.res_rsv_ruimte_key = ds.res_rsv_ruimte_key
           AND r.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
           AND rro.res_ruimte_key = rr.res_ruimte_key
           AND (   fac.safe_to_number (ds.res_kenmerkreservering_waarde) = 2
                OR r.res_rsv_ruimte_contact_key = 30064)    -- SmartSigns user
           AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE)
           AND NOT EXISTS
                   (SELECT rrr.res_rsv_ruimte_key
                      FROM res_rsv_ruimte rrr
                     WHERE     rrr.res_activiteit_key = 370 -- teamruimtes niet meenemen in dit overzicht
                           AND rrr.res_rsv_ruimte_key = r.res_rsv_ruimte_key)) d          
                WHERE d.tonen = 'Ja';

CREATE OR REPLACE VIEW pnbr_v_rap_dagstaat_5wd
(
    res_rsv_ruimte_key,
    res_rsv_ruimte_omschrijving,
    res_rsv_ruimte_van,
    res_rsv_ruimte_tot,
    res_rsv_ruimte_bezoekers,
    res_ruimte_key,
    res_ruimte_nr,
    tonen
)
AS
    SELECT * FROM
    (SELECT r.res_rsv_ruimte_key,
           res_rsv_ruimte_omschrijving,
              TO_CHAR (r.res_rsv_ruimte_van, 'yyyy-mm-dd')
           || 'T'
           || TO_CHAR (r.res_rsv_ruimte_van, 'hh24:mi:ss') van,
              TO_CHAR (r.res_rsv_ruimte_tot, 'yyyy-mm-dd')
           || 'T'
           || TO_CHAR (r.res_rsv_ruimte_tot, 'hh24:mi:ss') tot,
           COALESCE (res_rsv_ruimte_bezoekers, 0) bezoekers,
           rr.res_ruimte_key,
           DECODE (
               INSTR (res_ruimte_nr, '('),
               0, res_ruimte_nr,
               SUBSTR (res_ruimte_nr,
                       INSTR (res_ruimte_nr, '(') + 1,
                       INSTR (res_ruimte_nr, ')') - INSTR (res_ruimte_nr, '(') - 1)) ruimtenr,
           CASE WHEN res_rsv_ruimte_tot + INTERVAL '15' MINUTE < SYSDATE THEN 'Nee' ELSE 'Ja' END
               AS tonen
      FROM res_rsv_ruimte         r,
           res_ruimte_opstelling  rro,
           res_ruimte             rr,
           (SELECT rrr.res_rsv_ruimte_key,
                   (SELECT w.res_kenmerkreservering_waarde
                      FROM res_kenmerkwaarde w, res_kenmerk k
                     WHERE     w.res_kenmerk_key = k.res_kenmerk_key
                           AND w.res_kenmerk_key = k.res_kenmerk_key
                           AND rrr.res_rsv_ruimte_key = w.res_rsv_ruimte_key
                           AND k.res_srtkenmerk_key = 1                     -- zichtbaar op planbord
                           AND k.res_activiteit_key = rrr.res_activiteit_key)    res_kenmerkreservering_waarde
              FROM res_rsv_ruimte rrr) ds,
           (SELECT d.datum_van, d.datum_tot
              FROM (    SELECT TRUNC (SYSDATE)                                                 datum_van,
                               TRUNC (SYSDATE) + 7                                             datum_max, --- 5 dgn + max 2 weekenddagen
                               TRUNC (SYSDATE) + LEVEL - 1                                     datum_tot,
                               FAC.getweekdaynum (TRUNC (SYSDATE) + LEVEL - 1)                 weekday,
                               ROW_NUMBER () OVER (ORDER BY (TRUNC (SYSDATE) + LEVEL - 1))     aant_dgn
                          FROM DUAL
                         WHERE FAC.getweekdaynum (TRUNC (SYSDATE) + LEVEL - 1) NOT IN (1, 7)
                    CONNECT BY LEVEL <= ((SYSDATE + 7) - SYSDATE + 1)
                      ORDER BY TRUNC (SYSDATE) + LEVEL - 1) d
             WHERE d.aant_dgn = 6) wd
     WHERE     r.res_rsv_ruimte_verwijder IS NULL
           AND r.res_status_fo_key = 2
           AND r.res_rsv_ruimte_key = ds.res_rsv_ruimte_key
           AND r.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
           AND rro.res_ruimte_key = rr.res_ruimte_key
           AND (   fac.safe_to_number (ds.res_kenmerkreservering_waarde) = 2
                OR r.res_rsv_ruimte_contact_key = 30064)                          -- SmartSigns user
           AND TRUNC (res_rsv_ruimte_van) BETWEEN wd.datum_van AND wd.datum_tot
           AND NOT EXISTS
                   (SELECT rrr.res_rsv_ruimte_key
                      FROM res_rsv_ruimte rrr
                     WHERE     rrr.res_activiteit_key = 370 -- teamruimtes niet meenemen in dit overzicht
                           AND rrr.res_rsv_ruimte_key = r.res_rsv_ruimte_key))D
            WHERE d.tonen = 'Ja';
                           
CREATE OR REPLACE VIEW PNBR_V_RAP_DAGSTAAT_TEAMS
(
    RES_RSV_RUIMTE_KEY,
    RES_RSV_RUIMTE_OMSCHRIJVING,
    RES_RSV_RUIMTE_VAN,
    RES_RSV_RUIMTE_TOT,
    RES_RSV_RUIMTE_BEZOEKERS,
    RES_RUIMTE_KEY,
    RES_RUIMTE_NR
)
AS
    SELECT r.res_rsv_ruimte_key,
             team.res_kenmerkreservering_waarde,
                TO_CHAR (r.res_rsv_ruimte_van, 'yyyy-mm-dd')
             || 'T'
             || TO_CHAR (r.res_rsv_ruimte_van, 'hh24:mi:ss'),
                TO_CHAR (r.res_rsv_ruimte_tot, 'yyyy-mm-dd')
             || 'T'
             || TO_CHAR (r.res_rsv_ruimte_tot, 'hh24:mi:ss'),
             COALESCE (res_rsv_ruimte_bezoekers, 0),
             rr.res_ruimte_key,
             DECODE (INSTR (res_ruimte_nr, '('),
                     0, res_ruimte_nr,
                     SUBSTR (res_ruimte_nr, 1, INSTR (res_ruimte_nr, '(') - 1))
        FROM res_rsv_ruimte       r,
             res_ruimte_opstelling rro,
             res_ruimte           rr,
             (SELECT rrr.res_rsv_ruimte_key,
                     (SELECT w.res_kenmerkreservering_waarde
                        FROM res_kenmerkwaarde w, res_kenmerk k, res_srtkenmerk sk
                       WHERE     w.res_kenmerk_key = k.res_kenmerk_key
                             AND w.res_kenmerk_key = k.res_kenmerk_key
                             AND rrr.res_rsv_ruimte_key = w.res_rsv_ruimte_key
                             AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key
                             AND sk.res_srtkenmerk_upper LIKE '%TEAM%'     -- team
                             AND k.res_activiteit_key = rrr.res_activiteit_key)    res_kenmerkreservering_waarde
                FROM res_rsv_ruimte rrr) team,
             (SELECT rrr.res_rsv_ruimte_key,
                     (SELECT w.res_kenmerkreservering_waarde
                        FROM res_kenmerkwaarde w, res_kenmerk k
                       WHERE     w.res_kenmerk_key = k.res_kenmerk_key
                             AND w.res_kenmerk_key = k.res_kenmerk_key
                             AND rrr.res_rsv_ruimte_key = w.res_rsv_ruimte_key
                             AND k.res_srtkenmerk_key = 1 -- zichtbaar op planbord
                             AND k.res_activiteit_key = rrr.res_activiteit_key)    res_kenmerkreservering_waarde
                FROM res_rsv_ruimte rrr) ds,
             (SELECT d.datum_van, d.datum_tot
                FROM (    SELECT TRUNC (SYSDATE)
                                     datum_van,
                                 TRUNC (SYSDATE) + 7
                                     datum_max,     --- 5 dgn + max 2 weekenddagen
                                 TRUNC (SYSDATE) + LEVEL - 1
                                     datum_tot,
                                 FAC.getweekdaynum (TRUNC (SYSDATE) + LEVEL - 1)
                                     weekday,
                                 ROW_NUMBER ()
                                     OVER (ORDER BY (TRUNC (SYSDATE) + LEVEL - 1))
                                     aant_dgn
                            FROM DUAL
                           WHERE FAC.getweekdaynum (TRUNC (SYSDATE) + LEVEL - 1) NOT IN
                                     (1, 7)
                      CONNECT BY LEVEL <= ((SYSDATE + 7) - SYSDATE + 1)
                        ORDER BY TRUNC (SYSDATE) + LEVEL - 1) d
               WHERE d.aant_dgn = 6) wd
       WHERE     r.res_rsv_ruimte_verwijder IS NULL
             AND r.res_status_fo_key = 2
             AND r.res_rsv_ruimte_key = ds.res_rsv_ruimte_key
             AND r.res_rsv_ruimte_key = team.res_rsv_ruimte_key
             AND r.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
             AND r.res_activiteit_key = 370   --- alleen reserveringen teamruimtes
             AND rro.res_ruimte_key = rr.res_ruimte_key
             AND (   fac.safe_to_number (ds.res_kenmerkreservering_waarde) = 2
                  OR r.res_rsv_ruimte_contact_key = 30064)      -- SmartSigns user
             AND TRUNC (res_rsv_ruimte_van) BETWEEN wd.datum_van AND wd.datum_tot
    ORDER BY res_rsv_ruimte_van;

CREATE OR REPLACE VIEW PNBR_V_RAP_DAGSTAAT_BRON
(
    FCLT_D_DATUM,
    DAGVWEEK,
    MAAND,
    DAG,
    JAAR,
    NUMMER,
    TIJDSORT,
    RUIMTE_VAN,
    RUIMTE_TOT,
    BEZOEKERS,
    ACTIVITEIT,
    OMSCHRIJVING,
    OPMERKING,
    RUIMTE,
    VERDIEPING,
    LOCATIE,
    MELDER,
    TELEFOON,
    KOSTENPLAATS,
    BEGRPOST,
    BESTELNR,
    OPSTELLING,
    AANTALCATERING,
    V_VAN,
    V_TOT,
    V_OMSCHRIJVING,
    V_AANTAL,
    V_PRIJS,
    V_TOTAAL,
    GS,
    CDK,
    RES_RSV_RUIMTE_KEY,
    RES_DISCIPLINE_KEY,
    RES_BESNR_CATERAAR,
    PROJECTMGR_EVENEMENT,
    LM_MUT,
    LM_DEL
)
AS
    SELECT TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy')
               datum,
           DECODE (TO_CHAR (res_rsv_ruimte_van, 'd'),
                   1, 'zondag',
                   2, 'maandag',
                   3, 'dinsdag',
                   4, 'woensdag',
                   5, 'donderdag',
                   6, 'vrijdag',
                   7, 'zaterdag')
               dagvweek,
           DECODE (TO_CHAR (res_rsv_ruimte_van, 'mm'),
                   1, 'januari',
                   2, 'februari',
                   3, 'maart',
                   4, 'april',
                   5, 'mei',
                   6, 'juni',
                   7, 'juli',
                   8, 'augustus',
                   9, 'september',
                   10, 'oktober',
                   11, 'november',
                   12, 'december')
               maand,
           TO_CHAR (res_rsv_ruimte_van, 'dd')
               dag,
           TO_CHAR (res_rsv_ruimte_van, 'yyyy')
               jaar,
           res_reservering_key || '/' || res_rsv_ruimte_volgnr
               nummer,
           TO_CHAR (res_rsv_ruimte_van, 'yyyymmddhh24mi')
               tijdsort,
           TO_CHAR (res_rsv_ruimte_van, 'hh24:mi')
               ruimte_van,
           TO_CHAR (res_rsv_ruimte_tot, 'hh24:mi')
               ruimte_tot,
           res_rsv_ruimte_bezoekers
               bezoekers,
           res_activiteit_omschrijving,
           DECODE (
               rrr.res_activiteit_key,
               150,    'GEBAK '
                    || (SELECT ud.fac_usrdata_omschr
                          FROM res_kenmerkwaarde rk, fac_usrdata ud
                         WHERE     rk.res_kenmerk_key = 262
                               AND ud.fac_usrtab_key = 1943 -- kenmerk + usertab zakelijk/prive
                               AND ud.fac_usrdata_key =
                                   fac.safe_to_number (
                                       rk.res_kenmerkreservering_waarde)
                               AND rk.res_rsv_ruimte_key =
                                   rrr.res_rsv_ruimte_key),
               UPPER (res_rsv_ruimte_omschrijving)),
           res_rsv_ruimte_opmerking
               opmerking,
           COALESCE (
               (SELECT res_ruimte_nr
                  FROM res_v_ruimte_opstel_gegevens rog
                 WHERE rog.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key),
               (SELECT MAX (alg_ruimte_aanduiding)
                  FROM alg_v_ruimte_gegevens rg
                 WHERE rrr.alg_ruimte_key = rg.alg_ruimte_key))
               ruimte,
           vg.alg_verdieping_omschrijving
               verdieping,
           vg.alg_locatie_omschrijving
               locatie,
           prs_perslid_naam_full
               melder,
           COALESCE (prs_perslid_telefoonnr, prs_perslid_mobiel)
               telefoon,
           k.prs_kostenplaats_nr
               kostenplaats,
           COALESCE (bp_extra.waarde, bp.waarde)
               begrpost,
           bnk.waarde
               bestelnr,
           (SELECT rog.res_opstelling_omschrijving
              FROM res_v_ruimte_opstel_gegevens rog
             WHERE rog.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key)
               opstelling,
           (SELECT COUNT (*)
              FROM res_rsv_artikel rra
             WHERE rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
               aantalcatering,
           TO_CHAR (v.van, 'hh24:mi')
               v_van,
           v.tot
               v_tot,
           v.omschrijving
               v_omschrijving,
           v.aantal
               v_aantal,
           v.prijs
               v_prijs,
           COALESCE (v.aantal, 0) * v.prijs
               v_totaal,
           COALESCE (gs.waarde, '0')
               gs,
           COALESCE (cdk.waarde, '0')
               cdk,
           rrr.res_rsv_ruimte_key,
           v.res_discipline_key,
           kn_bes_cateraar.waarde,
           projmngr_evenement.prs_perslid_naam_friendly,
           v.lm_mut,
           v.lm_del
      FROM res_rsv_ruimte           rrr,
           (SELECT res_rsv_ruimte_key,
                   res_rsv_artikel_aantal         aantal,
                   res_artikel_prijs              prijs,
                   res_rsv_artikel_levering       van,
                   NULL                           tot,
                   ra.res_artikel_omschrijving    omschrijving,
                   ra.res_discipline_key,
                   CASE
                       WHEN (   rra.res_rsv_artikel_aanmaak >=
                                referentie.ref_datum
                             OR rra.res_rsv_artikel_mutatie >=
                                referentie.ref_datum)
                       THEN
                           'Ja'
                       ELSE
                           'Nee'
                   END                            LM_MUT,
                   CASE
                       WHEN rra.res_rsv_artikel_verwijder >=
                            referentie.ref_datum
                       THEN
                           'Ja'
                       ELSE
                           'Nee'
                   END                            LM_DEL
              FROM res_rsv_artikel  rra,
                   res_artikel      ra,
                   (SELECT fac.safe_to_date (
                               (   TO_CHAR (SYSDATE - 1, 'dd-mm-yyyy')
                                || ' 16:00'), -- om te bekijken welke wijzigingen in de catering zijn doorgevoerd na 16 uur
                               'dd-mm-yyyy HH24:mi')    AS ref_datum
                      FROM DUAL) referentie
             WHERE     rra.res_rsv_artikel_verwijder IS NULL
                   AND rra.res_artikel_key = ra.res_artikel_key
            UNION ALL
            SELECT res_rsv_ruimte_key,
                   1                         aantal,
                   NULL,
                   res_rsv_deel_van          van,
                   res_rsv_deel_tot          tot,
                   ins_deel_omschrijving     omschrijving,
                   rd.res_discipline_key,
                   ''                        lm_mut, -- dit beoordelen we alleen voor verbuiksartikelen
                   ''                        lm_del
              FROM res_rsv_deel  rrd,
                   res_deel      rd,
                   ins_deel      d,
                   ins_srtdeel   sd
             WHERE     rrd.res_rsv_deel_verwijder IS NULL
                   AND rrd.res_deel_key = rd.res_deel_key
                   AND rd.res_ins_deel_key = d.ins_deel_key
                   AND d.ins_srtdeel_key = sd.ins_srtdeel_key) v,
           (SELECT res_rsv_ruimte_key, fac_usrdata_code waarde
              FROM res_kenmerkwaarde kw, fac_usrdata ud, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 21
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key
                   AND fac.safe_to_number (res_kenmerkreservering_waarde) =
                       fac_usrdata_key) bp,
           (SELECT res_rsv_ruimte_key, res_kenmerkreservering_waarde waarde
              FROM res_kenmerkwaarde kw, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 61
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key) bp_extra,
           (SELECT res_rsv_ruimte_key, fac_usrdata_code waarde
              FROM res_kenmerkwaarde kw, fac_usrdata ud, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 2
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key
                   AND fac.safe_to_number (res_kenmerkreservering_waarde) =
                       fac_usrdata_key) gs,
           (SELECT res_rsv_ruimte_key, fac_usrdata_code waarde
              FROM res_kenmerkwaarde kw, fac_usrdata ud, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 22
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key
                   AND fac.safe_to_number (res_kenmerkreservering_waarde) =
                       fac_usrdata_key) cdk,
           (SELECT res_rsv_ruimte_key, res_kenmerkreservering_waarde waarde
              FROM res_kenmerkwaarde kw, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 281
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key) bnk,
           (SELECT fac_usrdata_omschr waarde, kw.res_rsv_ruimte_key
              FROM res_kenmerkwaarde kw, fac_usrdata ud, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 441
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key
                   AND fac.safe_to_number (res_kenmerkreservering_waarde) =
                       fac_usrdata_key) kn_bes_cateraar,
           (SELECT rrr2.res_rsv_ruimte_key,
                   rg.alg_verdieping_omschrijving,
                   rg.alg_locatie_omschrijving
              FROM alg_v_ruimte_gegevens rg, res_rsv_ruimte rrr2
             WHERE rg.alg_ruimte_key =
                   COALESCE (
                       rrr2.alg_ruimte_key,
                       (SELECT MIN (rar.alg_ruimte_key)
                          FROM res_v_rsv_ruimte_2_alg_ruimte rar
                         WHERE rar.res_rsv_ruimte_key =
                               rrr2.res_rsv_ruimte_key))) vg,
           (SELECT res_rsv_ruimte_key, p.prs_perslid_naam_friendly
              FROM res_kenmerk                  k,
                   res_srtkenmerk               sk,
                   res_kenmerkwaarde            kw,
                   prs_v_perslid_fullnames_all  p
             WHERE     k.res_srtkenmerk_key = sk.res_srtkenmerk_key
                   AND kw.res_kenmerk_key = k.res_kenmerk_key
                   AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
                       p.prs_perslid_key
                   AND sk.res_srtkenmerk_key = 521) projmngr_evenement,
           prs_perslid              p,
           prs_v_perslid_fullnames  pf,
           prs_kostenplaats         k,
           res_activiteit           a
     WHERE     rrr.res_rsv_ruimte_key = v.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_verwijder IS NULL
           AND rrr.res_activiteit_key = a.res_activiteit_key
           AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key
           AND p.prs_perslid_key = pf.prs_perslid_key
           AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
           AND rrr.res_rsv_ruimte_key = vg.res_rsv_ruimte_key
           AND rrr.res_rsv_ruimte_key = bp.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_key = bp_extra.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_key = gs.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_key = cdk.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_key = bnk.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_key =
               projmngr_evenement.res_rsv_ruimte_key(+)
           AND rrr.res_rsv_ruimte_key = kn_bes_cateraar.res_rsv_ruimte_key(+);

CREATE OR REPLACE VIEW pnbr_v_rap_dagstaat_cat
(
    fclt_f_datum,
    dag,
    dagvweek,
    maand,
    jaar,
    nummer,
    tijdsort,
    ruimte_van,
    ruimte_tot,
    bezoekers,
    activiteit,
    omschrijving,
    opmerking,
    ruimte,
    verdieping,
    fclt_f_locatie,
    melder,
    telefoon,
    kostenplaats,
    begrpost,
    bestelnr,
    opstelling,
    aantalcatering,
    v_van,
    v_tot,
    v_omschrijving,
    v_aantal,
    v_prijs,
    v_totaal,
    gs,
    cdk,
    res_besnr_cateraar,
    lm_mut,
    lm_del
)
AS
    SELECT    TO_CHAR (TO_DATE (fclt_d_datum, 'dd-mm-yyyy'), 'yyyy-mm-dd')
           || ' ('
           || dagvweek
           || ')',
           dag,
           dagvweek,
           maand,
           jaar,
           nummer,
           tijdsort,
           ruimte_van,
           ruimte_tot,
           bezoekers,
           activiteit,
           omschrijving,
           opmerking,
           ruimte,
           verdieping,
           locatie,
           melder,
           telefoon,
           kostenplaats,
           begrpost,
           bestelnr,
           opstelling,
           aantalcatering,
           v_van,
           v_tot,
           v_omschrijving,
           v_aantal,
           v_prijs,
           v_totaal,
           gs,
           cdk,
           res_besnr_cateraar,
           LM_MUT,
           LM_DEL
      FROM pnbr_v_rap_dagstaat_bron
     WHERE TO_DATE (fclt_d_datum, 'dd-mm-yyyy') BETWEEN TRUNC (SYSDATE - 5)
                                                    AND TRUNC (SYSDATE + 10);

CREATE OR REPLACE VIEW pnbr_v_rap_dagstaat_even
(
    fclt_d_datum,
    dag,
    dagvweek,
    maand,
    jaar,
    nummer,
    tijdsort,
    ruimte_van,
    ruimte_tot,
    bezoekers,
    activiteit,
    omschrijving,
    opmerking,
    ruimte,
    verdieping,
    melder,
    telefoon,
    kostenplaats,
    begrpost,
    bestelnr,
    opstelling,
    v_van,
    v_tot,
    v_omschrijving,
    v_aantal,
    v_prijs,
    v_totaal,
    gs,
    cdk,
    res_besnr_cateraar,
    projectmgr_evenement
)
AS
    SELECT fclt_d_datum,
           dag,
           dagvweek,
           maand,
           jaar,
           nummer,
           tijdsort,
           ruimte_van,
           ruimte_tot,
           bezoekers,
           activiteit,
           omschrijving,
           opmerking,
           ruimte,
           verdieping,
           melder,
           telefoon,
           kostenplaats,
           begrpost,
           bestelnr,
           opstelling,
           v_van,
           v_tot,
           v_omschrijving,
           v_aantal,
           v_prijs,
           v_totaal,
           gs,
           cdk,
           res_besnr_cateraar,
           projectmgr_evenement
      FROM pnbr_v_rap_dagstaat_bron b
     WHERE    activiteit = 'Evenement'
           OR EXISTS -- of reserveringen met catering die de klant niet zelf mag bestellen
                  (SELECT res_rsv_ruimte_key
                     FROM pnbr_v_rap_dagstaat_bron b2, ins_tab_discipline d
                    WHERE     b2.res_discipline_key IS NOT NULL
                          AND d.ins_discipline_min_level = 2
                          AND b2.res_discipline_key = d.ins_discipline_key
                          AND b.res_rsv_ruimte_key = b2.res_rsv_ruimte_key);

-- Rapport om status van reserveringen op te laten halen door SmartSigns.
CREATE OR REPLACE VIEW pnbr_v_api_reserveringen
(
    van,
    tot,
    key,
    resid,
    locatiecode,
    gebouwcode,
    fclt_3d_gebouw_key,
    verdiepingcode,
    ruimtecode,
    ruimtenaam,
    rvck_vnr,
    voorziening,
    aantal,
    prijs,
    btw,
    act_oms,
    srtact_oms,
    bezoekers,
    fo_status_key,
    fo_status,
    bo_status_key,
    bo_status,
    contact,
    HOST,
    kostenplaats,
    resruimtekey,
    algruimtekey,
    algruimtenr,
    omschrijving,
    opmerking,
    dagstaat,
    vroegt_beeindigen
)
AS
   SELECT x.van                                                                            van_datumtijd,
       x.tot                                                                            tot_datumtijd,
       x.res_rsv_ruimte_key                                                             res_key,
       TO_CHAR (x.res_reservering_key) || '/' || TO_CHAR (x.res_rsv_ruimte_volgnr)      res_id,
       rvck.loc_code,
       rvck.geb_code,
       rvck.geb_key,
       rvck.ver_code,
       rvck.ruimtenr,
       rvck.ruimtenaam,
       rvck.vnr,
       rvck.voorziening,
       rvck.aantal,
       ROUND (COALESCE (rvck.res_rsv_prijs, rvck.aantal * rvck.ps), 2)                  prijs,
       rvck.btw,
       x.res_activiteit_omschrijving,
       x.res_srtactiviteit_omschrijving,
       x.res_rsv_ruimte_bezoekers                                                       bezoekers,
       x.fo_status_key,
       DECODE (x.fo_status_key,  1, 'RESOPT',  2, 'RESDEF',  3, 'RESBLK',  'RESDEL')    fo_status,
       x.bo_status_key,
       x.bo_status_oms,
       x.contact_naam,
       x.host_naam,
       x.kp_nr,
       rvck.res_ruimte_key,
       rvck.alg_ruimte_key,
       rvck.alg_ruimte_nr,
       x.res_rsv_ruimte_omschrijving                                                    oms,
       x.res_rsv_ruimte_opmerking                                                       opm,
       DECODE (
           x.contact_key,
           30064, 'Ja',
           DECODE (
               COALESCE (
                   (SELECT res_kenmerkreservering_waarde
                      FROM res_kenmerkwaarde kw, res_kenmerk k
                     WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                           AND k.res_srtkenmerk_key = 1
                           AND kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key),
                   '1'),
               '1', 'Nee',
               'Ja'))                                                                   dagstaat,
       CASE WHEN x.vt_eindigen = 1 THEN 'Nee' ELSE 'Ja' END                             vroegt_beeindigen
  FROM (SELECT rr.res_rsv_ruimte_key,
               rr.res_reservering_key,
               rr.res_rsv_ruimte_volgnr,
               a.res_activiteit_key,
               a.res_activiteit_omschrijving,
               sa.res_srtactiviteit_key,
               sa.res_srtactiviteit_omschrijving,
               rr.res_rsv_ruimte_van               van,
               rr.res_rsv_ruimte_tot               tot,
               rr.res_rsv_ruimte_bezoekers,
               fs.res_status_fo_key                fo_status_key,
               fs.res_status_fo_omschrijving       fo_status_oms,
               bs.res_status_bo_key                bo_status_key,
               bs.res_status_bo_omschrijving       bo_status_oms,
               pfc.prs_perslid_key                 contact_key,
               pfc.prs_perslid_naam_full           contact_naam,
               pfh.prs_perslid_key                 host_key,
               pfh.prs_perslid_naam_full           host_naam,
               k.prs_kostenplaats_nr               kp_nr,
               k.prs_kostenplaats_omschrijving     kp_oms,
               rr.res_rsv_ruimte_omschrijving,
               rr.res_rsv_ruimte_opmerking,
               vte.vt_eindigen
          FROM res_v_aanwezigrsv_ruimte     rr,                                   -- Alleen actieve!
               res_activiteit               a,
               res_srtactiviteit            sa,
               res_status_fo                fs,
               res_status_bo                bs,
               prs_v_perslid_fullnames_all  pfc,
               prs_v_perslid_fullnames_all  pfh,
               prs_kostenplaats             k,
               (SELECT kw.res_rsv_ruimte_key, kw.res_kenmerkreservering_waarde vt_eindigen
                  FROM res_kenmerk k, res_kenmerkwaarde kw
                 WHERE     kw.res_kenmerk_key = k.res_kenmerk_key
                       AND k.res_kenmerk_key IN (961, 962)
                       AND kw.res_kenmerkwaarde_verwijder IS NULL) vte
         WHERE     rr.res_rsv_ruimte_tot > TRUNC (SYSDATE, 'IW') - 7
               AND rr.res_ruimte_opstel_key IS NOT NULL               -- Alleen ruimtereserveringen!
               AND rr.res_activiteit_key = a.res_activiteit_key
               AND a.res_activiteit_verwijder IS NULL
               AND a.res_srtactiviteit_key = sa.res_srtactiviteit_key
               AND sa.res_srtactiviteit_verwijder IS NULL
               AND rr.res_status_fo_key = fs.res_status_fo_key
               AND rr.res_status_bo_key = bs.res_status_bo_key
               AND rr.res_rsv_ruimte_dirtlevel = 0
               AND rr.res_rsv_ruimte_contact_key = pfc.prs_perslid_key
               AND rr.res_rsv_ruimte_host_key = pfh.prs_perslid_key
               AND rr.res_rsv_ruimte_key = vte.res_rsv_ruimte_key(+)
               AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)) x
       LEFT JOIN
       (SELECT rrr.res_rsv_ruimte_key,
               l.alg_locatie_code                                                    loc_code,
               g.alg_gebouw_code                                                     geb_code,
               g.alg_gebouw_key                                                      geb_key,
               v.alg_verdieping_code                                                 ver_code,
               r.alg_ruimte_nr                                                       ruimtenr,
               r.alg_ruimte_key                                                      alg_ruimte_key,
               rr.res_ruimte_key                                                     res_ruimte_key,
               r.alg_ruimte_nr,
               rr.res_ruimte_nr                                                      ruimtenaam,
               TO_NUMBER (NULL)                                                      vnr,
               ro.res_opstelling_omschrijving                                        voorziening,
               ROUND ((rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24, 2)     aantal, -- Duur in uren
               rrr.res_rsv_ruimte_prijs                                              res_rsv_prijs,
               rr.res_ruimte_prijs                                                   ps, -- Uur-tarief
               rr.res_ruimte_prijs_ochtend                                           po,
               rr.res_ruimte_prijs_middag                                            pm,
               rr.res_ruimte_prijs_avond                                             pa,
               NULL                                                                  btw,
               TO_NUMBER (NULL)                                                      k_key,
               NULL                                                                  k_naam,
               NULL                                                                  k_type,
               NULL                                                                  k_waarde
          FROM res_v_aanwezigrsv_ruimte  rrr,
               res_ruimte_opstelling     rro,
               res_ruimte                rr,
               res_opstelling            ro,
               (  SELECT res_ruimte_key, MAX (alg_ruimte_key) alg_ruimte_key, COUNT (*) aantal
                    FROM res_alg_ruimte
                   WHERE res_alg_ruimte_verwijder IS NULL
                GROUP BY res_ruimte_key) rar,
               alg_ruimte                r,
               alg_verdieping            v,
               alg_gebouw                g,
               alg_locatie               l
         WHERE     rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
               AND rro.res_ruimte_key = rr.res_ruimte_key
               AND rro.res_opstelling_key = ro.res_opstelling_key
               AND rr.res_ruimte_key = rar.res_ruimte_key(+)
               AND rar.alg_ruimte_key = r.alg_ruimte_key(+)
               AND r.alg_verdieping_key = v.alg_verdieping_key(+)
               AND v.alg_gebouw_key = g.alg_gebouw_key(+)
               AND g.alg_locatie_key = l.alg_locatie_key(+)) rvck
           ON x.res_rsv_ruimte_key = rvck.res_rsv_ruimte_key;

CREATE OR REPLACE VIEW pnbr_v_rap_ideeenbus
(
    melding,
    datum,
    fclt_f_korte_omschrijving,
    fclt_f_status,
    idee,
    financieel,
    immaterieel,
    afhandeling
)
AS
    SELECT m.mld_melding_key,
           TO_CHAR (mld_melding_datum, 'dd-mm-yyyy'),
           mld_kenmerkmelding_waarde
               korteomschrijving,
           DECODE (
               (SELECT mld_kenmerkmelding_waarde
                  FROM mld_kenmerkmelding km
                 WHERE     km.mld_kenmerk_key = 3261
                       AND km.mld_melding_key = m.mld_melding_key),
               1542, 'Afgewezen',
               1541, 'Gehonoreerd',
               'In behandeling'),
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     km.mld_kenmerk_key = 262
                   AND km.mld_melding_key = m.mld_melding_key)
               idee,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     km.mld_kenmerk_key = 263
                   AND km.mld_melding_key = m.mld_melding_key)
               financieel,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     km.mld_kenmerk_key = 264
                   AND km.mld_melding_key = m.mld_melding_key)
               immaterieel,
           mld_melding_opmerking
      FROM mld_melding m, mld_kenmerkmelding km
     WHERE     km.mld_kenmerk_key = 261
           AND km.mld_melding_key = m.mld_melding_key
           AND mld_stdmelding_key = 262
           AND mld_melding_status <> 1;

-- rapport om inzage te krijgen in de bezittingen en of ze functioneel beheerders zijn,
-- van medewerkers die uitdienst gaan.

CREATE OR REPLACE VIEW pnbr_v_rap_uitdienst_objecten
(
    uitdienst,
    naam,
    aantal,
    objecten,
    beheer,
    applicaties
)
AS
    SELECT TO_DATE (prs_kenmerklink_waarde, 'dd-mm-yyyy'),
           pf.prs_perslid_naam_full,
           d.aantal,
           d.ins_deel_omschrijving,
           f.aantal,
           f.ins_deel_omschrijving
      FROM prs_kenmerklink          kl,
           prs_perslid              p,
           prs_v_perslid_fullnames  pf,
           (  SELECT COUNT (ins_deel_key)
                         aantal,
                     LISTAGG (
                         CASE
                             WHEN aantal < 40 THEN ins_deel_omschrijving
                             ELSE '.'
                         END,
                         ',')
                     WITHIN GROUP (ORDER BY ins_deel_omschrijving)
                         AS ins_deel_omschrijving,
                     d.ins_alg_ruimte_key
                         prs_perslid_key
                FROM ins_deel d,
                     (  SELECT ins_alg_ruimte_key, COUNT (*) aantal
                          FROM ins_deel
                         WHERE     ins_alg_ruimte_type = 'P'
                               AND ins_deel_verwijder IS NULL
                      GROUP BY ins_alg_ruimte_key) da
               WHERE     ins_alg_ruimte_type = 'P'
                     AND ins_deel_verwijder IS NULL
                     AND d.ins_alg_ruimte_key = da.ins_alg_ruimte_key
                     AND COALESCE (ins_deel_vervaldatum, SYSDATE + 1) > SYSDATE
            GROUP BY d.ins_alg_ruimte_key, da.aantal) d,
           (  SELECT COUNT (d.ins_deel_key)
                         aantal,
                     LISTAGG (ins_deel_opmerking, ',')
                         WITHIN GROUP (ORDER BY ins_deel_opmerking)
                         AS ins_deel_omschrijving,
                     fac.safe_to_number (ins_kenmerkdeel_waarde)
                         prs_perslid_key
                FROM ins_kenmerkdeel kd, ins_kenmerk k, ins_deel d
               WHERE     kd.ins_kenmerk_key = k.ins_kenmerk_key
                     AND k.ins_srtkenmerk_key IN (549, 550, 551) -- functioneel beheerder altx
                     AND kd.ins_kenmerkdeel_verwijder IS NULL
                     AND d.ins_deel_key = kd.ins_deel_key
                     AND d.ins_deel_verwijder IS NULL
            GROUP BY fac.safe_to_number (ins_kenmerkdeel_waarde)) f
     WHERE     kl.prs_kenmerklink_verwijder IS NULL
           AND kl.prs_link_key = p.prs_perslid_key
           AND kl.prs_kenmerk_key = 1020
           AND p.prs_perslid_verwijder IS NULL
           AND p.prs_perslid_key = d.prs_perslid_key(+)
           AND p.prs_perslid_key = pf.prs_perslid_key
           AND p.prs_perslid_key = f.prs_perslid_key(+);

CREATE OR REPLACE VIEW pnbr_v_noti_resreminder
(
    code,
    sender,
    receiver,
    text,
    key,
    xkey
)
AS
    SELECT code,
           sender,
           receiver,
           'Herinnering - ' || REPLACE (text, '  ', ' '),
           key,
           xkey
      FROM fac_v_noti_resreminder n, prs_perslid p
     WHERE     n.receiver = p.prs_perslid_key
           AND prs_perslid_naam NOT LIKE 'INACTIEF:%';

--- PNBR#77939 Reservering herinnering
--- Indien contact en host 2 verschillende personen zijn dan ook host een reminder sturen
CREATE OR REPLACE FORCE VIEW PNBR_V_NOTI_RESREMINDER_HOST
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    XKEY
)
AS
    SELECT 'RESINF'                        code,
           NULL                            sender,
           rsvr.res_rsv_ruimte_host_key    receiver,
              'Herinnering - '
           || REPLACE (
                     'Reservering '
                  || res.res_reservering_key
                  || ': U heeft op '
                  || TO_CHAR (rsvr.res_rsv_ruimte_van, 'DD-MM')
                  || ' van '
                  || TO_CHAR (rsvr.res_rsv_ruimte_van, 'HH24:MI')
                  || ' tot '
                  || TO_CHAR (rsvr.res_rsv_ruimte_tot, 'HH24:MI')
                  || ' ruimte '
                  || r.res_ruimte_nr
                  || ' gereserveerd.',
                  '  ',
                  ' ')                     text,
           res.res_reservering_key         key,
           rsvr.res_rsv_ruimte_key         xkey
      FROM res_v_aanwezigreservering  res,
           res_v_aanwezigrsv_ruimte   rsvr,
           res_ruimte_opstelling      opst,
           res_disc_params            rdp,
           res_ruimte                 r,
           prs_perslid                p
     WHERE     r.res_discipline_key = rdp.res_ins_discipline_key
           AND rdp.res_disc_params_noti_dagen IS NOT NULL
           AND res.res_reservering_key = rsvr.res_reservering_key
           AND opst.res_ruimte_opstel_key = rsvr.res_ruimte_opstel_key
           AND opst.res_ruimte_key = r.res_ruimte_key
           AND rsvr.res_status_fo_key <= 5
           AND rsvr.res_rsv_ruimte_van BETWEEN fac.datumtijdplusuitvoertijd (
                                                   SYSDATE,
                                                   res_disc_params_noti_dagen,
                                                   'DAGEN')
                                           AND fac.datumtijdplusuitvoertijd (
                                                   SYSDATE,
                                                     res_disc_params_noti_dagen
                                                   + 1,
                                                   'DAGEN')
           AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
           AND rsvr.res_rsv_ruimte_van >= SYSDATE
           AND p.prs_perslid_key = rsvr.res_rsv_ruimte_host_key
           AND prs_perslid_naam NOT LIKE 'INACTIEF:%'
           AND rsvr.res_rsv_ruimte_host_key <>
               rsvr.res_rsv_ruimte_contact_key
    UNION ALL
      SELECT 'RESINF',
             NULL,
             res_rsv_ruimte_host_key,
                'Herinnering - '
             || REPLACE (
                       'Reservering '
                    || res_reservering_key
                    || ': U heeft op '
                    || TO_CHAR (MIN (van), 'dd-mm')
                    || DECODE (
                           MIN (van),
                           MAX (tot), ' om ' || TO_CHAR (MIN (van), 'hh24:mi'),
                              ' van '
                           || TO_CHAR (MIN (van), 'hh24:mi')
                           || ' tot '
                           || TO_CHAR (MAX (tot), 'hh24:mi'))
                    || ' in ruimte ('
                    || (SELECT    alg_gebouw_code
                               || '-'
                               || alg_verdieping_code
                               || '-'
                               || alg_ruimte_nr
                          FROM alg_v_onroerendgoed_gegevens arg
                         WHERE arg.alg_ruimte_key = ruimte_key)
                    || ') '
                    || COUNT (res_reservering_key)
                    || ' voorziening(en) gereserveerd.',
                    '  ',
                    ' ')    text,
             res_reservering_key,
             res_rsv_ruimte_key
        FROM (SELECT rsvr.res_rsv_ruimte_contact_key,
                     rsvr.res_rsv_ruimte_host_key,
                     res.res_reservering_key,
                     rsvd.res_rsv_deel_van     van,
                     rsvd.res_rsv_deel_tot     tot,
                     rsvr.res_rsv_ruimte_key,
                     rsvr.alg_ruimte_key       ruimte_key
                FROM res_v_aanwezigreservering res,
                     res_v_aanwezigrsv_ruimte rsvr,
                     res_disc_params          rdp,
                     res_rsv_deel             rsvd,
                     res_deel                 rd,
                     prs_perslid              p
               WHERE     rsvd.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
                     AND rd.res_deel_key = rsvd.res_deel_key
                     AND rd.res_discipline_key = rdp.res_ins_discipline_key
                     AND rdp.res_disc_params_noti_dagen IS NOT NULL
                     AND res.res_reservering_key = rsvr.res_reservering_key
                     AND rsvr.res_ruimte_opstel_key IS NULL
                     AND rsvr.res_status_fo_key <= 5
                     AND rsvd.res_rsv_deel_verwijder IS NULL
                     AND rsvd.res_rsv_deel_van BETWEEN fac.datumtijdplusuitvoertijd (
                                                           SYSDATE,
                                                           res_disc_params_noti_dagen,
                                                           'DAGEN')
                                                   AND fac.datumtijdplusuitvoertijd (
                                                           SYSDATE,
                                                             res_disc_params_noti_dagen
                                                           + 1,
                                                           'DAGEN')
                     AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
                     AND rsvd.res_rsv_deel_van >= SYSDATE
                     AND p.prs_perslid_key = rsvr.res_rsv_ruimte_host_key
                     AND prs_perslid_naam NOT LIKE 'INACTIEF:%'
                     AND rsvr.res_rsv_ruimte_host_key <>
                         rsvr.res_rsv_ruimte_contact_key
              UNION ALL
              SELECT rsvr.res_rsv_ruimte_contact_key,
                     rsvr.res_rsv_ruimte_host_key,
                     res.res_reservering_key,
                     rsva.res_rsv_artikel_levering     van,
                     rsva.res_rsv_artikel_levering     tot,
                     rsvr.res_rsv_ruimte_key,
                     rsvr.alg_ruimte_key               ruimte_key
                FROM res_v_aanwezigreservering res,
                     res_v_aanwezigrsv_ruimte rsvr,
                     res_disc_params          rdp,
                     res_rsv_artikel          rsva,
                     res_artikel              ra,
                     prs_perslid              p
               WHERE     rsva.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
                     AND ra.res_discipline_key = rdp.res_ins_discipline_key
                     AND rsva.res_artikel_key = ra.res_artikel_key
                     AND rdp.res_disc_params_noti_dagen IS NOT NULL
                     AND res.res_reservering_key = rsvr.res_reservering_key
                     AND rsvr.res_ruimte_opstel_key IS NULL
                     AND rsvr.res_status_fo_key <= 5
                     AND rsva.res_rsv_artikel_verwijder IS NULL
                     AND rsva.res_rsv_artikel_levering BETWEEN fac.datumtijdplusuitvoertijd (
                                                                   SYSDATE,
                                                                   res_disc_params_noti_dagen,
                                                                   'DAGEN')
                                                           AND fac.datumtijdplusuitvoertijd (
                                                                   SYSDATE,
                                                                     res_disc_params_noti_dagen
                                                                   + 1,
                                                                   'DAGEN')
                     AND fac.getweekdaynum (SYSDATE) NOT IN (1, 7)
                     AND rsva.res_rsv_artikel_levering >= SYSDATE
                     AND p.prs_perslid_key = rsvr.res_rsv_ruimte_host_key
                     AND prs_perslid_naam NOT LIKE 'INACTIEF:%'
                     AND rsvr.res_rsv_ruimte_host_key <>
                         rsvr.res_rsv_ruimte_contact_key)
    GROUP BY res_rsv_ruimte_contact_key,
             res_rsv_ruimte_host_key,
             res_reservering_key,
             res_rsv_ruimte_key,
             ruimte_key;

-- notificatie naar klant die niet binnen 7 dagen op een vraag heeft geantwoord.
-- PNBR#82100 Herinnering e-mail van "Reactie aan KLANT vragen", deze moet binnen 2 dagen
CREATE OR REPLACE VIEW pnbr_v_noti_mld_fenote_rem
(
    code,
    sender,
    receiver,
    text,
    key,
    xkey
)
AS
    SELECT 'MLDNOT',
           NULL,
           prs_perslid_key,
           'Herinnering: vraag over melding M' || mld_melding_key,
           mld_melding_key,
           NULL
      FROM (  SELECT m.mld_melding_key,
                     MAX (n.mld_melding_note_aanmaak)
                         mld_melding_note_aanmaak,
                     m.prs_perslid_key
                FROM mld_melding m, mld_melding_note n
               WHERE     mld_melding_actiecode = 2
                     AND mld_melding_note_flag = 1
                     AND n.mld_melding_key = m.mld_melding_key
                     AND m.mld_stdmelding_key NOT in (14781)
                     AND mld_melding_status IN (0,
                                                2,
                                                3,
                                                4,
                                                7,
                                                99)
            GROUP BY m.mld_melding_key, m.prs_perslid_key)
     WHERE TRUNC (mld_melding_note_aanmaak) = TRUNC (SYSDATE) - 7
     UNION ALL
     SELECT 'MLDNOT',
           NULL,
           prs_perslid_key,
           'Herinnering: vraag over melding M' || mld_melding_key,
           mld_melding_key,
           NULL
      FROM (  SELECT m.mld_melding_key,
                     MAX (n.mld_melding_note_aanmaak)
                         mld_melding_note_aanmaak,
                     m.prs_perslid_key
                FROM mld_melding m, mld_melding_note n
               WHERE     mld_melding_actiecode = 2
                     AND mld_melding_note_flag = 1
                     AND n.mld_melding_key = m.mld_melding_key
                     AND m.mld_stdmelding_key = 14781
                     AND mld_melding_status IN (0,
                                                2,
                                                3,
                                                4,
                                                7,
                                                99)
            GROUP BY m.mld_melding_key, m.prs_perslid_key)
     WHERE TRUNC (mld_melding_note_aanmaak) = TRUNC (SYSDATE) - 2;

CREATE OR REPLACE VIEW pnbr_v_rap_mld_fenote
(
    melding,
    melder,
    standaardmelding,
    behandelgroep,
    omschrijving
)
AS
    SELECT 'M' || mld_melding_key,
           pf.prs_perslid_naam_full,
           std.mld_stdmelding_omschrijving,
           d.ins_discipline_omschrijving,
           m.mld_melding_omschrijving
      FROM prs_v_perslid_fullnames  pf,
           mld_stdmelding           std,
           ins_tab_discipline       d,
           (  SELECT m.mld_melding_key,
                     m.mld_stdmelding_key,
                     TO_CHAR(SUBSTR(m.mld_melding_omschrijving,1,4000)) mld_melding_omschrijving,
                     MAX (n.mld_melding_note_aanmaak)
                         mld_melding_note_aanmaak,
                     m.prs_perslid_key
                FROM mld_melding m, mld_melding_note n
               WHERE     mld_melding_actiecode = 2
                     AND mld_melding_note_flag = 1
                     AND n.mld_melding_key = m.mld_melding_key
                     AND mld_melding_status IN (0,
                                                2,
                                                3,
                                                4,
                                                7,
                                                99)
            GROUP BY m.mld_melding_key,
                     m.prs_perslid_key,
                     mld_stdmelding_key,
                     TO_CHAR(SUBSTR(m.mld_melding_omschrijving,1,4000))) m
     WHERE     mld_melding_note_aanmaak < SYSDATE - 14
           AND m.prs_perslid_key = pf.prs_perslid_key
           AND m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = d.ins_discipline_key;

-- PNBR#28111 Rapportage met kunstobjecten inclusief foto
-- Overige keys zijn kenmerken voor deze objecten die dezelfde naam hebben als het veld.

CREATE OR REPLACE VIEW PNBR_V_RAP_KUNST
(
    FCLT_F_OBJECT,
    HTML_INS_DEEL_KEY,
    FCLT_F_KUNSTENAAR,
    FCLT_F_TITEL,
    THEMA,
    TECHNIEK_KUNST,
    MATERIAAL,
    DATERING,
    HOOGTE,
    BREEDTE,
    DIEPTE,
    HXBXD_INCL_LIJST,
    EIGENAAR,
    ACHTERGRONDINFO,
    LAATSTE_TAXATIEDATUM,
    GETAXEERD_DOOR,
    TAXATIEWAARDE,
    VERZEKERDE_WAARDE,
    RESTAURATIE_ONDERHOUD,
    HTML_FOTO
)
AS
      SELECT ins_deel_omschrijving
                 id,
                '<a class="details" onclick=''FcltMgr.openDetail("'
             || 'appl/ins/ins_deel.asp?urole=bo&'
             || 'ins_key= '
             || ins_deel_key
             || '")''>'
             || HTF.escape_sc (ins_deel_omschrijving)
             || '</a>',
             (SELECT fac_usrdata_omschr
                FROM ins_kenmerkdeel  ikd,
                     ins_kenmerk      ik,
                     ins_srtkenmerk   isk,
                     fac_kenmerkdomein kd,
                     fac_usrdata      ud
               WHERE     ikd.ins_kenmerk_key = 3201
                     AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                     AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                     AND kd.fac_kenmerkdomein_key = isk.fac_kenmerkdomein_key
                     AND ud.fac_usrtab_key = kd.fac_usrtab_key
                     AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Naam_kunstenaar,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3221
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Titel,
             DECODE (
                 (SELECT ins_kenmerkdeel_waarde
                    FROM ins_kenmerkdeel ikd
                   WHERE     ins_kenmerk_key = 3242
                         AND d.ins_deel_key = ikd.ins_deel_key),
                 NULL, (SELECT fac_usrdata_omschr
                          FROM ins_kenmerkdeel  ikd,
                               ins_kenmerk      ik,
                               ins_srtkenmerk   isk,
                               fac_kenmerkdomein kd,
                               fac_usrdata      ud
                         WHERE     ikd.ins_kenmerk_key = 3241
                               AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                               AND ik.ins_srtkenmerk_key =
                                   isk.ins_srtkenmerk_key
                               AND kd.fac_kenmerkdomein_key =
                                   isk.fac_kenmerkdomein_key
                               AND ud.fac_usrtab_key = kd.fac_usrtab_key
                               AND ikd.ins_kenmerkdeel_waarde =
                                   ud.fac_usrdata_key
                               AND d.ins_deel_key = ikd.ins_deel_key),
                    (SELECT fac_usrdata_omschr
                       FROM ins_kenmerkdeel  ikd,
                            ins_kenmerk      ik,
                            ins_srtkenmerk   isk,
                            fac_kenmerkdomein kd,
                            fac_usrdata      ud
                      WHERE     ikd.ins_kenmerk_key = 3241
                            AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                            AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                            AND kd.fac_kenmerkdomein_key =
                                isk.fac_kenmerkdomein_key
                            AND ud.fac_usrtab_key = kd.fac_usrtab_key
                            AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                            AND d.ins_deel_key = ikd.ins_deel_key)
                 || ' / '
                 || (SELECT ins_kenmerkdeel_waarde
                       FROM ins_kenmerkdeel ikd
                      WHERE     ins_kenmerk_key = 3242
                            AND d.ins_deel_key = ikd.ins_deel_key))
                 thema,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3261
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 techniek_kunst,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3281
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Materiaal,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3282
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 datering,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3301
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Hoogte,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3302
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Breedte,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3303
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Diepte,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3321
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 hxbxd_incl_lijst,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3322
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Eigenaar,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3341
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 achtergrondinfo,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3361
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 laatste_taxatiedatum,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3362
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 getaxeerd_door,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3363
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 Taxatiewaarde,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3381
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 verzekerde_waarde,
             (SELECT ins_kenmerkdeel_waarde
                FROM ins_kenmerkdeel ikd
               WHERE     ins_kenmerk_key = 3401
                     AND d.ins_deel_key = ikd.ins_deel_key)
                 restauratie_onderhoud,
             DECODE (
                 (SELECT ins_kenmerkdeel_waarde
                    FROM ins_kenmerkdeel ikd
                   WHERE     ins_kenmerk_key = 4321
                         AND d.ins_deel_key = ikd.ins_deel_key),
                 NULL, 'Geen foto',
                    '<img  src="https://pnbr.facilitor.nl/api2/objects/'
                 || ins_deel_key
                 || '/attachments/4321/'
                 || (SELECT ins_kenmerkdeel_waarde
                       FROM ins_kenmerkdeel ikd
                      WHERE     ins_kenmerk_key = 4321
                            AND d.ins_deel_key = ikd.ins_deel_key)
                 || '" height="128">')
                 Foto
        FROM ins_deel d
       WHERE ins_srtdeel_key = 1082 AND ins_deel_verwijder IS NULL
    ORDER BY 3, 1;

-- PNBR#31907: Objectwijzigingen (alle) en ook direct bovenstaande rapportage
-- daarmee in lijn gebracht!

CREATE OR REPLACE VIEW pnbr_v_rap_objectwijzigingen
(
    hide_f_id,
    html_identificatie,
    beschrijving,
    fclt_f_discipline,
    fclt_f_groep,
    mutatie,
    fclt_d_mutatiedatum,
    gemuteerd_door
)
AS
      SELECT d.ins_deel_omschrijving,
                '<a class="details" onclick=''FcltMgr.openDetail("appl/ins/ins_deel.asp?urole=bo&'
             || 'ins_key='
             || d.ins_deel_key
             || '")''>'
             || d.ins_deel_omschrijving
             || '</a>'
                 identificatie,
             d.ins_deel_opmerking
                 beschrijving,
             td.ins_discipline_omschrijving
                 discipline,
             sd.ins_srtdeel_omschrijving
                 groep,
                DECODE (
                    d.ins_deel_verwijder,
                    NULL, lcl.x ('fac_srtnotificatie_oms',
                                 sn.fac_srtnotificatie_key,
                                 sn.fac_srtnotificatie_oms),
                    'Object verwijderd')
             || DECODE (
                    sn.fac_srtnotificatie_code,
                    'INSUPD', ' (' || COUNT (sn.fac_srtnotificatie_oms) || ')')
                 mutatie,
             TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy')
                 mutatiedatum,
             p.prs_perslid_naam_friendly
        FROM fac_tracking      t,
             fac_srtnotificatie sn,
             ins_deel          d,
             ins_srtdeel       sd,
             ins_srtgroep      sg,
             ins_discipline    td,
             prs_v_perslid_fullnames_all p
       WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
             AND sn.fac_srtnotificatie_xmlnode = 'deel'
             AND t.fac_tracking_refkey = 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 = td.ins_discipline_key
             AND p.prs_perslid_key = t.prs_perslid_key
    GROUP BY d.ins_deel_omschrijving,
             d.ins_deel_key,
             d.ins_deel_opmerking,
             td.ins_discipline_omschrijving,
             sd.ins_srtdeel_omschrijving,
             d.ins_deel_verwijder,
             sn.fac_srtnotificatie_oms,
             sn.fac_srtnotificatie_code,
             sn.fac_srtnotificatie_key,
             p.prs_perslid_naam_friendly,
             t.fac_tracking_datum;

CREATE OR REPLACE VIEW pnbr_v_rap_open_cmdb_status
(
    hide_f_volgorde,
    html_melding,
    html_wijziging,
    datum,
    melding_status,
    klasse,
    status,
    domein,
    laatste_update,
    omschrijving_wijziging,
    gewenste_opleverdat,
    verwachte_oplostijd
)
AS
    SELECT TO_CHAR (mld_melding_datum, 'yyyymmddhh24mi'),
              '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
           || 'mld_key='
           || w.start_key
           || '")''>'
           || w.start_key
           || '</a>',
              '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
           || 'mld_key='
           || m.mld_melding_key
           || '")''>'
           || m.mld_melding_key
           || '</a>',
           m.mld_melding_datum,
           (SELECT mld_statuses_omschrijving
              FROM mld_statuses
             WHERE mld_statuses_key = m.mld_melding_status)
               melding_status,
           (SELECT fac_usrdata_code
              FROM mld_kenmerkmelding km2, mld_kenmerk k, fac_usrdata ud
             WHERE     km2.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = 3565         -- Wijzigingsklasse
                   AND km2.mld_melding_key = m.mld_melding_key
                   AND fac.safe_to_number (km2.mld_kenmerkmelding_waarde) =
                       ud.fac_usrdata_key)
               klasse,
           (SELECT fac_usrdata_omschr
              FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
             WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = 3621                   -- status
                   AND ud.fac_usrdata_key =
                       fac.safe_to_number (mld_kenmerkmelding_waarde)
                   AND km.mld_melding_key = m.mld_melding_key)
               status,
           (SELECT ins_discipline_omschrijving
              FROM ins_tab_discipline d, mld_stdmelding std
             WHERE     d.ins_discipline_key = std.mld_ins_discipline_key
                   AND std.mld_stdmelding_key = m.mld_stdmelding_key)
               domein,
           (SELECT MAX (fac_tracking_datum)
              FROM (SELECT fac_tracking_datum, fac_tracking_refkey
                      FROM fac_tracking t
                     WHERE (   t.fac_tracking_oms LIKE
                                   '%' || 'Status wijzigingsbeheer:' || '%'
                            OR t.fac_srtnotificatie_key = 161)
                    UNION ALL
                    SELECT mld_melding_note_aanmaak, mld_melding_key
                      FROM mld_melding_note mn) grp
             WHERE grp.fac_tracking_refkey = m.mld_melding_key)
               laatstestatwijz,
           m.mld_melding_omschrijving,
           (SELECT fac.safe_to_date (mld_kenmerkmelding_waarde, 'dd-mm-yyyy')
              FROM mld_kenmerkmelding km, mld_kenmerk k
             WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = 3568    -- gewenste opleverdatum
                   AND km.mld_melding_key = m.mld_melding_key)
               gewenste_opleverdat,
           m.mld_melding_einddatum
               verwachte_oplostijd
      FROM (SELECT m.mld_melding_key      start_key,
                   m2.mld_melding_key     vervolg_key
              FROM (SELECT mld_kenmerkmelding_waarde, km.mld_melding_key
                      FROM mld_kenmerkmelding km, mld_kenmerk k2
                     WHERE     km.mld_kenmerk_key = k2.mld_kenmerk_key
                           AND k2.mld_srtkenmerk_key = 3601) km2, -- wijziging
                   mld_melding         m,
                   mld_melding         m2,
                   mld_stdmelding      std,
                   ins_tab_discipline  d
             WHERE     m.mld_melding_key = km2.mld_melding_key(+)
                   AND m2.mld_stdmelding_key = std.mld_stdmelding_key
                   AND std.mld_ins_discipline_key = d.ins_discipline_key
                   AND ins_srtdiscipline_key = 21       -- wijzigingsverzoeken
                   AND m2.mld_melding_start_key = m.mld_melding_key
                   AND m2.mld_melding_status NOT IN (1, 5, 6)
            UNION
            SELECT NULL start_key, m2.mld_melding_key vervolg_key
              FROM mld_melding m2, mld_stdmelding std, ins_tab_discipline d
             WHERE     m2.mld_stdmelding_key = std.mld_stdmelding_key
                   AND std.mld_ins_discipline_key = d.ins_discipline_key
                   AND ins_srtdiscipline_key = 21       -- wijzigingsverzoeken
                   AND mld_melding_start_key IS NULL
                   AND m2.mld_melding_status NOT IN (1, 5, 6)) w,
           mld_melding  m
     WHERE w.vervolg_key = m.mld_melding_key;

CREATE OR REPLACE VIEW pnbr_v_rap_cmdb_status
(
    hide_f_volgorde,
    html_melding,
    html_wijziging,
    datum,
    klasse,
    status,
    domein,
    laatste_update,
    omschrijving_wijziging,
    gewenste_opleverdatum
)
AS
    SELECT TO_CHAR (mld_melding_datum, 'yyyymmddhh24mi'),
              '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
           || 'mld_key='
           || w.start_key
           || '")''>'
           || w.start_key
           || '</a>',
              '<a class="details" onclick=''FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=bo&'
           || 'mld_key='
           || m.mld_melding_key
           || '")''>'
           || m.mld_melding_key
           || '</a>',
           m.mld_melding_datum,
           (SELECT fac_usrdata_code
              FROM mld_kenmerkmelding km2, mld_kenmerk k, fac_usrdata ud
             WHERE     km2.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = 3565         -- Wijzigingsklasse
                   AND km2.mld_melding_key = m.mld_melding_key
                   AND fac.safe_to_number (km2.mld_kenmerkmelding_waarde) =
                       ud.fac_usrdata_key)
               klasse,
           (SELECT fac_usrdata_omschr
              FROM mld_kenmerkmelding  km,
                   mld_kenmerk         k,
                   fac_usrdata         ud,
                   (  SELECT kmmax.mld_melding_key,
                             MAX (kmmax.mld_kenmerkmelding_aanmaak)     laatste
                        FROM mld_kenmerkmelding kmmax, mld_kenmerk kmax
                       WHERE     kmmax.mld_kenmerk_key = kmax.mld_kenmerk_key
                             AND kmax.mld_srtkenmerk_key = 3621
                    GROUP BY kmmax.mld_melding_key) lkm
             WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND lkm.mld_melding_key = km.mld_melding_key
                   AND lkm.laatste = km.mld_kenmerkmelding_aanmaak
                   AND k.mld_srtkenmerk_key = 3621                   -- status
                   AND ud.fac_usrdata_key =
                       fac.safe_to_number (mld_kenmerkmelding_waarde)
                   AND km.mld_melding_key = m.mld_melding_key)
               status,
           (SELECT ins_discipline_omschrijving
              FROM ins_tab_discipline d, mld_stdmelding std
             WHERE     d.ins_discipline_key = std.mld_ins_discipline_key
                   AND std.mld_stdmelding_key = m.mld_stdmelding_key)
               domein,
           (SELECT MAX (fac_tracking_datum)
              FROM fac_tracking t
             WHERE     fac_tracking_refkey = m.mld_melding_key
                   AND t.fac_tracking_oms LIKE
                           '%' || 'Status wijzigingsbeheer:' || '%')
               laatstestatwijz,
           m.mld_melding_omschrijving,
           (SELECT fac.safe_to_date (mld_kenmerkmelding_waarde, 'dd-mm-yyyy')
              FROM mld_kenmerkmelding km, mld_kenmerk k
             WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = 3568    -- gewenste opleverdatum
                   AND km.mld_melding_key = m.mld_melding_key)
               gewenste_opleverdatum
      FROM (SELECT m.mld_melding_key      start_key,
                   m2.mld_melding_key     vervolg_key
              FROM (SELECT mld_kenmerkmelding_waarde, km.mld_melding_key
                      FROM mld_kenmerkmelding km, mld_kenmerk k2
                     WHERE     km.mld_kenmerk_key = k2.mld_kenmerk_key
                           AND k2.mld_srtkenmerk_key = 3601) km2, -- wijziging
                   mld_melding         m,
                   mld_melding         m2,
                   mld_stdmelding      std,
                   ins_tab_discipline  d
             WHERE     m.mld_melding_key = km2.mld_melding_key(+)
                   AND m2.mld_stdmelding_key = std.mld_stdmelding_key
                   AND std.mld_ins_discipline_key = d.ins_discipline_key
                   AND ins_srtdiscipline_key = 21       -- wijzigingsverzoeken
                   AND m2.mld_melding_start_key = m.mld_melding_key
                   AND m2.mld_melding_status IN (5, 6)
            UNION ALL
            SELECT NULL start_key, m2.mld_melding_key vervolg_key
              FROM mld_melding m2, mld_stdmelding std, ins_tab_discipline d
             WHERE     m2.mld_stdmelding_key = std.mld_stdmelding_key
                   AND std.mld_ins_discipline_key = d.ins_discipline_key
                   AND ins_srtdiscipline_key = 21       -- wijzigingsverzoeken
                   AND mld_melding_start_key IS NULL
                   AND m2.mld_melding_status IN (5, 6)) w,
           mld_melding  m
     WHERE w.vervolg_key = m.mld_melding_key;

-- View achter de API om de software componenten beschikbaar te stellen op brain

CREATE OR REPLACE VIEW pnbr_v_rap_sw_catalog
(
    ins_deel_key,
    omschrijving,
    groep,
    code_applicatie,
    lange_applicatienaam,
    functionele_beschrijving,
    versie_applicatie,
    locatie_van_installatie,
    categorie,
    fabrikant,
    koppelingen_met,
    beschrijving_relatie_met,
    applicatiebeheerder,
    technisch_beheerder,
    functioneel_beheerder_alt_1,
    functioneel_beheerder_alt_2,
    functioneel_beheerder_alt_3,
    eigenaar_organisatieonderdeel,
    bedrijfskritisch,
    dienstverleningsniveau,
    status_software,
    contract_beschikbaar,
    licentie_beschikbaar,
    indicatie_aantal_gebruikers,
    relatie_met_snow,
    beschikbare_documentatie,
    locatie_documentatie,
    notitie,
    bevat_data_met_bewaartermijn,
    startdatum_gebruik_applicatie,
    einddatum_gebruik_applicatie
)
AS
    SELECT d.ins_deel_key,
           ins_deel_omschrijving,
           ins_srtdeel_omschrijving     groep,
           pnbr.get_kenmerk ('INS', 661, d.ins_deel_key),   -- Code_applicatie
           pnbr.get_kenmerk ('INS', 662, d.ins_deel_key), -- Lange applicatienaam
           pnbr.get_kenmerk ('INS', 663, d.ins_deel_key), -- Functionele beschrijving
           pnbr.get_kenmerk ('INS', 664, d.ins_deel_key), -- Versie applicatie
           pnbr.get_kenmerk ('INS', 665, d.ins_deel_key), -- Locatie van installatie
           pnbr.get_kenmerk ('INS', 667, d.ins_deel_key),         -- Categorie
           pnbr.get_kenmerk ('INS', 668, d.ins_deel_key),         -- Fabrikant
           pnbr.get_kenmerk ('INS', 669, d.ins_deel_key), -- Koppelingen met andere applicatie(s)
           pnbr.get_kenmerk ('INS', 670, d.ins_deel_key), -- Beschrijving relatie met andere configuratie items
           pnbr.get_kenmerk ('INS', 671, d.ins_deel_key), -- Applicatiebeheerder
           pnbr.get_kenmerk ('INS', 672, d.ins_deel_key), -- Technisch beheerder
           pnbr.get_kenmerk ('INS', 673, d.ins_deel_key), -- Functioneel beheerder alt 1
           pnbr.get_kenmerk ('INS', 674, d.ins_deel_key), -- Functioneel beheerder alt 2
           pnbr.get_kenmerk ('INS', 675, d.ins_deel_key), -- Functioneel beheerder alt 3
           pnbr.get_kenmerk ('INS', 676, d.ins_deel_key), -- Eigenaar /Organisatieonderdeel
           pnbr.get_kenmerk ('INS', 677, d.ins_deel_key),  -- Bedrijfskritisch
           pnbr.get_kenmerk ('INS', 678, d.ins_deel_key), -- Dienstverleningsniveau
           pnbr.get_kenmerk ('INS', 679, d.ins_deel_key),   -- Status Software
           pnbr.get_kenmerk ('INS', 680, d.ins_deel_key), -- Contract beschikbaar
           pnbr.get_kenmerk ('INS', 681, d.ins_deel_key), -- Licentie beschikbaar
           pnbr.get_kenmerk ('INS', 682, d.ins_deel_key), -- Indicatie aantal gebruikers
           pnbr.get_kenmerk ('INS', 683, d.ins_deel_key),  -- Relatie met SNOW
           pnbr.get_kenmerk ('INS', 684, d.ins_deel_key), -- Beschikbare documentatie
           pnbr.get_kenmerk ('INS', 685, d.ins_deel_key), -- Locatie documentatie
           pnbr.get_kenmerk ('INS', 686, d.ins_deel_key),           -- Notitie
           pnbr.get_kenmerk ('INS', 741, d.ins_deel_key), -- Bevat data met bewaartermijn
           pnbr.get_kenmerk ('INS', 687, d.ins_deel_key), -- Startdatum gebruik applicatie
           pnbr.get_kenmerk ('INS', 688, d.ins_deel_key) -- Einddatum gebruik applicatie
      FROM ins_deel         d,
           ins_srtdeel      sd,
           ins_srtgroep     sg,
           ins_kenmerkdeel  kd,
           ins_kenmerk      k
     WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
           AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
           AND sg.ins_discipline_key = 1621                        -- software
           AND d.ins_deel_key = kd.ins_deel_key
           AND kd.ins_kenmerk_key = k.ins_kenmerk_key
           AND k.ins_srtkenmerk_key = 567            -- dienstverleningsniveau
           AND (   kd.ins_kenmerkdeel_waarde = 2990                    -- kern
                OR kd.ins_kenmerkdeel_waarde = 2991      -- functionele ruimte
                                                   );

CREATE OR REPLACE VIEW pnbr_v_rap_melding_top25
(
    ins_discipline_omschrijving,
    mld_stdmelding_omschrijving,
    aantal
)
AS
      SELECT ins_discipline_omschrijving,
             mld_stdmelding_omschrijving,
             COUNT (mld_melding_key)
        FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d
       WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = d.ins_discipline_key
             AND m.mld_melding_datum BETWEEN TO_DATE (
                                                    TO_CHAR (
                                                        ADD_MONTHS (SYSDATE,
                                                                    -1),
                                                        'yyyymm')
                                                 || '01',
                                                 'yyyymmdd')
                                         AND TO_DATE (
                                                    TO_CHAR (SYSDATE, 'yyyymm')
                                                 || '01',
                                                 'yyyymmdd')
    GROUP BY mld_stdmelding_omschrijving, d.ins_discipline_omschrijving;

CREATE OR REPLACE VIEW pnbr_v_rap_melding_oro
(
    mld_melding_key,
    mld_discipline_stdmelding,
    mld_melding_datum,
    prs_perslid_naam,
    mld_melding_omschrijving
)
AS
    SELECT mld_melding_key,
              d.ins_discipline_omschrijving
           || '-'
           || std.mld_stdmelding_omschrijving,
           mld_melding_datum,
           pf.prs_perslid_naam_full,
           mld_melding_omschrijving
      FROM mld_melding              m,
           prs_perslid              p,
           prs_v_perslid_fullnames  pf,
           mld_stdmelding           std,
           ins_tab_discipline       d
     WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = d.ins_discipline_key
           AND m.prs_perslid_key = p.prs_perslid_key
           AND p.prs_perslid_key = pf.prs_perslid_key
           AND p.prs_afdeling_key = 381
           AND m.mld_melding_datum BETWEEN TO_DATE (
                                                  TO_CHAR (
                                                      ADD_MONTHS (SYSDATE,
                                                                  -1),
                                                      'yyyymm')
                                               || '01',
                                               'yyyymmdd')
                                       AND TO_DATE (
                                                  TO_CHAR (SYSDATE, 'yyyymm')
                                               || '01',
                                               'yyyymmdd');

CREATE OR REPLACE VIEW pnbr_v_rap_mnd_bestelling
(
    catalogus,
    groep,
    aantal,
    prijs
)
AS
      SELECT d.ins_discipline_omschrijving,
             sg.bes_srtgroep_omschrijving,
             COUNT (DISTINCT b.bes_bestelling_key),
             SUM (bes_bestelopdr_item_aantal * bes_bestelopdr_item_brutoprijs)    prijs
        FROM bes_bestelling     b,
             bes_bestelling_item bi,
             bes_bestelopdr_item boi,
             bes_srtdeel        bd,
             bes_srtgroep       sg,
             bes_discipline     d
       WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
             AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
             AND bi.bes_srtdeel_key = bd.bes_srtdeel_key
             AND bd.bes_srtgroep_key = sg.bes_srtgroep_key
             AND sg.ins_discipline_key = d.ins_discipline_key
             AND d.ins_discipline_omschrijving NOT LIKE '%-ink'
             AND b.bes_bestelling_datum BETWEEN TO_DATE (
                                                       TO_CHAR (
                                                           ADD_MONTHS (SYSDATE,
                                                                       -1),
                                                           'yyyymm')
                                                    || '01',
                                                    'yyyymmdd')
                                            AND TO_DATE (
                                                       TO_CHAR (SYSDATE,
                                                                'yyyymm')
                                                    || '01',
                                                    'yyyymmdd')
    GROUP BY d.ins_discipline_omschrijving, sg.bes_srtgroep_omschrijving;

CREATE OR REPLACE VIEW pnbr_v_rap_mnd_kosten_afd
(
    afdeling,
    prijs
)
AS
      SELECT prs_afdeling_naam,
             SUM (bes_bestelopdr_item_aantal * bes_bestelopdr_item_brutoprijs)    prijs
        FROM bes_bestelling     b,
             bes_bestelling_item bi,
             bes_bestelopdr_item boi,
             bes_srtdeel        bd,
             bes_srtgroep       sg,
             bes_discipline     d,
             prs_afdeling       a,
             prs_perslid        p
       WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
             AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
             AND bi.bes_srtdeel_key = bd.bes_srtdeel_key
             AND bd.bes_srtgroep_key = sg.bes_srtgroep_key
             AND sg.ins_discipline_key = d.ins_discipline_key
             AND d.ins_discipline_omschrijving NOT LIKE '%-ink'
             AND b.prs_perslid_key = p.prs_perslid_key
             AND p.prs_afdeling_key = a.prs_afdeling_key
             AND b.bes_bestelling_datum BETWEEN TO_DATE (
                                                       TO_CHAR (
                                                           ADD_MONTHS (SYSDATE,
                                                                       -1),
                                                           'yyyymm')
                                                    || '01',
                                                    'yyyymmdd')
                                            AND TO_DATE (
                                                       TO_CHAR (SYSDATE,
                                                                'yyyymm')
                                                    || '01',
                                                    'yyyymmdd')
    GROUP BY a.prs_afdeling_naam;


CREATE OR REPLACE VIEW pnbr_v_rap_mnd_res_dag
(
    hide_f_volgorde,
    fclt_f_maaand,
    fclt_f_dag,
    fclt_f_activiteit,
    fclt_f_frontend_frontoffice,
    aantal,
    prijs
)
AS
      SELECT    TO_CHAR (res_rsv_ruimte_van, 'yyyy-mm')
             || TO_CHAR (res_rsv_ruimte_van, 'd'),
             TO_CHAR (res_rsv_ruimte_van, 'yyyy-mm'),
             DECODE (TO_CHAR (res_rsv_ruimte_van, 'd'),
                     '1', 'Zondag',
                     '2', 'Maandag',
                     '3', 'Dinsdag',
                     '4', 'Woensdag',
                     '5', 'Donderdag',
                     '6', 'Vrijdag',
                     '7', 'Zaterdag')
                 dag,
             res_activiteit_omschrijving,
             fe_fo,
             COUNT (rrr.res_rsv_ruimte_key)
                 aantal,
             SUM (res.getdeelresprijs (rrr.res_rsv_ruimte_key))
                 prijs
        FROM res_rsv_ruimte rrr,
             res_activiteit a,
             (SELECT fac_tracking_refkey       res_rsv_ruimte_key,
                     DECODE (res_rsv_ruimte_contact_key,
                             tr.prs_perslid_key, 'Frontend',
                             'Frontoffice')    fe_fo
                FROM fac_tracking      tr,
                     fac_srtnotificatie str,
                     res_rsv_ruimte    rrr2
               WHERE     str.fac_srtnotificatie_code = 'RESNEW'
                     AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
                     AND tr.fac_tracking_refkey = rrr2.res_rsv_ruimte_key) f
       WHERE     rrr.res_activiteit_key = a.res_activiteit_key
             AND rrr.res_rsv_ruimte_key = f.res_rsv_ruimte_key(+)
             AND rrr.res_rsv_ruimte_verwijder IS NULL
             AND (   rrr.res_ruimte_opstel_key IS NOT NULL
                  OR EXISTS
                         (SELECT res_rsv_artikel_key
                            FROM res_rsv_artikel rra
                           WHERE rra.res_rsv_ruimte_key =
                                 rrr.res_rsv_ruimte_key
                          UNION ALL
                          SELECT res_rsv_deel_key
                            FROM res_rsv_deel rrd
                           WHERE rrd.res_rsv_ruimte_key =
                                 rrr.res_rsv_ruimte_key))
             AND res_rsv_ruimte_van >
                 ADD_MONTHS (
                     TO_DATE (TO_CHAR (SYSDATE, 'yyyymm') || '01', 'yyyymmdd'),
                     -4)
             AND TO_CHAR (res_rsv_ruimte_van, 'yyyymm') <
                 TO_CHAR (SYSDATE, 'yyyymm')
    GROUP BY TO_CHAR (res_rsv_ruimte_van, 'd'),
             TO_CHAR (res_rsv_ruimte_van, 'yyyy-mm'),
             res_activiteit_omschrijving,
             f.fe_fo;

CREATE OR REPLACE VIEW pnbr_v_mld_kenmrk
(
    melding_key,
    meldingnummer,
    melding_start_key,
    externnummer,
    melding_regio,
    melding_district,
    melding_locatiecode,
    melding_locatie,
    melding_locatieplaats,
    fclt_3d_locatie_key,
    melding_gebouwcode,
    melding_gebouw,
    melding_verdieping,
    melding_ruimtenr,
    melding_ruimte,
    melding_ordernr,
    kostensoortgroep,
    kostensoort,
    kostenplaats,
    kostenplaats_oms,
    melder,
    melder_key,
    afdeling,
    afdeling_omschrijving,
    [REDACTED],
    bedrijf_key,
    invoerder,
    meldbron,
    soortmelding,
    fclt_3d_discipline_key,
    productgroep,
    subproductgroep,
    behandelgroep,
    behandelaar,
    behandelaar_key,
    subproductgroepgroep,
    [REDACTED],
    actieve_behandelgroep,
    actieve_behandelaar_key,
    actieve_behandelaar,
    melding_status,
    sla_nvt,
    sla_werkdgn,
    sla_werkuren,
    sla_respijtdgn,
    sla_respijturen,
    sla_accptdgn,
    sla_accpturen,
    plan_uitvoertijd_sla,
    melding_datum,
    melding_einddatum,
    melding_einddatum_std,
    melding_acceptdatum,
    melding_afgemeld,
    melding_accepted,
    doorlooptijd_werkdgn,
    doorlooptijd_werkuren,
    onderwerp,
    vomschrijving,
    melding_opmerking,
    prioriteit,
    prioriteittxt,
    rating,
    rating_opmerking,
    bolletje,
    actiecode,
    accept_sla_dagen,
    accept_sla_uren,
    uitvoering_sla_dagen,
    uitvoering_sla_uren,
    afspraak_sla_dagen,
    afspraak_sla_uren,
    accept_sla_optijd,
    uitvoering_sla_optijd,
    afspraak_sla_optijd,
    selfservice,
    relatie_security,
    relatie_transformatie
)
AS
    SELECT melding_key,
           meldingnummer,
           melding_start_key,
           externnummer,
           melding_regio,
           melding_district,
           melding_locatiecode,
           melding_locatie,
           melding_locatieplaats,
           fclt_3d_locatie_key,
           melding_gebouwcode,
           melding_gebouw,
           melding_verdieping,
           melding_ruimtenr,
           melding_ruimte,
           melding_ordernr,
           kostensoortgroep,
           kostensoort,
           kostenplaats,
           kostenplaats_oms,
           melder,
           melder_key,
           afdeling,
           afdeling_omschrijving,
           fclt_3d_afdeling_key,
           bedrijf_key,
           invoerder,
           meldbron,
           soortmelding,
           fclt_3d_discipline_key,
           productgroep,
           subproductgroep,
           behandelgroep,
           behandelaar,
           behandelaar_key,
           subproductgroepgroep,
           fclt_3d_discipline2_key,
           actieve_behandelgroep,
           actieve_behandelaar_key,
           actieve_behandelaar,
           melding_status,
           sla_nvt,
           sla_werkdgn,
           sla_werkuren,
           sla_respijtdgn,
           sla_respijturen,
           sla_accptdgn,
           sla_accpturen,
           plan_uitvoertijd_sla,
           melding_datum,
           melding_einddatum,
           melding_einddatum_std,
           melding_acceptdatum,
           melding_afgemeld,
           melding_accepted,
           doorlooptijd_werkdgn,
           doorlooptijd_werkuren,
           onderwerp,
           vomschrijving,
           melding_opmerking,
           prioriteit,
           prioriteittxt,
           rating,
           rating_opmerking,
           bolletje,
           actiecode,
           accept_sla_dagen,
           accept_sla_uren,
           uitvoering_sla_dagen,
           uitvoering_sla_uren,
           afspraak_sla_dagen,
           afspraak_sla_uren,
           accept_sla_optijd,
           uitvoering_sla_optijd,
           afspraak_sla_optijd,
           selfservice,
           pnbr.get_kenmerk ('MLD', 19903, melding_key)    relatie_security,
           pnbr.get_kenmerk ('MLD', 19903, melding_key)    relatie_transformatie
      FROM mld_v_udr_melding;


------------------------------------------------------------------------------------
--
-- Tijdelijke notificatie voor bezoek dat aangemeld is in Toren C van het
-- SNS Reaal gebouw
--
------------------------------------------------------------------------------------

CREATE OR REPLACE VIEW pnbr_v_rap_bezoekers_c_toren
(
    hide_f_ts,
    locatie,
    datum,
    van,
    tot,
    bezoeker,
    bedrijf,
    opdrachtgever,
    telefoon,
    opmerking
)
AS
    SELECT TO_CHAR (bez_afspraak_datum, 'yyyymmddhh24mi')     ts,
           l.alg_locatie_code,
           TO_CHAR (bez_afspraak_datum, 'dd-mm-yyyy')         datum,
           TO_CHAR (bez_afspraak_datum, 'hh24:mi')            van,
           TO_CHAR (bez_afspraak_eind, 'hh24:mi')             tot,
           bez_afspraak_naam                                  bezoeker,
           bez_afspraak_bedrijf                               bedrijf,
           bez_afspraak_gastheer                              opdrachtgever,
           h.prs_perslid_telefoonnr                           telefoon,
           a.bez_afspraak_opmerking                           opmerking
      FROM bez_afspraak   a,
           bez_bezoekers  b,
           prs_perslid    h,
           alg_locatie    l
     WHERE     a.bez_afspraak_key = b.bez_afspraak_key
           AND a.alg_locatie_key = 221
           AND a.alg_locatie_key = l.alg_locatie_key
           AND bez_afspraak_host_key = h.prs_perslid_key
           AND bez_afspraak_datum BETWEEN TRUNC (SYSDATE)
                                      AND fac.datumtijdplusuitvoertijd (
                                              TRUNC (SYSDATE),
                                              2,
                                              'DAGEN');

-- notificatie naar medewerkers van SNS Reaal over bezoekers voor vandaag en volgende werkdag.

CREATE OR REPLACE VIEW pnbr_v_noti_bezoekers_c_toren
(
    code,
    sender,
    receiver,
    text,
    key,
    xkey
)
AS
    SELECT 'FACUSR',
           NULL,
           23044,
           'PNB Bezoekers voor vandaag en eerstvolgende werkdag',
           681,
           NULL
      FROM DUAL;

CREATE OR REPLACE VIEW PNBR_V_RAP_FAQMLD_VERVALLEN
(
    Kennisbankitem,
    Publicatiedatum,
    FCLT_F_Vakgroep,
    FCLT_F_Melding,
    Vervaldatum,
    Verwijderdatum
)
AS
    SELECT fac_faq_question
               kennisbankitem,
           fac_faq_datum
               publicatiedatum,
           ins_srtdiscipline_prefix || '-' || ins_discipline_omschrijving
               vakgroep,
           mld_stdmelding_omschrijving
               melding,
           mld_stdmelding_vervaldatum
               vervaldatum,
           mld_stdmelding_verwijder
               verwijderdatum
      FROM fac_faq            f,
           mld_stdmeldingfaq  fm,
           mld_stdmelding     std,
           mld_discipline     d,
           ins_srtdiscipline  srt
     WHERE     f.fac_faq_key = fm.fac_faq_key
           AND fm.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = d.ins_discipline_key
           AND srt.ins_srtdiscipline_key = d.ins_srtdiscipline_key
           AND (   std.mld_stdmelding_verwijder IS NOT NULL
                OR std.mld_stdmelding_vervaldatum < SYSDATE)
    UNION ALL
    SELECT fac_faq_question
               vraag,
           fac_faq_datum
               publicatiedatum,
           ins_srtdiscipline_prefix || '-' || ins_discipline_omschrijving
               vakgroep,
           NULL
               melding,
           NULL
               vervaldatum,
           d.ins_discipline_verwijder
               verwijderdatum
      FROM fac_faq            f,
           mld_stdmeldingfaq  fm,
           mld_discipline     d,
           ins_srtdiscipline  srt
     WHERE     f.fac_faq_key = fm.fac_faq_key
           AND srt.ins_srtdiscipline_key = d.ins_srtdiscipline_key
           AND d.ins_discipline_key = fm.ins_discipline_key
           AND fm.mld_stdmelding_key IS NULL
           AND d.ins_discipline_verwijder IS NOT NULL;

-- PNBR#31166. De MLDNEW notificatie staat uit.
-- Toch moet de melding controle email adres (3941) wel worden genotificeerd

CREATE OR REPLACE VIEW PNBR_V_NOTI_MLD_CONTROLEMAIL
(
    SENDER,
    RECEIVER,
    TEXT,
    CODE,
    KEY,
    XKEY
)
AS
    SELECT NULL                    sender,
           prs_perslid_key_voor,
              'Nieuwe melding '
           || ins_srtdiscipline_prefix
           || '-'
           || mld_melding_key
           || ' ('
           || d.ins_discipline_omschrijving
           || '/'
           || std.mld_stdmelding_omschrijving
           || ') geregistreerd'    text,
           'MLDNEW'                code,
           mld_melding_key         key,
           NULL                    xkey
      FROM mld_melding        m,
           mld_stdmelding     std,
           mld_discipline     d,
           ins_srtdiscipline  srt
     WHERE     m.mld_stdmelding_key = 3941
           AND mld_melding_status != 1
           AND m.mld_stdmelding_key = std.mld_stdmelding_key
           AND d.ins_discipline_key = std.mld_ins_discipline_key
           AND d.ins_srtdiscipline_key = srt.ins_srtdiscipline_key
           AND mld_melding_datum >
               (SELECT   fac_notificatie_job_nextrun
                       - fac_notificatie_job_interval / 24
                  FROM fac_notificatie_job
                 WHERE fac_notificatie_job_view =
                       'PNBR_V_NOTI_MLD_CONTROLEMAIL')
           AND mld_melding_datum <
               (SELECT fac_notificatie_job_nextrun
                  FROM fac_notificatie_job
                 WHERE fac_notificatie_job_view =
                       'PNBR_V_NOTI_MLD_CONTROLEMAIL');

-- PNBR#31533 - notijob tbv voorraadbehher
-- Als de minimale voorrraad van een artikel is behaald dan wordt een CUST05 notificatie verstuurd naar de groep LOGISTIEK VOORRAAD.

CREATE OR REPLACE VIEW PNBR_V_NOTI_BES_VOORRAAD
(
    SENDER,
    RECEIVER,
    TEXT,
    CODE,
    KEY,
    XKEY
)
AS
    SELECT NULL,
           prs.prs_perslid_key,
              'Herinnering: Minimale voorraad ('
           || vmin
           || ') van artikel '
           || artikel
           || ' (nr. '
           || nr
           || ') is bereikt',
           'CUST05',
           bst.bes_key,
           NULL
      FROM (SELECT extern.dkey,
                   extern.bes_srtdeel_nr                             nr,
                   intern.bes_srtdeel_key,
                   COALESCE (intern.bes_srtdeel_omschrijving,
                             extern.bes_srtdeel_omschrijving)        artikel,
                   extern.vmin,
                   extern.geleverd - COALESCE (intern.besteld, 0)    voorraad
              FROM (SELECT bd.ins_discipline_key              dkey, -- INKOOP-key
                           sd.bes_srtdeel_nr,                -- ext. artikelnr
                           sd.bes_srtdeel_omschrijving,
                           sd.bes_srtdeel_voorraadmin         vmin, -- ext. voorraadmin
                           (SELECT SUM (boi.bes_bestelopdr_item_aantalontv)
                              FROM bes_bestelling       b,
                                   bes_bestelling_item  bi,
                                   bes_bestelopdr_item  boi
                             WHERE --   boi.bes_bestelopdr_item_status in (6,7) AND
                                       b.bes_bestelling_key =
                                       bi.bes_bestelling_key
                                   AND boi.bes_bestelopdr_item_key =
                                       bi.bes_bestelopdr_item_key
                                   AND bi.bes_srtdeel_key =
                                       sd.bes_srtdeel_key)    geleverd
                      FROM bes_srtdeel      sd,
                           bes_srtgroep     g,
                           bes_discipline   bd,
                           bes_disc_params  dp
                     WHERE     sd.bes_srtdeel_verwijder IS NULL
                           AND sd.bes_srtgroep_key = g.bes_srtgroep_key
                           AND g.ins_discipline_key = bd.ins_discipline_key
                           AND bd.ins_discipline_key =
                               dp.bes_ins_discipline_key
                           AND dp.bes_ins_discipline_key_inkoop IS NULL
                           AND bd.ins_discipline_key IN
                                   (SELECT bes_ins_discipline_key_inkoop
                                      FROM bes_disc_params
                                     WHERE bes_ins_discipline_key_inkoop
                                               IS NOT NULL)) extern -- Inkoop artikelen uit externe catalogus!
                   FULL JOIN
                   (SELECT dp.bes_ins_discipline_key_inkoop    dkey, -- INKOOP-key
                           sd.bes_srtdeel_key,
                           sd.bes_srtdeel_nr,                -- int. artikelnr
                           sd.bes_srtdeel_omschrijving,
                           bd.ins_discipline_omschrijving, -- int. catalogusnaam
                           (SELECT SUM (
                                       COALESCE (
                                           boi.bes_bestelopdr_item_aantal,
                                           bi.bes_bestelling_item_aantal))
                              FROM bes_bestelling       b,
                                   bes_bestelling_item  bi,
                                   bes_bestelopdr_item  boi
                             WHERE     boi.bes_bestelopdr_item_key(+) =
                                       bi.bes_bestelopdr_item_key
                                   AND b.bes_bestelling_key =
                                       bi.bes_bestelling_key
                                   AND bi.bes_srtdeel_key =
                                       sd.bes_srtdeel_key)     besteld
                      FROM bes_srtdeel      sd,
                           bes_srtgroep     g,
                           bes_discipline   bd,
                           bes_disc_params  dp
                     WHERE     sd.bes_srtdeel_verwijder IS NULL
                           AND sd.bes_srtgroep_key = g.bes_srtgroep_key
                           AND g.ins_discipline_key = bd.ins_discipline_key
                           AND bd.ins_discipline_key =
                               dp.bes_ins_discipline_key
                           AND dp.bes_ins_discipline_key_inkoop IS NOT NULL)
                   intern          -- Verkoop artikelen uit interne catalogus!
                       ON     extern.dkey = intern.dkey
                          AND extern.bes_srtdeel_nr = intern.bes_srtdeel_nr)
           vrd,
           (  SELECT MAX (bes_bestelling_datum)     bes_dat,
                     MAX (b.bes_bestelling_key)     bes_key,
                     bes_srtdeel_key
                FROM bes_bestelling b, bes_bestelling_item bi
               WHERE     b.bes_bestelling_key = bi.bes_bestelling_key
                     AND b.bes_bestelling_datum > SYSDATE - 90
            GROUP BY bes_srtdeel_key) bst,
           (SELECT p.prs_perslid_key
              FROM fac_groep fg, fac_gebruikersgroep fgg, prs_perslid p
             WHERE     fac_groep_upper = 'LOGISTIEK VOORRAAD'
                   AND fg.fac_groep_key = fgg.fac_groep_key
                   AND p.prs_perslid_key = fgg.prs_perslid_key
                   AND p.prs_perslid_verwijder IS NULL) prs
     WHERE     vrd.bes_srtdeel_key = bst.bes_srtdeel_key
           AND vrd.vmin >= vrd.voorraad
           AND bst.bes_dat >
               (SELECT   fac_notificatie_job_nextrun
                       - fac_notificatie_job_interval / 24
                  FROM fac_notificatie_job
                 WHERE fac_notificatie_job_view = 'PNBR_V_NOTI_BES_VOORRAAD')
           AND bst.bes_dat <
               (SELECT fac_notificatie_job_nextrun
                  FROM fac_notificatie_job
                 WHERE fac_notificatie_job_view = 'PNBR_V_NOTI_BES_VOORRAAD');

-- PNBR#35208 backoffice gebak reminder (autorisatiegroep hutten = key 101)
-- als er nieuwe (status gefiatteerd = key 3) gebak aanvragen (=2161) zijn
-- PNBR# 35590 backoffice gebak bestellen omgezet van bestelling naar reservering
-- cateraar krijgt een dag van te voren bericht als er gebakbestelling voor 'morgen' zijn
-- gefilterd op ccatalogi van bakkers Hutten (2342), Vermeulen (2341) en De Rouw (2343)

CREATE OR REPLACE FORCE VIEW PNBR_V_NOTI_BES_BOGEBREMINDER
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    PAR1,
    PAR2,
    XKEY
)
AS
    SELECT 'CUST06',
           NULL,
           prs_perslid_key,
           'Let op: er zijn ' || aantal || ' gebakbestelregels voor morgen',
           res_artikel_key,
           NULL,
           NULL,
           NULL
      FROM (SELECT COUNT (*) aantal, MAX (res_artikel_key) res_artikel_key
              FROM (  SELECT rsv.res_artikel_key
                        FROM RES_V_AANWEZIGRSV_ARTIKEL rsv, RES_ARTIKEL a
                       WHERE     A.RES_ARTIKEL_KEY = RSV.RES_ARTIKEL_KEY
                             AND A.RES_DISCIPLINE_KEY IN (2342, 2341, 2343)
                             AND TRUNC (rsv.res_rsv_artikel_levering) =
                                 TRUNC (SYSDATE) + 1
                    GROUP BY rsv.res_artikel_key)
            HAVING COUNT (*) > 0) x,
           (SELECT p.prs_perslid_key
              FROM fac_gebruikersgroep fg, prs_perslid p
             WHERE     fac_groep_key = 101
                   AND p.prs_perslid_key = fg.prs_perslid_key
                   AND p.prs_perslid_verwijder IS NULL
                   AND p.prs_perslid_email IS NOT NULL
                   AND p.prs_perslid_oslogin IS NOT NULL) y;

CREATE OR REPLACE FORCE VIEW PNBR_V_RAP_GEBAKBESTELLING
(
    LEVERANCIER,
    ARTIKEL,
    EENHEID,
    PRIJS,
    AANTAL,
    TOTAAL,
    LEVERDATUM,
    KOSTENPLAATS,
    OMSCHR_KOSTENPLAATS,
    MEDEWERKER,
    HTML_BESTELNUMMER,
    NOTITIE,
    ZAKELIJK_PRIVE,
    RESERVERINGNR
)
AS
    SELECT D.INS_DISCIPLINE_OMSCHRIJVING
               AS Leverancier,
           A.RES_ARTIKEL_OMSCHRIJVING
               AS Artikel,
           A.RES_ARTIKEL_EENHEID
               AS Eenheid,
           A.RES_ARTIKEL_PRIJS
               AS Prijs,
           RA.RES_RSV_ARTIKEL_AANTAL
               AS Aantal,
           RA.RES_RSV_ARTIKEL_LEVERING
               AS Leverdatum,
           COALESCE (A.RES_ARTIKEL_PRIJS, 0) * RA.RES_RSV_ARTIKEL_AANTAL,
           KP.PRS_KOSTENPLAATS_NR
               AS Kostenplaats,
           KP.PRS_KOSTENPLAATS_OMSCHRIJVING
               AS Omschr_kostenplaats,
           P.PRS_PERSLID_NAAM_FRIENDLY
               AS Medewerker,
              '<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fo&'
           || 'rsv_ruimte_key='
           || rr.res_rsv_ruimte_key
           || '")''>'
           || rr.res_reservering_key
           || '/'
           || res_rsv_ruimte_volgnr
           || '</a>'
               AS html_Bestelnummer,
           RR.RES_RSV_RUIMTE_OPMERKING,
           (SELECT ud.fac_usrdata_omschr
              FROM res_kenmerkwaarde rk, fac_usrdata ud
             WHERE     rk.res_kenmerk_key = 262
                   AND ud.fac_usrtab_key = 1943 -- kenmerk + usertab zakelijk of prive
                   AND ud.fac_usrdata_key =
                       fac.safe_to_number (rk.res_kenmerkreservering_waarde)
                   AND rk.res_rsv_ruimte_key = rr.res_rsv_ruimte_key)
               zakpriv,
           RR.RES_RESERVERING_KEY || '/' || res_rsv_ruimte_volgnr
      FROM res_rsv_artikel              ra,
           res_artikel                  a,
           res_rsv_ruimte               rr,
           prs_kostenplaats             kp,
           PRS_V_PERSLID_FULLNAMES_ALL  P,
           res_activiteitdiscipline     AD,
           ins_tab_discipline           d
     WHERE     A.RES_ARTIKEL_KEY = RA.RES_ARTIKEL_KEY
           AND A.RES_DISCIPLINE_KEY IN (2342, 2341, 2343)
           AND RA.RES_RSV_RUIMTE_KEY = RR.RES_RSV_RUIMTE_KEY
           AND RR.PRS_KOSTENPLAATS_KEY = kp.prs_kostenplaats_key
           AND RR.RES_RSV_RUIMTE_HOST_KEY = P.PRS_PERSLID_KEY
           AND AD.RES_DISCIPLINE_KEY = A.RES_DISCIPLINE_KEY
           AND AD.RES_DISCIPLINE_KEY = D.INS_DISCIPLINE_KEY
           AND RR.RES_RSV_RUIMTE_VERWIJDER IS NULL
           AND RA.RES_RSV_ARTIKEL_AFGEMELD IS NULL
           AND RA.RES_RSV_ARTIKEL_VERWIJDER IS NULL;

-- Rapportage inzicht in welke meldingen autgroep Servicedesk (key 253) registreerd (key 39)
-- en welke meldingen autgroep Servicedesk (key 253) afmeld (key 35)

CREATE OR REPLACE VIEW mld_v_udr_mld_actiegroep
(
    melding_key,
    registratie_datum,
    geregistreerd_door,
    registratie_autorisatiegroep,
    afmeld_datum,
    afgemeld_door,
    afmeld_autorisatiegroep,
    zelfservice,
    meldingnummer,
    locatiecode,
    locatie_omschrijving,
    gebouwcode,
    gebouw_omschrijving,
    verdieping,
    ruimtenr,
    ruimte_omschrijving,
    melder,
    afdeling,
    afdeling_omschrijving,
    vakgroeptype,
    vakgroep,
    standaard_melding,
    melding_datum,
    melding_einddatum,
    omschrijving,
    status
)
AS
    SELECT mld_melding_key,
           tr2.fac_tracking_datum
               registratie_datum,
           (SELECT prs_perslid_naam_full
              FROM prs_v_perslid_fullnames_all pf
             WHERE pf.prs_perslid_key = tr2.prs_perslid_key)
               geregistreerd_door,
           tr2.groep
               registratie_autorisatiegroep,
           tr.fac_tracking_datum
               afmeld_datum,
           (SELECT prs_perslid_naam_full
              FROM prs_v_perslid_fullnames_all pf
             WHERE pf.prs_perslid_key = tr.prs_perslid_key)
               afgemeld_door,
           tr.groep
               afmeld_autorisatiegroep,
           DECODE (tr2.prs_perslid_key, m.prs_perslid_key, 'Ja', 'Nee')
               zelfservice,
           sd.ins_srtdiscipline_prefix || m.mld_melding_key
               meldingnummer,
           alg_locatie_code
               locatie,
           alg_locatie_omschrijving
               locatie_omschrijving,
           og.alg_gebouw_code
               gebouw,
           og.alg_gebouw_naam
               gebouw_naam,
           og.alg_verdieping_code
               verdieping,
           og.alg_ruimte_nr
               ruimte,
           og.alg_ruimte_omschrijving
               ruimte_omschrijving,
           (SELECT prs_perslid_naam_full
              FROM prs_v_perslid_fullnames_all pf
             WHERE pf.prs_perslid_key = m.prs_perslid_key_voor)
               melder,
           (SELECT prs_afdeling_naam
              FROM prs_afdeling afd, prs_perslid pp
             WHERE     afd.prs_afdeling_key = pp.prs_afdeling_key
                   AND pp.prs_perslid_key = m.prs_perslid_key)
               afdeling,
           (SELECT prs_afdeling_omschrijving
              FROM prs_afdeling afd, prs_perslid pp
             WHERE     afd.prs_afdeling_key = pp.prs_afdeling_key
                   AND pp.prs_perslid_key = m.prs_perslid_key)
               afdeling_omschrijving,
           sd.ins_srtdiscipline_omschrijving
               vakgroeptype,
           md.ins_discipline_omschrijving
               vakgroep,
           s.mld_stdmelding_omschrijving
               standaard_melding,
           mld_melding_datum,
           m.mld_melding_einddatum
               einddatum,
           mld_melding_omschrijving,
           (SELECT mld_statuses_omschrijving
              FROM mld_statuses sta
             WHERE sta.mld_statuses_key = m.mld_melding_status)
               status
      FROM mld_melding                m,
           alg_v_allonrgoed_gegevens  og,
           alg_locatie                l,
           mld_discipline             md,
           mld_stdmelding             s,
           ins_srtdiscipline          sd,
           (SELECT 'Afgemeld'                                      afgemeld,
                   fac_tracking_refkey,
                   fac_tracking_datum,
                   track.prs_perslid_key,
                   COALESCE (fac_groep_omschrijving, 'Anders')     groep
              FROM fac_tracking  track,
                   (SELECT prs_perslid_key, fac_groep_omschrijving
                      FROM fac_groep g, fac_gebruikersgroep gg
                     WHERE     g.fac_groep_key = 253
                           AND g.fac_groep_key = gg.fac_groep_key) auth
             WHERE     fac_srtnotificatie_key = 35
                   AND auth.prs_perslid_key(+) = track.prs_perslid_key) tr,
           (SELECT 'Geregistreerd'                                 geregistreerd,
                   fac_tracking_refkey,
                   fac_tracking_datum,
                   track.prs_perslid_key,
                   COALESCE (fac_groep_omschrijving, 'Anders')     groep
              FROM fac_tracking  track,
                   (SELECT prs_perslid_key, fac_groep_omschrijving
                      FROM fac_groep g, fac_gebruikersgroep gg
                     WHERE     g.fac_groep_key = 253
                           AND g.fac_groep_key = gg.fac_groep_key) auth
             WHERE     fac_srtnotificatie_key = 39
                   AND auth.prs_perslid_key(+) = track.prs_perslid_key) tr2
     WHERE     m.mld_alg_locatie_key = l.alg_locatie_key(+)
           AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+)
           AND s.mld_stdmelding_key = m.mld_stdmelding_key
           AND md.ins_discipline_key = s.mld_ins_discipline_key
           AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
           AND fac_activiteit_key IS NULL
           AND tr.fac_tracking_refkey(+) = m.mld_melding_key
           AND tr2.fac_tracking_refkey(+) = m.mld_melding_key;

--- PNBR#36004 Functie voor het 'uitlezen' van de mail body vanuit SAP voor een 'Choose Your Own Device' aanvraag

CREATE OR REPLACE FUNCTION pnbr_get_html_value (p_text    IN VARCHAR2,
                                                p_start   IN VARCHAR2)
    RETURN VARCHAR2
AS
    v_pos         NUMBER;
    v_pos_begin   NUMBER;
    v_pos_eind    NUMBER;
    v_result      VARCHAR2 (4000);
    v_lb          VARCHAR2 (2);
BEGIN
    -- Wat gebruiken we als linebreak
    IF INSTR (p_text, CHR (13) || CHR (10)) <> 0
    THEN
        v_lb := CHR (13) || CHR (10);
        DBMS_OUTPUT.put_line ('1310');
    ELSIF INSTR (p_text, CHR (10) || CHR (13)) <> 0
    THEN
        v_lb := CHR (10) || CHR (13);
        DBMS_OUTPUT.put_line ('1013');
    ELSIF INSTR (p_text, CHR (10) || CHR (10)) <> 0
    THEN
        v_lb := CHR (10) || CHR (10);
        DBMS_OUTPUT.put_line ('1010');
    END IF;

    -- Controleer of de begintag aanwezig is. Zo nee, dan hebben we niets te tonen.
    -- Bepaal de positie waar de opgegeven start tekst begint
    v_pos := INSTR (p_text, p_start);

    -- Als de opgegeven start tekst niet gevonden wordt dan is v_pos 0
    IF v_pos = 0
    THEN
        RETURN NULL;
    END IF;

    -- Bij pnbr staat de beginpositie op dezelfde regel.
    -- De beginpositie wordt bepaald door startpositie van de opgegeven start tekst Personeelsnummer de lengte van de starttekst + carriage return (CHR13) + linefeed (CHR10)
    v_pos_begin := INSTR (p_text, v_lb || p_start) + LENGTH (p_start) + 2;

    --- Eind positie is altijd einde van de regel
    v_pos_eind :=
        INSTR (p_text,
               v_lb,
               v_pos_begin,
               1);

    -- v_result is alles vanaf de startpositie tot aan het einde
    v_result := SUBSTR (p_text, v_pos_begin, v_pos_eind - v_pos_begin);

    -- Soms wordt een tag niet gevonden. Dan wordt de hele body inclusief CSS meegestuurd.
    -- Dat willen we natuurlijk niet. Daarom maken we daar maar een lege tag van.
    IF LENGTH (v_result) > 1000
    THEN
        v_result := p_start;
    END IF;

    RETURN v_result;
END;
/


-- PNBR#36004 Procedure voor het verwerken van 'Choose Your Own Device' aanvraag vanuit SAP

CREATE OR REPLACE PROCEDURE pnbr_processemail (pfrom        IN VARCHAR2,
                                               pto          IN VARCHAR2,
                                               psubject     IN VARCHAR2,
                                               pbody        IN VARCHAR2,
                                               psessionid   IN VARCHAR2,
                                               pemailkey    IN NUMBER)
AS
    sender                 prs_perslid.prs_perslid_key%TYPE;
    persnr                 prs_perslid.prs_perslid_nr%TYPE;
    kostenplaats           prs_afdeling.prs_kostenplaats_key%TYPE;
    v_mldkey               mld_melding.mld_melding_key%TYPE;
    defaultstdmelding      fac_setting.fac_setting_default%TYPE;
    errormsg               fac_result.fac_result_waarde%TYPE;
    v_soort_aanvraag       VARCHAR2 (50);
    v_model_omschrijving   VARCHAR2 (2000);                              -- 40
    v_plus_standaard       VARCHAR2 (2000);                              -- 30
    v_eigen_bijdrage       VARCHAR2 (2000);                               -- 8
    v_from                 VARCHAR2 (1000);
    v_mld_meldbron_key     NUMBER (10);
    v_hint                 VARCHAR2 (1000);
BEGIN
    -- Choose Your Own Device aanvragen vanuit SAP naar mld_stdmelding_key 7441 (Tablet) of mld_stdmelding_key 7442 (Telefoon)
    v_soort_aanvraag :=
        pnbr_get_html_value (pbody, 'Soort Choose Your Own : ');
    v_hint := 'sa:' || v_soort_aanvraag;

    IF v_soort_aanvraag = 'Tablet'
    THEN
        defaultstdmelding := '7721';
    END IF;

    IF v_soort_aanvraag = 'Telefoon'
    THEN
        defaultstdmelding := '7701';
    END IF;

    v_hint := v_hint || '-std:' || defaultstdmelding;
    -- Meldbron = SAP, dus systeem = 6
    v_mld_meldbron_key := 6;

    -- Bij PNBR is de melder terug te halen uit de body van de email obv personeelsnummer aanvrager
    -- Op basis van dit personeelsnummer kan de melder en de kostenplaats bepaald worden
    persnr := pnbr_get_html_value (pbody, 'Personeelsnummer aanvrager : ');
    v_hint := v_hint || '-pnr:' || persnr;

    SELECT prs_perslid_key, d.prs_kostenplaats_key
      INTO sender, kostenplaats
      FROM prs_perslid p, prs_afdeling d
     WHERE     p.prs_afdeling_key = d.prs_afdeling_key
           AND prs_perslid_nr = persnr
           AND prs_perslid_verwijder IS NULL;

    v_hint := v_hint || '-pk:' || sender;
    v_hint := v_hint || '-kp:' || kostenplaats;
    -- Bepaal de kenmerkwaarden die bij de melding moeten worden weggeschreven
    v_model_omschrijving :=
        pnbr_get_html_value (pbody, 'Model omschrijving : ');
    v_plus_standaard :=
        pnbr_get_html_value (pbody, 'Plus/standaard model : ');
    v_eigen_bijdrage := pnbr_get_html_value (pbody, 'Eigen bijdrage : ');

    -- Registreer de melding in Facilitor
    BEGIN
        INSERT INTO mld_melding (mld_melding_module,
                                 mld_meldbron_key,
                                 mld_melding_datum,
                                 mld_alg_locatie_key,
                                 mld_melding_omschrijving,
                                 mld_melding_status,
                                 mld_stdmelding_key,
                                 prs_perslid_key,
                                 prs_perslid_key_voor,
                                 prs_kostenplaats_key,
                                 mld_melding_spoed)
             VALUES (
                 'MLD',
                 v_mld_meldbron_key,
                 SYSDATE,
                 2, -- Provinciehuis Provincie Noord Brabant, alg_locatie_key=2
                 SUBSTR (
                        psubject
                     || CHR (13)
                     || REPLACE (
                            SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)),
                            CHR (13) || CHR (10) || CHR (13) || CHR (10),
                            CHR (13) || CHR (10)),
                     1,
                     4000),                    -- verwijder onnodige witregels
                 NULL,
                 defaultstdmelding,
                 sender,
                 sender,
                 kostenplaats,
                 3)
          RETURNING mld_melding_key
               INTO v_mldkey;

        BEGIN
            -- Vullen van kenmerk Model omschrijving (key = 9564) voor CYO aanvraag tablet (mld_key 7441)
            IF     v_model_omschrijving IS NOT NULL
               AND defaultstdmelding = '7721'
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                         VALUES (v_mldkey,
                                 9564,
                                 SUBSTR (v_model_omschrijving, 1, 40));
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                fac.writelog (
                    'PROCESSEMAIL',
                    'W',
                    'Veld Model omschrijving (key = 9564) kon niet opgeslagen worden.',
                    SUBSTR (v_model_omschrijving, 1, 100));
        END;

        BEGIN
            -- Vullen van kenmerk Plus/standaard (key = 9565) voor CYO aanvraag tablet (mld_key 7441)
            IF v_plus_standaard IS NOT NULL AND defaultstdmelding = '7721'
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                         VALUES (v_mldkey,
                                 9565,
                                 SUBSTR (v_plus_standaard, 1, 30));
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                fac.writelog (
                    'PROCESSEMAIL',
                    'W',
                    'Veld Plus/standaard (key = 9565) kon niet opgeslagen worden.',
                    SUBSTR (v_plus_standaard, 1, 100));
        END;

        BEGIN
            -- Vullen van kenmerk Eigen bijdrag (key = 9566) voor CYO aanvraag tablet (mld_key 7441)
            IF v_eigen_bijdrage IS NOT NULL AND defaultstdmelding = '7721'
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                     VALUES (v_mldkey, 9566, SUBSTR (v_eigen_bijdrage, 1, 8));
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                fac.writelog (
                    'PROCESSEMAIL',
                    'W',
                    'Veld Eigen bijdrag (key = 9566) kon niet opgeslagen worden.',
                    SUBSTR (v_eigen_bijdrage, 1, 100));
        END;

        BEGIN
            -- Vullen van kenmerk Model omschrijving (key = 9561) voor CYO aanvraag telefoon (mld_key 7442)
            IF     v_model_omschrijving IS NOT NULL
               AND defaultstdmelding = '7701'
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                         VALUES (v_mldkey,
                                 9561,
                                 SUBSTR (v_model_omschrijving, 1, 40));
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                fac.writelog (
                    'PROCESSEMAIL',
                    'W',
                    'Veld Model omschrijving (key = 9561) kon niet opgeslagen worden.',
                    SUBSTR (v_model_omschrijving, 1, 100));
        END;

        BEGIN
            -- Vullen van kenmerk Plus/standaard (key = 9562) voor CYO aanvraag telefoon (mld_key 7442)
            IF v_plus_standaard IS NOT NULL AND defaultstdmelding = '7701'
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                         VALUES (v_mldkey,
                                 9562,
                                 SUBSTR (v_plus_standaard, 1, 30));
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                fac.writelog (
                    'PROCESSEMAIL',
                    'W',
                    'Veld Plus/standaard (key = 9562) kon niet opgeslagen worden.',
                    SUBSTR (v_plus_standaard, 1, 100));
        END;

        BEGIN
            -- Vullen van kenmerk Eigen bijdrag (key = 9563) voor CYO aanvraag telefoon (mld_key 7442)
            IF v_eigen_bijdrage IS NOT NULL AND defaultstdmelding = '7701'
            THEN
                INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                                mld_kenmerk_key,
                                                mld_kenmerkmelding_waarde)
                     VALUES (v_mldkey, 9563, SUBSTR (v_eigen_bijdrage, 1, 8));
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                fac.writelog (
                    'PROCESSEMAIL',
                    'W',
                    'Veld Eigen bijdrag (key = 9563) kon niet opgeslagen worden.',
                    SUBSTR (v_eigen_bijdrage, 1, 100));
        END;

        mld.setmeldingstatus (v_mldkey, 2, sender);

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


    IF errormsg IS NOT NULL
    THEN
        INSERT INTO fac_result (fac_result_sessionid,
                                fac_result_naam,
                                fac_result_waarde)
             VALUES (psessionid, 'errormsg', errormsg);
    END IF;
EXCEPTION
    WHEN OTHERS
    THEN
        fac.writelog (
            'PROCESSEMAIL',
            'W',
               'Mail kon niet verwerkt worden afzender: '
            || pfrom
            || '['
            || errormsg
            || '-'
            || v_hint
            || ']',
               'OTHERS (error '
            || SQLCODE
            || '/'
            || SUBSTR (SQLERRM, 1, 100)
            || ')');

        -- bewaar ook even de mail die ontvangen is.
        fac.writelog ('PROCESSEMAIL',
                      'I',
                      SUBSTR (pbody, 1, 900),
                      '');

        INSERT INTO fac_result (fac_result_sessionid,
                                fac_result_naam,
                                fac_result_waarde)
                 VALUES (
                     psessionid,
                     'errormsg',
                     'Database fout - Neem contact op met uw systeembeheerder');
END;
/

-- view voor zoekfunctie op brain

CREATE OR REPLACE VIEW pnbr_v_rap_brain_search
AS
    SELECT sd.ins_srtdiscipline_prefix,
           sd.ins_srtdiscipline_omschrijving,
           d.ins_discipline_omschrijving,
           mld_stdmelding_omschrijving,
           mld_stdmelding_hint,
              'https://pnbr.facilitor.nl/?u=61EsxN5AJI2Yf4Dq&mld_defaultstdmelding='
           || mld_stdmelding_key    facilitor_link
      FROM mld_stdmelding     std,
           mld_discipline     d,
           ins_srtdiscipline  sd,
           fac_groeprechten   gr
     WHERE     std.mld_ins_discipline_key = d.ins_discipline_key
           AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
           AND gr.ins_discipline_key = d.ins_discipline_key
           AND gr.fac_functie_key = 2                                -- MLDUSE
           AND gr.fac_groep_key = 1                                -- _default
           AND std.mld_stdmelding_verwijder IS NULL
           AND COALESCE (std.mld_stdmelding_notfrontend, 0) = 0;


--- Tbv eigen tabel met nog actieve kosten plaatsen

CREATE OR REPLACE VIEW PNBR_V_KOSTENPLAATSEN
(
    PRS_KOSTENPLAATS_KEY,
    PRS_KOSTENPLAATS,
    PRS_KOSTENPLAATS_VERWIJDER
)
AS
    SELECT prs_kostenplaats_key,
           prs_kostenplaats_nr || ' - ' || prs_kostenplaats_omschrijving,
           COALESCE (prs_kostenplaats_verwijder, prs_kostenplaats_eind)
      FROM prs_kostenplaats k;

--- Overzicht met kunstuitleen tbv kenmerkdomein

CREATE OR REPLACE VIEW PNBR_V_KUNST_AANVRAGEN
(
    MLD_MELDING_KEY,
    MLD_MELDING_NUMMER
)
AS
    SELECT m.mld_melding_key,
           sd.ins_srtdiscipline_prefix || m.mld_melding_key
      FROM mld_melding         m,
           mld_stdmelding      sm,
           ins_tab_discipline  d,
           ins_srtdiscipline   sd
     WHERE     m.mld_stdmelding_key = 4201
           AND m.mld_melding_status NOT IN (1, 5, 7)
           AND m.mld_stdmelding_key = sm.mld_stdmelding_key
           AND sm.mld_ins_discipline_key = d.ins_discipline_key
           AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key;

--- Portal menu item 'Kunst uitleen'
-- Overzicht 'KUNST: Kunstuitleen'

CREATE OR REPLACE VIEW PNBR_V_RAP_KUNST_UITLEEN
(
    FCLT_F_OBJECT,
    TECHNIEK,
    ONDERWERP,
    FCLT_F_KUNSTENAAR,
    FCLT_F_TITEL,
    MATERIAAL,
    GESIGNEERD,
    HOOGTE,
    BREEDTE,
    HTML_FOTO,
    VERKRIJGINGSINFORMATIE,
    TAXATIEWAARDE,
    RUIMTE,
    STATUS,
    RESERVERING,
    AANVRAAGNR,
    STATUS_SELECTIE,
    OBJECT_KEY
)
AS
    SELECT o.ins_deel_omschrijving,
           (SELECT fac_usrdata_omschr
              FROM ins_kenmerkdeel    ikd,
                   ins_kenmerk        ik,
                   ins_srtkenmerk     isk,
                   fac_kenmerkdomein  kd,
                   fac_usrdata        ud
             WHERE     ikd.ins_kenmerk_key = 107
                   AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                   AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = isk.fac_kenmerkdomein_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                   AND o.ins_deel_key = ikd.ins_deel_key)
               techniek,
           (SELECT fac_usrdata_omschr
              FROM ins_kenmerkdeel    ikd,
                   ins_kenmerk        ik,
                   ins_srtkenmerk     isk,
                   fac_kenmerkdomein  kd,
                   fac_usrdata        ud
             WHERE     ikd.ins_kenmerk_key = 1382
                   AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                   AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = isk.fac_kenmerkdomein_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                   AND o.ins_deel_key = ikd.ins_deel_key)
               onderwerp,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 102
                   AND o.ins_deel_key = ikd.ins_deel_key)
               naam_kunstenaar,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 104
                   AND o.ins_deel_key = ikd.ins_deel_key)
               titel,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 110
                   AND o.ins_deel_key = ikd.ins_deel_key)
               materiaal,
           (SELECT fac_usrdata_omschr
              FROM ins_kenmerkdeel    ikd,
                   ins_kenmerk        ik,
                   ins_srtkenmerk     isk,
                   fac_kenmerkdomein  kd,
                   fac_usrdata        ud
             WHERE     ikd.ins_kenmerk_key = 112
                   AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                   AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = isk.fac_kenmerkdomein_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                   AND o.ins_deel_key = ikd.ins_deel_key)
               gesigneerd,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 119
                   AND o.ins_deel_key = ikd.ins_deel_key)
               hoogte,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 120
                   AND o.ins_deel_key = ikd.ins_deel_key)
               breedte,
           DECODE (
               (SELECT ins_kenmerkdeel_waarde
                  FROM ins_kenmerkdeel ikd
                 WHERE     ins_kenmerk_key = 109
                       AND o.ins_deel_key = ikd.ins_deel_key),
               NULL, 'Geen foto',
                  '<img  src="https://pnbr.facilitor.nl/api2/objects/'
               || ins_deel_key
               || '/attachments/109/'
               || (SELECT ins_kenmerkdeel_waarde
                     FROM ins_kenmerkdeel ikd
                    WHERE     ins_kenmerk_key = 109
                          AND o.ins_deel_key = ikd.ins_deel_key)
               || '" height="128">')
               foto,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 125
                   AND o.ins_deel_key = ikd.ins_deel_key)
               verkrijgingsinformatie,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 132
                   AND o.ins_deel_key = ikd.ins_deel_key)
               taxatiewaarde,
              r.alg_ruimte_aanduiding
           || ' ('
           || r.alg_ruimte_omschrijving
           || ')',
           DECODE (
               r.alg_ruimte_key,
               1614, 'Beschikbaar',
                  'Uitgeleend'
               || ' sinds: '
               || (SELECT ins_kenmerkdeel_waarde
                     FROM ins_kenmerkdeel ikd
                    WHERE     ins_kenmerk_key = 1363
                          AND o.ins_deel_key = ikd.ins_deel_key))
               status,
           (SELECT DECODE (ins_kenmerkdeel_waarde, 1, 'Gereserveerd', NULL)
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 1342
                   AND o.ins_deel_key = ikd.ins_deel_key)
               reservering,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 1343
                   AND o.ins_deel_key = ikd.ins_deel_key)
               aanvraagnr,
           DECODE (r.alg_ruimte_key, 1614, 'Beschikbaar', 'Uitgeleend')
               status_selectie,
           o.ins_deel_key
      FROM ins_deel o, alg_v_ruimte_gegevens r, ins_srtdeel s
     WHERE     s.ins_srtdeel_key = 41
           AND o.ins_deel_verwijder IS NULL
           AND o.ins_alg_ruimte_key = r.alg_ruimte_key
           AND o.ins_srtdeel_key = s.ins_srtdeel_key
           AND (SELECT fac_usrdata_omschr
                  FROM ins_kenmerkdeel    ikd,
                       ins_kenmerk        ik,
                       ins_srtkenmerk     isk,
                       fac_kenmerkdomein  kd,
                       fac_usrdata        ud
                 WHERE     ikd.ins_kenmerk_key = 115
                       AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                       AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                       AND kd.fac_kenmerkdomein_key =
                           isk.fac_kenmerkdomein_key
                       AND ud.fac_usrtab_key = kd.fac_usrtab_key
                       AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                       AND o.ins_deel_key = ikd.ins_deel_key) =
               'Ja'
           AND o.INS_DEEL_KEY NOT IN
                   (SELECT o.ins_deel_key
                      FROM ins_deel o, alg_v_ruimte_gegevens r, ins_srtdeel s
                     WHERE     s.ins_srtdeel_key = 41
                           AND o.ins_deel_verwijder IS NULL
                           AND o.ins_alg_ruimte_key = r.alg_ruimte_key
                           AND o.ins_srtdeel_key = s.ins_srtdeel_key
                           AND (SELECT fac_usrdata_omschr
                                  FROM ins_kenmerkdeel    ikd,
                                       ins_kenmerk        ik,
                                       ins_srtkenmerk     isk,
                                       fac_kenmerkdomein  kd,
                                       fac_usrdata        ud
                                 WHERE     ikd.ins_kenmerk_key = 115
                                       AND ik.ins_kenmerk_key =
                                           ikd.ins_kenmerk_key
                                       AND ik.ins_srtkenmerk_key =
                                           isk.ins_srtkenmerk_key
                                       AND kd.fac_kenmerkdomein_key =
                                           isk.fac_kenmerkdomein_key
                                       AND ud.fac_usrtab_key =
                                           kd.fac_usrtab_key
                                       AND ikd.ins_kenmerkdeel_waarde =
                                           ud.fac_usrdata_key
                                       AND o.ins_deel_key = ikd.ins_deel_key) =
                               'Ja'
                           -- objecten die niet in het depot staan
                           AND r.alg_ruimte_key <> 1614
                           --- objecten die al gereserveerd zijn
                           AND (SELECT DECODE (ins_kenmerkdeel_waarde,
                                               1, 'Gereserveerd',
                                               NULL)
                                  FROM ins_kenmerkdeel ikd
                                 WHERE     ins_kenmerk_key = 1342
                                       AND o.ins_deel_key = ikd.ins_deel_key)
                                   IS NOT NULL);

--- Portal menu item 'Verzoek inname kunst'
-- Overzicht 'KUNST: Kunstinname'

CREATE OR REPLACE VIEW PNBR_V_RAP_KUNST_INNAME
(
    FCLT_F_OBJECT,
    FCLT_F_KUNSTENAAR,
    FCLT_F_TITEL,
    MATERIAAL,
    GESIGNEERD,
    HOOGTE,
    BREEDTE,
    HTML_FOTO,
    VERKRIJGINGSINFORMATIE,
    TAXATIEWAARDE,
    RUIMTE,
    STATUS,
    RESERVERING,
    AANVRAAGNR,
    OBJECT_KEY
)
AS
    SELECT o.ins_deel_omschrijving,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 102
                   AND o.ins_deel_key = ikd.ins_deel_key)
               naam_kunstenaar,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 104
                   AND o.ins_deel_key = ikd.ins_deel_key)
               titel,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 110
                   AND o.ins_deel_key = ikd.ins_deel_key)
               materiaal,
           (SELECT fac_usrdata_omschr
              FROM ins_kenmerkdeel    ikd,
                   ins_kenmerk        ik,
                   ins_srtkenmerk     isk,
                   fac_kenmerkdomein  kd,
                   fac_usrdata        ud
             WHERE     ikd.ins_kenmerk_key = 112
                   AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                   AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = isk.fac_kenmerkdomein_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                   AND o.ins_deel_key = ikd.ins_deel_key)
               gesigneerd,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 119
                   AND o.ins_deel_key = ikd.ins_deel_key)
               hoogte,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 120
                   AND o.ins_deel_key = ikd.ins_deel_key)
               breedte,
           DECODE (
               (SELECT ins_kenmerkdeel_waarde
                  FROM ins_kenmerkdeel ikd
                 WHERE     ins_kenmerk_key = 109
                       AND o.ins_deel_key = ikd.ins_deel_key),
               NULL, 'Geen foto',
                  '<img  src="https://pnbr.facilitor.nl/api2/objects/'
               || ins_deel_key
               || '/attachments/109/'
               || (SELECT ins_kenmerkdeel_waarde
                     FROM ins_kenmerkdeel ikd
                    WHERE     ins_kenmerk_key = 109
                          AND o.ins_deel_key = ikd.ins_deel_key)
               || '" height="128">')
               foto,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 125
                   AND o.ins_deel_key = ikd.ins_deel_key)
               verkrijgingsinformatie,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 132
                   AND o.ins_deel_key = ikd.ins_deel_key)
               taxatiewaarde,
              r.alg_ruimte_aanduiding
           || ' ('
           || r.alg_ruimte_omschrijving
           || ')',
           DECODE (
               r.alg_ruimte_key,
               1614, 'Beschikbaar',
                  'Uitgeleend'
               || ' sinds: '
               || (SELECT ins_kenmerkdeel_waarde
                     FROM ins_kenmerkdeel ikd
                    WHERE     ins_kenmerk_key = 1363
                          AND o.ins_deel_key = ikd.ins_deel_key))
               status,
           (SELECT DECODE (ins_kenmerkdeel_waarde, 1, 'Gereserveerd', NULL)
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 1282
                   AND o.ins_deel_key = ikd.ins_deel_key)
               reservering,
           (SELECT ins_kenmerkdeel_waarde
              FROM ins_kenmerkdeel ikd
             WHERE     ins_kenmerk_key = 1342
                   AND o.ins_deel_key = ikd.ins_deel_key)
               aanvraagnr,
           o.ins_deel_key
      FROM ins_deel o, alg_v_ruimte_gegevens r, ins_srtdeel s
     WHERE     s.ins_srtdeel_key = 41
           AND o.ins_deel_verwijder IS NULL
           AND o.ins_alg_ruimte_key = r.alg_ruimte_key
           AND o.ins_srtdeel_key = s.ins_srtdeel_key
           AND (SELECT fac_usrdata_omschr
                  FROM ins_kenmerkdeel    ikd,
                       ins_kenmerk        ik,
                       ins_srtkenmerk     isk,
                       fac_kenmerkdomein  kd,
                       fac_usrdata        ud
                 WHERE     ikd.ins_kenmerk_key = 115
                       AND ik.ins_kenmerk_key = ikd.ins_kenmerk_key
                       AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                       AND kd.fac_kenmerkdomein_key =
                           isk.fac_kenmerkdomein_key
                       AND ud.fac_usrtab_key = kd.fac_usrtab_key
                       AND ikd.ins_kenmerkdeel_waarde = ud.fac_usrdata_key
                       AND o.ins_deel_key = ikd.ins_deel_key) =
               'Ja'
           AND r.alg_ruimte_key <> 1614;

CREATE OR REPLACE VIEW PNBR_V_RUIMTE_GEGEVENS
(
    RUIMTE_KEY,
    OMSCHRIJVING
)
AS
    SELECT r.alg_ruimte_key,
              r.alg_ruimte_aanduiding
           || ' ('
           || r.alg_ruimte_omschrijving
           || ')'
      FROM alg_v_ruimte_gegevens r;

-- PNBR#52789 - Rapportage bedrijfscatering

CREATE OR REPLACE VIEW PNBR_V_RAP_CATERING
(
    RESERVERINGSNUMMER,
    AFLEVERADRES,
    ADRES,
    LOCATIE,
    RUIMTE,
    RUIMTENR,
    KOSTENPLAATS,
    KOSTENPLAATS_OMSCHRIJVING,
    PERSOONSNAAM,
    AFDELING,
    COSTCENTER,
    DATUM,
    TIJD_RESERVERING_VAN,
    TIJD_RESERVERING_TOT,
    AANTAL_PERSONEN,
    OMSCHRIJVING,
    OPMERKING,
    TIJD_LEVERING,
    BESTELNR,
    ARTIKELNR,
    ARTIKEL_OMSCHRIJVING,
    ARTIKEL_AANTAL,
    ARTIKEL_PRIJS,
    TOTAAL_PRIJS,
    BTW,
    ARTIKEL_PRIJS_BTW,
    TOTAAL_PARIJS_BTW,
    kn_besnr_cateraar
)
AS
    SELECT (x.res_reservering_key || '/' || x.res_rsv_ruimte_volgnr)
               reserveringsnummer,
           DECODE (
               x.alg_ruimte_key,
               NULL, 'Onbekend',
                  rg.alg_locatie_code
               || '-'
               || rg.alg_gebouw_upper
               || '-'
               || rg.alg_verdieping_code
               || '-'
               || rg.alg_ruimte_nr
               || ' ('
               || rg.alg_ruimte_omschrijving
               || ')')
               afleveradres,
           rg.alg_locatie_adres
               adres,
           rg.alg_locatie_omschrijving
               locatie,
           rg.alg_ruimte_omschrijving
               ruimte,
           rg.alg_ruimte_nr
               ruimtenr,
           x.prs_kostenplaats_nr
               kostenplaats,
           x.prs_kostenplaats_omschrijving
               kostenplaats_omschrijving,
           x.prs_perslid_naam_full,
           (x.prs_afdeling_upper || '-' || x.prs_afdeling_omschrijving)
               afdeling,
           (SELECT MAX (kw.res_kenmerkreservering_waarde)
              FROM res_kenmerkwaarde kw, res_kenmerk rk
             WHERE     kw.res_rsv_ruimte_key = x.res_rsv_ruimte_key
                   AND kw.res_kenmerkwaarde_verwijder IS NULL
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key
                   AND rk.res_srtkenmerk_key = 1)
               costcenter,
           x.res_rsv_artikel_levering
               datum,
           TO_CHAR (x.res_rsv_ruimte_van, 'hh24:mi')
               tijd_ruimtereservering,
           TO_CHAR (x.res_rsv_ruimte_tot, 'hh24:mi')
               tijd_einde_ruimtereservering,
           x.res_rsv_ruimte_bezoekers,
           x.res_rsv_ruimte_omschrijving,
           x.res_rsv_ruimte_opmerking,
           TO_CHAR (x.res_rsv_artikel_levering, 'hh24:mi')
               tijd_levering,
           x.bestelnr,
           x.res_artikel_nr,
           x.res_artikel_omschrijving,
           x.res_rsv_artikel_aantal,
           x.res_artikel_prijs,
           ROUND ((x.res_rsv_artikel_aantal) * (x.res_artikel_prijs), 5)
               prijs_totaal_btw,
           TO_NUMBER (
               DECODE (x.res_artikel_btw, NULL, '6', x.res_artikel_btw))
               btw,
           ROUND (
                 x.res_artikel_prijs
               * (  1
                  + (  TO_NUMBER (
                           DECODE (x.res_artikel_btw,
                                   NULL, '6',
                                   x.res_artikel_btw))
                     / 100)),
               2)
               res_artikel_prijs_btw,
           ROUND (
                 x.res_artikel_prijs
               * (  1
                  + (  TO_NUMBER (
                           DECODE (x.res_artikel_btw,
                                   NULL, '6',
                                   x.res_artikel_btw))
                     / 100))
               * x.res_rsv_artikel_aantal,
               2)
               prijs_totaal_btw,
           (SELECT fac_usrdata_omschr     waarde
              FROM res_kenmerkwaarde kw, fac_usrdata ud, res_kenmerk rk
             WHERE     rk.res_srtkenmerk_key = 441
                   AND kw.res_kenmerk_key = rk.res_kenmerk_key
                   AND fac.safe_to_number (res_kenmerkreservering_waarde) =
                       fac_usrdata_key
                   AND x.res_rsv_ruimte_key = kw.res_rsv_ruimte_key)
               kn_bes_cateraar
      FROM (SELECT rra.res_rsv_artikel_verwerkt,
                   COALESCE (rar1.alg_ruimte_key,
                             rar2.alg_ruimte_key,
                             rrr.alg_ruimte_key)             alg_ruimte_key,
                   rra.res_rsv_artikel_levering,
                   rrr.res_rsv_ruimte_key,
                   rrr.res_reservering_key,
                   rrr.res_rsv_ruimte_volgnr,
                   rrr.res_rsv_ruimte_van,
                   rrr.res_rsv_ruimte_tot,
                   rrr.res_rsv_ruimte_bezoekers,
                   rrr.res_rsv_ruimte_omschrijving,
                   rrr.res_rsv_ruimte_opmerking,
                   rrr.res_rsv_ruimte_totaal,
                   td.ins_discipline_volgnr, -- Ter bepaling leverancier/DEPRECATED!
                   b.prs_bedrijf_naam,
                   a.prs_afdeling_key,
                   a.prs_afdeling_naam,
                   rra.res_artikel_nr,
                   (   rra.res_artikel_omschrijving
                    || ' ('
                    || rra.res_artikel_eenheid
                    || ')')                                  res_artikel_omschrijving,
                   rra.res_rsv_artikel_prijs,
                   rra.res_artikel_prijs,
                   rra.res_rsv_artikel_aantal,
                   rra.btw,
                   rra.res_artikel_btw,
                   pf.prs_perslid_naam_full,
                   paf.prs_afdeling_omschrijving,
                   paf.prs_afdeling_upper,
                   k.prs_kostenplaats_nr,
                   k.prs_kostenplaats_omschrijving,
                   (SELECT rrk.res_kenmerkreservering_waarde
                      FROM res_kenmerkwaarde rrk
                     WHERE     rrk.res_rsv_ruimte_key =
                               rrr.res_rsv_ruimte_key
                           AND rrk.res_kenmerk_key = 281)    bestelnr
              FROM res_rsv_ruimte               rrr,
                   (SELECT rra.res_rsv_ruimte_key,
                           rra.res_rsv_artikel_verwerkt,
                           rra.res_rsv_artikel_levering,
                           ra.res_artikel_nr,
                           ra.res_artikel_omschrijving,
                           ra.res_artikel_eenheid,
                           ra.res_artikel_prijs,
                           rra.res_rsv_artikel_prijs,
                           rra.res_rsv_artikel_aantal,
                           rra.res_rsv_artikel_btw     btw,
                           ra.res_discipline_key,
                           ra.res_artikel_btw
                      FROM res_rsv_artikel rra, res_artikel ra
                     WHERE rra.res_artikel_key = ra.res_artikel_key) rra,
                   res_discipline               td,
                   res_disc_params              dp,
                   prs_bedrijf                  b,
                   prs_afdeling                 a,
                   prs_v_afdeling_perslid       paf,
                   res_ruimte_opstelling        rro,
                   (  SELECT res_ruimte_key,
                             MAX (alg_ruimte_key)     alg_ruimte_key
                        FROM res_alg_ruimte
                       WHERE res_alg_ruimte_verwijder IS NULL
                    GROUP BY res_ruimte_key) rar1,
                   (  SELECT res_ruimte_key,
                             MAX (alg_ruimte_key)     alg_ruimte_key
                        FROM res_alg_ruimte
                       WHERE res_alg_ruimte_verwijder IS NOT NULL
                    GROUP BY res_ruimte_key) rar2,
                   alg_v_allonroerendgoed       aog,
                   prs_v_perslid_fullnames_all  pf,
                   prs_kostenplaats             k
             WHERE     rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
                   AND rra.res_discipline_key = td.ins_discipline_key
                   AND rrr.res_rsv_ruimte_verwijder IS NULL
                   --- AND rrr.res_activiteit_key != 50 -- PNBR#72235 activiteit Afhalen catering toch zichtbaar maken
                   AND td.ins_discipline_key = dp.res_ins_discipline_key
                   AND dp.prs_bedrijf_key = b.prs_bedrijf_key(+)
                   AND paf.prs_perslid_key = pf.prs_perslid_key
                   AND a.prs_afdeling_parentkey IS NULL
                   AND b.prs_leverancier_nr = a.prs_afdeling_naam(+)
                   AND rrr.res_ruimte_opstel_key =
                       rro.res_ruimte_opstel_key(+)
                   AND rro.res_ruimte_key = rar1.res_ruimte_key(+)
                   AND rro.res_ruimte_key = rar2.res_ruimte_key(+)
                   AND COALESCE (rar1.alg_ruimte_key,
                                 rar2.alg_ruimte_key,
                                 rrr.alg_ruimte_key) =
                       aog.alg_ruimte_key
                   AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
                   AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+))
           x
           LEFT JOIN alg_v_ruimte_gegevens_all rg
               ON x.alg_ruimte_key = rg.alg_ruimte_key;



CREATE OR REPLACE VIEW PNBR_V_BEDRIJF
(
    bedrijf_key,
    naam,
    eind_datum
)
AS
    SELECT prs_bedrijf_key, prs_bedrijf_naam, prs_bedrijf_verwijder
      FROM PRS_BEDRIJF;



-- View voor QR Codes

CREATE OR REPLACE VIEW PNBR_V_INS_QRC_OBJECT
(
    HIDE_F_SORT,
    LOCATIE_CODE,
    FCLT_F_LOCATIE,
    FCLT_F_GEBOUW,
    FCLT_F_PLAATS,
    RUIMTENR,
    FCLT_F_DISCIPLINE,
    FCLT_F_OBJECTGROEP,
    FCLT_F_OBJECTSOORT,
    FCLT_F_IDENTIFICATIE,
    FCLT_F_BOOKMARK,
    INS_DEEL_KEY,
    INS_SRTDEEL_KEY,
    [REDACTED],
    [REDACTED],
    INS_ALG_RUIMTE_TYPE,
    INS_ALG_RUIMTE_KEY,
    HIDE_F_BOOKMARK_ID
)
AS
    SELECT i.ins_deel_omschrijving
               hide_f_sort,
           l.alg_locatie_code,
           l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
               fclt_f_locatie,
           o.alg_gebouw_omschrijving
               fclt_f_gebouw,
           SUBSTR (o.alg_plaatsaanduiding, 13)
               fclt_f_plaats,
           o.alg_ruimte_nr,
           d.ins_discipline_omschrijving
               fclt_f_discipline,
           g.ins_srtgroep_omschrijving
               fclt_f_objectgroep,
           s.ins_srtdeel_omschrijving
               fclt_f_objectsoort,
           i.ins_deel_omschrijving
               fclt_f_identificatie,
           b.fac_bookmark_naam
               fclt_f_bookmark,
           i.ins_deel_key,
           s.ins_srtdeel_key,
           i.ins_discipline_key
               fclt_3d_discipline_key,
           l.alg_locatie_key
               fclt_3d_locatie_key,
           i.ins_alg_ruimte_type,
           i.ins_alg_ruimte_key,
           b.fac_bookmark_id
               hide_f_bookmark_id
      FROM ins_deel             i,
           ins_v_alg_overzicht  o,
           ins_srtdeel          s,
           ins_srtgroep         g,
           ins_discipline       d,
           alg_locatie          l,
           fac_bookmark         b
     WHERE     b.fac_bookmark_path = 'appl/pda/ins_deel.asp'
           AND COALESCE (b.fac_bookmark_expire, SYSDATE + 1) > SYSDATE
           AND ins_deel_verwijder IS NULL
           AND COALESCE (i.ins_deel_vervaldatum, SYSDATE + 1) > SYSDATE
           AND i.ins_deel_module = 'INS'
           AND i.ins_deel_parent_key IS NULL
           AND s.ins_srtdeel_key = i.ins_srtdeel_key
           AND g.ins_srtgroep_key = s.ins_srtgroep_key
           AND d.ins_discipline_key = g.ins_discipline_key
           AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
           AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
           AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
           AND o.alg_locatie_key = i.ins_alg_locatie_key
           AND l.alg_locatie_key = i.ins_alg_locatie_key;


CREATE OR REPLACE VIEW pnbr_v_programmamanagers
(
    prs_perslid_key,
    prs_perslid_verwijder,
    prs_perslid_naam
)
AS
      SELECT p.prs_perslid_key,
             p.prs_perslid_verwijder,
             n.prs_perslid_naam_full || ' - ' || f.prs_srtperslid_omschrijving
        FROM prs_perslid p, prs_srtperslid f, prs_v_perslid_fullnames n
       WHERE     p.prs_srtperslid_key = f.prs_srtperslid_key
             AND (   f.prs_srtperslid_upper LIKE '%PROGRAMMAMANAGER%'
                  OR f.prs_srtperslid_upper LIKE '%PROGR.MAN%'
                  OR f.prs_srtperslid_upper LIKE 'H-MANGR%'
                  OR f.prs_srtperslid_upper LIKE 'H-MANAGER%'
                  OR f.prs_srtperslid_upper LIKE 'PROVINCIESECRETARIS / ALGEMEEN DIRECTEUR'
                  OR f.prs_srtperslid_upper LIKE
                         '%KABINETSCHEF COMMISSARIS VAN DE KONING%'
                  OR f.prs_srtperslid_upper LIKE '%GRIFFIER%'
                  OR f.prs_srtperslid_upper LIKE '%CHIEF INFORMATION OFFICER%'
                  OR f.prs_srtperslid_upper LIKE '%CONCERNCONTROLLER%')
             AND n.prs_perslid_key = p.prs_perslid_key
    ORDER BY prs_perslid_naam_full;

CREATE OR REPLACE VIEW pnbr_v_h_managers
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_VERWIJDER,
    PRS_PERSLID_NAAM
)
AS
      SELECT p.prs_perslid_key,
             p.prs_perslid_verwijder,
             n.prs_perslid_naam_full || ' - ' || f.prs_srtperslid_omschrijving
        FROM prs_perslid p, prs_srtperslid f, prs_v_perslid_fullnames n
       WHERE     p.prs_srtperslid_key = f.prs_srtperslid_key
             AND (   f.prs_srtperslid_upper LIKE 'H-MANGR%'
                  OR f.prs_srtperslid_upper LIKE 'H-MANAGER%'
                  OR f.prs_srtperslid_upper LIKE 'PROVINCIESECRETARIS / ALGEMEEN DIRECTEUR'
                  OR f.prs_srtperslid_upper LIKE
                         '%KABINETSCHEF COMMISSARIS VAN DE KONING%'
                  OR f.prs_srtperslid_upper LIKE '%GRIFFIER%'
                  OR f.prs_srtperslid_upper LIKE '%CHIEF INFORMATION OFFICER%'
                  OR f.prs_srtperslid_upper LIKE '%CONCERNCONTROLLER%')
             AND n.prs_perslid_key = p.prs_perslid_key
    ORDER BY prs_perslid_naam_full;

CREATE OR REPLACE VIEW pnbr_v_programma_h_managers
(
    PRS_PERSLID_KEY,
    PRS_PERSLID_VERWIJDER,
    PRS_PERSLID_NAAM
)
AS
      SELECT p.prs_perslid_key,
             p.prs_perslid_verwijder,
             n.prs_perslid_naam_full || ' - ' || f.prs_srtperslid_omschrijving
        FROM prs_perslid p, prs_srtperslid f, prs_v_perslid_fullnames n
       WHERE     p.prs_srtperslid_key = f.prs_srtperslid_key
             AND (   f.prs_srtperslid_upper LIKE '%PROGRAMMAMANAGER%'
                  OR f.prs_srtperslid_upper LIKE 'H-MANGR%'
                  OR f.prs_srtperslid_upper LIKE 'H-MANAGER%'
                  OR f.prs_srtperslid_upper LIKE '%PROGR.MAN%'
                  OR f.prs_srtperslid_upper LIKE 'PROVINCIESECRETARIS / ALGEMEEN DIRECTEUR'
                  OR f.prs_srtperslid_upper LIKE
                         '%KABINETSCHEF COMMISSARIS VAN DE KONING%'
                  OR f.prs_srtperslid_upper LIKE '%GRIFFIER%'
                  OR f.prs_srtperslid_upper LIKE '%GEDEP%'
                  OR f.prs_srtperslid_upper LIKE '%RO TEAMLEIDER BRABANTSTAD%'
                  OR f.prs_srtperslid_upper LIKE '%CHIEF INFORMATION OFFICER%'
                  OR f.prs_srtperslid_upper LIKE '%CONCERNCONTROLLER%'
                  )
             AND n.prs_perslid_key = p.prs_perslid_key
    ORDER BY prs_perslid_naam_full;

-- Import SAP bestelnummers

CREATE OR REPLACE PROCEDURE pnbr_import_bestelnr (p_import_key IN NUMBER)
AS
    CURSOR c_cursor IS
          SELECT *
            FROM fac_imp_file
           WHERE fac_import_key = p_import_key
        ORDER BY fac_imp_file_index;

    NEXT_RECORD             c_cursor%ROWTYPE;

    v_newline               VARCHAR2 (1000);
    v_field                 VARCHAR2 (100);
    v_fielddelimitor        VARCHAR2 (1);
    v_errormsg              VARCHAR (200);
    oracle_err_num          NUMBER;
    oracle_err_mes          VARCHAR2 (200);
    header_is_valid         NUMBER;
    v_empty                 VARCHAR2 (100);
    v_aanduiding            VARCHAR2 (200);

    -- de velden uit het importbestand
    v_leverancier           VARCHAR2 (100);
    v_naam                  VARCHAR2 (100);
    v_jaar                  VARCHAR2 (100);
    v_maand                 VARCHAR2 (100);
    v_bestelnummer          VARCHAR2 (100);
    v_bestelregel           VARCHAR2 (100);
    v_begrotingspost        VARCHAR2 (100);
    v_budgethouder          VARCHAR2 (100);
    v_budgethouder_naam     VARCHAR2 (100);
    v_budgethouder_key      NUMBER (10);
    v_bestelnummer_omschr   VARCHAR2 (100);
BEGIN
    v_fielddelimitor := ';';

    header_is_valid := 0;

    DELETE FROM fac_imp_kpn;

    FOR NEXT_RECORD IN c_cursor
    LOOP
        BEGIN
            v_aanduiding := '';

            v_newline := NEXT_RECORD.FAC_IMP_FILE_LINE;
            fac.imp_getfield (v_newline, v_fielddelimitor, v_leverancier);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_naam);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_jaar);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_maand);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_bestelnummer);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_bestelregel);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_begrotingspost);
            fac.imp_getfield (v_newline, v_fielddelimitor, v_budgethouder);
            fac.imp_getfield (v_newline,
                              v_fielddelimitor,
                              v_budgethouder_naam);

            IF (    header_is_valid = 0
                AND UPPER (v_leverancier) = 'LEVERANC.'
                AND UPPER (v_naam) = 'NAAM 1'
                AND UPPER (v_jaar) = 'JAAR'
                AND UPPER (v_maand) = 'MAAND'
                AND UPPER (v_bestelnummer) = 'BESTELNUMMER'
                AND UPPER (v_bestelregel) = 'BESTELNUMMER REGEL'
                AND UPPER (v_begrotingspost) = 'BEGROTINGSPOST'
                AND UPPER (v_budgethouder) = 'BUDG.HOUD'
                AND UPPER (v_budgethouder_naam) = 'NAAM BUDGETHOUDER')
            THEN
                header_is_valid := 1;
            ELSE
                v_aanduiding := v_bestelnummer;

                IF v_budgethouder IS NOT NULL
                THEN
                    BEGIN
                        SELECT prs_perslid_key
                          INTO v_budgethouder_key
                          FROM prs_perslid p
                         WHERE v_budgethouder = p.prs_perslid_oslogin;
                    EXCEPTION
                        WHEN NO_DATA_FOUND
                        THEN
                            v_budgethouder_key := NULL;

                            fac.imp_writelog (
                                p_import_key,
                                'E',
                                   v_aanduiding
                                || 'Budgethouder kan niet gevonden worden',
                                   'Budgethouder wordt leeg gemaakt ['
                                || v_budgethouder
                                || ']');
                    END;
                ELSE
                    v_budgethouder_key := NULL;
                END IF;

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

                v_bestelnummer_omschr :=
                    v_budgethouder_naam || '/' || v_bestelnummer;

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

                INSERT INTO fac_imp_kpn (prs_kostenplaats_nr,
                                         prs_kostenplaats_omschrijving,
                                         prs_kostenplaats_module,
                                         prs_kostenplaatsgrp_key,
                                         prs_perslid_key)
                     VALUES (v_bestelnummer,
                             v_bestelnummer_omschr,
                             'PRJ',
                             2, -- kostenplaatsgroep voor catering PO's voor combinatie validatie
                             v_budgethouder_key);
            END IF;
        END;
    END LOOP;

    IF (header_is_valid = 0)
    THEN
        fac.imp_writelog (
            p_import_key,
            'E',
            'Invalid import file',
            'Er is geen geldige Header aangetroffen en in het importbestand');
    END IF;

    DELETE FROM fac_imp_file
          WHERE fac_import_key = p_import_key;
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_errormsg,
                          '');
END pnbr_import_bestelnr;
/

CREATE OR REPLACE PROCEDURE pnbr_update_bestelnr (p_import_key IN NUMBER)
AS
    v_errormsg       VARCHAR (200);
    v_errorhint      VARCHAR (200);
    v_aanduiding     VARCHAR (200);
    oracle_err_mes   VARCHAR (200);
    oracle_err_num   NUMBER;

    CURSOR kpn_del IS
        SELECT *
          FROM prs_kostenplaats kp
         WHERE     kp.prs_kostenplaats_module = 'PRJ'
               AND UPPER (kp.prs_kostenplaats_omschrijving) LIKE '%SAP%'
               AND kp.prs_kostenplaats_upper NOT IN
                       (SELECT UPPER (imp_kp.prs_kostenplaats_nr)
                          FROM fac_imp_kpn imp_kp);
BEGIN
    fac_update_kpn (p_import_key);

    FOR rec IN kpn_del
    LOOP
        BEGIN
            v_aanduiding := rec.prs_kostenplaats_nr;
            v_errorhint := 'Bepalen vervallen kostenplaats';

            UPDATE prs_kostenplaats kp
               SET kp.prs_kostenplaats_verwijder = SYSDATE
             WHERE kp.prs_kostenplaats_key = rec.prs_kostenplaats_key;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                v_errormsg :=
                    'error ' || oracle_err_num || '/' || oracle_err_mes;
                fac.imp_writelog (p_import_key,
                                  'E',
                                  v_errormsg,
                                  v_errorhint || ' | ' || v_aanduiding);
        END;
    END LOOP;
END pnbr_update_bestelnr;
/

--- Genereren factuurregels voor catering

CREATE OR REPLACE PROCEDURE pnbr_select_res_cat (p_applname   IN VARCHAR2,
                                                 p_applrun    IN VARCHAR2)
AS
    v_aanduiding              VARCHAR2 (200);
    v_errorhint               VARCHAR2 (1000);
    v_errormsg                VARCHAR2 (1000);
    oracle_err_num            NUMBER;
    oracle_err_mes            VARCHAR2 (200);

    -- Stap 1: de gegevens voor de factuur verzamelen
    CURSOR c (c_tot DATE)
    IS
        SELECT rr.res_rsv_ruimte_key,
               rr.res_rsv_ruimte_van,
               rr.res_rsv_ruimte_key
                   res_ruimte_key,
               rr.res_reservering_key
                   res_key,
               rr.res_rsv_ruimte_volgnr
                   res_volgnr,
               rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
                   reservering,
               TO_CHAR (rr.res_rsv_ruimte_van, 'YYYYMM')
                   periode,
               k.prs_kostenplaats_nr
                   SAP_bestelnr,
               k.prs_kostenplaats_omschrijving
                   SAP_omschr,
               ks.prs_kostensoort_oms,
               DECODE (ks.prs_kostensoort_btw, 1, 'Incl', 'Excl')
                   btw,
               NVL (
                   (SELECT r.res_ruimte_nr
                      FROM res_ruimte_opstelling ro, res_ruimte r
                     WHERE     ro.res_ruimte_opstel_key =
                               rr.res_ruimte_opstel_key
                           AND r.res_ruimte_key = ro.res_ruimte_key), ---- NVL ipv coalesce aangepast nav Oracle bug #55835
                   (SELECT    'Kamer '
                           || alg_ruimte_nr
                           || ' ('
                           || alg_ruimte_omschrijving
                           || ')'
                      FROM alg_v_ruimte_gegevens rg
                     WHERE rg.alg_ruimte_key = rr.alg_ruimte_key))
                   ruimte,
               rr.res_rsv_ruimte_omschrijving
                   naam_bijeenkomst,
               ra.res_artikel_omschrijving,
               ra.res_artikel_eenheid,
               ra.res_artikel_prijs,
               ra.res_artikel_prijs_vast,
               rra.res_rsv_artikel_prijs,
               ra.res_artikel_btw,
               rra.res_rsv_artikel_aantal,
               COALESCE (rra.res_rsv_artikel_prijs,
                         ra.res_artikel_prijs * rra.res_rsv_artikel_aantal)
                   totaal_prijs,
               bo_stat.res_status_bo_omschrijving,
               fo_stat.res_status_fo_omschrijving
          FROM res_rsv_ruimte       rr,
               prs_kostenplaats     k,
               prs_kostenplaatsgrp  kg,
               res_rsv_artikel      rra,
               res_artikel          ra,
               res_status_bo        bo_stat,
               res_status_fo        fo_stat,
               res_discipline       di,
               prs_kostensoort      ks
         WHERE     kg.prs_kostenplaatsgrp_key(+) = k.prs_kostenplaatsgrp_key
               AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key
               AND rr.res_rsv_ruimte_dirtlevel = 0
               AND rr.res_rsv_ruimte_verwijder IS NULL
               AND rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
               AND rra.res_artikel_key = ra.res_artikel_key
               AND rr.res_status_bo_key = bo_stat.res_status_bo_key
               AND rr.res_status_fo_key = fo_stat.res_status_fo_key
               AND ra.res_discipline_key = di.ins_discipline_key
               AND ks.prs_kostensoort_key = di.prs_kostensoort_key
               AND COALESCE (rra.res_rsv_artikel_prijs, ra.res_artikel_prijs) <>
                   0
               AND bo_stat.res_status_bo_key = 5 -- alleen reserveringen met de status afgemeld
               AND rra.res_rsv_artikel_levering < c_tot
               -- AND  rra.res_rsv_artikel_levering   > to_date ('31-12-2018','dd-mm-yyyy')   AND  rra.res_rsv_artikel_levering   < to_date ('1-2-2019','dd-mm-yyyy')
               AND NOT EXISTS -- entry komt nog niet voor in de verkoopfactuurtabel
                       (SELECT fin_verkoopfactuur_key
                          FROM fin_verkoopfactuur vf
                         WHERE     vf.fin_verkoopfactuur_xmlnode =
                                   'reservering'
                               AND vf.fin_verkoopfactuur_refkey =
                                   rr.res_rsv_ruimte_key
                               AND COALESCE (vf.fin_verkoopfactuur_c4, 'NOP') =
                                   'catering');


    v_teller                  NUMBER;
    v_rap_count               NUMBER;
    v_kenmerk_key_laatste     NUMBER;
    v_ruimte_key_prev         NUMBER;
    v_verkoopfactuurkop_key   NUMBER;
    v_tot                     DATE;
    v_van                     DATE;
BEGIN
    v_teller := 0;
    v_rap_count := 0;

    v_aanduiding := 'Init';
    v_errormsg := 'Periode bepalen';

    -- Bepalen wanneer de laatste export was, datum laatste export staat in kolom d2
    SELECT TRUNC (MAX (fin_verkoopfactuur_d2))
      INTO v_van
      FROM fin_verkoopfactuur
     WHERE     fin_verkoopfactuur_datum IS NOT NULL
           AND fin_verkoopfactuur_c4 = 'catering';

    -- v_van :=  to_date ('1-1-2019', 'dd-mm-yyyy');

    -- Er wordt nu gerekend met een periode van 4 weken. Dit in overleg met Vermaat.
    v_tot := v_van + 28;

    DELETE imp_log
     WHERE imp_log_applicatie = p_applname;

    -- verwijder de factuurkop en de regels die nog niet definitief verwerkt zijn
    DELETE fin_verkoopfactuurkop
     WHERE fin_verkoopfactuurkop_key IN
               (SELECT fin_verkoopfactuurkop_key
                  FROM fin_verkoopfactuur
                 WHERE     fin_verkoopfactuur_datum IS NULL
                       AND fin_verkoopfactuur_c4 = 'catering');

    DELETE fin_verkoopfactuur
     WHERE     fin_verkoopfactuur_datum IS NULL
           AND fin_verkoopfactuur_c4 = 'catering';

    v_ruimte_key_prev := -1;

    FOR rec IN c (v_tot)
    LOOP
        IF rec.res_rsv_ruimte_key <> v_ruimte_key_prev
        THEN
            v_ruimte_key_prev := rec.res_rsv_ruimte_key;

            INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
                 VALUES (rec.res_key || '/' || rec.res_volgnr || '-c')
              RETURNING fin_verkoopfactuurkop_key
                   INTO v_verkoopfactuurkop_key;
        END IF;

        INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
                                        fin_verkoopfactuur_id,
                                        fin_verkoopfactuur_datum,
                                        fin_verkoopfactuur_omschr,
                                        fin_verkoopfactuur_xmlnode,
                                        fin_verkoopfactuur_refkey, -- key naar juiste factuur
                                        prs_kostenplaats_nr,
                                        prs_kostenplaats_omschrijving,
                                        prs_debiteur_naam,
                                        fin_verkoopfactuur_bedrag,
                                        --fin_verkoopfactuur_btw,
                                        --fin_btwtabelwaarde_code,
                                        fin_btwtabelwaarde_perc,
                                        fin_verkoopfactuur_maand,
                                        fin_verkoopfactuur_c1,
                                        fin_verkoopfactuur_c4,
                                        fin_verkoopfactuur_d1,
                                        fin_verkoopfactuur_d2)
             VALUES (v_verkoopfactuurkop_key,
                     TO_CHAR (SYSDATE, 'YYYY-MM-DD'),
                     NULL,
                     rec.naam_bijeenkomst,
                     'reservering',
                     rec.res_ruimte_key,
                     rec.sap_bestelnr,
                     rec.sap_omschr,
                     rec.sap_bestelnr,
                     rec.totaal_prijs,
                     -- btw bedrag,
                     -- btw code    ,
                     rec.res_artikel_btw,
                     rec.periode,
                     rec.res_key || '/' || rec.res_volgnr,
                     'catering',
                     rec.res_rsv_ruimte_van,
                     v_tot);
    END LOOP;


    fac.writelog (p_applname,
                  'S',
                  'Factuurregels gegenereerd',
                  '');

    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
               v_errorhint
            || ' ORACLE (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
        fac.writelog (p_applname,
                      'E',
                      v_aanduiding || v_errormsg,
                      'Onbekende fout!');
        COMMIT;
END pnbr_select_res_cat;
/

CREATE OR REPLACE PROCEDURE pnbr_export_res_cat_verwerk (
    p_applname   IN VARCHAR2,
    p_applrun    IN VARCHAR2,
    p_filedir    IN VARCHAR2,
    p_filename   IN VARCHAR2)
AS
    v_aanduiding          VARCHAR2 (200);
    v_errorhint           VARCHAR2 (1000);
    v_errormsg            VARCHAR2 (1000);
    oracle_err_num        NUMBER;
    oracle_err_mes        VARCHAR2 (200);

    v_periode             VARCHAR (6);
    v_periodeNaam         VARCHAR2 (20);
    v_kenmerk_key_cred    NUMBER;
    v_kenmerk_key_datum   NUMBER;
    v_kenmerk_key_geexp   NUMBER;
    v_trackmessage        VARCHAR2 (100);
BEGIN
    v_aanduiding := 'Init';
    v_errormsg := 'Aanpassen facturdatum';

    UPDATE fin_verkoopfactuur
       SET fin_verkoopfactuur_datum = SYSDATE
     WHERE     fin_verkoopfactuur_datum IS NULL
           AND fin_verkoopfactuur_c4 = 'catering';

    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        ROLLBACK;
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
               v_errorhint
            || ' ORACLE (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
        fac.writelog (p_applname,
                      'E',
                      v_aanduiding || v_errormsg,
                      'Onbekende fout! Niets verwerkt.');
        COMMIT;
END pnbr_export_res_cat_verwerk;
/

CREATE OR REPLACE VIEW PNBR_V_RES_CAT_VERMAAT
(
    RESERVERING,
    SAP_BESTELNR,
    KOSTENPLAATS_GRP,
    KOSTENSOORT,
    BEDRAG,
    BTW,
    BTWCODE,
    OPMERKING
)
AS
    SELECT res_reservering_key || '/' || res_rsv_ruimte_volgnr
               reservering,
           prs_kostenplaats_nr,
           prs_kostenplaatsgrp_oms,
           prs_kostensoort_oms,
           COALESCE (fin_verkoopfactuur_bedrag, 0),
           COALESCE (fin_verkoopfactuur_btw, 0),
           fin_btwtabelwaarde_code,
           DECODE (
               TRUNC (fin_verkoopfactuur_datum),
               NULL, 'Vermaat',
                  'Vermaat '
               || TO_CHAR (fin_verkoopfactuur_d2 - 28, 'dd/mm/yyyy')
               || ' - '
               || TO_CHAR (fin_verkoopfactuur_d2 - 1, 'dd/mm/yyyy'))
      FROM fin_verkoopfactuur  v,
           res_rsv_ruimte      r,
           (SELECT l.alg_locatie_key,
                   alg_locatie_code,
                   alg_locatie_omschrijving,
                   r.alg_ruimte_key
              FROM alg_locatie     l,
                   alg_gebouw      g,
                   alg_verdieping  v,
                   alg_ruimte      r
             WHERE     l.alg_locatie_key = g.alg_locatie_key
                   AND g.alg_gebouw_key = v.alg_gebouw_key
                   AND v.alg_verdieping_key = r.alg_verdieping_key) locatie,
           (  SELECT res_rsv_ruimte_key,
                     MAX (o.res_opstelling_omschrijving)      opstelling,
                     MAX (ro.res_ruimte_opstel_bezoekers)     capaciteit,
                     MAX (ra.alg_ruimte_key)                  alg_ruimte_key,
                     MAX (rr.res_ruimte_nr)                   ruimte_nr
                FROM res_rsv_ruimte       r,
                     res_ruimte_opstelling ro,
                     res_opstelling       o,
                     res_ruimte           rr,
                     res_alg_ruimte       ra
               WHERE     r.res_rsv_ruimte_verwijder IS NULL
                     AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                     AND ro.res_ruimte_key = rr.res_ruimte_key
                     AND ro.res_opstelling_key = o.res_opstelling_key
                     AND rr.res_ruimte_key = ra.res_ruimte_key
            GROUP BY res_rsv_ruimte_key
            UNION ALL
            SELECT res_rsv_ruimte_key,
                   ''       opstelling,
                   NULL     capaciteit,
                   rrr.alg_ruimte_key,
                   r.alg_ruimte_nr
              FROM res_rsv_ruimte rrr, alg_ruimte r
             WHERE     rrr.alg_ruimte_key IS NOT NULL
                   AND r.alg_ruimte_key = rrr.alg_ruimte_key) r2a
     WHERE     fin_verkoopfactuur_c4 = 'catering'
           AND fin_verkoopfactuur_c1 <> 'dummy'
           AND r.res_rsv_ruimte_key = v.fin_verkoopfactuur_refkey
           AND locatie.alg_ruimte_key = r2a.alg_ruimte_key
           AND r.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+);

CREATE OR REPLACE PROCEDURE pnbr_export_topdesk (p_applname   IN VARCHAR2,
                                                 p_applrun    IN VARCHAR2,
                                                 p_filedir    IN VARCHAR2,
                                                 p_filename   IN VARCHAR2)
AS
    oracle_err_num     NUMBER;
    oracle_err_mes     VARCHAR2 (200);
    v_errorhint        VARCHAR2 (100);
    v_aanduiding       VARCHAR2 (100);
    v_locatie_key      NUMBER;
    v_lengte           NUMBER;
    v_status_ogd       VARCHAR2 (200);
    v_status_ogd_new   VARCHAR2 (200);
    v_status_ogd_key   NUMBER;
    v_new_note         VARCHAR2 (4000);

    -- Dit haalt het externnummer op uit de opdrachtomschrijving indien externnr bij de melding nog leeg is
    -- De syncstate moet gezet worden om te bepalen wat wanneer gesynchroniseerd is
    -- Na het aanmaken van de opdracht zetten we de sync state gelijk aan de order date
    CURSOR externnr IS
          SELECT DISTINCT
                 m.mld_melding_key,
                 o.mld_opdr_key,
                 o.mld_statusopdr_key,
                 MAX (o.mld_opdr_datumbegin),
                 o.mld_opdr_externnr
                     AS externnr,
                 SUBSTR (o.mld_opdr_omschrijving,
                         INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12)
                     topdesknr,
                 km.mld_kenmerk_key,
                 fac.safe_to_number (
                     TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'))
                     AS sync_date_new
            FROM mld_melding   m,
                 mld_opdr      o,
                 mld_stdmelding sm,
                 mld_kenmerk   km,
                 mld_srtkenmerk sk
           WHERE     m.mld_melding_key = o.mld_melding_key
                 AND sm.mld_stdmelding_key = m.mld_stdmelding_key
                 AND o.mld_opdr_externnr IS NOT NULL
                 AND km.mld_stdmelding_key = sm.mld_ins_discipline_key
                 AND sk.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                 AND UPPER (sk.mld_srtkenmerk_omschrijving) = 'SYNC_OGD'
                 AND sm.mld_ins_discipline_key IN (1582, 4162, 5341) -- Enkel voor de vakgroepen die met Topdesk gekoppeld worden.
                 AND o.mld_statusopdr_key NOT IN (1,
                                                  2,
                                                  6,
                                                  7,
                                                  9)
                 AND (   m.mld_melding_externnr IS NULL
                      OR m.mld_melding_externnr <>
                         SUBSTR (
                             o.mld_opdr_omschrijving,
                               INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:')
                             + 12))
        GROUP BY m.mld_melding_key,
                 o.mld_opdr_key,
                 o.mld_statusopdr_key,
                 o.mld_opdr_externnr,
                 SUBSTR (o.mld_opdr_omschrijving,
                         INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12),
                 km.mld_kenmerk_key,
                 fac.safe_to_number (
                     TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'));

    -- Onderstaande cursor verzamelt de meldingen die status 'Actie aanvrager' (actie code = 2) moeten krijgen
    -- Dit is wanneer OGD 60449 een notitie heeft aangemaakt
    -- Wacht op klant (voorheen: Pending customer) is gezet na de laatste sync state of de sync state was nog leeg
    CURSOR actie_cust IS
        SELECT m.mld_melding_key,
               o.mld_opdr_key,
               o.mld_statusopdr_key
                   opdr_status,
               sm.mld_ins_discipline_key,
               m.prs_perslid_key_voor,
               pm.prs_perslid_email
                   email_melder,
               pr.prs_perslid_email
                   email_registreerder,
               DECODE (sm.mld_ins_discipline_key,
                       4162, 'onsloket@brabant.nl',
                       1582, pr.prs_perslid_email)
                   email_opdrrej,
               n.mld_melding_note_aanmaak,
               fac.safe_to_number (TO_CHAR (SYSDATE, 'yyyymmddhh24miss'))
                   AS sync_date_new,
               n.prs_perslid_key,
               syncdate.syncdate,
               syncdate.mld_kenmerkmelding_key,
               km.mld_kenmerk_key
          FROM mld_melding       m,
               mld_opdr          o,
               prs_perslid       pm,                                 -- melder
               prs_perslid       pr,                          -- registreerder
               mld_stdmelding    sm,
               mld_melding_note  n,
               mld_kenmerk       km,
               (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
                           syncdate,
                       mld.mld_melding_key,
                       sync.mld_kenmerkmelding_key
                  FROM mld_kenmerkmelding  sync,
                       mld_kenmerk         km,
                       mld_srtkenmerk      skm,
                       mld_melding         mld
                 WHERE     mld.mld_melding_key = sync.mld_melding_key
                       AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                       AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                       AND skm.mld_srtkenmerk_key = 9083) syncdate
         WHERE     sm.mld_stdmelding_key = m.mld_stdmelding_key
               AND sm.mld_ins_discipline_key IN (4162, 1582, 5341) --- alleen vakgroepen OGD en ICT wijziging
               AND sm.mld_stdmelding_key <> 11121
               AND n.mld_melding_key = m.mld_melding_key
               AND o.mld_melding_key = m.mld_melding_key
               AND n.prs_perslid_key = 60449
               AND m.prs_perslid_key_voor = pm.prs_perslid_key
               AND m.prs_perslid_key = pr.prs_perslid_key
               AND syncdate.mld_melding_key(+) = m.mld_melding_key
               AND km.mld_stdmelding_key = sm.mld_ins_discipline_key --- let op: kenmerk zit gekoppeld op discipline niveau
               --- AND m.mld_melding_status NOT IN (1, 2, 6, 7, 9) na overleg met Menno: status doet er niet toe
               AND km.mld_srtkenmerk_key = 9083
               AND (   fac.safe_to_number (
                           TO_CHAR (mld_melding_note_aanmaak,
                                    'yyyymmddhh24miss')) >
                       syncdate.syncdate
                    OR syncdate.syncdate IS NULL);

    -- Onderstaande cursor verzamelt de gegevens om te bepalen welke meldingen nieuwe opmerkingen heeft en die verzonden kunnen worden naar Topdesk
    -- Alle notities bij een melding die niet al eerder zijn verstuurd en niet door OGD zijn gemaakt mogen verstuurd worden
    CURSOR sync IS
            SELECT n.mld_melding_key,
                   n.mld_opdr_key,
                   n.mld_ins_discipline_key,
                   n.notitie,
                   n.mld_melding_note_aanmaak,
                   fac.safe_to_number (
                       TO_CHAR (n.mld_melding_note_aanmaak, 'yyyymmddhh24miss'))
                       AS note,
                   n.sync,
                   n.sync_key
              FROM (  SELECT mld.mld_melding_key,
                             o.mld_opdr_key,
                             sm.mld_ins_discipline_key,
                             LISTAGG (
                                    prs.prs_perslid_naam_friendly
                                 || '/'
                                 || mn.mld_melding_note_aanmaak
                                 || ' '
                                 || mn.mld_melding_note_omschrijving,
                                 '; ')
                             WITHIN GROUP (ORDER BY mld.mld_melding_key)
                                 notitie,
                             MAX (mn.mld_melding_note_aanmaak)
                                 mld_melding_note_aanmaak,
                             (SELECT fac.safe_to_number (
                                         sync.mld_kenmerkmelding_waarde)
                                FROM mld_kenmerkmelding sync,
                                     mld_kenmerk       km,
                                     mld_srtkenmerk    skm,
                                     mld_melding       m
                               WHERE     m.mld_melding_key = sync.mld_melding_key
                                     AND m.mld_melding_key = mld.mld_melding_key
                                     AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                                     AND skm.mld_srtkenmerk_key =
                                         km.mld_srtkenmerk_key
                                     AND skm.mld_srtkenmerk_key = 9083)
                                 AS sync,
                             (SELECT sync.mld_kenmerkmelding_key
                                FROM mld_kenmerkmelding sync,
                                     mld_kenmerk       km,
                                     mld_srtkenmerk    skm,
                                     mld_melding       m
                               WHERE     m.mld_melding_key = sync.mld_melding_key
                                     AND m.mld_melding_key = mld.mld_melding_key
                                     AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                                     AND skm.mld_srtkenmerk_key =
                                         km.mld_srtkenmerk_key
                                     AND skm.mld_srtkenmerk_key = 9083)
                                 AS sync_key
                        FROM mld_melding                mld,
                             mld_melding_note           mn,
                             mld_stdmelding             sm,
                             mld_opdr                   o,
                             prs_v_perslid_fullnames_all prs
                       WHERE     mn.mld_melding_key = mld.mld_melding_key
                             AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
                             AND mn.prs_perslid_key = prs.prs_perslid_key
                             AND mn.prs_perslid_key <> 60449 --- we gaan de notities van API user OGD niet naar hen terug sturen
                             AND mld.mld_melding_key = o.mld_melding_key -- Enkel Sync_OGD bijwerken indien er ook een opdracht is.
                             AND o.mld_uitvoerende_keys = 59728 -- We doen dit alleen voor opdrachten die bij OGD liggen
                             AND o.mld_statusopdr_key IN (5, 8)
                             AND fac.safe_to_number (
                                     TO_CHAR (mld_melding_note_aanmaak,
                                              'yyyymmddhh24miss')) >
                                 fac.safe_to_number (
                                     TO_CHAR (o.mld_opdr_datumbegin,
                                              'yyyymmddhh24miss'))
                             AND (   (SELECT fac.safe_to_number (
                                                 sync.mld_kenmerkmelding_waarde)
                                        FROM mld_kenmerkmelding sync,
                                             mld_kenmerk       km,
                                             mld_srtkenmerk    skm,
                                             mld_melding       m
                                       WHERE     m.mld_melding_key =
                                                 sync.mld_melding_key
                                             AND m.mld_melding_key =
                                                 mld.mld_melding_key
                                             AND km.mld_kenmerk_key =
                                                 sync.mld_kenmerk_key
                                             AND skm.mld_srtkenmerk_key =
                                                 km.mld_srtkenmerk_key
                                             AND skm.mld_srtkenmerk_key = 9083) <
                                     fac.safe_to_number (
                                         TO_CHAR (mld_melding_note_aanmaak,
                                                  'yyyymmddhh24miss'))
                                  OR ((SELECT fac.safe_to_number (
                                                  sync.mld_kenmerkmelding_waarde)
                                         FROM mld_kenmerkmelding sync,
                                              mld_kenmerk       km,
                                              mld_srtkenmerk    skm,
                                              mld_melding       m
                                        WHERE     m.mld_melding_key =
                                                  sync.mld_melding_key
                                              AND m.mld_melding_key =
                                                  mld.mld_melding_key
                                              AND km.mld_kenmerk_key =
                                                  sync.mld_kenmerk_key
                                              AND skm.mld_srtkenmerk_key =
                                                  km.mld_srtkenmerk_key
                                              AND skm.mld_srtkenmerk_key = 9083)
                                          IS NULL))
                    GROUP BY mld.mld_melding_key,
                             o.mld_opdr_key,
                             sm.mld_ins_discipline_key
                    ORDER BY mld_melding_key, mld_melding_note_aanmaak DESC) n,
                    (SELECT  mld_melding_key,  aant_char FROM (SELECT mld.mld_melding_key,
             SUM (LENGTH (mn.mld_melding_note_omschrijving))     aant_char
        FROM mld_melding                mld,
             mld_melding_note           mn,
             mld_stdmelding             sm,
             mld_opdr                   o,
             prs_v_perslid_fullnames_all prs
       WHERE     mn.mld_melding_key = mld.mld_melding_key
             AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
             AND mn.prs_perslid_key = prs.prs_perslid_key
             AND mn.prs_perslid_key <> 60449 --- we gaan de notities van API user OGD niet naar hen terug sturen
             AND mld.mld_melding_key = o.mld_melding_key -- Enkel Sync_OGD bijwerken indien er ook een opdracht is.
             AND o.mld_uitvoerende_keys = 59728 -- We doen dit alleen voor opdrachten die bij OGD liggen
             AND o.mld_statusopdr_key IN (5, 8)
             AND fac.safe_to_number (
                     TO_CHAR (mld_melding_note_aanmaak, 'yyyymmddhh24miss')) >
                 fac.safe_to_number (
                     TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'))
             AND (   (SELECT fac.safe_to_number (sync.mld_kenmerkmelding_waarde)
                        FROM mld_kenmerkmelding sync,
                             mld_kenmerk       km,
                             mld_srtkenmerk    skm,
                             mld_melding       m
                       WHERE     m.mld_melding_key = sync.mld_melding_key
                             AND m.mld_melding_key = mld.mld_melding_key
                             AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                             AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                             AND skm.mld_srtkenmerk_key = 9083) <
                     fac.safe_to_number (
                         TO_CHAR (mld_melding_note_aanmaak, 'yyyymmddhh24miss'))
                  OR ((SELECT fac.safe_to_number (sync.mld_kenmerkmelding_waarde)
                         FROM mld_kenmerkmelding sync,
                              mld_kenmerk       km,
                              mld_srtkenmerk    skm,
                              mld_melding       m
                        WHERE     m.mld_melding_key = sync.mld_melding_key
                              AND m.mld_melding_key = mld.mld_melding_key
                              AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                              AND skm.mld_srtkenmerk_key = km.mld_srtkenmerk_key
                              AND skm.mld_srtkenmerk_key = 9083)
                          IS NULL))
    GROUP BY mld.mld_melding_key)
    WHERE aant_char  < 4000) t
    where t.mld_melding_key = n.mld_melding_key;

    --- meldingen waarbij het totaal te versturen notities de 4000 karakters overschrijdt
    --- deze zetten we in de tracking zodat functioneel beheer genotificeerd wordt
    --- en zo waarschuwen dat de notitie velden opgeschoond moeten worden
    CURSOR large IS
    SELECT mld_melding_key, mld_opdr_key, aant_char
      FROM (  SELECT mld.mld_melding_key,
                     o.mld_opdr_key,
                     SUM (LENGTH (mn.mld_melding_note_omschrijving))     aant_char
                FROM mld_melding                mld,
                     mld_melding_note           mn,
                     mld_stdmelding             sm,
                     mld_opdr                   o,
                     prs_v_perslid_fullnames_all prs
               WHERE     mn.mld_melding_key = mld.mld_melding_key
                     AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
                     AND mn.prs_perslid_key = prs.prs_perslid_key
                     AND mn.prs_perslid_key <> 60449 --- we gaan de notities van API user OGD niet naar hen terug sturen
                     AND mld.mld_melding_key = o.mld_melding_key -- Enkel Sync_OGD bijwerken indien er ook een opdracht is.
                     AND o.mld_uitvoerende_keys = 59728 -- We doen dit alleen voor opdrachten die bij OGD liggen
                     AND o.mld_statusopdr_key IN (5, 8)
                     AND fac.safe_to_number (
                             TO_CHAR (mld_melding_note_aanmaak, 'yyyymmddhh24miss')) >
                         fac.safe_to_number (
                             TO_CHAR (o.mld_opdr_datumbegin, 'yyyymmddhh24miss'))
                     AND (   (SELECT fac.safe_to_number (
                                         sync.mld_kenmerkmelding_waarde)
                                FROM mld_kenmerkmelding sync,
                                     mld_kenmerk       km,
                                     mld_srtkenmerk    skm,
                                     mld_melding       m
                               WHERE     m.mld_melding_key = sync.mld_melding_key
                                     AND m.mld_melding_key = mld.mld_melding_key
                                     AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                                     AND skm.mld_srtkenmerk_key =
                                         km.mld_srtkenmerk_key
                                     AND skm.mld_srtkenmerk_key = 9083) <
                             fac.safe_to_number (
                                 TO_CHAR (mld_melding_note_aanmaak,
                                          'yyyymmddhh24miss'))
                          OR ((SELECT fac.safe_to_number (
                                          sync.mld_kenmerkmelding_waarde)
                                 FROM mld_kenmerkmelding sync,
                                      mld_kenmerk       km,
                                      mld_srtkenmerk    skm,
                                      mld_melding       m
                                WHERE     m.mld_melding_key = sync.mld_melding_key
                                      AND m.mld_melding_key = mld.mld_melding_key
                                      AND km.mld_kenmerk_key = sync.mld_kenmerk_key
                                      AND skm.mld_srtkenmerk_key =
                                          km.mld_srtkenmerk_key
                                      AND skm.mld_srtkenmerk_key = 9083)
                                  IS NULL))
            GROUP BY mld.mld_melding_key, o.mld_opdr_key)
     WHERE aant_char > 4000;

     -- PNBR#76614 Extern nr als kenmerk toevoegen
     -- Hier vullen we het externnr van changes in bij de melding, zodra deze bij de opdracht binnenkomt vanuit Topdesk
     CURSOR externnr_opdr IS
        SELECT m.mld_melding_key,
           SUBSTR (o.mld_opdr_omschrijving,
                   INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12)    topdesknr
      FROM mld_melding         m,
           mld_stdmelding      sm,
           ins_tab_discipline  vg,
           ins_srtdiscipline   vgt,
           mld_opdr            o,
           prs_bedrijf         b
     WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
           AND vg.ins_discipline_key = sm.mld_ins_discipline_key
           AND vgt.ins_srtdiscipline_key = vg.ins_srtdiscipline_key
           AND vgt.ins_srtdiscipline_key = 21                      --- wijzigingen
           AND o.mld_melding_key = m.mld_melding_key
           AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
           AND b.prs_bedrijf_key = 59728                                   --- OGD
           AND INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') > 0
           AND m.mld_melding_externnr IS NULL;

BEGIN
    v_errorhint := 'init';
    v_lengte := 0;

    -- Hier vullen we het externnr bij de melding, zodra deze (als kenmerk) bij de opdracht binnenkomt vanuit Topdesk
    FOR rec IN externnr
    LOOP
        BEGIN
            v_aanduiding :=
                'Topdesknr zetten bij melding: ' || rec.mld_melding_key;
            v_errorhint :=
                   'Melding vullen met externnr voor melding '
                || rec.mld_melding_key;

            UPDATE mld_melding
               SET mld_melding_externnr = rec.topdesknr
             WHERE mld_melding_key = rec.mld_melding_key;

            -- Vervolgens zetten we de sync state zodat we weten vanaf wanneer de sync van notities en bijlagen mag gaan lopen
            mld.upsertmeldingkenmerk (rec.mld_kenmerk_key,
                                      rec.mld_melding_key,
                                      rec.sync_date_new);
            COMMIT;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

                -- aanmaken mldtrk in fac_tracking
                INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (
                             655,
                             rec.mld_melding_key,
                                v_aanduiding
                             || '/'
                             || oracle_err_num
                             || ': '
                             || oracle_err_mes);
        END;
    END LOOP;

    -- We zetten de status van de melding nog op respectievelijk 'Actie aanvrager', 'Attentie' indien Topdesk na laatste bericht vanuit Facilitor hierom vraagt.
    FOR rec IN actie_cust
    LOOP
        BEGIN
            v_aanduiding :=
                'Topdesk actie naar aanvr mld: ' || rec.mld_melding_key;

            SELECT COALESCE (mld_kenmerkopdr_waarde, 'Wacht op klant')
              INTO v_status_ogd
              FROM (SELECT o.mld_melding_key,
                           o.mld_opdr_key,
                           ko.mld_kenmerkopdr_waarde
                      FROM mld_kenmerkopdr  ko,
                           mld_kenmerk      k,
                           mld_srtkenmerk   sk,
                           mld_opdr         o
                     WHERE     ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                           AND o.mld_opdr_key = ko.mld_opdr_key
                           AND sk.mld_srtkenmerk_key = 9081
                           AND o.mld_statusopdr_key IN (5, 8)
                           AND ko.mld_kenmerkopdr_verwijder IS NULL) status,
                   mld_melding  m
             WHERE     m.mld_melding_key = status.mld_melding_key(+)
                   AND m.mld_melding_key = rec.mld_melding_key;

            IF rec.opdr_status = 1
            THEN
                -- de opdracht is door OGD afgewezen, de melding krijgt een attentie belletje
                UPDATE mld_melding
                   SET mld_melding_actiecode = 129
                 WHERE mld_melding_key = rec.mld_melding_key;

                -- we sturen ook een notificatie naar DPL of de melder
                INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                             fac_notificatie_status,
                                             prs_perslid_key_receiver,
                                             fac_notificatie_receiver_email,
                                             fac_notificatie_oms,
                                             fac_notificatie_refkey,
                                             fac_notificatie_prioriteit)
                         VALUES (
                             57,                                    --- ordrej
                             2,
                             NULL,
                             rec.email_opdrrej,
                                'Opdracht bij melding '
                             || rec.mld_melding_key
                             || ' is afgewezen door OGD',
                             rec.mld_opdr_key,
                             2);
            -- Als vanuit Topdesk een status wordt meegestuurd dan moet er genotificeerd worden
            ELSE
                IF UPPER (v_status_ogd) = 'WACHT OP KLANT' --- voorheen: PENDING CUSTOMER
                THEN
                    v_aanduiding := 'Melding: ' || rec.mld_melding_key;
                    v_errorhint :=
                           'Status melding naar Actie aanvrager voor melding '
                        || rec.mld_melding_key;

                    UPDATE mld_melding
                       SET mld_melding_actiecode = 2
                     WHERE mld_melding_key = rec.mld_melding_key;

                    INSERT INTO fac_notificatie (
                                    fac_srtnotificatie_key,
                                    fac_notificatie_status,
                                    prs_perslid_key_receiver,
                                    fac_notificatie_receiver_email,
                                    fac_notificatie_oms,
                                    fac_notificatie_refkey,
                                    fac_notificatie_prioriteit)
                             VALUES (
                                 161,                               --- mldnot
                                 2,
                                 rec.prs_perslid_key_voor,
                                 rec.email_melder,
                                    'Notitie toegevoegd door OGD bij melding '
                                 || rec.mld_melding_key,
                                 rec.mld_melding_key,
                                 2);
                ELSE
                    IF UPPER (v_status_ogd) =
                       'MELDING KWALITATIEF ONVOLDOENDE'
                    THEN
                        v_aanduiding := 'Melding: ' || rec.mld_melding_key;
                        v_errorhint :=
                               'Status melding naar Attentie voor melding '
                            || rec.mld_melding_key;

                        UPDATE mld_melding
                           SET mld_melding_actiecode = 129
                         WHERE mld_melding_key = rec.mld_melding_key;

                        UPDATE mld_melding
                           SET mld_melding_flag = 5
                         WHERE mld_melding_key = rec.mld_melding_key;

                        INSERT INTO fac_notificatie (
                                        fac_srtnotificatie_key,
                                        fac_notificatie_status,
                                        prs_perslid_key_receiver,
                                        fac_notificatie_receiver_email,
                                        fac_notificatie_oms,
                                        fac_notificatie_refkey,
                                        fac_notificatie_prioriteit)
                                 VALUES (
                                     282,      --- mldnob gaat altijd naar DPL
                                     2,
                                     NULL,
                                     'onsloket@brabant.nl',
                                        'Melding '
                                     || rec.mld_melding_key
                                     || ' is incompleet bevonden door OGD',
                                     rec.mld_melding_key,
                                     2);
                    END IF;
                END IF;
            END IF;

            -- Vervolgens zetten we de sync date zodat we weten dat we weten tot hoever de notities al verwerkt zijn
            mld.upsertmeldingkenmerk (rec.mld_kenmerk_key,
                                      rec.mld_melding_key,
                                      rec.sync_date_new);
            COMMIT;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

                -- aanmaken mldtrk in fac_tracking
                INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (
                             655,
                             rec.mld_melding_key,
                                v_aanduiding
                             || '/'
                             || oracle_err_num
                             || ': '
                             || oracle_err_mes);
        END;
    END LOOP;

    FOR rec IN sync
    LOOP
        BEGIN
            -- Eerst verzamelen we alle nieuwe notities en zetten deze klaar in een kenmerk voor verzending
            v_aanduiding :=
                'Note naar Topdesk voor melding: ' || rec.mld_melding_key;
            v_errorhint :=
                'Notities verzamelen voor verzending ' || rec.mld_melding_key;

            -- Daarvoor moeten we de juiste kenmerkkey bepalen
            SELECT k.mld_kenmerk_key
              INTO v_new_note
              FROM mld_opdr o, mld_kenmerk k, mld_srtkenmerk sk
             WHERE     o.mld_typeopdr_key = k.mld_typeopdr_key
                   AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                   AND UPPER (sk.mld_srtkenmerk_omschrijving) =
                       'UPDATE_NOTITIES'
                   AND o.mld_opdr_key = rec.mld_opdr_key;

            -- De oude notitie gooien we weg
            DELETE MLD_KENMERKOPDR ko
             WHERE     ko.mld_opdr_key = rec.mld_opdr_key
                   AND ko.mld_kenmerk_key = v_new_note;

            -- Dan vullen we de nieuwe notitie
            mld.upsertopdrachtkenmerk (v_new_note,
                                       rec.mld_opdr_key,
                                       rec.notitie);

            v_errorhint :=
                   'Opdracht opnieuw te verzenden naar Topdesk voor melding: '
                || rec.mld_melding_key;

            -- Eerst zetten we de opdracht opnieuw klaar om te verzenden
            UPDATE mld_opdr o
               SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
             WHERE o.mld_opdr_key = rec.mld_opdr_key;

            v_errorhint :=
                   'Syncdatum Topdesk bijwerken voor melding '
                || rec.mld_melding_key;

            -- Als er nog niet eerder gesynchroniseerd is maken we een kenmerk aan met de syncdatum
            -- Als al eerder gesynchroniseerd is werken we de syncdatum bij
            -- Hiermee komt deze notitie de volgende keer niet meer voor in de cursor
            CASE
                WHEN rec.sync IS NULL
                THEN
                    INSERT INTO mld_kenmerkmelding (
                                    mld_melding_key,
                                    mld_kenmerk_key,
                                    mld_kenmerkmelding_waarde)
                             VALUES (
                                 rec.mld_melding_key,
                                 (SELECT DISTINCT mld_kenmerk_key
                                    FROM mld_kenmerk
                                   WHERE     mld_srtkenmerk_key = 9083 -- Kenmerksoort tbv synchronisatie van opmerkingen naar Topdesk
                                         AND mld_stdmelding_key =
                                             rec.mld_ins_discipline_key),
                                 rec.note);

                    --- deze notitie moet resulteren in een patch naar Topdesk
                    --- dat wordt getriggerd door een ordupd
                    fac.trackaction ('ORDUPD',
                                     rec.mld_opdr_key,
                                     NULL,
                                     NULL,
                                     'Sync_OGD: (leeg) --> ' || rec.note);
                ELSE
                    UPDATE mld_kenmerkmelding
                       SET mld_kenmerkmelding_waarde = rec.note
                     WHERE rec.sync_key = mld_kenmerkmelding_key;

                    --- deze notitie moet resulteren in een patch naar Topdesk
                    --- dat wordt getriggerd door een ordupd
                    fac.trackaction (
                        'ORDUPD',
                        rec.mld_opdr_key,
                        NULL,
                        NULL,
                        'Sync_OGD: ' || rec.sync || ' --> ' || rec.note);
            END CASE;

            -- De status OGD werken we dan ook nog even netjes bij
            SELECT k.mld_kenmerk_key,
                   CASE
                       WHEN (UPPER (status_ogd.mld_kenmerkopdr_waarde) =
                             'WACHT OP KLANT') --> PENDING CUSTOMER is geworden Wacht op klant
                       THEN
                           'Reactie ontvangen'
                       WHEN     UPPER (status_ogd.mld_kenmerkopdr_waarde) =
                                'MELDING KWALITATIEF ONVOLDOENDE' --> PENDING DPL is geworden Melding kwalitatief onvoldoende
                            AND m.mld_melding_flag = 3
                       THEN
                           'Melding kwalitatief onvoldoende'
                       WHEN     UPPER (status_ogd.mld_kenmerkopdr_waarde) =
                                'MELDING KWALITATIEF ONVOLDOENDE'
                            AND (   m.mld_melding_flag <> 3
                                 OR m.mld_melding_flag IS NULL)
                       THEN
                           'Reactie ontvangen'
                       ELSE
                           'Reactie ontvangen'
                   END    CASE
              INTO v_status_ogd_key, v_status_ogd_new
              FROM mld_kenmerk     k,
                   mld_opdr        o,
                   mld_srtkenmerk  sk,
                   mld_melding     m,
                   (SELECT ko.mld_opdr_key,
                           ko.mld_kenmerkopdr_waarde,
                           k.mld_kenmerk_key
                      FROM mld_kenmerkopdr  ko,
                           mld_kenmerk      k,
                           mld_srtkenmerk   sk
                     WHERE     ko.mld_kenmerk_key = k.mld_kenmerk_key
                           AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                           AND sk.mld_srtkenmerk_key = 9081
                           AND ko.mld_kenmerkopdr_verwijder IS NULL)
                   status_ogd
             WHERE     o.mld_typeopdr_key = k.mld_typeopdr_key
                   AND sk.mld_srtkenmerk_key = 9081
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND o.mld_melding_key = m.mld_melding_key
                   AND status_ogd.mld_opdr_key(+) = o.mld_opdr_key
                   AND o.mld_statusopdr_key IN (5, 8)
                   AND o.mld_opdr_key = rec.mld_opdr_key;

            mld.upsertopdrachtkenmerk (v_status_ogd_key,
                                       rec.mld_opdr_key,
                                       v_status_ogd_new);

            COMMIT;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

                -- aanmaken ordtrk in fac_tracking
                INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (
                             658,
                             rec.mld_opdr_key,
                                v_aanduiding
                             || '/'
                             || oracle_err_num
                             || ': '
                             || oracle_err_mes);
        END;
    END LOOP;

    FOR rec IN large
    LOOP
        BEGIN
            --
            v_aanduiding :=
                'Notities bij melding ' || rec.mld_melding_key || ' te groot voor export naar Topdesk.';

            -- aanmaken mldtrk in fac_tracking
            INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (
                             658,
                             rec.mld_opdr_key,
                                v_aanduiding);
        END;
    END LOOP;

    FOR rec IN externnr_opdr
    LOOP
        BEGIN
            v_aanduiding :=
                'Topdesknr zetten bij change: ' || rec.mld_melding_key;
            v_errorhint :=
                   'Melding vullen met externnr voor change '
                || rec.mld_melding_key;

            UPDATE mld_melding
               SET mld_melding_externnr = rec.topdesknr
             WHERE mld_melding_key = rec.mld_melding_key;

            COMMIT;
             EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

                -- aanmaken mldtrk in fac_tracking
                INSERT INTO fac_tracking (fac_srtnotificatie_key,
                                          fac_tracking_refkey,
                                          fac_tracking_oms)
                         VALUES (
                             655,
                             rec.mld_melding_key,
                                v_aanduiding
                             || '/'
                             || oracle_err_num
                             || ': '
                             || oracle_err_mes);

        END;
    END LOOP;

    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);

        fac.writelog (p_applname,
                      'E',
                      oracle_err_num || '/' || oracle_err_mes,
                      v_errorhint);
END pnbr_export_topdesk;
/

CREATE OR REPLACE PROCEDURE pnbr_export_sms_bezoeker (
    p_applname   IN VARCHAR2,
    p_applrun    IN VARCHAR2,
    p_filedir    IN VARCHAR2,
    p_filename   IN VARCHAR2)
AS
    CURSOR bez IS
    SELECT sn.fac_srtnotificatie_key,
           4
               status,
           COALESCE (pl.prs_perslid_mobiel, telnr.telefoonnr, '31652794464')
               mobiel, ---- indien geen nummer bekend nummer van de gastvrouwen/heren PNBR
           'Bezoek voor ' || p.prs_perslid_naam_friendly || ' is gearriveerd'
               text,
           b.bez_afspraak_key,
           b.bez_bezoekers_key,
           t.fac_tracking_datum
      FROM fac_tracking                 t,
           bez_bezoekers                b,
           fac_srtnotificatie           sn,
           bez_afspraak                 a,
           prs_perslid                  pl,
           prs_v_perslid_fullnames_all  p,
           (SELECT kl.prs_link_key prs_key, kl.prs_kenmerklink_waarde telefoonnr
              FROM prs_kenmerklink kl, prs_kenmerk k
             WHERE     k.prs_kenmerk_key = kl.prs_kenmerk_key
                   AND k.prs_kenmerk_niveau = 'P'
                   AND k.prs_kenmerk_key = 1100) telnr
     WHERE     t.fac_srtnotificatie_key = 26           --- bezdon, aankomst bezoek
           AND t.fac_tracking_refkey = b.bez_bezoekers_key
           AND a.bez_afspraak_key = b.bez_afspraak_key
           AND a.bez_afspraak_host_key = p.prs_perslid_key
           AND a.bez_afspraak_host_key = pl.prs_perslid_key
           AND telnr.prs_key(+) = p.prs_perslid_key
           AND sn.fac_srtnotificatie_code = 'CUST07'
           AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE)
           AND b.bez_bezoekers_key NOT IN
                   (SELECT kw.bez_bezoekers_key
                      FROM bez_kenmerkwaarde kw, bez_kenmerk k
                     WHERE     k.bez_kenmerk_key = kw.bez_kenmerk_key
                           AND k.bez_kenmerk_upper = 'VERTROUWELIJK') -- wanneer bezoek vertrouwelijk is geen sms
           AND NOT EXISTS
                   (SELECT bez_kenmerkwaarde_waarde
                      FROM bez_kenmerkwaarde kw, bez_kenmerk k
                     WHERE     k.bez_kenmerk_key = kw.bez_kenmerk_key
                           AND k.bez_kenmerk_upper = 'SMS'        -- sms verzonden
                           AND kw.bez_bezoekers_key = b.bez_bezoekers_key);

BEGIN
    FOR rec IN bez
    LOOP
        -- de SMS berichten versturen
        INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                     fac_notificatie_status,
                                     fac_notificatie_receiver_phone,
                                     fac_notificatie_oms,
                                     fac_notificatie_refkey,
                                     fac_notificatie_extrakey,
                                     fac_notificatie_prioriteit)
             VALUES (rec.fac_srtnotificatie_key,
                     rec.status,
                     rec.mobiel,
                     rec.text,
                     rec.bez_afspraak_key,
                     rec.bez_bezoekers_key,
                     2);

        -- een timestamp zetten dat de sms verstuurd is
        pnbr.set_kenmerk ('BEZ',
                          1060,
                          rec.bez_bezoekers_key,
                          TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss'),
                          0);

        COMMIT;
    END LOOP;
END;
/

CREATE OR REPLACE VIEW PNBR_V_RAP_REL_GESCHENKEN
AS
    SELECT bes_bestelling_key,
           bestelaanvraagnr,
           besteldatum,
           besteller,
           bestelling_voor,
           afdeling_code,
           afdeling_omschrijving,
           groep,
           catalogus,
           catalogus_key,
           productomschrijving,
           itemprijs,
           aantal,
           prijs,
           keuze,
           begrotingspost,
           bet_pin,
           (SELECT kb.bes_kenmerkbestell_waarde
              FROM bes_kenmerk k, bes_srtkenmerk sk, bes_kenmerkbestell kb
             WHERE     k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                   AND sk.bes_srtkenmerk_key = 381
                   AND k.bes_kenmerk_verwijder IS NULL
                   AND kb.bes_kenmerk_key = k.bes_kenmerk_key
                   AND kb.bes_kenmerkbestell_verwijder IS NULL
                   AND kb.bes_bestelling_key = best.bes_bestelling_key) WBS_element
      FROM (SELECT b.bes_bestelling_key
                       bes_bestelling_key,
                   'A-' || b.bes_bestelling_key
                       bestelaanvraagnr,
                   b.bes_bestelling_datum
                       besteldatum,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key = p.prs_perslid_key)
                       besteller,
                   (SELECT prs_perslid_naam_full
                      FROM prs_v_perslid_fullnames_all pf
                     WHERE pf.prs_perslid_key = pv.prs_perslid_key)
                       bestelling_voor,
                   a.prs_afdeling_naam
                       afdeling_code,
                   a.prs_afdeling_omschrijving
                       afdeling_omschrijving,
                   sg.bes_srtgroep_omschrijving
                       groep,
                   d.ins_discipline_omschrijving
                       catalogus,
                   d.ins_discipline_key
                       catalogus_key,
                   bi.bes_bestelling_item_prijs * bi.bes_bestelling_item_aantal
                       prijs,
                   bi.bes_bestelling_item_aantal
                       aantal,
                   bi.bes_bestelling_item_prijs
                       itemprijs,
                   sd.bes_srtdeel_omschrijving
                       productomschrijving,
                   (SELECT ud.fac_usrdata_code
                      FROM bes_srtkenmerk      sk,
                           bes_kenmerk         k,
                           bes_kenmerkbestell  kb,
                           fac_usrdata         ud
                     WHERE     UPPER (sk.bes_srtkenmerk_omschrijving) = 'MAAK EEN KEUZE'
                           AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                           AND kb.bes_kenmerk_key = k.bes_kenmerk_key
                           AND kb.bes_kenmerkbestell_waarde = ud.fac_usrdata_key
                           AND kb.bes_kenmerkbestell_verwijder IS NULL
                           AND kb.bes_bestelling_key = b.bes_bestelling_key)
                       keuze,
                   (SELECT kb.bes_kenmerkbestell_waarde
                      FROM bes_srtkenmerk sk, bes_kenmerk k, bes_kenmerkbestell kb
                     WHERE     UPPER (sk.bes_srtkenmerk_omschrijving) = 'BEGROTINGSPOST'
                           AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                           AND kb.bes_kenmerk_key = k.bes_kenmerk_key
                           AND kb.bes_kenmerkbestell_verwijder IS NULL
                           AND kb.bes_bestelling_key = b.bes_bestelling_key)
                       begrotingspost,
                   (SELECT kb.bes_kenmerkbestell_waarde
                      FROM bes_srtkenmerk sk, bes_kenmerk k, bes_kenmerkbestell kb
                     WHERE     UPPER (sk.bes_srtkenmerk_omschrijving) = 'BETALING PER PIN'
                           AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key
                           AND kb.bes_kenmerk_key = k.bes_kenmerk_key
                           AND kb.bes_kenmerkbestell_verwijder IS NULL
                           AND kb.bes_bestelling_key = b.bes_bestelling_key)
                       bet_pin
              FROM bes_bestelling       b,
                   prs_perslid          p,
                   prs_perslid          pv,
                   prs_afdeling         a,
                   bes_bestelling_item  bi,
                   bes_srtdeel          sd,
                   bes_srtgroep         sg,
                   ins_tab_discipline   d
             WHERE     b.prs_perslid_key = p.prs_perslid_key
                   AND p.prs_afdeling_key = a.prs_afdeling_key
                   AND pv.prs_perslid_key(+) = b.prs_perslid_key_voor
                   AND b.bes_bestelling_key = bi.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 = d.ins_discipline_key) best
     WHERE     besteldatum > = ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)
           AND besteldatum < = TRUNC (SYSDATE, 'Q') - 1
           AND catalogus_key IN (2441,                                   --- Bloemenboetiek D. Bragt
                                 2442,                                     --- Bloemsierkunst Oxalis
                                 2443,                                 --- Bloemsierkunst Peter Kuys
                                 3041,                                                 --- Cadeaubon
                                 123,                                                   --- Geschenk
                                 1041,                                      --- Geschenk GS (cat. D)
                                 3481,                                            --- VVV Cadeaukaart
                                 5901                                             --- Kistje planten
                                     );
                                     
CREATE OR REPLACE VIEW PNBR_V_NOTI_MAILING
(
    CODE,
    SENDER,
    RECEIVER,
    TEXT,
    KEY,
    XKEY,
    XEMAIL,
    XMOBILE
)
AS
    SELECT fac_srtnotificatie_code                                    code,
           4                                                          sender, --- 4 = Facilitor
           NULL                                                       receiver,
           'Besteloverzicht relatiegeschenken afgelopen kwartaal'     text,
           82644                                                       key, ---- refkey: prs_perslid_key
           NULL                                                       xkey,
           'mlemen@brabant.nl'                                      xemail,
           NULL                                                       xmobile
      FROM fac_srtnotificatie sn
     WHERE     sn.fac_srtnotificatie_code = 'CUST08'
           AND TO_CHAR (SYSDATE, 'dd') = '01' -- Elke 1e dag het nieuwe kwartaal
           AND TO_CHAR (SYSDATE, 'mm') IN ('01', -- Over kwartaal 4 vorig jaar
                                           '04',            -- Over kwartaal 1
                                           '07',            -- Over kwartaal 2
                                           '10'             -- Over kwartaal 3
                                               );

-- Dit rapport toont alle fouten van vandaag die in de tracking tabel zijn gelogd

CREATE OR REPLACE VIEW PNBR_V_RAP_TOPDESK_LOG
(
    TRACKING_KEY,
    MELDINGNR,
    OPDR_NR,
    TRACKING_DATUM,
    TRACKING_OMS,
    RESPONSE,
    AANTAL_X
)
AS
      SELECT tracking_key,
             meldingnr,
             opdr_nr,
             tracking_datum,
             tracking_oms,
             response,
             RANK () OVER (PARTITION BY meldingnr ORDER BY tracking_key)    aantal_x
        FROM (SELECT m.mld_melding_externnr
                         topdesknr,
                     TO_CHAR (m.mld_melding_key)
                         meldingnr,
                     m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
                         opdr_nr,
                     t.fac_tracking_key
                         tracking_key,
                     t.fac_tracking_datum
                         tracking_datum,
                     t.fac_tracking_oms
                         tracking_oms,
                     CASE
                         WHEN UPPER (t.fac_tracking_oms) LIKE
                                  '%CREATING CHANGE TOPDESK%'
                         THEN
                             fac.safe_to_number (
                                 SUBSTR (t.fac_tracking_oms, 34))
                         WHEN UPPER (t.fac_tracking_oms) LIKE
                                  '%CREATING INCIDENT TOPDESK%'
                         THEN
                             fac.safe_to_number (
                                 SUBSTR (t.fac_tracking_oms, 36))
                         WHEN UPPER (t.fac_tracking_oms) LIKE
                                  '%UPDATING CHANGE TOPDESK%'
                         THEN
                             fac.safe_to_number (
                                 SUBSTR (t.fac_tracking_oms, 34))
                         WHEN UPPER (t.fac_tracking_oms) LIKE
                                  '%UPDATING INCIDENT TOPDESK%'
                         THEN
                             fac.safe_to_number (
                                 SUBSTR (t.fac_tracking_oms, 36))
                     END
                         response
                FROM fac_tracking t, mld_opdr o, mld_melding m
               WHERE     t.fac_tracking_refkey = o.mld_opdr_key
                     AND o.mld_melding_key = m.mld_melding_key
                     AND (   UPPER (fac_tracking_oms) LIKE
                                 '%CREATING CHANGE TOPDESK%'
                          OR UPPER (fac_tracking_oms) LIKE
                                 '%CREATING INCIDENT TOPDESK%'
                          OR UPPER (fac_tracking_oms) LIKE
                                 '%UPDATING CHANGE TOPDESK%'
                          OR UPPER (fac_tracking_oms) LIKE
                                 '%UPDATING INCIDENT TOPDESK%')
              UNION ALL
              SELECT m.mld_melding_externnr
                         topdesknr,
                     TO_CHAR (m.mld_melding_key)
                         meldingnr,
                     m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
                         opdr_nr,
                     t.fac_tracking_key
                         tracking_key,
                     t.fac_tracking_datum
                         tracking_datum,
                     t.fac_tracking_oms
                         tracking_oms,
                     999
                         response
                FROM fac_tracking t, mld_opdr o, mld_melding m
               WHERE     t.fac_tracking_refkey = o.mld_opdr_key
                     AND o.mld_melding_key = m.mld_melding_key
                     AND UPPER (fac_tracking_oms) LIKE '%TOPDESK%'
                     AND t.fac_srtnotificatie_key IN (655, 658))
       WHERE response >= 400 AND TRUNC (SYSDATE) = TRUNC (tracking_datum)
    GROUP BY tracking_key,
             meldingnr,
             opdr_nr,
             tracking_datum,
             tracking_oms,
             response
    ORDER BY meldingnr, tracking_datum DESC;

--- Monitoring Topdesk koppeling Als de afgelopen 5 minuten een fout in het
--- verwerken van berichten is geconstateerd moet er genotificeerd worden
--- We notificeren alleen de 1e keer per dag

CREATE OR REPLACE VIEW PNBR_V_NOTI_OGD
AS
    SELECT *
      FROM pnbr_v_rap_topdesk_log
     WHERE ROUND ((SYSDATE - tracking_datum) * 1440) <= 5 AND aantal_x < 2;

--- als er iets in de tracking of logging staat notificeren we zsm OGD

CREATE OR REPLACE PROCEDURE pnbr_export_noti_ogd (p_applname   IN VARCHAR2,
                                                  p_applrun    IN VARCHAR2,
                                                  p_filedir    IN VARCHAR2,
                                                  p_filename   IN VARCHAR2)
AS
    CURSOR td_log IS
        SELECT l.*, sn.fac_srtnotificatie_key, rap.fac_usrrap_key
          FROM pnbr_v_noti_ogd l, fac_srtnotificatie sn, fac_usrrap rap
         WHERE     sn.fac_srtnotificatie_code = 'CUST09'
               AND UPPER (fac_usrrap_view_name) = 'PNBR_V_RAP_TOPDESK_LOG';
BEGIN
    FOR rec IN td_log
    LOOP
        -- de notificatie klaarzetten
        INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                     fac_notificatie_status,
                                     fac_notificatie_receiver_email,
                                     prs_perslid_key_receiver,
                                     fac_notificatie_oms,
                                     fac_notificatie_refkey,
                                     fac_notificatie_extrakey,
                                     fac_notificatie_prioriteit)
                 VALUES (
                     rec.fac_srtnotificatie_key,
                     2,
                     'beheerpnb@ogd.nl;mudo@brabant.nl;wvhout@brabant.nl;nsalhi@brabant.nl', -- email
                     NULL,
                     'Notificatie Facilitor - Topdesk koppeling',
                     rec.fac_usrrap_key,
                     NULL,
                     2);

        COMMIT;
    END LOOP;
END;
/

CREATE OR REPLACE VIEW PNBR_V_STATUSVERLOOP_WPBEZ
(
    INS_DEEL_OMSCHRIJVING,
    INS_DEEL_KEY,
    ALG_RUIMTE_KEY,
    ALG_RUIMTE_NR,
    INS_DEEL_STATE_HISTORY_KEY,
    RANKING,
    INS_DEEL_STATE,
    STATUS,
    INS_DEEL_STATEDATE,
    DUUR_STATUS
)
AS
    SELECT d.ins_deel_omschrijving,
           d.ins_deel_key,
           r.alg_ruimte_key,
           r.alg_ruimte_nr,
           stat_his.ins_deel_state_history_key,
           stat_his.ranking,
           stat_his.ins_deel_state,
           DECODE (stat_his.ins_deel_state,
                   0, 'vrij',
                   1, 'bezet',
                   99, 'storing')                                               status,
           stat_his.ins_deel_statedate,
           COALESCE (stat_his.duur_status,
                     ROUND ((SYSDATE - stat_his.ins_deel_statedate) * 1440))    duur_status
      FROM ins_deel    d,
           alg_ruimte  r,
           (SELECT ranking,
                   ins_deel_key,
                   ins_deel_state_history_key,
                   ins_deel_state,
                   ins_deel_statedate,
                     (  ins_deel_statedate
                      - LAG (ins_deel_statedate)
                            OVER (PARTITION BY ins_deel_key ORDER BY ranking))
                   * -1440    AS duur_status --- duur van de status in minuten
              FROM (SELECT ins_deel_key,
                           ins_deel_state_history_key,
                           ins_deel_state,
                           ins_deel_statedate,
                           RANK ()
                               OVER (
                                   PARTITION BY ins_deel_key
                                   ORDER BY
                                       ins_deel_key, ins_deel_statedate DESC)    AS ranking
                      FROM ins_deel_state_history) rank_state) stat_his
     WHERE     d.ins_deel_key = stat_his.ins_deel_key
           AND d.ins_alg_ruimte_key = r.alg_ruimte_key;

--- bezet wordt direct bezet
--- tussen 15 en 60 minuten vrij zien we als medewerker afwezig
--- vrij nemen we pas weer over als deze status langer dan een uur duurt

CREATE OR REPLACE VIEW pnbr_v_wpbez
AS
    SELECT DISTINCT
           d.ins_deel_omschrijving,
           d.alg_ruimte_key,
           d.ins_deel_key,
           d.alg_ruimte_nr,
           CASE
               WHEN     current_state.ins_deel_state = 0
                    AND current_state.duur_status > 59
               THEN
                   'vrij'
               WHEN     current_state.ins_deel_state = 0
                    AND current_state.duur_status < 60
                    AND current_state.duur_status > 15
               THEN
                   'medewerker afwezig'
               WHEN current_state.ins_deel_state = 99
               THEN
                   'storing'
               ELSE
                   'bezet'
           END    def_status
      FROM pnbr_v_statusverloop_wpbez  d,
           (SELECT ranking,
                   ins_deel_key,
                   ins_deel_state,
                   ins_deel_statedate,
                   ROUND ((SYSDATE - ins_deel_statedate) * 1440)    AS duur_status --- duur van de status in minuten
              FROM (SELECT ins_deel_key,
                           ins_deel_state,
                           ins_deel_statedate,
                           RANK ()
                               OVER (
                                   PARTITION BY ins_deel_key
                                   ORDER BY
                                       ins_deel_key, ins_deel_statedate DESC)    AS ranking
                      FROM ins_deel_state_history) rank_state
             WHERE ranking = 1) current_state
     WHERE d.ins_deel_key = current_state.ins_deel_key;


CREATE OR REPLACE VIEW PNBR_V_CAD_LABEL_SENSOREN
AS
    SELECT ins_deel_key, ins_deel_opmerking waarde
      FROM ins_deel d
     WHERE d.ins_srtdeel_key = 3521;

CREATE OR REPLACE VIEW PNBR_V_CAD_THEMA_ACT_BEZETTING
AS
    SELECT ins_deel_key, def_status waarde FROM pnbr_v_wpbez;

CREATE OR REPLACE VIEW PNBR_V_CAD_LABEL_WERKPLEKKEN
(
    INS_DEEL_KEY,
    WAARDE
)
AS
    SELECT d.ins_deel_key,
           COALESCE (d.ins_deel_omschrijving, 'onb')     waarde
      FROM ins_deel  d
     WHERE     d.ins_srtdeel_key = 3521;

CREATE OR REPLACE VIEW PNBR_V_CAD_RESERVEERBAAR
(
    INS_DEEL_KEY,
    WAARDE
)
AS
    SELECT ins_deel_key, DECODE (rd.res_deel_key, NULL, 0, 1) waarde
      FROM ins_deel  d,
           (SELECT *
              FROM res_deel
             WHERE res_deel_verwijder IS NULL) rd
     WHERE d.ins_deel_key = rd.res_ins_deel_key(+);

-------------------------------------------------------
--- Rapportages monitoring bezetting Provinciehuis ----
-------------------------------------------------------

CREATE OR REPLACE VIEW PNBR_WP_BEZETTING_WEEK_VERD
AS
      SELECT TO_NUMBER (TO_CHAR (wp.ins_deel_state_date, 'iw'))
                 weeknr,
             aantal_sensoren_verdieping.alg_gebouw_naam,
             aantal_sensoren_verdieping.alg_verdieping_volgnr,
             aantal_sensoren_verdieping.alg_verdieping_omschrijving,
             aantal_sensoren_verdieping.aantal_sensoren,
             aantal_sensoren_verdieping.aantal_sensoren * 40 * 60
                 max_bezetting,
             SUM (DECODE (wp.status, 'BEZET', wp.duur_status, 0))
                 bezet,
             ROUND (
                   (SUM (DECODE (wp.status, 'BEZET', wp.duur_status, 0)))
                 / (aantal_sensoren_verdieping.aantal_sensoren * 40 * 60)
                 * 100,
                 2)
                 perc_bezet,
             SUM (DECODE (wp.status, 'STORING', wp.duur_status, 0))
                 storing,
             ROUND (
                   (SUM (DECODE (wp.status, 'STORING', wp.duur_status, 0)))
                 / (aantal_sensoren_verdieping.aantal_sensoren * 40 * 60)
                 * 100,
                 2)
                 perc_storing
        FROM pnbr_werkplekbezetting wp,
             (  SELECT v.alg_verdieping_key,
                       r.alg_ruimte_nr,
                       r.alg_ruimte_key,
                       COUNT (d.ins_deel_key)     aantal_sensoren
                  FROM ins_deel d, alg_ruimte r, alg_verdieping v
                 WHERE     d.ins_srtdeel_key = 3521
                       AND d.ins_deel_verwijder IS NULL
                       AND d.ins_deel_actief = 1
                       AND d.ins_alg_ruimte_type = 'R'
                       AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                       AND r.alg_verdieping_key = v.alg_verdieping_key
              GROUP BY v.alg_verdieping_key, r.alg_ruimte_nr, r.alg_ruimte_key)
             aantal_sensoren_ruimte,
             (  SELECT g.alg_gebouw_naam,
                       v.alg_verdieping_volgnr,
                       v.alg_verdieping_omschrijving,
                       v.alg_verdieping_key,
                       COUNT (d.ins_deel_key)     aantal_sensoren
                  FROM ins_deel    d,
                       alg_ruimte  r,
                       alg_verdieping v,
                       alg_gebouw  g
                 WHERE     d.ins_srtdeel_key = 3521
                       AND d.ins_deel_verwijder IS NULL
                       AND d.ins_deel_actief = 1
                       AND d.ins_alg_ruimte_type = 'R'
                       AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                       AND r.alg_verdieping_key = v.alg_verdieping_key
                       AND v.alg_gebouw_key = g.alg_gebouw_key
              GROUP BY g.alg_gebouw_naam,
                       v.alg_verdieping_volgnr,
                       v.alg_verdieping_omschrijving,
                       v.alg_verdieping_key
              ORDER BY g.alg_gebouw_naam, v.alg_verdieping_volgnr)
             aantal_sensoren_verdieping
       WHERE     wp.alg_ruimte_key = aantal_sensoren_ruimte.alg_ruimte_key
             AND aantal_sensoren_ruimte.alg_verdieping_key =
                 aantal_sensoren_verdieping.alg_verdieping_key
    GROUP BY aantal_sensoren_verdieping.alg_gebouw_naam,
             aantal_sensoren_verdieping.alg_verdieping_volgnr,
             aantal_sensoren_verdieping.alg_verdieping_omschrijving,
             aantal_sensoren_verdieping.aantal_sensoren,
             TO_CHAR (wp.ins_deel_state_date, 'iw')
    ORDER BY TO_NUMBER (TO_CHAR (wp.ins_deel_state_date, 'iw')),
             aantal_sensoren_verdieping.alg_verdieping_volgnr;


-------------------------------------------------------------
--- Einde rapportages monitoring bezetting Provinciehuis ----
-------------------------------------------------------------


CREATE OR REPLACE PROCEDURE pnbr_daily
AS
BEGIN
    -- automatische mandatering obv kostenplaats.
    pnbr.export_werkplekbezetting ();
END;
/

CREATE OR REPLACE VIEW PNBR_V_THEMA_DEEL_RES_DATUM
(
    fclt_f_datum,
    ins_deel_key,
    min_van,
    max_tot,
    waarde1,
    waarde,
    waarde3
)
AS
    WITH
        datums
        AS
            (    SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
                   FROM DUAL
             CONNECT BY LEVEL <= 62)
      SELECT datum
                 fclt_f_datum,
             ins_deel_key,
             MIN (res_rsv_deel_van)
                 min_van,
             MAX (res_rsv_deel_tot)
                 max_tot,
             CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0 ELSE 3                      -- hele dag
                                                                    END
                 waarde1,
             CASE
                 WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0
                 WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 13 THEN 1               -- ochtend
                 WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 12 THEN 2                -- middag
                 ELSE 3                                                                  -- hele dag
             END
                 waarde,
             COUNT (res_rsv_deel_tot)                                 -- aantal reservering deze dag
                 waarde3
        FROM (SELECT datums.datum,
                     res_ins_deel_key ins_deel_key,
                     res_rsv_deel_van,
                     res_rsv_deel_tot
                FROM res_v_aanwezigdeel r,
                     ins_deel          d,
                     datums,
                     (SELECT datum,
                             res_deel_key,
                             res_rsv_deel_van,
                             res_rsv_deel_tot
                        FROM datums, res_v_aanwezigrsv_deel rrd
                       WHERE     res_rsv_deel_van > TRUNC(SYSDATE) - 1        -- negeer alle irrelevante historie sowieso
                             AND datum + 1 >= res_rsv_deel_van
                             AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen
               WHERE     r.res_deel_key = blokkerend.res_deel_key(+)
                     AND datums.datum = blokkerend.datum(+)
                     AND (r.res_deel_vervaldatum IS NULL or r.res_deel_vervaldatum > datums.datum)
                     AND d.ins_deel_key = r.res_ins_deel_key)
    GROUP BY datum, ins_deel_key
    ORDER BY datum, ins_deel_key;

CREATE OR REPLACE VIEW PNBR_V_LABEL_DEEL_RES_DATUM
(
    fclt_f_datum,
    ins_deel_key,
    res_deel_omschrijving,
    waarde1,
    waarde,
    waarde3,
    waarde_html,
    waarde_html2
)
AS
    WITH
        datums
        AS
            (    SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
                   FROM DUAL
             CONNECT BY LEVEL <= 62)
      SELECT datums.datum
                 fclt_f_datum,
             isd.res_ins_deel_key
                 ins_deel_key,
             res_deel_omschrijving,
                CHR (10)
             || LISTAGG (
                    DECODE (
                        naam,
                        NULL, '',
                           '[s40]'
                        || naam
                        || ' ('
                        || TO_CHAR (res_rsv_deel_van, 'HH24:MI')
                        || '-'
                        || DECODE (TRUNC (res_rsv_deel_tot),
                                   TRUNC (res_rsv_deel_van), TO_CHAR (res_rsv_deel_tot, 'HH24:MI'),
                                   TO_CHAR (res_rsv_deel_tot, 'DD-MM-YYYY HH24:MI'))
                        || ')'),
                    CHR (10))
                    WITHIN GROUP (ORDER BY res_rsv_deel_van)
                 waarde1,
                CHR (10)
             || LISTAGG (
                    DECODE (naam,
                            NULL, '',
                            '[s40]' || TO_CHAR (res_rsv_deel_van, 'HH24:MI') || ' ' || naam),
                    CHR (10))
                    WITHIN GROUP (ORDER BY res_rsv_deel_van)
                 waarde2,
                CHR (10)
             || LISTAGG (DECODE (naam, NULL, '', '[s40]' || naam), CHR (10))
                    WITHIN GROUP (ORDER BY res_rsv_deel_van)
                 waarde3,
             LISTAGG (
                 DECODE (
                     naam,
                     NULL, '',
                        '<span class="body">'
                     || TO_CHAR (res_rsv_deel_van, 'HH24:MI')
                     || ' '
                     || naam
                     || '</span>'),
                 '<br>')
                 WITHIN GROUP (ORDER BY res_rsv_deel_van)
                 waarde_html,
             LISTAGG (DECODE (naam, NULL, '', '<span class="body">' || naam || '</span>'), '<br>')
                 WITHIN GROUP (ORDER BY res_rsv_deel_van)
                 waarde_html2
        FROM res_v_aanwezigdeel isd,
             datums,
             (SELECT datum,
                     res_ins_deel_key,
                     DECODE (p.prs_perslid_visibility,
                             1, pf.prs_perslid_naam_friendly,
                             a.prs_afdeling_omschrijving)
                         naam,
                     res_rsv_deel_van,
                     res_rsv_deel_tot
                FROM res_v_aanwezigdeel     r,
                     res_v_aanwezigrsv_deel rrd,
                     res_rsv_ruimte         rrr,
                     prs_v_perslid_fullnames pf,
                     prs_perslid            p,
                     prs_afdeling           a,
                     datums
               WHERE     r.res_deel_key = rrd.res_deel_key
                     AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                     AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
                     AND pf.prs_perslid_key = p.prs_perslid_key
                     AND p.prs_afdeling_key = a.prs_afdeling_key
                     AND datum + 1 >= res_rsv_deel_van
                     AND datum < res_rsv_deel_tot ) res                          -- Bezet
       WHERE isd.res_ins_deel_key = res.res_ins_deel_key(+) AND datums.datum = res.datum(+)
    GROUP BY datums.datum, isd.res_ins_deel_key, res_deel_omschrijving;

CREATE OR REPLACE VIEW PNBR_V_THEMA_RUIMTE_RES_DATUM
(
    FCLT_F_DATUM,
    ALG_RUIMTE_KEY,
    RES_RUIMTE_KEY,
    MIN_VAN,
    MAX_TOT,
    WAARDE1,
    WAARDE,
    WAARDE3
)
AS
    WITH
        datums
        AS
            (    SELECT TRUNC (SYSDATE) + LEVEL - 1     datum
                   FROM DUAL
             CONNECT BY LEVEL <= 62)
      SELECT datum                         fclt_f_datum,
             alg_ruimte_key,
             res_ruimte_key,
             MIN (res_rsv_ruimte_van)      min_van,
             MAX (res_rsv_ruimte_tot)      max_tot,
             CASE
                 WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr
                 ELSE 'bezet'
             END                           waarde1,
             CASE
                 WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr
                 ELSE 'bezet'
             END                           waarde,
             COUNT (res_rsv_ruimte_tot)         -- aantal reservering deze dag
                                           waarde3
        FROM (SELECT datums.datum,
                     rr.res_ruimte_key,
                     rar.alg_ruimte_key     alg_ruimte_key,
                     res_ruimte_nr,
                     res_rsv_ruimte_van,
                     res_rsv_ruimte_tot
                FROM res_v_aanwezigruimte rr,
                     res_alg_ruimte      rar,
                     datums,
                     (SELECT datum,
                             res_ruimte_key,
                             res_rsv_ruimte_van,
                             res_rsv_ruimte_tot
                        FROM datums,
                             res_rsv_ruimte       rrr,
                             res_ruimte_opstelling rro
                       WHERE     res_rsv_ruimte_van > TRUNC (SYSDATE) - 1 -- negeer alle irrelevante historie sowieso
                             AND rrr.res_rsv_ruimte_verwijder IS NULL
                             AND rrr.res_ruimte_opstel_key =
                                 rro.res_ruimte_opstel_key
                             AND datum >= TRUNC (res_rsv_ruimte_van)
                             AND datum < TRUNC (res_rsv_ruimte_tot) + 1)
                     blokkerend               -- vandaag en nog niet afgelopen
               WHERE     rr.res_ruimte_key = blokkerend.res_ruimte_key(+)
                     AND rr.res_ruimte_key = rar.res_ruimte_key
                     AND rar.res_alg_ruimte_verwijder IS NULL
                     AND datums.datum = blokkerend.datum(+)
                     AND res_discipline_key = 4681               -- Team areas
                     AND (   rr.res_ruimte_vervaldatum IS NULL
                          OR rr.res_ruimte_vervaldatum > datums.datum))
    GROUP BY datum,
             alg_ruimte_key,
             res_ruimte_key,
             res_ruimte_nr;

CREATE OR REPLACE VIEW pnbr_v_label_ruimte_res_datum
(
    fclt_f_datum,
    alg_ruimte_key,
    waarde
)
AS
    WITH
        datums
        AS
            (    SELECT TRUNC (SYSDATE) + LEVEL - 1     datum
                   FROM DUAL
             CONNECT BY LEVEL <= 62)
    SELECT DISTINCT
           datums.datum    fclt_f_datum,
           alg_ruimte_key,
           DECODE (
               prs_perslid_naam_friendly,
               NULL, '',
                  prs_perslid_naam_friendly
               || ' ('
               || TO_CHAR (res_rsv_ruimte_van, 'HH24:MI')
               || '-'
               || DECODE (
                      TRUNC (res_rsv_ruimte_tot),
                      TRUNC (res_rsv_ruimte_van), TO_CHAR (
                                                      res_rsv_ruimte_tot,
                                                      'HH24:MI'),
                      TO_CHAR (res_rsv_ruimte_tot, 'DD-MM-YYYY HH24:MI'))
               || ')')     waarde1
      FROM datums,
           (SELECT TRUNC (arr.res_rsv_ruimte_van)     datum,
                   r2a.alg_ruimte_key,
                   r2a.res_ruimte_key,
                   rr.res_ruimte_omschrijving,
                   prs_perslid_naam_friendly,
                   arr.res_rsv_ruimte_van,
                   arr.res_rsv_ruimte_tot
              FROM RES_V_RSV_RUIMTE_2_ALG_RUIMTE  r2a,
                   res_ruimte                     rr,
                   res_v_aanwezigrsv_ruimte       arr,
                   prs_v_perslid_fullnames        p
             WHERE     r2a.res_rsv_ruimte_key = arr.res_rsv_ruimte_key
                   AND r2a.res_ruimte_key = rr.res_ruimte_key
                   AND arr.res_activiteit_key = 370              -- Teamruimte
                   AND arr.res_rsv_ruimte_host_key = p.prs_perslid_key) res -- Bezet
     WHERE datums.datum = res.datum(+);


CREATE OR REPLACE VIEW pnbr_v_rap_res_teamruimte
(
    datum,
    HOST,
    alg_ruimte_key,
    ruimte_nr,
    reserveringen
)
AS
      SELECT datum,
             HOST,
             alg_ruimte_key,
             ruimte_nr,
             LISTAGG (reservering, ', ')
                 WITHIN GROUP (ORDER BY datum_res, alg_ruimte_key)    reserveringen
        FROM (    SELECT TRUNC (SYSDATE) - LEVEL     datum
                    FROM DUAL
              CONNECT BY LEVEL <=
                           TRUNC (SYSDATE)
                         - ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)) tijdlijn,
             (SELECT TRUNC (res_rsv_ruimte_van)     datum_res,
                     p.prs_perslid_naam_friendly    HOST,
                     rmt.alg_ruimte_key,
                     rmt.ruimte_nr,
                     CASE
                         WHEN     (TO_NUMBER (
                                       TO_CHAR (res_rsv_ruimte_van, 'hh24'))) <
                                  12
                              AND (TO_NUMBER (
                                       TO_CHAR (res_rsv_ruimte_tot, 'hh24'))) >
                                  12
                         THEN
                             'hele dag'
                         WHEN     (TO_NUMBER (
                                       TO_CHAR (res_rsv_ruimte_van, 'hh24'))) <
                                  12
                              AND (TO_NUMBER (
                                       TO_CHAR (res_rsv_ruimte_tot, 'hh24'))) <=
                                  12
                         THEN
                             'ochtend'
                         WHEN (TO_NUMBER (TO_CHAR (res_rsv_ruimte_van, 'hh24'))) >=
                              12
                         THEN
                             'middag'
                         ELSE
                             'onbekend'
                     END                            AS reservering
                FROM res_rsv_ruimte             res,
                     prs_v_perslid_fullnames_all p,
                     (  SELECT res_rsv_ruimte_key,
                               rr.res_ruimte_nr,
                               MAX (ra.alg_ruimte_key)     alg_ruimte_key,
                               MAX (rr.res_ruimte_nr)      ruimte_nr
                          FROM res_rsv_ruimte     r,
                               res_ruimte_opstelling ro,
                               res_ruimte         rr,
                               res_alg_ruimte     ra
                         WHERE     r.res_rsv_ruimte_verwijder IS NULL
                               AND r.res_ruimte_opstel_key =
                                   ro.res_ruimte_opstel_key
                               AND ro.res_ruimte_key = rr.res_ruimte_key
                               AND rr.res_ruimte_key = ra.res_ruimte_key
                               AND r.res_rsv_ruimte_dirtlevel = 0
                      GROUP BY res_rsv_ruimte_key, rr.res_ruimte_nr) rmt
               WHERE     res.res_rsv_ruimte_verwijder IS NULL
                     AND res.res_activiteit_key = 370
                     AND res.res_rsv_ruimte_key = rmt.res_rsv_ruimte_key
                     AND res.res_rsv_ruimte_host_key = p.prs_perslid_key)
             reservering
       WHERE tijdlijn.datum = reservering.datum_res(+)
    GROUP BY datum,
             datum_res,
             alg_ruimte_key,
             ruimte_nr,
             HOST
    ORDER BY tijdlijn.datum ASC;

CREATE OR REPLACE VIEW PNBR_V_BEZ_SENSOR_DAGDEEL
AS
  SELECT TRUNC (stat_his.ins_deel_statedate)       datum,
         r.alg_ruimte_key,
         r.alg_ruimte_omschrijving,
         CASE -- na 12 uur bezet tellen we mee voor de middag , voor 12 uur tellen we mee voor de ochtend
             WHEN TO_NUMBER (TO_CHAR (stat_his.ins_deel_statedate, 'HH24')) <
                  12
             THEN
                 'Ochtend'
             WHEN TO_NUMBER (TO_CHAR (stat_his.ins_deel_statedate, 'HH24')) >=
                  12
             THEN
                 'Middag'
             ELSE
                 'Onbekend'
         END                                       AS dagdeel,
         SUM (stat_his.duur_status)                bez_minuten,
         COUNT (DISTINCT stat_his.ins_deel_key)    aant_sensoren,
         ROUND (
               SUM (stat_his.duur_status)
             / COUNT (DISTINCT stat_his.ins_deel_key),
             0)                                    gem_bez_sensor
    FROM ins_deel  d,
         alg_ruimte r,
         (SELECT ranking,
                 ins_deel_key,
                 ins_deel_state,
                 ins_deel_statedate,
                   (  ins_deel_statedate
                    - LAG (ins_deel_statedate)
                          OVER (PARTITION BY ins_deel_key ORDER BY ranking))
                 * -1440    AS duur_status   --- duur van de status in minuten
            FROM (SELECT ins_deel_key,
                         ins_deel_state,
                         ins_deel_statedate,
                         RANK ()
                             OVER (
                                 PARTITION BY ins_deel_key
                                 ORDER BY ins_deel_key, ins_deel_statedate DESC)    AS ranking
                    FROM ins_deel_state_history) rank_state) stat_his,
         alg_ruimte rmt
   WHERE     d.ins_deel_key = stat_his.ins_deel_key
         AND d.ins_alg_ruimte_key = r.alg_ruimte_key
         AND d.ins_srtdeel_key = 3521  --- alleen sensoren van hi-technologies
         AND stat_his.ins_deel_state = 1 -- voor de management info houden we het simpel: wat bezet is bewaren we
         AND r.alg_ruimte_key = rmt.alg_ruimte_key
GROUP BY TRUNC (stat_his.ins_deel_statedate),
         r.alg_ruimte_key,
         r.alg_ruimte_omschrijving,
         CASE -- na 12 uur bezet tellen we mee voor de middag , voor 12 uur tellen we mee voor de ochtend
             WHEN TO_NUMBER (TO_CHAR (stat_his.ins_deel_statedate, 'HH24')) <
                  12
             THEN
                 'Ochtend'
             WHEN TO_NUMBER (TO_CHAR (stat_his.ins_deel_statedate, 'HH24')) >=
                  12
             THEN
                 'Middag'
             ELSE
                 'Onbekend'
         END;

CREATE OR REPLACE VIEW PNBR_V_RAP_BEZ_SENSOR_DAGDEEL
(
    DATUM,
    ALG_RUIMTE_KEY,
    RUIMTE_OMSCHRIJVING,
    DAGDEEL,
    BEZ_MINUTEN,
    AANT_SENSOREN,
    GEM_BEZ_SENSOR
)
AS
      SELECT tijdlijn.datum,
             bez.alg_ruimte_key,
             bez.alg_ruimte_omschrijving,
             bez.dagdeel,
             bez.bez_minuten,
             bez.aant_sensoren,
             bez.gem_bez_sensor
        FROM pnbr_v_bez_sensor_dagdeel bez,
             (    SELECT TRUNC (SYSDATE) - LEVEL     datum
                    FROM DUAL
              CONNECT BY LEVEL <=
                           TRUNC (SYSDATE)
                         - ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)) tijdlijn
       WHERE tijdlijn.datum = bez.datum(+)
    ORDER BY tijdlijn.datum DESC,  bez.alg_ruimte_key,   bez.dagdeel desc;

CREATE OR REPLACE VIEW PNBR_V_RAP_RES_VS_BEZ
(
    datum,
    alg_ruimte_key,
    HOST,
    ruimte_nr,
    reserveringen,
    ruimte_omschrijving,
    bez_minuten_ochtend,
    aant_sensoren_ochtend,
    gem_bez_sensor_ochtend,
    bez_minuten_middag,
    aant_sensoren_middag,
    gem_bez_sensor_middag
)
AS
      SELECT DISTINCT datum,
             alg_ruimte_key,
             HOST,
             ruimte_nr,
             reserveringen,
             ruimte_omschrijving,
             bez_minuten_ochtend,
             aant_sensoren_ochtend,
             gem_bez_sensor_ochtend,
             bez_minuten_middag,
             aant_sensoren_middag,
             gem_bez_sensor_middag
        FROM (SELECT *
                FROM (    SELECT TRUNC (SYSDATE) - LEVEL     datum
                            FROM DUAL
                      CONNECT BY LEVEL <=
                                   TRUNC (SYSDATE)
                                 - ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3))
                     JOIN pnbr_v_rap_res_teamruimte USING (datum))
             FULL JOIN
             (SELECT *
                FROM (    SELECT TRUNC (SYSDATE) - LEVEL     datum
                            FROM DUAL
                      CONNECT BY LEVEL <=
                                   TRUNC (SYSDATE)
                                 - ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3))
                     JOIN
                     (  SELECT datum,
                               alg_ruimte_key,
                               ruimte_omschrijving,
                               SUM (
                                   CASE
                                       WHEN dagdeel = 'Ochtend' THEN bez_minuten
                                       ELSE NULL
                                   END)    bez_minuten_ochtend,
                               SUM (
                                   CASE
                                       WHEN dagdeel = 'Ochtend'
                                       THEN
                                           aant_sensoren
                                       ELSE
                                           NULL
                                   END)    aant_sensoren_ochtend,
                               SUM (
                                   CASE
                                       WHEN dagdeel = 'Ochtend'
                                       THEN
                                           gem_bez_sensor
                                       ELSE
                                           NULL
                                   END)    gem_bez_sensor_ochtend,
                               SUM (
                                   CASE
                                       WHEN dagdeel = 'Middag' THEN bez_minuten
                                       ELSE NULL
                                   END)    bez_minuten_middag,
                               SUM (
                                   CASE
                                       WHEN dagdeel = 'Middag' THEN aant_sensoren
                                       ELSE NULL
                                   END)    aant_sensoren_middag,
                               SUM (
                                   CASE
                                       WHEN dagdeel = 'Middag'
                                       THEN
                                           gem_bez_sensor
                                       ELSE
                                           NULL
                                   END)    gem_bez_sensor_middag
                          FROM pnbr_v_rap_bez_sensor_dagdeel
                      GROUP BY datum, alg_ruimte_key, ruimte_omschrijving
                      ORDER BY datum DESC)
                         USING (datum))
                 USING (datum, alg_ruimte_key)
    ORDER BY datum;

CREATE OR REPLACE VIEW PNBR_V_RAP_BEZ_VERDIEPING
AS
      SELECT bezetting.datum,
             TO_CHAR (bezetting.datum, 'DAY')       dag,
             bezetting.alg_verdieping_volgnr,
             aant_verd.aant_sensoren,
             aant_verd.max_bez_minuten_dagdeel,
             SUM (bezetting.bez_minuten_ochtend)    tot_bez_ochtend,
             ROUND (
                   (  SUM (bezetting.bez_minuten_ochtend)
                    / aant_verd.max_bez_minuten_dagdeel)
                 * 100)                             perc_bez_ochtend,
             SUM (bezetting.bez_minuten_middag)     tot_bez_middag,
             ROUND (
                   (  SUM (bezetting.bez_minuten_middag)
                    / aant_verd.max_bez_minuten_dagdeel)
                 * 100)                             perc_bez_middag
        FROM (  SELECT b.datum,
                       v.alg_verdieping_volgnr,
                       v.alg_verdieping_key,
                       b.alg_ruimte_key,
                       SUM (
                           CASE
                               WHEN b.dagdeel = 'Ochtend' THEN b.bez_minuten
                               ELSE NULL
                           END)    bez_minuten_ochtend,
                       SUM (
                           CASE
                               WHEN b.dagdeel = 'Middag' THEN b.bez_minuten
                               ELSE NULL
                           END)    bez_minuten_middag
                  FROM pnbr_v_rap_bez_sensor_dagdeel b,
                       (SELECT r.alg_ruimte_key,
                               v.alg_verdieping_key,
                               v.alg_verdieping_volgnr
                          FROM alg_ruimte r, alg_verdieping v
                         WHERE v.alg_verdieping_key = r.alg_verdieping_key) v
                 WHERE b.alg_ruimte_key = v.alg_ruimte_key(+)
              GROUP BY b.datum,
                       v.alg_verdieping_key,
                       v.alg_verdieping_volgnr,
                       b.alg_ruimte_key,
                       b.ruimte_omschrijving
              ORDER BY datum DESC, v.alg_verdieping_volgnr) bezetting,
             (  SELECT g.alg_gebouw_omschrijving,
                       v.alg_verdieping_key,
                       COUNT (d.ins_deel_key)           aant_sensoren,
                       240 * COUNT (d.ins_deel_key)     max_bez_minuten_dagdeel
                  FROM alg_gebouw  g,
                       alg_verdieping v,
                       alg_ruimte  r,
                       ins_deel    d
                 WHERE     g.alg_gebouw_key = v.alg_gebouw_key
                       AND v.alg_verdieping_key = r.alg_verdieping_key
                       AND r.alg_ruimte_key = d.ins_alg_ruimte_key
                       AND d.ins_alg_ruimte_type = 'R'
                       AND d.ins_srtdeel_key = 3521 --- alleen sensoren van hi-technologies
                       AND d.ins_deel_verwijder IS NULL
              GROUP BY g.alg_gebouw_omschrijving, v.alg_verdieping_key
              ORDER BY g.alg_gebouw_omschrijving) aant_verd
       WHERE bezetting.alg_verdieping_key = aant_verd.alg_verdieping_key(+)
    GROUP BY bezetting.datum,
             bezetting.alg_verdieping_volgnr,
             aant_verd.aant_sensoren,
             aant_verd.max_bez_minuten_dagdeel
    ORDER BY bezetting.datum, bezetting.alg_verdieping_volgnr;

CREATE OR REPLACE VIEW pnbr_wp_bezetting_dag_verd
AS
     SELECT
      to_char (wp.ins_deel_state_date , 'IW') weeknr,
             TO_CHAR (wp.ins_deel_state_date, 'DAY')
                 dag,
             fac.getweekdaynum(wp.ins_deel_state_date) sortering,
             aantal_sensoren_verdieping.alg_gebouw_naam,
             aantal_sensoren_verdieping.alg_verdieping_volgnr,
             aantal_sensoren_verdieping.alg_verdieping_omschrijving,
             aantal_sensoren_verdieping.aantal_sensoren,
             aantal_sensoren_verdieping.aantal_sensoren * 8 * 60
                 max_bezetting,
             SUM (DECODE (wp.status, 'BEZET', wp.duur_status, 0))
                 bezet,
             ROUND (
                   (SUM (DECODE (wp.status, 'BEZET', wp.duur_status, 0)))
                 / (aantal_sensoren_verdieping.aantal_sensoren * 8 * 60)
                 * 100,
                 2)
                 perc_bezet,
             SUM (DECODE (wp.status, 'STORING', wp.duur_status, 0))
                 storing,
             ROUND (
                   (SUM (DECODE (wp.status, 'STORING', wp.duur_status, 0)))
                 / (aantal_sensoren_verdieping.aantal_sensoren * 8 * 60)
                 * 100,
                 2)
                 perc_storing
        FROM pnbr_werkplekbezetting wp,
             (SELECT                             --First day of previous month
                     TRUNC (TRUNC (SYSDATE, 'Month') - 1, 'Month')               van,
                     --Last day of previous month
                     LAST_DAY (TRUNC (TRUNC (SYSDATE, 'Month') - 1, 'Month'))    tot
                FROM DUAL) datum,
             (  SELECT v.alg_verdieping_key,
                       r.alg_ruimte_nr,
                       r.alg_ruimte_key,
                       COUNT (d.ins_deel_key)     aantal_sensoren
                  FROM ins_deel d, alg_ruimte r, alg_verdieping v
                 WHERE     d.ins_srtdeel_key = 3521
                       AND d.ins_deel_verwijder IS NULL
                       AND d.ins_deel_actief = 1
                       AND d.ins_alg_ruimte_type = 'R'
                       AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                       AND r.alg_verdieping_key = v.alg_verdieping_key
              GROUP BY v.alg_verdieping_key, r.alg_ruimte_nr, r.alg_ruimte_key)
             aantal_sensoren_ruimte,
             (  SELECT g.alg_gebouw_naam,
                       v.alg_verdieping_volgnr,
                       v.alg_verdieping_omschrijving,
                       v.alg_verdieping_key,
                       COUNT (d.ins_deel_key)     aantal_sensoren
                  FROM ins_deel    d,
                       alg_ruimte  r,
                       alg_verdieping v,
                       alg_gebouw  g
                 WHERE     d.ins_srtdeel_key = 3521
                       AND d.ins_deel_verwijder IS NULL
                       AND d.ins_deel_actief = 1
                       AND d.ins_alg_ruimte_type = 'R'
                       AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                       AND r.alg_verdieping_key = v.alg_verdieping_key
                       AND v.alg_gebouw_key = g.alg_gebouw_key
              GROUP BY g.alg_gebouw_naam,
                       v.alg_verdieping_volgnr,
                       v.alg_verdieping_omschrijving,
                       v.alg_verdieping_key
              ORDER BY g.alg_gebouw_naam, v.alg_verdieping_volgnr)
             aantal_sensoren_verdieping
       WHERE     wp.alg_ruimte_key = aantal_sensoren_ruimte.alg_ruimte_key
             AND aantal_sensoren_ruimte.alg_verdieping_key =
                 aantal_sensoren_verdieping.alg_verdieping_key
             AND ins_deel_state_date >= van
             AND ins_deel_state_date <= tot
    GROUP BY aantal_sensoren_verdieping.alg_gebouw_naam,
             aantal_sensoren_verdieping.alg_verdieping_volgnr,
             aantal_sensoren_verdieping.alg_verdieping_omschrijving,
             aantal_sensoren_verdieping.aantal_sensoren,
             wp.ins_deel_state_date
    ORDER BY wp.ins_deel_state_date,
             aantal_sensoren_verdieping.alg_verdieping_volgnr;

CREATE OR REPLACE VIEW pnbr_wp_gem_bezetting_dag_verd
(
    dag,
    gebouw,
    verdieping,
    max_bezetting,
    bezetting,
    perc_bezetting
)
AS
      SELECT sortering || '-' || dag as dag,
             alg_gebouw_naam,
             alg_verdieping_volgnr,
             SUM (max_bezetting),
             SUM (bezet),
             ROUND ((SUM (bezet) / SUM (max_bezetting)) * 100)     perc
        FROM pnbr_wp_bezetting_dag_verd
    GROUP BY sortering || '-' || dag, alg_gebouw_naam, alg_verdieping_volgnr
    ORDER BY dag;

CREATE OR REPLACE VIEW pnbr_wp_bez_weeknr_dag_verd
(
    weeknr_dag,
    gebouw,
    verdieping,
    perc_bez
)
AS
      SELECT    weeknr
             || ' '
             || sortering
             || '-'
             || dag,
             alg_gebouw_naam,
             alg_verdieping_volgnr,
             perc_bezet
        FROM pnbr_wp_bezetting_dag_verd
    ORDER BY   weeknr
             || ' '
             || sortering
             || '-'
             || dag;

CREATE OR REPLACE VIEW PNBR_WP_BEZETTING_DAGDEEL
(
    DATUM,
    DAG,
    DAGDEEL,
    PERC_BEZ
)
BEQUEATH DEFINER
AS
      SELECT bez.datum,
             TO_CHAR (bez.datum, 'DAY')    dag,
             bez.dagdeel,
             ROUND (
                   (  SUM (bez.bez_minuten)
                    / (  (SELECT COUNT (d.ins_deel_key)     aantal_sensoren
                            FROM ins_deel d
                           WHERE     d.ins_srtdeel_key = 3521
                                 AND d.ins_deel_verwijder IS NULL
                                 AND d.ins_deel_actief = 1
                                 AND d.ins_alg_ruimte_type = 'R')
                       * 4
                       * 60))
                 * 100)                    perc_bez
        FROM pnbr_v_bez_sensor_dagdeel bez,
             (SELECT                             --First day of previous month
                     TRUNC (TRUNC (SYSDATE, 'Month') - 1, 'Month')               van,
                     --Last day of previous month
                     LAST_DAY (TRUNC (TRUNC (SYSDATE, 'Month') - 1, 'Month'))    tot
                FROM DUAL) tijdlijn
       WHERE bez.datum >= van AND bez.datum <= tot
    GROUP BY bez.datum, bez.dagdeel
    ORDER BY bez.datum, bez.dagdeel DESC;

CREATE OR REPLACE VIEW pnbr_wp_bezetting_dagdeel_perc
AS
      SELECT fac.getweekdaynum (dd.datum) || '-' || dd.dag     AS weekdag,
             dd.dagdeel,
             ROUND (SUM (dd.perc_bez) / aant.aant_x)           AS perc_bez
        FROM pnbr_wp_bezetting_dagdeel dd,
             (  SELECT dag, dagdeel, COUNT (dagdeel) aant_x
                  FROM pnbr_wp_bezetting_dagdeel
              GROUP BY dag, dagdeel) aant
       WHERE dd.dag = aant.dag AND dd.dagdeel = aant.dagdeel
    GROUP BY fac.getweekdaynum (dd.datum),
             dd.dag,
             dd.dagdeel,
             aant.aant_x
    ORDER BY fac.getweekdaynum (dd.datum);

-----------------------------------------------------------
----- Dashboard Management rapportages --------------------
-----------------------------------------------------------
CREATE OR REPLACE VIEW PNBR_V_GEM_AANT_MLD_MAAND
AS
  SELECT l.alg_locatie_omschrijving,
         l.alg_locatie_key,
         aant_maand.maand,
         aant_maand.aantal,
         gem.gem_maand
    FROM alg_locatie l,
         ( SELECT m.mld_alg_locatie_key,
         TO_CHAR (m.mld_melding_datum, 'yyyy')        jaar,
            TO_CHAR (m.mld_melding_datum, 'yyyy-mm')
         || ' '
         || TO_CHAR (m.mld_melding_datum, 'Month')    maand,
         COUNT (mld_melding_key)                      aantal
    FROM mld_melding m, mld_stdmelding sm
   WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
         AND TRUNC (m.mld_melding_datum) >=
             TRUNC (TRUNC (ADD_MONTHS (SYSDATE, -24)), 'Month')
         AND TRUNC (m.mld_melding_datum) < TRUNC (SYSDATE, 'Month')
GROUP BY m.mld_alg_locatie_key,
         TO_CHAR (m.mld_melding_datum, 'yyyy'),
            TO_CHAR (m.mld_melding_datum, 'yyyy-mm')
         || ' '
         || TO_CHAR (m.mld_melding_datum, 'Month')) aant_maand,
         (  SELECT m.mld_alg_locatie_key, COUNT (mld_melding_key) / 24 gem_maand
              FROM mld_melding m, mld_stdmelding sm
             WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
                   AND TRUNC (m.mld_melding_datum) >=
                       TRUNC (TRUNC (ADD_MONTHS (SYSDATE, -24)), 'Month')
                   AND TRUNC (m.mld_melding_datum) < TRUNC (SYSDATE, 'Month')
          GROUP BY m.mld_alg_locatie_key) gem
   WHERE     l.alg_locatie_key = aant_maand.mld_alg_locatie_key
         AND l.alg_locatie_key = gem.mld_alg_locatie_key
         AND l.alg_locatie_verwijder IS NULL
         AND (   l.alg_locatie_vervaldatum IS NULL
              OR l.alg_locatie_vervaldatum > TRUNC (SYSDATE))
ORDER BY l.alg_locatie_omschrijving, aant_maand.jaar, aant_maand.maand;

CREATE OR REPLACE VIEW PNBR_V_AANT_MLD_PER_SRT
AS
      SELECT TO_CHAR (m.mld_melding_datum, 'yyyy')     jaar,
                TO_CHAR (m.mld_melding_datum, 'yyyy')
             || ' '
             || TO_CHAR (m.mld_melding_datum, 'mm')    periode,
             ks.prs_kostensoort_oms                    soort,
             COUNT (m.mld_melding_key)                 aantal
        FROM mld_melding m, mld_stdmelding sm, prs_kostensoort ks
       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND ks.prs_kostensoort_key = sm.prs_kostensoort_key
    GROUP BY TO_CHAR (m.mld_melding_datum, 'yyyy'),
                TO_CHAR (m.mld_melding_datum, 'yyyy')
             || ' '
             || TO_CHAR (m.mld_melding_datum, 'mm'),
             ks.prs_kostensoort_oms
    ORDER BY    TO_CHAR (m.mld_melding_datum, 'yyyy')
             || ' '
             || TO_CHAR (m.mld_melding_datum, 'mm');

CREATE OR REPLACE VIEW PNBR_V_GEM_RESPONSE_TIJD
AS
      SELECT jaar,
             periode,
             soort,
             COUNT (mld_melding_key)                           aant_mld,
             (SUM (hrs_between) / COUNT (mld_melding_key))     gem_uren
        FROM (SELECT TO_CHAR (m.mld_melding_datum, 'yyyy')     jaar,
                        TO_CHAR (m.mld_melding_datum, 'yyyy')
                     || ' '
                     || TO_CHAR (m.mld_melding_datum, 'mm')    periode,
                     ks.prs_kostensoort_oms                    soort,
                     m.mld_melding_key,
                     m.mld_melding_datum                       datum_melden,
                     COALESCE (
                         (mld.getmeldingstatusdate (m.mld_melding_key, 4)),
                         SYSDATE)                              in_behandeling,
                     ROUND (
                           24
                         * (  (COALESCE (
                                   (mld.getmeldingstatusdate (
                                        m.mld_melding_key,
                                        4)),
                                   SYSDATE))
                            - (m.mld_melding_datum)))          hrs_between
                FROM mld_melding m, mld_stdmelding sm, prs_kostensoort ks
               WHERE     m.mld_melding_status NOT IN (1, 2) -- afgewezen en nieuwe meldingen tellen niet mee
                     AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                     AND ks.prs_kostensoort_key = sm.prs_kostensoort_key
                     AND mld.getmeldingstatusdate (m.mld_melding_key, 4) IS NOT NULL)
             tijd_in_beh
    GROUP BY jaar, periode, soort;

CREATE OR REPLACE VIEW PNBR_V_GEM_AFH_TIJD
AS
      SELECT jaar,
             periode,
             soort,
             COUNT (mld_melding_key)      aantal_mld,
               SUM (
                   DECODE (x.t_doorlooptijd.eenheid,
                           'D', x.t_doorlooptijd.tijdsduur,
                           NULL))
             / COUNT (mld_melding_key)    gem_afh_dagen
        FROM (SELECT TO_CHAR (m.mld_melding_datum, 'yyyy')              jaar,
                        TO_CHAR (m.mld_melding_datum, 'yyyy')
                     || ' '
                     || TO_CHAR (m.mld_melding_datum, 'mm')             periode,
                     ks.prs_kostensoort_oms                             soort,
                     m.mld_melding_key,
                     m.mld_melding_datum,
                     mld.getmeldingstatusdate (m.mld_melding_key, 5)    afg,
                     mld.getactualuitvoer (m.mld_melding_key)           t_doorlooptijd
                FROM mld_melding m, mld_stdmelding sm, prs_kostensoort ks
               WHERE     m.mld_melding_status = 5           -- alleen afgemeld
                     AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                     AND ks.prs_kostensoort_key = sm.prs_kostensoort_key) x
    GROUP BY jaar, periode, soort;

CREATE OR REPLACE VIEW PNBR_V_GEM_AFH_OPDR
AS
  SELECT TO_CHAR (o.opdracht_datum, 'yyyy')     jaar,
            TO_CHAR (o.opdracht_datum, 'yyyy')
         || ' '
         || TO_CHAR (o.opdracht_datum, 'mm')    periode,
         ks.prs_kostensoort_oms,
         COUNT (o.opdracht_key) aant_opdr,
         SUM (opdracht_lev_doorloopdagen) / COUNT (o.opdracht_key) gem_doorloop_dgn
    FROM mld_v_udr_opdracht o,
         mld_melding       m,
         mld_stdmelding    sm,
         prs_kostensoort   ks
   WHERE     UPPER (o.opdracht_status) = 'AFGEMELD'
         AND m.mld_melding_key = o.melding_key
         AND m.mld_stdmelding_key = sm.mld_stdmelding_key
         AND ks.prs_kostensoort_key = sm.prs_kostensoort_key
GROUP BY TO_CHAR (o.opdracht_datum, 'yyyy'),
            TO_CHAR (o.opdracht_datum, 'yyyy')
         || ' '
         || TO_CHAR (o.opdracht_datum, 'mm'),
         ks.prs_kostensoort_oms;

CREATE OR REPLACE FORCE VIEW pnbr_v_rap_aant_mld_ks_jr
(
    categorie,
    ins_discipline_omschrijving,
    mld_stdmelding_omschrijving,
    aantal,
    ranking
)
AS
      SELECT ks.prs_kostensoort_oms,
             ins_discipline_omschrijving,
             mld_stdmelding_omschrijving,
             COUNT (mld_melding_key),
             RANK ()
                 OVER (PARTITION BY ks.prs_kostensoort_oms
                       ORDER BY COUNT (mld_melding_key) DESC)    ranking
        FROM mld_melding       m,
             mld_stdmelding    std,
             ins_tab_discipline d,
             prs_kostensoort   ks
       WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = d.ins_discipline_key
             AND ks.prs_kostensoort_key = std.prs_kostensoort_key
             AND m.mld_melding_datum BETWEEN TO_DATE (
                                                    TO_CHAR (
                                                        ADD_MONTHS (SYSDATE,
                                                                    -12),
                                                        'yyyymm')
                                                 || '01',
                                                 'yyyymmdd')
                                         AND TO_DATE (
                                                    TO_CHAR (SYSDATE, 'yyyymm')
                                                 || '01',
                                                 'yyyymmdd')
    GROUP BY ks.prs_kostensoort_oms,
             mld_stdmelding_omschrijving,
             d.ins_discipline_omschrijving
    ORDER BY ks.prs_kostensoort_oms, COUNT (mld_melding_key) DESC;

CREATE OR REPLACE VIEW PNBR_V_RAP_SLA_OPTIJD
(
    telling_mld,
    mld_melding_key,
    categorie,
    datum_afm,
    afspraak_sla_optijd,
    telling_sla_optijd,
    telling_sla_niet_optijd
)
AS
    SELECT 1      telling_mld,
           mld_melding_key,
           kostensoort,
           afgemeld,
           CASE
               WHEN   DECODE (
                          x.t_doorlooptijd.eenheid,
                          'D',   einddatum
                               - COALESCE (afgemeld, SYSDATE)
                               + COALESCE (sla_respijtdgn, 0),
                          0)
                    + DECODE (
                          x.t_doorlooptijd.eenheid,
                          'U',   (  (einddatum - COALESCE (afgemeld, SYSDATE))
                                  * 24)
                               + COALESCE (sla_respijtdgn, 0),
                          0) >=
                    0
               THEN
                   lcl.l ('lcl_yes')
               ELSE
                   lcl.l ('lcl_no')
           END    afspraak_sla_optijd,
           CASE
               WHEN   DECODE (
                          x.t_doorlooptijd.eenheid,
                          'D',   einddatum
                               - COALESCE (afgemeld, SYSDATE)
                               + COALESCE (sla_respijtdgn, 0),
                          0)
                    + DECODE (
                          x.t_doorlooptijd.eenheid,
                          'U',   (  (einddatum - COALESCE (afgemeld, SYSDATE))
                                  * 24)
                               + COALESCE (sla_respijtdgn, 0),
                          0) >=
                    0
               THEN
                   1
               ELSE
                   0
           END    telling_sla_optijd,
           CASE
               WHEN   DECODE (
                          x.t_doorlooptijd.eenheid,
                          'D',   einddatum
                               - COALESCE (afgemeld, SYSDATE)
                               + COALESCE (sla_respijtdgn, 0),
                          0)
                    + DECODE (
                          x.t_doorlooptijd.eenheid,
                          'U',   (  (einddatum - COALESCE (afgemeld, SYSDATE))
                                  * 24)
                               + COALESCE (sla_respijtdgn, 0),
                          0) >=
                    0
               THEN
                   0
               ELSE
                   1
           END    telling_sla_niet_optijd
      FROM (SELECT m.mld_melding_key,
                   (SELECT ks.prs_kostensoort_oms
                      FROM prs_kostensoort ks
                     WHERE ks.prs_kostensoort_key =
                           (SELECT COALESCE (sm.prs_kostensoort_key,
                                             disc.prs_kostensoort_key)
                              FROM mld_stdmelding sm, mld_discipline disc
                             WHERE     sm.mld_ins_discipline_key =
                                       disc.ins_discipline_key
                                   AND sm.mld_stdmelding_key =
                                       s.mld_stdmelding_key))
                       kostensoort,
                   (SELECT mld_statuses_omschrijving
                      FROM mld_statuses sta
                     WHERE sta.mld_statuses_key = m.mld_melding_status)
                       status,
                   CASE
                       WHEN m.mld_melding_einddatum >
                            COALESCE (
                                fac.gettrackingdate ('MLDAFM',
                                                     m.mld_melding_key),
                                fac.gettrackingdate ('MLDREJ',
                                                     m.mld_melding_key),
                                SYSDATE)
                       THEN
                           1
                       ELSE
                           0
                   END
                       plan_uitvoertijd_sla,
                   CASE
                       WHEN    m.mld_melding_indult = 1
                            OR s.mld_stdmelding_slabewaken = 0
                       THEN
                           1
                       ELSE
                           0
                   END
                       sla_nvt,
                   DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                           'D', m.mld_melding_t_uitvoertijd.tijdsduur,
                           NULL)
                       sla_werkdgn,
                   DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                           'U', m.mld_melding_t_uitvoertijd.tijdsduur,
                           NULL)
                       sla_werkuren,
                   DECODE (m.mld_melding_t_respijt.eenheid,
                           'D', m.mld_melding_t_respijt.tijdsduur,
                           NULL)
                       sla_respijtdgn,
                   DECODE (m.mld_melding_t_respijt.eenheid,
                           'U', m.mld_melding_t_respijt.tijdsduur,
                           NULL)
                       sla_respijturen,
                   DECODE (m.mld_melding_t_accepttijd.eenheid,
                           'D', m.mld_melding_t_accepttijd.tijdsduur,
                           NULL)
                       sla_accptdgn,
                   DECODE (m.mld_melding_t_accepttijd.eenheid,
                           'U', m.mld_melding_t_accepttijd.tijdsduur,
                           NULL)
                       sla_accpturen,
                   m.mld_melding_datum
                       datum,
                   CASE
                       WHEN s.mld_stdmelding_planbaar = 2 THEN TO_DATE (NULL)
                       ELSE m.mld_melding_einddatum
                   END
                       einddatum,
                   mld_melding_einddatum_std
                       einddatum_std,
                   mld_melding_acceptdatum_std
                       acceptdatum,
                   COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                             mld.getmeldingstatusdate (m.mld_melding_key, 1))
                       afgemeld,
                   COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4),
                             mld.getmeldingstatusdate (m.mld_melding_key, 1))
                       accepted,
                   mld.getactualuitvoer (m.mld_melding_key)
                       t_doorlooptijd
              FROM mld_melding          m,
                   mld_stdmelding       s,
                   mld_discipline       md,
                   mld_disc_params      mdp,
                   ins_srtdiscipline    sd,
                   mld_stdmeldinggroep  smg
             WHERE     s.mld_stdmelding_key = m.mld_stdmelding_key
                   AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
                   AND md.ins_discipline_key = s.mld_ins_discipline_key
                   AND md.ins_discipline_key = mdp.mld_ins_discipline_key
                   AND s.mld_stdmeldinggroep_key =
                       smg.mld_stdmeldinggroep_key(+)
                   AND m.fac_activiteit_key IS NULL
                   AND m.mld_melding_datum >=
                       TO_DATE ('01-01-2010', 'DD-MM-YYYY')) x;

--  PNBR#69729 notificaties naar email bij eindtijd div. vergaderingen
CREATE OR REPLACE VIEW pnbr_v_noti_res_tot_20uur
(
    code,
    sender,
    receiver,
    text,
    key,
    xkey,
    xemail,
    xmobile
)
AS
    SELECT fac_srtnotificatie_code
               code,
           4
               sender,                                         --- 4 Facilitor
           NULL
               receiver,
           'Aangevraagde reserveringen met een eindtijd tot 20:00 uur'
               text,
           3181
               key, ---- rapport RES: Reserveringen met een eindtijd tot 20:00 uur
           NULL
               xkey,
           'beveiliging@brabant.nl'
               xemail,
           NULL
               xmobile
      FROM fac_srtnotificatie sn, fac_notificatie_job nj
     WHERE     sn.fac_srtnotificatie_code = 'CUST11'
           AND UPPER (nj.fac_notificatie_job_view) =
               'PNBR_V_NOTI_RES_TOT_20UUR'
           AND EXISTS
                   (SELECT 1
                      FROM res_v_udr_reservering r
                     WHERE     TRUNC (r.invoerdatum) = TRUNC (SYSDATE) - 1
                           AND TO_NUMBER (TO_CHAR (tot, 'HH24')) <= 20);

CREATE OR REPLACE VIEW pnbr_v_noti_res_na_20uur
(
    code,
    sender,
    receiver,
    text,
    key,
    xkey,
    xemail,
    xmobile
)
AS
    SELECT fac_srtnotificatie_code
               code,
           4
               sender,                                         --- 4 Facilitor
           NULL
               receiver,
           'Aangevraagde reserveringen met een eindtijd na 20:00 uur'
               text,
           3201
               key, ---- rapport RES: Reserveringen met een eindtijd tot 20:00 uur
           NULL
               xkey,
           'rvdplas@brabant.nl;tbovens@brabant.nl'
               xemail,
           NULL
               xmobile
      FROM fac_srtnotificatie sn, fac_notificatie_job nj
     WHERE     sn.fac_srtnotificatie_code = 'CUST12'
           AND UPPER (nj.fac_notificatie_job_view) =
               'PNBR_V_NOTI_RES_NA_20UUR'
           AND EXISTS
                   (SELECT 1
                      FROM res_v_udr_reservering r
                     WHERE     TRUNC (r.invoerdatum) = TRUNC (SYSDATE) - 1
                           AND TO_NUMBER (TO_CHAR (tot, 'HH24')) > 20);

CREATE OR REPLACE VIEW PNBR_V_LABEL_RUIMTE_AAND
(
    ALG_RUIMTE_KEY,
    WAARDE
)
AS
    SELECT ok.alg_onrgoed_key, ok.alg_onrgoedkenmerk_waarde
      FROM alg_onrgoedkenmerk ok, alg_kenmerk k
     WHERE     ok.alg_kenmerk_key = k.alg_kenmerk_key
           AND k.alg_kenmerk_niveau = 'R'
           AND k.alg_kenmerk_key = 1000;

--- Combineer de labels 61 en 13 voor de flexreserveringen
--- PNBR#75082 Nummering werkplekken aanpassen in Flexreserveringen
CREATE OR REPLACE VIEW PNBR_V_LABEL_DEEL_RES_DATUM
(
    fclt_f_datum,
    ins_deel_key,
    ins_deel_omschrijving,
    waarde1,
    waarde,
    waarde3,
    waarde_html,
    waarde_html2
)
AS
    WITH
        datums
        AS
            (    SELECT TRUNC (SYSDATE) + LEVEL - 1     datum
                   FROM DUAL
             CONNECT BY LEVEL <= 62)
      SELECT datums.datum                                fclt_f_datum,
             isd.res_ins_deel_key                        ins_deel_key,
             d.ins_deel_omschrijving,
             COALESCE (
                    CHR (10)
                 || LISTAGG (
                        DECODE (
                            naam,
                            NULL, '',
                               '[s40]'
                            || naam
                            || ' ('
                            || TO_CHAR (res_rsv_deel_van, 'HH24:MI')
                            || '-'
                            || DECODE (
                                   TRUNC (res_rsv_deel_tot),
                                   TRUNC (res_rsv_deel_van), TO_CHAR (
                                                                 res_rsv_deel_tot,
                                                                 'HH24:MI'),
                                   TO_CHAR (res_rsv_deel_tot,
                                            'DD-MM-YYYY HH24:MI'))
                            || ')'),
                        CHR (10))
                    WITHIN GROUP (ORDER BY res_rsv_deel_van),
                 d.ins_deel_omschrijving)    waarde1,
             COALESCE (
                    CHR (10)
                 || LISTAGG (
                        DECODE (
                            naam,
                            NULL, '',
                               '[s40]'
                            || TO_CHAR (res_rsv_deel_van, 'HH24:MI')
                            || ' '
                            || naam),
                        CHR (10))
                    WITHIN GROUP (ORDER BY res_rsv_deel_van),
                 d.ins_deel_omschrijving)    waarde2,
             COALESCE (
                    CHR (10)
                 || LISTAGG (DECODE (naam, NULL, '', '[s40]' || naam),
                             CHR (10))
                    WITHIN GROUP (ORDER BY res_rsv_deel_van),
                 d.ins_deel_omschrijving)    waarde3,
             COALESCE (
                 LISTAGG (
                     DECODE (
                         naam,
                         NULL, '',
                            '<span class="body">'
                         || TO_CHAR (res_rsv_deel_van, 'HH24:MI')
                         || ' '
                         || naam
                         || '</span>'),
                     '<br>')
                 WITHIN GROUP (ORDER BY res_rsv_deel_van),
                 d.ins_deel_omschrijving)                waarde_html,
             COALESCE (
                 LISTAGG (
                     DECODE (naam,
                             NULL, '',
                             '<span class="body">' || naam || '</span>'),
                     '<br>')
                 WITHIN GROUP (ORDER BY res_rsv_deel_van),
                 d.ins_deel_omschrijving)                waarde_html2
        FROM res_v_aanwezigdeel isd,
             datums,
             ins_deel          d,
             (SELECT datum,
                     res_ins_deel_key,
                     DECODE (p.prs_perslid_visibility,
                             1, pf.prs_perslid_naam_friendly,
                             a.prs_afdeling_omschrijving)    naam,
                     res_rsv_deel_van,
                     res_rsv_deel_tot
                FROM res_v_aanwezigdeel     r,
                     res_v_aanwezigrsv_deel rrd,
                     res_rsv_ruimte         rrr,
                     prs_v_perslid_fullnames pf,
                     prs_perslid            p,
                     prs_afdeling           a,
                     datums
               WHERE     r.res_deel_key = rrd.res_deel_key
                     AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                     AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key
                     AND pf.prs_perslid_key = p.prs_perslid_key
                     AND p.prs_afdeling_key = a.prs_afdeling_key
                     AND datum + 1 >= res_rsv_deel_van
                     AND datum < res_rsv_deel_tot) res                -- Bezet
       WHERE     isd.res_ins_deel_key = res.res_ins_deel_key(+)
             AND datums.datum = res.datum(+)
             AND isd.res_ins_deel_key = d.ins_deel_key
             AND d.ins_srtdeel_key = 3521
    GROUP BY datums.datum, isd.res_ins_deel_key, d.ins_deel_omschrijving;

CREATE OR REPLACE VIEW PNBR_V_RAP_RES_NA_20UUR
AS
SELECT r.invoerdatum,
       r.nummer,
       r.res_omschrijving,
       r.gastheer,
       r.contact,
       r.afdeling_omschrijving,
       r.verdieping,
       r.ruimte,
       r.van,
       r.tot,
       TO_NUMBER (TO_CHAR (r.van, 'HH24'))     tijd_van,
       TO_NUMBER (TO_CHAR (r.tot, 'HH24'))     tijd_tot,
       r.duur
  FROM res_v_udr_reservering r
 WHERE     TRUNC (r.invoerdatum) = TRUNC (SYSDATE) - 1
       AND TO_NUMBER (TO_CHAR (r.tot, 'HH24')) > 20;

CREATE OR REPLACE VIEW PNBR_V_RAP_RES_TOT_20UUR
AS
    SELECT r.invoerdatum,
           r.nummer,
           r.res_omschrijving,
           r.gastheer,
           r.contact,
           r.afdeling_omschrijving,
           r.verdieping,
           r.ruimte,
           r.van,
           r.tot,
           TO_NUMBER (TO_CHAR (r.van, 'HH24'))     tijd_van,
           TO_NUMBER (TO_CHAR (r.tot, 'HH24'))     tijd_tot,
           r.duur
      FROM res_v_udr_reservering r
     WHERE     TRUNC (r.invoerdatum) = TRUNC (SYSDATE) - 1
           AND TO_NUMBER (TO_CHAR (r.tot, 'HH24')) <= 20;

CREATE OR REPLACE VIEW PNBR_V_RAP_API_PERSLID
(
    perslid_key,
    perslid_nr
)
AS
    SELECT p.prs_perslid_key, p.prs_perslid_nr
      FROM prs_perslid p
     WHERE     p.prs_perslid_nr IS NOT NULL
           AND p.prs_perslid_verwijder IS NULL
           AND (   p.prs_perslid_einddatum IS NULL
                OR TRUNC (p.prs_perslid_einddatum) > SYSDATE)
           AND p.prs_perslid_upper NOT LIKE '%INACTIEF%';

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