--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database

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

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

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

-- ACTIVE DIRECTORY
CREATE OR REPLACE PROCEDURE mnnl_import_prs (p_import_key IN NUMBER)
AS
   v_errorhint      VARCHAR2 (1000);
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   v_errorhint := 'Generieke import';

   -- De sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure.
   -- (Smokkelen met de functie; daar zet ik nu de achternaam in en in de post-import wordt dat 'Onbekend'.)
   prs.import_perslid (p_import_key,
                       '8;0;0;0;0;0;5;4;0;3;' ||
                       '0;0;0;0;0;7;0;6;0;0;' ||
                       '3;1;0;0;0;0;0;0;0;0;' ||
                       '0;0;0;0;0;0;0;0;0;0;' ||
                       '0;0;0;0;0;0',
                       --1                2      3           4    5            6      7                 8
                       '"sAMAccountName";"name";"givenname";"sn";"department";"mail";"telephoneNumber";"L"%'
                       );

   v_errorhint := 'Verrijken import';

   -- Ontbrekende/afwijkende zaken rechtzetten:
   -- - vul functie met 'Onbekend'
   -- - vul titel/geslacht/personeelsnummer/mobiel/dienstverband met huidige waarde (om wissen te voorkomen)
   UPDATE fac_imp_perslid p
      SET prs_srtperslid_omschrijving = (SELECT prs_srtperslid_omschrijving FROM prs_srtperslid WHERE prs_srtperslid_key = 1),
          (prs_perslid_titel, prs_perslid_geslacht, prs_perslid_nr, prs_perslid_mobiel, prs_perslid_dienstverband) =
             (SELECT MAX(prs_perslid_titel), MAX(prs_perslid_geslacht), MAX(prs_perslid_nr), MAX(prs_perslid_mobiel), MAX(prs_perslid_dienstverband)
                FROM prs_v_aanwezigperslid
               WHERE prs_perslid_oslogin = UPPER(p.prs_perslid_oslogin))
    WHERE fac_import_key = p_import_key;
   COMMIT;

   -- Werkplek toekennen, door locatiecode, gebouwcode, verdiepingvolgnr en ruimtenr in importabel te zetten.
   -- Heeft de persoon al een WP op deze locatie? Dan kiezen we die, met als netto resultaat dat er niets gebeurt.
   -- Anders bepalen we de alfabetisch eerste ruimte op locatie en kiezen we die.
   UPDATE fac_imp_perslid ip
      SET (alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr) =
              (SELECT rg.alg_locatie_code, rg.alg_gebouw_upper, rg.alg_verdieping_volgnr, rg.alg_ruimte_nr
                 FROM alg_v_ruimte_gegevens rg
                WHERE alg_ruimte_aanduiding = COALESCE(
                        -- Eventuele bestaande werkplek op locatie.
                        (SELECT MAX(rg.alg_ruimte_aanduiding)
                           FROM prs_perslid p, prs_perslidwerkplek pw, prs_werkplek w, alg_v_ruimte_gegevens rg
                          WHERE p.prs_perslid_key = pw.prs_perslid_key
                            AND pw.prs_werkplek_key = w.prs_werkplek_key
                            AND w.prs_alg_ruimte_key = rg.alg_ruimte_key
                            AND rg.alg_locatie_omschrijving = ip.alg_locatie_code
                            AND p.prs_perslid_oslogin = UPPER(ip.prs_perslid_oslogin)),
                        -- Standaardruimte volgens locatieomschrijving in import (alfabetisch eerste).
                        (SELECT MIN(alg_ruimte_aanduiding)
                           FROM alg_v_ruimte_gegevens
                          WHERE alg_locatie_omschrijving = ip.alg_locatie_code
                            AND UPPER(alg_ruimte_nr) = '_WP')))
    WHERE fac_import_key = p_import_key;
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END mnnl_import_prs;
/

CREATE OR REPLACE PROCEDURE mnnl_update_prs (p_import_key IN NUMBER)
IS
   -- Verwijderen personen *binnen MN* die niet meer in importbestand voorkomen.
   CURSOR c_del
   IS
        SELECT p.prs_perslid_key
          FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab
         WHERE (p.prs_perslid_oslogin IS NULL OR p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\') -- ' tbv. opmaak
               AND p.prs_afdeling_key = ab.prs_afdeling_key
               AND ab.prs_bedrijf_key = 5                                -- MN
               AND NOT EXISTS
                     (SELECT 1
                        FROM fac_imp_perslid
                       WHERE UPPER (prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin))
      ORDER BY 1;

   -- Afnemen _Default-rol afh. van configuratie in Eigen tabel met key=721!
   CURSOR c_no_default
   IS
      SELECT '[' || p.prs_perslid_login || '] ' aanduiding, p.prs_perslid_key
        FROM prs_v_aanwezigperslid p, fac_v_aanwezigusrdata ud
       WHERE ud.fac_usrtab_key = 721                        -- PRS-imp. vs. FE
             AND ud.fac_usrdata_omschr LIKE 'Login%' -- Op login _Default afnemen!
             AND p.prs_perslid_oslogin LIKE REPLACE (ud.fac_usrdata_code, '_', '\_') || '%' ESCAPE '\'  -- ' tbv. opmaak
             AND p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\' -- ' tbv. opmaak
      UNION ALL
      SELECT '[' || p.prs_perslid_login || '] ' aanduiding, p.prs_perslid_key
        FROM prs_v_aanwezigperslid p, fac_v_aanwezigusrdata ud
       WHERE ud.fac_usrtab_key = 721                        -- PRS-imp. vs. FE
             AND ud.fac_usrdata_omschr LIKE 'Afdeling%' -- Op afdeling _Default afnemen!
             AND TO_CHAR (p.prs_afdeling_key) = ud.fac_usrdata_code
             AND p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\' -- ' tbv. opmaak
      ORDER BY 2;

   v_errorhint      VARCHAR2 (1000);
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count          NUMBER;
BEGIN
   -- Generic update
   SELECT COUNT(*) INTO v_count FROM fac_imp_perslid;

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

   -- Verwijderen personen *binnen MN* die niet meer in importbestand voorkomen.
   FOR rec IN c_del
   LOOP
      BEGIN
         prs.delete_perslid (p_import_key, rec.prs_perslid_key);
      END;
   END LOOP;

   -- p_sleutelkolom    Bevat het veld die als sleutel bij de import dient
   --                     LOGIN     - logincode
   -- p_alg_type        Werkplekken binnen dit niveau verwijderen
   --                     NULL      - geen werkplekken verwijderen
   --                     A         - altijd vaste werkplek verwijderen
   --                     R,V,G,L,D - werkplek(en) op dit niveau verwijderen
   prs.update_perslid (p_import_key, 'LOGIN', NULL);

   -- Afnemen _Default-rol afh. van configuratie in Eigen tabel met key=721!
   FOR rec IN c_no_default
   LOOP
      BEGIN
         v_errorhint := 'Fout afnemen _Default';

         DELETE FROM fac_gebruikersgroep
               WHERE fac_groep_key = 1                             -- _Default
                     AND prs_perslid_key = rec.prs_perslid_key;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.imp_writelog (p_import_key, 'E', rec.aanduiding || v_errormsg, v_errorhint);
            COMMIT;
      END;
   END LOOP;
END mnnl_update_prs;
/

-- KOPPELING SENTIDO
CREATE OR REPLACE VIEW mnnl_v_api_sentido
AS
   SELECT TO_CHAR(rr.res_rsv_ruimte_van, 'YYYYMMDD-HH24MI')||TO_CHAR(rr.res_rsv_ruimte_tot, ',YYYYMMDD-HH24MI') srt,
          rr.res_reservering_key||'/'||rr.res_rsv_ruimte_volgnr nummer,
          TO_CHAR(rr.res_rsv_ruimte_van, 'YYYY-MM-DD HH24:MI:SS') van,
          TO_CHAR(rr.res_rsv_ruimte_tot, 'YYYY-MM-DD HH24:MI:SS') tot,
          rr.res_rsv_ruimte_omschrijving omschrijving,
          pf.prs_perslid_naam_full host,
          TRIM(r.res_ruimte_nr) ruimte,
          r.res_ruimte_key ruimte_key
     FROM res_rsv_ruimte rr,
          res_ruimte_opstelling ro,
          res_ruimte r,
          prs_v_perslid_fullnames pf
    WHERE ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
      AND r.res_ruimte_key = ro.res_ruimte_key
      AND pf.prs_perslid_key = rr.res_rsv_ruimte_host_key
      AND rr.res_rsv_ruimte_verwijder IS NULL
      AND rr.res_status_fo_key NOT IN (3, 4)
      AND COALESCE(rr.res_rsv_ruimte_bezoekers_shown, rr.res_rsv_ruimte_noshow) IS NULL
      AND TRUNC(rr.res_rsv_ruimte_van) BETWEEN TRUNC(SYSDATE)
                                           AND TRUNC(SYSDATE+3);

-- MNNL#35290: Rapportje met res_ruimte-gegevens, inclusief volledige URL naar de room booking pagina,
-- voor door Sentido te genereren QR-code
CREATE OR REPLACE VIEW mnnl_v_rap_ruimtes_sentido
AS
   SELECT res_ruimte_nr ruimte_nr,
          res_ruimte_key ruimte_key,
          'https://mnnl.facilitor.nl/?u=MYsemfcDEbLOXShZ&'||'res_ruimte_key='||res_ruimte_key ruimte_url
     FROM res_v_aanwezigruimte
    ORDER BY res_ruimte_nr;


--- MNNL#32852
--- Rapport tbv cateraar Radarport. Alleen ruimten uit catalogus Radarport BG (key 621)
--- En catering in Gebouw Radarport behalve catalogi Servies R9 aanvullen (key 321 ) en Koffie en thee (key 43)
CREATE OR REPLACE VIEW MNNL_V_RAP_CAT_RADAR
(
   DATUM,
   VAN,
   TOT,
   RESNR,
   FCLT_H_RES_KEY,
   RUIMTE,
   FCLT_F_ACTIVITEIT,
   OMSCHRIJVING,
   GASTHEER_VROUW,
   TELEFOON,
   AANTAL_PERSONEN,
   VOORZIENINGEN
)
AS
   SELECT   RRR.RES_RSV_RUIMTE_VAN,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'HH24:MI') Van,
            TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24:MI') Tot,
            rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr Resnr,
            rrr.res_rsv_ruimte_key,
            r2a.ruimte_nr,
            ra.res_activiteit_omschrijving Activiteit,
            rrr.res_rsv_ruimte_omschrijving Omschrijving,
            pf.prs_perslid_naam_full Gastheer_vrouw,
            p.prs_perslid_telefoonnr,
            rrr.res_rsv_ruimte_bezoekers pers,
            voorzieningen
     FROM   res_rsv_ruimte rrr,
            alg_gebouw g,
            alg_verdieping v,
            alg_ruimte r,
            res_activiteit ra,
            prs_v_perslid_fullnames pf,
            prs_perslid p,
            (  SELECT   res_rsv_ruimte_key,
                        LISTAGG (voorziening, CHR (13) || CHR (10))
                           WITHIN GROUP (ORDER BY voorziening)
                           AS voorzieningen
                 FROM   (SELECT   res_rsv_ruimte_key,
                                  res_deel_omschrijving voorziening
                           FROM   res_deel rd, res_rsv_deel rrd
                          WHERE       RES_RSV_DEEL_verwijder IS NULL
                                  AND rd.res_deel_key = rrd.res_deel_key
                                  AND res_rsv_ruimte_key IS NOT NULL
                                  AND res_discipline_key != 81
                         UNION ALL
                         SELECT   res_rsv_ruimte_key,
                                     TO_CHAR (rra.res_rsv_artikel_aantal)
                                  || ' * '
                                  || res_artikel_omschrijving
                                     voorziening
                           FROM   res_artikel ra, res_rsv_artikel rra
                          WHERE   RES_RSV_artikel_verwijder IS NULL
                                  AND ra.res_artikel_key = rra.res_artikel_key)
             GROUP BY   res_rsv_ruimte_key) voorz,
            (  SELECT   res_ruimte_opstel_key,
                        MAX (o.res_opstelling_omschrijving) opstelling,
                        MAX (ra.alg_ruimte_key) alg_ruimte_key,
                        MAX (rr.res_ruimte_nr) ruimte_nr
                 FROM   res_ruimte_opstelling ro,
                        res_opstelling o,
                        res_ruimte rr,
                        res_alg_ruimte ra
                WHERE       ro.res_ruimte_key = rr.res_ruimte_key
                        AND ro.res_opstelling_key = o.res_opstelling_key
                        AND rr.res_ruimte_key = ra.res_ruimte_key
                        AND rr.res_discipline_key = 621
             GROUP BY   res_ruimte_opstel_key) r2a
    WHERE   rrr.res_ruimte_opstel_key = r2a.res_ruimte_opstel_key
            AND rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE - 14)
                                           AND  TRUNC (SYSDATE + 366)
            AND r.alg_ruimte_key = r2a.alg_ruimte_key
            AND r.alg_verdieping_key = v.alg_verdieping_key
            AND v.alg_gebouw_key = g.alg_gebouw_key
            AND ra.res_activiteit_key = rrr.res_activiteit_key
            AND pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key
            AND voorz.res_rsv_ruimte_key(+) = rrr.res_rsv_ruimte_key
            AND rrr.res_rsv_ruimte_Verwijder IS NULL
            AND p.prs_perslid_key = pf.prs_perslid_key
   UNION ALL
   SELECT   RRR.RES_RSV_RUIMTE_VAN,
            TO_CHAR (rrr.res_rsv_ruimte_van, 'HH24:MI') Van,
            TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24:MI') Tot,
            rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr Resnr,
            rrr.res_rsv_ruimte_key,
            r2a.ruimte_nr,
            ra.res_activiteit_omschrijving Activiteit,
            rrr.res_rsv_ruimte_omschrijving Omschrijving,
            pf.prs_perslid_naam_full Gastheer_vrouw,
            p.prs_perslid_telefoonnr,
            rrr.res_rsv_ruimte_bezoekers pers,
            voorzieningen
     FROM   res_rsv_ruimte rrr,
            alg_gebouw g,
            alg_verdieping v,
            alg_ruimte r,
            res_activiteit ra,
            prs_v_perslid_fullnames pf,
            prs_perslid p,
            (  SELECT   res_rsv_ruimte_key,
                        LISTAGG (voorziening, CHR (13) || CHR (10))
                           WITHIN GROUP (ORDER BY voorziening)
                           AS voorzieningen
                 FROM   (SELECT   res_rsv_ruimte_key,
                                     TO_CHAR (rra.res_rsv_artikel_aantal)
                                  || ' * '
                                  || res_artikel_omschrijving
                                     voorziening
                           FROM   res_artikel ra, res_rsv_artikel rra
                          WHERE       RES_RSV_artikel_verwijder IS NULL
                                  AND ra.res_artikel_key = rra.res_artikel_key
                                  AND ra.res_discipline_key NOT IN (321, 43))
             GROUP BY   res_rsv_ruimte_key) voorz,
            (  SELECT   res_ruimte_opstel_key,
                        MAX (o.res_opstelling_omschrijving) opstelling,
                        MAX (ra.alg_ruimte_key) alg_ruimte_key,
                        MAX (rr.res_ruimte_nr) ruimte_nr
                 FROM   res_ruimte_opstelling ro,
                        res_opstelling o,
                        res_ruimte rr,
                        res_alg_ruimte ra
                WHERE       ro.res_ruimte_key = rr.res_ruimte_key
                        AND ro.res_opstelling_key = o.res_opstelling_key
                        AND rr.res_ruimte_key = ra.res_ruimte_key
                        AND rr.res_discipline_key != 621
             GROUP BY   res_ruimte_opstel_key) r2a
    WHERE   rrr.res_ruimte_opstel_key = r2a.res_ruimte_opstel_key
            AND rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE - 14)
                                           AND  TRUNC (SYSDATE + 366)
            AND r.alg_ruimte_key = r2a.alg_ruimte_key
            AND r.alg_verdieping_key = v.alg_verdieping_key
            AND v.alg_gebouw_key = g.alg_gebouw_key
            AND g.alg_gebouw_key = 1
            AND ra.res_activiteit_key = rrr.res_activiteit_key
            AND pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key
            AND voorz.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
            AND rrr.res_rsv_ruimte_Verwijder IS NULL
            AND p.prs_perslid_key = pf.prs_perslid_key
   UNION ALL
   SELECT   RRR.RES_RSV_RUIMTE_VAN,
            TO_CHAR (rra.res_rsv_artikel_levering, 'HH24:MI') Van,
            TO_CHAR (rrr.res_rsv_ruimte_tot, 'HH24:MI') Tot,
            rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr Resnr,
            rrr.res_rsv_ruimte_key,
            alg_ruimte_nr,
            ra.res_activiteit_omschrijving Activiteit,
            rrr.res_rsv_ruimte_omschrijving Omschrijving,
            pf.prs_perslid_naam_full Gastheer_vrouw,
            p.prs_perslid_telefoonnr,
            rrr.res_rsv_ruimte_bezoekers pers,
               TO_CHAR (rra.res_rsv_artikel_aantal)
            || ' * '
            || res_artikel_omschrijving
               voorziening
     FROM   res_artikel ra,
            res_rsv_artikel rra,
            res_rsv_ruimte rrr,
            alg_ruimte r,
            alg_verdieping v,
            prs_v_perslid_fullnames pf,
            res_activiteit ra,
            prs_perslid p
    WHERE       RES_RSV_artikel_verwijder IS NULL
            AND ra.res_artikel_key = rra.res_artikel_key
            AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
            AND rrr.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE - 14)
                                           AND  TRUNC (SYSDATE + 366)
            AND rrr.res_rsv_ruimte_verwijder IS NULL
            AND res_ruimte_opstel_key IS NULL
            AND rrr.alg_ruimte_key = r.alg_ruimte_key
            AND r.alg_verdieping_key = v.alg_verdieping_key
            AND v.alg_gebouw_key = 1
            AND pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key
            AND ra.res_activiteit_key = rrr.res_activiteit_key
            AND ra.res_discipline_key NOT IN (321, 43)
            AND p.prs_perslid_key = pf.prs_perslid_key;

-- MNNL#40507: Onderstaande views zijn voor de inrichting van de Realtime Monitor

CREATE OR REPLACE VIEW MNNL_V_STAAFDIAGRAM_SLA
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   FCLT_YAS3_,
   FCLT_YAS4_,
   FCLT_SORT
)
AS
   SELECT "TO_CHAR(DAG,'DD-MM-YYYY')",
          "'Voorraad ITL'",
          "'Binnen SLA ITL'",
          "'Voorraad ONB'",
          "'Binnen SLA ONB'",
          dag
     FROM (SELECT TO_CHAR (dag, 'DD-MM-YYYY'),
                  mld_type mld_type,
                  mld_melding_key,
                  dag
             FROM (SELECT m.mld_melding_key,
                          mt.mld_type,
                          mld_melding_datum,
                          (SELECT MAX (fac_tracking_datum)
                             FROM fac_tracking
                            WHERE fac_srtnotificatie_key IN (38, 44)
                                  AND fac_tracking_refkey = m.mld_melding_key)
                             datum_afgemeld,
                          sla_eind
                     FROM mld_melding m,
                          (SELECT mld_melding_key,
                                  'Binnen SLA ONB' mld_type,
                                  mld.geteinddatum (mld_melding_key)
                                  + COALESCE (
                                       m.mld_melding_t_respijt.tijdsduur,
                                       0)
                                     sla_eind
                             FROM mld_melding m, mld_stdmelding std
                            WHERE m.mld_stdmelding_key =
                                     std.mld_stdmelding_key
                                  AND std.mld_ins_discipline_key IN
                                           ('986',
                                            '1002',
                                            '1008',
                                            '1018',
                                            '1026',
                                            '1028',
                                            '1030',
                                            '1040',
                                            '1062',
                                            '1063',
                                            '1081',
                                            '1032',
                                            '984')
                           UNION ALL
                           SELECT mld_melding_key,
                                  'Binnen SLA ITL' mld_type,
                                  mld.geteinddatum (mld_melding_key)
                                  + COALESCE (
                                       m.mld_melding_t_respijt.tijdsduur,
                                       0)
                                     sla_eind
                             FROM mld_melding m, mld_stdmelding std
                            WHERE m.mld_stdmelding_key =
                                     std.mld_stdmelding_key
                                  AND std.mld_ins_discipline_key IN
                                           ('982',
                                            '996',
                                            '998',
                                            '1000',
                                            '1016',
                                            '1024',
                                            '1038',
                                            '1046',
                                            '1061')) mt
                    WHERE m.mld_melding_key = mt.mld_melding_key) m,
                  (    SELECT TRUNC (SYSDATE) - (ROWNUM - 1) dag
                         FROM DUAL
                   CONNECT BY LEVEL <= 10) v
            WHERE (TRUNC (datum_afgemeld) > dag OR datum_afgemeld IS NULL)
                  AND TO_CHAR (dag, 'D') NOT IN ('1', '7')
                  AND TRUNC (mld_melding_datum) <= dag
                  AND sla_eind >= dag
                  AND sla_eind >= mld_melding_datum
           UNION ALL
           SELECT TO_CHAR (dag, 'DD-MM-YYYY'),
                  mld_type,
                  mld_melding_key,
                  dag
             FROM (SELECT m.mld_melding_key,
                          mt.mld_type,
                          mld_melding_datum,
                          (SELECT MAX (fac_tracking_datum)
                             FROM fac_tracking
                            WHERE fac_srtnotificatie_key IN (38, 44)
                                  AND fac_tracking_refkey = m.mld_melding_key)
                             datum_afgemeld
                     FROM mld_melding m,
                          (SELECT mld_melding_key, 'Voorraad ITL' mld_type
                             FROM mld_melding m, mld_stdmelding std
                            WHERE m.mld_stdmelding_key =
                                     std.mld_stdmelding_key
                                  AND std.mld_ins_discipline_key IN
                                           ('982',
                                            '996',
                                            '998',
                                            '1000',
                                            '1016',
                                            '1024',
                                            '1038',
                                            '1046',
                                            '1061')
                           UNION ALL
                           SELECT mld_melding_key, 'Voorraad ONB' mld_type
                             FROM mld_melding m, mld_stdmelding std
                            WHERE m.mld_stdmelding_key =
                                     std.mld_stdmelding_key
                                  AND std.mld_ins_discipline_key IN
                                           ('986',
                                            '1002',
                                            '1008',
                                            '1018',
                                            '1026',
                                            '1028',
                                            '1030',
                                            '1040',
                                            '1062',
                                            '1063',
                                            '1081',
                                            '1032',
                                            '984')) mt
                    WHERE m.mld_melding_key = mt.mld_melding_key) m,
                  (    SELECT TRUNC (SYSDATE) - (ROWNUM - 1) dag
                         FROM DUAL
                   CONNECT BY LEVEL <= 10) v
            WHERE (TRUNC (datum_afgemeld) > dag OR datum_afgemeld IS NULL)
                  AND TO_CHAR (dag, 'D') NOT IN ('1', '7')
                  AND TRUNC (mld_melding_datum) <= dag) PIVOT (COUNT(mld_melding_key)
                                                        FOR mld_type
                                                        IN ('Voorraad ITL',
                                                        'Binnen SLA ITL',
                                                        'Voorraad ONB',
                                                        'Binnen SLA ONB'));

CREATE OR REPLACE VIEW MNNL_V_INCIDENTEN_BINNEN_SLA
(
   FCLT_XAS_WEEKNUMMER,
   FCLT_YAS_PERCENTAGE
)
AS
SELECT sub.weeknummer weeknr,
            TRUNC (
               SUM (DECODE (sub.mtijd, 'ja', 1, 0)) / COUNT (sub.mldkey) * 100)
               Percentage
       FROM (SELECT m.mld_melding_key mldkey,
                  CASE WHEN
                  DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
           END mtijd,
                    TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IW-IY') weeknummer
               FROM mld_stdmelding mst,
                    mld_melding m,
                    mld_v_ins_discipline mv,
                    ins_srtdiscipline isr
              WHERE     mst.mld_ins_discipline_key = mv.ins_discipline_key
                    AND isr.ins_srtdiscipline_key = mv.ins_srtdiscipline_key
                    AND COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)) > SYSDATE - 70
                    AND isr.ins_srtdiscipline_key = 22             -- Incident
                    AND m.mld_stdmelding_key = mst.mld_stdmelding_key
                    AND m.mld_melding_status = 5) sub       -- status afgemeld
   GROUP BY sub.weeknummer
   ORDER BY weeknr;

CREATE OR REPLACE VIEW MNNL_V_INCIDENTEN_TABLE
(
GROEP,
NIEUW,
OPEN,
GESLOTEN,
SLA_PERCENTAGE
)
AS
SELECT 'Werkplek en Servicedesk' Naam,
       wsnew.nieuw,
       wsopen.open,
       wsges.totaal,
       wsges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1061', '1016', '1046')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       wsnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1061', '1016', '1046')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) wsopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1061', '1016', '1046')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) wsges
UNION
SELECT 'Wintel en Netwerk' Naam,
       wnnew.nieuw,
       wnopen.open,
       wnges.totaal,
       wnges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1024', '1000', '1038', '982')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       wnnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1024', '1000', '1038', '982')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) wnopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1024', '1000', '1038', '982')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) wnges
UNION
SELECT 'Oracle Platform' Naam,
       opnew.nieuw,
       opopen.open,
       opges.totaal,
       opges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('996', '998')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       opnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('996', '998')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) opopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('996', '998')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) opges;

CREATE OR REPLACE VIEW MNNL_V_MDT_INCIDENTEN_TABLE
(
GROEP,
NIEUW,
OPEN,
GESLOTEN,
SLA_PERCENTAGE
)
AS
SELECT 'MDTs Basisadministratie' Naam,
       mbanew.nieuw,
       mbaopen.open,
       mbages.totaal,
       mbages.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1030')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mbanew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1030')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mbaopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1030')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mbages
UNION
SELECT 'MDTs Pensioenadministratie' Naam,
       mpenew.nieuw,
       mpeopen.open,
       mpeges.totaal,
       mpeges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1008', '1002')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mpenew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1008', '1002')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mpeopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1008', '1002')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mpeges
UNION
SELECT 'MDTs Klantcontact en Portalen' Naam,
       mkpnew.nieuw,
       mkpopen.open,
       mkpges.totaal,
       mkpges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1081', '1040')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mkpnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1081', '1040')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mkpopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1081', '1040')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mkpges
UNION
SELECT 'MDTs Verzekeringen' Naam,
       mvznew.nieuw,
       mvzopen.open,
       mvzges.totaal,
       mvzges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1018')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mvznew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1018')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mvzopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1018')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mvzges
UNION
SELECT 'MDTs Procesbesturing en integratie' Naam,
       mpinew.nieuw,
       mpiopen.open,
       mpiges.totaal,
       mpiges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1028')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mpinew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1028')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mpiopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1028')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mpiges
UNION
SELECT 'MDTs Ontwikkelstraat' Naam,
       monnew.nieuw,
       monopen.open,
       monges.totaal,
       monges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1063')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       monnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1063')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) monopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1063')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) monges
UNION
SELECT 'MDTs Finance, Directie, Staven en IV' Naam,
       mfdnew.nieuw,
       mfdopen.open,
       mfdges.totaal,
       mfdges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1026', '986')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mfdnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1026', '986')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mfdopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1026', '986')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mfdges
UNION
SELECT 'MDTs Data en Reporting' Naam,
       mdrnew.nieuw,
       mdropen.open,
       mdrges.totaal,
       mdrges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1062')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       mdrnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1062')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) mdropen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1062')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) mdrges
UNION
SELECT 'Vermogensbeheer Informatie Management' Naam,
       vimnew.nieuw,
       vimopen.open,
       vimges.totaal,
       vimges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1032')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       vimnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('1032')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) vimopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('1032')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) vimges
UNION
SELECT 'Document Services' Naam,
       dosnew.nieuw,
       dosopen.open,
       dosges.totaal,
       dosges.percentage
  FROM (SELECT COUNT (m.mld_melding_key) nieuw
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('984')
               AND m.mld_melding_status NOT IN '5'
               AND TO_CHAR (m.mld_melding_datum, 'IYYY-IW') BETWEEN TO_CHAR (
                                                                    SYSDATE
                                                                    - 7,
                                                                    'IYYY-IW')
                                                             AND  TO_CHAR (
                                                                     SYSDATE,
                                                                     'IYYY-IW'))
       dosnew,
       (SELECT COUNT (m.mld_melding_key) open
          FROM mld_v_ins_discipline md,
               mld_melding m,
               mld_stdmelding ms
         WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
               AND m.mld_stdmelding_key = ms.mld_stdmelding_key
               AND md.ins_discipline_key IN ('984')
               AND m.mld_melding_status NOT IN ('1', '5', '6')) dosopen,
       (SELECT COUNT (sub.mldkey) totaal,
               TRUNC(  SUM (DECODE (sub.mtijd, 'ja', 1, 0))
                     / COUNT (sub.mldkey)
                     * 100)
                  percentage
          FROM (SELECT m.mld_melding_key mldkey,
                       CASE
             WHEN DECODE (
                     mld.getactualuitvoer (m.mld_melding_key).eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE)
                     + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                     0)
                  + DECODE (
                       mld.getactualuitvoer (m.mld_melding_key).eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), SYSDATE))
                        * 24)
                       + COALESCE (DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL), 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END mtijd
                  FROM mld_v_ins_discipline md,
                       mld_melding m,
                       mld_stdmelding ms
                 WHERE     md.ins_discipline_key = ms.mld_ins_discipline_key
                       AND m.mld_stdmelding_key = ms.mld_stdmelding_key
                       AND md.ins_discipline_key IN ('984')
                       AND m.mld_melding_status = 5
                       AND TO_CHAR (COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1)), 'IYYY-IW') BETWEEN TO_CHAR (
                                                                            SYSDATE
                                                                            - 7,
                                                                            'IYYY-IW')
                                                                     AND  TO_CHAR (
                                                                             SYSDATE,
                                                                             'IYYY-IW'))
               sub) dosges;

-- MNNL#40849: Thema voor graphics / reserveren flexplekken
CREATE OR REPLACE VIEW mnnl_v_thema_wp_sensor
(
   ins_deel_key,
   alg_ruimte_key,
   waarde
)
AS
   SELECT d.ins_deel_key,
          d.ins_alg_ruimte_key,
          DECODE (rrd.res_rsv_deel_key, NULL, '01', '02')
     FROM ins_deel d,
          res_deel rd,
          (SELECT res_rsv_deel_key, res_deel_key
             FROM res_v_aanwezigrsv_deel
            WHERE SYSDATE BETWEEN res_rsv_deel_van AND res_rsv_deel_tot) rrd
    WHERE d.ins_srtdeel_key = 281
          AND d.ins_deel_key = rd.res_ins_deel_key(+)
          AND rd.res_deel_key = rrd.res_deel_key(+);


-- MNNL#40905: CMDB-import (Applicatie/Server/Database)!
-- MNNL#41252: CMDB-import nu incl. onderdelen (parent-child)!
CREATE OR REPLACE PROCEDURE mnnl_import_cmdb (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (4000);              -- Input line
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   v_aanduiding                    VARCHAR2 (500);
   header_is_valid                 NUMBER := 0;
   v_count_tot                     NUMBER (10) := 0;
   v_count_import                  NUMBER (10) := 0;
   v_ongeldig                      NUMBER (1);
   -- De importvelden:
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   v_ins_srtgroep_omschrijving     VARCHAR2 (255);                      -- C60
   v_ins_srtdeel_code              VARCHAR2 (255);                      -- C10
   v_ins_srtdeel_omschrijving      VARCHAR2 (255);                     -- C100
   v_ins_deel_omschrijving         VARCHAR2 (255);                      -- C60
   v_ins_deel_opmerking            VARCHAR2 (2000);                   -- C2000
   v_prs_afdeling_naam             VARCHAR2 (255);                      -- C15
   v_ins_parent_omschrijving       VARCHAR2 (255);                      -- C60

   CURSOR c1
   IS
        SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM fac_imp_ins;
   COMMIT;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);
         fac.imp_getfield (v_newline, c_delim, v_prs_afdeling_naam);
         fac.imp_getfield (v_newline, c_delim, v_ins_parent_omschrijving);

         v_aanduiding :=
               '['
            || v_ins_discipline_omschrijving
            || '|'
            || v_ins_srtgroep_omschrijving
            || '|'
            || v_ins_srtdeel_code
            || '|'
            || v_ins_srtdeel_omschrijving
            || '|'
            || v_ins_deel_omschrijving
            || '|'
            || v_prs_afdeling_naam
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF UPPER (v_ins_discipline_omschrijving) = 'DISCIPLINEOMSCHRIJVING'
               AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEPSOORTOMSCHRIJVING'
               AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE'
               AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORTOMSCHRIJVING'
               AND UPPER (v_ins_deel_omschrijving) = 'OBJECTOMSCHRIJVING'
               AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING'
               AND UPPER (v_prs_afdeling_naam) = 'AFDELING'
               --AND UPPER (v_ins_parent_omschrijving) = 'PARENT'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;

            -- Controleer alle veldwaarden
            v_errormsg := 'Discipline ongeldig; ongedefinieerd of te lang';
            v_ins_discipline_omschrijving := TRIM (v_ins_discipline_omschrijving);

            IF v_ins_discipline_omschrijving IS NULL OR LENGTH (v_ins_discipline_omschrijving) > 30
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Groep ongeldig; ongedefinieerd of te lang';
            v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);

            IF v_ins_srtgroep_omschrijving IS NULL OR LENGTH (v_ins_srtgroep_omschrijving) > 60
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Soortcode ongeldig; ongedefinieerd of te lang';
            v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);

            IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 100
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Soort ongeldig; ongedefinieerd of te lang';
            v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);

            IF v_ins_srtdeel_omschrijving IS NULL OR LENGTH (v_ins_srtdeel_omschrijving) > 100
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Objectid ongeldig; ongedefinieerd of te lang';
            v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);

            IF v_ins_deel_omschrijving IS NULL OR LENGTH (v_ins_deel_omschrijving) > 60
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Objectopmerking te lang';
            v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);

            IF LENGTH (v_ins_deel_opmerking) > 2000
            THEN
               v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 2000);
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Opmerking wordt afgekapt!');
            END IF;

            --
            v_errormsg := 'Afdelingscode ongeldig; ongedefinieerd of te lang';
            v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);

            IF v_prs_afdeling_naam IS NULL OR LENGTH (v_prs_afdeling_naam) > 15
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Parentid te lang';
            v_ins_parent_omschrijving := TRIM (v_ins_parent_omschrijving);

            IF LENGTH (v_ins_parent_omschrijving) > 60
            THEN
               v_ins_parent_omschrijving := NULL;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Parentid wordt genegeerd!');
            END IF;

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errormsg := 'Fout wegschrijven importregel';

                  INSERT INTO fac_imp_ins (ins_discipline_omschrijving,
                                           ins_srtgroep_omschrijving,
                                           ins_srtdeel_code,
                                           ins_srtdeel_omschrijving,
                                           ins_deel_omschrijving,
                                           ins_deel_opmerking,
                                           prs_perslid_matchcode,
                                           prs_perslid_matchwaarde,
                                           ins_kenmerkwaarde1)
                      VALUES (v_ins_discipline_omschrijving,
                              v_ins_srtgroep_omschrijving,
                              v_ins_srtdeel_code,
                              v_ins_srtdeel_omschrijving,
                              v_ins_deel_omschrijving,
                              v_ins_deel_opmerking,
                              'A',
                              v_prs_afdeling_naam,
                              v_ins_parent_omschrijving);
                  COMMIT;

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

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (p_import_key, 'S', 'CMDB-objecten/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'CMDB-objecten/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '');
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces CMDB-objecten afgebroken!');
END mnnl_import_cmdb;
/

CREATE OR REPLACE PROCEDURE mnnl_update_cmdb (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count          NUMBER;

   -- SUBPROC
   PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                  MAX (ins_discipline_omschrijving) ins_discipline_omschrijving
             FROM fac_imp_ins
         GROUP BY UPPER (ins_discipline_omschrijving)
         ORDER BY 1;

      v_errormsg         VARCHAR2 (1000);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10) := 0;
      v_count_update     NUMBER (10) := 0;
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_tab_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;

            IF ccount = 0
            THEN
               INSERT INTO ins_tab_discipline (ins_discipline_module,
                                               ins_discipline_omschrijving,
                                               ins_discipline_min_level,
                                               ins_discipline_kpnverplicht)
                   VALUES ('INS',
                           rec.ins_discipline_omschrijving,
                           1,
                           0)
                RETURNING ins_discipline_key
                     INTO v_discipline_key;

               INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type)
                   VALUES (v_discipline_key, 0);
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Disciplines/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Disciplines/#toegevoegd: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_srtgroep (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                  UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
                  MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
                  MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
             FROM fac_imp_ins
         GROUP BY UPPER (ins_discipline_omschrijving),
                  UPPER (ins_srtgroep_omschrijving)
         ORDER BY 1, 2;

      v_errormsg         VARCHAR2 (1000);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10) := 0;
      v_count_update     NUMBER (10) := 0;
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen INS-discipline [' || rec.ins_discipline_omschrijving || ']';

            SELECT ins_discipline_key
              INTO v_discipline_key
              FROM ins_tab_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND ins_discipline_key IN (1101, 1102, 1103) -- Applicatie/Server/Database
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;

            v_errormsg := 'Fout toevoegen INS-groepsoort [' || rec.ins_srtgroep_omschrijving || ']';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_srtgroep
             WHERE ins_srtgroep_verwijder IS NULL
                   AND ins_discipline_key = v_discipline_key
                   AND UPPER (TRIM (ins_srtgroep_omschrijving)) = rec.ins_srtgroep_upper;

            IF ccount = 0
            THEN
               INSERT INTO ins_srtgroep (ins_discipline_key,
                                         ins_srtgroep_module,
                                         ins_srtgroep_omschrijving)
                   VALUES (v_discipline_key,
                           'INS',
                           rec.ins_srtgroep_omschrijving);
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Groepsoorten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Groepsoorten/#toegevoegd: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_srtdeel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                  UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
                  UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
                  MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
                  MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
                  MAX (ins_srtdeel_code) ins_srtdeel_code,
                  MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
             FROM fac_imp_ins
         GROUP BY UPPER (ins_discipline_omschrijving),
                  UPPER (ins_srtgroep_omschrijving),
                  UPPER (ins_srtdeel_omschrijving)
         ORDER BY 1, 2, 3;

      v_errormsg         VARCHAR2 (1000);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10) := 0;
      v_count_update     NUMBER (10) := 0;
      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen INS-discipline [' || rec.ins_discipline_omschrijving || ']';

            SELECT ins_discipline_key
              INTO v_discipline_key
              FROM ins_tab_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND ins_discipline_key IN (1101, 1102, 1103) -- Applicatie/Server/Database
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;

            v_errormsg := 'Fout bepalen INS-groepsoort [' || rec.ins_srtgroep_omschrijving || ']';

            SELECT ins_srtgroep_key
              INTO v_srtgroep_key
              FROM ins_srtgroep
             WHERE ins_srtgroep_verwijder IS NULL
                   AND ins_srtgroep_module = 'INS'
                   AND ins_discipline_key = v_discipline_key
                   AND UPPER (TRIM (ins_srtgroep_omschrijving)) = rec.ins_srtgroep_upper;

            v_errormsg := 'Fout toevoegen INS-objectsoort [' || rec.ins_srtdeel_omschrijving || ']';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_srtdeel
             WHERE ins_srtdeel_verwijder IS NULL
                   AND ins_srtdeel_module = 'INS'
                   AND ins_srtgroep_key = v_srtgroep_key
                   AND UPPER (TRIM (ins_srtdeel_omschrijving)) = rec.ins_srtdeel_upper;

            IF ccount = 0
            THEN
               -- Binding 8 betekent organisatiegebonden (Organisatie-vinkje)!
               INSERT INTO ins_srtdeel (ins_srtgroep_key,
                                        ins_srtdeel_module,
                                        ins_srtdeel_code,
                                        ins_srtdeel_omschrijving,
                                        ins_srtdeel_binding)
                   VALUES (v_srtgroep_key,
                           'INS',
                           UPPER (rec.ins_srtdeel_code),
                           rec.ins_srtdeel_omschrijving,
                           8);
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Objectsoorten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Objectsoorten/#toegevoegd: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_deel (p_import_key IN NUMBER)
   AS
      -- Parent-objecten eerst aanmaken/bijwerken, daarna child-objecten!
      CURSOR c1
      IS
           SELECT ins_discipline_omschrijving,
                  ins_srtgroep_omschrijving,
                  ins_srtdeel_code,
                  ins_srtdeel_omschrijving,
                  ins_deel_omschrijving,
                  ins_deel_opmerking,
                  prs_perslid_matchwaarde,
                  ins_kenmerkwaarde1 parent
             FROM fac_imp_ins
         ORDER BY DECODE (ins_kenmerkwaarde1, NULL, 1, 2), 1, 2, 4, 5;

      v_errormsg             VARCHAR2 (1000);
      oracle_err_num         NUMBER;
      oracle_err_mes         VARCHAR2 (200);
      v_aanduiding           VARCHAR2 (500) := '';
      v_count_tot            NUMBER (10) := 0;
      v_count_create         NUMBER (10) := 0;
      v_count_update         NUMBER (10) := 0;
      v_discipline_key       NUMBER (10);
      v_srtgroep_key         NUMBER (10);
      v_srtdeel_key          NUMBER (10);
      v_new_afdeling_key     NUMBER (10);  -- Volgens import op basis van naam
      v_cur_afdeling_key     NUMBER (10);  -- Zoals geregistreerd in FACILITOR
      v_parent_key           NUMBER (10);
      v_deel_key             NUMBER (10);
      ccount                 NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.ins_discipline_omschrijving
               || '|'
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_code
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '|'
               || rec.prs_perslid_matchwaarde
               || '] ';
            v_errormsg := 'Fout bepalen INS-discipline';

            SELECT ins_discipline_key
              INTO v_discipline_key
              FROM ins_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND ins_discipline_key IN (1101, 1102, 1103) -- Applicatie/Server/Database
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = UPPER (rec.ins_discipline_omschrijving);

            v_errormsg := 'Fout bepalen INS-groepsoort';

            SELECT ins_srtgroep_key
              INTO v_srtgroep_key
              FROM ins_srtgroep
             WHERE ins_srtgroep_verwijder IS NULL
                   AND ins_srtgroep_module = 'INS'
                   AND ins_discipline_key = v_discipline_key
                   AND UPPER (TRIM (ins_srtgroep_omschrijving)) = UPPER (rec.ins_srtgroep_omschrijving);

            v_errormsg := 'Fout bepalen INS-objectsoort';

            SELECT ins_srtdeel_key
              INTO v_srtdeel_key
              FROM ins_srtdeel
             WHERE ins_srtdeel_verwijder IS NULL
                   AND ins_srtdeel_module = 'INS'
                   AND ins_srtgroep_key = v_srtgroep_key
                   AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (rec.ins_srtdeel_omschrijving);

            v_errormsg := 'Fout bepalen afdeling [' || rec.prs_perslid_matchwaarde || ']';

            SELECT prs_afdeling_key
              INTO v_new_afdeling_key
              FROM prs_afdeling
             WHERE prs_afdeling_verwijder IS NULL
                   AND prs_afdeling_upper = UPPER (rec.prs_perslid_matchwaarde);

            v_errormsg := 'Fout bepalen parent';

            IF rec.parent IS NOT NULL
            THEN
               SELECT MAX (ins_deel_key)
                 INTO v_parent_key
                 FROM ins_v_aanwezigdeel
                WHERE ins_discipline_key IN (1101, 1102, 1103) -- Applicatie/Server/Database
                       AND ins_deel_parent_key IS NULL -- Parent niet zelf child
                       AND TRIM (ins_deel_upper) = UPPER (rec.parent);

                IF v_parent_key IS NULL
                THEN
                   fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
                END IF;
            ELSE
               v_parent_key := NULL;
            END IF;

            -- Afdelingsgebonden objecten hebben een unieke ID!
            v_errormsg := 'Fout (uniek) bepalen A-object';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_v_aanwezigdeel
             WHERE ins_deel_module = 'INS'
                   AND ins_srtdeel_key = v_srtdeel_key
                   AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);

            IF ccount = 0           -- Object bestaat nog niet, dus toevoegen!
            THEN
               v_errormsg := 'Fout toevoegen INS-object';

               INSERT INTO ins_deel (ins_discipline_key,
                                     ins_srtdeel_key,
                                     ins_deel_module,
                                     ins_deel_omschrijving,
                                     ins_deel_opmerking,
                                     ins_alg_ruimte_key,
                                     ins_alg_ruimte_type,
                                     ins_alg_locatie_key,
                                     ins_deel_parent_key)
                   VALUES (v_discipline_key,
                           v_srtdeel_key,
                           'INS',
                           rec.ins_deel_omschrijving,
                           rec.ins_deel_opmerking,
                           v_new_afdeling_key,
                           'A',
                           NULL,
                           v_parent_key)
                RETURNING ins_deel_key
                     INTO v_deel_key;
               COMMIT;

               v_count_create := v_count_create + 1;
            ELSE                                      -- Object bestaat reeds!
               v_errormsg := 'Fout bijwerken INS-object';

               SELECT d.ins_deel_key, ins_alg_ruimte_key
                 INTO v_deel_key, v_cur_afdeling_key
                 FROM ins_deel d
                WHERE ins_deel_verwijder IS NULL
                      AND ins_deel_module = 'INS'
                      AND ins_srtdeel_key = v_srtdeel_key
                      AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);

               UPDATE ins_deel
                  SET ins_alg_ruimte_key = v_new_afdeling_key,
                      ins_alg_ruimte_type = 'A',
                      ins_deel_opmerking = rec.ins_deel_opmerking,
                      ins_deel_vervaldatum = NULL,
                      ins_alg_locatie_key = NULL,
                      ins_deel_parent_key = v_parent_key,
                      ins_alg_ruimte_key_org = NULL,
                      ins_alg_ruimte_type_org = NULL
                WHERE ins_deel_key = v_deel_key;
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#toegevoegd: ' || TO_CHAR (v_count_create), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#bijgewerkt: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE del_deel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT id.ins_discipline_omschrijving,
                  sg.ins_srtgroep_omschrijving,
                  sd.ins_srtdeel_code,
                  sd.ins_srtdeel_omschrijving,
                  d.ins_deel_omschrijving,
                  d.ins_deel_key
             FROM ins_v_aanwezigdeel d,
                  ins_v_aanwezigsrtdeel sd,
                  ins_v_aanwezigsrtgroep sg,
                  ins_discipline id
            WHERE d.ins_deel_vervaldatum IS NULL -- Vervaldatum nog niet gezet!
                  AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                  AND sg.ins_discipline_key = id.ins_discipline_key
                  AND id.ins_discipline_key IN (1101, 1102, 1103) -- Applicatie/Server/Database
                  AND d.ins_deel_omschrijving NOT LIKE '%NIET GEBRUIKEN%'
                  AND NOT EXISTS
                        (SELECT 1
                           FROM fac_imp_ins ic
                          WHERE UPPER (ic.ins_deel_omschrijving) = d.ins_deel_upper
                                AND UPPER (ic.ins_srtdeel_omschrijving) = sd.ins_srtdeel_upper
                                AND UPPER (ic.ins_srtgroep_omschrijving) = sg.ins_srtgroep_upper
                                AND UPPER (ic.ins_discipline_omschrijving) = UPPER (id.ins_discipline_omschrijving))
         ORDER BY 1, 2, 4, 5;

      v_errormsg       VARCHAR2 (1000);
      oracle_err_num   NUMBER;
      oracle_err_mes   VARCHAR2 (200);
      v_aanduiding     VARCHAR2 (500):= '';
      v_count_delete   NUMBER (10) := 0;
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.ins_discipline_omschrijving
               || '|'
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_code
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '] ';
            v_errormsg := 'Fout verwijderen INS-object';

            --DELETE FROM ins_deel
            --      WHERE ins_deel_key = rec.ins_deel_key;
            UPDATE ins_deel
               SET ins_deel_vervaldatum = SYSDATE
             WHERE ins_deel_key = rec.ins_deel_key;
            COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#verwijderd: ' || TO_CHAR (v_count_delete), '');
      COMMIT;
   END;
-- MAIN
BEGIN
   -- Generieke update.
   SELECT COUNT ( * ) INTO v_count FROM fac_imp_ins;

   IF v_count = 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Niets te importeren!', '');
      RETURN;
   END IF;

   --add_insdiscipline (p_import_key);
   add_srtgroep (p_import_key);
   add_srtdeel (p_import_key);
   add_deel (p_import_key);
   del_deel (p_import_key);
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Importproces CMDB-objecten afgebroken!');
END mnnl_update_cmdb;
/

CREATE OR REPLACE VIEW mnnl_v_rap_eua
(
   disciplineomschrijving,
   groepsoortomschrijving,
   objectsoortcode,
   objectsoortomschrijving,
   objectomschrijving,
   objectopmerking,
   afdeling,
   persoon,
   locatiecode,
   gebouwcode,
   verdiepingvolgnr,
   ruimtenr,
   status,
   redenbijstatus,                                  -- Afhankelijk van status!
   serienummer,
   model,
   aanschafdatum,
   ordernummer,
   opmerkingen,
   vervaldatum,
   aanschafwaarde,
   organisatie
)
AS
   SELECT  x.ins_discipline_omschrijving,
           x.ins_srtgroep_omschrijving,
           x.ins_srtdeel_code,
           x.ins_srtdeel_omschrijving,
           x.ins_deel_omschrijving,
           x.ins_deel_opmerking,
           x.prs_afdeling_naam,
           x.prs_perslid_oslogin,
           x.alg_locatie_code,
           x.alg_gebouw_code,
           x.alg_verdieping_volgnr,
           x.alg_ruimte_nr,
           (SELECT fac_usrdata_code
              FROM fac_v_aanwezigusrdata
             WHERE TO_CHAR (fac_usrdata_key) = sts.ins_kenmerkdeel_waarde), -- Status
           (SELECT fac_usrdata_code
              FROM fac_v_aanwezigusrdata
             WHERE TO_CHAR (fac_usrdata_key) = rbs.ins_kenmerkdeel_waarde), -- Reden bij status
           snr.ins_kenmerkdeel_waarde,                          -- Serienummer
           mdl.ins_kenmerkdeel_waarde,                                -- Model
           asd.ins_kenmerkdeel_waarde,                        -- Aanschafdatum
           onr.ins_kenmerkdeel_waarde,                          -- Ordernummer
           opm.ins_kenmerkdeel_waarde,                          -- Opmerkingen
           x.ins_deel_vervaldatum,
           asw.ins_kenmerkdeel_waarde,                       -- Aanschafwaarde
           x.organisatie
      FROM (SELECT d.ins_deel_key,
                   td.ins_discipline_omschrijving,
                   sg.ins_srtgroep_omschrijving,
                   sd.ins_srtdeel_code,
                   sd.ins_srtdeel_omschrijving,
                   d.ins_deel_omschrijving,
                   d.ins_deel_opmerking,
                   a.prs_afdeling_naam,
                   NULL prs_perslid_oslogin,
                   NULL alg_locatie_code,
                   NULL alg_gebouw_code,
                   NULL alg_verdieping_volgnr,
                   NULL alg_ruimte_nr,
                   d.ins_deel_vervaldatum,
                   NULL organisatie
              FROM ins_v_aanwezigdeel  d,
                   ins_srtdeel         sd,
                   ins_srtgroep        sg,
                   ins_tab_discipline  td,
                   prs_afdeling        a
             WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
                   AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                   AND sg.ins_discipline_key = td.ins_discipline_key
                   AND td.ins_discipline_key IN (1104, 1741) -- EndUser Asset, uitleen Assets
                   AND d.ins_alg_ruimte_type = 'A'
                   AND d.ins_alg_ruimte_key = a.prs_afdeling_key
            UNION ALL
            SELECT d.ins_deel_key,
                   td.ins_discipline_omschrijving,
                   sg.ins_srtgroep_omschrijving,
                   sd.ins_srtdeel_code,
                   sd.ins_srtdeel_omschrijving,
                   d.ins_deel_omschrijving,
                   d.ins_deel_opmerking,
                   NULL prs_afdeling_naam,
                   p.prs_perslid_oslogin,
                   NULL alg_locatie_code,
                   NULL alg_gebouw_code,
                   NULL alg_verdieping_volgnr,
                   NULL alg_ruimte_nr,
                   d.ins_deel_vervaldatum,
                   a.prs_afdeling_naam organisatie
              FROM ins_v_aanwezigdeel  d,
                   ins_srtdeel         sd,
                   ins_srtgroep        sg,
                   ins_tab_discipline  td,
                   prs_perslid         p,
                   prs_afdeling        a
             WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
                   AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                   AND sg.ins_discipline_key = td.ins_discipline_key
                   AND td.ins_discipline_key IN (1104, 1741) -- EndUser Asset, uitleen Assets
                   AND d.ins_alg_ruimte_type = 'P'
                   AND d.ins_alg_ruimte_key = p.prs_perslid_key
                   AND a.prs_afdeling_key = p.prs_afdeling_key
            UNION ALL
            SELECT d.ins_deel_key,
                   td.ins_discipline_omschrijving,
                   sg.ins_srtgroep_omschrijving,
                   sd.ins_srtdeel_code,
                   sd.ins_srtdeel_omschrijving,
                   d.ins_deel_omschrijving,
                   d.ins_deel_opmerking,
                   NULL prs_afdeling_naam,
                   NULL prs_perslid_oslogin,
                   l.alg_locatie_code,
                   g.alg_gebouw_code,
                   v.alg_verdieping_volgnr,
                   r.alg_ruimte_nr,
                   d.ins_deel_vervaldatum,
                   NULL  organisatie
              FROM ins_v_aanwezigdeel  d,
                   ins_srtdeel         sd,
                   ins_srtgroep        sg,
                   ins_tab_discipline  td,
                   alg_ruimte          r,
                   alg_verdieping      v,
                   alg_gebouw          g,
                   alg_locatie         l
             WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
                   AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                   AND sg.ins_discipline_key = td.ins_discipline_key
                   AND td.ins_discipline_key IN (1104, 1741) -- EndUser Asset, uitleen Assets
                   AND d.ins_alg_ruimte_type = 'R'
                   AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                   AND r.alg_verdieping_key = v.alg_verdieping_key
                   AND v.alg_gebouw_key = g.alg_gebouw_key
                   AND g.alg_locatie_key = l.alg_locatie_key) x
           LEFT JOIN ins_v_aanwezigkenmerkdeel sts
               ON     x.ins_deel_key = sts.ins_deel_key
                  AND sts.ins_kenmerk_key = 21                       -- Status
           LEFT JOIN ins_v_aanwezigkenmerkdeel rbs
               ON     x.ins_deel_key = rbs.ins_deel_key
                  AND rbs.ins_kenmerk_key = 81             -- Reden bij status
           LEFT JOIN ins_v_aanwezigkenmerkdeel snr
               ON     x.ins_deel_key = snr.ins_deel_key
                  AND snr.ins_kenmerk_key = 22                  -- Serienummer
           LEFT JOIN ins_v_aanwezigkenmerkdeel mdl
               ON     x.ins_deel_key = mdl.ins_deel_key
                  AND mdl.ins_kenmerk_key = 23                        -- Model
           LEFT JOIN ins_v_aanwezigkenmerkdeel asd
               ON     x.ins_deel_key = asd.ins_deel_key
                  AND asd.ins_kenmerk_key = 24                -- Aanschafdatum
           LEFT JOIN ins_v_aanwezigkenmerkdeel onr
               ON     x.ins_deel_key = onr.ins_deel_key
                  AND onr.ins_kenmerk_key = 25                  -- Ordernummer
           LEFT JOIN ins_v_aanwezigkenmerkdeel opm
               ON     x.ins_deel_key = opm.ins_deel_key
                  AND opm.ins_kenmerk_key = 27                  -- Opmerkingen
           LEFT JOIN ins_v_aanwezigkenmerkdeel asw
               ON     x.ins_deel_key = asw.ins_deel_key
                  AND asw.ins_kenmerk_key = 101 -- MNNL#53670: Aanschafwaarde
;
;

-- MNNL#40905: EUA-import (EndUser Asset)!
CREATE OR REPLACE PROCEDURE mnnl_import_eua (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (4000);              -- Input line
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   v_aanduiding                    VARCHAR2 (500);
   header_is_valid                 NUMBER := 0;
   v_count_tot                     NUMBER (10) := 0;
   v_count_import                  NUMBER (10) := 0;
   v_ongeldig                      NUMBER (1);
   -- De importvelden:
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   v_ins_srtgroep_omschrijving     VARCHAR2 (255);                      -- C60
   v_ins_srtdeel_code              VARCHAR2 (255);                      -- C10
   v_ins_srtdeel_omschrijving      VARCHAR2 (255);                     -- C100
   v_ins_deel_omschrijving         VARCHAR2 (255);                      -- C60
   v_ins_deel_opmerking            VARCHAR2 (2000);                   -- C2000
   v_prs_afdeling_naam             VARCHAR2 (255);                      -- C15
   v_prs_perslid_oslogin           VARCHAR2 (255);                      -- C30
   v_alg_locatie_code              VARCHAR2 (255);                      -- C10
   v_alg_gebouw_code               VARCHAR2 (255);                      -- C12
   v_alg_verdieping_volgnr         VARCHAR2 (255);                       -- N3
   v_alg_verdieping_volgnr_n       NUMBER (3);                           -- N3
   v_alg_ruimte_nr                 VARCHAR2 (255);                      -- C10
   v_sts                           VARCHAR2 (255);                      -- C60
   v_rbs                           VARCHAR2 (255);                      -- C60
   v_snr                           VARCHAR2 (255);                      -- C40
   v_mdl                           VARCHAR2 (255);                      -- C50
   v_asd                           VARCHAR2 (255);                      -- C10
   v_onr                           VARCHAR2 (255);                      -- C50
   v_opm                           VARCHAR2 (2000);                   -- C255!
   v_ins_deel_vervaldatum          VARCHAR2 (255);                      -- D10
   v_asw                           VARCHAR2 (255);                       -- Nx

   CURSOR c1
   IS
        SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM fac_imp_ins;
   COMMIT;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);
         fac.imp_getfield (v_newline, c_delim, v_prs_afdeling_naam);
         fac.imp_getfield (v_newline, c_delim, v_prs_perslid_oslogin);
         fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
         fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
         fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_volgnr);
         fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
         fac.imp_getfield (v_newline, c_delim, v_sts);
         fac.imp_getfield (v_newline, c_delim, v_rbs);
         fac.imp_getfield (v_newline, c_delim, v_snr);
         fac.imp_getfield (v_newline, c_delim, v_mdl);
         fac.imp_getfield (v_newline, c_delim, v_asd);
         fac.imp_getfield (v_newline, c_delim, v_onr);
         fac.imp_getfield (v_newline, c_delim, v_opm);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_vervaldatum);
         fac.imp_getfield (v_newline, c_delim, v_asw);

         v_aanduiding :=
               '['
            || v_ins_discipline_omschrijving
            || '|'
            || v_ins_srtgroep_omschrijving
            || '|'
            || v_ins_srtdeel_code
            || '|'
            || v_ins_srtdeel_omschrijving
            || '|'
            || v_ins_deel_omschrijving
            || '|'
            || COALESCE (v_prs_afdeling_naam, v_prs_perslid_oslogin, v_alg_locatie_code || '-' || v_alg_gebouw_code || '-' || v_alg_verdieping_volgnr ||  '-' || v_alg_ruimte_nr)
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF UPPER (v_ins_discipline_omschrijving) = 'DISCIPLINEOMSCHRIJVING'
               AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEPSOORTOMSCHRIJVING'
               AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE'
               AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORTOMSCHRIJVING'
               AND UPPER (v_ins_deel_omschrijving) = 'OBJECTOMSCHRIJVING'
               AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING'
               AND UPPER (v_prs_afdeling_naam) = 'AFDELING'
               AND UPPER (v_prs_perslid_oslogin) = 'PERSOON'
               AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
               AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
               AND UPPER (v_alg_verdieping_volgnr) = 'VERDIEPINGVOLGNR'
               AND UPPER (v_alg_ruimte_nr) = 'RUIMTENR'
               AND UPPER (v_sts) = 'STATUS'
               AND UPPER (v_rbs) = 'REDENBIJSTATUS'
               AND UPPER (v_snr) = 'SERIENUMMER'
               AND UPPER (v_mdl) = 'MODEL'
               AND UPPER (v_asd) = 'AANSCHAFDATUM'
               AND UPPER (v_onr) = 'ORDERNUMMER'
               AND UPPER (v_opm) = 'OPMERKINGEN'
               AND UPPER (v_ins_deel_vervaldatum) = 'VERVALDATUM'
               AND UPPER (v_asw) = 'AANSCHAFWAARDE'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;

            -- Controleer alle veldwaarden
            v_errormsg := 'Discipline ongeldig; ongedefinieerd of te lang';
            v_ins_discipline_omschrijving := TRIM (v_ins_discipline_omschrijving);

            IF v_ins_discipline_omschrijving IS NULL OR LENGTH (v_ins_discipline_omschrijving) > 30
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Groep ongeldig; ongedefinieerd of te lang';
            v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);

            IF v_ins_srtgroep_omschrijving IS NULL OR LENGTH (v_ins_srtgroep_omschrijving) > 60
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Soortcode ongeldig; ongedefinieerd of te lang';
            v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);

            IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 100
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Soort ongeldig; ongedefinieerd of te lang';
            v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);

            IF v_ins_srtdeel_omschrijving IS NULL OR LENGTH (v_ins_srtdeel_omschrijving) > 100
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Objectid ongeldig; ongedefinieerd of te lang';
            v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);

            IF v_ins_deel_omschrijving IS NULL OR LENGTH (v_ins_deel_omschrijving) > 60
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Objectopmerking te lang';
            v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);

            IF LENGTH (v_ins_deel_opmerking) > 2000
            THEN
               v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 255);
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Opmerking wordt afgekapt!');
            END IF;

            --
            v_errormsg := 'Afdelingscode te lang';
            v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);

            IF LENGTH (v_prs_afdeling_naam) > 15
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Loginnaam te lang';
            v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);

            IF LENGTH (v_prs_perslid_oslogin) > 30
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Locatiecode te lang';
            v_alg_locatie_code := TRIM (v_alg_locatie_code);

            IF LENGTH (v_alg_locatie_code) > 10
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Gebouwcode te lang';
            v_alg_gebouw_code := TRIM (v_alg_gebouw_code);

            IF LENGTH (v_alg_gebouw_code) > 12
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Verdiepingvolgnummer ongeldig; niet numeriek';
            v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
            v_alg_verdieping_volgnr_n := fac.safe_to_number (v_alg_verdieping_volgnr);

            IF v_alg_verdieping_volgnr IS NOT NULL AND v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Ruimtenummer te lang';
            v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);

            IF LENGTH (v_alg_ruimte_nr) > 10
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_sts := TRIM (v_sts);
            v_rbs := TRIM (v_rbs);
            v_snr := TRIM (v_snr);
            v_mdl := TRIM (v_mdl);
            v_asd := TRIM (v_asd);
            v_onr := TRIM (v_onr);
            v_opm := TRIM (v_opm);

            --
            v_errormsg := 'Vervaldatum ongeldig; geen datum';
            v_ins_deel_vervaldatum := TRIM (v_ins_deel_vervaldatum);

            IF v_ins_deel_vervaldatum IS NOT NULL AND fac.safe_to_date (v_ins_deel_vervaldatum, 'dd-mm-yyyy') IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
            END IF;

            --
            v_asw := TRIM (v_asw);

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errormsg := 'Fout wegschrijven importregel';

                  INSERT INTO fac_imp_ins (ins_discipline_omschrijving,
                                           ins_srtgroep_omschrijving,
                                           ins_srtdeel_code,
                                           ins_srtdeel_omschrijving,
                                           ins_deel_omschrijving,
                                           ins_deel_opmerking,
                                           alg_locatie_code,
                                           alg_gebouw_code,
                                           alg_verdieping_volgnr,
                                           alg_ruimte_nr,
                                           prs_perslid_matchcode,
                                           prs_perslid_matchwaarde,
                                           res_discipline_kostensoort,
                                           ins_kenmerkwaarde1,
                                           ins_kenmerkwaarde2,
                                           ins_kenmerkwaarde3,
                                           ins_kenmerkwaarde4,
                                           ins_kenmerkwaarde5,
                                           ins_kenmerkwaarde6,
                                           ins_kenmerkwaarde7,
                                           ins_kenmerkwaarde8)
                      VALUES (v_ins_discipline_omschrijving,
                              v_ins_srtgroep_omschrijving,
                              v_ins_srtdeel_code,
                              v_ins_srtdeel_omschrijving,
                              v_ins_deel_omschrijving,
                              v_ins_deel_opmerking,
                              v_alg_locatie_code,
                              v_alg_gebouw_code,
                              v_alg_verdieping_volgnr_n,
                              v_alg_ruimte_nr,
                              DECODE (v_prs_afdeling_naam, NULL, DECODE (v_prs_perslid_oslogin, NULL, NULL, 'P'), 'A'),
                              COALESCE (v_prs_afdeling_naam, v_prs_perslid_oslogin),
                              v_ins_deel_vervaldatum,
                              v_sts,
                              v_rbs,
                              v_snr,
                              v_mdl,
                              v_asd,
                              v_onr,
                              v_opm,
                              v_asw);
                  COMMIT;

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

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
   ELSE
      fac.imp_writelog (p_import_key, 'S', 'EUA-objecten/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'EUA-objecten/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '');
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces EUA-objecten afgebroken!');
END mnnl_import_eua;
/

CREATE OR REPLACE PROCEDURE mnnl_update_eua (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (500);
   v_count          NUMBER;

   -- SUBPROC
   PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                  MAX (ins_discipline_omschrijving) ins_discipline_omschrijving
             FROM fac_imp_ins
         GROUP BY UPPER (ins_discipline_omschrijving)
         ORDER BY 1;

      v_errormsg         VARCHAR2 (1000);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10) := 0;
      v_count_update     NUMBER (10) := 0;
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_tab_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;

            IF ccount = 0
            THEN
               INSERT INTO ins_tab_discipline (ins_discipline_module,
                                               ins_discipline_omschrijving,
                                               ins_discipline_min_level,
                                               ins_discipline_kpnverplicht)
                   VALUES ('INS',
                           rec.ins_discipline_omschrijving,
                           1,
                           0)
                RETURNING ins_discipline_key
                     INTO v_discipline_key;

               INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type)
                   VALUES (v_discipline_key, 0);
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Disciplines/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Disciplines/#toegevoegd: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_srtgroep (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                  UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
                  MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
                  MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
             FROM fac_imp_ins
         GROUP BY UPPER (ins_discipline_omschrijving),
                  UPPER (ins_srtgroep_omschrijving)
         ORDER BY 1, 2;

      v_errormsg         VARCHAR2 (1000);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10) := 0;
      v_count_update     NUMBER (10) := 0;
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen INS-discipline [' || rec.ins_discipline_omschrijving || ']';

            SELECT ins_discipline_key
              INTO v_discipline_key
              FROM ins_tab_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;

            v_errormsg := 'Fout toevoegen INS-groepsoort [' || rec.ins_srtgroep_omschrijving || ']';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_srtgroep
             WHERE ins_srtgroep_verwijder IS NULL
                   AND ins_discipline_key = v_discipline_key
                   AND UPPER (TRIM (ins_srtgroep_omschrijving)) = rec.ins_srtgroep_upper;

            IF ccount = 0
            THEN
               INSERT INTO ins_srtgroep (ins_discipline_key,
                                         ins_srtgroep_module,
                                         ins_srtgroep_omschrijving)
                   VALUES (v_discipline_key,
                           'INS',
                           rec.ins_srtgroep_omschrijving);
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Groepsoorten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Groepsoorten/#toegevoegd: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_srtdeel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                  UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
                  UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
                  MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
                  MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
                  MAX (ins_srtdeel_code) ins_srtdeel_code,
                  MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
             FROM fac_imp_ins
         GROUP BY UPPER (ins_discipline_omschrijving),
                  UPPER (ins_srtgroep_omschrijving),
                  UPPER (ins_srtdeel_omschrijving)
         ORDER BY 1, 2, 3;

      v_errormsg         VARCHAR2 (1000);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10) := 0;
      v_count_update     NUMBER (10) := 0;
      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen INS-discipline [' || rec.ins_discipline_omschrijving || ']';

            SELECT ins_discipline_key
              INTO v_discipline_key
              FROM ins_tab_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;

            v_errormsg := 'Fout bepalen INS-groepsoort [' || rec.ins_srtgroep_omschrijving || ']';

            SELECT ins_srtgroep_key
              INTO v_srtgroep_key
              FROM ins_srtgroep
             WHERE ins_srtgroep_verwijder IS NULL
                   AND ins_srtgroep_module = 'INS'
                   AND ins_discipline_key = v_discipline_key
                   AND UPPER (TRIM (ins_srtgroep_omschrijving)) = rec.ins_srtgroep_upper;

            v_errormsg := 'Fout toevoegen INS-objectsoort [' || rec.ins_srtdeel_omschrijving || ']';

            SELECT COUNT ( * )
              INTO ccount
              FROM ins_srtdeel
             WHERE ins_srtdeel_verwijder IS NULL
                   AND ins_srtdeel_module = 'INS'
                   AND ins_srtgroep_key = v_srtgroep_key
                   AND UPPER (TRIM (ins_srtdeel_omschrijving)) = rec.ins_srtdeel_upper;

            IF ccount = 0
            THEN
               -- Binding 25 betekent ruimte-, organisatie- of persoonsgebonden!
               INSERT INTO ins_srtdeel (ins_srtgroep_key,
                                        ins_srtdeel_module,
                                        ins_srtdeel_code,
                                        ins_srtdeel_omschrijving,
                                        ins_srtdeel_binding)
                   VALUES (v_srtgroep_key,
                           'INS',
                           UPPER (rec.ins_srtdeel_code),
                           rec.ins_srtdeel_omschrijving,
                           25);
               COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Objectsoorten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Objectsoorten/#toegevoegd: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE upsert_inskenmerk (p_deel_key         IN NUMBER,
                                p_srtkenmerk_key   IN NUMBER,
                                p_waarde           IN VARCHAR2)
   AS
      v_kenmerk_key       NUMBER;
      v_srtkenmerk_type   VARCHAR2 (1);
      ccount              NUMBER;
      v_waarde            VARCHAR2 (255);
      v_objectnaam        VARCHAR2 (30);
      v_kolomnaam         VARCHAR2 (30);
      v_kolomtxt          VARCHAR2 (30);
      sql_stmt            VARCHAR2 (1000);
      v_kenmerkdeel_key   NUMBER;
      l_cursor_1          INTEGER;
      l_rowsprocessed     NUMBER DEFAULT 0;
   BEGIN
      IF p_srtkenmerk_key IS NOT NULL
      THEN
         v_errormsg := 'Fout bepalen kenmerk van soort [' || p_srtkenmerk_key || ']';

         SELECT k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
           INTO v_kenmerk_key, v_srtkenmerk_type
           FROM ins_deel d, ins_srtdeel sd, ins_srtgroep sg, ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk
          WHERE d.ins_deel_key = p_deel_key
                AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                AND k.ins_srtkenmerk_key = p_srtkenmerk_key
                AND ((k.ins_srtinstallatie_key = sd.ins_srtdeel_key AND k.ins_kenmerk_niveau = 'S')
                     OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key AND k.ins_kenmerk_niveau = 'G')
                     OR (k.ins_srtinstallatie_key = sg.ins_discipline_key AND k.ins_kenmerk_niveau = 'D'))
                AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;

         IF p_waarde IS NOT NULL
         THEN
            IF v_srtkenmerk_type IN ('R', 'S')
            THEN
               v_errormsg := 'Fout bepalen eigen tabel';

               SELECT COUNT ( * )
                 INTO ccount
                 FROM ins_srtkenmerk sk, fac_kenmerkdomein d
                WHERE sk.ins_srtkenmerk_key = p_srtkenmerk_key
                      AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
                      AND d.fac_usrtab_key IS NOT NULL;

               v_errormsg := 'Fout bepalen nieuwe waarde [' || p_waarde || ']';

               IF ccount = 1
               THEN                                             -- Eigen tabel
                  SELECT TO_CHAR (ud.fac_usrdata_key)
                    INTO v_waarde
                    FROM ins_srtkenmerk sk, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud
                   WHERE sk.ins_srtkenmerk_key = p_srtkenmerk_key
                         AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
                         AND d.fac_usrtab_key = ud.fac_usrtab_key
                         AND UPPER (TRIM (ud.fac_usrdata_code)) = UPPER (p_waarde); -- Match op code in Eigen Tabel!
               ELSE                                    -- FACILITOR view/tabel
                  SELECT d.fac_kenmerkdomein_objectnaam, d.fac_kenmerkdomein_kolomnaam, d.fac_kenmerkdomein_kolomtxt
                    INTO v_objectnaam, v_kolomnaam, v_kolomtxt
                    FROM ins_srtkenmerk sk, fac_kenmerkdomein d
                   WHERE sk.ins_srtkenmerk_key = p_srtkenmerk_key
                         AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
                         AND d.fac_usrtab_key IS NULL;

                  sql_stmt :=
                        'SELECT MAX ('
                     || v_kolomnaam
                     || ') FROM '
                     || v_objectnaam
                     || ' WHERE UPPER (TRIM ('
                     || v_kolomtxt
                     || ')) = UPPER (:pwaarde)';
                  l_cursor_1 := DBMS_SQL.open_cursor;
                  DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
                  DBMS_SQL.BIND_VARIABLE (l_cursor_1, ':pwaarde', p_waarde);
                  DBMS_SQL.define_column (l_cursor_1, 1, v_waarde, 255);
                  l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
                  DBMS_SQL.COLUMN_VALUE (l_cursor_1, 1, v_waarde);
                  DBMS_SQL.close_cursor (l_cursor_1);
               END IF;
            ELSE           -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
               v_waarde := p_waarde;
            END IF;

            v_errormsg := 'Fout bepalen huidige waarde';

            SELECT COUNT ( * ), MAX (ins_kenmerkdeel_key)
              INTO ccount, v_kenmerkdeel_key
              FROM ins_v_aanwezigkenmerkdeel
             WHERE ins_deel_key = p_deel_key
                   AND ins_kenmerk_key = v_kenmerk_key;

            IF ccount = 0
            THEN
               v_errormsg := 'Fout toevoegen waarde [' || v_waarde || ']';

               INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
                   VALUES (p_deel_key, v_kenmerk_key, v_waarde);
            ELSE
               v_errormsg := 'Fout bijwerken waarde [' || v_waarde || ']';

               UPDATE ins_kenmerkdeel
                  SET ins_kenmerkdeel_waarde = v_waarde
                WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
            END IF;
         ELSE
            -- Verwijder kenmerken die als bestaan maar met de nieuwe import leeg zijn.
            DELETE ins_kenmerkdeel
             WHERE ins_deel_key = p_deel_key
                   AND ins_kenmerk_key = v_kenmerk_key;
         END IF;
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         oracle_err_num := SQLCODE;
         oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
         v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
         fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'upsert_inskenmerk');
         COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_deel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT ins_discipline_omschrijving,
                  ins_srtgroep_omschrijving,
                  ins_srtdeel_code,
                  ins_srtdeel_omschrijving,
                  ins_deel_omschrijving,
                  ins_deel_opmerking,
                  alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr,
                  prs_perslid_matchcode, prs_perslid_matchwaarde,
                  ins_kenmerkwaarde1,
                  ins_kenmerkwaarde2,
                  ins_kenmerkwaarde3,
                  ins_kenmerkwaarde4,
                  ins_kenmerkwaarde5,
                  ins_kenmerkwaarde6,
                  ins_kenmerkwaarde7,
                  ins_kenmerkwaarde8
             FROM fac_imp_ins
            WHERE res_discipline_kostensoort IS NULL
         ORDER BY 1, 2, 4, 5;

      v_errormsg             VARCHAR2 (1000);
      oracle_err_num         NUMBER;
      oracle_err_mes         VARCHAR2 (200);
      v_aanduiding           VARCHAR2 (500) := '';
      v_count_tot            NUMBER (10) := 0;
      v_count_create         NUMBER (10) := 0;
      v_count_update         NUMBER (10) := 0;
      v_discipline_key       NUMBER (10);
      v_srtgroep_key         NUMBER (10);
      v_srtdeel_key          NUMBER (10);
      v_srtdeel_binding      NUMBER (3);
      v_locatie_key          NUMBER (10);
      v_gebouw_key           NUMBER (10);
      v_verdieping_key       NUMBER (10);
      v_ruimte_key           NUMBER (10);
      v_ruimte_type          VARCHAR2 (10);
      v_deel_key             NUMBER (10);
      ccount                 NUMBER (10);
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.ins_discipline_omschrijving
               || '|'
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_code
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '|'
               || COALESCE (rec.prs_perslid_matchwaarde, rec.alg_locatie_code || '-' || rec.alg_gebouw_code || '-' || TO_CHAR (rec.alg_verdieping_volgnr) ||  '-' || rec.alg_ruimte_nr)
               || '] ';
            v_errormsg := 'Fout bepalen INS-discipline';

            SELECT ins_discipline_key
              INTO v_discipline_key
              FROM ins_discipline
             WHERE ins_discipline_verwijder IS NULL
                   AND ins_discipline_module = 'INS'
                   AND UPPER (TRIM (ins_discipline_omschrijving)) = UPPER (rec.ins_discipline_omschrijving);

            v_errormsg := 'Fout bepalen INS-groepsoort';

            SELECT ins_srtgroep_key
              INTO v_srtgroep_key
              FROM ins_srtgroep
             WHERE ins_srtgroep_verwijder IS NULL
                   AND ins_srtgroep_module = 'INS'
                   AND ins_discipline_key = v_discipline_key
                   AND UPPER (TRIM (ins_srtgroep_omschrijving)) = UPPER (rec.ins_srtgroep_omschrijving);

            v_errormsg := 'Fout bepalen INS-objectsoort';

            SELECT ins_srtdeel_key, ins_srtdeel_binding
              INTO v_srtdeel_key, v_srtdeel_binding
              FROM ins_srtdeel
             WHERE ins_srtdeel_verwijder IS NULL
                   AND ins_srtdeel_module = 'INS'
                   AND ins_srtgroep_key = v_srtgroep_key
                   AND UPPER (TRIM (ins_srtdeel_omschrijving)) = UPPER (rec.ins_srtdeel_omschrijving);

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

            IF BITAND (v_srtdeel_binding, 1) = 1 AND rec.alg_locatie_code IS NOT NULL
            THEN                                      -- Ruimtegebonden object
               v_errormsg := 'Fout bepalen locatie [' || rec.alg_locatie_code || ']';

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

               v_errormsg := 'Fout bepalen gebouw [' || rec.alg_gebouw_code || ']';

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

               v_errormsg := 'Fout bepalen verdieping [' || rec.alg_verdieping_volgnr || ']';

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

               v_errormsg := 'Fout bepalen ruimte [' || rec.alg_ruimte_nr || ']';

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

               -- Ruimtegebonden objecten hebben een unieke ID (bij MN; in FACILITOR moet dat binnen locatie)!
               v_ruimte_type := 'R';
               v_errormsg := 'Fout (uniek) bepalen R-object';
            ELSIF BITAND (v_srtdeel_binding, 8) = 8 AND rec.prs_perslid_matchcode = 'A' -- Afdelinsgebonden object
            THEN
               v_errormsg := 'Fout bepalen afdeling [' || rec.prs_perslid_matchwaarde || ']';

               SELECT prs_afdeling_key
                 INTO v_ruimte_key
                 FROM prs_afdeling
                WHERE prs_afdeling_verwijder IS NULL
                      AND prs_afdeling_upper = UPPER (rec.prs_perslid_matchwaarde);

               -- Afdelingsgebonden objecten hebben een unieke ID!
               v_ruimte_type := 'A';
               v_errormsg := 'Fout (uniek) bepalen A-object';
            ELSIF BITAND (v_srtdeel_binding, 16) = 16 AND rec.prs_perslid_matchcode = 'P' -- Persoonsgebonden object
            THEN
               v_errormsg := 'Fout bepalen persoon [' || rec.prs_perslid_matchwaarde || ']';

               SELECT prs_perslid_key
                 INTO v_ruimte_key
                 FROM prs_perslid
                WHERE prs_perslid_verwijder IS NULL
                      AND prs_perslid_oslogin = UPPER (rec.prs_perslid_matchwaarde);

               -- Persoonsgebonden objecten hebben een unieke ID!
               v_ruimte_type := 'P';
               v_errormsg := 'Fout (uniek) bepalen P-object';
            END IF;

            IF v_ruimte_key IS NULL
            THEN
               fac.imp_writelog (p_import_key, 'W',  v_aanduiding || 'Fout bepalen R-, A- of P-binding', COALESCE (rec.prs_perslid_matchcode, 'R'));
            ELSE
               SELECT COUNT ( * )
                 INTO ccount
                 FROM ins_v_aanwezigdeel
                WHERE ins_deel_module = 'INS'
                      AND ins_srtdeel_key = v_srtdeel_key
                      AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);

               IF ccount = 0        -- Object bestaat nog niet, dus toevoegen!
               THEN
                  v_errormsg := 'Fout toevoegen INS-object';

                  INSERT INTO ins_deel (ins_discipline_key,
                                        ins_srtdeel_key,
                                        ins_deel_module,
                                        ins_deel_omschrijving,
                                        ins_deel_opmerking,
                                        ins_alg_ruimte_key,
                                        ins_alg_ruimte_type,
                                        ins_alg_locatie_key)
                      VALUES (v_discipline_key,
                              v_srtdeel_key,
                              'INS',
                              rec.ins_deel_omschrijving,
                              rec.ins_deel_opmerking,
                              v_ruimte_key,
                              v_ruimte_type,
                              v_locatie_key)
                   RETURNING ins_deel_key
                        INTO v_deel_key;
                  COMMIT;

                  --v_srtnoti_code := 'INSNEW';
                  v_count_create := v_count_create + 1;
               ELSE                                   -- Object bestaat reeds!
                  v_errormsg := 'Fout bijwerken INS-object';

                  SELECT d.ins_deel_key
                    INTO v_deel_key
                    FROM ins_deel d
                   WHERE ins_deel_verwijder IS NULL
                         AND ins_deel_module = 'INS'
                         AND ins_srtdeel_key = v_srtdeel_key
                         AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);

                  UPDATE ins_deel
                     SET ins_alg_ruimte_key = v_ruimte_key,
                         ins_alg_ruimte_type = v_ruimte_type,
                         ins_deel_opmerking = rec.ins_deel_opmerking,
                         ins_deel_vervaldatum = NULL,
                         ins_alg_locatie_key = v_locatie_key,
                         ins_alg_ruimte_key_org = NULL,
                         ins_alg_ruimte_type_org = NULL
                   WHERE ins_deel_key = v_deel_key;
                  COMMIT;

                  --v_srtnoti_code := 'INSUPD';
                  v_count_update := v_count_update + 1;
               END IF;

               -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
               -- (bijwerken kan wel, maar wissen dus niet)!
               upsert_inskenmerk (v_deel_key, 24, rec.ins_kenmerkwaarde1); -- Status
               upsert_inskenmerk (v_deel_key, 41, rec.ins_kenmerkwaarde2); -- Reden bij status
               upsert_inskenmerk (v_deel_key,  1, rec.ins_kenmerkwaarde3); -- Serienummer
               upsert_inskenmerk (v_deel_key, 21, rec.ins_kenmerkwaarde4); -- Model
               upsert_inskenmerk (v_deel_key, 25, rec.ins_kenmerkwaarde5); -- Aanschafdatum
               upsert_inskenmerk (v_deel_key, 26, rec.ins_kenmerkwaarde6); -- Ordernummer
               upsert_inskenmerk (v_deel_key, 27, rec.ins_kenmerkwaarde7); -- Opmerkingen
               upsert_inskenmerk (v_deel_key, 61, rec.ins_kenmerkwaarde8); -- Aanschafwaarde
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
               fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#toegevoegd: ' || TO_CHAR (v_count_create), '');
      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#bijgewerkt: ' || TO_CHAR (v_count_update), '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE del_deel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT id.ins_discipline_omschrijving,
                  sg.ins_srtgroep_omschrijving,
                  sd.ins_srtdeel_code,
                  sd.ins_srtdeel_omschrijving,
                  d.ins_deel_omschrijving,
                  d.ins_deel_key,
                  ic.res_discipline_kostensoort     -- Vervaldatum (ingelezen)!
             FROM ins_v_aanwezigdeel d,
                  ins_v_aanwezigsrtdeel sd,
                  ins_v_aanwezigsrtgroep sg,
                  ins_discipline id,
                  fac_imp_ins ic
            WHERE d.ins_deel_vervaldatum IS NULL -- Vervaldatum nog niet gezet!
                  AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                  AND sg.ins_discipline_key = id.ins_discipline_key
                  AND id.ins_discipline_key = 1104            -- EndUser Asset
                  AND d.ins_deel_omschrijving NOT LIKE '%NIET GEBRUIKEN%'
                  AND ic.res_discipline_kostensoort IS NOT NULL -- Vervaldatum gezet!
                  AND UPPER (ic.ins_deel_omschrijving) = d.ins_deel_upper
                  AND UPPER (ic.ins_srtdeel_omschrijving) = sd.ins_srtdeel_upper
                  AND UPPER (ic.ins_srtgroep_omschrijving) = sg.ins_srtgroep_upper
                  AND UPPER (ic.ins_discipline_omschrijving) = UPPER (id.ins_discipline_omschrijving)
         ORDER BY 1, 2, 4, 5;

      v_errormsg       VARCHAR2 (1000);
      oracle_err_num   NUMBER;
      oracle_err_mes   VARCHAR2 (200);
      v_aanduiding     VARCHAR2 (500):= '';
      v_count_delete   NUMBER (10) := 0;
   BEGIN
      FOR rec IN c1
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.ins_discipline_omschrijving
               || '|'
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_code
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '] ';
            v_errormsg := 'Fout verwijderen INS-object';

            --DELETE FROM ins_deel
            --      WHERE ins_deel_key = rec.ins_deel_key;
            UPDATE ins_deel
               SET ins_deel_vervaldatum = fac.safe_to_date (rec.res_discipline_kostensoort, 'dd-mm-yyyy')
             WHERE ins_deel_key = rec.ins_deel_key
               AND ins_deel_vervaldatum IS NULL;
            COMMIT;

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

      fac.imp_writelog (p_import_key, 'S', 'INS-Objecten/#verwijderd: ' || TO_CHAR (v_count_delete), '');
      COMMIT;
   END;
-- MAIN
BEGIN
   -- Generieke update.
   SELECT COUNT ( * ) INTO v_count FROM fac_imp_ins;

   IF v_count = 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Niets te importeren!', '');
      RETURN;
   END IF;

   --add_insdiscipline (p_import_key);
   add_srtgroep (p_import_key);
   add_srtdeel (p_import_key);
   add_deel (p_import_key);
   del_deel (p_import_key);
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Importproces EUA-objecten afgebroken!');
END mnnl_update_eua;
/


-- MNNL#41653: Mail2Melding voor 2 stromen (Nimbus + HR).
-- MNNL#53176: Mail2Existing ticket/notitie.
-- MNNL#55078: Mail2Existing ticket/afmelden.
CREATE OR REPLACE PROCEDURE MNNL_processemail (
   pfrom        IN VARCHAR2,
   pto          IN VARCHAR2,
   psubject     IN VARCHAR2,
   pbody        IN VARCHAR2,
   psessionid   IN VARCHAR2,
   puserkey     IN NUMBER DEFAULT NULL)
AS
-- soortmeldingen 681+682 onder vakgroepen 1321+1322 onder vakgroeptype 81!
   v_errormsg                VARCHAR2 (1000);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_vakgroep                VARCHAR2 (255) := '';
   v_message                 VARCHAR2 (255) := '';
   v_ci                      VARCHAR2 (255) := '';
   v_leidinggevende          VARCHAR2 (255) := '';
   v_melding                 VARCHAR2 (255) := '';
   v_medewerker              VARCHAR2 (255) := '';
   v_ingangsdatum            VARCHAR2 (255) := '';
   v_vrijstellingsdatum      VARCHAR2 (255) := '';
   v_exist_ticket            VARCHAR2 (255) := '';
   v_afmeldactie             NUMBER (10);
   v_afmeldtekst             VARCHAR2 (4000) := '';
   v_perslid_key             NUMBER (10);
   v_perslid_naam_friendly   VARCHAR2 (255);
   v_kostenplaats_key        NUMBER (10);
   v_discipline_key          NUMBER (10);
   v_stdmelding_key          NUMBER (10);
   v_onderwerp               VARCHAR2 (255);
   v_deel_key                NUMBER (10);
   --v_onrgoed_keys            NUMBER (10);
   --v_onrgoed_type            VARCHAR2 (1);
   --v_locatie_key             NUMBER (10);
   v_melding_key             NUMBER (10);
   v_melding_status          NUMBER (10);
   v_open_opdr               NUMBER (10);
   v_count                   NUMBER (10);
BEGIN
   CASE
      WHEN UPPER (pto) LIKE 'NIMBUS@%'
      THEN
         v_errormsg := 'Fout bepalen Nimbus-vakgroep';
         IF INSTR (pbody, '@VAKGROEP:') > 0
         THEN
            v_vakgroep := TRIM (SUBSTR (pbody,
                                        INSTR (pbody, '@VAKGROEP:') + 10,
                                        INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@VAKGROEP:') + 10), '#') - 1));
         ELSE
            v_vakgroep := '';
         END IF;

         v_errormsg := 'Fout bepalen Nimbus-message';
         IF INSTR (pbody, '@MESSAGE:') > 0
         THEN
            v_message := TRIM (SUBSTR (pbody,
                                       INSTR (pbody, '@MESSAGE:') + 9,
                                       INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@MESSAGE:') + 9), '#') - 1));
         ELSE
            v_message := '';
         END IF;

         v_errormsg := 'Fout bepalen Nimbus-CI';
         IF INSTR (pbody, '@CI:') > 0
         THEN
            v_ci := TRIM (SUBSTR (pbody,
                                  INSTR (pbody, '@CI:') + 4,
                                  INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@CI:') + 4), '#') - 1));
         ELSE
            v_ci := '';
         END IF;

         -- Bepaal persoon met key=12784 (Monitoring NimBUS)?
         v_errormsg := 'Fout bepalen Nimbus-melder';
         SELECT p.prs_perslid_key, a.prs_kostenplaats_key
           INTO v_perslid_key, v_kostenplaats_key
           FROM prs_v_aanwezigperslid p, prs_afdeling a
          WHERE p.prs_perslid_key = 12784
                AND p.prs_afdeling_key = a.prs_afdeling_key;

         -- Bepaal MIN (soortmelding) onder vakgroep met omschrijving zoals in
         -- pbody achter @VAKGROEP?
         v_errormsg := 'Fout bepalen Nimbus-soortmelding ' || COALESCE (v_vakgroep, '???');
         SELECT sm.mld_ins_discipline_key, MIN (sm.mld_stdmelding_key)
           INTO v_discipline_key, v_stdmelding_key
           FROM mld_discipline md, mld_stdmelding sm
          WHERE md.ins_discipline_verwijder IS NULL
                AND md.ins_srtdiscipline_key = 81                     -- Event
                AND md.ins_discipline_key = sm.mld_ins_discipline_key
                AND UPPER (md.ins_discipline_omschrijving) LIKE UPPER (v_vakgroep) || '%'
          GROUP BY sm.mld_ins_discipline_key;

         v_errormsg := 'Fout bepalen Nimbus-onderwerp';
         v_onderwerp := v_message;

         -- Bepaal evt. object met omschrijving zoals in pbody achter @CI?
         -- Alleen objecten onder Applicatie/Server/Database/EndUser Asset met
         -- keys 1101 t/m 1104 worden beschouwd!
         v_errormsg := 'Fout bepalen Nimbus-CI ' || COALESCE (v_ci, '???');
         SELECT COUNT (*)
           INTO v_count
           FROM ins_v_aanwezigdeel d, ins_v_aanwezigsrtdeel sd, ins_v_aanwezigsrtgroep sg
          WHERE d.ins_deel_vervaldatum IS NULL
                AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                AND sg.ins_discipline_key IN (1101, 1102, 1103, 1104)
                AND d.ins_deel_upper = UPPER (v_ci);

         IF v_count = 1
         THEN
            SELECT d.ins_deel_key--, d.ins_alg_ruimte_key, d.ins_alg_ruimte_type
              INTO v_deel_key--, v_onrgoed_keys, v_onrgoed_type
              FROM ins_v_aanwezigdeel d, ins_v_aanwezigsrtdeel sd, ins_v_aanwezigsrtgroep sg
             WHERE d.ins_deel_vervaldatum IS NULL
                   AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                   AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                   AND sg.ins_discipline_key IN (1101, 1102, 1103, 1104)
                   AND d.ins_deel_upper = UPPER (v_ci);
         ELSIF v_ci IS NOT NULL
         THEN
            fac.writelog ('PROCESSEMAIL', 'W', v_errormsg, '');
         END IF;

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

         IF v_deel_key IS NOT NULL
         THEN
            v_errormsg := 'Fout toevoegen Nimbus-object';
            INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key)
                VALUES (v_melding_key, v_deel_key);
         END IF;

         mld.setmeldingstatus (v_melding_key, 2, v_perslid_key);

         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key);
      WHEN UPPER (pto) LIKE 'HR@%'
      THEN
         v_errormsg := 'Fout bepalen HR-leidinggevende';
         IF INSTR (pbody, '@LEIDINGGEVENDE:') > 0
         THEN
            v_leidinggevende := TRIM (SUBSTR (pbody,
                                              INSTR (pbody, '@LEIDINGGEVENDE:') + 16,
                                              INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@LEIDINGGEVENDE:') + 16), '#') - 1));
         ELSE
            v_leidinggevende := '';
         END IF;

         v_errormsg := 'Fout bepalen HR-melding';
         IF INSTR (pbody, '@MELDING:') > 0
         THEN
            v_melding := TRIM (SUBSTR (pbody,
                                       INSTR (pbody, '@MELDING:') + 9,
                                       INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@MELDING:') + 9), '#') - 1));
         ELSE
            v_melding := '';
         END IF;

         v_errormsg := 'Fout bepalen HR-medewerker';
         IF INSTR (pbody, '@MEDEWERKER:') > 0
         THEN
            v_medewerker := TRIM (SUBSTR (pbody,
                                          INSTR (pbody, '@MEDEWERKER:') + 12,
                                          INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@MEDEWERKER:') + 12), '#') - 1));
         ELSE
            v_medewerker := '?';
         END IF;

         v_errormsg := 'Fout bepalen HR-ingangsdatum';
         IF INSTR (pbody, '@INGANGSDATUM:') > 0
         THEN
            v_ingangsdatum := TRIM (SUBSTR (pbody,
                                            INSTR (pbody, '@INGANGSDATUM:') + 14,
                                            INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@INGANGSDATUM:') + 14), '#') - 1));
         ELSE
            v_ingangsdatum := '?';
         END IF;

         v_errormsg := 'Fout bepalen HR-vrijstellingsdatum';
         IF INSTR (pbody, '@VRIJSTELLINGSDATUM:') > 0
         THEN
            v_vrijstellingsdatum := TRIM (SUBSTR (pbody,
                                                  INSTR (pbody, '@VRIJSTELLINGSDATUM:') + 20,
                                                  INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (pbody, '@VRIJSTELLINGSDATUM:') + 20), '#') - 1));
         ELSE
            v_vrijstellingsdatum := '';
         END IF;

         -- Bepaal de melder op basis van loginnaam zoals in pbody achter
         -- @LEIDINGGEVENDE?
         v_errormsg := 'Fout bepalen HR-melder ' || COALESCE (v_leidinggevende, '???');
         SELECT p.prs_perslid_key, pf.prs_perslid_naam_friendly, a.prs_kostenplaats_key
           INTO v_perslid_key, v_perslid_naam_friendly, v_kostenplaats_key
           FROM prs_v_aanwezigperslid p, prs_v_perslid_fullnames_all pf, prs_afdeling a
          WHERE p.prs_perslid_key = pf.prs_perslid_key
                AND p.prs_afdeling_key = a.prs_afdeling_key
                AND p.prs_perslid_oslogin = UPPER (v_leidinggevende);

         -- Bepaal MIN (soortmelding) onder vakgroep met omschrijving zoals in
         -- pbody achter @MELDING?
         v_errormsg := 'Fout bepalen HR-soortmelding ' || COALESCE (v_melding, '???');
         SELECT sm.mld_ins_discipline_key, MIN (sm.mld_stdmelding_key)
           INTO v_discipline_key, v_stdmelding_key
           FROM mld_discipline md, mld_stdmelding sm
          WHERE md.ins_discipline_verwijder IS NULL
                AND md.ins_srtdiscipline_key = 21           -- Service Request
                AND md.ins_discipline_key = sm.mld_ins_discipline_key
                AND sm.mld_stdmelding_upper = UPPER (v_melding)
          GROUP BY sm.mld_ins_discipline_key;

         v_errormsg := 'Fout bepalen HR-onderwerp';
         v_onderwerp := v_melding || ': ' || v_medewerker || ' per ' || v_ingangsdatum;

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

         mld.setmeldingstatus (v_melding_key, 2, v_perslid_key);

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

         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key);
      WHEN UPPER (pto) LIKE 'MELDING@%'
      THEN
         v_errormsg := 'Fout bepalen existing ticket';
         IF INSTR (UPPER (psubject), 'MELDING') > 0
         THEN
            v_exist_ticket := TRIM (SUBSTR (psubject, INSTR (UPPER (psubject), 'MELDING') + 7)); -- Gedeelte vanaf eerste voorkomen van 'MELDING' in psubject!
            IF REGEXP_INSTR (v_exist_ticket, '\d') > 0
            THEN
               v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'!
               v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket!
            ELSE
               v_exist_ticket := 'x';
            END IF;
         ELSE
            v_exist_ticket := 'x';
         END IF;

         v_errormsg := 'Fout bepalen afmeldactie';
         v_afmeldactie := INSTR (UPPER (psubject), '#AFMELDEN');

         v_errormsg := 'Fout bepalen afmeldtekst';
         IF INSTR (UPPER (pbody), '@AFMELDTEKST:') > 0
         THEN
            v_afmeldtekst := TRIM (SUBSTR (pbody,
                                   INSTR (UPPER (pbody), '@AFMELDTEKST:') + 13,
                                   INSTR (SUBSTR (REPLACE (REPLACE (pbody, CHR (13), '#'), CHR (10), '#') || '#', INSTR (UPPER (pbody), '@AFMELDTEKST:') + 13), '#') - 1));
         ELSE
            v_afmeldtekst := '';
         END IF;

         -- Bepaal de noteur op basis van e-mail adres zoals in pfrom?
         v_errormsg := 'Fout bepalen noteur ' || COALESCE (pfrom, '???');
         SELECT p.prs_perslid_key, a.prs_kostenplaats_key
           INTO v_perslid_key, v_kostenplaats_key
           FROM prs_v_aanwezigperslid p, prs_afdeling a
          WHERE p.prs_afdeling_key = a.prs_afdeling_key
                AND UPPER (p.prs_perslid_email) LIKE '%' || UPPER (pfrom) || '%';

         -- Bepaal bestaande melding?
         v_errormsg := 'Fout bepalen bestaande melding ' || COALESCE (v_exist_ticket, '???');
         SELECT m.mld_melding_key, m.mld_melding_status,
                (SELECT COUNT ( * )
                   FROM mld_opdr
                  WHERE TO_CHAR (mld_melding_key) = v_exist_ticket
                        AND mld_statusopdr_key NOT IN (1, 2, 6, 7)),   -- Open
                sm.mld_ins_discipline_key
           INTO v_melding_key, v_melding_status, v_open_opdr, v_discipline_key
           FROM mld_melding m, mld_stdmelding sm
          WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
                AND TO_CHAR (m.mld_melding_key) = v_exist_ticket;

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

         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key);

         IF v_afmeldactie > 0
         THEN
            -- Bepaal of noteur deze melding zou mogen afmelden?
            v_errormsg := 'Fout bepalen autorisaties';
            SELECT COUNT (*)
              INTO v_count
              FROM fac_gebruikersgroep gg, fac_groeprechten gr
             WHERE gg.prs_perslid_key = v_perslid_key
                   AND gr.fac_groep_key = gg.fac_groep_key
                   AND gr.fac_functie_key = 34                       -- MLDBOF
                   AND gr.ins_discipline_key = v_discipline_key
                   AND gr.fac_gebruiker_prs_level_write < 9
                   AND gr.fac_gebruiker_alg_level_write < 9;

            -- Niet al afgemeld/verwerkt, g��n open opdrachten �n geautoriseerd?
            IF v_melding_status NOT IN (5, 6) AND v_open_opdr = 0 AND v_count > 0
            THEN
               v_errormsg := 'Fout toevoegen afmeldtekst';
               UPDATE mld_melding
                  SET mld_melding_opmerking = v_afmeldtekst
                WHERE mld_melding_key = v_melding_key;

               v_errormsg := 'Fout afmelden melding';
               mld.setmeldingstatus (v_melding_key, 5, v_perslid_key);
               mld.mld_nextworkflowstep (v_melding_key, 1);     -- 1=Completed

               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                   VALUES (psessionid, 'maillog', 'Exist-melding naar afgemeld ' || v_melding_key);
            ELSE
               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                   VALUES (psessionid, 'maillog', 'Exist-melding NIET afgemeld ' || v_melding_key);
            END IF;
         END IF;
      ELSE
         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder ');
   END CASE;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog ('PROCESSEMAIL', 'E', 'MNNL_processemail afgebroken!', '[' || pfrom || '] ' || v_errormsg);
      INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
          VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder ');
      COMMIT;
END;
/

CREATE OR REPLACE VIEW mnnl_v_rap_mail_error
(
   hide_f_offset,
   datum,
   hint,
   error
)
AS
   SELECT SYSDATE - imp_log_datum, imp_log_datum, imp_log_hint, imp_log_omschrijving
     FROM imp_log
    WHERE imp_log_applicatie = 'PROCESSEMAIL' AND imp_log_datum > ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -1);

CREATE OR REPLACE VIEW mnnl_v_incident_xref
(
   mld_melding_key,
   incident_xref
)
AS
   SELECT m.mld_melding_key, TO_CHAR (m.mld_melding_key) || ' [' || s.mld_statuses_omschrijving || ']'
     FROM mld_melding m, mld_stdmelding sm, ins_tab_discipline td, mld_statuses s
    WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 22                        -- Incident
          AND m.mld_melding_status = s.mld_statuses_key;

CREATE OR REPLACE VIEW mnnl_v_udr_deel
(
   deel_key,
   discipline,
   soort,
   groep,
   soortcode,
   omschrijving,
   plaatseigenaar,
   plaatseigenaartype,
   plaatsaanduiding,
   eigenaar,
   afdeling,
   opmerking,
   regio,
   district,
   locatie_code,
   locatie_omschrijving,
   locatie_plaats,
   gebouwcode,
   gebouw,
   terreinsectorcode,
   terreinsector,
   verdiepingcode,
   ruimtenr,
   werkplekvolgnr,
   werkplek,
   uitleenbaar,
   uitgeleend,
   res_opmerking,
   beheerder,
   vervaldatum,
   actief,
   aantal,
   state,
   statedate,
   fclt_3d_discipline_key,
   fclt_3d_afdeling_key,
   fclt_3d_locatie_key,
   status
)
AS
   SELECT ii.ins_deel_key,
          lcl.x ('ins_discipline_omschrijving',
                 id.ins_discipline_key,
                 id.ins_discipline_omschrijving),
          lcl.x ('ins_srtdeel_omschrijving',
                 s.ins_srtdeel_key,
                 s.ins_srtdeel_omschrijving),
          lcl.x ('ins_srtgroep_omschrijving',
                 sg.ins_srtgroep_key,
                 sg.ins_srtgroep_omschrijving),
          s.ins_srtdeel_code,
          ii.ins_deel_omschrijving,
          COALESCE (ii.plaats, ii.eigenaar),
          ii.ins_alg_ruimte_type,
          ii.plaats,
          ii.eigenaar,
          ii.afdeling,
          ii.ins_deel_opmerking,
          ii.regio,
          ii.district,
          ii.locatie_code,
          ii.locatie_omschrijving,
          ii.locatie_plaats,
          ii.alg_gebouw_code,
          ii.alg_gebouw_omschrijving,
          ii.alg_terreinsector_code,
          ii.alg_terreinsector_omschrijving,
          ii.alg_verdieping_code,
          ii.alg_ruimte_nr,
          ii.prs_werkplek_volgnr,
          ii.prs_werkplek_omschrijving,
          DECODE (s.ins_srtdeel_uitleenbaar,
                  1, lcl.l ('lcl_yes'),
                  lcl.l ('lcl_no')),
          DECODE (ii.ins_alg_ruimte_key_org,
                  NULL, lcl.l ('lcl_no'),
                  lcl.l ('lcl_yes')),
          ii.res_deel_opmerking,
          pf.prs_perslid_naam_full,
          ii.ins_deel_vervaldatum,
          DECODE (ii.ins_deel_actief, 1, lcl.l ('lcl_yes'), lcl.l ('lcl_no')),
          ii.ins_deel_aantal,
          ii.ins_deel_state,
          ii.ins_deel_statedate,
          sg.ins_discipline_key,
          ii.ins_alg_ruimte_key,
          ii.alg_locatie_key,
       (SELECT fu.fac_usrdata_omschr
          FROM ins_kenmerkdeel kd, ins_kenmerk k, fac_usrdata fu
         WHERE     k.ins_kenmerk_key = kd.ins_kenmerk_key
               AND k.ins_srtkenmerk_key = 24
               AND fu.fac_usrtab_key = 204
               AND TO_CHAR (fac_usrdata_key) = kd.ins_kenmerkdeel_waarde
               AND ii.ins_deel_key = kd.ins_deel_key) stat
     FROM (SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  TO_CHAR (NULL) plaats,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  NULL regio,
                  NULL district,
                  NULL locatie_code,
                  NULL locatie_omschrijving,
                  NULL locatie_plaats,
                  NULL alg_gebouw_code,
                  NULL alg_gebouw_omschrijving,
                  NULL alg_terreinsector_code,
                  NULL alg_terreinsector_omschrijving,
                  NULL alg_verdieping_code,
                  NULL alg_ruimte_nr,
                  NULL prs_werkplek_volgnr,
                  NULL prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  (SELECT d.prs_afdeling_omschrijving
                     FROM prs_v_afdeling d
                    WHERE prs_afdeling_key = i.ins_alg_ruimte_key)
                     eigenaar,
                  (SELECT d.prs_afdeling_naam
                     FROM prs_v_afdeling d
                    WHERE prs_afdeling_key = i.ins_alg_ruimte_key)
                     afdeling,
                  i.ins_discipline_key,
                  i.ins_alg_ruimte_key,
                  NULL alg_locatie_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_v_afdeling_boom d,
                  prs_bedrijf b
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_parent_key IS NULL
                  AND i.ins_alg_ruimte_key = d.prs_afdeling_key
                  AND i.ins_alg_ruimte_type = 'A'
           UNION
           SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  TO_CHAR (NULL) plaats,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  NULL regio,
                  NULL district,
                  NULL locatie_code,
                  NULL locatie_omschrijving,
                  NULL locatie_plaats,
                  NULL alg_gebouw_code,
                  NULL alg_gebouw_omschrijving,
                  NULL alg_terreinsector_code,
                  NULL alg_terreinsector_omschrijving,
                  NULL alg_verdieping_code,
                  NULL alg_ruimte_nr,
                  NULL prs_werkplek_volgnr,
                  NULL prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  pf.prs_perslid_naam_full eigenaar,
                  (SELECT d.prs_afdeling_naam
                     FROM prs_v_afdeling d
                    WHERE prs_afdeling_key = p.prs_afdeling_key),
                  i.ins_discipline_key,
                  p.prs_afdeling_key,
                  NULL alg_locatie_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_perslid p,
                  prs_v_perslid_fullnames_all pf,
                  prs_v_afdeling_boom d
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_parent_key IS NULL
                  AND i.ins_alg_ruimte_key = p.prs_perslid_key
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND p.prs_afdeling_key = d.prs_afdeling_key
                  AND i.ins_alg_ruimte_type = 'P'
           UNION
           SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  TO_CHAR (NULL) plaats,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  NULL regio,
                  NULL district,
                  NULL locatie_code,
                  NULL locatie_omschrijving,
                  NULL locatie_plaats,
                  NULL alg_gebouw_code,
                  NULL alg_gebouw_omschrijving,
                  NULL alg_terreinsector_code,
                  NULL alg_terreinsector_omschrijving,
                  NULL alg_verdieping_code,
                  NULL alg_ruimte_nr,
                  NULL prs_werkplek_volgnr,
                  NULL prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  c.prs_contactpersoon_naam eigenaar,
                  NULL afdeling,
                  NULL discipline_key,
                  NULL,
                  NULL alg_locatie_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_contactpersoon c
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_parent_key IS NULL
                  AND i.ins_alg_ruimte_key = c.prs_contactpersoon_key
                  AND i.ins_alg_ruimte_type = 'C'
           UNION
           SELECT i.ins_deel_key,
                  i.ins_deel_omschrijving,
                  i.ins_srtdeel_key,
                  i.prs_perslid_key_beh,
                  o.alg_plaatsaanduiding,
                  i.ins_deel_opmerking,
                  i.ins_alg_ruimte_type,
                  re.alg_regio_omschrijving,
                  di.alg_district_omschrijving,
                  l.alg_locatie_code locatie_code,
                  l.alg_locatie_omschrijving locatie_omschrijving,
                  l.alg_locatie_plaats locatie_plaats,
                  o.alg_gebouw_code,
                  o.alg_gebouw_omschrijving,
                  o.alg_terreinsector_code,
                  o.alg_terreinsector_omschrijving,
                  o.alg_verdieping_code,
                  o.alg_ruimte_nr,
                  o.prs_werkplek_volgnr,
                  o.prs_werkplek_omschrijving,
                  rd.res_deel_opmerking,
                  i.ins_deel_vervaldatum,
                  NULL eigenaar,
                  NULL afdeling,
                  i.ins_discipline_key,
                  NULL,
                  l.alg_locatie_key,
                  i.ins_deel_actief,
                  i.ins_deel_aantal,
                  i.ins_alg_ruimte_key_org,
                  i.ins_deel_state,
                  i.ins_deel_statedate
             FROM ins_deel i,
                  ins_v_alg_overzicht o,
                  alg_locatie l,
                  alg_district di,
                  alg_regio re,
                  (SELECT res_deel_key,
                          res_ins_deel_key,
                          res_deel_opmerking res_deel_opmerking
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd
            WHERE     i.ins_deel_verwijder IS NULL
                  AND i.ins_deel_module = 'INS'
                  AND i.ins_deel_key = rd.res_ins_deel_key(+)
                  AND i.ins_deel_parent_key IS NULL
                  AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
                  AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
                  AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
                  AND o.alg_locatie_key = i.ins_alg_locatie_key
                  AND i.ins_alg_locatie_key = l.alg_locatie_key
                  AND l.alg_district_key = di.alg_district_key
                  AND di.alg_regio_key = re.alg_regio_key) ii,
          ins_srtdeel s,
          ins_srtgroep sg,
          ins_discipline id,
          prs_v_perslid_fullnames pf
    WHERE     sg.ins_srtgroep_key = s.ins_srtgroep_key
          AND id.ins_discipline_key = sg.ins_discipline_key
          AND ii.prs_perslid_key_beh = pf.prs_perslid_key(+)
          AND s.ins_srtdeel_key = ii.ins_srtdeel_key;

-- MNNL#41772: Stakeholders voor small changes.
CREATE OR REPLACE VIEW mnnl_v_perslid_small_changes
(
   prs_perslid_key,
   prs_perslid_naam_full,
   prs_perslid_naam_friendly,
   prs_perslid_naam_log_full,
   prs_perslid_naam_log_friendly,
   prs_perslid_verwijder
)
AS
   SELECT pf.prs_perslid_key,
          pf.prs_perslid_naam_full || ' [' || a.prs_afdeling_naam || ']',
          pf.prs_perslid_naam_friendly || ' [' || a.prs_afdeling_naam || ']',
          pf.prs_perslid_naam_full  || ' [' || p.prs_perslid_oslogin || ']' || ' [' || a.prs_afdeling_naam || ']',
          pf.prs_perslid_naam_friendly  || ' [' || p.prs_perslid_oslogin || ']' || ' [' || a.prs_afdeling_naam || ']',
          p.prs_perslid_verwijder
     FROM prs_perslid p, prs_afdeling a, prs_v_perslid_fullnames_all pf
    WHERE p.prs_afdeling_key = a.prs_afdeling_key
          AND p.prs_perslid_key = pf.prs_perslid_key
          AND EXISTS
                (SELECT 1
                   FROM fac_gebruikersgroep
                  WHERE fac_groep_key IN (441, 442, 443, 444, 445, 447, 456, 453) -- ITL Rechtenbeheer/Unix/Werkplekbeheer (ICT)/Wintel/Oracle/Netwerken/Technisch Applicatiebeheer+MDT Procesbesturing&Integratie
                        AND prs_perslid_key = pf.prs_perslid_key);

CREATE OR REPLACE VIEW mnnl_v_perslid_all
(
   prs_perslid_key,
   prs_perslid_naam_full,
   prs_perslid_naam_friendly,
   prs_perslid_naam_log_full,
   prs_perslid_naam_log_friendly,
   prs_perslid_verwijder
)
AS
   SELECT pf.prs_perslid_key,
          pf.prs_perslid_naam_full || ' [' || a.prs_afdeling_naam || ']',
          pf.prs_perslid_naam_friendly || ' [' || a.prs_afdeling_naam || ']',
          pf.prs_perslid_naam_full  || ' [' || p.prs_perslid_oslogin || ']' || ' [' || a.prs_afdeling_naam || ']',
          pf.prs_perslid_naam_friendly  || ' [' || p.prs_perslid_oslogin || ']' || ' [' || a.prs_afdeling_naam || ']',
          p.prs_perslid_verwijder
     FROM prs_perslid p, prs_afdeling a, prs_v_perslid_fullnames_all pf
    WHERE p.prs_afdeling_key = a.prs_afdeling_key
          AND p.prs_perslid_key = pf.prs_perslid_key;

CREATE OR REPLACE VIEW mnnl_v_rap_change_appr
(
   --fclt_3d_discipline_key,
   mld_melding_key,
   changenr,
   soortchange,
   onderwerp,
   aanvrager,
   urgent,
   datum_uitvoering,
   appr_infra_op,
   appr_infra_wn,
   appr_infra_wp,
   appr_peba,
   appr_pepa,
   appr_vz,
   appr_vb,
   appr_fds,
   appr_port,
   appr_pega,
   appr_doc,
   appr_ota,
   appr_pi,
   appr_bi,
   besproken_in_cab
)
AS
   SELECT --m.mld_ins_discipline_key,
          m.mld_melding_key,
          TO_CHAR (m.mld_melding_key),
          m.mld_stdmelding_omschrijving,
          m.mld_melding_onderwerp,
          m.prs_perslid_naam_friendly,
          DECODE (urgent.mld_kenmerkmelding_waarde, NULL, NULL, 'Ja') urgent,
          duv.mld_kenmerkmelding_waarde,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = op.mld_kenmerkmelding_waarde) op,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = wn.mld_kenmerkmelding_waarde) wn,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = wp.mld_kenmerkmelding_waarde) wp,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = peba.mld_kenmerkmelding_waarde) peba,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = pepa.mld_kenmerkmelding_waarde) pepa,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = vz.mld_kenmerkmelding_waarde) vz,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = vb.mld_kenmerkmelding_waarde) vb,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = fds.mld_kenmerkmelding_waarde) fds,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = port.mld_kenmerkmelding_waarde) port,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = pega.mld_kenmerkmelding_waarde) pega,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = doc.mld_kenmerkmelding_waarde) doc,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = ota.mld_kenmerkmelding_waarde) ota,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = pi.mld_kenmerkmelding_waarde) pi,
          (SELECT fac_usrdata_code FROM fac_v_aanwezigusrdata WHERE TO_CHAR (fac_usrdata_key) = bi.mld_kenmerkmelding_waarde) bi,
          NULL
     FROM (SELECT sm.mld_ins_discipline_key, m.mld_melding_key, sm.mld_stdmelding_omschrijving, m.mld_melding_onderwerp, pf.prs_perslid_naam_friendly
             FROM mld_melding m, mld_stdmelding sm, prs_v_perslid_fullnames_all pf
            WHERE m.mld_melding_status IN (2, 3, 0) -- 1-Ingevoerd, 3-Ingezien, 0-Pending (zolang nog niet Geaccepteerd/Afgewezen)
                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_stdmelding_key IN (501, 502) -- RFC Large/Medium change
                  AND m.prs_perslid_key = pf.prs_perslid_key) m
          LEFT JOIN mld_v_aanwezigkenmerkmelding urgent
             ON m.mld_melding_key = urgent.mld_melding_key
                AND urgent.mld_kenmerk_key = 381          -- Urgent change
          LEFT JOIN mld_v_aanwezigkenmerkmelding duv
             ON m.mld_melding_key = duv.mld_melding_key
                AND duv.mld_kenmerk_key IN (386, 387)     -- Gewenste datum uitvoering
          LEFT JOIN mld_v_aanwezigkenmerkmelding op
             ON m.mld_melding_key = op.mld_melding_key
                AND op.mld_kenmerk_key IN (251, 252)      -- Approval Infra Oracle Platform
          LEFT JOIN mld_v_aanwezigkenmerkmelding wn
             ON m.mld_melding_key = wn.mld_melding_key
                AND wn.mld_kenmerk_key IN (255, 256)      -- Approval Infra Wintel en Netwerken
          LEFT JOIN mld_v_aanwezigkenmerkmelding wp
             ON m.mld_melding_key = wp.mld_melding_key
                AND wp.mld_kenmerk_key IN (253, 254)      -- Approval Infra Werkplekbeheer
          LEFT JOIN mld_v_aanwezigkenmerkmelding peba
             ON m.mld_melding_key = peba.mld_melding_key
                AND peba.mld_kenmerk_key IN (246, 245)    -- Approval Basisadministratie
          LEFT JOIN mld_v_aanwezigkenmerkmelding pepa
             ON m.mld_melding_key = pepa.mld_melding_key
                AND pepa.mld_kenmerk_key IN (259, 260)    -- Approval Pensioenadministratie
          LEFT JOIN mld_v_aanwezigkenmerkmelding vz
             ON m.mld_melding_key = vz.mld_melding_key
                AND vz.mld_kenmerk_key IN (266, 265)      -- Approval Verzekeringen
          LEFT JOIN mld_v_aanwezigkenmerkmelding vb
             ON m.mld_melding_key = vb.mld_melding_key
                AND vb.mld_kenmerk_key IN (264, 263)      -- Approval Vermogensbeheer
          LEFT JOIN mld_v_aanwezigkenmerkmelding fds
             ON m.mld_melding_key = fds.mld_melding_key
                AND fds.mld_kenmerk_key IN (250, 249)     -- Approval Finance, Risk & HR
          LEFT JOIN mld_v_aanwezigkenmerkmelding port
             ON m.mld_melding_key = port.mld_melding_key
                AND port.mld_kenmerk_key IN (262, 261)    -- Approval Portalen
          LEFT JOIN mld_v_aanwezigkenmerkmelding pega
             ON m.mld_melding_key = pega.mld_melding_key
                AND pega.mld_kenmerk_key IN (2681, 2683)  -- Approval PEGA
          LEFT JOIN mld_v_aanwezigkenmerkmelding doc
             ON m.mld_melding_key = doc.mld_melding_key
                AND doc.mld_kenmerk_key IN (248, 247)     -- Approval Document Services
          LEFT JOIN mld_v_aanwezigkenmerkmelding ota
             ON m.mld_melding_key = ota.mld_melding_key
                AND ota.mld_kenmerk_key IN (257, 258)     -- Approval Ontwikkelstraat
          LEFT JOIN mld_v_aanwezigkenmerkmelding pi
             ON m.mld_melding_key = pi.mld_melding_key
                AND pi.mld_kenmerk_key IN (1102, 1122)    -- Approval Procesbesturing & Integratie
          LEFT JOIN mld_v_aanwezigkenmerkmelding bi
             ON m.mld_melding_key = bi.mld_melding_key
                AND bi.mld_kenmerk_key IN (1204, 1203)    -- Approval Business Intelligence
;

CREATE OR REPLACE VIEW mnnl_v_noti_change_appr
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS      -- Ter info naar enkele medewerkers voor alle medium en large changes!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (
             REPLACE (
                REPLACE (sn.fac_srtnotificatie_oms,
                         '##KEY##', TO_CHAR (m.mld_melding_key)),
                '##DISC##', TO_CHAR (md.ins_discipline_omschrijving)),
             '##STDMLD##', TO_CHAR (sm.mld_stdmelding_omschrijving)),
          m.mld_melding_key,
          NULL,
          NULL,
          k.mld_kenmerk_hint,
          NULL,
          NULL
     FROM fac_tracking t,
          mld_v_aanwezigkenmerkmelding km,
          mld_kenmerk k,
          mld_srtkenmerk sk,
          mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE t.fac_srtnotificatie_key = 43                              -- MLDNEW
          AND t.fac_tracking_refkey = km.mld_melding_key
          AND km.mld_kenmerk_key = k.mld_kenmerk_key
          AND INSTR (UPPER (k.mld_kenmerk_hint), '@MN.NL') > 0
          AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
          AND sk.mld_srtkenmerk_kenmerktype = 'V'                  -- Checkbox
          AND km.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_discipline_key = 1261              -- IV Changemanagement
          AND sn.fac_srtnotificatie_code = 'CUST01'
          AND nj.fac_notificatie_job_view = 'MNNL_V_NOTI_CHANGE_APPR'
          AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun
   UNION ALL -- Ter approval naar approver als kenmerk gezet op 'Moet approven'!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (
             REPLACE (
                REPLACE (sn.fac_srtnotificatie_oms,
                         '##KEY##', TO_CHAR (m.mld_melding_key)),
                '##DISC##', TO_CHAR (md.ins_discipline_omschrijving)),
             '##STDMLD##', TO_CHAR (sm.mld_stdmelding_omschrijving)),
          m.mld_melding_key,
          NULL,
          NULL,
          k.mld_kenmerk_hint,
          NULL,
          NULL
     FROM mld_v_aanwezigkenmerkmelding km,
          mld_kenmerk k,
          mld_srtkenmerk sk,
          mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          fac_v_aanwezigusrdata ud,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
          AND INSTR (UPPER (k.mld_kenmerk_hint), '@MN.NL') > 0
          AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
          AND INSTR (sk.mld_srtkenmerk_upper, 'IMPACT') > 0
          AND sk.fac_kenmerkdomein_key IS NOT NULL       -- Referentie-kenmerk
          AND km.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_discipline_key = 1261              -- IV Changemanagement
          --AND m.mld_melding_status NOT IN (1, 5, 6) -- 1-Afgewezen, 5-Afgemeld, 6-Verwerkt (zolang nog niet Gesloten)
          AND m.mld_melding_status IN (2, 3, 0) -- 1-Ingevoerd, 3-Ingezien, 0-Pending (zolang nog niet Geaccepteerd/Afgewezen)
          AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud.fac_usrdata_key)
          AND UPPER (TRIM (ud.fac_usrdata_omschr)) = 'MOET APPROVEN'
          AND sn.fac_srtnotificatie_code = 'CUST02'
          AND nj.fac_notificatie_job_view = 'MNNL_V_NOTI_CHANGE_APPR'
          AND km.mld_kenmerkmelding_aanmaak BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun;

CREATE OR REPLACE VIEW mnnl_v_noti_jira
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (sn.fac_srtnotificatie_oms, '##TEAM##', TRIM (SUBSTR (sk.mld_srtkenmerk_omschrijving, INSTR (sk.mld_srtkenmerk_omschrijving, ' ')))),
          m.mld_melding_key,
          NULL,
          NULL,
          k.mld_kenmerk_hint,
          NULL,
          NULL
     FROM fac_tracking t,
          mld_melding m,
          mld_v_aanwezigkenmerkmelding km,
          mld_kenmerk k,
          mld_srtkenmerk sk,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE t.fac_srtnotificatie_key = 38                              -- MLDAFM
          AND t.fac_tracking_refkey = m.mld_melding_key
          AND m.mld_stdmelding_key = 763            -- Intake business verzoek
          AND m.mld_melding_key = km.mld_melding_key
          AND km.mld_kenmerk_key = k.mld_kenmerk_key
          AND k.mld_kenmerk_key IN (1049, 1040, 1042, 1045, 1046, 1038,  1501, 1502, 1563)
          AND INSTR (UPPER (k.mld_kenmerk_hint), '@') > 0  -- TODO: Preciezer?
          AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
          AND sn.fac_srtnotificatie_code = 'CUST03'
          AND nj.fac_notificatie_job_view = 'MNNL_V_NOTI_JIRA'
          AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun;

-- MMNL#54758: RAPPORT met alle (INCIDENT) meldingen met en of zonder object (regel per object).
CREATE OR REPLACE VIEW mnnl_v_udr_meldingen
(
   melding_key,
   melding_nr,
   melder,
   melder_key,
   melder_afd,
   melder_afd_omschr,
   melding_soort,
   melding_productgroep,
   melding_subproductgroep,
   melding_behandelgroep,
   melding_behandelaar,
   melding_behandelaar_key,
   melding_subproductgroepgroep,
   melding_status,
   melding_sla_nvt,
   melding_sla_werkdgn,
   melding_sla_werkuren,
   melding_sla_accptdgn,
   melding_sla_accpturen,
   melding_sla_plan_uitvoertijd,
   melding_datum,
   melding_einddatum,
   melding_acceptdatum,
   melding_afgemeld,
   melding_accepted,
   melding_doorlooptijd_dgn,
   melding_doorloopijd_uren,
   melding_onderwerp,
   melding_vomschrijving,
   melding_opmerking,
   melding_prioriteit,
   melding_prioriteittxt,
   melding_rating,
   melding_rating_opmerking,
   melding_uitvoering_sla_dagen,
   melding_uitvoering_sla_uren,
   melding_afspraak_sla_dagen,
   melding_afspraak_sla_uren,
   melding_accept_sla_optijd,
   melding_uitvoering_sla_optijd,
   melding_afspraak_sla_optijd,
   melding_selfservice,
   object_discipline,
   object_soort,
   object_groep,
   object_omschrijving,
   object_plaatseigenaar,
   storing_scope,
   storing_blokkerend,
   storing_sinds,
   storing_frequency,
   storing_type
)
AS
   SELECT DISTINCT m.melding_key,
                   m.meldingnummer,
                   m.melder,
                   m.melder_key,
                   m.afdeling,
                   m.afdeling_omschrijving,
                   m.soortmelding,
                   m.productgroep,
                   m.subproductgroep,
                   m.behandelgroep,
                   m.behandelaar,
                   m.behandelaar_key,
                   m.subproductgroepgroep,
                   m.melding_status,
                   m.sla_nvt,
                   m.sla_werkdgn,
                   m.sla_werkuren,
                   m.sla_accptdgn,
                   m.sla_accpturen,
                   m.plan_uitvoertijd_sla,
                   m.melding_datum,
                   m.melding_einddatum,
                   m.melding_acceptdatum,
                   m.melding_afgemeld,
                   m.melding_accepted,
                   m.doorlooptijd_werkdgn,
                   m.doorlooptijd_werkuren,
                   m.onderwerp,
                   m.vomschrijving,
                   m.melding_opmerking,
                   m.prioriteit,
                   m.prioriteittxt,
                   m.rating,
                   m.rating_opmerking,
                   m.uitvoering_sla_dagen,
                   m.uitvoering_sla_uren,
                   m.afspraak_sla_dagen,
                   m.afspraak_sla_uren,
                   m.accept_sla_optijd,
                   m.uitvoering_sla_optijd,
                   m.afspraak_sla_optijd,
                   m.selfservice,
                   dg.ins_discipline_omschrijving discipline,
                   dg.ins_srtgroep_omschrijving groep,
                   dg.ins_srtdeel_omschrijving soort,
                   dg.ins_deel_omschrijving omschrijving,
                   dg.alg_plaatsaanduiding plaatseigenaar,
				   (SELECT fac_usrdata_omschr
              FROM fac_usrdata
             WHERE fac_usrdata_key =
                   (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
                      FROM mld_kenmerkmelding km
                     WHERE km.mld_melding_key = m.melding_key
                           AND km.mld_kenmerk_key = 143))
               waarde143,
           DECODE (
               (SELECT mld_kenmerkmelding_waarde
                  FROM mld_kenmerkmelding km
                 WHERE km.mld_melding_key = m.melding_key
                       AND km.mld_kenmerk_key = 145),
               1, 'ja',
               ' ')
               waarde145,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE km.mld_melding_key = m.melding_key
                   AND km.MLD_KENMERK_KEY = 146)  waarde146,  --   storing_sinds,
           (SELECT fac_usrdata_omschr
              FROM fac_usrdata
             WHERE fac_usrdata_key =
                   (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
                      FROM mld_kenmerkmelding km
                     WHERE km.mld_melding_key = m.melding_key
                           AND km.mld_kenmerk_key = 147))
               waarde147, -- storing_frequency,
           (SELECT fac_usrdata_omschr
              FROM fac_usrdata
             WHERE fac_usrdata_key =
                   (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
                      FROM mld_kenmerkmelding km
                     WHERE km.mld_melding_key = m.melding_key
                           AND km.mld_kenmerk_key = 2441))
               waarde2441
     FROM mld_v_udr_melding m, mld_melding_object mo, ins_v_deel_gegevens dg
    WHERE m.melding_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy')
          AND UPPER (m.soortmelding) = 'INCIDENT'
          AND m.melding_key = mo.mld_melding_key(+)
          AND mo.ins_deel_key = dg.ins_deel_key(+);

-- MMNL#54758: RAPPORT met alle (INCIDENT) meldingen met en of zonder object (regel per melding).
CREATE OR REPLACE VIEW mnnl_v_udr_meldingen2
(
   melding_key,
   melding_nr,
   melder,
   melder_key,
   melder_afd,
   melder_afd_omschr,
   melding_soort,
   melding_productgroep,
   melding_subproductgroep,
   melding_behandelgroep,
   melding_behandelaar,
   melding_behandelaar_key,
   melding_subproductgroepgroep,
   melding_status,
   melding_sla_nvt,
   melding_sla_werkdgn,
   melding_sla_werkuren,
   melding_sla_accptdgn,
   melding_sla_accpturen,
   melding_sla_plan_uitvoertijd,
   melding_datum,
   melding_einddatum,
   melding_acceptdatum,
   melding_afgemeld,
   melding_accepted,
   melding_doorlooptijd_dgn,
   melding_doorloopijd_uren,
   melding_onderwerp,
   melding_vomschrijving,
   melding_opmerking,
   melding_prioriteit,
   melding_prioriteittxt,
   melding_rating,
   melding_rating_opmerking,
   melding_uitvoering_sla_dagen,
   melding_uitvoering_sla_uren,
   melding_afspraak_sla_dagen,
   melding_afspraak_sla_uren,
   melding_accept_sla_optijd,
   melding_uitvoering_sla_optijd,
   melding_afspraak_sla_optijd,
   melding_selfservice,
   melding_objecten,
   storing_scope,
   storing_blokkerend,
   storing_sinds,
   storing_frequency,
    storing_type
)
AS
   SELECT DISTINCT m.melding_key,
                   m.meldingnummer,
                   m.melder,
                   m.melder_key,
                   m.afdeling,
                   m.afdeling_omschrijving,
                   m.soortmelding,
                   m.productgroep,
                   m.subproductgroep,
                   m.behandelgroep,
                   m.behandelaar,
                   m.behandelaar_key,
                   m.subproductgroepgroep,
                   m.melding_status,
                   m.sla_nvt,
                   m.sla_werkdgn,
                   m.sla_werkuren,
                   m.sla_accptdgn,
                   m.sla_accpturen,
                   m.plan_uitvoertijd_sla,
                   m.melding_datum,
                   m.melding_einddatum,
                   m.melding_acceptdatum,
                   m.melding_afgemeld,
                   m.melding_accepted,
                   m.doorlooptijd_werkdgn,
                   m.doorlooptijd_werkuren,
                   m.onderwerp,
                   m.vomschrijving,
                   m.melding_opmerking,
                   m.prioriteit,
                   m.prioriteittxt,
                   m.rating,
                   m.rating_opmerking,
                   m.uitvoering_sla_dagen,
                   m.uitvoering_sla_uren,
                   m.afspraak_sla_dagen,
                   m.afspraak_sla_uren,
                   m.accept_sla_optijd,
                   m.uitvoering_sla_optijd,
                   m.afspraak_sla_optijd,
                   m.selfservice,
                   mo.objecten,
				    (SELECT fac_usrdata_omschr
              FROM fac_usrdata
             WHERE fac_usrdata_key =
                   (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
                      FROM mld_kenmerkmelding km
                     WHERE km.mld_melding_key = m.melding_key
                           AND km.mld_kenmerk_key = 143))
               waarde143,
           DECODE (
               (SELECT mld_kenmerkmelding_waarde
                  FROM mld_kenmerkmelding km
                 WHERE km.mld_melding_key = m.melding_key
                       AND km.mld_kenmerk_key = 145),
               1, 'ja',
               ' ')
               waarde145,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE km.mld_melding_key = m.melding_key
                   AND km.MLD_KENMERK_KEY = 146)  waarde146,  --   storing_sinds,
           (SELECT fac_usrdata_omschr
              FROM fac_usrdata
             WHERE fac_usrdata_key =
                   (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
                      FROM mld_kenmerkmelding km
                     WHERE km.mld_melding_key = m.melding_key
                           AND km.mld_kenmerk_key = 147))
               waarde147, -- storing_frequency,
           (SELECT fac_usrdata_omschr
              FROM fac_usrdata
             WHERE fac_usrdata_key =
                   (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
                      FROM mld_kenmerkmelding km
                     WHERE km.mld_melding_key = m.melding_key
                           AND km.mld_kenmerk_key = 2441))
               waarde2441
     FROM mld_v_udr_melding m,
          (  SELECT mo.mld_melding_key,
                    LISTAGG (dg.ins_deel_omschrijving || ' (' || dg.ins_srtdeel_omschrijving || ')', ', ')
                       WITHIN GROUP (ORDER BY dg.ins_deel_omschrijving)
                       objecten
               FROM mld_melding_object mo, ins_v_deel_gegevens dg
              WHERE mo.ins_deel_key = dg.ins_deel_key
           GROUP BY mo.mld_melding_key) mo
    WHERE m.melding_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy')
          AND UPPER (m.soortmelding) = 'INCIDENT'
          AND m.melding_key = mo.mld_melding_key(+);

-- MNNL#53038: Basisrapport met alle Intake-meldingen incl. kenmerken.
CREATE OR REPLACE VIEW mnnl_v_rap_mld_intake
(
   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,
   fclt_3d_afdeling_key,
   bedrijf_key,
   invoerder,
   meldbron,
   soortmelding,
   fclt_3d_discipline_key,
   productgroep,
   subproductgroep,
   behandelgroep,
   behandelaar,
   behandelaar_key,
   subproductgroepgroep,
   fclt_3d_discipline2_key,
   actieve_behandelgroep,
   actieve_behandelaar_key,
   actieve_behandelaar,
   melding_status,
   sla_nvt,
   sla_werkdgn,
   sla_werkuren,
   sla_respijtdgn,
   sla_respijturen,
   sla_accptdgn,
   sla_accpturen,
   plan_uitvoertijd_sla,
   melding_datum,
   melding_einddatum,
   melding_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,
   reden_aanvraag, --kenmerk1,
   aanvullende_acties, --kenmerk2,
   afronding_intake, --kenmerk3,
   jira_ticket, --kenmerk4,
   cap_bestelling, --kenmerk5,
   gewenst_gereed, --kenmerk6,
   leverancier, --kenmerk7,
   teaminzet_netwerken, --kenmerk8,
   teaminzet_oracle_dba, --kenmerk9,
   teaminzet_oracle_mw, --kenmerk10,
   teaminzet_unix_linux, --kenmerk11,
   teaminzet_wpbeheer, --kenmerk12,
   teaminzet_wintel, --kenmerk13,
   wens, --kenmerk14,
   stappen_genomen, --kenmerk15,
   bpost_niet_aanmaken, --kenmerk16,
   uren_bestelling, --kenmerk17,
   teaminzet_tab, --kenmerk18,
   teaminzet_security, --kenmerk19,
   afronding_ontwerp, --kenmerk20,
   teaminzet_cloud_comp, --kenmerk21,
   service_ontwerp, --kenmerk22,
   link_naar_ontwerp, --kenmerk23,
   coord_ontwerpfase, --kenmerk24,
   kenmerk25,
   kenmerk26,
   kenmerk27,
   kenmerk28,
   kenmerk29,
   kenmerk30
)
AS
   WITH mk AS (SELECT sk.vnr, sk.mld_srtkenmerk_key, sk.mld_srtkenmerk_omschrijving, kw.mld_melding_key melding_key, kw.waarde
                 FROM (SELECT ROWNUM vnr, mld_srtkenmerk_key, mld_srtkenmerk_omschrijving
                         FROM (  SELECT sk.mld_srtkenmerk_key, sk.mld_srtkenmerk_omschrijving, sk.mld_srtkenmerk_aanmaak
                                   FROM mld_srtkenmerk sk
                                  WHERE sk.mld_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V')
                                        AND COALESCE (sk.mld_srtkenmerk_verwijder, SYSDATE) > TO_DATE ('010118', 'ddmmyy')
                                        AND EXISTS (SELECT 1 -- Alleen Intake-kenmerksoorten
                                                      FROM mld_stdmelding sm, mld_discipline md, mld_kenmerk k
                                                     WHERE sm.mld_ins_discipline_key = md.ins_discipline_key
                                                           AND md.ins_srtdiscipline_key = 121 -- Intake!
                                                           AND ((k.mld_kenmerk_niveau = 'S' AND k.mld_stdmelding_key = sm.mld_stdmelding_key)
                                                                OR (k.mld_kenmerk_niveau = 'D' AND k.mld_stdmelding_key = md.ins_discipline_key)
                                                                OR (k.mld_kenmerk_niveau = 'T' AND k.mld_stdmelding_key = 121)) -- Intake!
                                                           AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key)
                                        AND sk.mld_srtkenmerk_key != 1061 -- VERWIJDERD/Co�rdinator van Ontwerp fase
                               ORDER BY 3, 1)) sk
                      LEFT JOIN
                         (SELECT sk.mld_srtkenmerk_key, km.mld_melding_key,
                                 DECODE (sk.mld_srtkenmerk_kenmerktype,
                                         'R', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, km.mld_kenmerkmelding_waarde),
                                         'S', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, km.mld_kenmerkmelding_waarde),
                                         km.mld_kenmerkmelding_waarde)
                                    waarde
                            FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk
                           WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                                 AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key) kw
                      ON sk.mld_srtkenmerk_key = kw.mld_srtkenmerk_key)
   SELECT x.melding_key,
          x.meldingnummer,
          x.melding_regio,
          x.melding_district,
          x.melding_locatiecode,
          x.melding_locatie,
          x.melding_locatieplaats,
          x.fclt_3d_locatie_key,
          x.melding_gebouwcode,
          x.melding_gebouw,
          x.melding_verdieping,
          x.melding_ruimtenr,
          x.melding_ruimte,
          x.melding_ordernr,
          x.kostensoortgroep,
          x.kostensoort,
          x.kostenplaats,
          x.kostenplaats_oms,
          x.melder,
          x.melder_key,
          x.afdeling,
          x.afdeling_omschrijving,
          x.fclt_3d_afdeling_key,
          x.bedrijf_key,
          x.invoerder,
          x.meldbron,
          x.soortmelding,
          x.fclt_3d_discipline_key,
          x.productgroep,
          x.subproductgroep,
          x.behandelgroep,
          x.behandelaar,
          x.behandelaar_key,
          x.subproductgroepgroep,
          x.fclt_3d_discipline2_key,
          x.actieve_behandelgroep,
          x.actieve_behandelaar_key,
          x.actieve_behandelaar,
          x.melding_status,
          x.sla_nvt,
          x.sla_werkdgn,
          x.sla_werkuren,
          x.sla_respijtdgn,
          x.sla_respijturen,
          x.sla_accptdgn,
          x.sla_accpturen,
          x.plan_uitvoertijd_sla,
          x.melding_datum,
          x.melding_einddatum,
          x.melding_acceptdatum,
          x.melding_afgemeld,
          x.melding_accepted,
          x.doorlooptijd_werkdgn,
          x.doorlooptijd_werkuren,
          x.onderwerp,
          x.vomschrijving,
          x.melding_opmerking,
          x.prioriteit,
          x.prioriteittxt,
          x.rating,
          x.rating_opmerking,
          x.bolletje,
          x.accept_sla_dagen,
          x.accept_sla_uren,
          x.uitvoering_sla_dagen,
          x.uitvoering_sla_uren,
          x.afspraak_sla_dagen,
          x.afspraak_sla_uren,
          x.accept_sla_optijd,
          x.uitvoering_sla_optijd,
          x.afspraak_sla_optijd,
          x.selfservice,
          k1.waarde kenmerk1,
          k2.waarde kenmerk2,
          k3.waarde kenmerk3,
          k4.waarde kenmerk4,
          k5.waarde kenmerk5,
          k6.waarde kenmerk6,
          k7.waarde kenmerk7,
          k8.waarde kenmerk8,
          k9.waarde kenmerk9,
          k10.waarde kenmerk10,
          k11.waarde kenmerk11,
          k12.waarde kenmerk12,
          k13.waarde kenmerk13,
          k14.waarde kenmerk14,
          k15.waarde kenmerk15,
          k16.waarde kenmerk16,
          k17.waarde kenmerk17,
          k18.waarde kenmerk18,
          k19.waarde kenmerk19,
          k20.waarde kenmerk20,
          k21.waarde kenmerk21,
          k22.waarde kenmerk22,
          k23.waarde kenmerk23,
          k24.waarde kenmerk24,
          k25.waarde kenmerk25,
          k26.waarde kenmerk26,
          k27.waarde kenmerk27,
          k28.waarde kenmerk28,
          k29.waarde kenmerk29,
          k30.waarde kenmerk30
     FROM (SELECT v.* FROM mld_v_udr_melding v WHERE UPPER (v.soortmelding) = 'INTAKE') x
          LEFT JOIN mk k1 ON x.melding_key = k1.melding_key AND k1.vnr = 1
          LEFT JOIN mk k2 ON x.melding_key = k2.melding_key AND k2.vnr = 2
          LEFT JOIN mk k3 ON x.melding_key = k3.melding_key AND k3.vnr = 3
          LEFT JOIN mk k4 ON x.melding_key = k4.melding_key AND k4.vnr = 4
          LEFT JOIN mk k5 ON x.melding_key = k5.melding_key AND k5.vnr = 5
          LEFT JOIN mk k6 ON x.melding_key = k6.melding_key AND k6.vnr = 6
          LEFT JOIN mk k7 ON x.melding_key = k7.melding_key AND k7.vnr = 7
          LEFT JOIN mk k8 ON x.melding_key = k8.melding_key AND k8.vnr = 8
          LEFT JOIN mk k9 ON x.melding_key = k9.melding_key AND k9.vnr = 9
          LEFT JOIN mk k10 ON x.melding_key = k10.melding_key AND k10.vnr = 10
          LEFT JOIN mk k11 ON x.melding_key = k11.melding_key AND k11.vnr = 11
          LEFT JOIN mk k12 ON x.melding_key = k12.melding_key AND k12.vnr = 12
          LEFT JOIN mk k13 ON x.melding_key = k13.melding_key AND k13.vnr = 13
          LEFT JOIN mk k14 ON x.melding_key = k14.melding_key AND k14.vnr = 14
          LEFT JOIN mk k15 ON x.melding_key = k15.melding_key AND k15.vnr = 15
          LEFT JOIN mk k16 ON x.melding_key = k16.melding_key AND k16.vnr = 16
          LEFT JOIN mk k17 ON x.melding_key = k17.melding_key AND k17.vnr = 17
          LEFT JOIN mk k18 ON x.melding_key = k18.melding_key AND k18.vnr = 18
          LEFT JOIN mk k19 ON x.melding_key = k19.melding_key AND k19.vnr = 19
          LEFT JOIN mk k20 ON x.melding_key = k20.melding_key AND k20.vnr = 20
          LEFT JOIN mk k21 ON x.melding_key = k21.melding_key AND k21.vnr = 21
          LEFT JOIN mk k22 ON x.melding_key = k22.melding_key AND k22.vnr = 22
          LEFT JOIN mk k23 ON x.melding_key = k23.melding_key AND k23.vnr = 23
          LEFT JOIN mk k24 ON x.melding_key = k24.melding_key AND k24.vnr = 24
          LEFT JOIN mk k25 ON x.melding_key = k25.melding_key AND k25.vnr = 25
          LEFT JOIN mk k26 ON x.melding_key = k26.melding_key AND k26.vnr = 26
          LEFT JOIN mk k27 ON x.melding_key = k27.melding_key AND k27.vnr = 27
          LEFT JOIN mk k28 ON x.melding_key = k28.melding_key AND k28.vnr = 28
          LEFT JOIN mk k29 ON x.melding_key = k29.melding_key AND k29.vnr = 29
          LEFT JOIN mk k30 ON x.melding_key = k30.melding_key AND k30.vnr = 30;

CREATE OR REPLACE VIEW MNNL_V_PERSLID_NAAMTEL
(
   PERSLID_KEY,
   NAAMTEL
)
AS
     SELECT prs_perslid_key,
               prs_perslid_naam
            || ' ('
            || prs_perslid_voornaam
            || ') - '
            || prs_perslid_oslogin
            || ' - '
            || prs_perslid_telefoonnr
       FROM prs_perslid
      WHERE     prs_perslid_verwijder IS NULL
            AND prs_perslid_voornaam NOT LIKE '%Leverancier%'
            AND prs_perslid_voornaam NOT LIKE '%Algemeen%'
            AND prs_perslid_naam NOT LIKE '%test%'
            AND prs_perslid_naam NOT LIKE '%INACTIEF%'
            AND prs_perslid_oslogin NOT LIKE '%LEV_%'
            AND prs_perslid_email LIKE '%@mn.nl%'
   ORDER BY prs_perslid_naam;

CREATE OR REPLACE VIEW mnnl_v_rap_overwerk
(
   res_key,
   res_rsv_ruimte_key,
   datum_overwerk,
   start_tijd,
   eind_tijd,
   soort_overwerk,
   verdieping,
   interne_deelnemers,
   externe_deelnemers
)
AS
  SELECT DISTINCT
          rsv.res_reservering_key,
          rsv.res_rsv_ruimte_key,
          TRUNC (rsv.res_rsv_ruimte_van),
          TO_CHAR (rsv.res_rsv_ruimte_van, 'HH24:MI'),
          TO_CHAR (rsv.res_rsv_ruimte_tot, 'HH24:MI'),
          ra.res_activiteit_omschrijving,
          x.fac_usrdata_omschr,
          pers.deelnemer,
          (SELECT LISTAGG (bez_afspraak_naam || ' (' || bez_afspraak_bedrijf || ')' , ', ')
                     WITHIN GROUP (ORDER BY bez_afspraak_naam)
             FROM bez_bezoekers b, bez_afspraak a
            WHERE b.bez_afspraak_key = a.bez_afspraak_key
                  AND a.res_rsv_ruimte_key = rsv.res_rsv_ruimte_key) -- Externe deelnemers
     FROM res_rsv_ruimte rsv,
          res_activiteit ra,
          res_kenmerkwaarde rkw,
          mnnl_v_perslid_naamtel pt,
          (SELECT DISTINCT f.fac_usrdata_omschr, f.fac_usrdata_key
             FROM fac_usrdata f, res_kenmerk rk, res_kenmerkwaarde rkw
            WHERE     rkw.res_kenmerk_key = rk.res_kenmerk_key
                  AND rk.res_srtkenmerk_key = 164                -- Verdieping
                  AND rkw.res_kenmerkwaarde_verwijder IS NULL
                  AND f.fac_usrtab_key = 621) x,
          (SELECT DISTINCT
                    LISTAGG (pt.naamtel, ', ')
                       WITHIN GROUP (ORDER BY pt.naamtel)
                       deelnemer,
                    rkw.res_rsv_ruimte_key
               FROM mnnl_v_perslid_naamtel pt,
                    res_kenmerk rk,
                    res_kenmerkwaarde rkw
              WHERE     rkw.res_kenmerk_key = rk.res_kenmerk_key
                    AND rk.res_srtkenmerk_key = 162              -- Deelnemer
                    AND rkw.res_kenmerkwaarde_verwijder IS NULL
                    AND rkw.res_kenmerkreservering_waarde = pt.perslid_key
           GROUP BY rkw.res_rsv_ruimte_key) pers
    WHERE     ra.res_activiteit_key IN (210, 211) -- Overwerk, Overwerk Weekend
          AND rsv.res_activiteit_key = ra.res_activiteit_key
          AND rsv.res_rsv_ruimte_key = rkw.res_rsv_ruimte_key
          AND x.fac_usrdata_key =
                fac.safe_to_number (rkw.res_kenmerkreservering_waarde)
          AND pers.res_rsv_ruimte_key = rkw.res_rsv_ruimte_key;

CREATE OR REPLACE VIEW mnnl_v_ins_qrc_ruimte
(
   FCLT_3D_LOCATIE_KEY,
   FCLT_F_LOCATIE,
   FCLT_F_GEBOUW,
   PLAATS,
   SOORTRUIMTE,
   INS_ALG_RUIMTE_TYPE,
   ALG_DISTRICT_KEY,
   ALG_RUIMTE_KEY,
   HIDE_F_BOOKMARK_ID
)
AS
   SELECT l.alg_locatie_key,
          l.alg_locatie_omschrijving,
          x.alg_gebouw_naam,
          SUBSTR (x.alg_plaatsaanduiding, 7) plaats,
          x.alg_ruimte_omschrijving soortruimte,
          sr.alg_srtruimte_omschrijving,
          l.alg_district_key,
          x.alg_ruimte_key,
          b.fac_bookmark_id
     FROM alg_v_allonrgoed_gegevens x,
          alg_locatie l,
          alg_district di,
          fac_bookmark b,
          alg_ruimte r,
          alg_srtruimte sr
    WHERE     b.fac_bookmark_naam = 'QRC naar ruimte'
          AND x.alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_srtruimte_key = sr.alg_srtruimte_key
          AND x.alg_locatie_key = l.alg_locatie_key
          AND l.alg_district_key = di.alg_district_key;

-- Dummy export NACHTWERK!
-- MNNL#54328: Automatisch verwerken alle afgemelde meldingen.
CREATE OR REPLACE PROCEDURE mnnl_select_nachtwerk (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2)
AS
   -- Auto-afmelden alle afgemelde meldingen in de nacht na afmelden!
   CURSOR c_mldver
   IS
        SELECT '[' || TO_CHAR (m.mld_melding_key) || '] ' aanduiding,
               m.mld_melding_key
          FROM mld_melding m
         WHERE m.mld_melding_status = 5                            -- Afgemeld
      ORDER BY m.mld_melding_key;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_bedrijf_key    NUMBER;
   v_count          NUMBER;
BEGIN
   v_count := 0;

   -- Auto-verwerken alle afgemelde meldingen in de nacht na afmelden!
   FOR rec IN c_mldver
   LOOP
      BEGIN
         v_errormsg := 'Fout auto-verwerken';

         MLD.setmeldingstatus (rec.mld_melding_key, 6, NULL);
         v_count := v_count + 1;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, '');
            COMMIT;
      END;
   END LOOP;

   fac.writelog (p_applname, 'S', 'Meldingen/#verwerkt: ' || TO_CHAR (v_count), '');
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.writelog (p_applname, 'E', 'Proces NACHTWERK afgebroken!', v_errormsg);
END mnnl_select_nachtwerk;
/

-- MNNL#53390: Inzicht in voortgang van specifiek geidentificeerde workflows.
CREATE OR REPLACE VIEW mnnl_v_rap_wf_progress
(
   wf,
   melding_key,
   melding_datum,
   melding_onderwerp,
   melding_status,
   melding_behandelaar,
   max_stap_melding_key,
   max_stap_melding_datum,
   max_stap_melding_onderwerp,
   max_stap_melding_status,
   max_stap_melding_behandelaar,
   max_stap_stdmelding_key,
   max_stap_stdmelding_oms,
   melder,
   melder_afdeling_code,
   melder_afdeling_oms
)
AS
   SELECT (SELECT mld_workflowstep_omschrijving FROM mld_workflowstep WHERE mld_workflowstep_key = x.mld_workflowstep_key)
             wf,
          x.mld_melding_key,
          x.mld_melding_datum,
          x.mld_melding_onderwerp,
          x.mld_statuses_omschrijving melding_status,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = x.mld_melding_behandelaar_key)
             melding_behandelaar,
          stap.mld_melding_key max_stap_melding_key,
          stap.mld_melding_datum max_stap_melding_datum,
          stap.mld_melding_onderwerp max_stap_melding_onderwerp,
          stap.mld_statuses_omschrijving max_stap_melding_status,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = stap.mld_melding_behandelaar_key)
             max_stap_melding_behandelaar,
          stap.mld_stdmelding_key max_stap_stdmelding_key,
          stap.mld_stdmelding_omschrijving max_stap_stdmelding_oms,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = x.prs_perslid_key)
             melder,
          x.prs_afdeling_naam,
          x.prs_afdeling_omschrijving
     FROM    (SELECT m.mld_melding_key,
                     m.mld_melding_datum,
                     m.mld_melding_onderwerp,
                     ms.mld_statuses_omschrijving,
                     m.mld_melding_behandelaar_key,
                     m.mld_workflowstep_key,
                     p.prs_perslid_key,
                     a.prs_afdeling_naam,
                     a.prs_afdeling_omschrijving
                FROM mld_melding m, mld_statuses ms, prs_perslid p, prs_afdeling a
               WHERE m.mld_workflowstep_key IN (156, 325, 331, 335) -- Intake business verzoek aan IV/Problem onderzoek/Problem known error/Problem performance
                     AND m.mld_melding_status NOT IN (1, 5, 6) -- Lopende WFs (eerste WF-stap nog niet gesloten)
                     AND m.mld_melding_status = ms.mld_statuses_key
                     AND m.prs_perslid_key = p.prs_perslid_key
                     AND p.prs_afdeling_key = a.prs_afdeling_key) x
          LEFT JOIN
             (SELECT m.mld_melding_start_key,
                     m.mld_melding_key,
                     m.mld_melding_datum,
                     m.mld_melding_onderwerp,
                     ms.mld_statuses_omschrijving,
                     m.mld_melding_behandelaar_key,
                     sm.mld_stdmelding_key,
                     sm.mld_stdmelding_omschrijving
                FROM mld_melding m, mld_statuses ms, mld_stdmelding sm
               WHERE m.mld_workflowstep_key IS NOT NULL -- Beschouw alleen WF-stappen
                     AND m.mld_stdmelding_key NOT IN (921, 1041) -- Uitsluiten specifieke "dangling" Intake-stappen
                     AND m.mld_melding_status = ms.mld_statuses_key
                     AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM mld_melding
                             WHERE mld_workflowstep_key IS NOT NULL -- Beschouw alleen WF-stappen
                                   AND mld_stdmelding_key NOT IN (921, 1041) -- Uitsluiten specifieke "dangling" Intake-stappen
                                   AND mld_melding_start_key = m.mld_melding_start_key
                                   AND mld_melding_key > m.mld_melding_key)) stap
          ON x.mld_melding_key = stap.mld_melding_start_key;

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