-- Script containing customer generic configuration sql statements for all PCHA and PCHW accounts
-- $Revision$
-- $Id$
--

DEFINE thisfile = 'PCHX_MON.SQL'
DEFINE dbuser   = 'PCHA|PCHW|PGHE'


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 PACKAGE PCHX_MON
AS
  -- PPS functies voor PCHA en PCHW
  FUNCTION get_first_melding (p_melding_key IN NUMBER, p_index IN NUMBER)
     RETURN NUMBER;

  FUNCTION get_regime (p_stdm_key   IN NUMBER,
                       p_alg_key    IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund
                       p_ins_key    IN NUMBER)
     RETURN NUMBER;

  FUNCTION get_index_value (p_date  IN DATE, p_categorie IN VARCHAR2)
     RETURN NUMBER;

  FUNCTION get_weging (p_startdatum IN DATE, p_stdmeldinggroep_key IN NUMBER)
     RETURN NUMBER;

  FUNCTION klant_melding (p_melding_key IN NUMBER)
     RETURN NUMBER;

  FUNCTION get_max_korting (p_stdm_key IN NUMBER)
     RETURN NUMBER;

  FUNCTION get_abs_bedrag (p_bedrag IN NUMBER)
     RETURN NUMBER;

  FUNCTION check_max (p_bedrag IN NUMBER, p_max IN NUMBER)
     RETURN NUMBER;

END;
/

CREATE OR REPLACE PACKAGE BODY PCHX_MON
AS

   FUNCTION get_first_melding (p_melding_key   IN NUMBER,
                               p_index         IN NUMBER)
      RETURN NUMBER
   AS
      CURSOR ca
      IS
           SELECT m2.mld_melding_datum van, m2.mld_melding_key
             FROM mld_melding m1,
                  mld_stdmelding std1,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 241) km1,
                  mld_melding m2,
                  mld_stdmelding std2,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 241) km2
            WHERE     m1.mld_melding_key = p_melding_key
                  AND m1.mld_stdmelding_key = std1.mld_stdmelding_key
                  AND m1.mld_melding_key = km1.mld_melding_key(+)
                  AND km1.mld_kenmerkmelding_waarde IS NULL
                  AND m2.mld_melding_key = km2.mld_melding_key(+)
                  AND km2.mld_kenmerkmelding_waarde IS NULL
                  AND m2.mld_melding_parentkey IS NULL
                  AND NOT EXISTS (SELECT 1
                                    FROM pchx_monitoring
                                   WHERE melding_key = m2.mld_melding_key)
                  AND m2.mld_stdmelding_key = std2.mld_stdmelding_key
                  AND  std1.mld_ins_discipline_key NOT IN (232,220)                           -- V-G en W-R koppelen we nooit
                  AND std1.mld_stdmeldinggroep_key = std2.mld_stdmeldinggroep_key            -- voor stdmeldinggroep
                  AND (
                         (     std1.mld_stdmeldinggroep_key = 161  -- FTRC
                           AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys)    -- op dezelfde ruimte
                       OR
                         (     std1.mld_stdmeldinggroep_key <> 161  -- FTRC
                           AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys)    -- op dezelfde ruimte
                           AND std1.mld_ins_discipline_key = std2.mld_ins_discipline_key         -- zelfde vakgroep.
                      )
                  AND m1.mld_melding_key <> m2.mld_melding_key
                  AND m2.mld_melding_indult <> 1
                  AND m1.mld_melding_indult <> 1
                  AND m2.mld_melding_status <> 1 -- Afgewezen
                  AND m1.mld_melding_datum BETWEEN m2.mld_melding_datum
                                               AND  COALESCE(fac.gettrackingdate ('MLDAFM', m2.mld_melding_key), SYSDATE)
         ORDER BY m2.mld_melding_datum;

      CURSOR cw
      IS
           SELECT m2.mld_melding_datum van, m2.mld_melding_key
             FROM mld_melding m1,
                  mld_stdmelding std1,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 221) km1,
                  mld_melding m2,
                  mld_stdmelding std2,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 221) km2
            WHERE     m1.mld_melding_key = p_melding_key
                  AND m1.mld_stdmelding_key = std1.mld_stdmelding_key
                  AND m1.mld_melding_key = km1.mld_melding_key(+)
                  AND km1.mld_kenmerkmelding_waarde IS NULL
                  AND m2.mld_melding_key = km2.mld_melding_key(+)
                  AND km2.mld_kenmerkmelding_waarde IS NULL
                  AND m2.mld_melding_parentkey IS NULL
                  AND NOT EXISTS (SELECT 1
                                    FROM pchx_monitoring
                                   WHERE melding_key = m2.mld_melding_key)
                  AND m2.mld_stdmelding_key = std2.mld_stdmelding_key
                  AND std2.mld_stdmelding_malus IS NOT NULL -- alleen meldingen waarvoor een malus geldt
                  AND std1.mld_Stdmeldinggroep_key = std2.mld_stdmeldinggroep_key            -- voor stdmeldinggroep
                  AND (
                         (     std1.mld_stdmeldinggroep_key = 181  -- Prestatiekortingen
                           AND std1.mld_ins_discipline_key = std2.mld_ins_discipline_key)
                       OR
                         (     std1.mld_stdmeldinggroep_key <> 181  -- Prestatiekortingen
                           AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys)    -- op dezelfde ruimte
                      )
                  AND m1.mld_melding_key <> m2.mld_melding_key
                  AND m2.mld_melding_indult <> 1
                  AND m1.mld_melding_indult <> 1
                  AND m2.mld_melding_status <> 1 -- Afgewezen
                  AND m1.mld_melding_datum BETWEEN m2.mld_melding_datum
                                               AND  COALESCE(fac.gettrackingdate ('MLDAFM', m2.mld_melding_key), SYSDATE)
         ORDER BY m2.mld_melding_datum;

      CURSOR ch
      IS
           SELECT m2.mld_melding_datum van, m2.mld_melding_key
             FROM mld_melding m1,
                  mld_stdmelding std1,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 121) km1, -- Niet overlappen
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 141) kh1, -- nlsfb hoofdgroep
                  mld_melding m2,
                  mld_stdmelding std2,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 121) km2,
                  (select mld_melding_key, mld_kenmerkmelding_waarde from mld_kenmerkmelding
                  where mld_kenmerk_key = 141) kh2
            WHERE     m1.mld_melding_key = p_melding_key
                  AND m1.mld_stdmelding_key = std1.mld_stdmelding_key
                  AND m1.mld_melding_key = km1.mld_melding_key(+)
                  AND m1.mld_melding_key = kh1.mld_melding_key(+)
                  AND km1.mld_kenmerkmelding_waarde IS NULL
                  AND m2.mld_melding_key = km2.mld_melding_key(+)
                  AND m2.mld_melding_key = kh2.mld_melding_key(+)
                  AND km2.mld_kenmerkmelding_waarde IS NULL
                  AND m2.mld_melding_parentkey IS NULL
                  AND NOT EXISTS (SELECT 1
                                    FROM pchx_monitoring
                                   WHERE melding_key = m2.mld_melding_key)
                  AND m2.mld_stdmelding_key = std2.mld_stdmelding_key
                  AND std2.mld_stdmelding_slabewaken <> 0 -- alleen meldingen waarvoor een malus geldt
                  AND std1.mld_stdmeldinggroep_key = std2.mld_stdmeldinggroep_key            -- voor stdmeldinggroep
                  AND (
                         (     std1.mld_stdmeldinggroep_key = 1  -- Prestatiekortingen
                           AND std1.mld_stdmelding_key = std2.mld_stdmelding_key
                           AND (    std1.mld_stdmelding_key <> 91  -- Prestatiekortingen op automaten overlappen alleen als het dezelfde ruimte (automaat) is.
                                 OR m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys)
                         )
                       OR
                         (     std1.mld_stdmeldinggroep_key <> 22  -- Periodieke meting onderhoud
                           AND COALESCE(kh1.mld_kenmerkmelding_waarde, '-1') =  COALESCE(kh2.mld_kenmerkmelding_waarde, '-2') -- nlsfb hoofdgroep is ingevuld en is gelijk.
                         )
                       OR
                         (     std1.mld_stdmeldinggroep_key <> 1  -- Prestatiekortingen
                           AND std1.mld_Stdmeldinggroep_key <> 8  -- Losse voorzieningen worden niet samengenomen
                           AND std1.mld_Stdmeldinggroep_key <> 22  -- Periodieke meting onderhoud worden niet samengenomen
                           AND std1.mld_Stdmeldinggroep_key <> 23  -- Periodieke meting diensten worden niet samengenomen
                           AND m1.mld_alg_onroerendgoed_keys = m2.mld_alg_onroerendgoed_keys)    -- op dezelfde ruimte
                      )
                  AND m1.mld_melding_key <> m2.mld_melding_key
                  AND m2.mld_melding_indult <> 1
                  AND m1.mld_melding_indult <> 1
                  AND m2.mld_melding_status <> 1 -- Afgewezen
                  AND m1.mld_melding_datum BETWEEN m2.mld_melding_datum
                                               AND  COALESCE(fac.gettrackingdate ('MLDAFM', m2.mld_melding_key), SYSDATE)
         ORDER BY m2.mld_melding_datum;


      v_melding_key   NUMBER;
      l_melding_key   NUMBER;
      v_datum_begin   DATE;
      l_datum_begin   DATE;
      v_loop_index    NUMBER;
      rec             ca%ROWTYPE; -- maakt niet uit welke cursor we hier kiezen. Ze hebben dezelfde structuur.
   BEGIN
      v_melding_key := p_melding_key;

      IF pchx_mon.klant_melding (p_melding_key) = 0 THEN
         RETURN p_melding_key;
      END IF;

      SELECT mld_melding_datum
        INTO v_datum_begin
        FROM mld_melding
       WHERE mld_melding_key = p_melding_key;

      v_loop_index := 1;

      IF pchx.get_user = 'PCHA' THEN
         OPEN ca;
      ELSIF pchx.get_user = 'PCHW' THEN
         OPEN cw;
      ELSE
         OPEN ch;
      END IF;

      LOOP
         IF pchx.get_user = 'PCHA' THEN
            FETCH ca INTO rec;
            EXIT WHEN ca%NOTFOUND;
         ELSIF pchx.get_user = 'PCHW' THEN
            FETCH cw INTO rec;
            EXIT WHEN cw%NOTFOUND;
         ELSE
            FETCH ch INTO rec;
            EXIT WHEN ch%NOTFOUND;
         END IF;


 --     FOR rec IN c
 --     LOOP

         -- door de sortering op de cursor hoeven we alleen het eerste record te gebruiken tenzij deze niet door de klant is ingediend.
         IF p_index < 10 AND v_loop_index = 1

         THEN
            -- DBMS_OUTPUT.put_line(p_melding_key || '-' || rec.mld_melding_key || '-' || p_index);
            -- DBMS_OUTPUT.put_line('Klant melding: ' || '-' || pchx_mon.klant_melding (rec.mld_melding_key));
            IF pchx_mon.klant_melding (rec.mld_melding_key) = 1
            THEN
               BEGIN
                  l_melding_key :=
                      PCHX_MON.get_first_melding (rec.mld_melding_key, p_index + 1);
               END;
               --- DBMS_OUTPUT.put_line('Resultaat: ' || rec.mld_melding_key || '-' || l_melding_key);

               SELECT mld_melding_datum
                 INTO l_datum_begin
                 FROM mld_melding
                WHERE mld_melding_key = l_melding_key;

               IF l_datum_begin < v_datum_begin
               THEN
                  v_datum_begin := l_datum_begin;
                  v_melding_key := l_melding_key;
               END IF;
               v_loop_index := v_loop_index + 1;
            END IF;
         END IF;
      END LOOP;

      IF pchx_mon.klant_melding (v_melding_key) = 1
      THEN
         RETURN v_melding_key;
      ELSE
         RETURN p_melding_key;
      END IF;
   END;


    FUNCTION get_regime (p_stdm_key   IN NUMBER,
                         p_alg_key    IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund
                         p_ins_key    IN NUMBER)
       RETURN NUMBER
    AS
       v_mld_stdmelding_regime   NUMBER;
       v_norm_uitvoertijd        mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL);
       v_beginuur                NUMBER;
       v_einduur                 NUMBER;
       v_werkdagen               NUMBER;
       v_accepttijd              mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL);
    BEGIN
       mld.getslaparams (p_stdm_key,
                         3,  -- prio
                         p_alg_key,
                         NULL,  -- ins key
                         v_mld_stdmelding_regime,
                         v_norm_uitvoertijd,
                         v_accepttijd,     
                         v_beginuur,
                         v_einduur,
                         v_werkdagen);

        -- kantoortijden of openingstijden waarbij de tijd niet gevuld is.
        IF v_mld_stdmelding_regime = 1 OR (v_mld_stdmelding_regime = 2 AND (v_beginuur = -1 OR v_einduur = -1))
        THEN
           RETURN fac.safe_to_number (fac.getsetting ('fac_t_endofworkday'))
                - fac.safe_to_number (fac.getsetting ('fac_t_startofworkday'));
        END IF;

        IF v_mld_stdmelding_regime = 2   -- openingstijden
        THEN
           RETURN v_einduur - v_beginuur;
        END IF;

        IF v_mld_stdmelding_regime = 3   -- 24/7
        THEN
           RETURN 24;
        END IF;

        RETURN NULL;
    END;

   FUNCTION get_index_value (p_date IN DATE, p_key IN NUMBER)
      RETURN NUMBER
   AS
   v_result NUMBER;
   BEGIN
      SELECT FAC.SAFE_TO_NUMBER(fac_usrdata_prijs) / 100000 fac_usrdata_prijs
        INTO v_result
        FROM fac_usrdata
       WHERE fac_usrtab_key = p_key
         AND fac_usrdata_verwijder IS NULL
         AND trunc(p_date, 'YYYY') = add_months(fac_usrdata_vervaldatum, -12);
      RETURN v_result;
   EXCEPTION WHEN NO_DATA_FOUND THEN
      RETURN 1;
   END;


   FUNCTION get_index_value (p_date IN DATE, p_categorie IN VARCHAR2)
      RETURN NUMBER

   AS
      v_index_1_key NUMBER;
      v_index_4_key NUMBER;
      v_index_5_key NUMBER;
      v_index_7_key NUMBER;
      v_index_10_key NUMBER;
	  v_index_14_key NUMBER;
      v_index_18_key NUMBER;
      v_index_19_key NUMBER;
      v_index_20_key NUMBER;
      v_index_24_key NUMBER;
      v_index_25_key NUMBER;
      v_index_28_key NUMBER;



      v_index_1_value NUMBER;
      v_index_4_value NUMBER;
      v_index_5_value NUMBER;
      v_index_7_value NUMBER;
      v_index_10_value NUMBER;
      v_index_14_value NUMBER;
      v_index_18_value NUMBER;
      v_index_19_value NUMBER;
      v_index_20_value NUMBER;
      v_index_24_value NUMBER;
      v_index_25_value NUMBER;
      v_index_28_value NUMBER;

      v_result NUMBER;
   BEGIN
      IF PCHX.get_user = 'PCHA'
      THEN
         v_index_1_key := 181;
         v_index_4_key := 182;
         v_index_5_key := 183;
         v_index_7_key := 184;
         v_index_18_key := 241;
         v_index_20_key := 185;
      ELSE
         -- PCHW
         v_index_1_key := 121;
         v_index_10_key := 122;
         v_index_14_key := 123;
         v_index_19_key := 124;
         v_index_24_key := 125;
         v_index_25_key := 141;
         v_index_28_key := 126;
      END IF;
      v_index_1_value := get_index_value (p_date, v_index_1_key);
      v_index_4_value := get_index_value (p_date, v_index_4_key);
      v_index_5_value := get_index_value (p_date, v_index_5_key);
      v_index_7_value := get_index_value (p_date, v_index_7_key);
      v_index_10_value := get_index_value (p_date, v_index_10_key);
      v_index_14_value := get_index_value (p_date, v_index_14_key);
      v_index_18_value := get_index_value (p_date, v_index_18_key);
      v_index_19_value := get_index_value (p_date, v_index_19_key);
      v_index_20_value := get_index_value (p_date, v_index_20_key);
      v_index_24_value := get_index_value (p_date, v_index_24_key);
      v_index_25_value := get_index_value (p_date, v_index_25_key);
      v_index_28_value := get_index_value (p_date, v_index_28_key);

      CASE p_categorie
      WHEN 'MON'
      THEN v_result := v_index_1_value;
      WHEN 'CAT'
      THEN v_result := 1;
      WHEN 'FAC'
      THEN v_result := v_index_18_value;
      WHEN 'BEV'
      THEN v_result := 0.75 * v_index_5_value + 0.25 * v_index_7_value;
      WHEN 'SCH'
      THEN v_result := 0.80 * v_index_4_value + 0.15 * v_index_7_value + 0.05 * v_index_20_value;
      WHEN 'GLA'
      THEN v_result := 0.05 * v_index_1_value + 0.80 * v_index_4_value + 0.15 * v_index_7_value;
      WHEN 'SVD1'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD2'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD3'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD4'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD5'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD6'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD7'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD8'
      THEN v_result := 0.5 * v_index_24_value + 0.5 * v_index_25_value;
      WHEN 'SVD9'
      THEN v_result := 0.3 * v_index_10_value + 0.7 * v_index_28_value;
      WHEN 'SVD10'
      THEN v_result := 0.3 * v_index_10_value + 0.7 * v_index_28_value;
      WHEN 'SVD11'
      THEN v_result := v_index_10_value;
      WHEN 'SVD12'
      THEN v_result := v_index_10_value;
      WHEN 'SVD13'
      THEN v_result := 0.2 * v_index_10_value + 0.8 * v_index_19_value;
      WHEN 'SVD14'
      THEN v_result := v_index_14_value;
      ELSE v_result := 1;
      END CASE;
      RETURN v_result;
   END;

    FUNCTION get_weging (p_startdatum   IN DATE, p_stdmeldinggroep_key IN NUMBER)
       RETURN NUMBER
    AS
       v_mld_stdmelding_regime   NUMBER;
       v_norm_uitvoertijd        mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL);
       v_beginuur                NUMBER;
       v_einduur                 NUMBER;
       v_werkdagen               NUMBER;
       v_stdmeldinggroep_naam    VARCHAR2(100);
    BEGIN
      SELECT mld_stdmeldinggroep_naam
        INTO v_stdmeldinggroep_naam
        FROM mld_stdmeldinggroep
       WHERE mld_stdmeldinggroep_key =  p_stdmeldinggroep_key;

      IF    SUBSTR(v_stdmeldinggroep_naam,1,15) = 'Beschikbaarheid'   -- TODO conditie metingen toevoegen
         OR p_stdmeldinggroep_key = 8 -- Functionaliteit voorziening
         OR p_stdmeldinggroep_key = 22 -- Periodieke Meting Onderhoud
      THEN
        CASE WHEN p_startdatum BETWEEN TO_DATE('20210101', 'yyyymmdd') AND TO_DATE('20270101', 'yyyymmdd')
             THEN RETURN 1;
             WHEN p_startdatum BETWEEN TO_DATE('20270101', 'yyyymmdd') AND TO_DATE('20320101', 'yyyymmdd')
             THEN RETURN 0.85;
             WHEN p_startdatum BETWEEN TO_DATE('20320101', 'yyyymmdd') AND TO_DATE('20370101', 'yyyymmdd')
             THEN RETURN 0.7;
             ELSE
                  RETURN 0;
        END CASE;
      ELSE
        RETURN 1;
      END IF;

    END;

  FUNCTION klant_melding (p_melding_key IN NUMBER)
     RETURN NUMBER
  AS
     v_klant_melding NUMBER;
  BEGIN
     SELECT DECODE (a.prs_bedrijf_key, DECODE (pchx.get_user, 'PCHW', 121, 'PCHA',  102, 'PGHE', 1021), 1, 0) klant_melding
     INTO v_klant_melding
     FROM mld_melding m,
          prs_perslid p,
          prs_v_afdeling a
    WHERE m.prs_perslid_key = p.prs_perslid_key
      AND p.prs_afdeling_key = a.prs_afdeling_key
      AND m.mld_melding_key = p_melding_key;
  RETURN v_klant_melding;
  EXCEPTION WHEN NO_DATA_FOUND
  THEN
     RETURN 0;
  END;

  FUNCTION get_max_korting (p_stdm_key IN NUMBER)
     RETURN NUMBER
  AS
     v_max_korting NUMBER;
  BEGIN
     IF pchx.get_user = 'PGHE'
     THEN
        SELECT FAC.safe_to_number(std.mld_stdmelding_malusmax)
          INTO v_max_korting
          FROM mld_stdmelding std
         WHERE mld_stdmelding_key = p_stdm_key;
     END IF;
     RETURN v_max_korting;
  EXCEPTION WHEN NO_DATA_FOUND
  THEN
     RETURN 0;
  END;

  -- functie om er voor te zorgen dat de korting in het overzicht alleen positief kan zijn.
  -- Doordat de respijt langer kan zijn dan de WHT kan anders de korting negatief zijn.
  FUNCTION get_abs_bedrag (p_bedrag IN NUMBER)
     RETURN NUMBER
  AS
  BEGIN
    IF p_bedrag > 0 THEN
       RETURN p_bedrag;
    END IF;
    RETURN 0;
  END;

  FUNCTION check_max (p_bedrag IN NUMBER, p_max IN NUMBER)
     RETURN NUMBER
  AS
  BEGIN
     IF p_bedrag IS NULL
     THEN
        RETURN NULL;
     END IF;

     IF p_max IS NULL
     THEN
        RETURN p_bedrag;
     END IF;

     IF p_bedrag > p_max
     THEN
        RETURN p_max;
     ELSE
        RETURN p_bedrag;
     END IF;
  END;

END;
/

-- Monitoring


CREATE OR REPLACE VIEW pchx_v_startmelding_geg
(
   m_start,
   mld_alg_onroerendgoed_keys,
   mld_melding_status,
   mld_melding_afgerond,
   aantal,
   overlappend,
   t_van,
   gereed,
   mld_melding_spoed,
   mld_stdmelding_key,
   prs_kostenplaats_key,
   max_t_actual,
   min_t_sla,
   max_t_respijt,
   min_tht_einddatum_start,
   mld_melding_indult,
   mld_melding_einddatum_std,
   mld_melding_einddatum,
   mld_melding_omschrijving,
   mld_melding_opmerking,
   klant_melding,
   prs_bedrijf_key
)
AS
   SELECT m.m_start,
          x.mld_alg_onroerendgoed_keys,
          -- als   n van de onderliggende meldingen "open", dan moet ook M_START status Uitgegeven krijgen
          DECODE (m.open, 0, x.mld_melding_status, 4) mld_melding_status, --- 4 = Geaccepteerd???
          x.mld_melding_afgerond,   -- mld_melding_afgerond van alleen M_START
          m.aantal,
          m.overlappend,
          m.t_van,                                        -- min_melding_datum
          DECODE(m.gereed, TO_DATE('20991231', 'YYYYMMDD'), TO_DATE(NULL), m.gereed),            -- max_actual_einddatum
          x.mld_melding_spoed,         -- mld_melding_spoed van alleen M_START
          x.mld_stdmelding_key,       -- mld_stdmelding_key van alleen M_START
          x.prs_kostenplaats_key,   -- prs_kostenplaats_key van alleen M_START
          mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd!
                                m.t_van,
                                DECODE (m.gereed, TO_DATE('20991231', 'YYYYMMDD'), SYSDATE, m.gereed),
                                x.mld_stdmelding_key,
                                x.mld_melding_spoed,
                                x.mld_alg_onroerendgoed_keys,
                                NULL)
             max_t_actual,
          mld_t_uitvoertijd (m.min_uitvoertijd, m.min_uitvoertijd_eenheid)
             min_t_sla,
          mld_t_uitvoertijd (COALESCE (m.max_respijt, 0),
                             m.max_respijt_eenheid)
             max_t_respijt,      -- altijd dezelfde eenheid als uitvoertijd???
          mld.geteinddatum (
             m.m_start,
             mld_t_uitvoertijd (m.min_uitvoertijd + m.max_respijt,
                                m.min_uitvoertijd_eenheid),
             m.t_van)
             min_tht_einddatum_start, -- meest nabije tht-einddatum van overlappende meldingen (t_van + MIN SLA + MAX respijt)
          m.mld_melding_indult,                          -- max_melding_indult
          m.mld_melding_einddatum_std, -- min_melding_einddatum_std of min_tht_einddatum_start???
          m.mld_melding_einddatum,                    -- max_melding_einddatum
          x.mld_melding_omschrijving,   -- mld_melding_oms. van alleen M_START
          x.mld_melding_opmerking,      -- mld_melding_opm. van alleen M_START
          m.klant_melding,                 -- melding gemeld door medewerker klant
          m.prs_bedrijf_key                       -- bedrijf key van de melder
     FROM (  SELECT m.m_start,
                    SUM (m.open) open,
                    COUNT (m.mld_melding_key) aantal,
                    listagg (m.mld_melding_key, ',')
                       WITHIN GROUP (ORDER BY m.mld_melding_key)
                       AS overlappend,
                    MIN (m.mld_melding_datum) t_van,      -- min_melding_datum
                    MAX (m.gereed) gereed,             -- max_actual_einddatum
                    MIN (m.mld_melding_t_uitvoertijd.tijdsduur) min_uitvoertijd,
                    MIN (m.mld_melding_t_uitvoertijd.eenheid)
                       min_uitvoertijd_eenheid,
                    MAX (m.mld_melding_t_respijt.tijdsduur) max_respijt,
                    MAX (m.mld_melding_t_respijt.eenheid) max_respijt_eenheid, -- altijd dezelfde eenheid als uitvoertijd???
                    MAX (m.mld_melding_indult) mld_melding_indult,
                    MIN (m.mld_melding_einddatum_std) mld_melding_einddatum_std, -- min_melding_einddatum_std of min_thtsla_einddatum_start???
                    MAX (m.mld_melding_einddatum) mld_melding_einddatum,
                    MAX (m.klant_melding) klant_melding,
                    MAX (m.prs_bedrijf_key) prs_bedrijf_key
               FROM (SELECT PCHX_MON.get_first_melding (m.mld_melding_key, 1)
                               m_start,
                            m.mld_melding_key,
                            DECODE (m.mld_melding_status, 4, 1, 0) open, -- open = Geaccepteerd???
                            m.mld_melding_datum,
                            COALESCE(fac.gettrackingdate ('MLDAFM', m.mld_melding_key), TO_DATE('20991231', 'YYYYMMDD')) gereed,
                            m.mld_melding_t_uitvoertijd,
                            m.mld_melding_t_respijt,
                            m.mld_melding_indult,
                            m.mld_melding_einddatum_std,
                            m.mld_melding_einddatum,
                            a.prs_bedrijf_key,
                            pchx_mon.klant_melding(m.mld_melding_key) klant_melding
                       FROM mld_melding m,
                            mld_stdmelding std,
                            prs_perslid p,
                            prs_v_afdeling a
                      WHERE m.mld_melding_parentkey IS NULL
                        AND m.prs_perslid_key = p.prs_perslid_key
                        AND p.prs_afdeling_key = a.prs_afdeling_key
                        AND m.mld_melding_status <> 1 --Ivm PCHA#72857, geen afgewezen meldingen meenemen
                        -- meldingen die al geexporteerd zijn (en in de tabel nmms_monitoring staan) komen niet meer in deze view
                        AND NOT EXISTS
                            (SELECT 1
                               FROM pchx_monitoring
                              WHERE melding_key = m.mld_melding_key)
                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                        AND std.mld_stdmelding_slabewaken = 1 -- alleen meldingen waarvoor een malus geldt
                                                             ) m
           GROUP BY m.m_start) m,
          mld_melding x -- gedefinieerde set gegevens bij M_START als referentie
    WHERE m.m_start = x.mld_melding_key;


CREATE OR REPLACE VIEW pchx_v_monitoring
(
   melding_key,
   afw,
   indult,
   respijt,
   kostenplaats,
   locatie,
   gebouw,
   verdieping,
   ruimte,
   omschrijving,
   begin,
   gereed,
   thtijdstip,
   verwerkt,
   eenheid,
   tht,
   wht,
   regime,
   groep,
   basiskorting,
   variabelekorting,
   wht_tht,
   totaal,
   totaal_z_respijt,
   totaal_index,
   status,
   afgerond,
   dienst,
   stdmelding_key,
   discipline_key,
   overlappend,
   gekoppeld,
   wegingsfactor,
   melding_omschrijving,
   melding_opmerking,
   klant_melding,
   bedrijf_naam,
   og,
   bedrijf_malus,
   prefix,
   kenmerken,
   note
)
AS
   SELECT m_start,                                          --mld_melding_key,
             DECODE (antedateren, 0, '', 'T') -- de begintijd of eindtijd van de melding is aangepast
          || DECODE (g.respijt.tijdsduur, 0, '', 'R') -- er is een respijt ingevuld
          || DECODE (mld_melding_indult, 1, 'I', '') -- indult is aangevinkt dus melding doet niet mee
          || DECODE (niet_overlappen, 1, 'O', '') -- melding is gemarkeerd als zijnde niet te overlappen met een andere melding
          || DECODE (aantal_beschikb, 0, '', 'B'), -- binnen de looptijd van de melding is er ook een beschikbaarheidsmelding in dezelfde ruimte
          DECODE (COALESCE (mld_melding_indult, 0), 0, 'Nee', 'Ja'),
          DECODE (g.respijt.tijdsduur,
                  0, NULL,
                  TO_CHAR (ROUND (g.respijt.tijdsduur, 2)))
             respijt,
          prs_kostenplaats_nr,
          alg_locatie_code,
          alg_gebouw_upper,
          alg_verdieping_volgnr,
          ruimte,
          mld_stdmelding_omschrijving,
          t_van,
          gereed,
          thtijdstip,
          (SELECT MAX(fac_tracking_datum)
             FROM fac_tracking
            WHERE fac_tracking_refkey = m_start              --mld_melding_key
              AND fac_srtnotificatie_key = DECODE(pchx.get_user, 'PGHE', 56, 46))
             verwerkt,
          eenheid,
          ROUND (g.tht.tijdsduur, 2) tht,
          ROUND (g.actual.tijdsduur, 2) wht,
          regime,
          mld_stdmeldinggroep_naam groep,
          bk basiskorting,
          vk variabelekorting,
          DECODE (telaat, 1, ROUND (g.uitloop.tijdsduur, 2)) wht_tht,
          PCHX_MON.get_abs_bedrag (
             DECODE (
                telaat,
                1,  -- Westland rond de breuk af op 1 decimaal en HGH rond af op gehele getallen. Gemeente Heerlen rond de breuk naar beneden af op gehele getallen.
                coalesce(bk,0) + DECODE(vk, null, 0, (DECODE(pchx.get_user, 'PGHE' , TRUNC (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur)) * vk,
                                                                                     ROUND (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk))), -- Alleen als dagen x24!
                NULL))
             totaal,
          DECODE (
             telaat_z_respijt,
             1,  -- Westland rond de breuk af op 1 decimaal en HGH rond af op gehele getallen. Gemeente Heerlen rond de breuk naar beneden af op gehele getallen.
             coalesce(bk,0) + DECODE(vk, null, 0, (DECODE(pchx.get_user, 'PGHE' , TRUNC (g.uitloop_z_respijt.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur)) * vk,
                                                                                  ROUND (g.uitloop_z_respijt.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk))), -- Alleen als dagen x24!
             NULL)
             totaal_z_respijt,
          PCHX_MON.get_abs_bedrag (
             DECODE (pchx.get_user, 'PGHE' ,
                DECODE (
                   telaat,
                   1,
                   PCHX_MON.check_max(coalesce(bk,0) + DECODE(vk, null, 0, (TRUNC (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur)) * vk)) * -- Alleen als dagen x24!
                       wegingsfactor, PCHX_MON.get_max_korting(mld_stdmelding_key))),
                DECODE (
                   telaat,
                   1,
                   coalesce(bk,0) + DECODE(vk, null, 0, (ROUND (g.uitloop.tijdsduur/DECODE(g.thtsla.tijdsduur, 0, 0.1, g.thtsla.tijdsduur), DECODE(pchx.get_user, 'PCHW', 1,0)) * vk)), -- Alleen als dagen x24!
                   NULL) * PCHX_MON.get_index_value(t_van, 'MON'))
             )
             totaal_index,  -- voor PGHE is dit het totaal tov de max vergoeding en verminigvuldigd met de weging
          (SELECT mld_statuses_omschrijving
             FROM mld_statuses
            WHERE mld_statuses_key = mld_melding_status),
          DECODE (mld_melding_afgerond, 1, 'x'),
          (SELECT prs_dienst_omschrijving
             FROM prs_dienst
            WHERE prs_dienst_key = g.prs_dienst_key),
          mld_stdmelding_key,
          mld_ins_discipline_key,
          overlappend,
          (SELECT listagg (m2.mld_melding_key, ',') WITHIN GROUP (ORDER BY m2.mld_melding_key)
                  AS gekoppeld
             FROM mld_melding m2
            WHERE COALESCE(m2.mld_melding_parentkey, -1) = m_start
            GROUP BY m2.mld_melding_parentkey) gekoppeld,
          wegingsfactor,
          mld_melding_omschrijving,
          mld_melding_opmerking,
          klant_melding,
          (SELECT prs_bedrijf_naam
             FROM prs_bedrijf b
            WHERE b.prs_bedrijf_key = g.prs_bedrijf_key)
             prs_bedrijf_naam,
          DECODE (antedateren + g.respijt.tijdsduur + mld_melding_indult + mld_melding_afgerond, 0, 0, 1),
          PCHX.get_kenmerk('MLD', DECODE(PCHX.get_user, 'PCHA', 61, 'PCHW', 121, 'PGHE', 102), m_start),
          ins_srtdiscipline_prefix,
               (SELECT listagg (mld_srtkenmerk_omschrijving || ': ' || PCHX.get_kenmerk ('MLD',k.mld_kenmerk_key, m_start), chr(10)) WITHIN GROUP (ORDER BY k.mld_kenmerk_volgnummer)
                  AS kenmerken
             FROM mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk
            WHERE km.mld_melding_key = m_start
            AND km.mld_kenmerk_key = k.mld_kenmerk_key
            and k.mld_srtkenmerk_key =  sk.mld_srtkenmerk_key
            AND km.mld_kenmerkmelding_verwijder IS NULL
            AND k.mld_kenmerk_verwijder IS NULL
            and sk.mld_srtkenmerk_verwijder IS NULL
            GROUP BY mld_melding_key) kenmerken,
                    (SELECT mld_melding_note_omschrijving FROM mld_melding_note n
            WHERE n.mld_melding_key = m_start
              AND NOT EXISTS (SELECT mld_melding_note_key FROM mld_melding_note n2
                               WHERE n2.mld_melding_key = n.mld_melding_key
                                 AND n2.mld_melding_note_key > n.mld_melding_note_key)) note
     FROM (SELECT m.m_start,
                  m.aantal,
                  DECODE (m.aantal, 1, NULL, m.overlappend) overlappend,
                  ( SELECT count(*)
                      FROM mld_kenmerkmelding km
                     WHERE mld_kenmerk_key = DECODE(PCHX.get_user, 'PCHA', 241, 'PCHW', 221, 'PGHE', 121)
                       AND km.mld_melding_key = m_start) niet_overlappen,
                  m.mld_melding_status,
                  m.mld_melding_afgerond,
                  m.mld_melding_indult,
                  m.mld_melding_omschrijving,
                  m.mld_melding_opmerking,
                  std.prs_dienst_key,
                  std.mld_stdmelding_key,
                  std.mld_ins_discipline_key,
                  std.mld_stdmelding_omschrijving,
                  std.mld_stdmelding_malus,
                  m.t_van,
                  m.gereed,
                  m.mld_melding_einddatum_std thtijdstip,
                  stdg.mld_stdmeldinggroep_naam,
                  PCHX_MON.get_regime (std.mld_stdmelding_key,
                                   m.mld_alg_onroerendgoed_keys,
                                   NULL)
                     regime,                        -- aantal werkuren per dag
                  UPPER (SUBSTR (stdg.mld_stdmeldinggroep_naam, 1, 1))
                     kortingtype,   -- de meldingsgroep bevat het type storing
                  kp.prs_kostenplaats_nr,
                  l.alg_locatie_code,
                  g.alg_gebouw_upper,
                  v.alg_verdieping_volgnr,
                  r.alg_ruimte_nr || '-' || r.alg_ruimte_omschrijving
                     ruimte,
                  COALESCE ((SELECT stsr.mld_stdmsrtruimte_malusbasis
                     FROM mld_stdmsrtruimte stsr
                    WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
                      AND stsr.alg_srtruimte_key = r.alg_srtruimte_key), std.mld_stdmelding_malusbasis)
                     bk,
                  COALESCE ((SELECT stsr.mld_stdmsrtruimte_malus
                     FROM mld_stdmsrtruimte stsr
                    WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
                      AND stsr.alg_srtruimte_key = r.alg_srtruimte_key), std.mld_stdmelding_malus) vk,
                  (SELECT COUNT (mb.mld_melding_key) aantal -- kijk of er op het moment van de melding er een beschikbaarheidsstoring was
                     FROM mld_melding mb, mld_stdmelding std_b
                    WHERE (mb.mld_melding_datum BETWEEN m.t_van
                                                    AND  COALESCE (m.gereed,
                                                                   SYSDATE)
                        OR fac.gettrackingdate ('MLDAFM', mb.mld_melding_key) BETWEEN m.t_van
                                                                                  AND  COALESCE (
                                                                                          m.gereed,
                                                                                          SYSDATE))
                      AND mb.mld_alg_onroerendgoed_keys =
                             m.mld_alg_onroerendgoed_keys
                      AND mb.mld_stdmelding_key = std_b.mld_stdmelding_key
                      AND std_b.mld_stdmeldinggroep_key = 63 -- beschikbaarheid
                      AND std.mld_stdmeldinggroep_key <> 63)
                     aantal_beschikb,                       -- beschikbaarheid
                  -- vervolgmelding op een inspectie zijn per definitie te laat
                  -- inspecties zelf zijn te laat als de geplande einddatum verstreken is.
                  -- anders geldt de normale formule
                  SIGN(  m.max_t_actual.tijdsduur
                       - m.min_t_sla.tijdsduur
                       - m.max_t_respijt.tijdsduur) -- positief, dan te laat
                     telaat,
                  SIGN(  m.max_t_actual.tijdsduur
                       - m.min_t_sla.tijdsduur) -- positief, dan te laat
                     telaat_z_respijt,
                  m.max_t_actual actual,           -- MAX actuele doorlooptijd
                  m.min_t_sla thtsla,                               -- MIN SLA
                  m.min_t_sla.eenheid eenheid,
                  m.max_t_respijt respijt,                      -- MAX respijt
                  mld_t_uitvoertijd (
                     m.min_t_sla.tijdsduur
                     + m.max_t_respijt.tijdsduur,
                     m.min_t_sla.eenheid)
                     tht,                             -- MIN SLA + MAX respijt
                  mld_t_uitvoertijd (
                       m.max_t_actual.tijdsduur
                     - m.min_t_sla.tijdsduur
                     - m.max_t_respijt.tijdsduur,
                     m.max_t_actual.eenheid)
                     uitloop,                               -- hoeveel te laat
                  mld_t_uitvoertijd (
                       m.max_t_actual.tijdsduur
                     - m.min_t_sla.tijdsduur,
                     m.max_t_actual.eenheid)
                     uitloop_z_respijt,                               -- hoeveel te laat
                  DECODE(PCHX.get_user, 'PGHE', pchx_mon.get_weging(m.t_van, stdg.mld_stdmeldinggroep_key), -- Afhankelijk van de stdmeldinggroep en de periode
                                                sr.alg_srtruimte_prijs4) wegingsfactor, -- wegingsfactor bij soortruimte
                  -- is de tijd van de melding aangepast?
                  (SELECT COUNT ( * )
                     FROM fac_tracking t, fac_srtnotificatie sn
                    WHERE t.fac_tracking_refkey = m.m_start -- mld_melding_key VAN MELDING MET LAAGSTE KEY???
                      AND t.fac_srtnotificatie_key =
                             sn.fac_srtnotificatie_key
                      AND sn.fac_srtnotificatie_code = 'MLDUPD'
                      AND (t.fac_tracking_oms LIKE '%Start :%'
                        OR t.fac_tracking_oms LIKE '%Afgemeld:%'))
                     antedateren,
                  klant_melding,
                  prs_bedrijf_key,
                  ins_srtdiscipline_prefix
             FROM pchx_v_startmelding_geg m,
                  mld_stdmelding std,
                  ins_tab_discipline d,
                  ins_srtdiscipline sd,
                  mld_stdmeldinggroep stdg,
                  prs_kostenplaats kp,
                  alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r,
                  alg_srtruimte sr
            WHERE m.mld_melding_status IN (0, 2, 3, 4, 5, 6, 7, 99) -- alles behalve 1=Afgewezen
              AND m.mld_stdmelding_key = std.mld_stdmelding_key
              AND std.mld_ins_discipline_key = d.ins_discipline_key
              AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
              AND std.mld_stdmeldinggroep_key =
                     stdg.mld_stdmeldinggroep_key(+)
              AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
              AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key(+)
              AND r.alg_verdieping_key = v.alg_verdieping_key(+)
              AND v.alg_gebouw_key = g.alg_gebouw_key(+)
              AND g.alg_locatie_key = l.alg_locatie_key(+)
              AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
              AND (
                    (     PCHX.get_user = 'PGHE'
                      AND (    UPPER (SUBSTR (stdg.mld_stdmeldinggroep_naam, 1, 1)) IN ('M')        -- Meting Periodiek
                               -- Meldingen op V&G en W&R worden altijd getoond ook als ze door een eigen medewerker zijn ingelegd.
                            OR d.ins_discipline_key IN (154, 150) -- Veiligheid en gezondheid, Regelgeving
                            OR klant_melding = 1
                          )
                         -- alleen meldingen waarvoor een malus geldt
                      AND (    std.mld_stdmelding_malus IS NOT NULL
                            OR std.mld_stdmelding_malusbasis IS NOT NULL
                            OR EXISTS (SELECT mld_stdmsrtruimte_key
                                         FROM mld_stdmsrtruimte stdsr
                                        WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key
                                          AND stdsr.alg_srtruimte_key = r.alg_srtruimte_key)
                          )
                    )
                    OR
                    (     PCHX.get_user = 'PCHA'
                                -- meldingen op inspecties worden altijd getoond (Kq)
                      AND (     UPPER (SUBSTR (sd.ins_srtdiscipline_prefix, 1, 1)) = 'Q'
                                -- anders alleen storingen ingelegd door klant medewerkers
                             OR klant_melding = 1
                                -- Meldingen op V&G en W&R worden altijd getoond ook als ze door een eigen medewerker zijn ingelegd.
                             OR d.ins_discipline_key in (232, 220) -- V en G, W en R
                          )
                      AND (   std.mld_stdmelding_malus IS NOT NULL
                           OR EXISTS (SELECT mld_stdmsrtruimte_key
                                FROM mld_stdmsrtruimte stdsr
                               WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key)
                          )
                    )
                    OR
                    (     PCHX.get_user = 'PCHW'
                                -- meldingen op inspecties worden altijd getoond (Kq)
                      AND (     UPPER (SUBSTR (sd.ins_srtdiscipline_prefix, 1, 1)) = 'Q'
                             OR klant_melding = 1
                          )
                              -- alleen meldingen waarvoor een malus geldt of als er een uitzondering voor deze ruimtefunctie is.
                      AND (   std.mld_stdmelding_malus IS NOT NULL
                           OR EXISTS (SELECT mld_stdmsrtruimte_key
                                FROM mld_stdmsrtruimte stdsr
                               WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key)
                          )
                    )
                  )
          ) g;


-- Rapport om de niet gegroeperde data te zien
CREATE OR REPLACE VIEW pchx_v_monitoring_onderlegger
(
   start_key,
   melding_key,
   afw,
   indult,
   respijt,
   locatie,
   gebouw,
   verdieping,
   ruimte,
   omschrijving,
   begin,
   gereed,
   thtijdstip,
   tht,
   eenheid,
   wht,
   regime,
   basiskorting,
   variabelekorting,
   melding_omschrijving,
   melding_opmerking,
   klant_melding
)
AS
   SELECT pchx_mon.get_first_melding (m.mld_melding_key, 1) m_start,
          m.mld_melding_key,
             DECODE (antedateren.aantal, 0, '', NULL, '', 'T') -- de begintijd of eindtijd van de melding is aangepast
          || DECODE (m.mld_melding_t_respijt.tijdsduur, 0, '', NULL, '', 'R') -- er is een respijt ingevuld
          || DECODE (m.mld_melding_indult, 1, 'I', '')
             afw,                                  -- indult is aangevinkt dus melding doet niet mee
          m.mld_melding_indult indult,
          m.mld_melding_t_respijt.tijdsduur respijt,
          alg_locatie_code,
          alg_gebouw_upper,
          alg_verdieping_volgnr,
          alg_ruimte_nr,
          std.mld_stdmelding_omschrijving,
          m.mld_melding_datum begin,
          fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed,
          m.mld_melding_einddatum_std thttijdstip,
          m.mld_melding_t_uitvoertijd.tijdsduur tht,
          m.mld_melding_t_uitvoertijd.eenheid thteenheid,
          mld.getactualuitvoer ( -- verschil tussen t_van en gereed/SYSDATE is de maximale - actuele - doorlooptijd!
             m.mld_melding_datum,
             COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key), SYSDATE),
             m.mld_stdmelding_key,
             m.mld_melding_spoed,
             m.mld_alg_onroerendgoed_keys,
             NULL).tijdsduur
             wht,
          pchx_mon.get_regime (std.mld_stdmelding_key, m.mld_alg_onroerendgoed_keys, NULL) regime,
          COALESCE (
             (SELECT stsr.mld_stdmsrtruimte_malusbasis
                FROM mld_stdmsrtruimte stsr
               WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
                 AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
             std.mld_stdmelding_malusbasis)
             bk,
          COALESCE (
             (SELECT stsr.mld_stdmsrtruimte_malus
                FROM mld_stdmsrtruimte stsr
               WHERE stsr.mld_stdmelding_key = std.mld_stdmelding_key
                 AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
             std.mld_stdmelding_malus)
             vk,
          mld_melding_omschrijving,
          mld_melding_opmerking,
          pchx_mon.klant_melding(m.mld_melding_key)
     FROM mld_melding m,
          mld_stdmelding std,
          alg_v_ruimte_gegevens rg,
          (  SELECT COUNT ( * ) aantal, t.fac_tracking_refkey
               FROM fac_tracking t, fac_srtnotificatie sn
              WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                AND sn.fac_srtnotificatie_code = 'MLDUPD'
                AND (t.fac_tracking_oms LIKE '%Start :%' OR t.fac_tracking_oms LIKE '%Afgemeld:%')
           GROUP BY t.fac_tracking_refkey) antedateren
    WHERE m.mld_melding_parentkey IS NULL
      AND m.mld_melding_key = antedateren.fac_tracking_refkey(+)
      AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key(+)
      -- meldingen die al geexporteerd zijn (en in de tabel nmms_monitoring staan) komen niet meer in deze view
      AND NOT EXISTS (SELECT 1
                        FROM pchx_monitoring
                       WHERE melding_key = m.mld_melding_key)
      AND m.mld_stdmelding_key = std.mld_stdmelding_key                          -- alleen meldingen waarvoor een malus geldt
              AND (   std.mld_stdmelding_malus IS NOT NULL
                   OR (PCHX.get_user = 'PGHE' AND std.mld_stdmelding_malusbasis IS NOT NULL)  -- Dit zou eigenlijk ook voor de andere klanten moeten gelden.
                   OR EXISTS (SELECT mld_stdmsrtruimte_key
                                FROM mld_stdmsrtruimte stdsr
                               WHERE stdsr.mld_stdmelding_key = std.mld_stdmelding_key));


-- Het rapport monitoring totaal bevat alle kortingen van de afgelopen maand als deze nog niet
-- bevroren zijn. Als dit wel zo is dan bevat het rapport de gegevens van de huidige maand.
CREATE OR REPLACE VIEW pchx_v_monitoring_tot
(
   melding_key,
   afw,
   indult,
   respijt,
   locatie,
   gebouw,
   verdieping,
   ruimte,
   omschrijving,
   begin,
   gereed,
   thtijdstip,
   verwerkt,
   eenheid,
   tht,
   wht,
   wht_tht,
   regime,
   groep,
   typekorting,
   basiskorting,
   variabelekorting,
   wegingsfactor,
   melding_omschrijving,
   melding_opmerking,
   dienst,
   stdmelding_key,
   totaal,
   totaal_index,
   totaal_z_respijt,
   overlappend,
   gekoppeld,
   kinderen,
   bedrijf_naam,
   klant_melding,
   bedrijf_malus,
   prefix
)
AS
   SELECT melding_key,
          afw,
          indult,
          respijt,
          locatie,
          gebouw,
          verdieping,
          ruimte,
          omschrijving,
          begin,
          gereed,
          thtijdstip,
          verwerkt,
          eenheid,
          tht,
          wht,
          wht_tht,
          regime,
          groep,
          NULL typekorting,
          basiskorting,
          variabelekorting,
          wegingsfactor,
          melding_omschrijving,
          melding_opmerking,
          dienst,
          stdmelding_key,
          DECODE (indult, 'Ja', 0, totaal),
          DECODE (indult, 'Ja', 0, totaal_index),
          totaal_z_respijt,
          SUBSTR (overlappend, 1, 100),
          SUBSTR (gekoppeld, 1, 100),
          NULL,                                                    -- kinderen bij herhalingskorting
          bedrijf_naam,
          klant_melding,
          bedrijf_malus,
          prefix
     FROM pchx_v_monitoring
    WHERE (totaal IS NOT NULL OR afw IS NOT NULL)
      AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie'))
      AND (gereed < TRUNC (SYSDATE, 'MONTH')   -- Vorige maand afgemeld als we al over de maandgrens zitten.
        OR TRUNC (SYSDATE, 'MONTH') =          -- Huidige maand. Dan is de huidige maand gelijk aan de maand van de laatste export
              (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring))
   UNION ALL
   SELECT NULL melding_key,
          NULL afw,
          NULL indult,
          NULL respijt,
          NULL locatie,
          NULL gebouw,
          NULL verdieping,
          NULL ruimte,
          NULL omschrijving,
          ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin,
          TRUNC (SYSDATE, 'MONTH') gereed,
          NULL thtijdstip,
          NULL verwerkt,
          NULL eenheid,
          NULL tht,
          NULL wht,
          NULL wht_tht,
          NULL regime,
          'Overschrijding' groep,
          NULL typekorting,
          NULL basiskorting,
          250 variabelekorting,
          NULL wegingsfactor,
          NULL melding_omschrijving,
          NULL melding_opmerking,
          NULL dienst,
          NULL stdmelding_key,
          250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal,
          PCHX_MON.get_index_value(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),-1)), 'MON') * 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal_index,
          NULL totaal_z_respijt,
          NULL overlappend,
          NULL gekoppeld,
          listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting
          NULL bedrijf_naam,
          NULL klant_melding,
          NULL bedrijf_malus,
          NULL prefix
     FROM pchx_v_monitoring
    WHERE PCHX.get_user = 'PCHW'
      AND totaal IS NOT NULL
      AND totaal <> 0
      AND indult = 'Nee'
      AND ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie'))
      AND (gereed < TRUNC (SYSDATE, 'MONTH')
        OR TRUNC (SYSDATE, 'MONTH') =
              (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring))
    GROUP BY 'Overschrijding'
   UNION ALL
   SELECT NULL melding_key,
          NULL afw,
          NULL indult,
          NULL respijt,
          NULL locatie,
          NULL gebouw,
          NULL verdieping,
          NULL ruimte,
          NULL omschrijving,
          ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin,
          TRUNC (SYSDATE, 'MONTH') gereed,
          NULL thtijdstip,
          NULL verwerkt,
          NULL eenheid,
          NULL tht,
          NULL wht,
          NULL wht_tht,
          NULL regime,
          'Overschrijding' groep,
          NULL typekorting,
          NULL basiskorting,
          50 variabelekorting,
          NULL wegingsfactor,
          NULL melding_omschrijving,
          NULL melding_opmerking,
          NULL dienst,
          NULL stdmelding_key,
          50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal,
          PCHX_MON.get_index_value(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),-1)), 'MON') * 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal_index,
          NULL totaal_z_respijt,
          NULL overlappend,
          NULL gekoppeld,
          listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting
          NULL bedrijf_naam,
          NULL klant_melding,
          NULL bedrijf_malus,
          NULL prefix
     FROM pchx_v_monitoring
    WHERE  PCHX.get_user = 'PCHW'
      AND indult = 'Nee'
      AND  ( (status = 'Afgemeld' AND afw IS NULL) OR (status = 'Historie'))
      AND (gereed < TRUNC (SYSDATE, 'MONTH')
        OR TRUNC (SYSDATE, 'MONTH') =
              (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_monitoring))
    GROUP BY 'Overschrijding';


CREATE OR REPLACE VIEW pchx_v_monitoring_history
(  maand,
   export_datum,
   melding_key,
   afw,
   indult,
   respijt,
   ruimte,
   omschrijving,
   begin,
   gereed,
   thtijdstip,
   eenheid,
   tht,
   wht,
   wht_tht,
   regime,
   groep,
   typekorting,
   basiskorting,
   variabelekorting,
   totaal,
   totaal_index,
   totaal_z_respijt,
   dienst,
   hide_f_stdmelding_key,
   wegingsfactor,
   overlappend,
   gekoppeld,
   kinderen,
   klant_melding,
   bedrijf,
   melding_omschrijving,
   melding_opmerking,
   bedrijf_malus,
   prefix
)
AS
   SELECT TO_CHAR(TRUNC(export_datum, 'MONTH')-1, 'yyyy-month') maand,
          export_datum,
          melding_key,
          afw,
          indult,
          respijt,
          ruimte,
          omschrijving,
          begin,
          gereed,
          thtijdstip,
          eenheid,
          tht,
          wht,
          wht_tht,
          regime,
          groep,
          typekorting,
          basiskorting,
          variabelekorting,
          totaal,
          totaal_index,
          totaal_z_respijt,
          dienst,
          stdmelding_key,
          wegingsfactor,
          overlappend,
          gekoppeld,
          kinderen,
          klant_melding,
          prs_bedrijf_naam,
          melding_omschrijving,
          melding_opmerking,
          bedrijf_malus,
          prefix
     FROM pchx_monitoring mo
    WHERE begin IS NOT NULL;


CREATE OR REPLACE VIEW pchx_v_facuur_onderlegger
(  maand,
   export_datum,
   melding_key,
   afw,
   indult,
   respijt,
   ruimte,
   omschrijving,
   begin,
   gereed,
   thtijdstip,
   eenheid,
   tht,
   wht,
   wht_tht,
   regime,
   groep,
   typekorting,
   basiskorting,
   variabelekorting,
   totaal,
   totaal_index,
   dienst,
   hide_f_stdmelding_key,
   wegingsfactor,
   overlappend,
   gekoppeld,
   klant_melding,
   bedrijf,
   melding_omschrijving,
   melding_opmerking,
   bedrijf_malus,
   prefix
)
AS
   SELECT TO_CHAR(TRUNC(export_datum, 'MONTH')-1, 'yyyy-month') maand,
          export_datum,
          melding_key,
          afw,
          indult,
          respijt,
          ruimte,
          omschrijving,
          begin,
          gereed,
          thtijdstip,
          eenheid,
          tht,
          wht,
          wht_tht,
          regime,
          groep,
          typekorting,
          basiskorting,
          variabelekorting,
          totaal,
          totaal_index,
          dienst,
          stdmelding_key,
          wegingsfactor,
          overlappend,
          gekoppeld,
          klant_melding,
          prs_bedrijf_naam,
          melding_omschrijving,
          melding_opmerking,
          bedrijf_malus,
          prefix
     FROM pchx_monitoring mo
    WHERE totaal <> 0;

CREATE OR REPLACE VIEW pchx_v_rap_svd
(
   xml_node,
   mld_melding_nr,
   mld_melding_key,
   svd_type,
   mld_status,
   status,
   datum,
   omschrijving,
   aantal,
   prijs,
   totaal,
   index_totaal,
   index_cijfer,
   actuele_prijs,
   mld_opdr_key,
   lomschr,
   kostensoort,
   kostenkenmerk,
   kostenplaats,
   goedgekeurd,
   fcl
)
AS
   SELECT 'opdracht',
          TO_CHAR (m.mld_melding_key),
          m.mld_melding_key,
          DECODE (SUBSTR (fac_usrdata_upper, 1, 3), 'BEV', 'Risicobeheersing', 'FAC', 'Facilitair ondersteuner', 'GLA', 'Gladheidsbestrijding', 'Schoonmaken'),
          st.mld_statuses_omschrijving,
          DECODE (mld_statusopdr_key, 6, 'Afgemeld', 9, 'Afgerond', 7, 'Verwerkt', 'Open'),
          COALESCE (mld_opdr_plandatum, mld_opdr_einddatum),
          COALESCE (mld_opdr_materiaal_omschr, ud.fac_usrdata_omschr),
          mld_opdr_materiaal_aantal,
          mld_opdr_materiaal_prijs,
          mld_opdr_materiaal_aantal * mld_opdr_materiaal_prijs totaal,
          ROUND (
               PCHX_MON.get_index_value (COALESCE (mld_opdr_plandatum, mld_opdr_einddatum), SUBSTR(fac_usrdata_code, 1,3) )
             * mld_opdr_materiaal_aantal
             * mld_opdr_materiaal_prijs,
             2)
             index_totaal,
          TO_CHAR(REPLACE(PCHX_MON.get_index_value (COALESCE (mld_opdr_plandatum, mld_opdr_einddatum), SUBSTR(fac_usrdata_code, 1,3) ), '.', ','))
              AS indexcijfer,
          TO_CHAR(REPLACE(PCHX_MON.get_index_value (COALESCE (mld_opdr_plandatum, mld_opdr_einddatum), SUBSTR(fac_usrdata_code, 1,3) )
             * mld_opdr_materiaal_aantal
             * mld_opdr_materiaal_prijs,
             '.', ','))
              AS ActuelePrijs,
          o.mld_opdr_key,
          DECODE (
             fac_usrdata_upper,
             'BEVBINKAN24',
             'Extra capaciteit beveiliging binnen reguliere gebruikstijden, die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.',
             'BEVBINKAN4',
             'Extra capaciteit beveiliging binnen reguliere gebruikstijden, die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.',
             'BEVBUIKANA24',
             'Extra capaciteit beveiliging buiten reguliere gebruikstijden, avond die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.',
             'BEVBUIKANA4',
             'Extra capaciteit beveiliging buiten reguliere gebruikstijden, avond die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.',
             'BEVBUIKANW24',
             'Extra capaciteit beveiliging buiten reguliere gebruikstijden, weekend die binnen 24 uur voorafgaand aan de inzet wordt aangevraagd.',
             'BEVBUIKANW4',
             'Extra capaciteit beveiliging buiten reguliere gebruikstijden, weekend die binnen 4 uur voorafgaand aan de inzet wordt aangevraagd.',
             'BEVCALBINKAN2',
             'Onbekend',
             'BEVCALBUIKANA2',
             'Onbekend',
             'BEVCALBUIKANW2',
             'Onbekend',
             'SCHSPOEL',
             'Extra capaciteit schoonmaak, spoelkeuken medewerker',
             'SCHPC',
             'Extra capaciteit schoonmaak, reiniging PC en toebehoren (= toetsenbord en muis)',
             'SCHBINKAN',
             'Extra capaciteit schoonmaak, dagkracht',
             'SCHBUIKAN',
             'Extra capaciteit schoonmaak, avonden / weekenden',
             'SCHGRAF',
             'Extra capaciteit schoonmaak, verwijderen graffiti',
             'GLADHEIDBESTR',
             'Gladheidbestrijding',
             'FACONDAVO',
             'Fac. Ondersteuner avond',
             'FACONDKAN',
             'Fac. Ondersteuner kantoor (>160 uur)',
             'FACONDKANLT160',
             'Fac. Ondersteuner kantoor (<160 uur)',
             'FACONDZAT',
             'Fac. Ondersteuner zaterdag',
             'FACONDZON',
             'Fac. Ondersteuner zondag',
             fac_usrdata_upper)
             lomschr,
          DECODE (fac_usrdata_upper,
                  'BEVBINKAN24', '80',
                  'BEVBINKAN4', '81',
                  'BEVBUIKANA24', '82',
                  'BEVBUIKANA4', '83',
                  'BEVBUIKANW24', '84',
                  'BEVBUIKANW4', '85',
                  'BEVCALBINKAN2', 'Onbekend',
                  'BEVCALBUIKANA2', 'Onbekend',
                  'BEVCALBUIKANW2', 'Onbekend',
                  'SCHSPOEL', '88',
                  'SCHPC', '89',
                  'SCHBINKAN', '90',
                  'SCHBUIKAN', '91',
                  'SCHGRAF', '92',
                  'GLADHEIDBESTR', '93',
                  fac_usrdata_upper)
             kostensoort,
          DECODE (fac_usrdata_upper,
                  'BEVBINKAN24', '6.1.1',
                  'BEVBINKAN4', '6.1.2',
                  'BEVBUIKANA24', '6.1.3',
                  'BEVBUIKANA4', '6.1.4',
                  'BEVBUIKANW24', '6.1.5',
                  'BEVBUIKANW4', '6.1.6',
                  'BEVCALBINKAN2', 'Onbekend',
                  'BEVCALBUIKANA2', 'Onbekend',
                  'BEVCALBUIKANW2', 'Onbekend',
                  'SCHSPOEL', '6.2.7',
                  'SCHPC', '6.2.8',
                  'SCHBINKAN', '6.2.9',
                  'SCHBUIKAN', '6.2.10',
                  'SCHGRAF', '6.2.11',
                  'GLADHEIDBESTR', '6.2.12',
                  fac_usrdata_upper)
             kostenkenmerk,
          prs_kostenplaats_nr,
          COALESCE ( ( SELECT FAC.safe_to_number(ko.mld_kenmerkopdr_waarde)
                         FROM mld_kenmerkopdr ko
                        WHERE ko.mld_kenmerk_key = 281 -- goedgekeurd door aanvrager
                          AND ko.mld_opdr_key = o.mld_opdr_key)
                     , 0) goedgekeurd,
          NULL fcl
     FROM mld_opdr o,
          mld_opdr_materiaal om,
          fac_usrdata ud,
          mld_melding m,
          mld_stdmelding std,
          mld_discipline d,
          prs_kostenplaats k,
          mld_statuses st
    WHERE o.mld_opdr_key = om.mld_opdr_key
      AND ud.fac_usrdata_key = om.fac_usrdata_key
      AND o.mld_melding_key = m.mld_melding_key
      AND m.mld_stdmelding_key = std.mld_stdmelding_key
      AND std.mld_ins_discipline_key = d.ins_discipline_key
      AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
      AND mld_statusopdr_key NOT IN (1, 2)
      AND st.mld_statuses_key = m.mld_melding_status
      AND NOT EXISTS ( SELECT f.mld_opdr_key FROM pchx_svd f WHERE f.mld_opdr_key = o.mld_opdr_key)
   UNION ALL
   SELECT 'artikel',
          res_reservering_key || '/' || res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_key,
          'Catering',
          TO_CHAR(NULL),
          b.res_status_bo_omschrijving,
          res_rsv_ruimte_van,
          ra.res_artikel_omschrijving,
          rra.res_rsv_artikel_aantal,
          ra.res_artikel_prijs,
          res.getartikelprijs (rra.res_rsv_artikel_key),
          PCHX_MON.get_index_value (rra.res_rsv_artikel_levering, ra.res_artikel_groep) * res.getartikelprijs (rra.res_rsv_artikel_key),
          TO_CHAR(REPLACE(PCHX_MON.get_index_value (rra.res_rsv_artikel_levering, ra.res_artikel_groep), '.', ','))
              AS indexcijfer,
          TO_CHAR(REPLACE(PCHX_MON.get_index_value (rra.res_rsv_artikel_levering, ra.res_artikel_groep)
             * res.getartikelprijs (rra.res_rsv_artikel_key),
             '.', ','))
              AS ActuelePrijs,
          rra.res_rsv_artikel_key,
          ra.res_artikel_omschrijving,
          ra.res_artikel_groep,
          NULL,
          k.prs_kostenplaats_nr,
          TO_NUMBER(NULL),
           (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 = 23
               AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) fcl            -- FCL
     FROM res_rsv_ruimte rrr,
          res_rsv_artikel rra,
          res_artikel ra,
          res_status_bo b,
          prs_kostenplaats k
    WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
      AND rra.res_artikel_key = ra.res_artikel_key
      AND rra.res_status_bo_key = b.res_status_bo_key
      AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
      AND (   rra.res_rsv_artikel_verwijder IS NULL
          OR (PCHX.get_user = 'PCHW' AND rrr.res_status_fo_key = 4)) --PCHW#83417
      AND ra.res_artikel_groep LIKE 'SVD%'
      AND ra.res_artikel_groep <> 'SVD14'
   UNION ALL
   SELECT 'artikel',
          res_reservering_key || '/' || res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_key,
          'Electriciteit',
          TO_CHAR (NULL),
          b.res_status_bo_omschrijving,
          res_rsv_ruimte_van,
          ra.res_artikel_omschrijving,
          rra.res_rsv_artikel_aantal,
          ra.res_artikel_prijs / 1000,
          res.getartikelprijs (rra.res_rsv_artikel_key) / 1000,
          pchx_mon.get_index_value (rra.res_rsv_artikel_levering,
                                    ra.res_artikel_groep)
          * res.getartikelprijs (rra.res_rsv_artikel_key)
          / 1000,
          TO_CHAR(REPLACE(PCHX_MON.get_index_value (rra.res_rsv_artikel_levering, ra.res_artikel_groep), '.', ','))
              AS indexcijfer,
          TO_CHAR(REPLACE(PCHX_MON.get_index_value (rra.res_rsv_artikel_levering, ra.res_artikel_groep)
             * res.getartikelprijs (rra.res_rsv_artikel_key),
             '.', ','))
              AS ActuelePrijs,
          rra.res_rsv_artikel_key,
          ra.res_artikel_omschrijving,
          ra.res_artikel_groep,
          NULL,
          k.prs_kostenplaats_nr,
          TO_NUMBER (NULL),
          (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 = 23
                  AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key)
             fcl                                                        -- FCL
     FROM res_rsv_ruimte rrr,
          res_rsv_artikel rra,
          res_artikel ra,
          res_status_bo b,
          prs_kostenplaats k
    WHERE     rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
          AND rra.res_artikel_key = ra.res_artikel_key
          AND rra.res_status_bo_key = b.res_status_bo_key
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND (   rra.res_rsv_artikel_verwijder IS NULL
              OR (PCHX.get_user = 'PCHW' AND rrr.res_status_fo_key = 4)) --PCHW#83417
          AND ra.res_artikel_groep = 'SVD14';

-- Het rapport svd totaal bevat alle SVDs van de afgelopen maand als deze nog niet
-- bevroren zijn. Als dit wel zo is dan bevat het rapport de gegevens van de huidige maand.
CREATE OR REPLACE VIEW pchx_v_rap_svd_tot
AS
   SELECT *
     FROM pchx_v_rap_svd
    WHERE  status = 'Verwerkt'
      --WHERE  status = DECODE(PCHX.get_user, 'PCHW', 'Afgemeld', 'Verwerkt') -- In PCHW#61325 is deze uitzondering komen te vervallen en worden SVD's getoond met status Verwerkt
	  AND (datum < TRUNC (SYSDATE, 'MONTH')   -- Vorige maand afgemeld als we al over de maandgrens zitten.
        OR TRUNC (SYSDATE, 'MONTH') =          -- Huidige maand. Dan is de huidige maand gelijk aan de maand van de laatste export
              (SELECT TRUNC (MAX (export_datum), 'MONTH') FROM pchx_svd))
           AND mld_opdr_key NOT IN (SELECT mld_opdr_key FROM pchx_svd);


CREATE OR REPLACE PROCEDURE pchx_select_freeze_mon (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2)
AS
   CURSOR c1
   IS
      SELECT melding_key, indult
        FROM pchx_v_monitoring
       WHERE status = 'Afgemeld'
         AND gereed < TRUNC (SYSDATE, 'MONTH')
         AND afw IS NULL;     -- geen afwijkingen die goedgekeurd moeten worden
         --AND afgerond IS NULL        -- expliciete goedkeuring staat niet aan

-- !!! controleer ook meldingen die aan elkaar gekoppeld zijn !!!!!!!!!!!!!!!!!!
   CURSOR c2
   IS
      SELECT m_start,
             m.mld_melding_key,
             (SELECT mld_melding_status
                FROM mld_melding ms
               WHERE ms.mld_melding_key = m_start)
                mld_melding_status
        FROM (SELECT PCHX_MON.get_first_melding (mld_melding_key, 1) m_start,
                     fac.gettrackingdate ('MLDAFM', m.mld_melding_key) gereed,
                     m.*
                FROM mld_melding m
               WHERE m.mld_melding_parentkey IS NULL
                 AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) <
                        TRUNC (SYSDATE, 'MONTH')
                 AND m.mld_melding_key NOT IN
                           (SELECT melding_key FROM pchx_monitoring WHERE melding_key IS NOT NULL)
             ) m,
             pchx_v_monitoring mo
       WHERE      m_start <> m.mld_melding_key AND m_start = mo.melding_key
              AND (    (status = 'Afgemeld' AND afw IS NULL) -- startmelding mag niet hangen op goedkeuring
                    OR (status = 'Historie'));

   CURSOR c3
   IS
      SELECT * FROM pchx_v_monitoring_tot
       WHERE groep <> 'Overschrijding';

   CURSOR c_svd_opdracht
   IS
      SELECT * FROM pchx_v_rap_svd
       WHERE status = 'Verwerkt'
         AND xml_node = 'opdracht'
         AND datum < TRUNC (SYSDATE, 'MONTH')
         AND mld_opdr_key NOT IN (SELECT mld_opdr_key FROM pchx_svd);

   CURSOR c_svd_artikel
   IS
      SELECT * FROM pchx_v_rap_svd
       WHERE status = 'Afgemeld'
         AND xml_node = 'artikel'
         AND datum < TRUNC (SYSDATE, 'MONTH');

   v_exportdate       DATE;
   v_lastexport       DATE;
   v_kortingen_totaal NUMBER(11,2);
   v_svd_totaal       NUMBER(11,2);
   v_status           NUMBER;
BEGIN
   v_exportdate := SYSDATE;
   -- Als ik deze maand al een freeze heb uitgevoerd dan mag ik dat niet nog een keer doen.
   SELECT MAX(export_datum)
     INTO v_lastexport
     FROM pchx_monitoring;

   DELETE imp_log WHERE COALESCE(imp_log_applicatie, 'QueQeLeQue') = p_applname;

   IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'MONTH') <> TRUNC(v_exportdate, 'MONTH')
   THEN
      -- Zet de meldingen die geen afwijking kennen en die niet op status afgerond staan naar status verwerkt
      FOR rec IN c1
      LOOP
         BEGIN
            BEGIN
               fac.writelog (p_applname, 'I', 'Melding wordt op verwerkt gezet: ' || rec.melding_key , '');

               mld.setmeldingstatus (rec.melding_key, 6, NULL);

               SELECT mld_melding_status
                 INTO v_status
                 FROM mld_melding
                WHERE mld_melding_key = rec.melding_key;

               fac.writelog (p_applname, 'I', 'Melding is op verwerkt gezet: ' || rec.melding_key , v_status);

            END;
         END;
      END LOOP;


      -- zet slave meldingen van samenvallende meldingen ook op verwerkt
      FOR rec IN c2
      LOOP
         BEGIN
            IF rec.mld_melding_status = 6 OR rec.mld_melding_status = 5  -- verwerkt of afgemeld
            THEN
               BEGIN
                  fac.writelog (p_applname, 'I', 'Slave melding wordt op verwerkt gezet: ' || rec.mld_melding_key , '');

                  mld.setmeldingstatus (rec.mld_melding_key, 6, NULL);

                  SELECT mld_melding_status
                    INTO v_status
                    FROM mld_melding
                   WHERE mld_melding_key = rec.mld_melding_key;

                  fac.writelog (p_applname, 'I', 'Slave melding is op verwerkt gezet: ' || rec.mld_melding_key , v_status);
               END;
            END IF;
         END;
      END LOOP;


      -- Voeg de entries uit het monitoringsoverzicht toe aan de freeze tabel.
      FOR rec IN c3
      LOOP
         BEGIN
            BEGIN
               INSERT INTO pchx_monitoring (melding_key,
                                            afw,
                                            indult,
                                            respijt,
                                            locatie,
                                            gebouw,
                                            verdieping,
                                            ruimte,
                                            omschrijving,
                                            begin,
                                            gereed,
                                            thtijdstip,
                                            verwerkt,
                                            eenheid,
                                            tht,
                                            wht,
                                            wht_tht,
                                            regime,
                                            groep,
                                            typekorting,
                                            basiskorting,
                                            variabelekorting,
                                            wegingsfactor,
                                            dienst,
                                            stdmelding_key,
                                            totaal,
                                            totaal_index,
                                            totaal_z_respijt,
                                            overlappend,
                                            gekoppeld,
                                            kinderen,
                                            prs_bedrijf_naam,
                                            klant_melding,
                                            melding_omschrijving,
                                            melding_opmerking,
                                            export_datum,
                                            bedrijf_malus,
                                            prefix)
                   VALUES (rec.melding_key,
                           rec.afw,
                           rec.indult,
                           rec.respijt,
                           rec.locatie,
                           rec.gebouw,
                           rec.verdieping,
                           rec.ruimte,
                           rec.omschrijving,
                           rec.begin,
                           rec.gereed,
                           rec.thtijdstip,
                           rec.verwerkt,
                           rec.eenheid,
                           rec.tht,
                           rec.wht,
                           rec.wht_tht,
                           rec.regime,
                           rec.groep,
                           rec.typekorting,
                           rec.basiskorting,
                           rec.variabelekorting,
                           rec.wegingsfactor,
                           rec.dienst,
                           rec.stdmelding_key,
                           rec.totaal,
                           rec.totaal_index,
                           rec.totaal_z_respijt,
                           rec.overlappend,
                           rec.gekoppeld,
                           rec.kinderen,
                           rec.bedrijf_naam,
                           rec.klant_melding,
                           rec.melding_omschrijving,
                           rec.melding_opmerking,
                           v_exportdate,
                           rec.bedrijf_malus,
                           rec.prefix);
            END;
         END;
      END LOOP;

      INSERT INTO pchx_monitoring (melding_key, indult, export_datum)
         SELECT mld_melding_key, DECODE(mld_melding_indult, 1, 'Ja', 'Nee'), v_exportdate
           FROM mld_melding m
          WHERE m.mld_melding_status = 6                              -- Historie
            AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) <
                   TRUNC (SYSDATE, 'MONTH')
            AND m.mld_melding_key NOT IN (SELECT nm.melding_key
                                            FROM pchx_monitoring nm
                                           WHERE nm.melding_key IS NOT NULL);

      IF PCHX.get_user = 'PCHW'
      THEN
         -- Voeg de overschrijdingskorting toe.
         INSERT INTO pchx_monitoring (begin,
                                      gereed,
                                      groep,
                                      variabelekorting,
                                      totaal,
                                      totaal_index,
                                      kinderen,
                                      export_datum)
         SELECT ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin,
                TRUNC (SYSDATE, 'MONTH') gereed,
                'Overschrijding' groep,
                250 variabelekorting,
                250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal,
                PCHX_MON.get_index_value(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),-1)), 'MON') * 250 * (COUNT ( * ) - 10) * DECODE (SIGN (COUNT ( * ) - 10), 1, 1, 0) totaal_index,
                listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting
                v_exportdate
           FROM pchx_monitoring m1
          WHERE    NOT EXISTS  -- Meldingen die overlappend zijn worden niet meegeteld.
                   (SELECT 1
                      FROM pchx_monitoring m2
                     WHERE m2.overlappend LIKE '%' || m1.melding_key || '%' AND m1.overlappend IS NULL)
                AND totaal IS NOT NULL
            AND totaal <> 0
            AND COALESCE(groep, 'Quequleque') <> 'Overschrijding'
            AND export_datum = v_exportdate
          GROUP BY 'Overschrijding'
         UNION ALL
         SELECT ADD_MONTHS(TRUNC (SYSDATE, 'MONTH'), -1) begin,
                TRUNC (SYSDATE, 'MONTH') gereed,
                'Overschrijding' groep,
                50 variabelekorting,
                50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal,
                PCHX_MON.get_index_value(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'),-1)), 'MON') * 50 * (COUNT ( * ) - 20) * DECODE (SIGN (COUNT ( * ) - 20), 1, 1, 0) totaal_index,
                listagg (melding_key, ',') WITHIN GROUP (ORDER BY melding_key) AS kinderen, -- kinderen bij overschrijdingskorting
                v_exportdate
           FROM pchx_monitoring m1
          WHERE    NOT EXISTS  -- Meldingen die overlappend zijn worden niet meegeteld. 
                   (SELECT 1
                      FROM pchx_monitoring m2
                     WHERE m2.overlappend LIKE '%' || m1.melding_key || '%' AND m1.overlappend IS NULL)
                AND COALESCE(groep, 'Quequleque') <> 'Overschrijding'
                AND indult = 'Nee'
                AND export_datum = v_exportdate
          GROUP BY 'Overschrijding';
      END IF;

      SELECT SUM(totaal)
        INTO v_kortingen_totaal
        FROM pchx_monitoring
       WHERE export_datum = v_exportdate;


      INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
             VALUES ('FREEZE', 'Kortingen totaal: ' || v_kortingen_totaal, 1);

   ELSE
      INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
             VALUES ('FREEZE', 'Kortingen zijn al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 1);
   END IF;

   -- Freeze van SVD's
   -- Als ik deze maand al een freeze heb uitgevoerd dan mag ik dat niet nog een keer doen.
   SELECT MAX(export_datum)
     INTO v_lastexport
     FROM pchx_svd;

   IF TRUNC (COALESCE(v_lastexport, SYSDATE-100), 'MONTH') <> TRUNC(v_exportdate, 'MONTH')
   THEN
      FOR rec IN c_svd_opdracht
      LOOP
         BEGIN
            INSERT INTO pchx_svd (mld_melding_key,
                                  svd_type,
                                  status,
                                  datum,
                                  omschrijving,
                                  aantal,
                                  prijs,
                                  totaal,
                                  index_totaal,
                                  mld_opdr_key,
                                  lomschr,
                                  kostensoort,
                                  kostenkenmerk,
                                  export_datum)
                VALUES (rec.mld_melding_key,
                        rec.svd_type,
                        rec.status,
                        rec.datum,
                        rec.omschrijving,
                        rec.aantal,
                        rec.prijs,
                        rec.totaal,
                        rec.index_totaal,
                        rec.mld_opdr_key,
                        rec.lomschr,
                        rec.kostensoort,
                        rec.kostenkenmerk,
                        v_exportdate);

            mld.setopdrachtstatus (rec.mld_opdr_key, 7, NULL);

            mld.updatemeldingstatus (rec.mld_melding_key, 0, NULL);
         END;
      END LOOP;

      FOR rec IN c_svd_artikel
      LOOP
         BEGIN
            INSERT INTO pchx_svd (mld_melding_key,
                                  svd_type,
                                  status,
                                  datum,
                                  omschrijving,
                                  aantal,
                                  prijs,
                                  totaal,
                                  index_totaal,
                                  mld_opdr_key,
                                  lomschr,
                                  kostensoort,
                                  kostenkenmerk,
                                  fcl,
                                  export_datum)
                VALUES (rec.mld_melding_key,
                        rec.svd_type,
                        rec.status,
                        rec.datum,
                        rec.omschrijving,
                        rec.aantal,
                        rec.prijs,
                        rec.totaal,
                        rec.index_totaal,
                        rec.mld_opdr_key,
                        rec.lomschr,
                        rec.kostensoort,
                        rec.kostenkenmerk,
                        rec.fcl,
                        v_exportdate);

            UPDATE res_rsv_artikel rra
               SET res_rsv_artikel_verwerkt = v_exportdate, res_status_bo_key = 6
             WHERE     rra.res_rsv_artikel_key = rec.mld_opdr_key;
         END;
      END LOOP;



      SELECT SUM(totaal)
        INTO v_svd_totaal
        FROM pchx_svd
       WHERE export_datum = v_exportdate;

      INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
             VALUES ('FREEZE', 'SVD totaal: ' || v_svd_totaal, 2);
   ELSE
      INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr)
             VALUES ('FREEZE', 'SVDs zijn al bevroren deze maand op ' || TO_CHAR(v_lastexport, 'dd-mm-yyyy hh24:mi:ss'), 2);
   END IF;
COMMIT;
END pchx_select_freeze_mon;
/


CREATE OR REPLACE PROCEDURE pchx_export_freeze_mon (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2,
   p_filedir    IN VARCHAR2,
   p_filename   IN VARCHAR2)
AS
BEGIN
   DELETE fac_rapport WHERE fac_rapport_node = 'FREEZE';
END;
/

CREATE OR REPLACE VIEW pchx_v_export_freeze_mon
( result,
  result_order)
AS
   SELECT fac_rapport_regel, fac_rapport_volgnr
     FROM fac_rapport
    WHERE fac_rapport_node = 'FREEZE';


CREATE OR REPLACE VIEW pchx_v_svd_history
(
   mld_melding_key,
   mld_opdr_key,
   svd_type,
   status,
   datum,
   omschrijving,
   aantal,
   prijs,
   totaal,
   index_totaal,
   export_datum,
   maand,
   lomschr,
   kostensoort,
   kostenkenmerk,
   fcl
)
AS
   SELECT mld_melding_key,
          mld_opdr_key,
          svd_type,
          status,
          datum,
          omschrijving,
          aantal,
          prijs,
          totaal,
          index_totaal,
          export_datum,
          TO_CHAR(TRUNC(export_datum, 'MONTH')-1, 'yyyy-month') maand,
          lomschr,
          kostensoort,
          kostenkenmerk,
          fcl
     FROM pchx_svd;


-- Rapport om aanpassingen in de stdmelding/vakgroep te signaleren.
CREATE OR REPLACE VIEW pchx_v_mld_cat_aanpassing
AS
   SELECT m.mld_melding_key,
          m.mld_melding_onderwerp,
          fac_tracking_datum,
          fac_tracking_oms
     FROM fac_tracking t, mld_melding m
    WHERE fac_tracking_oms LIKE '%Melding:%' AND m.mld_melding_key = t.fac_tracking_refkey;


CREATE OR REPLACE VIEW pchx_v_rap_melding_details
AS
    SELECT sd.INS_SRTDISCIPLINE_OMSCHRIJVing,
          d.ins_discipline_omschrijving,
          std.mld_stdmelding_omschrijving,
          m.mld_melding_key,
          m.mld_melding_datum,
          rg.alg_locatie_code,
          rg.alg_gebouw_upper,
          rg.alg_verdieping_code,
          rg.alg_ruimte_nr || ' - ' || rg.alg_ruimte_omschrijving alg_ruimte_nr,
          rg.alg_ruimte_omschrijving,
          rg.alg_srtruimte_omschrijving,
          km.fac_usrdata_omschr
     FROM mld_melding m,
          alg_v_ruimte_gegevens rg,
          mld_stdmelding std,
          ins_tab_discipline d,
          alg_srtruimte rm,
          ins_srtdiscipline sd,
          (SELECT km.mld_melding_key, fac_usrdata_omschr
             FROM mld_srtkenmerk sk,
                  mld_kenmerk k,
                  mld_kenmerkmelding km,
                  fac_usrdata ud
            WHERE     mld_srtkenmerk_upper LIKE 'TYPE %'
                  AND mld_srtkenmerk_kenmerktype = 'R'
                  AND mld_srtkenmerk_verwijder IS NULL
                  AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                  AND k.mld_kenmerk_niveau = 'S'
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key
                  AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) =
                        fac_usrdata_key) km
    WHERE     m.mld_melding_key = km.mld_melding_key(+)
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND std.mld_ins_discipline_key = d.ins_discipline_key
          AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key
          AND rm.alg_srtruimte_key = rg.alg_srtruimte_key;

-- Rapport om de koppeling met Homij te monitoren.
CREATE OR REPLACE VIEW pchx_v_rap_stmelding_os_check
(
   ins_srtdiscipline_omschrijving,
   ins_discipline_omschrijving,
   mld_stdmelding_omschrijving,
   mld_stdmelding_slabewaken,
   mld_stdmeldinggroep_naam,
   mld_stdmelding_uitvoertijd_t,
   mld_stdmelding_uitvoertijd_e,
   mld_stdmelding_regime,
   mld_stdmelding_malus,
   mld_stdmelding_malusbasis,
   alg_srtruimte_code,
   alg_srtruimte_omschrijving,
   mld_stdmsrtruimte_t_uitvtijd_t,
   mld_stdmsrtruimte_t_uitvtijd_e,
   mld_stdmsrtruimte_regime,
   mld_stdmsrtruimte_malus,
   mld_stdmsrtruimte_malusbasis
)
AS
   SELECT sd.ins_srtdiscipline_omschrijving,
          ins_discipline_omschrijving,
          mld_stdmelding_omschrijving,
          mld_stdmelding_slabewaken,
          stdmg.mld_stdmeldinggroep_naam,
          std.mld_stdmelding_t_uitvoertijd.tijdsduur mld_stdmelding_uitvoertijd_t,
          std.mld_stdmelding_t_uitvoertijd.eenheid mld_stdmelding_uitvoertijd_e,
          DECODE (mld_stdmelding_regime, 1, 'DagregimeDienst', 2, 'DagregimeRuimte', 3, '24/7')
             mld_stdmelding_regime,
          mld_stdmelding_malus,
          mld_stdmelding_malusbasis,
          sr.alg_srtruimte_code,
          sr.alg_srtruimte_omschrijving,
          stdsr.mld_stdmsrtruimte_t_uitvtijd.tijdsduur mld_stdmsrtruimte_t_uitvtijd_t,
          stdsr.mld_stdmsrtruimte_t_uitvtijd.eenheid mld_stdmsrtruimte_t_uitvtijd_e,
          DECODE (mld_stdmsrtruimte_regime, 1, 'DagregimeDienst', 2, 'DagregimeRuimte', 3, '24/7')
             mld_stdmsrtruimte_regime,
          stdsr.mld_stdmsrtruimte_malus,
          stdsr.mld_stdmsrtruimte_malusbasis
     FROM mld_stdmelding std,
          ins_tab_discipline d,
          ins_srtdiscipline sd,
          mld_stdmsrtruimte stdsr,
          alg_srtruimte sr,
          mld_stdmeldinggroep stdmg
    WHERE std.mld_stdmelding_key = stdsr.mld_stdmelding_key(+)
      AND std.mld_ins_discipline_key = d.ins_discipline_key
      AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
      AND std.mld_stdmelding_verwijder IS NULL
      AND stdsr.alg_srtruimte_key = sr.alg_srtruimte_key(+)
      AND std.mld_stdmeldinggroep_key = stdmg.mld_stdmeldinggroep_key(+);


CREATE OR REPLACE VIEW pchx_v_rap_homij_status
( mld_melding_key, status)
AS
SELECT mld_melding_key, 'Nog te verzenden'
  FROM mld_opdr
 WHERE mld_uitvoerende_keys = 4963                             -- Homij Vianen
   AND mld_opdr_teverzenden = 1
   AND mld_opdr_verzonden IS NULL
UNION ALL
SELECT mld_melding_key, 'Geen opdracht'
  FROM mld_melding m, mld_stdmelding std
 WHERE     mld_melding_datum > TO_DATE ('20190114', 'yyyymmdd')
       AND m.mld_stdmelding_key = std.mld_stdmelding_key
       AND std.prs_dienst_key = 66                                  -- Hard FM
       AND NOT EXISTS
               (SELECT mld_opdr_key
                  FROM mld_opdr o
                 WHERE o.mld_melding_key = m.mld_melding_key)
       AND m.mld_melding_status IN (0,
                                    2,
                                    3,
                                    4,
                                    99,
                                    7)
UNION ALL
SELECT mld_melding_key, 'Geen lopende opdracht'
  FROM mld_melding m, mld_stdmelding std
 WHERE     mld_melding_datum > TO_DATE ('20190114', 'yyyymmdd')
       AND m.mld_stdmelding_key = std.mld_stdmelding_key
       AND std.prs_dienst_key = 66                                  -- Hard FM
       AND NOT EXISTS
               (SELECT mld_opdr_key
                  FROM mld_opdr o
                 WHERE     o.mld_melding_key = m.mld_melding_key
                       AND mld_statusopdr_key IN (2,
                                                  3,
                                                  4,
                                                  5,
                                                  8))
       AND m.mld_melding_status IN (4, 99, 7);

-- View tbv infobord om laatst afgemelde homij opdracht te tonen.
CREATE OR REPLACE VIEW PCHX_V_LAATSTE_HOMIJ_AFM
AS
SELECT mld_opdr_key, mld_melding_key, mld_opdr_bedrijfopdr_volgnr
  FROM mld_opdr o, fac_tracking t2
 WHERE     t2.fac_tracking_refkey = o.mld_opdr_key
       AND t2.fac_tracking_key =
           (SELECT MAX (fac_tracking_key)
              FROM fac_tracking t, fac_srtnotificatie sn
             WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                   AND sn.fac_srtnotificatie_code = 'ORDAFM'
                   AND prs_perslid_key = 17981      -- homij koppling api user
                                              );

-- Notificatiejob om een bericht naar de contractmanager te sturen op het moment dat een melding afgerond of afgemeld (alleen PCHW) wordt
CREATE OR REPLACE VIEW pchx_v_noti_melding_afrond
(
   sender,
   receiver,
   text,
   code,
   key,
   xkey
)
AS
   SELECT DISTINCT
          NULL sender,
          gg.prs_perslid_key receiver,
          'Facilitor: Melding: ' || m.mld_melding_key || ' is ter goedkeuring aangeboden.',
          'MLDINF' code,
          mld_melding_key key,
          NULL xkey
     FROM mld_melding m,
          fac_srtnotificatie sn,
          fac_tracking t,
          fac_gebruikersgroep gg
    WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
      AND sn.fac_srtnotificatie_code = 'MLDAFR'
      AND t.fac_tracking_refkey = m.mld_melding_key
      AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                               - fac_notificatie_job_interval / 24
                                          FROM fac_notificatie_job
                                         WHERE LOWER (fac_notificatie_job_view) =
                                                  'pchx_v_noti_melding_afrond')
                                   AND  (SELECT fac_notificatie_job_nextrun
                                           FROM fac_notificatie_job
                                          WHERE LOWER (fac_notificatie_job_view) =
                                                   'pchx_v_noti_melding_afrond')
      -- Notificatie wordt gestuurd naar de contractbeheerders
      AND gg.fac_groep_key = DECODE(pchx.get_user, 'PCHW',63, 'PCHA',  61)
    UNION ALL
   SELECT DISTINCT
          NULL sender,
          gg.prs_perslid_key receiver,
          'Facilitor: Melding: ' || m.mld_melding_key || ' is gereed gemeld.',
          'MLDINF' code,
          mld_melding_key key,
          NULL xkey
     FROM mld_melding m,
          prs_perslid p,
          prs_v_afdeling a,
          fac_srtnotificatie sn,
          fac_tracking t,
          fac_gebruikersgroep gg
    WHERE m.prs_perslid_key = p.prs_perslid_key
      AND p.prs_afdeling_key = a.prs_afdeling_key
      AND a.prs_bedrijf_key = 121 -- Gemeente Westland
      AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
      AND sn.fac_srtnotificatie_code = 'MLDAFM'
      AND t.fac_tracking_refkey = m.mld_melding_key
      AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun
                                               - fac_notificatie_job_interval / 24
                                          FROM fac_notificatie_job
                                         WHERE LOWER (fac_notificatie_job_view) =
                                                  'pchx_v_noti_melding_afrond')
                                   AND  (SELECT fac_notificatie_job_nextrun
                                           FROM fac_notificatie_job
                                          WHERE LOWER (fac_notificatie_job_view) =
                                                   'pchx_v_noti_melding_afrond')
      -- Notificatie wordt gestuurd naar de contractbeheerders
      AND gg.fac_groep_key = 63
      AND pchx.get_user = 'PCHW';

-- Notificatieview om afgemelde opdrachten van Homij te notificeren.
CREATE OR REPLACE VIEW pchx_v_noti_opdr_afm_homij
(
    sender,
    receiver,
    text,
    code,
    key,
    xkey
)
AS
    SELECT NULL
               sender,
           4101
               receiver,                                    -- Servicedesk DGS
              'Opdracht: '
           || o.mld_melding_key
           || '/'
           || o.mld_opdr_bedrijfopdr_volgnr
           || ' is door Homij afgemeld.',
           'ORDAFM'
               code,
           mld_opdr_key
               key,
           NULL
               xkey
      FROM fac_tracking t, fac_srtnotificatie sn, mld_opdr o
     WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
           AND fac_srtnotificatie_code = 'ORDAFM'
           AND t.fac_tracking_refkey = o.mld_opdr_key
           AND t.fac_tracking_datum BETWEEN (SELECT   fac_notificatie_job_nextrun
                                                    -   fac_notificatie_job_interval
                                                      / 24
                                               FROM fac_notificatie_job
                                              WHERE LOWER (
                                                        fac_notificatie_job_view) =
                                                    'pchx_v_noti_opdr_afm_homij')
                                        AND (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE LOWER (
                                                        fac_notificatie_job_view) =
                                                    'pchx_v_noti_opdr_afm_homij');



/* Formatted on 4/12/2017 16:43:33 (QP5 v5.313) */
CREATE OR REPLACE VIEW pchx_v_dashboard_korting
(
    melding,
    meldingen,
    omschrijving,
    bedrijf_malus,
    marge,
    hide_f_marge,
    hide_f_marge_respijt,
    totaal_index,
    tht_tijdstip,
    tht_tijdstip_respijt,
    eenheid,
    tht,
    status,
    basiskorting,
    variabelekorting,
    overlap_kort,
    melder,
    afw
)
AS
    SELECT melding_key,
           mlds.overlappend,
           omschrijving,
           bedrijf_malus,
           (SELECT    ROUND (
                            mo.tht
                          - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                          2)
                   || ' '
                   || m.mld_melding_t_uitvoertijd.eenheid
              FROM mld_melding m
             WHERE mo.melding_key = m.mld_melding_key)
               marge_txt,
           (SELECT ROUND (
                         m.mld_melding_t_uitvoertijd.tijdsduur
                       - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                       2)
              FROM mld_melding m
             WHERE mo.melding_key = m.mld_melding_key)
               marge,
           (SELECT ROUND (
                         mo.tht
                       - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                       2)
              FROM mld_melding m
             WHERE mo.melding_key = m.mld_melding_key)
               marge_respijt,               
           ROUND (totaal_index)
               totaal_index,
           thtijdstip,    
           COALESCE (mlds.min_tht_einddatum_start, thtijdstip) thttijdstipplusrespijt,
           eenheid,
           tht,
           status,
           basiskorting,
           variabelekorting,
              DECODE (INSTR (mo.overlappend, ',', 1, 1),
                      0, '',
                      NULL, '',
                      SUBSTR (mo.overlappend,
                                INSTR (mo.overlappend, ',', 1, 1) + 1,
                              DECODE (INSTR (mo.overlappend, ',', 1, 2),
                                      0, 100,
                                      DECODE (INSTR (mo.overlappend, ',', 1, 3),
                                              0, 100,
                                                INSTR (mo.overlappend, ',', 1, 3)
                                              - INSTR (mo.overlappend, ',', 1, 1)
                                              - 1))))
           || DECODE (INSTR (mo.overlappend, ',', 1, 3),
                      NULL, '',
                      0, '',
                      '...')
               overl_kort,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf, mld_melding m
            WHERE mo.melding_key = m.mld_melding_key
              AND m.prs_perslid_key = pf.prs_perslid_key) melder,
           afw
      FROM pchx_v_monitoring mo, pchx_v_startmelding_geg mlds
     WHERE     mo.gereed IS NULL
           AND mo.indult <> 'Ja'
           AND mlds.m_start = mo.melding_key;

-- nieuwe versie
CREATE OR REPLACE VIEW pchx_v_dashboard_korting_optij
(
    melding,
    meldingen,
    omschrijving,
    bedrijf_malus,
    marge,
    hide_f_marge,
    totaal_index,
    tht_tijdstip,
    eenheid,
    tht,
    status,
    basiskorting,
    variabelekorting,
    melder,
    afw
)
AS
    SELECT mld_melding_key,
		   COALESCE(mlds.m_start, m.mld_melding_key),
           mld_stdmelding_omschrijving,
           PCHX.get_kenmerk ('MLD',
                             DECODE (PCHX.get_user, 'PCHA', 61, 'PCHW', 121, 'PGHE', 102),
                             m.mld_melding_key)
               bedrijf_malus,
              ROUND (
                    m.mld_melding_t_uitvoertijd.tijdsduur
                  - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                  2)
           || ' '
           || m.mld_melding_t_uitvoertijd.eenheid
               marge_txt,
           ROUND (
                 m.mld_melding_t_uitvoertijd.tijdsduur
               - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
               2)
               marge,
           NULL
               totaal_index,
           mld.geteinddatum (m.mld_melding_key)
               thttijdstip,
           m.mld_melding_t_uitvoertijd.eenheid
               tht_eenheid,
             m.mld_melding_t_uitvoertijd.tijdsduur
           + COALESCE (m.mld_melding_t_respijt.tijdsduur, 0)
               tht,
           s.mld_statuses_omschrijving,
           COALESCE (
               (SELECT stsr.mld_stdmsrtruimte_malusbasis
                  FROM mld_stdmsrtruimte stsr
                 WHERE     stsr.mld_stdmelding_key = std.mld_stdmelding_key
                       AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
               std.mld_stdmelding_malusbasis)
               bk,
           COALESCE (
               (SELECT stsr.mld_stdmsrtruimte_malus
                  FROM mld_stdmsrtruimte stsr
                 WHERE     stsr.mld_stdmelding_key = std.mld_stdmelding_key
                       AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
               std.mld_stdmelding_malus)
               vk,
           prs_perslid_naam_full,
           DECODE (m.mld_melding_indult, 1, 'I') || DECODE (m.mld_melding_t_respijt.eenheid, NULL, '', 'R')
      FROM mld_melding             		m,
		   pchx_v_startmelding_geg 		mlds,
           mld_stdmelding          		std,
           mld_statuses            		s,
           alg_v_ruimte_gegevens  		rg,
           prs_v_perslid_fullnames_all 	pf
     WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
           AND m.mld_melding_indult = 0
           AND std.mld_stdmelding_slabewaken = 1
           AND s.mld_statuses_key = m.mld_melding_status
           AND pchx_mon.klant_melding (m.mld_melding_key) = 1
           AND m.mld_melding_parentkey IS NULL
           AND m.mld_melding_status NOT IN (1,5,6)                   -- Afgewezen
           AND m.prs_perslid_key = pf.prs_perslid_key
           AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key
           AND m.mld_melding_key = mlds.m_start (+);

CREATE OR REPLACE VIEW PCHX_V_DASHBOARD_NEW_OPTIJD
(
    MELDING,
    OMSCHRIJVING,
    VAKGROEP,
    BEDRIJF_MALUS,
    MARGE,
    HIDE_F_MARGE,
    HIDE_F_MARGE_RESPIJT,
    TOTAAL_INDEX,
    REGISTRATIETIJD,
    THT_TIJDSTIP,
    THT_TIJDSTIP_RESPIJT,
    EENHEID,
    THT,
    STATUS,
    BASISKORTING,
    VARIABELEKORTING,
    MELDER,
    AFW
)
AS
    SELECT mld_melding_key,
           mld_stdmelding_omschrijving,
           disc.ins_discipline_omschrijving,
           PCHX.get_kenmerk (
               'MLD',
               DECODE (PCHX.get_user,
                       'PCHA', 61,
                       'PCHW', 121,
                       'PGHE', 102),
               m.mld_melding_key)
               bedrijf_malus,
              ROUND (
                    m.mld_melding_t_uitvoertijd.tijdsduur
                  + COALESCE (m.mld_melding_t_respijt.tijdsduur, 0)
                  - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
                  2)
           || ' '
           || m.mld_melding_t_uitvoertijd.eenheid
               marge_txt,
           ROUND (
                 m.mld_melding_t_uitvoertijd.tijdsduur
               - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
               2)
               marge,
           ROUND (
                 m.mld_melding_t_uitvoertijd.tijdsduur
               + COALESCE (m.mld_melding_t_respijt.tijdsduur, 0)
               - mld.getactualuitvoer (m.mld_melding_key).tijdsduur,
               2)
               marge_respijt,
           NULL
               totaal_index,
           m.mld_melding_datum,
           mld.geteinddatum (m.mld_melding_key)
               thttijdstip,
           COALESCE (
               mld.geteinddatum (
                   PCHX_MON.get_first_melding (m.mld_melding_key, 1),
                   mld_t_uitvoertijd (
                         (m.mld_melding_t_uitvoertijd.tijdsduur)
                       + (m.mld_melding_t_respijt.tijdsduur),
                       (m.mld_melding_t_uitvoertijd.eenheid)),
                   (m.mld_melding_datum)),
               mld.geteinddatum (m.mld_melding_key))
               thttijdstipplusrespijt,
           m.mld_melding_t_uitvoertijd.eenheid
               tht_eenheid,
             m.mld_melding_t_uitvoertijd.tijdsduur
           + COALESCE (m.mld_melding_t_respijt.tijdsduur, 0)
               tht,
           s.mld_statuses_omschrijving,
           COALESCE (
               (SELECT stsr.mld_stdmsrtruimte_malusbasis
                  FROM mld_stdmsrtruimte stsr
                 WHERE     stsr.mld_stdmelding_key = std.mld_stdmelding_key
                       AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
               std.mld_stdmelding_malusbasis)
               bk,
           COALESCE (
               (SELECT stsr.mld_stdmsrtruimte_malus
                  FROM mld_stdmsrtruimte stsr
                 WHERE     stsr.mld_stdmelding_key = std.mld_stdmelding_key
                       AND stsr.alg_srtruimte_key = rg.alg_srtruimte_key),
               std.mld_stdmelding_malus)
               vk,
           prs_perslid_naam_full,
              DECODE (m.mld_melding_indult, 1, 'I')
           || DECODE (m.mld_melding_t_respijt.eenheid, NULL, '', 'R')
      FROM mld_melding                  m,
           mld_stdmelding               std,
           ins_tab_discipline           disc,
           mld_statuses                 s,
           alg_v_ruimte_gegevens        rg,
           prs_v_perslid_fullnames_all  pf
     WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = disc.ins_discipline_key
           AND m.mld_melding_indult = 0
           AND std.mld_stdmelding_slabewaken = 1
           AND s.mld_statuses_key = m.mld_melding_status
           AND pchx_mon.klant_melding (m.mld_melding_key) = 1
           AND m.mld_melding_parentkey IS NULL
           AND m.mld_melding_status NOT IN (1,5,6)                   -- Afgewezen
           AND m.prs_perslid_key = pf.prs_perslid_key
           AND m.mld_alg_onroerendgoed_keys = rg.alg_ruimte_key
           AND NOT EXISTS
                   (SELECT melding
                      FROM PCHX_V_DASHBOARD_KORTING tl
                     WHERE mld_melding_key = tl.melding);

CREATE OR REPLACE VIEW pchx_v_dashboard_kwis
(
    ins_srtdiscipline_omschrijving,
    aantal
)
AS
      SELECT ins_srtdiscipline_omschrijving, COUNT (mld_melding_key)
        FROM mld_melding       m,
             mld_stdmelding    std,
             ins_tab_discipline d,
             ins_srtdiscipline sd
       WHERE     m.MLD_STDMELDING_KEY = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = d.ins_discipline_key
             AND d.ins_srtdiscipline_key = sd.INS_SRTDISCIPLINE_KEY
             AND m.mld_melding_status IN (0, 2, 3, 4, 7)
    GROUP BY ins_srtdiscipline_omschrijving;

CREATE OR REPLACE FORCE VIEW pchx_mld_v_meldingkenmerk_cnd
(
   MELDING_KEY,
   MELDINGNUMMER,
   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,
   MELDING_STATUS,
   SLA_NVT,
   SLA_WERKDGN,
   SLA_WERKUREN,
   SLA_RESPIJTDGN,
   SLA_RESPIJTUREN,
   SLA_ACCPTDGN,
   SLA_ACCPTUREN,
   PLAN_UITVOERTIJD_SLA,
   MELDING_DATUM,
   MELDING_EINDDATUM,
   MELDING_ACCEPTDATUM,
   MELDING_AFGEMELD,
   MELDING_ACCEPTED,
   DOORLOOPTIJD_WERKDGN,
   DOORLOOPTIJD_WERKUREN,
   ONDERWERP,
   VOMSCHRIJVING,
   MELDING_OPMERKING,
   PRIORITEIT,
   PRIORITEITTXT,
   RATING,
   RATING_OPMERKING,
   BOLLETJE,
   ACCEPT_SLA_DAGEN,
   ACCEPT_SLA_UREN,
   UITVOERING_SLA_DAGEN,
   UITVOERING_SLA_UREN,
   AFSPRAAK_SLA_DAGEN,
   AFSPRAAK_SLA_UREN,
   ACCEPT_SLA_OPTIJD,
   UITVOERING_SLA_OPTIJD,
   AFSPRAAK_SLA_OPTIJD,
   SELFSERVICE,
   KENMERK,
   WAARDE_C,
   WAARDE_N,
   WAARDE_D,
   RUIMTE_FUNCTIE
)
AS
   SELECT
       mk.MELDING_KEY,
       mk.MELDINGNUMMER,
       mk.MELDING_REGIO,
       mk.MELDING_DISTRICT,
       mk.MELDING_LOCATIECODE,
       mk.MELDING_LOCATIE,
       mk.MELDING_LOCATIEPLAATS,
       mk.FCLT_3D_LOCATIE_KEY,
       mk.MELDING_GEBOUWCODE,
       mk.MELDING_GEBOUW,
       mk.MELDING_VERDIEPING,
       mk.MELDING_RUIMTENR,
       mk.MELDING_RUIMTE,
       mk.MELDING_ORDERNR,
       mk.KOSTENSOORTGROEP,
       mk.KOSTENSOORT,
       mk.KOSTENPLAATS,
       mk.KOSTENPLAATS_OMS,
       mk.MELDER,
       mk.MELDER_KEY,
       mk.AFDELING,
       mk.AFDELING_OMSCHRIJVING,
       mk.FCLT_3D_AFDELING_KEY,
       mk.BEDRIJF_KEY,
       mk.INVOERDER,
       mk.MELDBRON,
       mk.SOORTMELDING,
       mk.FCLT_3D_DISCIPLINE_KEY,
       mk.PRODUCTGROEP,
       mk.SUBPRODUCTGROEP,
       mk.BEHANDELGROEP,
       mk.BEHANDELAAR,
       mk.BEHANDELAAR_KEY,
       mk.SUBPRODUCTGROEPGROEP,
       mk.MELDING_STATUS,
       mk.SLA_NVT,
       mk.SLA_WERKDGN,
       mk.SLA_WERKUREN,
       mk.SLA_RESPIJTDGN,
       mk.SLA_RESPIJTUREN,
       mk.SLA_ACCPTDGN,
       mk.SLA_ACCPTUREN,
       mk.PLAN_UITVOERTIJD_SLA,
       mk.MELDING_DATUM,
       mk.MELDING_EINDDATUM,
       mk.MELDING_ACCEPTDATUM,
       mk.MELDING_AFGEMELD,
       mk.MELDING_ACCEPTED,
       mk.DOORLOOPTIJD_WERKDGN,
       mk.DOORLOOPTIJD_WERKUREN,
       mk.ONDERWERP,
       mk.VOMSCHRIJVING,
       mk.MELDING_OPMERKING,
       mk.PRIORITEIT,
       mk.PRIORITEITTXT,
       mk.RATING,
       mk.RATING_OPMERKING,
       mk.BOLLETJE,
       mk.ACCEPT_SLA_DAGEN,
       mk.ACCEPT_SLA_UREN,
       mk.UITVOERING_SLA_DAGEN,
       mk.UITVOERING_SLA_UREN,
       mk.AFSPRAAK_SLA_DAGEN,
       mk.AFSPRAAK_SLA_UREN,
       mk.ACCEPT_SLA_OPTIJD,
       mk.UITVOERING_SLA_OPTIJD,
       mk.AFSPRAAK_SLA_OPTIJD,
       mk.SELFSERVICE,
       mk.KENMERK,
       mk.WAARDE_C,
       mk.WAARDE_N,
       mk.WAARDE_D,
       (SELECT r.alg_srtruimte_omschrijving
         FROM alg_v_ruimte_gegevens r, alg_v_onroerendgoed onr
         WHERE r.alg_ruimte_key = onr.alg_ruimte_key
         AND m.mld_alg_onroerendgoed_keys = onr.alg_onroerendgoed_keys) RUIMTE_FUNCTIE
    FROM  mld_v_udr_meldingkenmerk_cnd mk, mld_melding m
    WHERE m.mld_melding_key = mk.melding_key;

CREATE OR REPLACE VIEW pchx_v_rap_mldmetoverlap
(
   prefix,
   melding_key,
   vakgroep,
   melding,
   datum,
   locatie,
   onderwerp,
   omschrijving,
   status,
   aanvrager,
   behandelaar,
   einddatum,
   overlappend,
   overlap
)
AS
   SELECT sd.ins_srtdiscipline_prefix,
          m.mld_melding_key,
          disc.ins_discipline_omschrijving,
          sm.mld_stdmelding_omschrijving,
          m.mld_melding_datum,
          COALESCE (alg.alg_plaatsaanduiding, loc.alg_locatie_code),
          m.mld_melding_onderwerp,
          m.mld_melding_omschrijving,
          ms.mld_statuses_omschrijving,
          aanv.prs_perslid_naam_full,
          beh.prs_perslid_naam_full,
          mld.geteinddatum (m.mld_melding_key),
          st.overlappend,
          (CASE
              WHEN fac.safe_to_number (st.overlappend) = m.mld_melding_key
                   OR st.overlappend IS NULL
              THEN
                 'Nee'
              ELSE
                 'Ja'
           END)
             AS overlap
     FROM mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline disc,
          ins_srtdiscipline sd,
          prs_v_perslid_fullnames aanv,
          prs_v_perslid_fullnames beh,
          pchx_v_startmelding_geg st,
          mld_statuses ms,
          alg_v_onroerendgoed_gegevens alg,
          alg_locatie loc
    WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = disc.ins_discipline_key
          AND disc.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND m.prs_perslid_key_voor = aanv.prs_perslid_key(+)
          AND m.mld_melding_behandelaar_key = beh.prs_perslid_key(+)
          AND m.mld_melding_key = st.m_start(+)
          AND m.mld_melding_status = ms.mld_statuses_key
          AND m.mld_alg_onroerendgoed_keys = alg.alg_onroerendgoed_keys(+)
          AND m.mld_alg_locatie_key = loc.alg_locatie_key(+);

CREATE OR REPLACE VIEW PCHX_V_NOTI_MLD_GOEDKEURING
(
    SENDER,
    RECEIVER,
    TEXT,
    CODE,
    KEY,
    XKEY
)
AS
    SELECT DISTINCT
           NULL
               sender,
           gg.prs_perslid_key
               receiver,
              'Facilitor: melding '
           || m.melding_key
           || ' moet goedgekeurd worden in '
           || pchx.get_user,
           'CUST15'
               code,
           m.melding_key
               key,
           NULL
               xkey
      FROM PCHX_V_MONITORING    m,
           fac_srtnotificatie   sn,
           fac_tracking         t,
           fac_gebruikersgroep  gg
     WHERE     t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
           AND sn.fac_srtnotificatie_code = 'MLDAFR'
           AND t.fac_tracking_refkey = m.melding_key
           AND m.afgerond = 'x'
           AND m.status = 'Afgemeld'
           AND t.fac_tracking_datum BETWEEN (SELECT   fac_notificatie_job_nextrun
                                                    -   fac_notificatie_job_interval
                                                      / 24
                                               FROM fac_notificatie_job
                                              WHERE UPPER (
                                                        fac_notificatie_job_view) =
                                                    'PCHX_V_NOTI_MLD_GOEDKEURING')
                                        AND (SELECT fac_notificatie_job_nextrun
                                               FROM fac_notificatie_job
                                              WHERE UPPER (
                                                        fac_notificatie_job_view) =
                                                    'PCHX_V_NOTI_MLD_GOEDKEURING')
           --Notificatie wordt gestuurd naar de contractbeheerders
           AND gg.fac_groep_key =
               DECODE (pchx.get_user,  'PCHW', 63,  'PCHA', 61,  'PGHE', 181);

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