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

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

--=============================================================================
-- NOTIFICATIEJOBS
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
-- CUST01 Notificatie voor kwaliteitscontroles na afloop (after sales): 7 dgn
-- Concept
-- Is eenmalig in combinatie met het notificatie-interval: meldingen/reserveringen die
-- in aanmerking komen voor KTO en in de afgelopen 7dagen zijn afgemeld/geleverd worden
-- in de notificatiequeueu gezet. Deze notificatiejob MOET DUS EEN INTERVAL
-- GEBRUIKEN DAT NIET KORTER IS DAN 7 dagen!
-- Maakt gebruik van wat vaste key voor KTO verzonden -kenmerk
-- Er is geen onderscheid tussen KCC en FCC, de XSL onderscheidt eventueel
-- De percentage en drempelwaarde voor de steekproef worden bepaald uit de gegevens
-- bij de kostensoort.
-- Vooralsnog kent FCC geen KTO's omdat kenmerk niet bij FCC meldingen aangemaakt is.
-- De procedure rwsn_select_kto_kandidaten bepaalt voor welke meldingen een KTO
-- verzonden wordt.
/* Formatted on 23-7-2010 12:52:33 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_noti_qcard
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT   'CUST01',
            NULL,
            m.prs_perslid_key,
            'Verzoek om mee te werken aan Klanttevredenheidsonderzoek',
            m.mld_melding_key,
            NULL
     FROM   mld_melding m, mld_kenmerk k, mld_kenmerkmelding km, ins_tab_discipline d, mld_stdmelding s
    WHERE       s.mld_ins_discipline_key = d.ins_discipline_key
            AND m.mld_stdmelding_key = s.mld_stdmelding_key
            AND m.mld_melding_key = km.mld_melding_key
            AND km.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_srtkenmerk_key = 121
            AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) > SYSDATE - 7
   UNION ALL
   SELECT   'CUST03',
            NULL,
            rrr.res_rsv_ruimte_contact_key,
            'Verzoek om mee te werken aan Klanttevredenheidsonderzoek',
            rrr.res_reservering_key,
            rrr.res_rsv_ruimte_key
     FROM   res_rsv_ruimte rrr,
            res_ruimte_opstelling ro,
            res_ruimte rr,
            res_kenmerk k,
            res_kenmerkwaarde kw,
            ins_tab_discipline d
    WHERE       rrr.res_rsv_ruimte_verwijder IS NULL
            AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
            AND ro.res_ruimte_key = rr.res_ruimte_key
            AND rr.res_discipline_key = d.ins_discipline_key
            AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key
            AND kw.res_kenmerk_key = k.res_kenmerk_key
            AND k.res_srtkenmerk_key = 22
            AND rrr.res_rsv_ruimte_tot > SYSDATE - 7;

-------------------------------------------------------------------------------
-- Notificatie voor IKD contracten die in rappel komen.
-- Voorwaarde is dat active verlenging (key 21) op JA staat.
-------------------------------------------------------------------------------
CREATE OR REPLACE VIEW rwsn_v_noti_contract_reminder (
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
   )
AS
   SELECT 'CNTMAI',
          '',
          fac.safe_to_number (kc2.cnt_kenmerkcontract_waarde),
             'Rappel: Contract '
          || c.cnt_contract_nummer_intern
          || ' ('
          || c.cnt_contract_omschrijving
          || ' '
          || b.prs_bedrijf_naam
          || ')'
          || ' moet uiterlijk per '
          || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
                      'DD-MM-YYYY')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key,
          c.cnt_contract_nummer_intern,
          cnt.cnt_getopzegdatum (c.cnt_contract_key),
          NULL
   FROM cnt_v_aanwezigcontract c,
        cnt_kenmerkcontract kc1,
        cnt_kenmerk k1,
        cnt_kenmerkcontract kc2,
        cnt_kenmerk k2,
        prs_bedrijf b
   WHERE     c.cnt_contract_key = kc1.cnt_contract_key
         AND kc1.cnt_kenmerk_key = k1.cnt_kenmerk_key
         AND k1.cnt_srtkenmerk_key = 21          -- Actie nodig bij verlenging
         AND UPPER (kc1.cnt_kenmerkcontract_waarde) = 'JA'
         AND c.cnt_contract_key = kc2.cnt_contract_key
         AND kc2.cnt_kenmerk_key = k2.cnt_kenmerk_key
         AND k2.cnt_srtkenmerk_key = 63              -- Contracttoezichthouder
         AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
         AND TRUNC (cnt.cnt_getrappeldatum (c.cnt_contract_key)) = TRUNC (SYSDATE);

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

-------------------------------------------------------------------------------
-- IMPORTFUNCTIES - IDM_ORG
-------------------------------------------------------------------------------
/* Formatted on 20-10-2017 15:48:512 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_import_idm_org (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   v_newline          VARCHAR2 (1000);                          -- Import line
   v_fielddelimitor   VARCHAR2 (1);                         -- Field seperator
   v_errormsg         VARCHAR2 (1000);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   -- De importvelden
   v_begindatum       VARCHAR2 (100);
   v_einddatum        VARCHAR2 (100);
   v_naam             VARCHAR2 (100);
   v_omschrijving     VARCHAR2 (100);
   v_parent           VARCHAR2 (100);
   v_count            NUMBER := 0;
   header_found       BOOLEAN;
   endmrk_found       BOOLEAN;
BEGIN
   -- Init
   header_found := FALSE;
   endmrk_found := FALSE;
   v_fielddelimitor := ';';

   -- Clear my previous imported rows
   DELETE FROM rwsn_imp_idm_org WHERE COALESCE (imp_log_run, -1) <> p_import_key;
   COMMIT;

   FOR rec1 IN c_cursor
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;

         IF SUBSTR (v_newline, 1, 3) = '﻿'
         THEN
            -- EF BB BF aangetroffen
            fac.imp_writelog (p_import_key, 'W',
                              'Byte Order Mark aangetroffen',
                              'Bestand heeft onbehandeld UTF-8 formaat.');
            v_newline := SUBSTR (v_newline, 4);
         END IF;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_naam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_parent);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_begindatum);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_einddatum);

         -- Skip until a valid header is found
         IF     v_naam = 'OrganisatieEenheidCode'
            AND v_omschrijving = 'OrganisatieEenheidNaam'
            AND v_parent = 'BovenliggendeOrganisatieEenheidCode'
            AND v_begindatum = 'DatumIngangGeldigheid'
            AND v_einddatum = 'DatumEindeGeldigheid'
         THEN
            -- Sla de kopregel over.
            header_found := TRUE;
         ELSIF (header_found)
         THEN
            IF UPPER (v_naam) = '==EINDE==' AND fac.safe_to_number (v_omschrijving) = v_count
            THEN
               endmrk_found := TRUE;
            ELSIF (NOT endmrk_found)
            THEN
               INSERT INTO rwsn_imp_idm_org (afdelingscode,
                                             omschrijving,
                                             parentcode,
                                             begindatum,
                                             einddatum,
                                             imp_log_run)
                   VALUES (SUBSTR (v_naam, 1, 10),
                           SUBSTR (v_omschrijving, 1, 60),
                           SUBSTR (v_parent, 1, 10),
                           TO_DATE (SUBSTR (v_begindatum, 1, 8), 'YYYYMMDD'),
                           TO_DATE (SUBSTR (v_einddatum, 1, 8), 'YYYYMMDD'),
                           p_import_key);

               v_count := v_count + 1;
            END IF;
         END IF;
         COMMIT;
      END;
   END LOOP;

   IF (NOT header_found)
   THEN
      fac.imp_writelog (p_import_key, 'E',
                        'Geen geldige header aangetroffen',
                        'Bestand is geen geldig IDM_ORG importbestand.');
   END IF;

   IF (header_found AND NOT endmrk_found)
   THEN
      fac.imp_writelog (p_import_key, 'E',
                        'Geen geldige eindmarkering aangetroffen',
                        'Bestand is geen geldig IDM_ORG importbestand.');

      -- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
      DELETE FROM rwsn_imp_idm_org;
   END IF;

   -- Clear my previous imported rows
   DELETE FROM fac_imp_file 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, '');

      -- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
      DELETE FROM rwsn_imp_idm_org;
END;
/

/* Formatted on 8-8-2013 15:42:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_update_idm_org (p_import_key IN NUMBER)
AS
   -- Let op:
   -- De afdelingsboom is N levels diep
   -- Levels 1 en 2 leiden tot RWS niveau binnen Verkeer en Waterstaat en zijn verder irrelevant
   -- We beschouwen niveau 3 t/m 10 (nu) en slaan dat plat tot 3 t/m 7, d.i. de lagere niveaus
   -- komen naast hun parent te hangen, vooralsnog. (to be confirmed)
   -- Vooraf worden de gelijknamige kostenplaatsen aangemaakt, die zijn plat, en worden verwezen
   -- door de afdelingen
   -- Danny Alvares 24/9/2008 Trusted-ID/Verkeer en Waterstaat:
   --   enkel organisaties die actief zijn worden opgenomen in het CSV bestand;
   --   organisaties die een 'DatumEindeGeldigheid' hebben die in het verleden ligt worden
   --   eruit gefilterd. Als de organisatie eenheid overgenomen in Facilitor niet meer voorkomt
   --   in het CSV bestand is dus de organisatie eenheid komen te vervallen.
   --
   -- RWSN#20028: Gewijzigd uitgangspunt om afbeelding in SAP voortaan
   -- stuctureel gelijk te houden met die in IDM en daarmee Facilitor.
   -- Hierbij geldt dat er slechts 5 niveaus zijn (excl. het bedrijf):
   -- 1. Dienst/HID
   -- 2. Directie
   -- 3. Afdeling
   -- 4. Team
   -- 5. Cluster
   -- Mochten er toch nog "lagere" regionen bestaan, dan worden deze
   -- toegevoegd worden op het cluster-niveau.
   CURSOR cafdelingsboom
   IS
          SELECT LEVEL idm_lev,
                 DECODE (LEVEL, 1, 0, 2, 0, 3, 1, 4, 2, 5, 3, 6, 4, 7, 5, 5)
                    fac_lev,
                 afdelingscode,
                 omschrijving,
                 parentcode,
                 begindatum,
                 einddatum
            FROM rwsn_imp_idm_org
           WHERE afdelingscode IS NOT NULL                 -- Geen lege regels
      CONNECT BY PRIOR afdelingscode = parentcode
      START WITH parentcode = '00000000'
        ORDER BY LEVEL;

   CURSOR cverplichtingen (pcafdeling IN NUMBER)
   IS
      SELECT pv.prs_afdeling_key,
             t.fac_message_text,
             item,
             item_key,
             d.prs_afdeling_naam
        FROM prs_v_afd_verplichting pv, fac_message t, prs_afdeling d
       WHERE pv.prs_afdeling_key = pcafdeling
             AND d.prs_afdeling_key = pv.prs_afdeling_key
             AND pv.fac_message_code = t.fac_message_code;

   c_rws_bedrijf_key    NUMBER := 2;                    -- Key van RWS-bedrijf
   c_knmi_bedrijf_key   NUMBER := 3;                   -- Key van KNMI-bedrijf
   c_km_vervaldatum     VARCHAR2 (30) := 'VERVALDATUM'; -- VERVALDATUM-kenmerk
   v_errormsg           VARCHAR2 (200);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   currentversion       fac_module.fac_module_version%TYPE;
   l_vervalkm_key       NUMBER (10);            -- Key van VERVALDATUM-kenmerk
   lkostenplaatskey     prs_kostenplaats.prs_kostenplaats_key%TYPE;
   lafdelingkey         NUMBER (10);
   l_cur_lev            NUMBER (10);
   l_cur_parentkey      NUMBER (10);
   l_new_parentkey      NUMBER (10);
   l_new_parparcode     VARCHAR2 (10);
   l_vervalkl_key       NUMBER (10);        -- Key van VERVALDATUM-kenmerklink
   l_vervalkl_waarde    DATE;            -- Waarde van VERVALDATUM-kenmerklink
   l_impcountact        NUMBER;
   l_impcountpas        NUMBER;
   l_oldcountkp         NUMBER;
   l_oldcountafd        NUMBER;
   l_vervcountkp        NUMBER;
   l_reancountkp        NUMBER;
   l_vervcountafd       NUMBER;
   l_reancountafd       NUMBER;
   l_newcountkp         NUMBER;
   l_newcountafd        NUMBER;
BEGIN
   SELECT MAX (fac_module_version) INTO currentversion FROM fac_module;

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

   -- How many active/passive records are imported?
   SELECT COUNT ( * )
     INTO l_impcountact
     FROM rwsn_imp_idm_org
    WHERE einddatum > TRUNC (SYSDATE);

   SELECT COUNT ( * )
     INTO l_impcountpas
     FROM rwsn_imp_idm_org
    WHERE einddatum < TRUNC (SYSDATE);

   -- How many active records are now present?
   SELECT COUNT ( * )
     INTO l_oldcountkp
     FROM prs_kostenplaats
    WHERE prs_kostenplaats_verwijder IS NULL;

   SELECT COUNT ( * )
     INTO l_oldcountafd
     FROM prs_afdeling
    WHERE prs_afdeling_verwijder IS NULL;

   -- Check #regels, stop als onvoldoende (= bestaand maar ongeldig bestand)
   IF l_impcountact + l_impcountpas = 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Het importbestand is ongeldig. Import afgebroken.', '');
      RETURN;
   END IF;

   -- Bestaat afdelingskenmerk VERVALDATUM?
   BEGIN
      SELECT k.prs_kenmerk_key
        INTO l_vervalkm_key
        FROM prs_kenmerk k
       WHERE k.prs_kenmerk_niveau = 'A'
             AND k.prs_kenmerk_upper = c_km_vervaldatum;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         fac.imp_writelog (p_import_key, 'E', 'Afdelingskenmerk VERVALDATUM niet gedefinieerd. Import afgebroken.', '');
         RETURN;
   END;

   FOR rc IN cafdelingsboom
   LOOP
      -- Bestaat de kostenplaats al?
      BEGIN
         SELECT prs_kostenplaats_key
           INTO lkostenplaatskey
           FROM prs_kostenplaats
          WHERE prs_kostenplaats_upper = rc.afdelingscode
                AND prs_kostenplaats_verwijder IS NULL;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            lkostenplaatskey := -1;
      END;

      -- Bestaat de afdeling al?
      BEGIN
         SELECT a.prs_afdeling_key, ab.niveau, a.prs_afdeling_parentkey
           INTO lafdelingkey, l_cur_lev, l_cur_parentkey
           FROM prs_afdeling a, prs_v_afdeling_boom ab
          WHERE a.prs_afdeling_upper = rc.afdelingscode
                AND a.prs_afdeling_verwijder IS NULL
                AND a.prs_afdeling_key = ab.prs_afdeling_key;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            lafdelingkey := -1;
            l_cur_lev := -1;
            l_cur_parentkey := -1;
      END;

      l_new_parentkey := -1;

      DBMS_OUTPUT.put_line (rc.afdelingscode);

      IF lkostenplaatskey = -1
      THEN
         BEGIN
            INSERT INTO prs_kostenplaats (prs_kostenplaats_nr,
                                          prs_kostenplaats_omschrijving,
                                          prs_kostenplaats_module,
                                          prs_kostenplaats_begin,
                                          prs_kostenplaats_eind)
                VALUES (rc.afdelingscode,
                        rc.omschrijving,
                        'PRS',
                        rc.begindatum,
                        rc.einddatum)
             RETURNING prs_kostenplaats_key
                  INTO lkostenplaatskey;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               fac.imp_writelog (p_import_key, 'W',
                                 SUBSTR ('Kostenplaats kan niet worden toegevoegd. ' || oracle_err_mes, 1, 1000),
                                 rc.afdelingscode || '/' || rc.omschrijving);
         END;
      END IF;

      -- Alle niveaus zitten in cursor tbv. bovenstaande kostenplaatsen, maar
      -- bij de mapping naar Facilitor-afdelingen pakken we de IDM-afdelingen
      -- vanaf 3 (= Facilitor rootniveau).
      IF rc.idm_lev >= 3 AND lkostenplaatskey <> -1
      THEN
         IF lafdelingkey = -1                 -- Nieuwe afdeling -> toevoegen!
         THEN
            BEGIN
               IF rc.fac_lev = 1 -- Ingelezen afdeling betreft het rootniveau!
               THEN
                  --IF rc.afdelingscode = '63562065'
                  IF rc.omschrijving LIKE 'KNMI%'  -- Toekomstvaster dan code?
                  THEN
                     INSERT INTO prs_afdeling (prs_afdeling_naam,
                                               prs_afdeling_omschrijving,
                                               prs_bedrijf_key,
                                               prs_afdeling_parentkey,
                                               prs_kostenplaats_key)
                        VALUES (rc.afdelingscode,
                                rc.omschrijving,
                                c_knmi_bedrijf_key,               -- KNMI-key!
                                NULL,
                                lkostenplaatskey)
                     RETURNING prs_afdeling_key INTO lafdelingkey;
                  ELSE                                                  -- RWS
                     INSERT INTO prs_afdeling (prs_afdeling_naam,
                                               prs_afdeling_omschrijving,
                                               prs_bedrijf_key,
                                               prs_afdeling_parentkey,
                                               prs_kostenplaats_key)
                        VALUES (rc.afdelingscode,
                                rc.omschrijving,
                                c_rws_bedrijf_key,                 -- RWS-key!
                                NULL,
                                lkostenplaatskey)
                     RETURNING prs_afdeling_key INTO lafdelingkey;
                  END IF;

                  -- RWSN#27015: Kostenplaatsgroep aanmaken als deze nog niet
                  -- bestaat!
                  INSERT INTO prs_kostenplaatsgrp (prs_kostenplaatsgrp_oms)
                     SELECT afd.prs_afdeling_naam
                       FROM prs_afdeling afd, prs_kostenplaats kpn
                      WHERE afd.prs_afdeling_key = lafdelingkey
                            AND afd.prs_kostenplaats_key = kpn.prs_kostenplaats_key
                            AND NOT EXISTS
                                  (SELECT 1
                                     FROM prs_kostenplaatsgrp
                                    WHERE prs_kostenplaatsgrp_oms = afd.prs_afdeling_naam);
               ELSIF rc.idm_lev <= 7  -- Afdeling op Facilitor-niveau 2 t/m 5!
               THEN
                  SELECT prs_afdeling_key
                    INTO l_new_parentkey
                    FROM prs_afdeling
                   WHERE prs_afdeling_naam = rc.parentcode AND prs_afdeling_verwijder IS NULL;

                  INSERT INTO prs_afdeling (prs_afdeling_naam,
                                            prs_afdeling_omschrijving,
                                            prs_bedrijf_key,
                                            prs_afdeling_parentkey,
                                            prs_kostenplaats_key)
                     VALUES (rc.afdelingscode,
                             rc.omschrijving,
                             NULL,
                             l_new_parentkey,
                             lkostenplaatskey)
                  RETURNING prs_afdeling_key INTO lafdelingkey;
               ELSE        -- Omhoog geschoven afdeling op Facilitor-niveau 5!
                  -- Bepaal code van parent van parent!
                  SELECT parentcode
                    INTO l_new_parparcode
                    FROM rwsn_imp_idm_org
                   WHERE afdelingscode = rc.parentcode;

                  -- Bepaal key van parent van (soms zelf verschoven) parent!
                  SELECT prs_afdeling_key
                    INTO l_new_parentkey
                    FROM prs_afdeling
                   WHERE prs_afdeling_naam = l_new_parparcode AND prs_afdeling_verwijder IS NULL;

                  -- Doordat cursor van hoog naar laag door organisatie loopt,
                  -- komen afdelingen vanaf IDM-niveau 8 keurig onder de gewenste
                  -- Facilitor-niveau 4 afdeling te hangen.
                  INSERT INTO prs_afdeling (prs_afdeling_naam,
                                            prs_afdeling_omschrijving,
                                            prs_bedrijf_key,
                                            prs_afdeling_parentkey,
                                            prs_kostenplaats_key)
                     VALUES (rc.afdelingscode,
                             rc.omschrijving,
                             NULL,
                             l_new_parentkey,
                             lkostenplaatskey)
                  RETURNING prs_afdeling_key INTO lafdelingkey;
               END IF;

               fac.imp_writelog (p_import_key, 'I',
                                 'Afdeling is toegevoegd.',
                                 rc.afdelingscode || '/' || rc.omschrijving || ' (' || rc.parentcode || ')');
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  fac.imp_writelog (p_import_key, 'W',
                                    SUBSTR ('Afdeling kan niet worden toegevoegd. ' || oracle_err_mes, 1, 1000),
                                    rc.afdelingscode || '/' || rc.omschrijving || ' (' || rc.parentcode || ')');
            END;
         ELSE                  -- Bestaande afdeling -> bijwerken (misschien)!
            BEGIN
               -- Zonodig bijwerken omschrijving (deze kon eerder vervallen
               -- zijn) en/of omhangen naar de juiste plek in de boom.
               IF rc.fac_lev = 1 -- Ingelezen afdeling betreft het rootniveau!
               THEN
                  --IF rc.afdelingscode = '63562065'
                  IF rc.omschrijving LIKE 'KNMI%'  -- Toekomstvaster dan code?
                  THEN
                     UPDATE prs_afdeling
                        SET prs_afdeling_omschrijving = rc.omschrijving,
                            prs_bedrijf_key = c_knmi_bedrijf_key, -- KNMI-key!
                            prs_afdeling_parentkey = NULL
                      WHERE prs_afdeling_key = lafdelingkey
                            AND (COALESCE (prs_afdeling_omschrijving, '-') <> rc.omschrijving -- Oms. gewijzigd?
                                 OR prs_afdeling_parentkey IS NOT NULL); -- Niveau gewijzigd?
                  ELSE
                     UPDATE prs_afdeling
                        SET prs_afdeling_omschrijving = rc.omschrijving,
                            prs_bedrijf_key = c_rws_bedrijf_key,   -- RWS-key!
                            prs_afdeling_parentkey = NULL
                      WHERE prs_afdeling_key = lafdelingkey
                            AND (COALESCE (prs_afdeling_omschrijving, '-') <> rc.omschrijving -- Oms. gewijzigd?
                                 OR prs_afdeling_parentkey IS NOT NULL); -- Niveau gewijzigd?
                  END IF;

                  -- RWSN#27015: Kostenplaatsgroep aanmaken als deze nog niet
                  -- bestaat!
                  INSERT INTO prs_kostenplaatsgrp (prs_kostenplaatsgrp_oms)
                     SELECT afd.prs_afdeling_naam
                       FROM prs_afdeling afd, prs_kostenplaats kpn
                      WHERE afd.prs_afdeling_key = lafdelingkey
                            AND afd.prs_kostenplaats_key = kpn.prs_kostenplaats_key
                            AND NOT EXISTS
                                    (SELECT 1
                                       FROM prs_kostenplaatsgrp
                                      WHERE prs_kostenplaatsgrp_oms = afd.prs_afdeling_naam);
               ELSIF rc.idm_lev <= 7  -- Afdeling op Facilitor-niveau 2 t/m 5!
               THEN
                  -- Bepaal key van parent!
                  SELECT prs_afdeling_key
                    INTO l_new_parentkey
                    FROM prs_afdeling
                   WHERE prs_afdeling_naam = rc.parentcode AND prs_afdeling_verwijder IS NULL;

                  UPDATE prs_afdeling
                     SET prs_afdeling_omschrijving = rc.omschrijving,
                         prs_bedrijf_key = NULL,
                         prs_afdeling_parentkey = l_new_parentkey
                   WHERE prs_afdeling_key = lafdelingkey
                         AND (COALESCE (prs_afdeling_omschrijving, '-') <> rc.omschrijving -- Oms. gewijzigd?
                              OR COALESCE (prs_afdeling_parentkey, -1) <> l_new_parentkey); -- Parent gewijzigd?
               ELSE        -- Omhoog geschoven afdeling op Facilitor-niveau 5!
                  -- Bepaal code van parent van parent!
                  SELECT parentcode
                    INTO l_new_parparcode
                    FROM rwsn_imp_idm_org
                   WHERE afdelingscode = rc.parentcode;

                  -- Bepaal key van parent van (soms zelf verschoven) parent!
                  SELECT prs_afdeling_key
                    INTO l_new_parentkey
                    FROM prs_afdeling
                   WHERE prs_afdeling_naam = l_new_parparcode AND prs_afdeling_verwijder IS NULL;

                  -- Doordat cursor van hoog naar laag door organisatie loopt,
                  -- komen afdelingen vanaf IDM-niveau 8 keurig onder de gewenste
                  -- Facilitor-niveau 4 afdeling te hangen.
                  UPDATE prs_afdeling
                     SET prs_afdeling_omschrijving = rc.omschrijving,
                         prs_bedrijf_key = NULL,
                         prs_afdeling_parentkey = l_new_parentkey
                   WHERE prs_afdeling_key = lafdelingkey
                         AND (COALESCE (prs_afdeling_omschrijving, '-') <> rc.omschrijving -- Oms. gewijzigd?
                              OR COALESCE (prs_afdeling_parentkey, -1) <> l_new_parentkey); -- Parent gewijzigd?
               END IF;

               IF rc.fac_lev <> l_cur_lev OR l_new_parentkey <> l_cur_parentkey
               THEN
                  fac.imp_writelog (p_import_key, 'I',
                                    'Afdeling is omgehangen naar level=' || TO_CHAR (rc.fac_lev) || '.',
                                    rc.afdelingscode || '/' || rc.omschrijving || ' (' || rc.parentcode || ')');
               END IF;
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
                  fac.imp_writelog (p_import_key, 'W',
                                    SUBSTR ('Afdeling kan niet worden bijgewerkt. ' || oracle_err_mes, 1, 1000),
                                    rc.afdelingscode || '/' || rc.omschrijving || ' (' || rc.parentcode || ')');
            END;
         END IF;

         IF rc.einddatum IS NOT NULL
         THEN
            BEGIN
               -- Heeft afdeling reeds een VERVALDATUM-waarde?
               SELECT kl.prs_kenmerklink_key, TO_DATE (kl.prs_kenmerklink_waarde, 'dd-mm-yyyy')
                 INTO l_vervalkl_key, l_vervalkl_waarde
                 FROM prs_v_aanwezigkenmerklink kl
                WHERE kl.prs_link_key = lafdelingkey
                      AND kl.prs_kenmerk_key = l_vervalkm_key;

               -- Indien gewijzigd, dan deze waarde bijwerken!
               IF rc.einddatum != l_vervalkl_waarde
               THEN
                  UPDATE prs_kenmerklink
                     SET prs_kenmerklink_waarde = l_vervalkl_waarde
                   WHERE prs_kenmerklink_key = l_vervalkl_key;
               END IF;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  INSERT INTO prs_kenmerklink (prs_link_key,
                                               prs_kenmerklink_niveau,
                                               prs_kenmerk_key,
                                               prs_kenmerklink_waarde)
                      VALUES (lafdelingkey,
                              'A',
                              l_vervalkm_key,
                              TO_CHAR (rc.einddatum, 'dd-mm-yyyy'));
            END;
         END IF;
         COMMIT;
      END IF;
   END LOOP;

   -- RWSN#27015: Zorg dat alle afdelingskostenplaatsen in de juiste groep
   --             blijven of komen te zitten!
   UPDATE prs_kostenplaats kp
      SET kp.prs_kostenplaatsgrp_key =
             (SELECT kpg.prs_kostenplaatsgrp_key
                FROM prs_afdeling afdx, prs_v_afdeling_boom ab, prs_afdeling afd1, prs_kostenplaatsgrp kpg
               WHERE afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                     AND afdx.prs_afdeling_key = ab.prs_afdeling_key
                     AND ab.prs_afdeling_key1 = afd1.prs_afdeling_key
                     AND afd1.prs_afdeling_naam = kpg.prs_kostenplaatsgrp_oms)
    WHERE NOT EXISTS
             (SELECT 1
                FROM prs_afdeling afdx, prs_v_afdeling_boom ab, prs_afdeling afd1, prs_kostenplaatsgrp kpg
               WHERE afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                     AND afdx.prs_afdeling_key = ab.prs_afdeling_key
                     AND ab.prs_afdeling_key1 = afd1.prs_afdeling_key
                     AND afd1.prs_afdeling_naam = kpg.prs_kostenplaatsgrp_oms
                     AND kpg.prs_kostenplaatsgrp_key = kp.prs_kostenplaatsgrp_key);
   COMMIT;

   -- Handmatig aangemaakte kostenplaatsen/afdelingen niet meer laten vervallen!
   -- Tot RWSN39: Prefix wat niet meer voorkomt in importbestand met VERVALLEN.
   -- Per RWSN39: Prefix entries met een Vervaldatum in verleden met VERVALLEN.
   -- Per RWSN39: Verwijder prefix voor entries met een Vervaldatum in toekomst?
   SELECT COUNT ( * )
     INTO l_vervcountkp
     FROM prs_kostenplaats
    WHERE prs_kostenplaats_verwijder IS NULL
          AND prs_kostenplaats_omschrijving NOT LIKE 'VERVALLEN: %'
          AND prs_kostenplaats_eind < TRUNC (SYSDATE);          -- In verleden

   UPDATE prs_kostenplaats
      SET prs_kostenplaats_omschrijving = SUBSTR ('VERVALLLEN: ' || prs_kostenplaats_omschrijving, 1, 60)
    WHERE prs_kostenplaats_verwijder IS NULL
          AND prs_kostenplaats_omschrijving NOT LIKE 'VERVALLEN: %'
          AND prs_kostenplaats_eind < TRUNC (SYSDATE);          -- In verleden

   SELECT COUNT ( * )
     INTO l_reancountkp
     FROM prs_kostenplaats
    WHERE prs_kostenplaats_verwijder IS NULL
          AND prs_kostenplaats_omschrijving LIKE 'VERVALLEN: %'
          AND prs_kostenplaats_eind > TRUNC (SYSDATE);          -- In toekomst

   UPDATE prs_kostenplaats
      SET prs_kostenplaats_omschrijving = prs_kostenplaats_omschrijving
    WHERE prs_kostenplaats_verwijder IS NULL
          AND prs_kostenplaats_omschrijving LIKE 'VERVALLEN: %'
          AND prs_kostenplaats_eind > TRUNC (SYSDATE);          -- In toekomst

   SELECT COUNT ( * )
     INTO l_vervcountafd
     FROM prs_afdeling
    WHERE prs_afdeling_verwijder IS NULL
          AND prs_afdeling_omschrijving NOT LIKE 'VERVALLEN: %'
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_link_key = prs_afdeling_key
                        AND prs_kenmerk_key = l_vervalkm_key
                        AND TO_DATE (prs_kenmerklink_waarde, 'dd-mm-yyyy') < TRUNC (SYSDATE));

   UPDATE prs_afdeling
      SET prs_afdeling_omschrijving = SUBSTR ('VERVALLEN: ' || prs_afdeling_omschrijving, 1, 60)
    WHERE prs_afdeling_verwijder IS NULL
          AND prs_afdeling_omschrijving NOT LIKE 'VERVALLEN: %'
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_link_key = prs_afdeling_key
                        AND prs_kenmerk_key = l_vervalkm_key
                        AND TO_DATE (prs_kenmerklink_waarde, 'dd-mm-yyyy') < TRUNC (SYSDATE));

   SELECT COUNT ( * )
     INTO l_reancountafd
     FROM prs_afdeling
    WHERE prs_afdeling_verwijder IS NULL
          AND prs_afdeling_omschrijving LIKE 'VERVALLEN: %'
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_link_key = prs_afdeling_key
                        AND prs_kenmerk_key = l_vervalkm_key
                        AND TO_DATE (prs_kenmerklink_waarde, 'dd-mm-yyyy') > TRUNC (SYSDATE));

   UPDATE prs_afdeling
      SET prs_afdeling_omschrijving = prs_afdeling_omschrijving
    WHERE prs_afdeling_verwijder IS NULL
          AND prs_afdeling_omschrijving LIKE 'VERVALLEN: %'
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_link_key = prs_afdeling_key
                        AND prs_kenmerk_key = l_vervalkm_key
                        AND TO_DATE (prs_kenmerklink_waarde, 'dd-mm-yyyy') > TRUNC (SYSDATE));

   -- Je zou nu (uitbreiding) de kostenplaatsen en afdelingen echt kunnen verwijderen
   -- als er geen verplichtingen meer bij zijn. Dit lijkt me nader te specificeren.
   -- Kan functioneel zo eenvoudig zijn als delete where omschrijving like 'VERVALLEN: '
   -- Dit zou ook een separate purge kunnen zijn. Kortom: afstemmen.

   -- For summary only.
   SELECT COUNT ( * )
     INTO l_newcountkp
     FROM prs_kostenplaats
    WHERE prs_kostenplaats_verwijder IS NULL;

   SELECT COUNT ( * )
     INTO l_newcountafd
     FROM prs_afdeling
    WHERE prs_afdeling_verwijder IS NULL;

   fac.imp_writelog (
      p_import_key, 'S',
         'Aantal afdelingen/kostenplaatsen in importbestand(en): '
      || TO_CHAR (l_impcountact)
      || ' (actief) + '
      || TO_CHAR (l_impcountpas)
      || ' (vervallen) = '
      || TO_CHAR (l_impcountact + l_impcountpas),
      ''
   );
   fac.imp_writelog (
      p_import_key, 'S',
         'Aantal kostenplaatsen vooraf: '
      || TO_CHAR (l_oldcountkp)
      || '  nu: '
      || TO_CHAR (l_newcountkp),
      ''
   );
   fac.imp_writelog (
      p_import_key, 'S',
         'Aantal kostenplaatsen vervallen: '
      || TO_CHAR (l_vervcountkp)
      || '  gereanimeerd: '
      || TO_CHAR (l_reancountkp),
      ''
   );
   fac.imp_writelog (
      p_import_key, 'S',
         'Aantal afdelingen vooraf: '
      || TO_CHAR (l_oldcountafd)
      || '  nu: '
      || TO_CHAR (l_newcountafd),
      ''
   );
   fac.imp_writelog (
      p_import_key, 'S',
         'Aantal afdelingen vervallen: '
      || TO_CHAR (l_vervcountafd)
      || '  gereanimeerd: '
      || TO_CHAR (l_reancountafd),
      ''
   );
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.imp_writelog (p_import_key, 'E', v_errormsg || 'Import afgebroken.', '');
END;
/


-------------------------------------------------------------------------------
-- IMPORTFUNCTIES - IDM_PERS
-------------------------------------------------------------------------------
--AanmeldNaam	                    duijkersm
--E-mailAdres	                    mart.duijkers@rws.nl
--RoepNaam	                        Mart
--VoorNamen	                        Martinus
--Voorletters	                    M.G.A.
--GeslachtsNaam	                    Duijkers
--GeslachtsNaamVoorvoegsel
--PartnerGeslachtsNaam
--PartnerGeslachtsNaamVoorvoegsel
--NaamGegevens	                    Dhr. ing. M.G.A. Duijkers
--AanduidingNaamGebruik	            5
--TelefoonNummer	                070-4281611
--TelefoonNummerBgg	                070-4271655
--MobielNummer	                    06-10340945
--AcademischeTitelsVoor	            ing.
--AcademischeTitelsNa
--BurgerServiceNummer	            14021067
--RijksIdentificatieNummer          999..9
--FunctieOmschrijving
--FormatieplaatsOmschrijving	    Adviseur / Specialistisch Medewerker
--DatumIngangGeldigheid	            20060101
--DatumEindeGeldigheid	            99991231
--OrganisatieEenheidCode            60008460
--Geslacht                          m
--DienstverbandGUID                 {C336066B-615B-4C0B-9969-E95CEE5E9D95}
--DienstverbandID                   00005063
--BezoekAdresNaam                   Derde Werelddreef
--BezoekAdresNummer                 1B
--BezoekAdresPostcode               2622 HA
--BezoekAdresPlaats                 Delft
/* Formatted on 20-10-2017 16:24:36 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_import_idm_pers (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   v_newline                   VARCHAR2 (1000);                 -- Import line
   v_fielddelimitor            VARCHAR2 (1);                -- Field seperator
   v_errormsg                  VARCHAR2 (1000);
   oracle_err_num              NUMBER;
   oracle_err_mes              VARCHAR2 (200);
   v_skipfield                 VARCHAR2 (100);
   v_aanduiding                VARCHAR2 (200) := '';
   -- De importvelden. Pas op: de headertekst komt ook in deze velden, dus moet vaak langer dan nodig!
   v_perslid_oslogin           VARCHAR2 (200);                  -- aanmeldnaam
   v_perslid_email             VARCHAR2 (255);
   v_perslid_voornaam          VARCHAR2 (100);                     -- roepnaam
   -- voornamen
   v_perslid_voorletters       VARCHAR2 (100);                  -- voorletters
   v_perslid_naam              VARCHAR2 (100);                -- geslachtsnaam
   v_perslid_tussenvoegsel     VARCHAR2 (100);    -- geslachtsnaamvoorvoegsels
   v_partnernaam               VARCHAR2 (100);
   v_partnertussenvoegsel      VARCHAR2 (100);
   -- naamgegevens (fullname)
   v_aanduidingnaamgebruik     VARCHAR2 (100);
   v_perslid_telefoonnr        VARCHAR2 (100);
   --
   v_perslid_mobielnr          VARCHAR2 (100);
   v_perslid_titel             VARCHAR2 (100);
   --
   v_perslid_nr                VARCHAR2 (100);
   v_rin                       VARCHAR2 (100);
   --
   v_srtperslid_omschrijving   VARCHAR2 (100);
   --
   v_perslid_begindatum        VARCHAR2 (100);
   v_perslid_einddatum         VARCHAR2 (100);
   v_afdeling_naam             VARCHAR2 (100);
   -- geslacht
   v_dienstverbandguid         VARCHAR2 (100);
   v_dienstverbandid           VARCHAR2 (100);
   v_bezoekadresnaam           VARCHAR2 (100);
   v_bezoekadresnummer         VARCHAR2 (100);
   v_bezoekadrespostcode       VARCHAR2 (100);
   v_bezoekadresplaats         VARCHAR2 (100);
   --
   v_count                     NUMBER := 0;
   header_found                BOOLEAN;
   endmrk_found                BOOLEAN;
BEGIN
   -- Init
   header_found := FALSE;
   endmrk_found := FALSE;
   v_fielddelimitor := ';';

   -- Clear my previous imported rows
   DELETE FROM rwsn_imp_idm_pers WHERE COALESCE (imp_log_run, -1) <> p_import_key;
   COMMIT;

   FOR rec1 IN c_cursor
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;

         IF SUBSTR (v_newline, 1, 3) = '﻿'
         THEN
            -- EF BB BF aangetroffen
            fac.imp_writelog (p_import_key, 'W',
                              'Byte Order Mark aangetroffen',
                              'Bestand  heeft onbehandeld UTF-8 formaat.');
            v_newline := SUBSTR (v_newline, 4);
         END IF;

         v_aanduiding := SUBSTR (v_newline, 1, 50);

         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_oslogin);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_email);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voornaam); -- Roepnaam
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); -- Voornamen
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_voorletters);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_naam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_tussenvoegsel); -- Voorvoegsels
         fac.imp_getfield (v_newline, v_fielddelimitor, v_partnernaam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_partnertussenvoegsel);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); --NaamGegevens
         fac.imp_getfield (v_newline, v_fielddelimitor, v_aanduidingnaamgebruik);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_telefoonnr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); -- TelefoonnummerBgg
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_mobielnr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_titel);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); -- TitelsNa
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_nr); -- BurgerServiceNummer
         fac.imp_getfield (v_newline, v_fielddelimitor, v_rin); -- RijksIdentificatieNummer
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); -- FunctieOmschrijving
         fac.imp_getfield (v_newline, v_fielddelimitor, v_srtperslid_omschrijving);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_begindatum);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_einddatum);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_afdeling_naam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); -- Geslacht
         fac.imp_getfield (v_newline, v_fielddelimitor, v_dienstverbandguid);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_dienstverbandid);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoekadresnaam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoekadresnummer);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoekadrespostcode);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_bezoekadresplaats);

         -- Skip until a valid header is found
         IF     v_perslid_oslogin = 'AanmeldNaam'
            AND v_rin = 'RijksIdentificatieNummer'
            AND v_bezoekadresplaats = 'BezoekAdresPlaats'
         THEN
            -- Sla de kopregel over.
            header_found := TRUE;
         ELSIF (header_found)
         THEN
            IF UPPER (v_perslid_oslogin) = '==EINDE==' AND fac.safe_to_number (v_perslid_email) = v_count
            THEN
               endmrk_found := TRUE;
            ELSIF (NOT endmrk_found)
            THEN
               INSERT INTO rwsn_imp_idm_pers (afdelingscode,
                                              persoonachternaam,
                                              tussenvoegsel,
                                              voorletters,
                                              voornaam,
                                              aanduidingnaamgebruik,
                                              telefoonnummer,
                                              functie,
                                              personeelsnummer,
                                              rin,
                                              titel,
                                              loginnaam,
                                              email,
                                              mobielnummer,
                                              begindatum,
                                              einddatum,
                                              dienstverbandguid,
                                              dienstverbandid,
                                              bezoekadresnaam,
                                              bezoekadresnummer,
                                              bezoekadrespostcode,
                                              bezoekadresplaats,
                                              partnernaam,
                                              partnertussenvoegsel,
                                              imp_log_run)
                   VALUES (SUBSTRB (v_afdeling_naam, 1, 10),
                           SUBSTRB (v_perslid_naam, 1, 30),
                           SUBSTRB (v_perslid_tussenvoegsel, 1, 15),
                           SUBSTRB (v_perslid_voorletters, 1, 10),
                           SUBSTRB (v_perslid_voornaam, 1, 30),
                           SUBSTRB (v_aanduidingnaamgebruik, 1, 10),
                           SUBSTRB (v_perslid_telefoonnr, 1, 15),
                           SUBSTRB (v_srtperslid_omschrijving, 1, 29),
                           SUBSTRB (v_perslid_nr, 1, 16),
                           SUBSTRB (v_rin, 1, 30),
                           SUBSTRB (v_perslid_titel, 1, 6),
                           SUBSTRB (v_perslid_oslogin, 1, 200),
                           SUBSTRB (v_perslid_email, 1, 255),
                           SUBSTRB (REPLACE (v_perslid_mobielnr, '-', ''), 1, 15),
                           TO_DATE (SUBSTRB (v_perslid_begindatum, 1, 8), 'YYYYMMDD'),
                           TO_DATE (SUBSTRB (v_perslid_einddatum, 1, 8), 'YYYYMMDD'),
                           SUBSTRB (v_dienstverbandguid, 1, 40),
                           SUBSTRB (v_dienstverbandid, 1, 30),
                           SUBSTRB (v_bezoekadresnaam, 1, 35),
                           SUBSTRB (v_bezoekadresnummer, 1, 10),
                           SUBSTRB (v_bezoekadrespostcode, 1, 12),
                           SUBSTRB (v_bezoekadresplaats, 1, 30),
                           SUBSTRB (v_partnernaam, 1, 30),
                           SUBSTRB (v_partnertussenvoegsel, 1, 15),
                           p_import_key);

               v_count := v_count + 1;
            END IF;
         END IF;

         COMMIT;
      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.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding);
            COMMIT;

            v_count := v_count + 1;
      END;
   END LOOP;

   IF (NOT header_found)
   THEN
      fac.imp_writelog (p_import_key, 'E',
                        'Geen geldige header aangetroffen',
                        'Bestand is geen geldig IDM_PERS importbestand.');
   END IF;

   IF (header_found AND NOT endmrk_found)
   THEN
      fac.imp_writelog (p_import_key, 'E',
                        'Geen geldige eindmarkering aangetroffen',
                        'Bestand is geen geldig IDM_PERS importbestand.');

      -- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
      DELETE FROM rwsn_imp_idm_pers;
   END IF;

   -- Clear my previous imported rows
   DELETE FROM fac_imp_file 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 := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_errormsg, v_aanduiding);

      -- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
      DELETE FROM rwsn_imp_idm_pers;
END;
/

-- RWSN#27455: Aanpassing IDM-koppeling (van BSN naar RIN)!!!
/* Formatted on 19-12-2013 10:28:32 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_update_idm_pers (p_import_key IN NUMBER)
AS
   /* Globale werking:
      Op basis van het IDM importbestand
      - worden personen toegevoegd aan (vereist) bestaande afdelingen
      - worden onderwijl functie aangemaakt, zonodig
      - worden werkplekken gedefinieerd zomogelijk (vertaaltabel)
      - worden vervallen personen verwijderd
   */
   -- Constanten
   c_verdieping_omschr_default   VARCHAR2 (16)                        := 'Begane grond';
   c_srtruimte_default           INTEGER                              := 1;
   c_ruimte_code                 VARCHAR2 (3)                         := '001';
   c_ruimte_omschr_default       VARCHAR2 (16)                        := 'Onbekend';
   c_werkplek_volgnr_default     INTEGER                              := 1;
   c_prs_werkplek_omschrijving   VARCHAR2 (16)                        := '1';
   c_default_profiel_key         NUMBER (10)                          := 1;
   c_rin_kkey                    NUMBER (10)                          := 1160;
   c_commitbuffer                NUMBER                               := 1000;
   -- om de zoveel committen
   v_buffercount                 NUMBER                               := 0;

   -- Personen die moeten vervallen zijn personen die:
   -- - volgens de importregels zijn ingevoerd (ignore handmatige)
   -- - in de import voorkomen en een einddatum hebben die voorbij is
   -- - niet in de import voorkomen
   -- - nog niet vervallen waren
   -- Personeelsnummer=BSN uit de importtabel mapt op prs_perslid_authenticatie => per RWSN52 vervallen!
   -- RIN uit de importtabel mapt op kenmerk met key=1160
   -- dienstverbandid uit de importtabel (SAPHRnummer) mapt op prs_perslid_nr
   CURSOR c_prs_del
   IS
      WITH ppb               -- Geimporteerde personen per bedrijf (RWS/KNMI)!
              AS (  SELECT ab.prs_bedrijf_key, COUNT (*) aantal
                      FROM rwsn_imp_idm_pers idm, prs_afdeling a, prs_v_afdeling_boom ab
                     WHERE idm.afdelingscode = a.prs_afdeling_naam
                           AND a.prs_afdeling_verwijder IS NULL
                           AND a.prs_afdeling_key = ab.prs_afdeling_key
                  GROUP BY ab.prs_bedrijf_key)
      SELECT p.prs_perslid_key, pf.prs_perslid_naam_full, kl.prs_kenmerklink_waarde rin
        FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_v_afdeling_boom ab, prs_v_aanwezigkenmerklink kl
       WHERE p.prs_perslid_verwijder IS NULL          -- is niet al verwijderd
             AND p.prs_perslid_key = pf.prs_perslid_key
             AND p.prs_afdeling_key = ab.prs_afdeling_key
             AND p.prs_perslid_key = kl.prs_link_key
             AND kl.prs_kenmerk_key = c_rin_kkey       -- is ooit geimporteerd
             AND NOT EXISTS                        -- komt niet voor in import
                   (SELECT 1
                      FROM rwsn_imp_idm_pers
                     WHERE UPPER (rin) = UPPER (kl.prs_kenmerklink_waarde))
             AND EXISTS
                   (SELECT 1
                      FROM ppb
                     WHERE ppb.aantal > DECODE (ppb.prs_bedrijf_key, 3, 250, 5000) -- KNMI minimaal 250 en RWS minimaal 5000!
                           AND ppb.prs_bedrijf_key = ab.prs_bedrijf_key)
      UNION
      SELECT p.prs_perslid_key, pf.prs_perslid_naam_full, kl.prs_kenmerklink_waarde rin
        FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_v_afdeling_boom ab, prs_v_aanwezigkenmerklink kl
       WHERE p.prs_perslid_verwijder IS NULL          -- is niet al verwijderd
             AND p.prs_perslid_key = pf.prs_perslid_key
             AND p.prs_afdeling_key = ab.prs_afdeling_key
             AND p.prs_perslid_key = kl.prs_link_key
             AND kl.prs_kenmerk_key = c_rin_kkey       -- is ooit geimporteerd
             AND NOT EXISTS -- is beeindigd volgens import (geen persoon-regels met einddatum in toekomst)
                   (SELECT 1
                      FROM rwsn_imp_idm_pers
                     WHERE UPPER (rin) = UPPER (kl.prs_kenmerklink_waarde)
                           AND COALESCE (einddatum, SYSDATE + 1) > SYSDATE)
             AND EXISTS
                   (SELECT 1
                      FROM ppb
                     WHERE ppb.aantal > DECODE (ppb.prs_bedrijf_key, 3, 250, 5000) -- KNMI minimaal 250 en RWS minimaal 5000!
                           AND ab.prs_bedrijf_key = ppb.prs_bedrijf_key)
      ORDER BY 3, 1;

   -- Personen die nieuw of gewijzigd zijn.
   -- Reeds eerder verwijderde personen kunnen worden gereactiveerd.
   -- Dubbele dienstverbanden wordt achter elkaar ingelezen en overschrijven
   -- elkaar dus.
   -- In de volgorde is de laatste einddatum het laatst aan de beurt. Dit is
   -- vaak het permanente contract tot jaar 9999.
   -- Nieuwe én bestaande KNMI-ers worden/blijven geplaatst in 'DefaultKNMI'-
   -- groep en alléén nieuwe KNMI-ers wordt de 'DefaultKNMI'-groep afgenomen!
   CURSOR c_prs_upd
   IS
        SELECT p.prs_perslid_key, idm.locatiecode alg_locatie_code, idm.afdelingscode prs_afdeling_naam,
               idm.persoonachternaam prs_perslid_naam, idm.tussenvoegsel prs_perslid_tussenvoegsel,
               idm.voorletters prs_perslid_voorletters, idm.voornaam prs_perslid_voornaam,
               idm.telefoonnummer prs_perslid_telefoonnr, idm.functie prs_srtperslid_omschrijving, idm.rin,
               idm.personeelsnummer personeelsnummer, idm.titel prs_perslid_titel, p.prs_perslid_verwijder,
               idm.begindatum, idm.einddatum, idm.mobielnummer, idm.email, idm.loginnaam, idm.dienstverbandguid,
               idm.dienstverbandid, idm.bezoekadresnaam, idm.bezoekadresnummer, idm.bezoekadrespostcode,
               idm.bezoekadresplaats, idm.aanduidingnaamgebruik, idm.partnertussenvoegsel, idm.partnernaam,
               DECODE (a.prs_afdeling_naam, NULL, 0, 1) knmi
          FROM rwsn_imp_idm_pers idm,
               (SELECT kl.prs_kenmerklink_waarde rin,
                       p.prs_perslid_key, p.prs_perslid_verwijder,
                       p.prs_afdeling_key
                  FROM prs_perslid p, prs_v_aanwezigkenmerklink kl
                 WHERE p.prs_perslid_key = kl.prs_link_key
                       AND kl.prs_kenmerk_key = c_rin_kkey) p,
               (SELECT a.prs_afdeling_naam
                  FROM prs_afdeling a, prs_v_afdeling_boom ab
                 WHERE prs_afdeling_verwijder IS NULL
                   AND a.prs_afdeling_key = ab.prs_afdeling_key
                   AND ab.prs_bedrijf_key = 3) a                       -- KNMI
         WHERE idm.einddatum > SYSDATE
               AND idm.rin = p.rin(+)
               AND idm.afdelingscode = a.prs_afdeling_naam(+)
      ORDER BY idm.rin, idm.einddatum, prs_perslid_key DESC;

   v_perslid_key                 NUMBER (10);
   v_prs_key_cnt                 NUMBER (10);
   v_srtperslid_key              NUMBER (10);
   v_afdeling_key                NUMBER (10);
   v_srtperslid_omschr           VARCHAR2 (30);
   oracle_err_num                NUMBER;
   oracle_err_mes                VARCHAR2 (200);
   v_errormsg                    VARCHAR2 (1000);
   v_errorhint                   VARCHAR2 (1000);
   v_count                       NUMBER (10);
   v_update                      BOOLEAN;
   v_perslid_count_imp           NUMBER;
   v_perslid_count_fclt          NUMBER;
   v_perslid_newcount_fclt       NUMBER;
   currentversion                fac_module.fac_module_version%TYPE;
   v_newgebouwkey                NUMBER;
   lnaampresentatie              VARCHAR2 (100);
   ltussenvoegselpres            VARCHAR2 (100);
   lemail                        VARCHAR2 (100);
   llogin1                       VARCHAR2 (100);
   llogin2                       VARCHAR2 (100);


   -- Bepaal het gebouw behorende bij postcode en nummer (best guess!)
   -- Return -1 als het niet bepaald kan worden
   FUNCTION getgebouwkey (postcode IN VARCHAR2, nummer IN VARCHAR2)
      RETURN NUMBER
   IS
      llocatiekey   alg_locatie.alg_locatie_key%TYPE;
      lgebouwkey    alg_gebouw.alg_gebouw_key%TYPE;
   BEGIN
      IF postcode IS NULL
      THEN
         RETURN -1;
      END IF;

      SELECT NVL (MIN (alg_locatie_key), -1)
        INTO llocatiekey
        FROM mld_adres m
       WHERE m.mld_adres_bezoek_postcode = postcode
         AND UPPER (SUBSTR (RTRIM (m.mld_adres_bezoek_adres), INSTR (RTRIM (m.mld_adres_bezoek_adres), ' ', -1) + 1)) = UPPER (nummer) ;

      IF llocatiekey <> -1
      THEN
         SELECT NVL (MIN (alg_gebouw_key), -1)
           INTO lgebouwkey
           FROM alg_gebouw
          WHERE alg_gebouw_verwijder IS NULL AND alg_locatie_key = llocatiekey;
      ELSE
         lgebouwkey := -1;
      END IF;

      RETURN lgebouwkey;
   END;

   -- Het login veld in het importbestand heeft de onzalige eigenschap
   -- dat er soms meerdere in staan, gescheiden door een , (komma)
   -- Deze functie vertaalt dit veld tot een goede login
   -- Op dit moment is dat het eerste adres. Tenzij de bestaande login voorkomt
   -- in de lijst.
   PROCEDURE handle_login (plogin IN VARCHAR2, p_perslid_key IN NUMBER, login1 OUT VARCHAR2, login2 OUT VARCHAR2)
   IS
      l_login_str                rwsn_imp_idm_pers.loginnaam%TYPE;
   BEGIN
      l_login_str := UPPER(plogin);
      IF p_perslid_key IS NOT NULL THEN
         -- bestaand persoon
         SELECT prs_perslid_oslogin, prs_perslid_oslogin2
           INTO login1, login2
           FROM prs_perslid
          WHERE prs_perslid_key = p_perslid_key;
         IF login1 = login2 THEN
           login2 := NULL;
         END IF;
         IF login1 IS NOT NULL AND INSTR(','||l_login_str||',', ','||login1||',') > 0 THEN
            -- 1e login is niet leeg en is gevonden in login lijst
            -- we hoeven niets te doen
            NULL;
         ELSE
            -- 1e login is niet gevonden of is leeg
            -- controleer of er meerdere logins op de regel staan
            IF INSTR (l_login_str, ',') > 0 THEN
              login1 := SUBSTR (l_login_str, 1, INSTR (l_login_str, ',') - 1);
            ELSE
              login1 := l_login_str;
            END IF;
            IF login1 = login2 THEN
               login2 := NULL;
            END IF;
         END IF;

         IF login2 IS NOT NULL AND INSTR(','||l_login_str||',', ','||login2||',') > 0 THEN
            -- 2e login is niet leeg en is gevonden in login lijst
            -- we hoeven niets te doen
            NULL;
         ELSE
            -- 2e login is niet gevonden of is leeg
            login2 := SUBSTR (l_login_str, 1, INSTR (l_login_str, ',') - 1);
            IF login1 = login2 THEN
               -- ga op zoek naar de volgende
               l_login_str := SUBSTR(l_login_str, INSTR (l_login_str, ',')+1);
               IF INSTR (l_login_str, ',') > 0 THEN
                 login2 := SUBSTR (l_login_str, 1, INSTR (l_login_str, ',') - 1);
               ELSE
                 login2 := l_login_str;
               END IF;
            END IF;
         END IF;

      ELSE

        IF INSTR (l_login_str, ',') > 0
        THEN
           login1 := SUBSTR (l_login_str, 1, INSTR (l_login_str, ',') - 1);
           l_login_str := SUBSTR(l_login_str, INSTR (l_login_str, ',')+1);
           IF INSTR (l_login_str, ',') > 0 THEN
             login2 := SUBSTR (l_login_str, 1, INSTR (l_login_str, ',') - 1);
           ELSE
             login2 := l_login_str;
           END IF;
        ELSE
           login1 := l_login_str;
           login2 := null;
        END IF;
      END IF;
   END;

   -- Het emailveld in het importbestand heeft de onzalige eigenschap
   -- dat er soms meerdere in staan, gescheiden door een , (komma)
   -- Deze functie vertaalt dit veld tot een goed emailadressen
   -- Op dit moment nemen we alle email adressen over zodat de
   -- gebruiker meerdere mailtjes krijgt.
   FUNCTION handle_email (pemail IN VARCHAR2)
      RETURN VARCHAR2
   IS
      rstr   rwsn_imp_idm_pers.email%TYPE;
   BEGIN
      rstr := pemail;
      RETURN rstr;
   END;

   -- Procedure die alles regelt voor de locatie van een persoon, varierend van
   -- NIKS: als plaats ongeldig is of de huidige situatie al goed is
   -- ZETTEN OP EEN BESTAANDE WERKPLEK
   -- VERDIEPING/RUIMTE/WERKPLEK AANMAKEN EN TOEKENNEN
   PROCEDURE handle_location (pkey IN NUMBER, pgebouwkey IN VARCHAR2, prin IN VARCHAR2)
   IS
      lv_errormsg             VARCHAR2 (1000);
      lv_errorhint            VARCHAR2 (1000);
      lv_nr_werkplek          NUMBER;
      lv_current_gebouw_key   NUMBER;
      lv_verdieping_key       NUMBER (10);
      lv_ruimte_key           NUMBER (10);
      lv_werkplek_key         NUMBER (10);
   BEGIN
      lv_errormsg := 'Toekennen van een plaats';

      IF pgebouwkey = -1
      THEN
         lv_errorhint := 'Onbekend gebouw voor persoon/RIN: ' || prin;
         fac.imp_writelog (p_import_key, 'W', lv_errormsg, lv_errorhint);
         RETURN;
      END IF;

       -- komt de nieuwe werkplek al voor bij een van de bestaande werkplekken?
       SELECT COUNT (*)
         INTO lv_nr_werkplek
         FROM prs_perslidwerkplek pw, prs_werkplek w, alg_ruimte r, alg_verdieping v
        WHERE pw.prs_werkplek_key = w.prs_werkplek_key
          AND nvl(w.prs_werkplek_virtueel, 0) <> 1
          AND w.prs_alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_verdieping_key = v.alg_verdieping_key
          AND prs_perslid_key = pkey
          AND v.alg_gebouw_key = pgebouwkey;

      IF lv_nr_werkplek > 0
      THEN
         -- nieuwe werkplek bestaat al als een van de werkplekken.
         lv_errorhint := 'Ongewijzigd gebouw voor persoon/RIN: ' || prin;
         fac.imp_writelog (p_import_key, 'I', lv_errormsg, lv_errorhint);
         RETURN;
      END IF;

      -- verwijder de bestaande werkplekken.
      -- HdZ (6-8-2009: werkplekken mogen nog niet verwijderd worden via de koppeling.
      --                werkplekken worden nog vaak handmatig aangemaakt.
      --DELETE prs_perslidwerkplek WHERE prs_perslid_key = pkey;

      -- Er moet wat gebeuren, plaatsen of verplaatsen
      -- Vooralsnog even (bij)plaatsen
      -- De gebouwkey is bekend, dus het gebouw ook.
      -- Dan zoeken we naar de laagste verdieping en laagste ruimtenr
      -- en dan maken we daarvoor een werkplek aan
      IF lv_nr_werkplek = 0
      THEN
         -- persoon heeft geen werkplek(ken)
         BEGIN
            lv_errormsg := 'Bepalen verdieping';

            SELECT alg_verdieping_key
              INTO lv_verdieping_key
              FROM alg_verdieping
             WHERE alg_gebouw_key = pgebouwkey AND alg_verdieping_verwijder IS NULL AND alg_verdieping_upper like '%BEGANE GROND%';
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Begane grond toevoegen voor persoon/RIN: ' || prin;

               INSERT INTO alg_verdieping
                           (alg_gebouw_key, alg_verdieping_omschrijving, alg_verdieping_volgnr, alg_verdieping_code)
                    VALUES (pgebouwkey, c_verdieping_omschr_default, 0, '0')
                 RETURNING alg_verdieping_key
                      INTO lv_verdieping_key;
         END;

         -- lv_verdieping_key bekend
         BEGIN
            -- zoek de laagste ruimte op deze verdieping
            SELECT alg_ruimte_key
              INTO lv_ruimte_key
              FROM alg_ruimte
             WHERE alg_verdieping_key = lv_verdieping_key
               AND alg_ruimte_verwijder IS NULL
               AND alg_ruimte_nr = (SELECT MIN (alg_ruimte_nr)
                                      FROM alg_ruimte
                                     WHERE alg_verdieping_key = lv_verdieping_key AND alg_ruimte_verwijder IS NULL);
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Ruimte toevoegen voor persoon/RIN: ' || prin;

               -- Noot: de srtruimte 1 moet bestaan
               INSERT INTO alg_ruimte
                           (alg_verdieping_key, alg_srtruimte_key, alg_ruimte_nr, alg_ruimte_omschrijving)
                    VALUES (lv_verdieping_key, c_srtruimte_default, c_ruimte_code, c_ruimte_omschr_default)
                 RETURNING alg_ruimte_key
                      INTO lv_ruimte_key;
         END;

         -- lv_ruimte_key bekend
         BEGIN
            SELECT prs_werkplek_key
              INTO lv_werkplek_key
              FROM prs_werkplek
             WHERE prs_alg_ruimte_key = lv_ruimte_key
               AND prs_werkplek_volgnr = c_werkplek_volgnr_default;
         -- Altijd werkplek met deze notatie!
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Werkplek toevoegen voor persoon/RIN: ' || prin;

               -- WEL/NIET VIRTUEEL?
               INSERT INTO prs_werkplek
                           (prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key, prs_werkplek_virtueel)
                    VALUES (c_werkplek_volgnr_default, c_prs_werkplek_omschrijving, lv_ruimte_key, 0)
                 RETURNING prs_werkplek_key
                      INTO lv_werkplek_key;
         -- Altijd werkplek met deze notatie!
         END;

         -- lv_werkplek_key bekend
         -- 11-12-2009/MvdH - Unique constraint exception igv. virtuele werkplek? Volgens mij wel, maar niet opgelost!
         INSERT INTO prs_perslidwerkplek
                     (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting)
              VALUES (pkey, lv_werkplek_key, 0);
      END IF;
   END;

   PROCEDURE update_adres
   AS
      CURSOR cadressen
      IS
         SELECT DISTINCT
                substr(bezoekadresplaats || '-' || bezoekadresnaam,1,30) adres_naam,
                substr(bezoekadresnaam || ' ' || bezoekadresnummer,1,35) adres_bezoek_adres,
                substr(bezoekadrespostcode,1,12) adres_bezoek_postcode,
                substr(bezoekadresplaats, 1, 30) adres_bezoek_plaats
           FROM rwsn_imp_idm_pers
          WHERE bezoekadrespostcode IS NOT NULL;

      ladreskey        NUMBER (10);
      l_newcount       NUMBER;
      l_impcount       NUMBER;
      v_errormsg       VARCHAR (200);
      oracle_err_mes   VARCHAR2 (150);
      currentversion   fac_module.fac_module_version%TYPE;
   BEGIN

      FOR rc IN cadressen
      LOOP
         -- Bestaat deze al?
         -- Er is geen key, dus checken we op alle velden
         -- Een update is dus nvt
         BEGIN
            SELECT mld_adres_key
              INTO ladreskey
              FROM mld_adres
             WHERE mld_adres_naam = rc.adres_naam
               AND mld_adres_bezoek_postcode = rc.adres_bezoek_postcode
               AND mld_adres_bezoek_adres = rc.adres_bezoek_adres
               AND mld_adres_bezoek_plaats = rc.adres_bezoek_plaats;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               ladreskey := -1;
         END;

         --DBMS_OUTPUT.put_line (rc.adres_naam);

         IF ladreskey = -1
         THEN
            INSERT INTO mld_adres
                        (mld_adres_naam,
                         mld_adres_bezoek_adres,
                         mld_adres_bezoek_postcode,
                         mld_adres_bezoek_plaats,
                         mld_adres_afleveradres
                        )
                 VALUES (rc.adres_naam, rc.adres_bezoek_adres, rc.adres_bezoek_postcode, rc.adres_bezoek_plaats, 1);

            fac.imp_writelog (p_import_key, 'I', 'Adres is toegevoegd', rc.adres_naam);
         END IF;
      END LOOP;

      -- Zoek de locatiekey bij het adres op basis van postcode
      -- Als er meerdere locaties matchen pak ik de oudste (=grootste?)
      UPDATE mld_adres
         SET alg_locatie_key =
                            (SELECT MIN (l.alg_locatie_key)
                               FROM alg_locatie l
                              WHERE l.alg_locatie_postcode = mld_adres_bezoek_postcode
                                AND UPPER (SUBSTR (RTRIM (l.alg_locatie_adres), INSTR (RTRIM (l.alg_locatie_adres), ' ', -1))) =
                                       UPPER (SUBSTR (mld_adres_bezoek_adres, INSTR (mld_adres_bezoek_adres, ' ', -1)))
                                AND l.alg_locatie_verwijder IS NULL)
       WHERE mld_adres_verwijder IS NULL AND alg_locatie_key IS NULL;
   END;


   PROCEDURE update_dienstverbandguid(p_prs_perslid_key IN NUMBER, p_dienstverbandguid IN VARCHAR2)
   AS
   v_prs_kenmerk_key     NUMBER;
   v_prs_kenmerklink_key NUMBER;
   BEGIN
      BEGIN
         -- check for dienstverbandguid kenmerk
         SELECT prs_kenmerk_key
           INTO v_prs_kenmerk_key
           FROM prs_v_aanwezigkenmerk
          WHERE prs_kenmerk_omschrijving = 'DienstverbandGUID';
      EXCEPTION WHEN NO_DATA_FOUND THEN
         INSERT INTO prs_kenmerk
                ( PRS_KENMERK_NIVEAU
                , PRS_KENMERK_VOLGNR
                , PRS_KENMERK_OMSCHRIJVING
                , PRS_KENMERK_KENMERKTYPE
                , PRS_KENMERK_LENGTE)
         VALUES ( 'P'
                , 10
                , 'DienstverbandGUID'
                , 'C'
                , 49
                )
         RETURNING prs_kenmerk_key
              INTO v_prs_kenmerk_key;
      END;
      BEGIN
         SELECT prs_kenmerklink_key
           INTO v_prs_kenmerklink_key
           FROM prs_kenmerklink
          WHERE prs_kenmerk_key = v_prs_kenmerk_key
            AND prs_link_key = p_prs_perslid_key
            AND prs_kenmerklink_niveau = 'P';
      EXCEPTION WHEN NO_DATA_FOUND THEN
         INSERT INTO PRS_KENMERKLINK
                ( PRS_LINK_KEY
                , PRS_KENMERKLINK_NIVEAU
                , PRS_KENMERK_KEY
                , PRS_KENMERKLINK_WAARDE)
         VALUES ( p_prs_perslid_key
                , 'P'
                , v_prs_kenmerk_key
                , p_dienstverbandguid);
      END;
      UPDATE prs_kenmerklink
         SET prs_kenmerklink_waarde = p_dienstverbandguid
       WHERE prs_kenmerklink_key = v_prs_kenmerklink_key;
   END;

----------------------
----------------------
----------------------
----------------------
----------------------
-- MAIN PROCEDURE
----------------------
----------------------
----------------------
----------------------
----------------------
BEGIN
   SELECT MAX (fac_module_version)
     INTO currentversion
     FROM fac_module;

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

   -- #Import
   SELECT COUNT (*)
     INTO v_perslid_count_imp
     FROM rwsn_imp_idm_pers;

   -- Informatieve logging, zien we gelijk hoe laat het was
   fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen personen: ' || TO_CHAR (v_perslid_count_imp), '');

   -- #Actieve personen mèt RIN
   SELECT COUNT (*)
     INTO v_perslid_count_fclt
     FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
    WHERE p.prs_perslid_key = kl.prs_link_key AND kl.prs_kenmerk_key = c_rin_kkey;

   -- Check het aantal regels, stop als onvoldoende (=bestaand maar ongeldig bestand)
   IF v_perslid_count_imp = 0
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Het importbestand is ongeldig. Import afgebroken', '');
      RETURN;
   END IF;

   update_adres ();

   -- Begin met het ontmantelen van vervallen personen
   FOR rec_prs_del IN c_prs_del
   LOOP
      BEGIN
         v_perslid_key := rec_prs_del.prs_perslid_key;
         v_errormsg := 'Verwijderen van persoon NIET gelukt';
         v_errorhint := 'Heeft persoon met key ' || TO_CHAR (v_perslid_key) || ' historie?';

         SELECT SUM (aant)
           INTO v_count
           FROM (SELECT COUNT ( * ) aant
                   FROM prs_v_verplichting_refcheck
                  WHERE prs_perslid_key = v_perslid_key
                 UNION ALL
                 SELECT COUNT ( * ) aant
                   FROM cnt_v_aanwezigcontract
                  WHERE cnt_contract_status = 0              -- NIET Gesloten!
                        AND cnt_contract_looptijd_tot >= SYSDATE
                        AND cnt_prs_perslid_key = v_perslid_key
                 UNION ALL
                 SELECT COUNT ( * ) aant
                   FROM fac_tracking
                  WHERE prs_perslid_key = v_perslid_key);

         IF v_count = 0
         THEN
            -- Persoon heeft geen enkele (actuele of historische) verplichting
            v_errorhint := 'Verwijderen van persoon met key ' || TO_CHAR (v_perslid_key);

            PRS.delete_perslid (p_import_key, v_perslid_key);

            fac.imp_writelog (p_import_key, 'I', 'Persoon verwijderd; RIN: ' || rec_prs_del.rin, '');
         ELSE
            -- Controleer of er ACTUELE verplichtingen zijn
            SELECT COUNT (*)
              INTO v_count
              FROM prs_v_verplichting_keys pv
             WHERE pv.prs_perslid_key = v_perslid_key;

            IF v_count > 0
            THEN
               UPDATE prs_perslid
                  SET prs_perslid_naam = SUBSTR ('INACTIEF:' || prs_perslid_naam, 1, 30),
                      prs_perslid_email = NULL,
                      prs_perslid_oslogin = NULL
                WHERE prs_perslid_key = v_perslid_key AND prs_perslid_naam NOT LIKE 'INACTIEF:%';

               fac.imp_writelog (p_import_key, 'I', 'Persoon INACTIEF; RIN: ' || rec_prs_del.rin, '');
            ELSE
               -- Er zijn geen actieve verplichtingen, wel historische
               BEGIN
                  UPDATE prs_perslid
                     SET prs_perslid_verwijder = SYSDATE
                   WHERE prs_perslid_key = v_perslid_key;

                  fac.imp_writelog (p_import_key, 'I', 'Persoon verwijderd; RIN: ' || rec_prs_del.rin, '');
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     -- Kennelijk heeft persoon toch ernstige verplichtingen
                     v_errorhint := 'Persoon heeft nog (max. ' || TO_CHAR (v_count) || ') verplichtingen; RIN: ' || rec_prs_del.rin;
                     fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
               END;
            END IF;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
            v_errormsg := 'Delete exception ' || oracle_err_mes;
            fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
      END;
   END LOOP;

   COMMIT;

   -- Ga verder met het toevoegen of bijwerken
   FOR rec_prs_upd IN c_prs_upd
   LOOP
      BEGIN
         -- Init
         v_update := TRUE;                     -- wordt PER RECORD false bij funest gebrek aan vervulde randvoorwaarden
         v_afdeling_key := 0;
         v_srtperslid_key := 0;
         v_perslid_key := 0;
         v_errormsg := 'Fout bepalen randvoorwaarden';

         -- *** Controle verplichte gegevens + ophalen extra informatie ***
         -- Controle: RIN
         IF rec_prs_upd.rin IS NULL
         THEN
            v_errorhint := 'Persoon heeft geen RIN; achternaam: ' || rec_prs_upd.prs_perslid_naam;
            fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
            v_update := FALSE;
         END IF;

         -- Controle: PRS_PERSLID_NAAM
         IF v_update AND rec_prs_upd.prs_perslid_naam IS NULL
         THEN
            v_errorhint := 'Persoon heeft geen achternaam; RIN: ' || rec_prs_upd.rin;
            fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
            v_update := FALSE;
         END IF;

         -- Controle: Persoon reactiveren of is er al een actieve persoon met dezelfde RIN?
         IF v_update AND rec_prs_upd.prs_perslid_verwijder IS NOT NULL
         THEN
            v_errorhint := 'Bepalen reactivatie persoon/RIN: ' || rec_prs_upd.rin;

            -- Is er al een actieve persoon met dezelfde RIN?
            SELECT   COUNT (p.prs_perslid_key)
              INTO   v_prs_key_cnt
              FROM   prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
             WHERE   p.prs_perslid_key = kl.prs_link_key
                     AND kl.prs_kenmerk_key = c_rin_kkey
                     AND kl.prs_kenmerklink_waarde LIKE rec_prs_upd.rin
                     AND p.prs_perslid_key != rec_prs_upd.prs_perslid_key;

            IF v_prs_key_cnt > 0
            THEN
               -- Waarde(n) gevonden, dus is er al een actieve persoon met dezelfde RIN!
               -- => Geen update
               v_update := FALSE;
            ELSE
               -- Kennelijk is er geen actieve persoon met dezelfde RIN!
               -- => Wel update (prs_perslid_verwijder op NULL zetten)
               fac.imp_writelog (p_import_key, 'I',
                                 'Persoon reactiveren; RIN: ' || rec_prs_upd.rin,
                                 '');
            END IF;
         END IF;

         -- Controle: PRS_AFDELING_NAAM
         v_errorhint := 'De afdeling kan niet bepaald worden ' || rec_prs_upd.prs_afdeling_naam;

         IF v_update
         THEN
            BEGIN
               -- Bepaal de afdelingskey; afdelingen worden met een andere import beheerd
               SELECT prs_afdeling_key
                 INTO v_afdeling_key
                 FROM prs_afdeling
                WHERE prs_afdeling_naam = rec_prs_upd.prs_afdeling_naam AND prs_afdeling_verwijder IS NULL;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  v_update := FALSE;
                  v_errorhint := 'Afdeling ' || rec_prs_upd.prs_afdeling_naam || ' bestaat niet; persoon/RIN: ' || rec_prs_upd.rin;
                  -- Kennelijk is de afdeling niet gevonden
                  fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
               WHEN OTHERS
               THEN
                  v_update := FALSE;
                  v_errorhint := 'Kan Afdeling ' || rec_prs_upd.prs_afdeling_naam || ' niet eenduidig bepalen?!';
                  fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
            END;
         END IF;

         v_errorhint := 'Bepaling functie';

         -- Controle: PRS_SRTPERSLID_OMSCHRIJVING
         IF v_update
         THEN
            BEGIN
               v_srtperslid_omschr := rec_prs_upd.prs_srtperslid_omschrijving;

               -- Bepaal de key van de functie
               SELECT prs_srtperslid_key
                 INTO v_srtperslid_key
                 FROM prs_srtperslid
                WHERE prs_srtperslid_upper = UPPER (v_srtperslid_omschr) AND prs_srtperslid_verwijder IS NULL;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  fac.imp_writelog (p_import_key, 'I',
                                    'Functie ' || v_srtperslid_omschr || ' toegevoegd',
                                    v_errorhint);

                  -- Functie bestaat kennelijk niet, maak 'm maar aan
                  INSERT INTO prs_srtperslid
                              (prs_srtperslid_omschrijving)
                       VALUES (v_srtperslid_omschr);

                  -- Wat is de key van deze nieuwe geworden?
                  SELECT prs_srtperslid_key
                    INTO v_srtperslid_key
                    FROM prs_srtperslid
                   WHERE prs_srtperslid_omschrijving = v_srtperslid_omschr AND prs_srtperslid_verwijder IS NULL;
               WHEN OTHERS
               THEN
                  v_errorhint := 'Functie ' || v_srtperslid_omschr || '  kan niet bepaald worden; persoon/RIN: ' || rec_prs_upd.rin;
                  v_update := FALSE;
            END;
         END IF;

         IF rec_prs_upd.partnernaam IS NULL THEN
            -- als de partnernaam niet gevuld is dan kunnen we deze ook niet gebruiken.
            lnaampresentatie := rec_prs_upd.prs_perslid_naam;
            ltussenvoegselpres := rec_prs_upd.prs_perslid_tussenvoegsel;
         ELSE
           -- Bepaal de te gebruiken achternaamformattering
           CASE LPAD (rec_prs_upd.aanduidingnaamgebruik, 1, '0')
              WHEN '0'
              THEN
                 BEGIN
                    -- code 0 = [aanhef, titel, voorletters,] voorvoegsels, achternaam
                    -- Opgem. naam  Mevr. T. de Haan
                    lnaampresentatie := rec_prs_upd.prs_perslid_naam;
                    ltussenvoegselpres := rec_prs_upd.prs_perslid_tussenvoegsel;
                 END;
              WHEN '1'
              THEN
                 BEGIN
                    --Code 1 = [aanhef, titel, voorletters,] 2e voorvoegsels, 2e naam(partnernaam) voorvoegsels, achternaam
                    --Opgem. naam  Mevr. T. Bronsgeest-de Haan
                    lnaampresentatie :=
                          rec_prs_upd.partnernaam
                       || '-'
                       || rec_prs_upd.prs_perslid_tussenvoegsel
                       || ' '
                       || rec_prs_upd.prs_perslid_naam;
                    ltussenvoegselpres := rec_prs_upd.partnertussenvoegsel;
                 END;
              WHEN '2'
              THEN
                 BEGIN
                    --Code 2 = [aanhef, titel, voorletters,] voorvoegsels, achternaam, 2e voorvoegsels, 2e naam(partnernaam)
                    --Opgem. naam  Mevr. T. de Haan-Bronsgeest
                    lnaampresentatie :=
                          rec_prs_upd.prs_perslid_naam
                       || '-'
                       || rec_prs_upd.partnertussenvoegsel
                       || ' '
                       || rec_prs_upd.partnernaam;
                    ltussenvoegselpres := rec_prs_upd.prs_perslid_tussenvoegsel;
                 END;
              WHEN '3'
              THEN
                 BEGIN
                    --code 3 = [aanhef, titel, voorletters,] 2e voorvoegsels, 2e naam(partnernaam)
                    --Opgem. naam  Mevr. T. Bronsgeest
                    lnaampresentatie := rec_prs_upd.partnernaam;
                    ltussenvoegselpres := rec_prs_upd.partnertussenvoegsel;
                 END;
              ELSE
                 BEGIN
                    -- code 0 = [aanhef, titel, voorletters,] voorvoegsels, achternaam
                    -- Opgem. naam  Mevr. T. de Haan
                    lnaampresentatie := rec_prs_upd.prs_perslid_naam;
                    ltussenvoegselpres := rec_prs_upd.prs_perslid_tussenvoegsel;
                    fac.imp_writelog (p_import_key, 'W',
                                      'Ongedefinieerd naamformattering (AanduidingNaamGebruik) ' || rec_prs_upd.aanduidingnaamgebruik,
                                      'Default (0) wordt gehanteerd.');
                 END;
           END CASE;
         END IF;
         lnaampresentatie := substrb (lnaampresentatie,1,30);

         v_errorhint := 'E-mail';
         lemail := handle_email (rec_prs_upd.email);
         v_errorhint := 'Aanmeldnaam';
         handle_login (rec_prs_upd.loginnaam, rec_prs_upd.prs_perslid_key, llogin1, llogin2);

         -- *** Daadwerkelijk insert/update prs_perslid ***
         IF v_update
         THEN
            BEGIN
               IF rec_prs_upd.prs_perslid_key IS NULL
               THEN
                  v_errormsg := 'Persoon kan niet worden toegevoegd';

                  INSERT INTO prs_perslid
                              (prs_perslid_naam,
                               prs_perslid_tussenvoegsel,
                               prs_perslid_voorletters,
                               prs_perslid_voornaam,
                               prs_perslid_telefoonnr,
                               prs_perslid_authenticatie,
                               prs_perslid_nr,
                               prs_perslid_titel,
                               prs_srtperslid_key,
                               prs_afdeling_key,
                               prs_perslid_oslogin,
                               prs_perslid_oslogin2,
                               prs_perslid_mobiel,
                               prs_perslid_email,
                               prs_perslid_ingangsdatum,
                               prs_perslid_einddatum,
                               fac_profiel_key
                              )
                       VALUES (lnaampresentatie,
                               ltussenvoegselpres,
                               rec_prs_upd.prs_perslid_voorletters,
                               rec_prs_upd.prs_perslid_voornaam,
                               rec_prs_upd.prs_perslid_telefoonnr,
                               rec_prs_upd.personeelsnummer,
                               rec_prs_upd.dienstverbandid,
                               rec_prs_upd.prs_perslid_titel,
                               v_srtperslid_key,
                               v_afdeling_key,
                               llogin1,
                               llogin2,
                               rec_prs_upd.mobielnummer,
                               lemail,
                               rec_prs_upd.begindatum,
                               rec_prs_upd.einddatum,
                               c_default_profiel_key
                              )
                    RETURNING prs_perslid_key
                         INTO v_perslid_key;

                  v_errormsg := 'Fout toevoegen RIN';

                  INSERT INTO prs_kenmerklink (prs_link_key,
                                               prs_kenmerklink_niveau,
                                               prs_kenmerk_key,
                                               prs_kenmerklink_waarde)
                    VALUES   (v_perslid_key,
                              'P',
                              c_rin_kkey,
                              rec_prs_upd.rin);

                  fac.imp_writelog (p_import_key, 'I',
                                    'Nieuw persoon toegevoegd',
                                    'Naam/RIN: ' || ltussenvoegselpres || ' ' || lnaampresentatie || '/' || rec_prs_upd.rin);

                  -- Nieuwe KNMI-ers de _Default-groep afnemen en plaatsen in
                  -- de DefaultKNMI-groep!
                  IF rec_prs_upd.knmi = 1
                  THEN
                     v_errormsg := 'Fout afnemen _Default';

                     DELETE FROM fac_gebruikersgroep
                           WHERE fac_groep_key = 1
                                 AND prs_perslid_key = v_perslid_key;

                     v_errormsg := 'Fout toekennen DefaultKNMI';

                     INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
                         VALUES (3, v_perslid_key);
                  END IF;
               ELSE
                  v_errormsg := 'Persoon kan niet worden gewijzigd';

                  UPDATE prs_perslid
                     SET prs_perslid_naam = lnaampresentatie,
                         prs_perslid_tussenvoegsel = ltussenvoegselpres,
                         prs_perslid_voorletters = rec_prs_upd.prs_perslid_voorletters,
                         prs_perslid_voornaam = NVL (rec_prs_upd.prs_perslid_voornaam, prs_perslid_voornaam),
                         prs_perslid_telefoonnr = rec_prs_upd.prs_perslid_telefoonnr,
                         prs_perslid_titel = rec_prs_upd.prs_perslid_titel,
                         prs_srtperslid_key = v_srtperslid_key,
                         prs_afdeling_key = v_afdeling_key,
                         prs_perslid_verwijder = NULL,
                         prs_perslid_oslogin = llogin1,
                         prs_perslid_oslogin2 = COALESCE (prs_perslid_oslogin2, llogin2), -- RWSN#21033!
                         prs_perslid_mobiel = rec_prs_upd.mobielnummer,
                         prs_perslid_email = lemail,
                         prs_perslid_ingangsdatum = rec_prs_upd.begindatum,
                         prs_perslid_einddatum = rec_prs_upd.einddatum,
                         prs_perslid_nr = rec_prs_upd.dienstverbandid
                   WHERE prs_perslid_key = rec_prs_upd.prs_perslid_key
                     AND (   prs_perslid_naam <> lnaampresentatie
                          OR NVL (prs_perslid_tussenvoegsel, '-') <> NVL (ltussenvoegselpres, '-')
                          OR NVL (prs_perslid_voorletters, '-') <> NVL (rec_prs_upd.prs_perslid_voorletters, '-')
                          OR NVL (prs_perslid_voornaam, '-') <> NVL (rec_prs_upd.prs_perslid_voornaam, '-')
                          OR NVL (prs_perslid_telefoonnr, '-') <> NVL (rec_prs_upd.prs_perslid_telefoonnr, '-')
                          OR NVL (prs_perslid_titel, '-') <> NVL (rec_prs_upd.prs_perslid_titel, '-')
                          OR prs_srtperslid_key <> v_srtperslid_key
                          OR prs_afdeling_key <> v_afdeling_key
                          OR NVL (prs_perslid_oslogin, '-') <> NVL (llogin1, '-')
                          OR (prs_perslid_oslogin2 IS NULL AND llogin2 IS NOT NULL)       -- RWSN#21033!
                          OR NVL (prs_perslid_oslogin2, '-') <> NVL (llogin2, '-')
                          OR NVL (prs_perslid_mobiel, '-') <> NVL (rec_prs_upd.mobielnummer, '-')
                          OR NVL (prs_perslid_email, '-') <> NVL (lemail, '-')
                          OR NVL (prs_perslid_ingangsdatum, to_date('01012000', 'ddmmyyyy')) <> NVL (rec_prs_upd.begindatum, to_date('01012000', 'ddmmyyyy'))
                          OR NVL (prs_perslid_einddatum, to_date('01012000', 'ddmmyyyy')) <> NVL (rec_prs_upd.einddatum, to_date('01012000', 'ddmmyyyy'))
                          OR NVL (prs_perslid_nr, '-') <> NVL (rec_prs_upd.dienstverbandid, '-')
                          OR rec_prs_upd.prs_perslid_verwijder IS NOT NULL
                         );

                  v_perslid_key := rec_prs_upd.prs_perslid_key;

                  -- Bestaande KNMI-ers evt. de _Default-groep weer afnemen en
                  -- behouden in de DefaultKNMI-groep!
                  IF rec_prs_upd.knmi = 1
                  THEN
                     v_errormsg := 'Fout afnemen _Default';

                     DELETE FROM fac_gebruikersgroep
                           WHERE fac_groep_key = 1
                                 AND prs_perslid_key = v_perslid_key;

                     v_errormsg := 'Fout behouden DefaultKNMI';

                     INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
                        SELECT 3, v_perslid_key
                         FROM DUAL
                        WHERE NOT EXISTS
                                 (SELECT 1
                                    FROM fac_gebruikersgroep
                                   WHERE fac_groep_key = 3 AND prs_perslid_key = v_perslid_key);
                  END IF;
               END IF;
            EXCEPTION
               WHEN OTHERS
               THEN
                  oracle_err_num := SQLCODE;
                  oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                  v_errormsg := v_errormsg || ' - ' || oracle_err_mes;
                  v_errorhint := 'Persoon/RIN: ' || rec_prs_upd.rin;
                  v_update := FALSE;
                  fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
            END;
         END IF;

         -- v_perslid_key is nu zeker bekend; zoniet, dan is v_update dus FALSE
         -- en gaan we niet verder aanpassen/aanmaken
         IF v_perslid_key <> 0
         THEN
            -- RWSN#24870: Per RWSN49 vervallen.
            -- ----------------------------------------------------------
            -- DID-stuff: autorisatie van personen op basis van dienst!!!
            -- En, ALLEEN als persoon een login heeft (niet altijd zo)!!!
            -- ----------------------------------------------------------
            -- RWSN#24870-einde!

            v_errorhint := 'Update dienstverbandguid persoon/RIN: ' || rec_prs_upd.rin;
            update_dienstverbandguid(v_perslid_key, rec_prs_upd.dienstverbandguid);

            v_errorhint := 'Locatiebepaling persoon/RIN: ' || rec_prs_upd.rin;

            IF rec_prs_upd.bezoekadrespostcode IS NOT NULL
            THEN
               v_newgebouwkey := getgebouwkey (rec_prs_upd.bezoekadrespostcode, rec_prs_upd.bezoekadresnummer);
               handle_location (v_perslid_key, v_newgebouwkey, rec_prs_upd.rin);
            END IF;

            v_buffercount := v_buffercount + 1;
            IF v_buffercount >= c_commitbuffer
            THEN
               COMMIT;
               v_buffercount := 0;
            END IF;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg := 'Local exception ' || oracle_err_mes;
            fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
      END;
   END LOOP;
   COMMIT;
/*
   -- KNMI-ers afnemen _Default-groep!
   DELETE FROM fac_gebruikersgroep gg
         WHERE gg.fac_groep_key = 1                                -- _Default
               AND EXISTS
                     (SELECT 1
                        FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab
                       WHERE p.prs_afdeling_key = ab.prs_afdeling_key
                             AND ab.prs_bedrijf_key = 3                -- KNMI
                             AND p.prs_perslid_key = gg.prs_perslid_key);
   COMMIT;

   -- KNMI-ers toekennen DefaultKNMI-groep!
   INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
      SELECT 3, p.prs_perslid_key                               -- DefaultKNMI
        FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab
       WHERE p.prs_perslid_oslogin IS NOT NULL
             AND p.prs_afdeling_key = ab.prs_afdeling_key
             AND ab.prs_bedrijf_key = 3                                -- KNMI
             AND NOT EXISTS
                   (SELECT 1
                      FROM fac_gebruikersgroep
                     WHERE fac_groep_key = 3                           -- KNMI
                       AND prs_perslid_key = p.prs_perslid_key);
   COMMIT;

   -- RWS-ers afnemen DefaultKNMI-groep!
   DELETE FROM fac_gebruikersgroep gg
         WHERE gg.fac_groep_key = 3                             -- DefaultKNMI
               AND NOT EXISTS
                     (SELECT 1
                        FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab
                       WHERE p.prs_afdeling_key = ab.prs_afdeling_key
                             AND ab.prs_bedrijf_key = 3                -- KNMI
                             AND p.prs_perslid_key = gg.prs_perslid_key);
   COMMIT;
*/
   SELECT   COUNT ( * )
     INTO   v_perslid_newcount_fclt
     FROM   prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl
    WHERE   p.prs_perslid_key = kl.prs_link_key
            AND kl.prs_kenmerk_key = c_rin_kkey;

   fac.imp_writelog (p_import_key, 'S',
                     'Aantal actieve personen met RIN vooraf: ' || TO_CHAR (v_perslid_count_fclt) || ' nu: ' || TO_CHAR (v_perslid_newcount_fclt),
                     '');

   SELECT   COUNT ( * )
     INTO   v_perslid_newcount_fclt                                -- misbruik
     FROM   prs_v_aanwezigperslid p
    WHERE   NOT EXISTS
               (SELECT   1
                  FROM   prs_v_aanwezigkenmerklink
                 WHERE   prs_link_key = p.prs_perslid_key
                         AND prs_kenmerk_key = c_rin_kkey);

   fac.imp_writelog (p_import_key, 'S',
                     'Aantal actieve personen zonder RIN (nu): ' || TO_CHAR (v_perslid_newcount_fclt),
                     '');
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Global exception ' || oracle_err_mes;
      fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
/

CREATE OR REPLACE PROCEDURE rwsn_import_derden (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   -- Generieke import.
   -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
   --'%"PersoneelsID";"Loginnaam";"Achternaam";"Tussenvoegsel";"Voorletters";"Voornaam";"Afdelingscode";"Functie";"Email";"Telefoonnr";"Mobiel";"Gebouwcode"%');
   --'%PersoneelsID;Loginnaam;Achternaam;Tussenvoegsel;Voorletters;Voornaam;Afdelingscode;Functie;Email;Telefoonnr;Mobiel;Gebouwcode%');
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;7;3;4;6;'
      || '5;0;0;0;0;10;11;9;0;0;'
      || '8;2;0;0;0;0;1;12;0;0;'
      || '0;0;0;0;0;0;0;0;0;0;'
      || '0;0;0;0;0;0',
      '%PersoneelsID;Loginnaam;Achternaam;Tussenvoegsel;Voorletters;Voornaam;Afdelingscode;Functie;Email;Telefoonnr;Mobiel;Gebouwcode%');

   -- Klantspecifieke aanpassingen.
   -- Als geen Functie aangeleverd, dan deze hard op 'Onbekend' zetten.
   UPDATE fac_imp_perslid
      SET prs_srtperslid_omschrijving = 'Onbekend'
    WHERE prs_srtperslid_omschrijving IS NULL;

   -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Kenmerk2-kolom -> Gebouw en daaronder
   -- Ruimte '_000' op de verdieping met het laagste volgnummer!
   -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze
   -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon
   -- naar Ruimte '_000' op de meegegeven locatie.
   -- Eventuele WPs onder andere locaties dan import-locatie blijven ook ongewijzigd!
   UPDATE fac_imp_perslid i
      SET i.alg_locatie_code =
             (SELECT il.alg_locatie_code
                FROM alg_v_aanweziggebouw ig, alg_locatie il
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                                   AND alg_locatie_key < il.alg_locatie_key)),
          i.alg_gebouw_code =
             (SELECT ig.alg_gebouw_code
                FROM alg_v_aanweziggebouw ig, alg_locatie il
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                                   AND alg_locatie_key < il.alg_locatie_key)),
          i.alg_verdieping_volgnr =
             (SELECT iv.alg_verdieping_volgnr
                FROM alg_v_aanweziggebouw ig, alg_locatie il, alg_verdieping iv, alg_ruimte ir
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                                   AND alg_locatie_key < il.alg_locatie_key)
                     AND ig.alg_gebouw_key = iv.alg_gebouw_key
                     AND iv.alg_verdieping_key = ir.alg_verdieping_key
                     AND ir.alg_ruimte_nr = '_000'
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanwezigruimte r, alg_verdieping v
                             WHERE r.alg_ruimte_nr = '_000'
                                   AND r.alg_verdieping_key = v.alg_verdieping_key
                                   AND v.alg_gebouw_key = iv.alg_gebouw_key
                                   AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr)),
          i.alg_ruimte_nr =
             (SELECT ir.alg_ruimte_nr
                FROM alg_v_aanweziggebouw ig, alg_locatie il, alg_verdieping iv, alg_ruimte ir
               WHERE ig.alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                     AND ig.alg_locatie_key = il.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziggebouw
                             WHERE alg_gebouw_upper = UPPER (i.prs_kenmerk2)
                                   AND alg_locatie_key < il.alg_locatie_key)
                     AND ig.alg_gebouw_key = iv.alg_gebouw_key
                     AND iv.alg_verdieping_key = ir.alg_verdieping_key
                     AND ir.alg_ruimte_nr = '_000'
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanwezigruimte r, alg_verdieping v
                             WHERE r.alg_ruimte_nr = '_000'
                                   AND r.alg_verdieping_key = v.alg_verdieping_key
                                   AND v.alg_gebouw_key = iv.alg_gebouw_key
                                   AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr));
   COMMIT;

   -- Resulteert in nette foutmelding als ruimte niet kan worden bepaald.
   UPDATE fac_imp_perslid
      SET alg_verdieping_volgnr = 0
    WHERE alg_gebouw_code IS NOT NULL
      AND alg_verdieping_volgnr IS NULL;
   COMMIT;
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.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces derden afgebroken!');
END rwsn_import_derden;
/

CREATE OR REPLACE PROCEDURE rwsn_update_derden (p_import_key IN NUMBER)
AS
   -- Maximale afname van Derden-medewerkers na import tov. huidig aantal (met
   -- een personeelsnummer)!
   c_max_delta_percentage   NUMBER (10) := 25;                         -- 25%!
   c_pid_kkey               NUMBER (10) := 1161;
   -- Ruimte waar personen in worden geplaatst (indien nog niet geplaatst in andere ruimte)
   c_ruimte_nr              VARCHAR2 (10) := '_000';
   v_errormsg               VARCHAR2 (1000) := '-';
   oracle_err_num           NUMBER;
   oracle_err_mes           VARCHAR2 (200);
   v_bedrijf_count          NUMBER (10);
   v_bedrijf_key            NUMBER (10);
   v_groep_key              NUMBER (10);
   v_count_prs_import       NUMBER (10);     -- #actieve personen  na  import!
   v_count_prs_actual       NUMBER (10);     -- #actieve personen voor import!
   v_count_tot              NUMBER (10);
   v_count_err              NUMBER (10);
   v_count                  NUMBER (10);
   v_srtperslid_key         NUMBER (10);
   v_afdeling_key           NUMBER (10);
   v_perslid_key            NUMBER (10);
   v_locatie_key            NUMBER (10);
   v_gebouw_key             NUMBER (10);
   v_verdieping_key         NUMBER (10);
   v_ruimte_key             NUMBER (10);

   -- Personen met ID onder Derden-bedrijf die nieuw of bestaand zijn!
   -- Dubbele dienstverbanden wordt achter elkaar ingelezen en overschrijven
   -- elkaar dus.
   -- Nieuwe én bestaande Derden worden/blijven geplaatst in 'Default<Derden>'-
   -- groep en de '_Default'-groep wordt afgenomen!
   CURSOR c_prs_upd (p_bedrijf_key NUMBER)
   IS
        SELECT '[' || x.prs_kenmerk1 || '|' || x.prs_perslid_email || '] '
                  aanduiding,
               x.prs_srtperslid_omschrijving,
               x.prs_afdeling_naam,
               x.prs_perslid_naam,
               x.prs_perslid_tussenvoegsel,
               x.prs_perslid_voorletters,
               x.prs_perslid_voornaam,
               x.prs_perslid_telefoonnr,
               x.prs_perslid_mobiel,
               x.prs_perslid_email,
               x.prs_perslid_oslogin,
               x.alg_locatie_code,
               x.alg_gebouw_code,
               x.alg_verdieping_volgnr,
               x.alg_ruimte_nr,
               x.prs_kenmerk1,                                          -- PID
               x.prs_kenmerk2,                                   -- Gebouwcode
               kl.prs_link_key prs_perslid_key
          FROM (SELECT i.*
                  FROM fac_imp_perslid i, prs_afdeling a, prs_v_afdeling_boom ab
                 WHERE i.prs_kenmerk1 IS NOT NULL           -- Personen met ID
                       AND UPPER (i.prs_afdeling_naam) = a.prs_afdeling_upper
                       AND a.prs_afdeling_verwijder IS NULL
                       AND a.prs_afdeling_key = ab.prs_afdeling_key
                       AND ab.prs_bedrijf_key = p_bedrijf_key) x
               LEFT JOIN
                  prs_v_aanwezigkenmerklink kl
               ON UPPER (x.prs_kenmerk1) = UPPER (kl.prs_kenmerklink_waarde)
                  AND kl.prs_kenmerk_key = c_pid_kkey
      ORDER BY x.prs_kenmerk1;

   -- Verwijderen personen met ID onder Derden-bedrijf niet in import!
   CURSOR c_prs_del (p_bedrijf_key NUMBER)
   IS
        SELECT '[' || kl.prs_kenmerklink_waarde || '|' || p.prs_perslid_email || '] '
                  aanduiding,
               p.prs_perslid_key
          FROM prs_v_aanwezigperslid p, prs_v_aanwezigkenmerklink kl, prs_v_afdeling_boom ab
         WHERE p.prs_perslid_key = kl.prs_link_key
               AND kl.prs_kenmerk_key = c_pid_kkey          -- Personen met ID
               AND p.prs_afdeling_key = ab.prs_afdeling_key
               AND ab.prs_bedrijf_key = p_bedrijf_key
               AND NOT EXISTS
                     (SELECT 1
                        FROM fac_imp_perslid
                       WHERE UPPER (prs_kenmerk1) = UPPER (kl.prs_kenmerklink_waarde))
      ORDER BY p.prs_perslid_key;
BEGIN
   -- Check configuratie tbv. Derden incl. beveiliging dat deze Derden géén
   -- RWS-ers of KNMI-ers zijn!
   SELECT COUNT (DISTINCT ab.prs_bedrijf_key), MIN (ab.prs_bedrijf_key), MIN (g.fac_groep_key)
     INTO v_bedrijf_count, v_bedrijf_key, v_groep_key
     FROM fac_imp_perslid i,
          prs_afdeling a,
          prs_v_afdeling_boom ab,
          prs_v_aanwezigbedrijf b,
          fac_v_aanwezigusrdata ud,
          fac_groep g
    WHERE i.prs_kenmerk1 IS NOT NULL
          AND i.prs_afdeling_naam = a.prs_afdeling_naam
          AND a.prs_afdeling_verwijder IS NULL
          AND a.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_bedrijf_key = b.prs_bedrijf_key
          AND b.prs_bedrijf_intern = 1                       -- Intern bedrijf
          AND b.prs_bedrijf_key NOT IN (2, 3)                 -- Geen RWS/KNMI
          AND TO_CHAR (b.prs_bedrijf_key) = ud.fac_usrdata_code
          AND ud.fac_usrtab_key = 6                          -- DerdenBedr2Rol
          AND ud.fac_usrdata_omschr = TO_CHAR (g.fac_groep_key)
          AND g.fac_groep_aanmaak > TO_DATE ('01102018', 'ddmmyyyy');

   -- Bepaal aantal actieve personen in FACILITOR  na  import (onder Derden-bedrijf)!
   SELECT COUNT (DISTINCT i.prs_kenmerk1)
     INTO v_count_prs_import
     FROM fac_imp_perslid i
    WHERE i.prs_kenmerk1 IS NOT NULL;

   -- Bepaal aantal actieve personen in FACILITOR voor import (onder Derden-bedrijf)!
   SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
     INTO v_count_prs_actual
     FROM prs_v_aanwezigperslid p, prs_v_afdeling_boom ab
    WHERE p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_bedrijf_key = v_bedrijf_key
          AND EXISTS
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_kenmerk_key = c_pid_kkey
                        AND prs_link_key = p.prs_perslid_key);

   IF (v_bedrijf_count = 0)
   THEN
      fac.imp_writelog (
         p_import_key, 'E',
         'Derden-bedrijf niet (correct) geconfigureerd (in Eigen tabel met key=6)!',
         'Importproces personen afgebroken!');
   ELSIF (v_bedrijf_count > 1)
   THEN
      fac.imp_writelog (
         p_import_key, 'E',
         'Afdelingen/personen vallen niet allemaal onder hetzelfde Derden-bedrijf!',
         'Importproces personen afgebroken!');
   ELSIF (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) < (100 - c_max_delta_percentage))
   THEN
      fac.imp_writelog (
         p_import_key, 'E',
         'Verschil tussen huidig aantal en te importeren aantal personen te groot!',
            '- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]'
         || CHR (13) || CHR (10)
         || '- #personen/import = [' || TO_CHAR (v_count_prs_import) || ']'
         || CHR (13) || CHR (10)
         || '- #personen/huidig = [' || TO_CHAR (v_count_prs_actual) || ']');
   ELSE
      v_count_tot := 0;
      v_count_err := 0;

      -- Personen met ID onder Derden-bedrijf die nieuw of bestaand zijn!
      FOR rec IN c_prs_upd (v_bedrijf_key)
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen functie';

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

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

               INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
                   VALUES (rec.prs_srtperslid_omschrijving)
                RETURNING prs_srtperslid_key
                     INTO v_srtperslid_key;
            ELSE
               SELECT prs_srtperslid_key
                 INTO v_srtperslid_key
                 FROM prs_srtperslid
                WHERE prs_srtperslid_verwijder IS NULL
                      AND UPPER (prs_srtperslid_omschrijving) = UPPER (rec.prs_srtperslid_omschrijving);
            END IF;

            v_errormsg := 'Fout bepalen afdeling';

            SELECT a.prs_afdeling_key
              INTO v_afdeling_key
              FROM prs_afdeling a, prs_v_afdeling_boom ab
             WHERE a.prs_afdeling_verwijder IS NULL
                   AND a.prs_afdeling_key = ab.prs_afdeling_key
                   AND ab.prs_bedrijf_key = v_bedrijf_key
                   AND UPPER (a.prs_afdeling_naam) = UPPER (rec.prs_afdeling_naam);

            v_perslid_key := rec.prs_perslid_key;
            IF (v_perslid_key IS NULL)
            THEN
               v_errormsg := 'Fout toevoegen persoon';

               INSERT INTO prs_perslid (prs_perslid_module,
                                        prs_srtperslid_key,
                                        prs_afdeling_key,
                                        prs_perslid_naam,
                                        prs_perslid_tussenvoegsel,
                                        prs_perslid_voorletters,
                                        prs_perslid_voornaam,
                                        --prs_perslid_titel,
                                        prs_perslid_telefoonnr,
                                        prs_perslid_mobiel,
                                        prs_perslid_email,
                                        --prs_perslid_nr,
                                        prs_perslid_oslogin)
                   VALUES ('PRS',
                           v_srtperslid_key,
                           v_afdeling_key,
                           rec.prs_perslid_naam,
                           rec.prs_perslid_tussenvoegsel,
                           rec.prs_perslid_voorletters,
                           rec.prs_perslid_voornaam,
                           --rec.prs_perslid_titel,
                           rec.prs_perslid_telefoonnr,
                           rec.prs_perslid_mobiel,
                           rec.prs_perslid_email,
                           --rec.prs_perslid_nr,
                           rec.prs_perslid_oslogin)
                RETURNING prs_perslid_key
                     INTO v_perslid_key;

               v_errormsg := 'Fout toevoegen PID';

               INSERT INTO prs_kenmerklink (prs_link_key,
                                            prs_kenmerklink_niveau,
                                            prs_kenmerk_key,
                                            prs_kenmerklink_waarde)
                   VALUES (v_perslid_key,
                           'P',
                           c_pid_kkey,
                           rec.prs_kenmerk1);
            ELSE
               v_errormsg := 'Fout bijwerken persoon';

               UPDATE prs_perslid
                  SET prs_srtperslid_key = v_srtperslid_key,
                      prs_afdeling_key = v_afdeling_key,
                      prs_perslid_naam = rec.prs_perslid_naam,
                      prs_perslid_tussenvoegsel = rec.prs_perslid_tussenvoegsel,
                      prs_perslid_voorletters = rec.prs_perslid_voorletters,
                      prs_perslid_voornaam = rec.prs_perslid_voornaam,
                      --prs_perslid_titel = rec.prs_perslid_titel,
                      prs_perslid_telefoonnr = rec.prs_perslid_telefoonnr,
                      prs_perslid_mobiel = rec.prs_perslid_mobiel,
                      prs_perslid_email = rec.prs_perslid_email,
                      --prs_perslid_nr = rec.prs_perslid_nr,
                      prs_perslid_oslogin = rec.prs_perslid_oslogin
                WHERE prs_perslid_key = v_perslid_key;
            END IF;

            COMMIT;

            -- Derden evt. de _Default-groep (weer) afnemen en behouden in de
            -- in de geconfigureerde Default<Derden>-groep!
            v_errormsg := 'Fout afnemen _Default';

            DELETE FROM fac_gebruikersgroep
                  WHERE fac_groep_key = 1 AND prs_perslid_key = v_perslid_key;

            v_errormsg := 'Fout behouden Default<Derden>';

            INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
               SELECT v_groep_key, v_perslid_key
                 FROM DUAL
                WHERE NOT EXISTS
                         (SELECT 1
                            FROM fac_gebruikersgroep
                           WHERE fac_groep_key = v_groep_key AND prs_perslid_key = v_perslid_key);

            COMMIT;

            -- Als geen Gebouw aangeleverd, dan wordt onderstaande overgeslagen.
            IF (rec.prs_kenmerk2 IS NOT NULL)
            THEN
               v_locatie_key := NULL;
               v_gebouw_key := NULL;
               v_verdieping_key := NULL;
               v_ruimte_key := NULL;

               v_errormsg := 'Fout bepalen locatie';

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

               v_errormsg := 'Fout bepalen gebouw';

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

               v_errormsg := 'Fout bepalen verdieping';

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

               v_errormsg := 'Fout bepalen ruimte';

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

               v_errormsg := 'Fout bepalen of persoon in gebouw een werkplek heeft';

               SELECT COUNT ( * )
                 INTO v_count
                 FROM prs_perslidwerkplek pw, prs_werkplek w, alg_ruimte r, alg_verdieping v
                WHERE pw.prs_werkplek_key = w.prs_werkplek_key
                      AND w.prs_alg_ruimte_key = r.alg_ruimte_key
                      AND r.alg_verdieping_key = v.alg_verdieping_key
                      AND v.alg_gebouw_key = v_gebouw_key
                      AND pw.prs_perslid_key = v_perslid_key;

               -- Als persoon in gebouw reeds een werkplek heeft, dan wordt
               -- onderstaande overgeslagen.
               IF (v_count = 0)
               THEN
                  v_errormsg := 'Fout verhuizen naar nieuwe werkplek';

                  PRS.movetoruimte (v_perslid_key, v_ruimte_key, 'G');
               END IF;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               v_count_err := v_count_err + 1;
               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', rec.aanduiding || v_errormsg, 'Bijwerken personen');
         END;
      END LOOP;

      fac.imp_writelog (p_import_key, 'S', 'Derden/#verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_err), '');
      fac.imp_writelog (p_import_key, 'S', 'Derden/#verwerkte regels met foutmelding: ' || TO_CHAR (v_count_err), '');
      COMMIT;
/*
      v_errormsg := 'Fout verwijderen persoon';

      -- Verwijderen personen met ID onder Derden-bedrijf niet in import!
      FOR rec IN c_prs_del (v_bedrijf_key)
      LOOP
         BEGIN
            prs.delete_perslid (p_import_key, rec.prs_perslid_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', rec.aanduiding || v_errormsg, 'Verwijderen personen');
         END;
      END LOOP;
*/
   END IF;
END rwsn_update_derden;
/

--=============================================================================
-- EXPORTFUNCTIES
-------------------------------------------------------------------------------
/* Formatted on 23-7-2010 12:48:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_export_kto_kandidaten
(
   result,
   result_order
)
AS
   SELECT   'Meldingnummer;Vakgroep;Melding', 0 FROM DUAL
   UNION ALL
   SELECT      '"'
            || m.mld_melding_key
            || '";"'
            || d.ins_discipline_omschrijving
            || '";"'
            || s.mld_stdmelding_omschrijving
            || '"',
            m.mld_melding_key
     FROM   mld_melding m, mld_kenmerk k, mld_kenmerkmelding km, ins_tab_discipline d, mld_stdmelding s
    WHERE       s.mld_ins_discipline_key = d.ins_discipline_key
            AND m.mld_stdmelding_key = s.mld_stdmelding_key
            AND m.mld_melding_key = km.mld_melding_key
            AND km.mld_kenmerk_key = k.mld_kenmerk_key
            AND k.mld_srtkenmerk_key = 121
            AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) > SYSDATE - 7
   UNION ALL
   SELECT      '"'
            || rrr.res_reservering_key
            || '/'
            || rrr.res_rsv_ruimte_volgnr
            || '";"'
            || d.ins_discipline_omschrijving
            || '";"'
            || rr.res_ruimte_nr
            || '"',
            1000000 + rrr.res_rsv_ruimte_key
     FROM   res_rsv_ruimte rrr,
            res_ruimte_opstelling ro,
            res_ruimte rr,
            res_kenmerk k,
            res_kenmerkwaarde kw,
            ins_tab_discipline d
    WHERE       rrr.res_rsv_ruimte_verwijder IS NULL
            AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
            AND ro.res_ruimte_key = rr.res_ruimte_key
            AND rr.res_discipline_key = d.ins_discipline_key
            AND rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key
            AND kw.res_kenmerk_key = k.res_kenmerk_key
            AND k.res_srtkenmerk_key = 22
            AND rrr.res_rsv_ruimte_tot > SYSDATE - 7;

/* Formatted on 28-6-2011 16:04:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_select_kto_kandidaten (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2
)
AS
   CURSOR c_cluster_r
   IS
        SELECT   ks.prs_kostensoort_key cluster_key,
                 --prs_kostensoort_oms cluster_oms,
                 COALESCE (fac.safe_to_number (prs_kostensoort_opmerking), 0)
                    perc,
                 COALESCE (fac.safe_to_number (prs_kostensoort_refcode), 0)
                    drempel,
                 COUNT (res_rsv_ruimte_key) aantal
          FROM   res_rsv_ruimte rrr,
                 res_ruimte_opstelling ro,
                 res_ruimte rr,
                 ins_tab_discipline d,
                 prs_kostensoort ks
         WHERE       rrr.res_rsv_ruimte_verwijder IS NULL
                 AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                 AND ro.res_ruimte_key = rr.res_ruimte_key
                 AND rr.res_discipline_key = d.ins_discipline_key
                 AND d.prs_kostensoort_key = ks.prs_kostensoort_key
                 AND rrr.res_rsv_ruimte_tot > SYSDATE - 7
                 AND rrr.res_rsv_ruimte_tot < SYSDATE
      GROUP BY   ks.prs_kostensoort_key,
                 --prs_kostensoort_oms,
                 prs_kostensoort_opmerking,
                 prs_kostensoort_refcode;

   CURSOR c_lijst_r (
      p_cluster_key                 NUMBER
   )
   IS
        SELECT   rrr.res_rsv_ruimte_key,
                 k2.res_kenmerk_key,
                 TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi') ts
          FROM   res_rsv_ruimte rrr,
                 res_ruimte_opstelling ro,
                 res_ruimte rr,
                 res_discipline d,
                 res_kenmerk k2,
                 prs_perslid p
         WHERE       rrr.res_rsv_ruimte_verwijder IS NULL
                 AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key
                 AND rrr.res_activiteit_key = k2.res_activiteit_key
                 AND p.prs_perslid_email IS NOT NULL
                 AND rrr.res_rsv_ruimte_tot > SYSDATE - 7
                 AND rrr.res_rsv_ruimte_tot < SYSDATE
                 AND k2.res_srtkenmerk_key = 22
                 AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                 AND ro.res_ruimte_key = rr.res_ruimte_key
                 AND rr.res_discipline_key = d.ins_discipline_key
                 AND d.prs_kostensoort_key = p_cluster_key
      ORDER BY   DBMS_RANDOM.VALUE;

   CURSOR c_cluster_m
   IS
        SELECT   ks.prs_kostensoort_key cluster_key,
                 --prs_kostensoort_oms cluster_oms,
                 COALESCE (fac.safe_to_number (prs_kostensoort_opmerking), 0)
                    perc,
                 COALESCE (fac.safe_to_number (prs_kostensoort_refcode), 0)
                    drempel,
                 COUNT (mld_melding_key) aantal
          FROM   mld_melding m,
                 mld_stdmelding std,
                 mld_discipline d,
                 prs_kostensoort ks,
                 fac_tracking t
         WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                 AND std.mld_ins_discipline_key = d.ins_discipline_key
                 AND d.prs_kostensoort_key = ks.prs_kostensoort_key
                 --AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) > SYSDATE - 7
                 AND m.mld_melding_key = t.fac_tracking_refkey
                 AND t.fac_srtnotificatie_key = 22
                 AND t.fac_tracking_datum > SYSDATE - 7
      GROUP BY   ks.prs_kostensoort_key,
                 --prs_kostensoort_oms,
                 prs_kostensoort_opmerking,
                 prs_kostensoort_refcode;

   CURSOR c_lijst_m (
      p_cluster_key                 NUMBER
   )
   IS
        SELECT   m.mld_melding_key,
                 k1.mld_kenmerk_key,
                 TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi') ts
          FROM   mld_melding m,
                 mld_stdmelding std,
                 mld_discipline d,
                 mld_kenmerk k1,
                 prs_perslid p,
                 mld_kenmerkmelding km,
                 mld_kenmerk k2,
                 fac_tracking t
         WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                 AND std.mld_ins_discipline_key = d.ins_discipline_key
                 AND d.ins_discipline_key = k1.mld_stdmelding_key
                 AND k1.mld_srtkenmerk_key = 121
                 AND d.prs_kostensoort_key = p_cluster_key
                 AND m.prs_perslid_key = p.prs_perslid_key
                 AND p.prs_perslid_email IS NOT NULL
                 AND m.mld_melding_key = km.mld_melding_key
                 AND km.mld_kenmerk_key = k2.mld_kenmerk_key
                 AND k2.mld_srtkenmerk_key = 1
                 AND km.mld_kenmerkmelding_waarde = '1'
                 --AND fac.gettrackingdate ('MLDAFM', m.mld_melding_key) > SYSDATE - 7
                 AND m.mld_melding_key = t.fac_tracking_refkey
                 AND t.fac_srtnotificatie_key = 22
                 AND t.fac_tracking_datum > SYSDATE - 7
      ORDER BY   DBMS_RANDOM.VALUE;

   CURSOR c_cursor
   IS
        SELECT   mld_melding_key, mld_melding_omschrijving
          FROM   mld_melding
         WHERE   mld_melding_omschrijving IN
                       (  SELECT   mld_melding_omschrijving
                            FROM   mld_melding m,
                                   mld_stdmelding std,
                                   mld_discipline d,
                                   ins_srtdiscipline sd
                           WHERE   m.mld_stdmelding_key = std.mld_stdmelding_key
                                   AND std.mld_ins_discipline_key =
                                         d.ins_discipline_key
                                   AND d.ins_srtdiscipline_key =
                                         sd.ins_srtdiscipline_key
                                   AND sd.ins_srtdiscipline_prefix = 'KKT'
                        GROUP BY   mld_melding_omschrijving
                          HAVING   COUNT (mld_melding_omschrijving) > 1)
      ORDER BY   mld_melding_omschrijving, mld_melding_key;

   v_aantal_kto     NUMBER;
   v_count_upd      NUMBER;
   v_count          NUMBER;
   v_errorhint      VARCHAR (200);
   v_omschrijving   VARCHAR (4000);
   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   -- KTO's op meldingen
   v_errorhint := 'Doorloop de clusters';

   FOR rec1 IN c_cluster_m
   LOOP
      BEGIN
         --DBMS_OUTPUT.put_line('cluster:' || rec1.cluster_oms);
         -- minimaal percentage of drempelwaarde moet ingevuld zijn.
         IF (rec1.perc IS NOT NULL OR rec1.drempel IS NOT NULL)
            AND rec1.aantal > 0
         THEN
            v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);

            IF v_aantal_kto < rec1.drempel
            THEN
               v_aantal_kto := rec1.drempel;
            END IF;

            v_count_upd := 1;

            FOR rec2 IN c_lijst_m (rec1.cluster_key)
            LOOP
               BEGIN
                  IF v_count_upd <= v_aantal_kto
                  THEN
                     -- RWSN#18632: Uitsluiten dat dezelfde melding - rond 18:00? -
                     --             2x tbv. KTO wordt geselecteerd!
                     --             Of na een extra run of na wijzigen schedule...!
                     v_errorhint := 'Bepalen voorkomen kto timestamp';

                     SELECT   COUNT ( * )
                       INTO   v_count
                       FROM   mld_v_aanwezigkenmerkmelding
                      WHERE   mld_melding_key = rec2.mld_melding_key
                              AND mld_kenmerk_key = rec2.mld_kenmerk_key;

                     IF v_count = 0
                     THEN
                        --DBMS_OUTPUT.put_line('melding:' || rec2.mld_melding_key);
                        v_errorhint := 'Toevoegen kto timestamp kenmerk';

                        INSERT INTO mld_kenmerkmelding (
                                                           mld_melding_key,
                                                           mld_kenmerk_key,
                                                           mld_kenmerkmelding_waarde
                                   )
                          VALUES   (
                                       rec2.mld_melding_key,
                                       rec2.mld_kenmerk_key,
                                       rec2.ts
                                   );
                     END IF;
                  END IF;

                  v_count_upd := v_count_upd + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg := 'Exception ' || oracle_err_mes;
                     fac.writelog (
                        p_applname,
                        'E',
                        v_errormsg,
                        'Aanmaken KTO: ' || rec2.mld_melding_key
                     );
                     COMMIT;
               END;
            END LOOP;
         END IF;
      END;
   END LOOP;

   -- KTO's op reserveringen
   FOR rec1 IN c_cluster_r
   LOOP
      BEGIN
         --DBMS_OUTPUT.put_line('cluster:' || rec1.cluster_oms);
         -- minimaal percentage of drempelwaarde moet ingevuld zijn.
         IF (rec1.perc IS NOT NULL OR rec1.drempel IS NOT NULL)
            AND rec1.aantal > 0
         THEN
            v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);

            IF v_aantal_kto < rec1.drempel
            THEN
               v_aantal_kto := rec1.drempel;
            END IF;

            v_count_upd := 1;

            FOR rec2 IN c_lijst_r (rec1.cluster_key)
            LOOP
               BEGIN
                  IF v_count_upd <= v_aantal_kto
                  THEN
                     -- RWSN#18632: Uitsluiten dat dezelfde reservering 2x tbv. KTO
                     --             wordt geselecteerd!
                     --             Of na een extra run of na wijzigen schedule...!
                     v_errorhint := 'Bepalen voorkomen kto timestamp';

                     SELECT   COUNT ( * )
                       INTO   v_count
                       FROM   res_v_aanwezigkenmerkwaarde
                      WHERE   res_rsv_ruimte_key = rec2.res_rsv_ruimte_key
                              AND res_kenmerk_key = rec2.res_kenmerk_key;

                     IF v_count = 0
                     THEN
                        --DBMS_OUTPUT.put_line('melding:' || rec2.mld_melding_key);
                        v_errorhint := 'Toevoegen kto timestamp kenmerk';

                        INSERT INTO res_kenmerkwaarde (
                                                          res_rsv_ruimte_key,
                                                          res_kenmerk_key,
                                                          res_kenmerkreservering_waarde
                                   )
                          VALUES   (
                                       rec2.res_rsv_ruimte_key,
                                       rec2.res_kenmerk_key,
                                       rec2.ts
                                   );
                     END IF;
                  END IF;

                  v_count_upd := v_count_upd + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg := 'Exception ' || oracle_err_mes;
                     fac.writelog (
                        p_applname,
                        'E',
                        v_errormsg,
                        'Aanmaken KTO: ' || rec2.res_rsv_ruimte_key
                     );
                     COMMIT;
               END;
            END LOOP;
         END IF;
      END;
   END LOOP;

   -- verwijder dubbel ontvangen kto's
   v_omschrijving := 'Quekeleque';

   FOR rec1 IN c_cursor
   LOOP
      BEGIN
         -- DBMS_OUTPUT.put_line('melding key:' || rec1.mld_melding_key);
         IF v_omschrijving = rec1.mld_melding_omschrijving
         THEN
            -- DBMS_OUTPUT.put_line('verwijder melding key:' || rec1.mld_melding_key);
            DELETE   mld_kenmerkmelding
             WHERE   mld_melding_key = rec1.mld_melding_key;

            DELETE   mld_melding
             WHERE   mld_melding_key = rec1.mld_melding_key;
         ELSE
            -- DBMS_OUTPUT.put_line('niet gelijk melding key:' || rec1.mld_melding_key);
            v_omschrijving := rec1.mld_melding_omschrijving;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg := 'Exception ' || oracle_err_mes;
            fac.writelog (
               p_applname,
               'E',
               v_errormsg,
               'Verwijderen dubbele KTO: ' || rec1.mld_melding_key
            );
            COMMIT;
      END;
   END LOOP;
END;
/

-- Procedure om aan te geven voor welke meldingen een kto verzonden moet worden.
CREATE OR REPLACE PROCEDURE rwsn_export_kto_kandidaten (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
  v_errormsg := 'Geen akties';
END;
/


CREATE OR REPLACE VIEW rwsn_v_export_idm_pers (result, result_order)
AS
   SELECT 'AanmeldNaam;E-mailAdres;RoepNaam;VoorNamen;Voorletters;Geslacht;GeslachtsNaam;GeslachtsNaamVoorvoegsel;PartnerGeslachtsNaam;PartnerGeslachtsNaamVoorvoegsel;NaamGegevens;AanduidingNaamGebruik;TelefoonNummer;TelefoonNummerBgg;MobielNummer;AcademischeTitelsVoor;AcademischeTitelsNa;BurgerServiceNummer;RijksIdentificatieNummer;FunctieOmschrijving;FormatieplaatsOmschrijving;DatumIngangGeldigheid;DatumEindeGeldigheid;OrganisatieEenheidCode;DienstverbandGUID;DienstverbandID;BezoekAdresNaam;BezoekAdresNummer;BezoekAdresPostcode;BezoekAdresPlaats',0 from dual
   UNION ALL
   SELECT      '"' || LOWER (p.prs_perslid_oslogin)
          || '";"' || p.prs_perslid_email
          || '";"' || p.prs_perslid_voornaam
          || '";"' || '?'
          || '";"' || p.prs_perslid_voorletters
          || '";"' || '?'
          || '";"' || p.prs_perslid_naam
          || '";"' || p.prs_perslid_tussenvoegsel
          || '";"' || '?'
          || '";"' || '?'
          || '";"' || pf.prs_perslid_naam_full
          || '";"' || '?'
          || '";"' || p.prs_perslid_telefoonnr
          || '";"' || '?'
          || '";"' || p.prs_perslid_mobiel
          || '";"' || p.prs_perslid_titel
          || '";"' || '?'
          || '";"' || p.prs_perslid_authenticatie
          || '";"' || '?'
          || '";"' || sp.prs_srtperslid_omschrijving
          || '";"' || TO_CHAR (p.prs_perslid_ingangsdatum, 'YYYYMMDD')
          || '";"' || TO_CHAR (p.prs_perslid_einddatum, 'YYYYMMDD')
          || '";"' || d.prs_afdeling_naam
          || '";"' || (SELECT kl.prs_kenmerklink_waarde
                         FROM prs_kenmerklink kl
                        WHERE kl.prs_kenmerk_key = 1000 -- 'DienstverbandGUID'
                          AND kl.prs_link_key = p.prs_perslid_key)
          || '";"' || (SELECT kl.prs_kenmerklink_waarde
                         FROM prs_kenmerklink kl
                        WHERE kl.prs_kenmerk_key = 1160 -- 'RijksIdentificatieNummer'
                          AND kl.prs_link_key = p.prs_perslid_key)
          || '";"' || prs_perslid_nr
          || '";"' || a.mld_adres_naam
          || '";"' || a.mld_adres_bezoek_adres
          || '";"' || a.mld_adres_bezoek_postcode
          || '";"' || a.mld_adres_bezoek_plaats
          || '"',
          p.prs_perslid_key
     FROM prs_perslid p,
          prs_v_perslid_fullnames pf,
          prs_srtperslid sp,
          prs_afdeling d,
          prs_perslidwerkplek pw,
          prs_werkplek w,
          alg_ruimte r,
          alg_verdieping v,
          alg_gebouw g,
          alg_locatie l,
          mld_adres a
    WHERE p.prs_perslid_verwijder IS NULL
      AND p.prs_perslid_key = pf.prs_perslid_key
      AND p.prs_srtperslid_key = sp.prs_srtperslid_key(+)
      AND p.prs_afdeling_key = d.prs_afdeling_key(+)
      AND p.prs_perslid_key = pw.prs_perslid_key(+)
      AND pw.prs_werkplek_key = w.prs_werkplek_key(+)
      AND w.prs_alg_ruimte_key = r.alg_ruimte_key(+)
      AND r.alg_verdieping_key = v.alg_verdieping_key(+)
      AND v.alg_gebouw_key = g.alg_gebouw_key(+)
      AND g.alg_locatie_key = l.alg_locatie_key(+)
      AND l.alg_locatie_key = a.alg_locatie_key(+)
      AND substr(p.prs_perslid_oslogin,1,1) <> '_';
/

CREATE OR REPLACE PROCEDURE rwsn_select_idm_pers (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
  v_errormsg       VARCHAR (200);
BEGIN
  v_errormsg := 'Lekker niets doen. View rwsn_v_export_idm_pers doet het werk';
END;
/

-- Procedure voor de exporteren gegevens personenimport naar IDM
CREATE OR REPLACE PROCEDURE rwsn_export_idm_pers (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
  v_errormsg := 'Geen akties';
END;
/

-- RWSN#14925: Per 5.2.2 notificatie naar externen via notificatiejob mogelijk
-- (ipv. via dummy-export).
-- Notificatiecode=MLDINF (speciale bon), maar 'Onderwerp' komt uit MLDNEW- of
-- MLDAFM-code!
CREATE OR REPLACE VIEW rwsn_v_noti_extern
(
   sender,
   receiver,
   text,
   code,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS
   SELECT NULL,
          NULL,
          REPLACE (
             REPLACE (
                REPLACE (
                   lcl.x ('fac_srtnotificatie_oms', sn.fac_srtnotificatie_key, sn.fac_srtnotificatie_oms),
                   '##KEY##', TO_CHAR (x.mld_melding_key)),
                '##STDMLD##', TO_CHAR (x.mld_stdmelding_omschrijving)),
             '##DISC##', TO_CHAR (x.ins_discipline_omschrijving)),
          'MLDINF',
          x.mld_melding_key,
          NULL,
          x.sender,
          x.receiver,
          NULL,
          DECODE (
             x.fac_srtnotificatie_key,
             22, 'MLD/M' || SUBSTR (LPAD (TO_CHAR (x.mld_melding_key), 7, '0'), 1, 4) || '___/M' || TO_CHAR (x.mld_melding_key) || '/' || TO_CHAR (y.mld_kenmerk_key) || '/*',
             NULL)
     FROM (  SELECT md.ins_srtdiscipline_key,
                    md.ins_discipline_key,
                    md.ins_discipline_omschrijving,
                    sm.mld_stdmelding_key,
                    sm.mld_stdmelding_omschrijving,
                    m.mld_melding_key,
                    md.ins_discipline_email sender,
                    km.mld_kenmerkmelding_waarde receiver,
                    MIN (t.fac_srtnotificatie_key) fac_srtnotificatie_key -- 22=MLDAFM wint!
               FROM mld_melding m,
                    mld_stdmelding sm,
                    mld_discipline md,
                    mld_kenmerkmelding km,
                    mld_kenmerk k,
                    fac_tracking t
              WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
                    AND sm.mld_ins_discipline_key = md.ins_discipline_key
                    AND m.mld_melding_key = km.mld_melding_key
                    AND km.mld_kenmerkmelding_verwijder IS NULL
                    AND km.mld_kenmerk_key = k.mld_kenmerk_key
                    AND k.mld_kenmerk_verwijder IS NULL
                    AND k.mld_srtkenmerk_key = 20                    -- E-mail
                    AND m.mld_melding_key = t.fac_tracking_refkey
                    AND t.fac_srtnotificatie_key IN (26, 22)  -- MLDNEW/MLDAFM
                    AND t.fac_tracking_datum >
                          DECODE (
                             TO_CHAR (SYSDATE + 5 / 1440, 'HH24'),
                             '08', TO_DATE (TO_CHAR (SYSDATE - 1, 'dd-mm-yyyy') || ' 16:00', 'dd-mm-yyyy hh24:mi'),
                             '12', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 08:00', 'dd-mm-yyyy hh24:mi'),
                             '16', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 12:00', 'dd-mm-yyyy hh24:mi'),
                             SYSDATE + 5 / 1440)
           GROUP BY md.ins_srtdiscipline_key,
                    md.ins_discipline_key,
                    md.ins_discipline_omschrijving,
                    sm.mld_stdmelding_key,
                    sm.mld_stdmelding_omschrijving,
                    m.mld_melding_key,
                    md.ins_discipline_email,
                    km.mld_kenmerkmelding_waarde) x
          LEFT JOIN (SELECT mld_stdmelding_key, mld_kenmerk_niveau, mld_kenmerk_key
                       FROM mld_kenmerk
                      WHERE mld_kenmerk_verwijder IS NULL
                            AND mld_srtkenmerk_key = 5100) y -- Bij afmelden mee te sturen bijlagen
             ON ((x.mld_stdmelding_key = y.mld_stdmelding_key AND y.mld_kenmerk_niveau = 'S')
                 OR (x.ins_discipline_key = y.mld_stdmelding_key AND y.mld_kenmerk_niveau = 'D')
                 OR (x.ins_srtdiscipline_key = y.mld_stdmelding_key AND y.mld_kenmerk_niveau = 'T'))
          LEFT JOIN fac_srtnotificatie sn
             ON x.fac_srtnotificatie_key = sn.fac_srtnotificatie_key;

-- RWSN#31363: CUST10-noti naar externe bezoeker nav. registratie afspraak.
/* Formatted on 14-2-2017 9:45:15 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_noti_ext_bezoeker
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (
             REPLACE (sn.fac_srtnotificatie_oms,
                      '##KEY##',
                      TO_CHAR (a.bez_afspraak_key)),
             '##DATIJD##',
             TO_CHAR (a.bez_afspraak_datum, 'dd-mm-yyyy hh24:mi')),
          a.bez_afspraak_key,
          NULL,
          NULL,
          kb.bez_kenmerkwaarde_waarde,
          NULL,
          NULL
     FROM fac_tracking t,
          bez_afspraak a,
          bez_bezoekers b,
          bez_kenmerkwaarde kb,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE     t.fac_srtnotificatie_key = 14                          -- BEZMUT
          AND t.fac_tracking_refkey = a.bez_afspraak_key
          AND a.bez_afspraak_key = b.bez_afspraak_key
          AND b.bez_bezoekers_key = kb.bez_bezoekers_key
          AND kb.bez_kenmerk_key = 1001                        -- E-mail adres
          AND EXISTS -- Als waarde voor Notificeren-vinkje bestaat, dan gezet!
                (SELECT 1
                   FROM bez_kenmerkwaarde
                  WHERE bez_kenmerkwaarde_verwijder IS NULL
                        AND bez_kenmerk_key = 1002       -- Notificeren-vinkje
                        AND bez_bezoekers_key = b.bez_bezoekers_key)
          AND sn.fac_srtnotificatie_code = 'CUST10'
          AND nj.fac_notificatie_job_view = 'RWSN_V_NOTI_EXT_BEZOEKER'
          AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun;

--=====================================================================================
-- export catering gegevens naar AAFM
---------------------------------------------------------------------------------------
CREATE OR REPLACE VIEW rwsn_v_export_catering (result, result_order)
AS
SELECT    '"prs_perslid_naam_full";'
       || '"prs_afdeling_naam";'
       || '"prs_afdeling_omschrijving";'
       || '"prs_kostenplaats_nr";'
       || '"prs_kostenplaats_omschrijving";'
       || '"res_reservering_key";'
       || '"res_rsv_ruimte_volgnr";'
       || '"res_rsv_artikel_key";'
       || '"res_artikel_nr";'
       || '"res_artikel_omschrijving";'
       || '"ins_discipline_omschrijving";'
       || '"res_rsv_artikel_aantal";'
       || '"res_rsv_artikel_prijs";'
       || '"res_rsv_artikel_inkoopprijs";'
       || '"res_rsv_artikel_levering";'
       || '"res_artikel_prijs";'
       || '"res_artikel_inkoopprijs";'
       || '"alg_locatie_code";'
       || '"alg_locatie_omschrijving";'
       || '"alg_gebouw_code";'
       || '"alg_gebouw_omschrijving";'
       || '"alg_verdieping_code";'
       || '"alg_verdieping_omschrijving";'
       || '"alg_ruimte_nr";'
       || '"alg_ruimte_omschrijving";'
       || '"res_rsv_artikel_verwijder";'
       || '"res_status_bo_key";',
       0
  FROM DUAL
UNION ALL
SELECT      '"' ||pf.prs_perslid_naam_full
       || '";"' ||a.prs_afdeling_naam
       || '";"' ||a.prs_afdeling_omschrijving
       || '";"' ||k.prs_kostenplaats_nr
       || '";"' ||k.prs_kostenplaats_omschrijving
       || '";"' ||to_char(rrr.res_reservering_key)
       || '";"' ||to_char(rrr.res_rsv_ruimte_volgnr)
       || '";"' ||to_char(rra.res_rsv_artikel_key)
       || '";"' ||ra.res_artikel_nr
       || '";"' ||ra.res_artikel_omschrijving
       || '";"' ||d.ins_discipline_omschrijving
       || '";"' ||to_char(rra.res_rsv_artikel_aantal)
       || '";"' ||replace(to_char(rra.res_rsv_artikel_prijs), '.', ',')
       || '";"' ||replace(to_char(rra.res_rsv_artikel_inkoopprijs), '.', ',')
       || '";"' ||to_char(rra.res_rsv_artikel_levering, 'yyyymmdd hh24miss')
       || '";"' ||replace(to_char(ra.res_artikel_prijs), '.', ',')
       || '";"' ||replace(to_char(ra.res_artikel_inkoopprijs ), '.', ',')
       || '";"' ||alg_locatie_code
       || '";"' ||alg_locatie_omschrijving
       || '";"' ||alg_gebouw_code
       || '";"' ||alg_gebouw_omschrijving
       || '";"' ||alg_verdieping_code
       || '";"' ||alg_verdieping_omschrijving
       || '";"' ||alg_ruimte_nr
       || '";"' ||alg_ruimte_omschrijving
       || '";"' ||to_char(res_rsv_artikel_verwijder, 'yyyymmdd hh24miss')
       || '";"' ||to_char(rra.res_status_bo_key)
       || '"',
       res_rsv_artikel_key
  FROM res_rsv_ruimte rrr,
       res_rsv_artikel rra,
       alg_ruimte r,
       alg_verdieping v,
       alg_gebouw g,
       alg_locatie l,
       res_artikel ra,
       ins_tab_discipline d,
       prs_perslid p,
       prs_v_perslid_fullnames_all pf,
       prs_afdeling a,
       prs_kostenplaats k,
       (
          SELECT  MAX (ira.alg_ruimte_key) alg_ruimte_key,
          irrr.res_rsv_ruimte_key
     FROM res_rsv_ruimte irrr,
          res_ruimte_opstelling iro,
          res_ruimte irr,
          res_alg_ruimte ira
    WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key
      AND iro.res_ruimte_key = irr.res_ruimte_key
      AND irr.res_ruimte_key = ira.res_ruimte_key
        GROUP BY irrr.res_rsv_ruimte_key) r2a
 WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
   AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
   AND r.alg_ruimte_key = COALESCE(r2a.alg_ruimte_key, rrr.alg_ruimte_key)
   AND r.alg_verdieping_key = v.alg_verdieping_key
   AND v.alg_gebouw_key = g.alg_gebouw_key
   AND g.alg_locatie_key = l.alg_locatie_key
   AND (rra.res_status_bo_key = 5
     OR (rra.res_status_bo_key <> 6
     AND rra.res_rsv_artikel_verwijder IS NOT NULL))
   AND rra.res_artikel_key = ra.res_artikel_key
   AND ra.res_discipline_key = d.ins_discipline_key
   AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
   AND p.prs_perslid_key = pf.prs_perslid_key
   AND p.prs_afdeling_key = a.prs_afdeling_key
   AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
   AND rra.res_rsv_artikel_levering > to_date('20130115', 'yyyymmdd')
   AND rra.res_rsv_artikel_levering < to_date(to_char(sysdate, 'yyyymm') || '01', 'yyyymmdd')
   AND to_char(SYSDATE, 'dd') = '01';

CREATE OR REPLACE PROCEDURE rwsn_export_catering (p_applname   IN VARCHAR2,
                                                  p_applrun    IN VARCHAR2,
                                                  p_filedir    IN VARCHAR2,
                                                  p_filename   IN VARCHAR2)
AS
   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   UPDATE res_rsv_artikel rra
      SET res_status_bo_key = 6
    WHERE rra.res_rsv_artikel_key IN
                (SELECT result_order FROM rwsn_v_export_catering);

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Exception ' || oracle_err_mes;
      fac.writelog (p_applname,
                    'E',
                    v_errormsg,
                    'Catering op verwerkt(6) zetten');
      COMMIT;
END;
/


--=============================================================================
-- VASTE RAPPORTAGES
-------------------------------------------------------------------------------

CREATE OR REPLACE PACKAGE RWSN AS
   -- PACKAGES voor de RWSN specifieke rapportages
   TYPE t_cursor IS REF CURSOR;
   FUNCTION bepaal_dienst (p_prs_perslid_key IN number) RETURN VARCHAR2;
   FUNCTION bepaal_dienst2 (p_prs_perslid_key IN number) RETURN VARCHAR2;
   FUNCTION afgehandelddoor (p_mld_melding_key IN number) RETURN VARCHAR2;
   FUNCTION format_string_voor_rap (p_string IN VARCHAR2, p_lengte IN NUMBER) RETURN VARCHAR2;
   FUNCTION bepaal_doorlooptijd (p_sla number, p_ingevoerd date, p_uitgevoerd date) RETURN NUMBER;
   FUNCTION bepaal_rws_kantooruren (van_date IN DATE, tot_date IN DATE) RETURN NUMBER;
   PROCEDURE rap_maand_cdbreed (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_cdbreed_gereed (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_cdbreed_klachten (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_cdbreed_int (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor, p_kwisg IN VARCHAR2);
   PROCEDURE rap_maand_cdbreed_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_fcc_lsu_int (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor, p_kwisg IN VARCHAR2);
   PROCEDURE rap_maand_fcc_lsu (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_fcc_lsu_klachten (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_fcc_locatie (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_oper_cdbreed (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_mld_op_tijd (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_cdbreed_kwisg (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_maand_fcc_kwisg (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_meldbron_fcc_maand (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_meldbron_fcc_week (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_meldbron_kcc_maand (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_meldbron_kcc_week (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_omzet (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_omzetplus (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_omzetaccept (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_kto_resultaat (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_kto_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_kruis_cat_count (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_kruis_cat_price (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_cat_per_afd (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_cat_noshow_per_afd (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_cat_noshow_per_loc (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_bezreg_per_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_mldreg_per_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_mldreg_per_vakgrp (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_resreg_per_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_resreg_op_aanmaak (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
   PROCEDURE rap_noshow_per_dienst (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
END;
/

/* Formatted on 23-7-2010 15:06:16 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PACKAGE BODY rwsn
AS
   --
   -- Algemene procedures en functies.
   --

   -- Bepaal de dienst van een persoon. De dienst is het hoogste afdelingsniveau.
   FUNCTION bepaal_dienst (p_prs_perslid_key IN NUMBER)
      RETURN VARCHAR2
   IS
      v_prs_afdeling_key NUMBER;
      v_prs_afdeling_parentkey NUMBER;
      v_prs_afdeling_omschrijving VARCHAR2 (100);
      v_prs_perslid_upper VARCHAR2 (100);
   BEGIN
      SELECT   prs_perslid_upper, prs_afdeling_key
        INTO   v_prs_perslid_upper, v_prs_afdeling_key
        FROM   prs_perslid p
       WHERE   prs_perslid_key = p_prs_perslid_key;

      IF INSTR (v_prs_perslid_upper, 'EXTERN') > 0
      THEN
         RETURN ('EXTERN');
      END IF;

      v_prs_afdeling_parentkey := v_prs_afdeling_key;

      WHILE v_prs_afdeling_parentkey IS NOT NULL
      LOOP
         SELECT   prs_afdeling_parentkey, prs_afdeling_omschrijving
           INTO   v_prs_afdeling_parentkey, v_prs_afdeling_omschrijving
           FROM   prs_afdeling
          WHERE   prs_afdeling_key = v_prs_afdeling_parentkey;
      END LOOP;

      RETURN v_prs_afdeling_omschrijving;
   END bepaal_dienst;

   -- Bepaal de dienst van een persoon. De dienst is het hoogste afdelingsniveau.
   -- Echter, er zijn uitzonderingen en die zijn in tabel met key 341 vastgelegd.
   -- Indien ik dus in deze eigen tabel een afdeling vind, dan gebruik ik deze.
   FUNCTION bepaal_dienst2 (p_prs_perslid_key IN NUMBER)
      RETURN VARCHAR2
   IS
      v_prs_afdeling_key NUMBER;
      v_prs_afdeling_parentkey NUMBER;
      v_prs_afdeling_omschrijving VARCHAR2 (100);
      v_prs_afdeling_naam VARCHAR2 (100);
      v_prs_perslid_upper VARCHAR2 (100);
      v_fac_usrdata_omschr VARCHAR2 (100);
   BEGIN
      SELECT   prs_perslid_upper, prs_afdeling_key
        INTO   v_prs_perslid_upper, v_prs_afdeling_key
        FROM   prs_perslid p
       WHERE   prs_perslid_key = p_prs_perslid_key;

      IF INSTR (v_prs_perslid_upper, 'EXTERN') > 0
      THEN
         RETURN ('EXTERN');
      END IF;

      v_prs_afdeling_parentkey := v_prs_afdeling_key;

      WHILE v_prs_afdeling_parentkey IS NOT NULL
      LOOP
         SELECT   prs_afdeling_parentkey, prs_afdeling_omschrijving, prs_afdeling_naam, fac_usrdata_omschr
           INTO   v_prs_afdeling_parentkey, v_prs_afdeling_omschrijving, v_prs_afdeling_naam, v_fac_usrdata_omschr
           FROM   prs_afdeling a, (SELECT   fac_usrdata_omschr, fac_usrdata_code
                                     FROM   fac_usrdata
                                    WHERE   fac_usrtab_key = 341) u
          WHERE   prs_afdeling_key = v_prs_afdeling_parentkey AND a.prs_afdeling_naam = u.fac_usrdata_code(+);

         IF v_fac_usrdata_omschr IS NOT NULL
         THEN
            RETURN v_fac_usrdata_omschr;
         END IF;
      END LOOP;

      RETURN v_prs_afdeling_omschrijving;
   END bepaal_dienst2;

   FUNCTION afgehandelddoor (p_mld_melding_key NUMBER)
      RETURN VARCHAR2
   AS
      v_srtdiscipline_prefix VARCHAR2 (30);
      v_result VARCHAR2 (30);
      v_count NUMBER;
      v_afmelder NUMBER;
      v_discipline NUMBER;
   BEGIN
      v_afmelder := fac.gettrackinguserkey ('MLDAFM', p_mld_melding_key);

      SELECT   MAX (kl.prs_kenmerklink_waarde)
        INTO   v_result
        FROM   prs_kenmerklink kl
       WHERE   kl.prs_link_key = v_afmelder AND kl.prs_kenmerk_key = 1060;

      IF v_result = '601'
      THEN
         RETURN 'FCC';
      END IF;

      IF v_result = '602'
      THEN
         RETURN 'KCC';
      END IF;

      BEGIN
         SELECT   ins_srtdiscipline_prefix, d.ins_discipline_key
           INTO   v_srtdiscipline_prefix, v_discipline
           FROM   mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd
          WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                  AND std.mld_ins_discipline_key = d.ins_discipline_key
                  AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND m.mld_melding_key = p_mld_melding_key;

         CASE v_srtdiscipline_prefix
            WHEN 'F'
            THEN
               RETURN 'FACILITAIR';
            WHEN 'K'
            THEN
               SELECT   MAX (UPPER (SUBSTR (fac_groep_omschrijving, 4, INSTR (fac_groep_omschrijving, '-') - 4)))
                 INTO   v_result
                 FROM   fac_groep g, fac_gebruikersgroep gg
                WHERE       SUBSTR (fac_groep_omschrijving, 1, 3) = 'GM_'
                        AND g.fac_groep_key = gg.fac_groep_key
                        AND gg.prs_perslid_key = v_afmelder;

               RETURN v_result;
         END CASE;
      EXCEPTION
         WHEN OTHERS
         THEN
            RETURN 'ONBEKEND';
      END;
   END afgehandelddoor;

   FUNCTION format_string_voor_rap (p_string IN VARCHAR2, p_lengte IN NUMBER)
      RETURN VARCHAR2
   AS
      v_result VARCHAR2(4000);
   BEGIN
      v_result := REPLACE(p_string, CHR(13));
      v_result := REPLACE(v_result, CHR(10));
      v_result := REPLACE(v_result, CHR(34), '*');
      v_result := REPLACE(v_result, CHR(39), '*');
      v_result := REPLACE(v_result, '  ', ' ');
      v_result := REPLACE(v_result, '  ', ' ');
      v_result := REPLACE(v_result, '  ', ' ');
      v_result := TRIM(REPLACE(v_result, '  ', ' '));
      IF LENGTH(v_result) > p_lengte
      THEN
         v_result := SUBSTR(v_result, 1, p_lengte) || '...';
      END IF;

      RETURN v_result;

   END format_string_voor_rap;

   FUNCTION bepaal_doorlooptijd (p_sla NUMBER, p_ingevoerd DATE, p_uitgevoerd DATE)
      RETURN NUMBER
   IS
      v_doorlooptijd NUMBER;
   BEGIN
      v_doorlooptijd := fac.count_work_days_incltime (p_ingevoerd, p_uitgevoerd);

      IF (v_doorlooptijd - p_sla) <= 0
      THEN
         RETURN 0;
      END IF;

      IF (v_doorlooptijd - p_sla) <= 5
      THEN
         RETURN 1;
      END IF;

      IF (v_doorlooptijd - p_sla) <= 10
      THEN
         RETURN 2;
      END IF;

      RETURN 3;
   END bepaal_doorlooptijd;

   FUNCTION bepaal_rws_kantooruren (van_date IN DATE, tot_date IN DATE)
      RETURN NUMBER
   IS
      c_kt_van      NUMBER := 8;
      c_kt_tot      NUMBER := 17.5;
      v_dl          NUMBER;
      lbackwards    BOOLEAN;
      v_van_date    DATE;
      v_van_uur     NUMBER;
      v_tot_date    DATE;
      v_tot_uur     NUMBER;
      v_loop_date   DATE;
      v_count       NUMBER;
   BEGIN
      v_dl := 0;

      IF (van_date > tot_date)
      THEN
         v_van_date :=
            TO_DATE (TO_CHAR (tot_date, 'yyyymmddhh24mi'), 'yyyymmddhh24mi');
         v_tot_date :=
            TO_DATE (TO_CHAR (van_date, 'yyyymmddhh24mi'), 'yyyymmddhh24mi');
         lbackwards := TRUE;
      ELSE
         v_van_date :=
            TO_DATE (TO_CHAR (van_date, 'yyyymmddhh24mi'), 'yyyymmddhh24mi');
         v_tot_date :=
            TO_DATE (TO_CHAR (tot_date, 'yyyymmddhh24mi'), 'yyyymmddhh24mi');
         lbackwards := FALSE;
      END IF;

      v_loop_date := TRUNC (van_date);

      IF ( ( ( (v_van_date - TRUNC (v_van_date)) * 24) - c_kt_van) < 0)
      THEN
         v_van_uur := c_kt_van;
      ELSE
         IF ( ( ( (v_van_date - TRUNC (v_van_date)) * 24) - c_kt_tot) < 0)
         THEN
            v_van_uur := (v_van_date - TRUNC (v_van_date)) * 24;
         ELSE
            v_van_uur := c_kt_tot;
         END IF;
      END IF;

      IF ( ( ( (v_tot_date - TRUNC (v_tot_date)) * 24) - c_kt_van) < 0)
      THEN
         v_tot_uur := c_kt_van;
      ELSE
         IF ( ( ( (v_tot_date - TRUNC (v_tot_date)) * 24) - c_kt_tot) < 0)
         THEN
            v_tot_uur := (v_tot_date - TRUNC (v_tot_date)) * 24;
         ELSE
            v_tot_uur := c_kt_tot;
         END IF;
      END IF;

      WHILE (v_loop_date <= v_tot_date)
      LOOP
         SELECT   COUNT ( * )
           INTO   v_count
           FROM   mld_vrije_dagen
          WHERE   mld_vrije_dagen_datum = v_loop_date;

         IF (v_count = 0 AND TO_CHAR (v_loop_date, 'd') NOT IN ('1', '7'))
         THEN
            CASE
               WHEN TRUNC (v_van_date) = TRUNC (v_tot_date)
               THEN
                  v_dl := v_dl + (v_tot_uur - v_van_uur);
               WHEN v_loop_date = TRUNC (v_van_date)
               THEN
                  v_dl := v_dl + (c_kt_tot - v_van_uur);
               WHEN v_loop_date = TRUNC (v_tot_date)
               THEN
                  v_dl := v_dl + (v_tot_uur - c_kt_van);
               ELSE
                  v_dl := v_dl + (c_kt_tot - c_kt_van);
            END CASE;
         END IF;

         v_loop_date := v_loop_date + 1;
      END LOOP;

      IF lbackwards
      THEN
         RETURN 0 - v_dl;
      ELSE
         RETURN v_dl;
      END IF;
   END bepaal_rws_kantooruren;


   PROCEDURE rap_maand_cdbreed_int (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '13-05-2005'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor,
                                    p_kwisg       IN     VARCHAR2
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   1 volgorde,
                    onderdeel,
                    vakgroep,
                    SUM (n) n,
                    SUM (bulki) bulki,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (abulki) abulki,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   vakgroep,
                              n,
                              bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > v_datum_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              a,
                              bulki abulki,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld > v_datum_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND status = 'a'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum < v_datum_tot
                              AND mld_melding_afgemeld > v_datum_tot
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              n ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > v_year_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld > v_year_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND kwisg LIKE p_kwisg
                              AND status = 'a')
         GROUP BY   vakgroep, onderdeel
         UNION ALL
           SELECT   2 volgorde,
                    onderdeel,
                    'Totaal',
                    SUM (n) n,
                    SUM (bulki) bulki,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (abulki) abulki,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   vakgroep,
                              n,
                              bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > v_datum_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              a,
                              bulki abulki,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld > v_datum_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND status = 'a'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum < v_datum_tot
                              AND mld_melding_afgemeld > v_datum_tot
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              n ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > v_year_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld > v_year_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND kwisg LIKE p_kwisg
                              AND status = 'a')
         GROUP BY   onderdeel;
   END rap_maand_cdbreed_int;

   PROCEDURE rap_maand_cdbreed (user_key      IN     NUMBER,
                                p_datum_van   IN     VARCHAR2                           -- Let wel: formaat '13-05-2005'
                                                             ,
                                p_datum_tot   IN     VARCHAR2,
                                p_cursor         OUT t_cursor
                               )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      rap_maand_cdbreed_int (user_key, p_datum_van, p_datum_tot, p_cursor, '%');
   END rap_maand_cdbreed;

   PROCEDURE rap_maand_cdbreed_gereed (user_key      IN     NUMBER,
                                       p_datum_van   IN     VARCHAR2                    -- Let wel: formaat '13-05-2005'
                                                                    ,
                                       p_datum_tot   IN     VARCHAR2,
                                       p_cursor         OUT t_cursor
                                      )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   1 volgorde,
                    onderdeel,
                    vakgroep,
                    SUM (n) n,
                    SUM (bulki) bulki,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (abulki) abulki,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   vakgroep,
                              n,
                              bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE   mld_melding_datum > v_datum_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              a,
                              bulki abulki,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE       mld_melding_afgemeld > v_datum_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND status = 'a'
                              AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              n ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE   mld_melding_datum > v_year_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE       mld_melding_afgemeld > v_year_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND kwisg LIKE '%'
                              AND status = 'a')
         GROUP BY   vakgroep, onderdeel
         UNION ALL
           SELECT   2 volgorde,
                    onderdeel,
                    'Totaal',
                    SUM (n) n,
                    SUM (bulki) bulki,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (abulki) abulki,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   vakgroep,
                              n,
                              bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE   mld_melding_datum > v_datum_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              a,
                              bulki abulki,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE       mld_melding_afgemeld > v_datum_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND status = 'a'
                              AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              n ny,
                              0 a,
                              0 abulki,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE   mld_melding_datum > v_year_van AND mld_melding_datum < v_datum_tot AND kwisg LIKE '%'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 bulki,
                              0 ny,
                              0 a,
                              0 abulki,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_planlooptijd d
                      WHERE       mld_melding_afgemeld > v_year_van
                              AND mld_melding_afgemeld < v_datum_tot
                              AND kwisg LIKE '%'
                              AND status = 'a')
         GROUP BY   onderdeel;
   END rap_maand_cdbreed_gereed;

   PROCEDURE rap_maand_cdbreed_klachten (user_key      IN     NUMBER,
                                         p_datum_van   IN     VARCHAR2                  -- Let wel: formaat '13-05-2005'
                                                                      ,
                                         p_datum_tot   IN     VARCHAR2,
                                         p_cursor         OUT t_cursor
                                        )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      rap_maand_cdbreed_int (user_key, p_datum_van, p_datum_tot, p_cursor, 'Klacht');
   END rap_maand_cdbreed_klachten;

   PROCEDURE rap_maand_cdbreed_dienst (user_key      IN     NUMBER,
                                       p_datum_van   IN     VARCHAR2                    -- Let wel: formaat '13-05-2005'
                                                                    ,
                                       p_datum_tot   IN     VARCHAR2,
                                       p_cursor         OUT t_cursor
                                      )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   1 volgorde,
                    dienst,
                    onderdeel,
                    vakgroep,
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   dienst,
                              vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
         GROUP BY   dienst, vakgroep, onderdeel
         UNION ALL
           SELECT   2 volgorde,
                    dienst,
                    onderdeel,
                    'Totaal',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   dienst,
                              vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
         GROUP BY   dienst, onderdeel
         UNION ALL
           SELECT   3 volgorde,
                    dienst,
                    'Totaal',
                    '',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   dienst,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   dienst,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   dienst,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
         GROUP BY   dienst;
   END rap_maand_cdbreed_dienst;

   PROCEDURE rap_maand_fcc_lsu_int (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '13-05-2005'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor,
                                    p_kwisg       IN     VARCHAR2
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      -- we maken een alias voor lsu en noemen deze dienst zodat we dezelfde stylesheet kunnen gebruiken.
      OPEN p_cursor FOR
           SELECT   lsu dienst,
                    onderdeel,
                    vakgroep,
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   lsu,
                              vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   lsu,
                              vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                              AND status = 'a'
                     UNION ALL
                     SELECT   lsu,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum < v_datum_tot
                              AND mld_melding_afgemeld > v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   lsu,
                              vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   lsu,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                              AND status = 'a')
         GROUP BY   lsu, vakgroep, onderdeel
         UNION ALL
           SELECT   lsu dienst,
                    'Totaal',
                    '',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   lsu,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   lsu,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                              AND status = 'a'
                     UNION ALL
                     SELECT   lsu,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum < v_datum_tot
                              AND mld_melding_afgemeld > v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   lsu,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                     UNION ALL
                     SELECT   lsu,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND kwisg LIKE p_kwisg
                              AND status = 'a')
         GROUP BY   lsu;
   END rap_maand_fcc_lsu_int;

   PROCEDURE rap_maand_fcc_lsu (user_key      IN     NUMBER,
                                p_datum_van   IN     VARCHAR2                           -- Let wel: formaat '13-05-2005'
                                                             ,
                                p_datum_tot   IN     VARCHAR2,
                                p_cursor         OUT t_cursor
                               )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      rap_maand_fcc_lsu_int (user_key, p_datum_van, p_datum_tot, p_cursor, '%');
   END rap_maand_fcc_lsu;

   PROCEDURE rap_maand_fcc_lsu_klachten (user_key      IN     NUMBER,
                                         p_datum_van   IN     VARCHAR2                  -- Let wel: formaat '13-05-2005'
                                                                      ,
                                         p_datum_tot   IN     VARCHAR2,
                                         p_cursor         OUT t_cursor
                                        )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      rap_maand_fcc_lsu_int (user_key, p_datum_van, p_datum_tot, p_cursor, 'Klacht');
   END rap_maand_fcc_lsu_klachten;

   -- RWSN#36576/Toevoeging 3
   PROCEDURE rap_maand_fcc_locatie (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '12-08-2016'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      -- we maken een alias voor locatie en noemen deze dienst zodat we dezelfde stylesheet kunnen gebruiken.
      OPEN p_cursor FOR
           SELECT   locatiecode dienst,
                    onderdeel,
                    vakgroep,
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   locatiecode,
                              vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                     UNION ALL
                     SELECT   locatiecode,
                              vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND status = 'a'
                     UNION ALL
                     SELECT   locatiecode,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum < v_datum_tot
                              AND mld_melding_afgemeld > v_datum_tot
                              AND onderdeel = 'FB'
                     UNION ALL
                     SELECT   locatiecode,
                              vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                     UNION ALL
                     SELECT   locatiecode,
                              vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND status = 'a')
         GROUP BY   locatiecode, vakgroep, onderdeel
         UNION ALL
           SELECT   locatiecode dienst,
                    'Totaal',
                    '',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   locatiecode,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                     UNION ALL
                     SELECT   locatiecode,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND status = 'a'
                     UNION ALL
                     SELECT   locatiecode,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum < v_datum_tot
                              AND mld_melding_afgemeld > v_datum_tot
                              AND onderdeel = 'FB'
                     UNION ALL
                     SELECT   locatiecode,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                     UNION ALL
                     SELECT   locatiecode,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE       mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot
                              AND onderdeel = 'FB'
                              AND status = 'a')
         GROUP BY   locatiecode;
   END rap_maand_fcc_locatie;

   PROCEDURE rap_oper_cdbreed (user_key      IN     NUMBER,
                               p_datum_van   IN     VARCHAR2                            -- Let wel: formaat '13-05-2005'
                                                            ,
                               p_datum_tot   IN     VARCHAR2,
                               p_cursor         OUT t_cursor
                              )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   1 volgorde,
                    onderdeel,
                    vakgroep,
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (t) t,
                    SUM (t0) t0,
                    SUM (t1) t1,
                    SUM (t2) t2,
                    SUM (t3) t3,
                    SUM (g) g,
                    SUM (g0) g0,
                    SUM (g1) g1,
                    SUM (g2) g2,
                    SUM (g3) g3,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND(100
                          * ( ( (SUM (t) + SUM (g)) - (SUM (t0) + SUM (g0)))
                             / DECODE (SUM (t) + SUM (g), 0, 0.00000001, SUM (t) + SUM (g))))
                       open_buiten
             FROM   (SELECT   vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > v_datum_van
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld > v_datum_van AND status = 'a'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              t,
                              t0,
                              t1,
                              t2,
                              t3,
                              g,
                              g0,
                              g1,
                              g2,
                              g3,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   status = 'g' OR status = 't'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > TO_DATE (TO_CHAR (v_datum_van, 'yyyy') || '01' || '01', 'yyyymmdd')
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld > TO_DATE (TO_CHAR (v_datum_van, 'yyyy') || '01' || '01', 'yyyymmdd')
                              AND status = 'a')
         GROUP BY   vakgroep, onderdeel
         UNION ALL
           SELECT   2 volgorde,
                    onderdeel,
                    'Totaal',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (t) t,
                    SUM (t0) t0,
                    SUM (t1) t1,
                    SUM (t2) t2,
                    SUM (t3) t3,
                    SUM (g) g,
                    SUM (g0) g0,
                    SUM (g1) g1,
                    SUM (g2) g2,
                    SUM (g3) g3,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND(100
                          * ( ( (SUM (t) + SUM (g)) - (SUM (t0) + SUM (g0)))
                             / DECODE (SUM (t) + SUM (g), 0, 0.00000001, SUM (t) + SUM (g))))
             FROM   (SELECT   vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > v_datum_van
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld > v_datum_van AND status = 'a'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              t,
                              t0,
                              t1,
                              t2,
                              t3,
                              g,
                              g0,
                              g1,
                              g2,
                              g3,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   status = 'g' OR status = 't'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum > TO_DATE (TO_CHAR (v_datum_van, 'yyyy') || '01' || '01', 'yyyymmdd')
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 t,
                              0 t0,
                              0 t1,
                              0 t2,
                              0 t3,
                              0 g,
                              0 g0,
                              0 g1,
                              0 g2,
                              0 g3,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld > TO_DATE (TO_CHAR (v_datum_van, 'yyyy') || '01' || '01', 'yyyymmdd')
                              AND status = 'a')
         GROUP BY   onderdeel;
   END rap_oper_cdbreed;

   PROCEDURE rap_mld_op_tijd (user_key      IN     NUMBER,
                              p_datum_van   IN     VARCHAR2                             -- Let wel: formaat '13-05-2005'
                                                           ,
                              p_datum_tot   IN     VARCHAR2,
                              p_cursor         OUT t_cursor
                             )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   UPPER (onderdeel) onderdeel,
                    UPPER (eenheid) eenheid,
                    norm_eenheid norm,
                    ROUND ( (SUM (optijd) / DECODE (SUM (tot), 0, 0.000001, SUM (tot))) * 100) tot,
                    ROUND ( (SUM (jan_optijd) / DECODE (SUM (jan), 0, 0.000001, SUM (jan))) * 100) jan,
                    ROUND ( (SUM (feb_optijd) / DECODE (SUM (feb), 0, 0.000001, SUM (feb))) * 100) feb,
                    ROUND ( (SUM (maa_optijd) / DECODE (SUM (maa), 0, 0.000001, SUM (maa))) * 100) maa,
                    ROUND ( (SUM (apr_optijd) / DECODE (SUM (apr), 0, 0.000001, SUM (apr))) * 100) apr,
                    ROUND ( (SUM (mei_optijd) / DECODE (SUM (mei), 0, 0.000001, SUM (mei))) * 100) mei,
                    ROUND ( (SUM (jun_optijd) / DECODE (SUM (jun), 0, 0.000001, SUM (jun))) * 100) jun,
                    ROUND ( (SUM (jul_optijd) / DECODE (SUM (jul), 0, 0.000001, SUM (jul))) * 100) jul,
                    ROUND ( (SUM (aug_optijd) / DECODE (SUM (aug), 0, 0.000001, SUM (aug))) * 100) aug,
                    ROUND ( (SUM (sep_optijd) / DECODE (SUM (sep), 0, 0.000001, SUM (sep))) * 100) sep,
                    ROUND ( (SUM (okt_optijd) / DECODE (SUM (okt), 0, 0.000001, SUM (okt))) * 100) okt,
                    ROUND ( (SUM (nov_optijd) / DECODE (SUM (nov), 0, 0.000001, SUM (nov))) * 100) nov,
                    ROUND ( (SUM (dec_optijd) / DECODE (SUM (dec), 0, 0.000001, SUM (dec))) * 100) dec
             FROM   rwsn_v_rap_opl_mld_detail
            WHERE   datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   onderdeel, eenheid, norm_eenheid
         UNION ALL
           SELECT   UPPER (onderdeel),
                    'Totaal',
                    norm_onderdeel norm,
                    ROUND ( (SUM (optijd) / DECODE (SUM (tot), 0, 0.000001, SUM (tot))) * 100) tot,
                    ROUND ( (SUM (jan_optijd) / DECODE (SUM (jan), 0, 0.000001, SUM (jan))) * 100) jan,
                    ROUND ( (SUM (feb_optijd) / DECODE (SUM (feb), 0, 0.000001, SUM (feb))) * 100) feb,
                    ROUND ( (SUM (maa_optijd) / DECODE (SUM (maa), 0, 0.000001, SUM (maa))) * 100) maa,
                    ROUND ( (SUM (apr_optijd) / DECODE (SUM (apr), 0, 0.000001, SUM (apr))) * 100) apr,
                    ROUND ( (SUM (mei_optijd) / DECODE (SUM (mei), 0, 0.000001, SUM (mei))) * 100) mei,
                    ROUND ( (SUM (jun_optijd) / DECODE (SUM (jun), 0, 0.000001, SUM (jun))) * 100) jun,
                    ROUND ( (SUM (jul_optijd) / DECODE (SUM (jul), 0, 0.000001, SUM (jul))) * 100) jul,
                    ROUND ( (SUM (aug_optijd) / DECODE (SUM (aug), 0, 0.000001, SUM (aug))) * 100) aug,
                    ROUND ( (SUM (sep_optijd) / DECODE (SUM (sep), 0, 0.000001, SUM (sep))) * 100) sep,
                    ROUND ( (SUM (okt_optijd) / DECODE (SUM (okt), 0, 0.000001, SUM (okt))) * 100) okt,
                    ROUND ( (SUM (nov_optijd) / DECODE (SUM (nov), 0, 0.000001, SUM (nov))) * 100) nov,
                    ROUND ( (SUM (dec_optijd) / DECODE (SUM (dec), 0, 0.000001, SUM (dec))) * 100) dec
             FROM   rwsn_v_rap_opl_mld_detail
            WHERE   datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   onderdeel, norm_onderdeel
         UNION ALL
           SELECT   'Totaal',
                    '',
                    norm_totaal norm,
                    ROUND ( (SUM (optijd) / DECODE (SUM (tot), 0, 0.000001, SUM (tot))) * 100) tot,
                    ROUND ( (SUM (jan_optijd) / DECODE (SUM (jan), 0, 0.000001, SUM (jan))) * 100) jan,
                    ROUND ( (SUM (feb_optijd) / DECODE (SUM (feb), 0, 0.000001, SUM (feb))) * 100) feb,
                    ROUND ( (SUM (maa_optijd) / DECODE (SUM (maa), 0, 0.000001, SUM (maa))) * 100) maa,
                    ROUND ( (SUM (apr_optijd) / DECODE (SUM (apr), 0, 0.000001, SUM (apr))) * 100) apr,
                    ROUND ( (SUM (mei_optijd) / DECODE (SUM (mei), 0, 0.000001, SUM (mei))) * 100) mei,
                    ROUND ( (SUM (jun_optijd) / DECODE (SUM (jun), 0, 0.000001, SUM (jun))) * 100) jun,
                    ROUND ( (SUM (jul_optijd) / DECODE (SUM (jul), 0, 0.000001, SUM (jul))) * 100) jul,
                    ROUND ( (SUM (aug_optijd) / DECODE (SUM (aug), 0, 0.000001, SUM (aug))) * 100) aug,
                    ROUND ( (SUM (sep_optijd) / DECODE (SUM (sep), 0, 0.000001, SUM (sep))) * 100) sep,
                    ROUND ( (SUM (okt_optijd) / DECODE (SUM (okt), 0, 0.000001, SUM (okt))) * 100) okt,
                    ROUND ( (SUM (nov_optijd) / DECODE (SUM (nov), 0, 0.000001, SUM (nov))) * 100) nov,
                    ROUND ( (SUM (dec_optijd) / DECODE (SUM (dec), 0, 0.000001, SUM (dec))) * 100) dec
             FROM   rwsn_v_rap_opl_mld_detail
            WHERE   datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   norm_totaal;
   END rap_mld_op_tijd;

   PROCEDURE rap_maand_cdbreed_kwisg (user_key      IN     NUMBER,
                                      p_datum_van   IN     VARCHAR2                     -- Let wel: formaat '13-05-2005'
                                                                   ,
                                      p_datum_tot   IN     VARCHAR2,
                                      p_cursor         OUT t_cursor
                                     )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   1 volgorde,
                    onderdeel,
                    kwisg vakgroep,
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   kwisg,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
         GROUP BY   kwisg, onderdeel
         UNION ALL
           SELECT   2 volgorde,
                    onderdeel,
                    'Totaal',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'i'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              onderdeel,
                              'a'
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
         GROUP BY   onderdeel;
   END rap_maand_cdbreed_kwisg;

   PROCEDURE rap_maand_fcc_kwisg (user_key      IN     NUMBER,
                                  p_datum_van   IN     VARCHAR2                         -- Let wel: formaat '13-05-2005'
                                                               ,
                                  p_datum_tot   IN     VARCHAR2,
                                  p_cursor         OUT t_cursor
                                 )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
      v_year_van DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;
      v_year_van := fac.safe_to_date ('01-01-' || TO_CHAR (v_datum_van, 'yyyy'), 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   1 volgorde,
                    lsu,
                    kwisg vakgroep,
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))) uitv_optijd,
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o)))) open_buiten
             FROM   (SELECT   kwisg,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'i',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              lsu,
                              'a',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'a',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'i',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   kwisg,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'a',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
            WHERE   onderdeel = 'FB'
         GROUP BY   kwisg, lsu
         UNION ALL
           SELECT   2 volgorde,
                    lsu,
                    'Totaal',
                    SUM (n) n,
                    SUM (ny) ny,
                    SUM (zelfservice) zs,
                    SUM (a) a,
                    SUM (ay) ay,
                    SUM (zelfafgemeld) za,
                    SUM (a0) a0,
                    SUM (a1) a1,
                    SUM (a2) a2,
                    SUM (a3) a3,
                    SUM (o) o,
                    SUM (o0) o0,
                    SUM (o) - SUM (o0) o1,
                    ROUND (100 * (SUM (a0) / DECODE (SUM (a), 0, 0.00000001, SUM (a)))),
                    ROUND (100 * ( (SUM (o) - SUM (o0)) / DECODE (SUM (o), 0, 0.00000001, SUM (o))))
             FROM   (SELECT   vakgroep,
                              n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'i',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              a,
                              0 ay,
                              a0,
                              a1,
                              a2,
                              a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              zelfafgemeld,
                              lsu,
                              'a',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_datum_van AND v_datum_tot AND status = 'a'
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              n o,
                              --DECODE (SIGN (sla_norm - v_datum_tot), -1, 0, 1) o0,
                              DECODE (SIGN (sla_norm - fac.count_work_days_incltime (mld_melding_datum, v_datum_tot)), -1, 0, 1) o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'a',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum < v_datum_tot AND mld_melding_afgemeld > v_datum_tot
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              n ny,
                              0 a,
                              0 ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'i',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_datum BETWEEN v_year_van AND v_datum_tot
                     UNION ALL
                     SELECT   vakgroep,
                              0 n,
                              0 ny,
                              0 a,
                              a ay,
                              0 a0,
                              0 a1,
                              0 a2,
                              0 a3,
                              0 o,
                              0 o0,
                              0 zelfservice,
                              0 zelfafgemeld,
                              lsu,
                              'a',
                              onderdeel
                       FROM   rwsn_v_rap_doorlooptijd d
                      WHERE   mld_melding_afgemeld BETWEEN v_year_van AND v_datum_tot AND status = 'a')
            WHERE   onderdeel = 'FB'
         GROUP BY   lsu;
   END rap_maand_fcc_kwisg;

   PROCEDURE rap_meldbron_kcc_week (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '13-05-2005'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   jaar,
                    week,
                    TO_CHAR (MIN (mld_melding_datum), 'dd-mm-yyyy') startdatum,
                    TO_CHAR (MAX (mld_melding_datum), 'dd-mm-yyyy') einddatum,
                    SUM (brief) brief,
                    SUM (email) email,
                    SUM (fax) fax,
                    SUM (import) import,
                    SUM (internet) internet,
                    SUM (mondeling) mondeling,
                    SUM (telefoon) telefoon,
                    SUM (systeem) systeem,
                    SUM (formulier) formulier,
                    SUM (onbekend) onbekend,
                    SUM (totaal) totaal
             FROM   rwsn_v_rap_meldbron
            WHERE   ins_srtdiscipline_key = 3                                                                     -- KCC
                                             AND mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   jaar, week;
   END rap_meldbron_kcc_week;

   PROCEDURE rap_meldbron_kcc_maand (user_key      IN     NUMBER,
                                     p_datum_van   IN     VARCHAR2                      -- Let wel: formaat '13-05-2005'
                                                                  ,
                                     p_datum_tot   IN     VARCHAR2,
                                     p_cursor         OUT t_cursor
                                    )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   jaar,
                    maand,
                    TO_CHAR (MIN (mld_melding_datum), 'dd-mm-yyyy') startdatum,
                    TO_CHAR (MAX (mld_melding_datum), 'dd-mm-yyyy') einddatum,
                    SUM (brief) brief,
                    SUM (email) email,
                    SUM (fax) fax,
                    SUM (import) import,
                    SUM (internet) internet,
                    SUM (mondeling) mondeling,
                    SUM (telefoon) telefoon,
                    SUM (systeem) systeem,
                    SUM (formulier) formulier,
                    SUM (onbekend) onbekend,
                    SUM (totaal) totaal
             FROM   rwsn_v_rap_meldbron
            WHERE   ins_srtdiscipline_key = 3                                                                     -- KCC
                                             AND mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   jaar, maand;
   END rap_meldbron_kcc_maand;

   PROCEDURE rap_meldbron_fcc_week (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '13-05-2005'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   jaar,
                    week,
                    TO_CHAR (MIN (mld_melding_datum), 'dd-mm-yyyy') startdatum,
                    TO_CHAR (MAX (mld_melding_datum), 'dd-mm-yyyy') einddatum,
                    SUM (brief) brief,
                    SUM (email) email,
                    SUM (fax) fax,
                    SUM (import) import,
                    SUM (internet) internet,
                    SUM (mondeling) mondeling,
                    SUM (telefoon) telefoon,
                    SUM (systeem) systeem,
                    SUM (formulier) formulier,
                    SUM (onbekend) onbekend,
                    SUM (totaal) totaal
             FROM   rwsn_v_rap_meldbron
            WHERE   ins_srtdiscipline_key = 1                                                                     -- FCC
                                             AND mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   jaar, week;
   END rap_meldbron_fcc_week;

   PROCEDURE rap_meldbron_fcc_maand (user_key      IN     NUMBER,
                                     p_datum_van   IN     VARCHAR2                      -- Let wel: formaat '13-05-2005'
                                                                  ,
                                     p_datum_tot   IN     VARCHAR2,
                                     p_cursor         OUT t_cursor
                                    )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   jaar,
                    maand,
                    TO_CHAR (MIN (mld_melding_datum), 'dd-mm-yyyy') startdatum,
                    TO_CHAR (MAX (mld_melding_datum), 'dd-mm-yyyy') einddatum,
                    SUM (brief) brief,
                    SUM (email) email,
                    SUM (fax) fax,
                    SUM (import) import,
                    SUM (internet) internet,
                    SUM (mondeling) mondeling,
                    SUM (telefoon) telefoon,
                    SUM (systeem) systeem,
                    SUM (formulier) formulier,
                    SUM (onbekend) onbekend,
                    SUM (totaal) totaal
             FROM   rwsn_v_rap_meldbron
            WHERE   ins_srtdiscipline_key = 1                                                                     -- FCC
                                             AND mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   jaar, maand;
   END rap_meldbron_fcc_maand;

   PROCEDURE rap_omzet (user_key      IN     NUMBER,
                        p_datum_van   IN     VARCHAR2 -- Let wel: formaat '13-05-2005'
                                                     ,
                        p_datum_tot   IN     VARCHAR2,
                        p_cursor         OUT t_cursor)
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   COALESCE (sd.ins_srtdiscipline_omschrijving, 'FCC')
                       organisatie,
                    (SELECT   prs_perslid_naam_full
                       FROM   prs_v_perslid_fullnames_all pf
                      WHERE   pf.prs_perslid_key = p.prs_perslid_key)
                       medewerker,
                    DECODE (p.vakgroep_key,
                            -- -1, 'Reservering', -- Per 5i vervallen!
                            -2, 'Deelreservering',
                            d.ins_discipline_omschrijving)
                       vakgroep,
                    TO_NUMBER (ingevoerd) ingevoerd,
                    TO_NUMBER (ingezien) ingezien,
                    TO_NUMBER (afgemeld) afgemeld
             FROM   (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) ingevoerd
                         FROM   mld_melding m,
                                mld_stdmelding std,
                                fac_v_webgebruiker wg,
                                fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 26    -- MLDNEW
                                AND t.prs_perslid_key = wg.prs_perslid_key
                                AND wg.fac_functie_key = 55
                                AND wg.ins_discipline_key =
                                      std.mld_ins_discipline_key
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key
                     UNION ALL
                       SELECT   t.prs_perslid_key,
                                -2,
                                COUNT (rrr.res_rsv_ruimte_key) ingevoerd
                         FROM   res_rsv_ruimte rrr, fac_tracking t
                        WHERE   rrr.res_rsv_ruimte_aanmaak BETWEEN v_datum_van
                                                               AND  v_datum_tot
                                AND rrr.res_rsv_ruimte_key =
                                      t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 34    -- RESNEW
                                AND t.fac_tracking_key IN
                                         (SELECT   MAX (fac_tracking_key)
                                            FROM   fac_tracking
                                           WHERE   fac_srtnotificatie_key = 34
                                                   AND fac_tracking_refkey =
                                                         t.fac_tracking_refkey)
                     GROUP BY   t.prs_perslid_key) i,
                    (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) ingezien
                         FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 25    -- MLDING
                                AND t.fac_tracking_key IN
                                         (SELECT   MAX (fac_tracking_key)
                                            FROM   fac_tracking
                                           WHERE   fac_srtnotificatie_key = 25
                                                   AND fac_tracking_refkey =
                                                         t.fac_tracking_refkey)
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key)
                    ing,
                    (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) afgemeld
                         FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 22    -- MLDAFM
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key) a,
                    (SELECT   DISTINCT
                              prs_perslid_key,
                              mld_ins_discipline_key vakgroep_key
                       FROM   (SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 26 -- MLDNEW
                               UNION ALL
                               SELECT   t.prs_perslid_key, -2
                                 FROM   res_rsv_ruimte rrr, fac_tracking t
                                WHERE   rrr.res_rsv_ruimte_aanmaak BETWEEN v_datum_van
                                                                       AND  v_datum_tot
                                        AND rrr.res_rsv_ruimte_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 34 -- RESNEW
                                        AND t.fac_tracking_key IN
                                                 (SELECT   MAX (
                                                              fac_tracking_key
                                                           )
                                                    FROM   fac_tracking
                                                   WHERE   fac_srtnotificatie_key =
                                                              34
                                                           AND fac_tracking_refkey =
                                                                 t.fac_tracking_refkey)
                               UNION ALL
                               SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 25 -- MLDING
                                        AND t.fac_tracking_key IN
                                                 (SELECT   MAX (
                                                              fac_tracking_key
                                                           )
                                                    FROM   fac_tracking
                                                   WHERE   fac_srtnotificatie_key =
                                                              25
                                                           AND fac_tracking_refkey =
                                                                 t.fac_tracking_refkey)
                               UNION ALL
                               SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 22 -- MLDAFM
                                                                         )) p,
                    ins_srtdiscipline sd,
                    ins_tab_discipline d
            WHERE       p.prs_perslid_key = i.prs_perslid_key(+)
                    AND p.prs_perslid_key = ing.prs_perslid_key(+)
                    AND p.prs_perslid_key = a.prs_perslid_key(+)
                    AND p.vakgroep_key = i.vakgroep_key(+)
                    AND p.vakgroep_key = ing.vakgroep_key(+)
                    AND p.vakgroep_key = a.vakgroep_key(+)
                    AND p.vakgroep_key = d.ins_discipline_key(+)
                    AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
                    AND p.prs_perslid_key IS NOT NULL
                    AND EXISTS
                          (SELECT   gg.prs_perslid_key
                             FROM   fac_groep g, fac_gebruikersgroep gg
                            WHERE   p.prs_perslid_key = gg.prs_perslid_key
                                    AND g.fac_groep_key = gg.fac_groep_key
                                    AND (g.fac_groep_omschrijving = 'FCC'
                                         OR g.fac_groep_omschrijving = 'KCC'))
         ORDER BY   1,
                    2,
                    3,
                    4;
   END rap_omzet;

   PROCEDURE rap_omzetplus (user_key      IN     NUMBER,
                            p_datum_van   IN     VARCHAR2 -- Let wel: formaat '13-05-2005'
                                                         ,
                            p_datum_tot   IN     VARCHAR2,
                            p_cursor         OUT t_cursor)
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   afd.prs_afdeling_naam nummer,
                    afd.prs_afdeling_omschrijving organisatie,
                    (SELECT   prs_perslid_naam_full
                       FROM   prs_v_perslid_fullnames_all pf
                      WHERE   pf.prs_perslid_key = p.prs_perslid_key)
                       medewerker,
                    DECODE (p.vakgroep_key,
                            -- -1, 'Reservering', -- Per 5i vervallen!
                            -2, 'Deelreservering',
                            d.ins_discipline_omschrijving)
                       vakgroep,
                    TO_NUMBER (ingevoerd) m_ingevoerd,
                    TO_NUMBER (ingezien) m_ingezien,
                    TO_NUMBER (geaccepteerd) m_geaccepteerd,
                    TO_NUMBER (io.aantal) o_ingevoerd,
                    TO_NUMBER (ao.aantal) o_afgemeld,
                    TO_NUMBER (afgemeld) m_afgemeld
             FROM   (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) ingevoerd
                         FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 26    -- MLDNEW
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key
                     UNION ALL
                       SELECT   t.prs_perslid_key,
                                -2,
                                COUNT (rrr.res_rsv_ruimte_key) ingevoerd
                         FROM   res_rsv_ruimte rrr, fac_tracking t
                        WHERE   rrr.res_rsv_ruimte_aanmaak BETWEEN v_datum_van
                                                               AND  v_datum_tot
                                AND rrr.res_rsv_ruimte_key =
                                      t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 34    -- RESNEW
                                AND t.fac_tracking_key IN
                                         (SELECT   MAX (fac_tracking_key)
                                            FROM   fac_tracking
                                           WHERE   fac_srtnotificatie_key = 34
                                                   AND fac_tracking_refkey =
                                                         t.fac_tracking_refkey)
                     GROUP BY   t.prs_perslid_key) i,
                    (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) ingezien
                         FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 25    -- MLDING
                                AND t.fac_tracking_key IN
                                         (SELECT   MAX (fac_tracking_key)
                                            FROM   fac_tracking
                                           WHERE   fac_srtnotificatie_key = 25
                                                   AND fac_tracking_refkey =
                                                         t.fac_tracking_refkey)
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key)
                    ing,
                    (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) geaccepteerd
                         FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 21    -- MLDACP
                                AND t.fac_tracking_key IN
                                         (SELECT   MAX (fac_tracking_key)
                                            FROM   fac_tracking
                                           WHERE   fac_srtnotificatie_key = 21
                                                   AND fac_tracking_refkey =
                                                         t.fac_tracking_refkey)
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key)
                    acp,
                    (  SELECT   o.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (o.mld_opdr_key) aantal
                         FROM   mld_melding m, mld_stdmelding std, mld_opdr o
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = o.mld_melding_key
                     GROUP BY   o.prs_perslid_key, std.mld_ins_discipline_key) io,
                    (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (o.mld_opdr_key) aantal
                         FROM   mld_melding m, mld_stdmelding std, mld_opdr o, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = o.mld_melding_key
                                AND o.mld_opdr_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 30    -- ORDAFM
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key) ao,
                    (  SELECT   t.prs_perslid_key,
                                std.mld_ins_discipline_key vakgroep_key,
                                COUNT (m.mld_melding_key) afgemeld
                         FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                        WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                        AND  v_datum_tot
                                AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                AND m.mld_melding_key = t.fac_tracking_refkey
                                AND t.fac_srtnotificatie_key = 22    -- MLDAFM
                     GROUP BY   t.prs_perslid_key, std.mld_ins_discipline_key) a,
                    (SELECT   DISTINCT prs_perslid_key, vakgroep_key
                       FROM   (SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key vakgroep_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 26 -- MLDNEW
                               UNION ALL
                               SELECT   t.prs_perslid_key, -2
                                 FROM   res_rsv_ruimte rrr, fac_tracking t
                                WHERE   rrr.res_rsv_ruimte_aanmaak BETWEEN v_datum_van
                                                                       AND  v_datum_tot
                                        AND rrr.res_rsv_ruimte_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 34 -- RESNEW
                                        AND t.fac_tracking_key IN
                                                 (SELECT   MAX (
                                                              fac_tracking_key
                                                           )
                                                    FROM   fac_tracking
                                                   WHERE   fac_srtnotificatie_key =
                                                              34
                                                           AND fac_tracking_refkey =
                                                                 t.fac_tracking_refkey)
                               UNION ALL
                               SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key vakgroep_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 25 -- MLDING
                                        AND t.fac_tracking_key IN
                                                 (SELECT   MAX (
                                                              fac_tracking_key
                                                           )
                                                    FROM   fac_tracking
                                                   WHERE   fac_srtnotificatie_key =
                                                              25
                                                           AND fac_tracking_refkey =
                                                                 t.fac_tracking_refkey)
                               UNION ALL
                               SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key vakgroep_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 21 -- MLDACP
                                        AND t.fac_tracking_key IN
                                                 (SELECT   MAX (
                                                              fac_tracking_key
                                                           )
                                                    FROM   fac_tracking
                                                   WHERE   fac_srtnotificatie_key =
                                                              21
                                                           AND fac_tracking_refkey =
                                                                 t.fac_tracking_refkey)
                               UNION ALL
                               SELECT   o.prs_perslid_key,
                                        std.mld_ins_discipline_key vakgroep_key
                                 FROM   mld_melding m, mld_stdmelding std, mld_opdr o
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND o.mld_melding_key =
                                              m.mld_melding_key
                               UNION ALL
                               SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key vakgroep_key
                                 FROM   mld_melding m,
                                        mld_stdmelding std,
                                        mld_opdr o,
                                        fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              o.mld_melding_key
                                        AND o.mld_opdr_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 30 -- ORDAFM
                               UNION ALL
                               SELECT   t.prs_perslid_key,
                                        std.mld_ins_discipline_key vakgroep_key
                                 FROM   mld_melding m, mld_stdmelding std, fac_tracking t
                                WHERE   m.mld_melding_datum BETWEEN v_datum_van
                                                                AND  v_datum_tot
                                        AND m.mld_stdmelding_key = std.mld_stdmelding_key
                                        AND m.mld_melding_key =
                                              t.fac_tracking_refkey
                                        AND t.fac_srtnotificatie_key = 22 -- MLDAFM
                                                                         )) p,
                    ins_tab_discipline d,
                    ins_srtdiscipline sd,
                    prs_perslid prs,
                    prs_v_afdeling_boom ab,
                    prs_afdeling afd
            WHERE       p.prs_perslid_key = i.prs_perslid_key(+)
                    AND p.prs_perslid_key = ing.prs_perslid_key(+)
                    AND p.prs_perslid_key = acp.prs_perslid_key(+)
                    AND p.prs_perslid_key = io.prs_perslid_key(+)
                    AND p.prs_perslid_key = ao.prs_perslid_key(+)
                    AND p.prs_perslid_key = a.prs_perslid_key(+)
                    AND p.vakgroep_key = i.vakgroep_key(+)
                    AND p.vakgroep_key = ing.vakgroep_key(+)
                    AND p.vakgroep_key = acp.vakgroep_key(+)
                    AND p.vakgroep_key = io.vakgroep_key(+)
                    AND p.vakgroep_key = ao.vakgroep_key(+)
                    AND p.vakgroep_key = a.vakgroep_key(+)
                    AND p.vakgroep_key = d.ins_discipline_key(+)
                    AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
                    AND p.prs_perslid_key = prs.prs_perslid_key
                    AND prs.prs_afdeling_key = ab.prs_afdeling_key
                    AND ab.prs_afdeling_key = afd.prs_afdeling_key
         ORDER BY   1,
                    2,
                    3,
                    4;
   END rap_omzetplus;

   PROCEDURE rap_omzetaccept (user_key      IN     NUMBER,
                              p_datum_van   IN     VARCHAR2 -- Let wel: formaat '13-05-2005'
                                                           ,
                              p_datum_tot   IN     VARCHAR2,
                              p_cursor         OUT t_cursor)
   AS
      v_datum_van   DATE;
      v_datum_tot   DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   DECODE (y.prs_afdeling_naam,
                            NULL, 'ONBEKEND',
                            y.prs_afdeling_naam)
                       nummer,
                    DECODE (y.prs_afdeling_omschrijving,
                            NULL, 'ONBEKEND',
                            y.prs_afdeling_omschrijving)
                       organisatie,
                    COALESCE (y.prs_perslid_naam_full, 'ONBEKEND') medewerker,
                    x.vakgroep_oms vakgroep,
                    TO_NUMBER (x.geaccepteerd) geaccepteerd
             FROM      (  SELECT   m.mldacp_userkey prs_perslid_key,
                                   m.vakgroep_oms,
                                   COUNT (m.mld_key) geaccepteerd
                            FROM   rwsn_mld_freeze m
                           WHERE   m.mld_begin_date BETWEEN v_datum_van
                                                        AND  v_datum_tot
                        GROUP BY   m.mldacp_userkey, m.vakgroep_oms) x
                    LEFT JOIN
                       (SELECT   p.prs_perslid_key,
                                 fn.prs_perslid_naam_full,
                                 a.prs_afdeling_naam,
                                 a.prs_afdeling_omschrijving
                          FROM   prs_perslid p,
                                 prs_v_perslid_fullnames_all fn,
                                 prs_afdeling a
                         WHERE   p.prs_perslid_key = fn.prs_perslid_key
                                 AND p.prs_afdeling_key = a.prs_afdeling_key) y
                    ON x.prs_perslid_key = y.prs_perslid_key
         ORDER BY   1,
                    2,
                    3,
                    4;
   END rap_omzetaccept;

   PROCEDURE rap_kto_resultaat (user_key      IN     NUMBER,
                                p_datum_van   IN     VARCHAR2                           -- Let wel: formaat '13-05-2005'
                                                             ,
                                p_datum_tot   IN     VARCHAR2,
                                p_cursor         OUT t_cursor
                               )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
         SELECT   mld_melding_key melding,
                  kto_nr ktonr,
                  COALESCE (eenheid, '-'),
                  cijfer1,
                  cijfer2,
                  cijfer3,
                  cijfer4,
                  cijfer5,
                  gem,
                  opm1,
                  opm2,
                  opm3,
                  opm4,
                  opm5,
                  ontvangen,
                  responsetijd,
                  1 volgorde
           FROM   rwsn_v_rap_kto
          WHERE   ontvangst_datum BETWEEN v_datum_van AND v_datum_tot
         UNION ALL
           SELECT   '0',
                    '0' ktonr,
                    COALESCE (eenheid, '-'),
                    --ROUND (SUM (DECODE (cijfer1, NULL, 0, cijfer1)) / SUM (DECODE (cijfer1, NULL, 0.0000001, 1)), 2),
                    --ROUND (SUM (DECODE (cijfer2, NULL, 0, cijfer2)) / SUM (DECODE (cijfer2, NULL, 0.0000001, 1)), 2),
                    --ROUND (SUM (DECODE (cijfer3, NULL, 0, cijfer3)) / SUM (DECODE (cijfer3, NULL, 0.0000001, 1)), 2),
                    --ROUND (SUM (DECODE (cijfer4, NULL, 0, cijfer4)) / SUM (DECODE (cijfer4, NULL, 0.0000001, 1)), 2),
                    --ROUND (SUM (DECODE (cijfer5, NULL, 0, cijfer5)) / SUM (DECODE (cijfer5, NULL, 0.0000001, 1)), 2),
                    --ROUND (SUM (DECODE (gem, NULL, 0, gem)) / SUM (DECODE (gem, 0, 0.0000001, 1)), 2),
                    ROUND (SUM (DECODE (cijfer1, NULL, 0, cijfer1)) / DECODE (SUM (DECODE (cijfer1, NULL, 0, 1)),0,1,SUM (DECODE (cijfer1, NULL, 0, 1))), 2),
                    ROUND (SUM (DECODE (cijfer2, NULL, 0, cijfer2)) / DECODE (SUM (DECODE (cijfer2, NULL, 0, 1)),0,1,SUM (DECODE (cijfer2, NULL, 0, 1))), 2),
                    ROUND (SUM (DECODE (cijfer3, NULL, 0, cijfer3)) / DECODE (SUM (DECODE (cijfer3, NULL, 0, 1)),0,1,SUM (DECODE (cijfer3, NULL, 0, 1))), 2),
                    ROUND (SUM (DECODE (cijfer4, NULL, 0, cijfer4)) / DECODE (SUM (DECODE (cijfer4, NULL, 0, 1)),0,1,SUM (DECODE (cijfer4, NULL, 0, 1))), 2),
                    ROUND (SUM (DECODE (cijfer5, NULL, 0, cijfer5)) / DECODE (SUM (DECODE (cijfer5, NULL, 0, 1)),0,1,SUM (DECODE (cijfer5, NULL, 0, 1))), 2),
                    ROUND (SUM (DECODE (gem, NULL, 0, gem)) / DECODE (SUM (DECODE (gem, NULL, 0, 0, 0, 1)),0,1,SUM (DECODE (gem, NULL, 0, 0, 0, 1))), 2),
                    TO_CHAR (NULL),
                    TO_CHAR (NULL),
                    TO_CHAR (NULL),
                    TO_CHAR (NULL),
                    TO_CHAR (NULL),
                    SUM (ontvangen) ontvangen,
                    ROUND (SUM (responsetijd) / SUM (ontvangen), 2),
                    2 volgorde
             FROM   rwsn_v_rap_kto
            WHERE   ontvangst_datum BETWEEN v_datum_van AND v_datum_tot
         GROUP BY   eenheid;
   END rap_kto_resultaat;

   PROCEDURE rap_kto_dienst (user_key      IN     NUMBER,
                             p_datum_van   IN     VARCHAR2                              -- Let wel: formaat '13-05-2005'
                                                          ,
                             p_datum_tot   IN     VARCHAR2,
                             p_cursor         OUT t_cursor
                            )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy') + 1;

      OPEN p_cursor FOR
           SELECT   dienst,
                    COUNT (dienst) verzonden,
                    SUM (ontv) aantal,
                    --(SUM (ontv) / COUNT (dienst)) * 100 percentage,
                    --SUM (gem) / (SUM (ontv) + 0.00001) gemiddelde,
                    --SUM (response) / (SUM (ontv) + 0.00001) response
                    ROUND((SUM (ontv) / DECODE(COUNT (dienst),0,1,COUNT (dienst))) * 100,2) percentage,
                    ROUND(SUM (gem) / DECODE(SUM (ontv),0,1,SUM (ontv)),2) gemiddelde,
                    ROUND(COALESCE(SUM (response),0) / DECODE(SUM (ontv),0,1,SUM (ontv)),2) response
             FROM   (SELECT   DECODE (kto.mld_melding_key, NULL, 0, 1) ontv,
                              (  DECODE (cijfer1, NULL, 0, cijfer1)
                               + DECODE (cijfer2, NULL, 0, cijfer2)
                               + DECODE (cijfer3, NULL, 0, cijfer3)
                               + DECODE (cijfer4, NULL, 0, cijfer4)
                               + DECODE (cijfer5, NULL, 0, cijfer5))
               / DECODE (
                      DECODE (cijfer1, NULL, 0, 1)
                    + DECODE (cijfer2, NULL, 0, 1)
                    + DECODE (cijfer3, NULL, 0, 1)
                    + DECODE (cijfer4, NULL, 0, 1)
                    + DECODE (cijfer5, NULL, 0, 1),
                    0,
                    1,
                      DECODE (cijfer1, NULL, 0, 1)
                    + DECODE (cijfer2, NULL, 0, 1)
                    + DECODE (cijfer3, NULL, 0, 1)
                    + DECODE (cijfer4, NULL, 0, 1)
                    + DECODE (cijfer5, NULL, 0, 1)
                 )
                              --/ (  DECODE (cijfer1, NULL, 0, 1)
                              --   + DECODE (cijfer2, NULL, 0, 1)
                              --   + DECODE (cijfer3, NULL, 0, 1)
                              --   + DECODE (cijfer4, NULL, 0, 1)
                              --   + DECODE (cijfer5, NULL, 0, 1)
                              --   + 0.000001)
                                 gem,
                              kto.mld_melding_datum - km.mld_kenmerkmelding_aanmaak response,
                              --rwsn.bepaal_dienst2 (m.prs_perslid_key) dienst
                              DECODE (p.prs_perslid_upper, 'EXTERN', 'EXTERN', a.prs_afdeling_omschrijving) dienst
                       FROM   mld_melding m, mld_kenmerk k, mld_kenmerkmelding km, rwsn_v_kto_basic kto,
                              prs_perslid p, prs_v_afdeling_boom ab, prs_afdeling a
                      WHERE       m.mld_melding_key = km.mld_melding_key
                              AND km.mld_kenmerk_key = k.mld_kenmerk_key
                              AND k.mld_srtkenmerk_key = 121
                              AND m.mld_melding_key = kto.mld_melding_key(+)
                              AND m.prs_perslid_key = p.prs_perslid_key
                              AND p.prs_afdeling_key = ab.prs_afdeling_key
                              AND ab.prs_afdeling_key1 = a.prs_afdeling_key
                              AND km.mld_kenmerkmelding_aanmaak BETWEEN v_datum_van AND v_datum_tot
                     UNION ALL
                     SELECT   DECODE (kto.mld_melding_key, NULL, 0, 1) ontv,
                              (  DECODE (cijfer1, NULL, 0, cijfer1)
                               + DECODE (cijfer2, NULL, 0, cijfer2)
                               + DECODE (cijfer3, NULL, 0, cijfer3)
                               + DECODE (cijfer4, NULL, 0, cijfer4)
                               + DECODE (cijfer5, NULL, 0, cijfer5))
               / DECODE (
                      DECODE (cijfer1, NULL, 0, 1)
                    + DECODE (cijfer2, NULL, 0, 1)
                    + DECODE (cijfer3, NULL, 0, 1)
                    + DECODE (cijfer4, NULL, 0, 1)
                    + DECODE (cijfer5, NULL, 0, 1),
                    0,
                    1,
                      DECODE (cijfer1, NULL, 0, 1)
                    + DECODE (cijfer2, NULL, 0, 1)
                    + DECODE (cijfer3, NULL, 0, 1)
                    + DECODE (cijfer4, NULL, 0, 1)
                    + DECODE (cijfer5, NULL, 0, 1)
                 )
                              --/ (  DECODE (cijfer1, NULL, 0, 1)
                              --   + DECODE (cijfer2, NULL, 0, 1)
                              --   + DECODE (cijfer3, NULL, 0, 1)
                              --   + DECODE (cijfer4, NULL, 0, 1)
                              --   + DECODE (cijfer5, NULL, 0, 1)
                              --   + 0.000001)
                                 gem,
                              kto.mld_melding_datum - res_kenmerkwaarde_aanmaak response,
                              --rwsn.bepaal_dienst2 (rrr.res_rsv_ruimte_host_key) dienst
                              DECODE (p.prs_perslid_upper, 'EXTERN', 'EXTERN', a.prs_afdeling_omschrijving) dienst
                       FROM   res_rsv_ruimte rrr, res_kenmerk k, res_kenmerkwaarde kw, rwsn_v_kto_basic kto,
                              prs_perslid p, prs_v_afdeling_boom ab, prs_afdeling a
                      WHERE       rrr.res_rsv_ruimte_key = kw.res_rsv_ruimte_key
                              AND kw.res_kenmerk_key = k.res_kenmerk_key
                              AND k.res_srtkenmerk_key = 22
                              AND rrr.res_rsv_ruimte_key = kto.res_rsv_ruimte_key(+)
                              AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                              AND p.prs_afdeling_key = ab.prs_afdeling_key
                              AND ab.prs_afdeling_key1 = a.prs_afdeling_key
                              AND res_kenmerkwaarde_aanmaak BETWEEN v_datum_van AND v_datum_tot)
            WHERE   dienst IS NOT NULL
         GROUP BY   dienst;
   END rap_kto_dienst;

   PROCEDURE rap_kruis_cat_count (user_key      IN     NUMBER,
                                  p_datum_van   IN     VARCHAR2                         -- Let wel: formaat '24-06-1965'
                                                               ,
                                  p_datum_tot   IN     VARCHAR2,
                                  p_cursor         OUT t_cursor
                                 )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   grid.catalogus || ' - ' || grid.artikel artikel, grid.dienst dienst, COALESCE (used.aantal, 0) aantal
             FROM      (SELECT   a.res_artikel_key,
                                 afd.prs_afdeling_key,
                                 rd.ins_discipline_omschrijving catalogus,
                                 a.res_artikel_omschrijving artikel,
                                 afd.prs_afdeling_omschrijving dienst
                          FROM   res_v_aanwezigartikel a, res_discipline rd, prs_v_aanwezigafdeling afd
                         WHERE       a.res_discipline_key = rd.ins_discipline_key
                                 AND afd.prs_afdeling_parentkey IS NULL
                                 AND afd.prs_afdeling_key <> 1) grid                                         -- Onbekend
                    LEFT JOIN
                       (  SELECT   ra.res_artikel_key, afd.prs_afdeling_key, SUM (ra.res_rsv_artikel_aantal) aantal
                            FROM   res_v_aanwezigrsv_artikel ra,
                                   res_v_aanwezigrsv_ruimte rr,
                                   prs_perslid p,
                                   prs_v_afdeling_boom ab,
                                   prs_afdeling afd
                           WHERE       ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                                   AND rr.res_rsv_ruimte_host_key = p.prs_perslid_key
                                   AND p.prs_afdeling_key = ab.prs_afdeling_key
                                   AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                   AND ra.res_rsv_artikel_levering BETWEEN v_datum_van AND v_datum_tot
                        GROUP BY   ra.res_artikel_key, afd.prs_afdeling_key) used
                    ON grid.res_artikel_key = used.res_artikel_key AND grid.prs_afdeling_key = used.prs_afdeling_key
         ORDER BY   grid.catalogus || ' - ' || grid.artikel, grid.dienst;
   END rap_kruis_cat_count;

   PROCEDURE rap_kruis_cat_price (user_key      IN     NUMBER,
                                  p_datum_van   IN     VARCHAR2                         -- Let wel: formaat '24-06-1965'
                                                               ,
                                  p_datum_tot   IN     VARCHAR2,
                                  p_cursor         OUT t_cursor
                                 )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   grid.catalogus || ' - ' || grid.artikel artikel, grid.dienst dienst, COALESCE (used.prijs, 0) prijs
             FROM      (SELECT   a.res_artikel_key,
                                 afd.prs_afdeling_key,
                                 rd.ins_discipline_omschrijving catalogus,
                                 a.res_artikel_omschrijving artikel,
                                 afd.prs_afdeling_omschrijving dienst
                          FROM   res_v_aanwezigartikel a, res_discipline rd, prs_v_aanwezigafdeling afd
                         WHERE       a.res_discipline_key = rd.ins_discipline_key
                                 AND afd.prs_afdeling_parentkey IS NULL
                                 AND afd.prs_afdeling_key <> 1) grid                                         -- Onbekend
                    LEFT JOIN
                       (  SELECT   ra.res_artikel_key,
                                   afd.prs_afdeling_key,
                                   SUM (res.getartikelprijs (ra.res_rsv_artikel_key)) prijs
                            FROM   res_v_aanwezigrsv_artikel ra,
                                   res_v_aanwezigrsv_ruimte rr,
                                   prs_perslid p,
                                   prs_v_afdeling_boom ab,
                                   prs_afdeling afd
                           WHERE       ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                                   AND rr.res_rsv_ruimte_host_key = p.prs_perslid_key
                                   AND p.prs_afdeling_key = ab.prs_afdeling_key
                                   AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                   AND ra.res_rsv_artikel_levering BETWEEN v_datum_van AND v_datum_tot
                        GROUP BY   ra.res_artikel_key, afd.prs_afdeling_key) used
                    ON grid.res_artikel_key = used.res_artikel_key AND grid.prs_afdeling_key = used.prs_afdeling_key
         ORDER BY   grid.catalogus || ' - ' || grid.artikel, grid.dienst;
   END rap_kruis_cat_price;

   PROCEDURE rap_cat_per_afd (user_key      IN     NUMBER,
                              p_datum_van   IN     VARCHAR2                             -- Let wel: formaat '24-06-1965'
                                                           ,
                              p_datum_tot   IN     VARCHAR2,
                              p_cursor         OUT t_cursor
                             )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   y.afd1 dienst,
                    y.afd2 hid,
                    y.afd3 directie,
                    y.afd4 district,
                    y.afd5 afdeling,
                    x.catalogus,
                    x.artikel,
                    x.aantal,
                    x.prijs
             FROM      (  SELECT   p.prs_afdeling_key,
                                   rd.ins_discipline_omschrijving catalogus,
                                   a.res_artikel_omschrijving artikel,
                                   SUM (ra.res_rsv_artikel_aantal) aantal,
                                   REPLACE (TO_CHAR (SUM (res.getartikelprijs (ra.res_rsv_artikel_key)), '99999990D99'),
                                            '.',
                                            ','
                                           )
                                      prijs
                            FROM   res_v_aanwezigrsv_artikel ra,
                                   res_v_aanwezigartikel a,
                                   res_discipline rd,
                                   res_v_aanwezigrsv_ruimte rr,
                                   prs_perslid p
                           WHERE       ra.res_artikel_key = a.res_artikel_key
                                   AND a.res_discipline_key = rd.ins_discipline_key
                                   AND ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
                                   AND rr.res_rsv_ruimte_host_key = p.prs_perslid_key
                                   AND ra.res_rsv_artikel_levering BETWEEN v_datum_van AND v_datum_tot
                        GROUP BY   p.prs_afdeling_key, rd.ins_discipline_omschrijving, a.res_artikel_omschrijving) x
                    LEFT JOIN
                       (SELECT   ab.prs_afdeling_key,
                                 afd1.prs_afdeling_omschrijving afd1,
                                 afd2.prs_afdeling_omschrijving afd2,
                                 afd3.prs_afdeling_omschrijving afd3,
                                 afd4.prs_afdeling_omschrijving afd4,
                                 afd5.prs_afdeling_omschrijving afd5
                          FROM   prs_v_afdeling_boom ab,
                                 prs_afdeling afd1,
                                 prs_afdeling afd2,
                                 prs_afdeling afd3,
                                 prs_afdeling afd4,
                                 prs_afdeling afd5
                         WHERE       ab.prs_afdeling_key1 = afd1.prs_afdeling_key
                                 AND ab.prs_afdeling_key2 = afd2.prs_afdeling_key(+)
                                 AND ab.prs_afdeling_key3 = afd3.prs_afdeling_key(+)
                                 AND ab.prs_afdeling_key4 = afd4.prs_afdeling_key(+)
                                 AND ab.prs_afdeling_key5 = afd5.prs_afdeling_key(+)) y
                    ON x.prs_afdeling_key = y.prs_afdeling_key
         ORDER BY   1, 2, 3, 4, 5, 6, 7;
   END rap_cat_per_afd;

   PROCEDURE rap_cat_noshow_per_afd (user_key      IN     NUMBER,
                                     p_datum_van   IN     VARCHAR2                      -- Let wel: formaat '24-06-1965'
                                                                  ,
                                     p_datum_tot   IN     VARCHAR2,
                                     p_cursor         OUT t_cursor
                                    )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   y.afd1 dienst,
                    y.afd2 hid,
                    y.afd3 directie,
                    y.afd4 district,
                    y.afd5 afdeling,
                    x.artikel,
                    x.aantal
             FROM      (  SELECT   p.prs_afdeling_key,
                                   art.res_artikel_omschrijving artikel,
                                   SUM (ra.res_rsv_artikel_aantal) aantal
                            FROM   res_v_aanwezigrsv_ruimte rrr,
                                   prs_perslid p,
                                   res_v_aanwezigrsv_artikel ra,
                                   res_artikel art
                           WHERE       rrr.RES_RSV_RUIMTE_BEZOEKERS_SHOWN is not NULL
                                   AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                                   AND rrr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
                                   AND ra.res_artikel_key = art.res_artikel_key
                                   AND ra.res_rsv_artikel_levering BETWEEN v_datum_van AND v_datum_tot
                        GROUP BY   p.prs_afdeling_key, art.res_artikel_omschrijving) x
                    LEFT JOIN
                       (SELECT   ab.prs_afdeling_key,
                                 afd1.prs_afdeling_omschrijving afd1,
                                 afd2.prs_afdeling_omschrijving afd2,
                                 afd3.prs_afdeling_omschrijving afd3,
                                 afd4.prs_afdeling_omschrijving afd4,
                                 afd5.prs_afdeling_omschrijving afd5
                          FROM   prs_v_afdeling_boom ab,
                                 prs_afdeling afd1,
                                 prs_afdeling afd2,
                                 prs_afdeling afd3,
                                 prs_afdeling afd4,
                                 prs_afdeling afd5
                         WHERE       ab.prs_afdeling_key1 = afd1.prs_afdeling_key
                                 AND ab.prs_afdeling_key2 = afd2.prs_afdeling_key(+)
                                 AND ab.prs_afdeling_key3 = afd3.prs_afdeling_key(+)
                                 AND ab.prs_afdeling_key4 = afd4.prs_afdeling_key(+)
                                 AND ab.prs_afdeling_key5 = afd5.prs_afdeling_key(+)) y
                    ON x.prs_afdeling_key = y.prs_afdeling_key
         ORDER BY   1, 2, 3, 4, 5, 6;
   END rap_cat_noshow_per_afd;

   PROCEDURE rap_cat_noshow_per_loc (user_key      IN     NUMBER,
                                     p_datum_van   IN     VARCHAR2                      -- Let wel: formaat '24-06-1965'
                                                                  ,
                                     p_datum_tot   IN     VARCHAR2,
                                     p_cursor         OUT t_cursor
                                    )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   COALESCE (y.regio, z.regio) regio,
                    COALESCE (y.district, z.district) lsu,
                    COALESCE (y.locatie, z.locatie) locatie,
                    x.artikel,
                    x.aantal
             FROM   (  SELECT   rrr.res_rsv_ruimte_key,
                                art.res_artikel_omschrijving artikel,
                                SUM (ra.res_rsv_artikel_aantal) aantal
                         FROM   res_v_aanwezigrsv_ruimte rrr, res_v_aanwezigrsv_artikel ra, res_artikel art
                        WHERE       (rrr.res_rsv_ruimte_noshow = 1 or rrr.RES_RSV_RUIMTE_BEZOEKERS_SHOWN is not null)
                                AND rrr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
                                AND ra.res_artikel_key = art.res_artikel_key
                                AND ra.res_rsv_artikel_levering BETWEEN v_datum_van AND v_datum_tot
                     GROUP BY   rrr.res_rsv_ruimte_key, art.res_artikel_omschrijving) x
                    LEFT JOIN (SELECT   DISTINCT
                                        rrr.res_rsv_ruimte_key,
                                        reg.alg_regio_omschrijving regio,
                                        d.alg_district_omschrijving district,
                                        l.alg_locatie_omschrijving locatie
                                 FROM   res_v_aanwezigrsv_ruimte rrr,
                                        res_ruimte_opstelling ro,
                                        res_ruimte rr,
                                        res_alg_ruimte rar,
                                        alg_ruimte r,
                                        alg_verdieping v,
                                        alg_gebouw g,
                                        alg_locatie l,
                                        alg_district d,
                                        alg_regio reg
                                WHERE       rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                                        AND ro.res_ruimte_key = rr.res_ruimte_key
                                        AND rr.res_ruimte_key = rar.res_ruimte_key
                                        AND rar.alg_ruimte_key = r.alg_ruimte_key
                                        AND r.alg_verdieping_key = v.alg_verdieping_key
                                        AND v.alg_gebouw_key = g.alg_gebouw_key
                                        AND g.alg_locatie_key = l.alg_locatie_key
                                        AND l.alg_district_key = d.alg_district_key
                                        AND d.alg_regio_key = reg.alg_regio_key) y
                       ON x.res_rsv_ruimte_key = y.res_rsv_ruimte_key
                    LEFT JOIN (SELECT   rrr.res_rsv_ruimte_key,
                                        reg.alg_regio_omschrijving regio,
                                        d.alg_district_omschrijving district,
                                        l.alg_locatie_omschrijving locatie
                                 FROM   res_v_aanwezigrsv_ruimte rrr,
                                        alg_ruimte r,
                                        alg_verdieping v,
                                        alg_gebouw g,
                                        alg_locatie l,
                                        alg_district d,
                                        alg_regio reg
                                WHERE       rrr.alg_ruimte_key = r.alg_ruimte_key
                                        AND r.alg_verdieping_key = v.alg_verdieping_key
                                        AND v.alg_gebouw_key = g.alg_gebouw_key
                                        AND g.alg_locatie_key = l.alg_locatie_key
                                        AND l.alg_district_key = d.alg_district_key
                                        AND d.alg_regio_key = reg.alg_regio_key) z
                       ON x.res_rsv_ruimte_key = z.res_rsv_ruimte_key
         ORDER BY   1, 2, 3, 4;
   END rap_cat_noshow_per_loc;

   PROCEDURE rap_bezreg_per_dienst (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '24-06-1965'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   x.dienst,
                    COALESCE (fo.aantal, 0) call_center,
                    COALESCE (bo.aantal, 0) back_office,
                    COALESCE (fe.aantal, 0) zelfservice,
                    COALESCE (tot.aantal, 0)
                    - (COALESCE (fo.aantal, 0) + COALESCE (bo.aantal, 0) + COALESCE (fe.aantal, 0))
                       onbekend
             FROM   (SELECT   afd.prs_afdeling_key, afd.prs_afdeling_omschrijving dienst
                       FROM   prs_v_aanwezigafdeling afd
                      WHERE   afd.prs_afdeling_parentkey IS NULL AND afd.prs_afdeling_key <> 1) x
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (b.bez_bezoekers_key) aantal
                                   FROM   bez_bezoekers b,
                                          bez_afspraak a,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       b.bez_afspraak_key = a.bez_afspraak_key
                                          AND a.bez_afspraak_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND a.bez_afspraak_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) tot
                       ON x.prs_afdeling_key = tot.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (b.bez_bezoekers_key) aantal
                                   FROM   bez_bezoekers b,
                                          bez_afspraak a,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       b.bez_afspraak_key = a.bez_afspraak_key
                                          AND a.bez_afspraak_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND a.prs_perslid_key IN
                                                   (SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND a.bez_afspraak_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fo
                       ON x.prs_afdeling_key = fo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (b.bez_bezoekers_key) aantal
                                   FROM   bez_bezoekers b,
                                          bez_afspraak a,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       b.bez_afspraak_key = a.bez_afspraak_key
                                          AND a.bez_afspraak_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND a.prs_perslid_key IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key = 24                       -- bezfof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND a.bez_afspraak_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) bo
                       ON x.prs_afdeling_key = bo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (b.bez_bezoekers_key) aantal
                                   FROM   bez_bezoekers b,
                                          bez_afspraak a,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       b.bez_afspraak_key = a.bez_afspraak_key
                                          AND a.bez_afspraak_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND a.prs_perslid_key IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg
                                                    MINUS
                                                    SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key = 24                       -- bezfof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND a.bez_afspraak_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fe
                       ON x.prs_afdeling_key = fe.prs_afdeling_key
         ORDER BY   1;
   END rap_bezreg_per_dienst;

   PROCEDURE rap_mldreg_per_dienst (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '24-06-1965'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   x.dienst,
                    COALESCE (fo.aantal, 0) call_center,
                    COALESCE (bo.aantal, 0) back_office,
                    COALESCE (fe.aantal, 0) zelfservice,
                    COALESCE (tot.aantal, 0)
                    - (COALESCE (fo.aantal, 0) + COALESCE (bo.aantal, 0) + COALESCE (fe.aantal, 0))
                       onbekend
             FROM   (SELECT   afd.prs_afdeling_key, afd.prs_afdeling_omschrijving dienst
                       FROM   prs_v_aanwezigafdeling afd
                      WHERE   afd.prs_afdeling_parentkey IS NULL AND afd.prs_afdeling_key <> 1) x
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m,
                                          mld_stdmelding std,
                                          ins_tab_discipline td,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                                          AND std.mld_ins_discipline_key = td.ins_discipline_key
                                          AND td.ins_srtdiscipline_key IN (1, 3)
                                          AND m.prs_perslid_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) tot
                       ON x.prs_afdeling_key = tot.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m,
                                          mld_stdmelding std,
                                          ins_tab_discipline td,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                                          AND std.mld_ins_discipline_key = td.ins_discipline_key
                                          AND td.ins_srtdiscipline_key IN (1, 3)
                                          AND m.prs_perslid_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) IN
                                                   (SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fo
                       ON x.prs_afdeling_key = fo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m,
                                          mld_stdmelding std,
                                          ins_tab_discipline td,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                                          AND std.mld_ins_discipline_key = td.ins_discipline_key
                                          AND td.ins_srtdiscipline_key IN (1, 3)
                                          AND m.prs_perslid_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (20, 27)            -- mldfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) bo
                       ON x.prs_afdeling_key = bo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m,
                                          mld_stdmelding std,
                                          ins_tab_discipline td,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       m.mld_stdmelding_key = std.mld_stdmelding_key
                                          AND std.mld_ins_discipline_key = td.ins_discipline_key
                                          AND td.ins_srtdiscipline_key IN (1, 3)
                                          AND m.prs_perslid_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg
                                                    MINUS
                                                    SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (20, 27)            -- mldfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fe
                       ON x.prs_afdeling_key = fe.prs_afdeling_key
         ORDER BY   1;
   END rap_mldreg_per_dienst;

   PROCEDURE rap_mldreg_per_vakgrp (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '24-06-1965'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   x.vakgroeptype,
                    x.vakgroep,
                    x.melding,
                    COALESCE (fo.aantal, 0) call_center,
                    COALESCE (bo.aantal, 0) back_office,
                    COALESCE (fe.aantal, 0) zelfservice,
                    COALESCE (tot.aantal, 0)
                    - (COALESCE (fo.aantal, 0) + COALESCE (bo.aantal, 0) + COALESCE (fe.aantal, 0))
                       onbekend
             FROM   (SELECT   sm.mld_stdmelding_key,
                              sd.ins_srtdiscipline_omschrijving vakgroeptype,
                              td.ins_discipline_omschrijving vakgroep,
                              sm.mld_stdmelding_omschrijving melding
                       FROM   mld_stdmelding sm, ins_tab_discipline td, ins_srtdiscipline sd
                      WHERE       sm.mld_stdmelding_verwijder IS NULL
                              AND sm.mld_ins_discipline_key = td.ins_discipline_key
                              AND td.ins_discipline_verwijder IS NULL
                              AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                              AND sd.ins_srtdiscipline_key IN (1, 3)) x
                    LEFT JOIN (  SELECT   m.mld_stdmelding_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m
                                  WHERE   m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   m.mld_stdmelding_key) tot
                       ON x.mld_stdmelding_key = tot.mld_stdmelding_key
                    LEFT JOIN (  SELECT   m.mld_stdmelding_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m
                                  WHERE   fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) IN
                                                (SELECT   kl.prs_link_key
                                                   FROM   prs_kenmerklink kl
                                                  WHERE   kl.prs_kenmerk_key = 1060                      -- front-office
                                                          AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   m.mld_stdmelding_key) fo
                       ON x.mld_stdmelding_key = fo.mld_stdmelding_key
                    LEFT JOIN (  SELECT   m.mld_stdmelding_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m
                                  WHERE   fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) IN
                                                (SELECT   gg.prs_perslid_key
                                                   FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                  WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                          AND gr.fac_functie_key IN (20, 27)               -- mldfof/bof
                                                 MINUS
                                                 SELECT   kl.prs_link_key
                                                   FROM   prs_kenmerklink kl
                                                  WHERE   kl.prs_kenmerk_key = 1060                      -- front-office
                                                          AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   m.mld_stdmelding_key) bo
                       ON x.mld_stdmelding_key = bo.mld_stdmelding_key
                    LEFT JOIN (  SELECT   m.mld_stdmelding_key, COUNT (m.mld_melding_key) aantal
                                   FROM   mld_melding m
                                  WHERE   fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key) IN
                                                (SELECT   gg.prs_perslid_key
                                                   FROM   fac_gebruikersgroep gg
                                                 MINUS
                                                 SELECT   gg.prs_perslid_key
                                                   FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                  WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                          AND gr.fac_functie_key IN (20, 27)               -- mldfof/bof
                                                 MINUS
                                                 SELECT   kl.prs_link_key
                                                   FROM   prs_kenmerklink kl
                                                  WHERE   kl.prs_kenmerk_key = 1060                      -- front-office
                                                          AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   m.mld_stdmelding_key) fe
                       ON x.mld_stdmelding_key = fe.mld_stdmelding_key
         ORDER BY   1, 2, 3;
   END rap_mldreg_per_vakgrp;

   PROCEDURE rap_resreg_per_dienst (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '24-06-1965'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   x.dienst,
                    COALESCE (fo.aantal, 0) call_center,
                    COALESCE (bo.aantal, 0) back_office,
                    COALESCE (fe.aantal, 0) zelfservice,
                    COALESCE (tot.aantal, 0)
                    - (COALESCE (fo.aantal, 0) + COALESCE (bo.aantal, 0) + COALESCE (fe.aantal, 0))
                       onbekend
             FROM   (SELECT   afd.prs_afdeling_key, afd.prs_afdeling_omschrijving dienst
                       FROM   prs_v_aanwezigafdeling afd
                      WHERE   afd.prs_afdeling_parentkey IS NULL AND afd.prs_afdeling_key <> 1) x
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          res_reservering res,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_reservering_key = res.res_reservering_key
                                          AND r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) tot
                       ON x.prs_afdeling_key = tot.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fo
                       ON x.prs_afdeling_key = fo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (19, 26)            -- resfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) bo
                       ON x.prs_afdeling_key = bo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg
                                                    MINUS
                                                    SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (19, 26)            -- resfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fe
                       ON x.prs_afdeling_key = fe.prs_afdeling_key
         ORDER BY   1;
   END rap_resreg_per_dienst;

   PROCEDURE rap_resreg_op_aanmaak (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '24-06-1965'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   x.dienst,
                    COALESCE (fo.aantal, 0) call_center,
                    COALESCE (bo.aantal, 0) back_office,
                    COALESCE (fe.aantal, 0) zelfservice,
                    COALESCE (tot.aantal, 0)
                    - (COALESCE (fo.aantal, 0) + COALESCE (bo.aantal, 0) + COALESCE (fe.aantal, 0))
                       onbekend
             FROM   (SELECT   afd.prs_afdeling_key, afd.prs_afdeling_omschrijving dienst
                       FROM   prs_v_aanwezigafdeling afd
                      WHERE   afd.prs_afdeling_parentkey IS NULL AND afd.prs_afdeling_key <> 1) x
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND r.res_rsv_ruimte_aanmaak BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) tot
                       ON x.prs_afdeling_key = tot.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_aanmaak BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fo
                       ON x.prs_afdeling_key = fo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (19, 26)            -- resfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_aanmaak BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) bo
                       ON x.prs_afdeling_key = bo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg
                                                    MINUS
                                                    SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (19, 26)            -- resfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_aanmaak BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fe
                       ON x.prs_afdeling_key = fe.prs_afdeling_key
         ORDER BY   1;
   END rap_resreg_op_aanmaak;

   PROCEDURE rap_noshow_per_dienst (user_key      IN     NUMBER,
                                    p_datum_van   IN     VARCHAR2                       -- Let wel: formaat '24-06-1965'
                                                                 ,
                                    p_datum_tot   IN     VARCHAR2,
                                    p_cursor         OUT t_cursor
                                   )
   AS
      v_datum_van DATE;
      v_datum_tot DATE;
   BEGIN
      v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
      v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');

      OPEN p_cursor FOR
           SELECT   x.dienst,
                    COALESCE (fo.aantal, 0) call_center,
                    COALESCE (bo.aantal, 0) back_office,
                    COALESCE (fe.aantal, 0) zelfservice,
                    COALESCE (tot.aantal, 0)
                    - (COALESCE (fo.aantal, 0) + COALESCE (bo.aantal, 0) + COALESCE (fe.aantal, 0))
                       onbekend
             FROM   (SELECT   afd.prs_afdeling_key, afd.prs_afdeling_omschrijving dienst
                       FROM   prs_v_aanwezigafdeling afd
                      WHERE   afd.prs_afdeling_parentkey IS NULL AND afd.prs_afdeling_key <> 1) x
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE      (r.res_rsv_ruimte_noshow = 1 or r.RES_RSV_RUIMTE_BEZOEKERS_SHOWN is not null)
                                          AND r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) tot
                       ON x.prs_afdeling_key = tot.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       (r.res_rsv_ruimte_noshow = 1 or r.RES_RSV_RUIMTE_BEZOEKERS_SHOWN is not null)
                                          AND r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fo
                       ON x.prs_afdeling_key = fo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE      (r.res_rsv_ruimte_noshow = 1 or r.RES_RSV_RUIMTE_BEZOEKERS_SHOWN is not null)
                                          AND r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (19, 26)            -- resfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) bo
                       ON x.prs_afdeling_key = bo.prs_afdeling_key
                    LEFT JOIN (  SELECT   afd.prs_afdeling_key, COUNT (r.res_rsv_ruimte_key) aantal
                                   FROM   res_v_aanwezigrsv_ruimte r,
                                          prs_perslid p,
                                          prs_v_afdeling_boom ab,
                                          prs_afdeling afd
                                  WHERE       (r.res_rsv_ruimte_noshow = 1 or r.RES_RSV_RUIMTE_BEZOEKERS_SHOWN is not null)
                                          AND r.res_rsv_ruimte_host_key = p.prs_perslid_key
                                          AND p.prs_afdeling_key = ab.prs_afdeling_key
                                          AND ab.prs_afdeling_key1 = afd.prs_afdeling_key
                                          AND fac.gettrackinguserkey ('RESNEW', r.res_rsv_ruimte_key) IN
                                                   (SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg
                                                    MINUS
                                                    SELECT   gg.prs_perslid_key
                                                      FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                                                     WHERE   gg.fac_groep_key = gr.fac_groep_key
                                                             AND gr.fac_functie_key IN (19, 26)            -- resfof/bof
                                                    MINUS
                                                    SELECT   kl.prs_link_key
                                                      FROM   prs_kenmerklink kl
                                                     WHERE   kl.prs_kenmerk_key = 1060                   -- front-office
                                                             AND kl.prs_kenmerklink_waarde IS NOT NULL)
                                          AND r.res_rsv_ruimte_van BETWEEN v_datum_van AND v_datum_tot
                               GROUP BY   afd.prs_afdeling_key) fe
                       ON x.prs_afdeling_key = fe.prs_afdeling_key
         ORDER BY   1;
   END rap_noshow_per_dienst;
END;
/

-- views ter ondersteuning aan Facilitor graphics
CREATE OR REPLACE VIEW rwsn_v_label_ruimte_oms (
   alg_ruimte_key,
   waarde
   )
AS
   SELECT r.alg_ruimte_key,
             alg_ruimte_omschrijving
   FROM alg_v_aanwezigruimte r;


CREATE OR REPLACE FORCE VIEW rwsn_v_thema_ruimte_dienst (
   alg_ruimte_key,
   waarde,
   waarde_key
   )
AS
   SELECT x.alg_ruimte_key,
          DECODE (y.aantal,
             NULL, '[Leegstand]',
             1, SUBSTR (y.sp, 1, 60),
             'Meer dan 1 dienst!'),
          DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
   FROM    (SELECT r.alg_ruimte_key
            FROM alg_v_aanwezigruimte r) x
        LEFT JOIN
           (SELECT ra.alg_ruimte_key,
                   MIN (a.prs_afdeling_naam1) sp,
                   MIN (a.prs_afdeling_key) sp_key,
                   COUNT (ra.prs_afdeling_key) aantal
            FROM prs_v_aanwezigruimteafdeling ra, prs_v_aanwezigafdeling a
            WHERE ra.prs_afdeling_key = a.prs_afdeling_key
              AND a.niveau = 1
              AND a.prs_afdeling_naam <> 'Onbekend'
            GROUP BY ra.alg_ruimte_key) y
        ON x.alg_ruimte_key = y.alg_ruimte_key
   UNION ALL
   SELECT NULL, substr(a.prs_afdeling_naam1,1,60), a.prs_afdeling_key
   FROM prs_v_aanwezigafdeling a
   WHERE NOT EXISTS
            (SELECT ra.prs_afdeling_key
             FROM prs_ruimteafdeling ra
             WHERE ra.prs_ruimteafdeling_verwijder IS NULL
                   AND ra.prs_afdeling_key = a.prs_afdeling_key)
         AND niveau = 1
         AND a.prs_afdeling_naam <> 'Onbekend';

CREATE OR REPLACE TRIGGER rwsn_t_thema_ruimte_die_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON rwsn_v_thema_ruimte_dienst
BEGIN
   IF UPDATING           -- oude hard weggooien; dus DELETE (lekker opruimen)!
   THEN
      DELETE FROM   prs_ruimteafdeling
            WHERE   alg_ruimte_key = :new.alg_ruimte_key
                    AND prs_afdeling_key <> :new.waarde_key;
   END IF;

   BEGIN
      IF :new.waarde_key <> -1
      THEN
         INSERT INTO prs_ruimteafdeling
        (
            alg_ruimte_key, prs_afdeling_key
        )
         VALUES (:new.alg_ruimte_key, :new.waarde_key);
      END IF;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX                                 -- was al aanwezig
      THEN
         NULL;
   END;
END;
/

CREATE OR REPLACE VIEW rwsn_v_prj_thema_ruimte_dienst (
   prj_ruimte_key,
   waarde,
   waarde_key
   )
AS
   SELECT x.prj_ruimte_key,
          DECODE (y.aantal,
             NULL, '[Leegstand]',
             1, SUBSTR (y.sp, 1, 60),
             'Meer dan 1 dienst!'),
          DECODE (y.aantal, NULL, -1, 1, y.sp_key, NULL)
   FROM    (SELECT r.prj_ruimte_key
            FROM prj_ruimte r
            WHERE r.prj_ruimte_verwijder IS NULL) x
        LEFT JOIN
           (SELECT ra.prj_ruimte_key,
                   MIN (a.prs_afdeling_naam1) sp,
                   MIN (a.prs_afdeling_key) sp_key,
                   COUNT (ra.prs_afdeling_key) aantal
            FROM prj_ruimteafdeling ra, prs_v_aanwezigafdeling a
            WHERE ra.prj_ruimteafdeling_verwijder IS NULL
                  AND ra.prs_afdeling_key = a.prs_afdeling_key
                  AND a.niveau = 1
                  AND a.prs_afdeling_naam <> 'Onbekend'
            GROUP BY ra.prj_ruimte_key) y
        ON x.prj_ruimte_key = y.prj_ruimte_key
   UNION ALL
   SELECT NULL, substr(a.prs_afdeling_naam1,1,60), a.prs_afdeling_key
   FROM prs_v_aanwezigafdeling a
   WHERE NOT EXISTS
            (SELECT ra.prs_afdeling_key
             FROM prj_ruimteafdeling ra
             WHERE ra.prj_ruimteafdeling_verwijder IS NULL
                   AND ra.prs_afdeling_key = a.prs_afdeling_key)
         AND niveau=1
         AND a.prs_afdeling_naam <> 'Onbekend';

CREATE OR REPLACE TRIGGER rwsn_t_prj_t_ruimte_die_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON rwsn_v_prj_thema_ruimte_dienst
BEGIN
   IF UPDATING                     -- oude logisch weggooien, dus géén DELETE!
   THEN
      UPDATE prj_ruimteafdeling
      SET prj_ruimteafdeling_verwijder    = SYSDATE
      WHERE prj_ruimte_key = :new.prj_ruimte_key
            AND prs_afdeling_key <> :new.waarde_key;
   END IF;

   BEGIN
      IF :new.waarde_key <> -1
      THEN
         UPDATE prj_ruimteafdeling
         SET prj_ruimteafdeling_verwijder    = NULL
         WHERE prj_ruimte_key = :new.prj_ruimte_key
               AND prs_afdeling_key = :new.waarde_key;

         INSERT INTO prj_ruimteafdeling
        (
            prj_ruimte_key, prs_afdeling_key
        )
         VALUES (:new.prj_ruimte_key, :new.waarde_key);
      END IF;
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX                                 -- was al aanwezig
      THEN
         NULL;
   END;
END;
/

CREATE OR REPLACE FORCE VIEW rwsn_v_thema_vloerafwerking (
   alg_ruimte_key,
   waarde,
   waarde_key
   )
AS
   SELECT   x.alg_ruimte_key,
            COALESCE (y.fac_usrdata_omschr, 'ONGEDEFINIEERD'),
            y.fac_usrdata_key
     FROM      (SELECT   r.alg_ruimte_key
                  FROM   alg_v_aanwezigruimte r) x
            LEFT JOIN
               (SELECT   ok.alg_onrgoed_key,
                         ud.fac_usrdata_omschr,
                         ud.fac_usrdata_key
                  FROM   alg_kenmerk k, alg_onrgoedkenmerk ok, fac_usrdata ud
                 WHERE       k.alg_kenmerk_key = 2
                         AND k.alg_kenmerk_key = ok.alg_kenmerk_key
                         AND fac.safe_to_number (
                               ok.alg_onrgoedkenmerk_waarde
                            ) = ud.fac_usrdata_key) y
            ON x.alg_ruimte_key = y.alg_onrgoed_key
   UNION ALL
   SELECT   NULL,
            ud.fac_usrdata_omschr,
            ud.fac_usrdata_key
     FROM   alg_kenmerk k, fac_kenmerkdomein rk, fac_usrdata ud
    WHERE   k.alg_kenmerk_key = 2
           AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key
           AND rk.fac_usrtab_key = ud.fac_usrtab_key;

CREATE OR REPLACE TRIGGER rwsn_v_thema_vloerafw_i_iu
INSTEAD OF INSERT OR UPDATE ON rwsn_v_thema_vloerafwerking
BEGIN
   DELETE FROM   alg_onrgoedkenmerk ok
         WHERE   ok.alg_kenmerk_key = 2
                 AND ok.alg_onrgoed_key = :new.alg_ruimte_key;

   IF :new.waarde_key IS NOT NULL
   THEN
      		INSERT INTO alg_onrgoedkenmerk ok (ok.alg_kenmerk_key,
                                         ok.alg_onrgoed_niveau,
                                         ok.alg_onrgoed_key,
                                         ok.alg_onrgoedkenmerk_waarde)
          VALUES ( 2, 'R',
                  :new.alg_ruimte_key,
                  :new.waarde_key);
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      NULL;
END;
/

/* Formatted on 26-11-2010 15:28:52 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_label_ruimtefunctie
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   r.alg_ruimte_key,
            COALESCE (sr.alg_srtruimte_omschrijving, 'ONGEDEFINIEERD')
     FROM   alg_v_aanwezigruimte r, alg_srtruimte sr
    WHERE   r.alg_srtruimte_key = sr.alg_srtruimte_key(+);

/* Formatted on 26-11-2010 15:28:52 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_thema_ruimtefunctie
(
   alg_ruimte_key,
   waarde,
   waarde_key
)
AS
   SELECT   r.alg_ruimte_key,
            COALESCE (sr.alg_srtruimte_omschrijving, 'ONGEDEFINIEERD'),
            r.alg_srtruimte_key
     FROM   alg_v_aanwezigruimte r, alg_srtruimte sr
    WHERE   r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
   UNION ALL
   SELECT   NULL, sr.alg_srtruimte_omschrijving, sr.alg_srtruimte_key
     FROM   alg_v_aanwezigsrtruimte sr
    WHERE   NOT EXISTS (SELECT   1
                          FROM   alg_v_aanwezigruimte r
                         WHERE   r.alg_srtruimte_key = sr.alg_srtruimte_key);

CREATE OR REPLACE TRIGGER rwsn_t_thema_rfunctie_i_iu
   INSTEAD OF INSERT OR UPDATE
   ON rwsn_v_thema_ruimtefunctie
DECLARE
   v_count   NUMBER;
BEGIN
   IF :new.waarde_key IS NOT NULL
   THEN
      UPDATE   alg_ruimte r
         SET   r.alg_srtruimte_key = :new.waarde_key
       WHERE   r.alg_ruimte_key = :new.alg_ruimte_key;

      -- Soort ruimte auto-aanpassen adhv. gekozen Ruimtefunctie???
      DELETE FROM   alg_onrgoedkenmerk ok
            WHERE   ok.alg_kenmerk_key = 1042          -- Soort ruimte kenmerk
                    AND ok.alg_onrgoed_key = :new.alg_ruimte_key;

      SELECT   COUNT ( * )
        INTO   v_count
        FROM   fac_v_aanwezigusrdata
       WHERE       fac_usrtab_key = 511                       -- Mapping tabel
               AND fac_usrdata_code = TO_CHAR (:new.waarde_key)
               AND fac_usrdata_omschr IS NOT NULL;                      -- ???

      IF v_count = 1
      THEN
         INSERT INTO alg_onrgoedkenmerk ok (
                                               ok.alg_kenmerk_key,
                                               ok.alg_onrgoed_niveau,
                                               ok.alg_onrgoed_key,
                                               ok.alg_onrgoedkenmerk_waarde
                    )
           VALUES   (
                        1042,                          -- Soort ruimte kenmerk
                        'R',
                        :new.alg_ruimte_key,
                        (SELECT   fac_usrdata_omschr
                           FROM   fac_v_aanwezigusrdata
                          WHERE   fac_usrtab_key = 511        -- Mapping tabel
                                  AND fac_usrdata_code =
                                        TO_CHAR (:new.waarde_key))
                    );
      END IF;
   END IF;
EXCEPTION
   WHEN OTHERS
   THEN
      NULL;
END;
/

/* Formatted on 26-11-2010 16:12:56 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_label_ruimtesoort
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   x.alg_ruimte_key,
            COALESCE (y.fac_usrdata_omschr, 'ONGEDEFINIEERD')
     FROM      (SELECT   r.alg_ruimte_key
                  FROM   alg_v_aanwezigruimte r) x
            LEFT JOIN
               (SELECT   ok.alg_onrgoed_key,
                         ud.fac_usrdata_omschr,
                         ud.fac_usrdata_key
                  FROM   alg_v_aanwezigonrgoedkenmerk ok,
                         fac_v_aanwezigusrdata ud
                 WHERE   ok.alg_kenmerk_key = 1042     -- Soort ruimte kenmerk
                         AND fac.safe_to_number (
                               ok.alg_onrgoedkenmerk_waarde
                            ) = ud.fac_usrdata_key) y
            ON x.alg_ruimte_key = y.alg_onrgoed_key;

/* Formatted on 26-11-2010 16:12:56 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_thema_ruimtesoort
(
   alg_ruimte_key,
   waarde
)
AS
   SELECT   x.alg_ruimte_key,
            COALESCE (y.fac_usrdata_omschr, 'ONGEDEFINIEERD')
     FROM      (SELECT   r.alg_ruimte_key
                  FROM   alg_v_aanwezigruimte r) x
            LEFT JOIN
               (SELECT   ok.alg_onrgoed_key,
                         ud.fac_usrdata_omschr,
                         ud.fac_usrdata_key
                  FROM   alg_v_aanwezigonrgoedkenmerk ok,
                         fac_v_aanwezigusrdata ud
                 WHERE   ok.alg_kenmerk_key = 1042     -- Soort ruimte kenmerk
                         AND fac.safe_to_number (
                               ok.alg_onrgoedkenmerk_waarde
                            ) = ud.fac_usrdata_key) y
            ON x.alg_ruimte_key = y.alg_onrgoed_key;

-- Presenteert de mismatch tussen Ruimtefunctie en Soort ruimte, die via
-- Eigen tabel 511 aan elkaar gerelateerd zijn (RWSN#19177)
/* Formatted on 2-12-2010 16:42:30 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_ruimte_fs_mismatch
(
   ruimte,
   ruimteomschrijving,
   fclt_f_ruimtefunctie,
   fclt_f_is,
   fclt_f_moet_zijn
--   fclt_3d_locatie_key
)
AS
   SELECT   a.ruimte,
            a.ruimteomschrijving,
            a.ruimtefunctie,
            b.isruimtesoort,
            c.moetzijnruimtesoort
     FROM         (SELECT   r.alg_ruimte_key,
                            p.alg_plaatsaanduiding ruimte,
                            alg_ruimte_omschrijving ruimteomschrijving,
                            sr.alg_srtruimte_omschrijving ruimtefunctie
                     --            g.alg_locatie_key fclt_3d_locatie_key
                     FROM   alg_v_aanwezigruimte r,
                            alg_srtruimte sr,
                            --            alg_verdieping v,
                            --            alg_gebouw g,
                            alg_v_plaatsaanduiding p
                    WHERE       r.alg_srtruimte_key = sr.alg_srtruimte_key(+)
                            --            AND r.alg_verdieping_key = v.alg_verdieping_key
                            --            AND v.alg_gebouw_key = g.alg_gebouw_key
                            AND r.alg_ruimte_key = p.alg_onroerendgoed_keys
                            AND p.alg_onroerendgoed_type = 'R') a
               LEFT JOIN
                  (SELECT   ok.alg_onrgoed_key,
                            ud.fac_usrdata_omschr isruimtesoort
                     FROM   alg_v_aanwezigonrgoedkenmerk ok, fac_usrdata ud
                    WHERE       ok.alg_kenmerk_key = 1042      -- Soort ruimte
                            AND ok.alg_onrgoed_niveau = 'R'
                            AND ud.fac_usrtab_key = 281  -- Soort ruimte tabel
                            AND ud.fac_usrdata_key =                    -- Is!
                                  fac.safe_to_number (
                                     ok.alg_onrgoedkenmerk_waarde
                                  )) b
               ON a.alg_ruimte_key = b.alg_onrgoed_key
            LEFT JOIN
               (SELECT   r.alg_ruimte_key,
                         ud2.fac_usrdata_omschr moetzijnruimtesoort
                  FROM   alg_v_aanwezigruimte r,
                         fac_usrdata ud1,
                         fac_usrdata ud2
                 WHERE   ud1.fac_usrtab_key = 511       -- Ruimtefunctie/soort
                         AND r.alg_srtruimte_key =
                               fac.safe_to_number (ud1.fac_usrdata_code)
                         AND ud2.fac_usrtab_key = 281    -- Soort ruimte tabel
                         AND ud2.fac_usrdata_key =               -- Moet zijn!
                               fac.safe_to_number (ud1.fac_usrdata_omschr)) c
            ON a.alg_ruimte_key = c.alg_ruimte_key
    WHERE      b.isruimtesoort IS NULL
            OR c.moetzijnruimtesoort IS NULL
            OR b.isruimtesoort != c.moetzijnruimtesoort;

-- view to display the reservation data on the infobord.
CREATE OR REPLACE VIEW rwsn_v_rap_infobord
AS
SELECT aktief,
       offset,
       dag,
       tijd_van,
       tijd_tot,
       ruimte,
       catalogus,
       aanvrager,
       gastheer,
       omschrijving,
       status,
       locatie_code,
       gebouw_code,
       verdieping_code,
       locatie_omschrijving,
       gebouw_omschrijving,
       verdieping_omschrijving,
       alg_locatie_key,
       alg_gebouw_key,
       alg_verdieping_key,
       alg_onrgoedkenmerk_waarde regels
FROM res_v_rap_infobord i,
     (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde
      FROM alg_onrgoedkenmerk ogk
      WHERE alg_onrgoed_niveau = 'G' AND alg_kenmerk_key = 1020) ogk
WHERE i.alg_gebouw_key = ogk.alg_onrgoed_key(+);


CREATE OR REPLACE VIEW rwsn_v_rap_meldersnietinidm
AS
   SELECT   km4.mld_kenmerkmelding_waarde fclt_f_saphrnr,
            km1.mld_kenmerkmelding_waarde naam,
            TO_CHAR (m.mld_melding_datum, 'YYYYMMDD') fclt_f_datum
--     FROM   mld_melding m, prs_perslid p, mld_kenmerkmelding km1, mld_kenmerkmelding km4
--    WHERE   m.prs_perslid_key = p.prs_perslid_key
--      AND   p.prs_perslid_authenticatie IS NULL
     FROM   mld_melding m, mld_kenmerkmelding km1, mld_kenmerkmelding km4
    WHERE   EXISTS
               (SELECT   1
                  FROM   prs_v_aanwezigkenmerklink
                 WHERE   prs_link_key = m.prs_perslid_key
                         AND prs_kenmerk_key = 1160)
            AND m.mld_melding_key = km1.mld_melding_key
            --AND km1.mld_kenmerk_key IN
            --         (SELECT   k.mld_kenmerk_key
            --            FROM   mld_kenmerk k, mld_srtkenmerk sk
            --           WHERE   k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            --                   AND sk.mld_srtkenmerk_upper = 'NAAM AANVRAGER')
            AND EXISTS                                  -- 18='NAAM AANVRAGER'
                  (SELECT   1
                     FROM   mld_kenmerk
                    WHERE   mld_kenmerk_key = km1.mld_kenmerk_key
                            AND mld_srtkenmerk_key = 18)
            AND m.mld_melding_key = km4.mld_melding_key
            --AND km4.mld_kenmerk_key IN
            --         (SELECT   k.mld_kenmerk_key
            --            FROM   mld_kenmerk k, mld_srtkenmerk sk
            --           WHERE   k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            --                   AND sk.mld_srtkenmerk_upper =
            --                         'SAP NUMMER (ALS INTERN)')
            AND EXISTS                         -- 21='SAP NUMMER (ALS INTERN)'
                  (SELECT   1
                     FROM   mld_kenmerk
                    WHERE   mld_kenmerk_key = km4.mld_kenmerk_key
                            AND mld_srtkenmerk_key = 21);


/* Formatted on 30-11-2010 11:40:10 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_doorlooptijd
(
   vakgroep,
   kwisg,
   mld_melding_datum,
   mld_melding_afgemeld,
   sla_norm,
   n,
   a,
   a0,
   a1,
   a2,
   a3,
   t,
   t0,
   t1,
   t2,
   t3,
   g,
   g0,
   g1,
   g2,
   g3,
   status,
   zelfservice,
   zelfafgemeld,
   onderdeel,
   dienst,
   bulki,
   lsu,
   locatiecode
)
AS
   SELECT   vakgroep_oms,
            stdmld_groep,
            mld_begin_date,
            mld_eind_date,
            mld_sla,
            1 n,
            DECODE (status, 'a', 1, 0) a,
            DECODE (status, 'a', DECODE (doorloop, 0, 1, 0), 0) a0,
            DECODE (status, 'a', DECODE (doorloop, 1, 1, 0), 0) a1,
            DECODE (status, 'a', DECODE (doorloop, 2, 1, 0), 0) a2,
            DECODE (status, 'a', DECODE (doorloop, 3, 1, 0), 0) a3,
            DECODE (status, 't', 1, 0) t,
            DECODE (status, 't', DECODE (doorloop, 0, 1, 0), 0) t0,
            DECODE (status, 't', DECODE (doorloop, 1, 1, 0), 0) t1,
            DECODE (status, 't', DECODE (doorloop, 2, 1, 0), 0) t2,
            DECODE (status, 't', DECODE (doorloop, 3, 1, 0), 0) t3,
            DECODE (status, 'g', 1, 0) g,
            DECODE (status, 'g', DECODE (doorloop, 0, 1, 0), 0) g0,
            DECODE (status, 'g', DECODE (doorloop, 1, 1, 0), 0) g1,
            DECODE (status, 'g', DECODE (doorloop, 2, 1, 0), 0) g2,
            DECODE (status, 'g', DECODE (doorloop, 3, 1, 0), 0) g3,
            status,
            zelfservice,
            zelfafgemeld,
            onderdeel,
            dienst,
            COALESCE (fac.safe_to_number (bulki), 1) bulki,
            lsu,
            locatiecode
     FROM      (SELECT   mld_key,
                         vakgroep_oms,
                         stdmld_groep,
                         mld_begin_date,
                         COALESCE (mldrej_date, mldafm_date, SYSDATE)
                            mld_eind_date,
                         mld_sla,
                         DECODE (mld_status_key,
                                 1, 'a',
                                 5, 'a',
                                 6, 'a',
                                 7, 'g',
                                 't')
                            status,
                         sla_doorloop doorloop, -- LET OP: sla_doorloop!!!
                         DECODE (melder_userkey, mldnew_userkey, 1, 0)
                            zelfservice,
                         DECODE (mldafm_userkey, mldnew_userkey, 1, 0)
                            zelfafgemeld,
                         onderdeel,
                         dienst,
                         lsu,
                         locatiecode
                  FROM   rwsn_mld_freeze
                 WHERE   vakgroeptype_key IN (1, 3)) mset
            LEFT JOIN
               (SELECT   km.mld_melding_key mld_key,
                         km.mld_kenmerkmelding_waarde bulki
                  FROM   mld_kenmerk k, mld_kenmerkmelding km
                 WHERE   k.mld_srtkenmerk_key = 61
                         AND k.mld_kenmerk_key = km.mld_kenmerk_key) kset
            ON mset.mld_key = kset.mld_key;

-- Doorlooptijd tov. de Geplande einddatum; bijna kopie van bovenstaande!!!
/* Formatted on 30-11-2010 11:40:10 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_planlooptijd
(
   vakgroep,
   kwisg,
   mld_melding_datum,
   mld_melding_afgemeld,
   sla_norm,
   n,
   a,
   a0,
   a1,
   a2,
   a3,
   t,
   t0,
   t1,
   t2,
   t3,
   g,
   g0,
   g1,
   g2,
   g3,
   status,
   zelfservice,
   zelfafgemeld,
   onderdeel,
   dienst,
   bulki,
   lsu
)
AS
   SELECT   vakgroep_oms,
            stdmld_groep,
            mld_begin_date,
            mld_eind_date,
            mld_sla,
            1 n,
            DECODE (status, 'a', 1, 0) a,
            DECODE (status, 'a', DECODE (doorloop, 0, 1, 0), 0) a0,
            DECODE (status, 'a', DECODE (doorloop, 1, 1, 0), 0) a1,
            DECODE (status, 'a', DECODE (doorloop, 2, 1, 0), 0) a2,
            DECODE (status, 'a', DECODE (doorloop, 3, 1, 0), 0) a3,
            DECODE (status, 't', 1, 0) t,
            DECODE (status, 't', DECODE (doorloop, 0, 1, 0), 0) t0,
            DECODE (status, 't', DECODE (doorloop, 1, 1, 0), 0) t1,
            DECODE (status, 't', DECODE (doorloop, 2, 1, 0), 0) t2,
            DECODE (status, 't', DECODE (doorloop, 3, 1, 0), 0) t3,
            DECODE (status, 'g', 1, 0) g,
            DECODE (status, 'g', DECODE (doorloop, 0, 1, 0), 0) g0,
            DECODE (status, 'g', DECODE (doorloop, 1, 1, 0), 0) g1,
            DECODE (status, 'g', DECODE (doorloop, 2, 1, 0), 0) g2,
            DECODE (status, 'g', DECODE (doorloop, 3, 1, 0), 0) g3,
            status,
            zelfservice,
            zelfafgemeld,
            onderdeel,
            dienst,
            COALESCE (fac.safe_to_number (bulki), 1) bulki,
            lsu
     FROM      (SELECT   mld_key,
                         vakgroep_oms,
                         stdmld_groep,
                         mld_begin_date,
                         COALESCE (mldrej_date, mldafm_date, SYSDATE)
                            mld_eind_date,
                         mld_sla,
                         DECODE (mld_status_key,
                                 1, 'a',
                                 5, 'a',
                                 6, 'a',
                                 7, 'g',
                                 't')
                            status,
                         plan_doorloop doorloop, -- LET OP: plan_doorloop!!!
                         DECODE (melder_userkey, mldnew_userkey, 1, 0)
                            zelfservice,
                         DECODE (mldafm_userkey, mldnew_userkey, 1, 0)
                            zelfafgemeld,
                         onderdeel,
                         dienst,
                         lsu
                  FROM   rwsn_mld_freeze
                 WHERE   vakgroeptype_key IN (1, 3)) mset
            LEFT JOIN
               (SELECT   km.mld_melding_key mld_key,
                         km.mld_kenmerkmelding_waarde bulki
                  FROM   mld_kenmerk k, mld_kenmerkmelding km
                 WHERE   k.mld_srtkenmerk_key = 61
                         AND k.mld_kenmerk_key = km.mld_kenmerk_key) kset
            ON mset.mld_key = kset.mld_key;


/* Formatted on 1-12-2010 17:55:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_opl_mld_detail
(
   datum,
   eenheid,
   onderdeel,
   norm_eenheid,
   norm_onderdeel,
   norm_totaal,
   tot,
   optijd,
   jan_optijd,
   jan,
   feb_optijd,
   feb,
   maa_optijd,
   maa,
   apr_optijd,
   apr,
   mei_optijd,
   mei,
   jun_optijd,
   jun,
   jul_optijd,
   jul,
   aug_optijd,
   aug,
   sep_optijd,
   sep,
   okt_optijd,
   okt,
   nov_optijd,
   nov,
   dec_optijd,
   dec
)
AS
   SELECT   afmeld_datum,
            eenheid,
            onderdeel,
            (SELECT   fac_usrdata_omschr
               FROM   fac_usrdata
              WHERE   fac_usrtab_key =
                         (SELECT   fac_usrtab_key
                            FROM   fac_usrtab
                           WHERE   fac_usrtab_naam = 'Norm rap acc')
                      AND fac_usrdata_code = UPPER (eenheid))
               norm_eenheid,
            (SELECT   fac_usrdata_omschr
               FROM   fac_usrdata
              WHERE   fac_usrtab_key =
                         (SELECT   fac_usrtab_key
                            FROM   fac_usrtab
                           WHERE   fac_usrtab_naam = 'Norm rap acc')
                      AND fac_usrdata_code = UPPER (onderdeel))
               norm_onderdeel,
            (SELECT   fac_usrdata_omschr
               FROM   fac_usrdata
              WHERE   fac_usrtab_key =
                         (SELECT   fac_usrtab_key
                            FROM   fac_usrtab
                           WHERE   fac_usrtab_naam = 'Norm rap acc')
                      AND UPPER (fac_usrdata_code) = 'TOTAAL')
               norm_totaal,
            1 tot,
            optijd,
            DECODE (maand, '01', optijd, 0) jan_optijd,
            DECODE (maand, '01', 1, 0) jan,
            DECODE (maand, '02', optijd, 0) feb_optijd,
            DECODE (maand, '02', 1, 0) feb,
            DECODE (maand, '03', optijd, 0) maa_optijd,
            DECODE (maand, '03', 1, 0) maa,
            DECODE (maand, '04', optijd, 0) apr_optijd,
            DECODE (maand, '04', 1, 0) apr,
            DECODE (maand, '05', optijd, 0) mei_optijd,
            DECODE (maand, '05', 1, 0) mei,
            DECODE (maand, '06', optijd, 0) jun_optijd,
            DECODE (maand, '06', 1, 0) jun,
            DECODE (maand, '07', optijd, 0) jul_optijd,
            DECODE (maand, '07', 1, 0) jul,
            DECODE (maand, '08', optijd, 0) aug_optijd,
            DECODE (maand, '08', 1, 0) aug,
            DECODE (maand, '09', optijd, 0) sep_optijd,
            DECODE (maand, '09', 1, 0) sep,
            DECODE (maand, '10', optijd, 0) okt_optijd,
            DECODE (maand, '10', 1, 0) okt,
            DECODE (maand, '11', optijd, 0) nov_optijd,
            DECODE (maand, '11', 1, 0) nov,
            DECODE (maand, '12', optijd, 0) dec_optijd,
            DECODE (maand, '12', 1, 0) dec
     FROM   (SELECT   COALESCE (m.mldafm_date, m.mldrej_date) afmeld_datum,
                      SUBSTR (g.fac_groep_omschrijving, 4, 30) eenheid,
                      SUBSTR (g.fac_groep_omschrijving,
                              4,
                              INSTR (g.fac_groep_omschrijving, '-') - 4)
                         onderdeel,
                      DECODE (m.sla_doorloop, 0, 1, 0) optijd,
                      TO_CHAR (COALESCE (m.mldafm_date, m.mldrej_date), 'mm')
                         maand
               FROM   fac_groep g, fac_groeprechten gr, rwsn_mld_freeze m
              WHERE       SUBSTR (g.fac_groep_omschrijving, 1, 3) = 'GM_'
                      AND g.fac_groep_key = gr.fac_groep_key
                      AND gr.fac_functie_key = 27
                      AND gr.ins_discipline_key = m.vakgroep_key);

CREATE OR REPLACE VIEW rwsn_v_rap_meldbron (
   mld_melding_datum,
   jaar,
   week,
   maand,
   brief,
   email,
   fax,
   import,
   internet,
   mondeling,
   telefoon,
   systeem,
   formulier,
   onbekend,
   totaal,
   ins_srtdiscipline_key
   )
AS
   SELECT mld_melding_datum,
          TO_CHAR (mld_melding_datum, 'yyyy') jaar,
          TO_CHAR (mld_melding_datum, 'iw') week,
          TO_CHAR (mld_melding_datum, 'mm') maand,
          DECODE (mk.mld_meldbron_omschrijving, 'Brief', 1, 0) brief,
          DECODE (mk.mld_meldbron_omschrijving, 'E-mail', 1, 0) email,
          DECODE (mk.mld_meldbron_omschrijving, 'Fax', 1, 0) fax,
          DECODE (mk.mld_meldbron_omschrijving, 'Import', 1, 0) import,
          DECODE (mk.mld_meldbron_omschrijving, 'Internet', 1, 0) internet,
          DECODE (mk.mld_meldbron_omschrijving, 'Mondeling', 1, 0) mondeling,
          DECODE (mk.mld_meldbron_omschrijving, 'Telefoon', 1, 0) telefoon,
          DECODE (mk.mld_meldbron_omschrijving, 'System', 1, 0) systeem,
          DECODE (mk.mld_meldbron_omschrijving, 'Intakeformulier', 1, 0) formulier,
          DECODE (mk.mld_meldbron_omschrijving, 'Onbekend', 1, 0)
           + DECODE (mk.mld_melding_key, null, 1, 0) onbekend,
          1 totaal,
          d.ins_srtdiscipline_key ins_srtdiscipline_key
   FROM mld_melding m,
        mld_stdmelding std,
        ins_tab_discipline d,
        (SELECT km.mld_melding_key, mb.mld_meldbron_omschrijving
         FROM mld_kenmerk k, mld_kenmerkmelding km, mld_meldbron mb
         WHERE mld_srtkenmerk_key = 2
               AND km.mld_kenmerk_key = k.mld_kenmerk_key
               AND fac.safe_to_number (mld_kenmerkmelding_waarde) =
                     mb.mld_meldbron_key) mk
   WHERE m.mld_melding_key = mk.mld_melding_key(+)
     AND m.mld_stdmelding_key = std.mld_stdmelding_key
     AND std.mld_ins_discipline_key = d.ins_discipline_key;

-- basis view voor de kto rapportage. We zoeken alle kenmerken er bij.
--   ins_srtdiscipline_key = 2 is de key van de KTO srtdiscipline
--   de kenmerkkeys zijn van de scores en opmerkingen horende bij de kto
--   en wel voor iedere type kto (kcc/fcc/fcc_res)
CREATE OR REPLACE VIEW rwsn_v_kto_basic (
   cijfer1,
   cijfer2,
   cijfer3,
   cijfer4,
   cijfer5,
   opm1,
   opm2,
   opm3,
   opm4,
   opm5,
   mld_stdmelding_omschrijving,
   prs_perslid_key,
   dienst,
   mld_melding_omschrijving,
   res_rsv_ruimte_key,
   mld_melding_key,
   kto_prefix,
   kto_key,
   mld_melding_datum
   )
AS
select coalesce( coalesce ( (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3037)
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3038))
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3036)) cijfer1
      ,coalesce( coalesce ( (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3040)
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3041))
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3039)) cijfer2
      ,coalesce( coalesce ( (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3042)
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3043))
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3044)) cijfer3
      ,coalesce( coalesce ( (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3095)
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3089))
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3091)) cijfer4
      ,coalesce( coalesce ( (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3096)
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3088))
                          , (select fac.safe_to_number(fac_usrdata_code) from mld_kenmerkmelding km, fac_usrdata ud where fac.safe_to_number(mld_kenmerkmelding_waarde) = ud.fac_usrdata_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3092)) cijfer5
      ,coalesce( coalesce ( (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3045)
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3046))
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3047)) opm1
      ,coalesce( coalesce ( (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3048)
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3049))
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3050)) opm2
      ,coalesce( coalesce ( (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3051)
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3052))
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3053)) opm3
      ,coalesce( coalesce ( (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3097)
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3089))
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3093)) opm4
      ,coalesce( coalesce ( (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3098)
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3090))
                          , (select replace(mld_kenmerkmelding_waarde,k.mld_kenmerk_default,'')  from mld_kenmerkmelding km, mld_kenmerk k where km.mld_kenmerk_key = k.mld_kenmerk_key and km.mld_melding_key = m.mld_key and km.mld_kenmerk_key = 3094)) opm5,
            m.stdmld_oms,
            m.melder_userkey,
            m.dienst,
            m.mld_oms,
            DECODE (m.stdmld_key,
                    2001,
                    fac.safe_to_number (SUBSTR (LTRIM (m.mld_oms), 15, 30)),
                    NULL)
               res_rsv_ruimte_key,
            DECODE (m.stdmld_key,
                    2001, NULL,
                    fac.safe_to_number (SUBSTR (LTRIM (m.mld_oms), 11, 30)))
               mld_melding_key,
            m.vakgroeptype_prefix kto_prefix,
            m.mld_key kto_key,
            m.mld_begin_date mld_melding_datum
     FROM   rwsn_mld_freeze m
    WHERE   m.vakgroeptype_key = 2;
--AND m.mld_begin_date > TO_DATE ('20100301', 'yyyymmdd');

-- standaard rapportage tbv KTOs
/* Formatted on 31-5-2013 13:50:42 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_kto
(
   ontvangst_datum,
   fclt_d_datum,
   fclt_f_kto,
   fclt_f_dienst,
   fclt_f_regio,
   fclt_f_district,
   kto_nr,
   service,
   vakgroep,
   locatie,
   kto_cluster,
   cijfer1,
   cijfer2,
   cijfer3,
   cijfer4,
   cijfer5,
   gem,
   opm1,
   opm2,
   opm3,
   opm4,
   opm5,
   ontvangen,
   verzonden,
   eenheid,
   sd_prefix,
   mld_melding_key,
   responsetijd,
   stdmld_oms,
   mldnew_date,
   mldafm_date,
   mldafm_sla,
   mldafm_days,
   mldacp_sla,
   mldacp_days,
   mldafm_user,
   fclt_f_fo_bo,
   afdeling
)
AS
   SELECT   kto.mld_melding_datum,
            TO_CHAR (kto.mld_melding_datum, 'dd-mm-yyyy'),
            kto.mld_stdmelding_omschrijving,
            DECODE (p.prs_perslid_upper,
                    'EXTERN', 'EXTERN',
                    kto.dienst)
               dienst,
            r.alg_regio_omschrijving regio,
            di.alg_district_omschrijving district,
            kto.kto_prefix || kto.kto_key kto_key,
            --COALESCE (
            --   (SELECT   ins_srtdiscipline_prefix || m.mld_melding_key
            --      FROM   mld_melding m,
            --             mld_stdmelding std,
            --             ins_tab_discipline d,
            --             ins_srtdiscipline sd
            --     WHERE   m.mld_stdmelding_key = std.mld_stdmelding_key
            --             AND std.mld_ins_discipline_key = d.ins_discipline_key
            --             AND d.ins_srtdiscipline_key =
            --                   sd.ins_srtdiscipline_key
            --             AND m.mld_melding_key = mld_service_key),
            --   (SELECT      rrr.res_reservering_key
            --             || '/'
            --             || res_rsv_ruimte_volgnr
            --      FROM   res_rsv_ruimte rrr
            --     WHERE   rrr.res_rsv_ruimte_key = kto.res_service_key)
            --)
            --   service,
            f.vakgroeptype_prefix || f.mld_key service,
            f.vakgroep_oms vakgroep, --d.ins_discipline_omschrijving vakgroep,
            l.alg_locatie_omschrijving locatie,
            (SELECT   prs_kostensoort_oms
               FROM   prs_kostensoort ks
              WHERE   d.prs_kostensoort_key = ks.prs_kostensoort_key)
               kto_cluster,
            cijfer1,
            cijfer2,
            cijfer3,
            cijfer4,
            cijfer5,
            DECODE (
                 DECODE (cijfer1, NULL, 0, 1)
               + DECODE (cijfer2, NULL, 0, 1)
               + DECODE (cijfer3, NULL, 0, 1)
               + DECODE (cijfer4, NULL, 0, 1)
               + DECODE (cijfer5, NULL, 0, 1),
               0,
               TO_NUMBER (NULL),
               ROUND (
                  (  DECODE (cijfer1, NULL, 0, cijfer1)
                   + DECODE (cijfer2, NULL, 0, cijfer2)
                   + DECODE (cijfer3, NULL, 0, cijfer3)
                   + DECODE (cijfer4, NULL, 0, cijfer4)
                   + DECODE (cijfer5, NULL, 0, cijfer5))
                  / (  DECODE (cijfer1, NULL, 0, 1)
                     + DECODE (cijfer2, NULL, 0, 1)
                     + DECODE (cijfer3, NULL, 0, 1)
                     + DECODE (cijfer4, NULL, 0, 1)
                     + DECODE (cijfer5, NULL, 0, 1)),
                  2
               )
            )
               --ROUND (
               --   (  DECODE (cijfer1, NULL, 0, cijfer1)
               --    + DECODE (cijfer2, NULL, 0, cijfer2)
               --    + DECODE (cijfer3, NULL, 0, cijfer3)
               --    + DECODE (cijfer4, NULL, 0, cijfer4)
               --    + DECODE (cijfer5, NULL, 0, cijfer5))
               --   / (  DECODE (cijfer1, NULL, 0, 1)
               --      + DECODE (cijfer2, NULL, 0, 1)
               --      + DECODE (cijfer3, NULL, 0, 1)
               --      + DECODE (cijfer4, NULL, 0, 1)
               --      + DECODE (cijfer5, NULL, 0, 1)
               --      + 0.000001),
               --   2
               --)
               gem,
            opm1,
            opm2,
            opm3,
            opm4,
            opm5,
            DECODE (kto.kto_key, NULL, 0, 1) ontvangen,
            1 verzonden,
            DECODE (kto.kto_key,
                    NULL, NULL,
                    rwsn.afgehandelddoor (kto.mld_melding_key))
               short,
            f.vakgroeptype_prefix sd_prefix, --sd.ins_srtdiscipline_omschrijving sd_prefix,
            kto.mld_melding_key,
            ROUND (kto.mld_melding_datum - kto.kto_datum) responsetijd,
            f.stdmld_oms,
            TO_CHAR (f.mldnew_date, 'dd-mm-yyyy hh24:mi:ss') mldnew_date,
            TO_CHAR (f.mldafm_date, 'dd-mm-yyyy hh24:mi:ss') mldafm_date,
            sm.mld_stdmelding_t_accepttijd.tijdsduur afmsla,
            DECODE (
               COALESCE (f.mldrej_date, f.mldafm_date),
               NULL,
               NULL,
               fac.count_work_days (f.mldnew_date,
                                    COALESCE (f.mldrej_date, f.mldafm_date))
            )
               afmtijd,
            f.mld_sla acpsla,
            DECODE (f.mldacp_date,
                    NULL, NULL,
                    fac.count_work_days (f.mldnew_date, f.mldacp_date))
               acptijd,
            p_afm.prs_perslid_naam_full mldafm_user,
            COALESCE (
               (SELECT   'Callcenter'
                  FROM   prs_v_aanwezigkenmerklink kl
                 WHERE       kl.prs_kenmerk_key = 1060         -- front-office
                         AND kl.prs_kenmerklink_waarde IS NOT NULL
                         AND kl.prs_link_key = f.mldafm_userkey),
               DECODE (
                  (SELECT   COUNT ( * )
                     FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                    WHERE       gg.fac_groep_key = gr.fac_groep_key
                            AND gr.fac_functie_key IN (20, 27)   -- mldfof/bof
                            AND gg.prs_perslid_key = f.mldafm_userkey),
                  0,
                  NULL,
                  'Backoffice'
               ),
               'Onbekend'
            )
               fo_bo,
            a.prs_afdeling_omschrijving afd
     FROM   (--SELECT   *
             --  FROM   rwsn_v_kto_basic kto_r,
             --         (SELECT   res.res_rsv_ruimte_key res_service_key,
             --                   NULL mld_service_key,
             --                   res.res_discipline_key discipline_key,
             --                   res.kto_datum,
             --                   g.alg_locatie_key alg_locatie_key
             --            FROM   alg_gebouw g,
             --                   alg_verdieping v,
             --                   alg_ruimte r,
             --                   (  SELECT   r2a.res_rsv_ruimte_key,
             --                               fac.safe_to_date (
             --                                  kw.res_kenmerkreservering_waarde,
             --                                  'dd-mm-yyyy hh24:mi'
             --                               )
             --                                  kto_datum,
             --                               MAX (alg_ruimte_key) alg_ruimte_key,
             --                               MAX (res_discipline_key)
             --                                  res_discipline_key
             --                        FROM   res_v_rsv_ruimte_2_alg_ruimte r2a,
             --                               res_ruimte rr,
             --                               res_kenmerkwaarde kw,
             --                               res_kenmerk k
             --                       WHERE   r2a.res_ruimte_key =
             --                                  rr.res_ruimte_key
             --                               AND r2a.res_rsv_ruimte_key =
             --                                     kw.res_rsv_ruimte_key
             --                               AND kw.res_kenmerk_key =
             --                                     k.res_kenmerk_key
             --                               AND k.res_srtkenmerk_key = 22
             --                    GROUP BY   r2a.res_rsv_ruimte_key,
             --                               kw.res_kenmerkreservering_waarde
             --                    UNION ALL
             --                    SELECT   rrr.res_rsv_ruimte_key,
             --                             fac.safe_to_date (
             --                                kw.res_kenmerkreservering_waarde,
             --                                'dd-mm-yyyy hh24:mi'
             --                             )
             --                                kto_datum,
             --                             alg_ruimte_key,
             --                             NULL
             --                      FROM   res_rsv_ruimte rrr,
             --                             res_kenmerkwaarde kw,
             --                             res_kenmerk k
             --                     WHERE   rrr.alg_ruimte_key IS NOT NULL
             --                             AND rrr.res_rsv_ruimte_key =
             --                                   kw.res_rsv_ruimte_key
             --                             AND kw.res_kenmerk_key =
             --                                   k.res_kenmerk_key
             --                             AND k.res_srtkenmerk_key = 22) res
             --           WHERE   res.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)
             --         res_loc
             -- WHERE   kto_r.res_rsv_ruimte_key = res_loc.res_service_key
             --UNION ALL
             SELECT   *
               FROM   rwsn_v_kto_basic kto_m,
                      (  SELECT   NULL res_service_key,
                                  m.mld_melding_key mld_service_key,
                                  fac.safe_to_date (
                                     km.mld_kenmerkmelding_waarde,
                                     'dd-mm-yyyy hh24:mi'
                                  )
                                     kto_datum,
                                  COALESCE (
                                     m.mld_alg_locatie_key,
                                     DECODE (COUNT (wpg.prs_werkplek_key),
                                             1, MIN (wpg.alg_locatie_key),
                                             82)        -- Utrecht - Westraven
                                  )
                                     alg_locatie_key
                           FROM   mld_melding m,
                                  mld_kenmerkmelding km,
                                  mld_kenmerk k,
                                  prs_v_werkplekperslid_gegevens wpg
                          WHERE       m.mld_melding_key = km.mld_melding_key
                                  AND km.mld_kenmerk_key = k.mld_kenmerk_key
                                  AND k.mld_srtkenmerk_key = 121
                                  AND m.prs_perslid_key =
                                        wpg.prs_perslid_key(+)
                       GROUP BY   m.mld_melding_key,
                                  km.mld_kenmerkmelding_waarde,
                                  m.mld_alg_locatie_key) mld_loc
              WHERE   kto_m.mld_melding_key = mld_loc.mld_service_key) kto,
            alg_locatie l,
            alg_district di,
            alg_regio r,
            prs_perslid p,
            prs_afdeling a,
            rwsn_mld_freeze f,
            ins_tab_discipline d,
            mld_stdmelding sm,
            prs_v_perslid_fullnames_all p_afm
    WHERE       kto.alg_locatie_key = l.alg_locatie_key
            AND l.alg_district_key = di.alg_district_key
            AND di.alg_regio_key = r.alg_regio_key
            AND kto.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND kto.mld_melding_key = f.mld_key
            AND f.vakgroep_key = d.ins_discipline_key
            AND f.stdmld_key = sm.mld_stdmelding_key
            AND f.mldafm_userkey = p_afm.prs_perslid_key;


/* Formatted on 7-11-2013 11:54:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_melding_overzicht
(
   melding,
   fclt_f_categorie,
   productgroep_omschrijving,
   aardmelding,
   fclt_f_kwisg,
   fclt_d_melddatum,
   week,
   doorlooptijd,
   werkelijke_einddatum,
   melder,
   status,
   dienst,
   groep,
   beschrijving,
   antwoord,
   medewerker
)
AS
   SELECT   TO_CHAR (m.mld_key),
            sd.ins_srtdiscipline_omschrijving,
            m.vakgroep_oms,
            m.stdmld_oms,
            m.stdmld_groep kwisg,
            TO_CHAR (m.mld_begin_date, 'dd-mm-yyyy'),
            TO_CHAR (m.mld_begin_date, 'ww') week,
            DECODE (sm.mld_stdmelding_planbaar,
                    1, 'Planbaar',
                    TO_CHAR (sm.mld_stdmelding_t_uitvoertijd.tijdsduur) || sm.mld_stdmelding_t_uitvoertijd.eenheid)
               uitvoertijd,
            m.mldafm_date einddatum,
            pf1.prs_perslid_naam_full melder,
            (SELECT   mld_statuses_omschrijving
               FROM   mld_statuses st
              WHERE   st.mld_statuses_key = m.mld_status_key)
               status,
            m.dienst dienst,
            gr.fac_groep_omschrijving groep,
            m.mld_oms omschrijving,
            m.mld_opm opmerking,
            pf2.prs_perslid_naam_full kccmedewerker
     FROM   rwsn_mld_freeze m,
            ins_srtdiscipline sd,
            mld_stdmelding sm,
            prs_v_perslid_fullnames pf1,
            prs_v_perslid_fullnames pf2,
            (  SELECT   gr.ins_discipline_key,
                        MAX (UPPER (SUBSTR (g.fac_groep_omschrijving, 4)))
                           fac_groep_omschrijving
                 FROM   fac_groeprechten gr, fac_groep g
                WHERE       gr.fac_functie_key = 27
                        AND gr.fac_groep_key = g.fac_groep_key
                        AND g.fac_groep_omschrijving LIKE 'GM_%'
             GROUP BY   gr.ins_discipline_key) gr
    WHERE       m.vakgroeptype_key = sd.ins_srtdiscipline_key
            AND m.stdmld_key = sm.mld_stdmelding_key
            AND m.melder_userkey = pf1.prs_perslid_key
            AND m.mldnew_userkey = pf2.prs_perslid_key
            AND m.vakgroep_key = gr.ins_discipline_key(+)
            AND m.vakgroeptype_key IN (1, 3);

-- RWSN#19211
/* Formatted on 16-12-2010 17:07:01 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_mld_afhandeling
(
   fclt_d_afmelddatum,
   fclt_f_categorie,
   nummer,
   aanmaakdatum,
   omschrijving,
   melder,
   dienst,
   afdeling,
   kostenplaats,
   status,
   fclt_f_fo_bo,
   afhandelaar
)
AS
   SELECT   TO_CHAR (f.mldafm_date, 'dd-mm-yyyy'),
            f.vakgroep_oms,
            TO_CHAR (f.mld_key),
            f.mldnew_date,
            f.mld_oms,
            melder.prs_perslid_naam_full,
            f.dienst,
            a.prs_afdeling_omschrijving,
            kp.prs_kostenplaats_omschrijving,
            s.mld_statuses_omschrijving,
            COALESCE (
               (SELECT   'Callcenter'
                  FROM   prs_v_aanwezigkenmerklink kl
                 WHERE       kl.prs_kenmerk_key = 1060         -- front-office
                         AND kl.prs_kenmerklink_waarde IS NOT NULL
                         AND kl.prs_link_key = f.mldafm_userkey),
               DECODE (
                  (SELECT   COUNT ( * )
                     FROM   fac_gebruikersgroep gg, fac_groeprechten gr
                    WHERE       gg.fac_groep_key = gr.fac_groep_key
                            AND gr.fac_functie_key IN (20, 27)   -- mldfof/bof
                            AND gg.prs_perslid_key = f.mldafm_userkey),
                  0,
                  NULL,
                  'Backoffice'
               ),
               'Onbekend'
            ),
            afhandelaar.prs_perslid_naam_full
     FROM   rwsn_mld_freeze f,
            mld_statuses s,
            prs_perslid p,
            prs_afdeling a,
            prs_kostenplaats kp,
            prs_v_perslid_fullnames_all melder,
            prs_v_perslid_fullnames_all afhandelaar
    WHERE       f.mld_status_key = s.mld_statuses_key
            AND f.melder_userkey = p.prs_perslid_key
            AND p.prs_afdeling_key = a.prs_afdeling_key
            AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
            AND f.melder_userkey = melder.prs_perslid_key
            AND f.mldafm_userkey = afhandelaar.prs_perslid_key(+);

/* Formatted on 23-7-2010 12:55:27 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_dubbele_melding
(
   hide_f_datum,
   datum,
   melding1,
   melding2,
   omschrijving
)
AS
   SELECT   TO_CHAR (m1.mld_melding_datum, 'yyyymmdd'),
            TO_CHAR (m1.mld_melding_datum, 'dd-mm-yyyy'),
            TO_CHAR (m1.mld_melding_key),
            TO_CHAR (m2.mld_melding_key),
            m1.mld_melding_omschrijving
     FROM   mld_melding m1, mld_melding m2
    WHERE       m1.mld_melding_datum = m2.mld_melding_datum
            AND fac.gettrackinguserkey ('MLDNEW', m1.mld_melding_key) = fac.gettrackinguserkey ('MLDNEW', m2.mld_melding_key)
            AND m1.mld_melding_key + 1 = m2.mld_melding_key;


-- FIP rapporten
CREATE OR REPLACE VIEW rwsn_v_rap_fip_district_gebouw (
   regio_omschrijving,
   district_omschrijving,
   locatie_code,
   locatie_omschrijving,
   gebouw_code,
   gebouw_omschrijving,
   gebouw_functie,
   contactpersoon,
   telefoonnummer,
   bezoek_adres,
   bezoek_postcode,
   bezoek_plaats,
   bezoek_land,
   post_adres,
   post_postcode,
   post_plaats,
   post_land
   )
AS
   SELECT alg_regio_omschrijving,
          alg_district_omschrijving,
          alg_locatie_code,
          alg_locatie_omschrijving,
          alg_gebouw_code,
          alg_gebouw_omschrijving,
          alg_srtgebouw_omschrijving,
          l.alg_locatie_verantw,
          l.alg_locatie_verantw_tel,
          l.alg_locatie_adres,
          l.alg_locatie_postcode,
          l.alg_locatie_plaats,
          l.alg_locatie_land,
          l.alg_locatie_post_adres,
          l.alg_locatie_post_postcode,
          l.alg_locatie_post_plaats,
          l.alg_locatie_post_land
   FROM alg_v_aanwezigregio re,
        alg_v_aanwezigdistrict d,
        alg_v_aanweziglocatie l,
        alg_v_aanweziggebouw g,
        alg_srtgebouw sg
   WHERE     re.alg_regio_key = d.alg_regio_key
         AND d.alg_district_key = l.alg_district_key
         AND l.alg_locatie_key = g.alg_locatie_key
         AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key;

CREATE OR REPLACE VIEW rwsn_v_rap_fip_ruimte (
   fclt_f_locatie_code,
   fclt_f_gebouw_code,
   fclt_f_bouwlaagvolgnummer,
   ruimte_nummer,
   ruimte_omschrijving,
   vloer_oppervlak,
   fclt_f_reserveerbare_ruimte,
   categorie,
   prijs,
   opstelling,
   aantal_bezoekers,
   naam,
   omschrijving
   )
AS
   SELECT l.alg_locatie_code,
          g.alg_gebouw_code,
          v.alg_verdieping_code,
          r.alg_ruimte_nr,
          r.alg_ruimte_omschrijving,
          r.alg_ruimte_bruto_vloeropp,
          DECODE (res.alg_ruimte_key, NULL, 'N', 'J') reserveerbaar,
          res.ins_discipline_omschrijving,
          res.res_ruimte_prijs,
          res.res_opstelling_omschrijving,
          res.res_ruimte_opstel_bezoekers,
          res.res_ruimte_nr,
          res.res_ruimte_omschrijving
   FROM alg_locatie l,
        alg_gebouw g,
        alg_verdieping v,
        alg_v_aanwezigruimte r,
        (SELECT alg_ruimte_key,
                rd.ins_discipline_omschrijving,
                rr.res_ruimte_prijs,
                ro.res_opstelling_omschrijving,
                rro.res_ruimte_opstel_bezoekers,
                rr.res_ruimte_nr,
                rr.res_ruimte_omschrijving
         FROM res_alg_ruimte rar,
              res_ruimte rr,
              res_ruimte_opstelling rro,
              res_opstelling ro,
              res_discipline rd
         WHERE     rar.res_ruimte_key = rr.res_ruimte_key
               AND rro.res_ruimte_key = rr.res_ruimte_key
               AND rr.res_discipline_key = rd.ins_discipline_key
               AND rro.res_opstelling_key = ro.res_opstelling_key
               AND rar.res_alg_ruimte_verwijder IS NULL) res
   WHERE     l.alg_locatie_key = g.alg_locatie_key
         AND g.alg_gebouw_key = v.alg_gebouw_key
         AND v.alg_verdieping_key = r.alg_verdieping_key
         AND r.alg_ruimte_key = res.alg_ruimte_key(+);

CREATE OR REPLACE VIEW rwsn_v_rap_catering_scope (
   fclt_f_locatie_code,
   fclt_f_gebouw_code,
   verdieping_volgnummer,
   ruimte_nummer,
   fclt_f_niveau,
   fclt_f_cat_catalogus,
   fclt_f_ruimte_catalogus,
   zaal_naam
   )
AS
   SELECT l.alg_locatie_code,
          g.alg_gebouw_code,
          v.alg_verdieping_code,
          r.alg_ruimte_nr,
          rso.alg_onrgoed_niveau,
          rd.ins_discipline_omschrijving,
          rd2.ins_discipline_omschrijving,
          rr.res_ruimte_nr
   FROM res_srtartikel_onrgoed rso,
        alg_ruimte r,
        alg_verdieping v,
        alg_gebouw g,
        alg_locatie l,
        (SELECT alg_onroerendgoed_keys,
                alg_ruimte_key,
                alg_verdieping_key,
                alg_gebouw_key,
                alg_locatie_key,
                alg_type
         FROM alg_v_allonroerendgoed
         UNION ALL
         SELECT alg_locatie_key, NULL, NULL, NULL, alg_locatie_key, 'L'
         FROM alg_v_aanweziglocatie) aog,
        res_discipline rd,
        (SELECT DISTINCT alg_ruimte_key, res_ruimte_key
         FROM res_v_alg_ruimte_gegevens
         WHERE res_ruimte_key IS NOT NULL) rag,
        res_ruimte rr,
        res_discipline rd2
   WHERE     l.alg_locatie_key = aog.alg_locatie_key
         AND aog.alg_gebouw_key = g.alg_gebouw_key(+)
         AND aog.alg_verdieping_key = v.alg_verdieping_key(+)
         AND aog.alg_ruimte_key = r.alg_ruimte_key(+)
         AND aog.alg_onroerendgoed_keys = rso.alg_onrgoed_key
         AND aog.alg_type = rso.alg_onrgoed_niveau
         AND rso.res_discipline_key = rd.ins_discipline_key
         AND aog.alg_ruimte_key = rag.alg_ruimte_key(+)
         AND rag.res_ruimte_key = rr.res_ruimte_key(+)
         AND rr.res_discipline_key = rd2.ins_discipline_key(+)
         AND rso.res_srtartikel_og_verwijder IS NULL;

CREATE OR REPLACE VIEW rwsn_v_rap_fip5_servicedesk (
   vakgroeptype,
   prefix,
   plaatsgegevens,
   objectgegevens,
   bestelgegevens,
   vakgroep,
   standaardmelding,
   groep,
   kostensoort,
   acceptatietijd,
   uitvoertijd,
   uitvoertijd_kritiek,
   uitvoertijd_hoog,
   uitvoertijd_laag,
   directklaar
   )
AS
   SELECT sd.ins_srtdiscipline_omschrijving,
          sd.ins_srtdiscipline_prefix,
          sd.ins_srtdiscipline_alg,
          sd.ins_srtdiscipline_ins,
          sd.ins_srtdiscipline_bes,
          d.ins_discipline_omschrijving,
          std.mld_stdmelding_omschrijving,
          smg.mld_stdmeldinggroep_naam,
          (SELECT prs_kostensoort_oms
           FROM prs_kostensoort ks
           WHERE ks.prs_kostensoort_key = std.prs_kostensoort_key)
             kostensoort,
          TO_CHAR(std.mld_stdmelding_t_accepttijd.tijdsduur) || std.mld_stdmelding_t_accepttijd.eenheid,
          TO_CHAR(std.mld_stdmelding_t_uitvoertijd.tijdsduur) || std.mld_stdmelding_t_uitvoertijd.eenheid,
          TO_CHAR(std.mld_stdmelding_t_uitvtijd_pr1.tijdsduur) || std.mld_stdmelding_t_uitvtijd_pr1.eenheid,
          TO_CHAR(std.mld_stdmelding_t_uitvtijd_pr2.tijdsduur) || std.mld_stdmelding_t_uitvtijd_pr2.eenheid,
          TO_CHAR(std.mld_stdmelding_t_uitvtijd_pr4.tijdsduur) || std.mld_stdmelding_t_uitvtijd_pr4.eenheid,
          dp.mld_disc_params_directklaar
   FROM mld_discipline d,
        ins_srtdiscipline sd,
        mld_stdmelding std,
        mld_stdmeldinggroep smg,
        mld_disc_params dp
   WHERE     d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
         AND std.mld_ins_discipline_key = d.ins_discipline_key
         AND dp.mld_ins_discipline_key(+) = d.ins_discipline_key
         AND std.mld_stdmeldinggroep_key = smg.mld_stdmeldinggroep_key(+)
         AND std.mld_stdmelding_verwijder IS NULL;

CREATE OR REPLACE VIEW rwsn_v_rap_fip6_ruimte_obj (
   fclt_f_disciplineomschrijving,
   disciplinekostensoort,
   groepsoortomschrijving,
   objectsoortcode,
   fclt_f_objectsoortomschrijving,
   objectomschrijving,
   reserveerbaar,
   eenheid,
   prijs,
   fclt_f_locatiecode,
   gebouwcode,
   bouwlaagvolgnummer,
   ruimtenummer,
   reserveringscope,
   fclt_f_catalogusnaam,
   cataloguskostensoort
   )
AS
   SELECT d.ins_discipline_omschrijving,
          (SELECT prs_kostensoort_oms
           FROM prs_kostensoort ks
           WHERE ks.prs_kostensoort_key = d.prs_kostensoort_key)
             kostensoort,
          sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_code,
          sd.ins_srtdeel_omschrijving,
          id.ins_deel_omschrijving,
          DECODE (rd.res_deel_key, NULL, 'N', 'J') reserveerbaar,
          rd.res_deel_eenheid,
          rd.res_deel_prijs,
          rg.alg_locatie_code,
          (SELECT g.alg_gebouw_code
           FROM alg_gebouw g
           WHERE g.alg_gebouw_key = rg.alg_gebouw_key)
             alg_gebouw_code,
          rg.alg_verdieping_code,
          rg.alg_ruimte_nr,
          DECODE (rd.res_deel_alg_level, 2, 'L', 3, 'G', 4, 'V', 5, 'R') scope,
          rd.ins_discipline_omschrijving,
          (SELECT prs_kostensoort_oms
           FROM prs_kostensoort ks
           WHERE ks.prs_kostensoort_key = rd.prs_kostensoort_key)
             cataloguskostensoort
   FROM ins_deel id,
        ins_srtdeel sd,
        ins_srtgroep sg,
        ins_discipline d,
        alg_v_ruimte_gegevens rg,
        (SELECT rd.res_deel_key,
                rd.res_deel_eenheid,
                rd.res_deel_prijs,
                rd.res_deel_alg_level,
                rdi.ins_discipline_omschrijving,
                rd.res_ins_deel_key,
                rdi.prs_kostensoort_key
         FROM res_deel rd, res_discipline rdi
         WHERE rd.res_discipline_key = rdi.ins_discipline_key
               AND rd.res_deel_verwijder IS NULL) rd
   WHERE     id.ins_deel_key = rd.res_ins_deel_key(+)
         AND id.ins_srtdeel_key = sd.ins_srtdeel_key
         AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
         AND sg.ins_discipline_key = d.ins_discipline_key
         AND id.ins_deel_verwijder IS NULL
         AND id.ins_alg_ruimte_key = rg.alg_ruimte_key
         AND id.ins_alg_ruimte_type = 'R';

/* DID-Bestelportaal */
/* Formatted on 1-7-2009 8:28:15 (QP5 v5.115.810.9015) */
-- Allang niet meer gebruikt; pas droppen als 'fac_kenmerkdomein_verwijder'???
CREATE OR REPLACE VIEW RWSN_V_DID_APPLICATIES
(
   INS_DEEL_KEY,
   INS_DEEL_OMS
)
AS
   SELECT   sd.ins_srtdeel_key,
               sd.ins_srtdeel_omschrijving
            || ' ['
            || DECODE (sd.ins_srtgroep_key, 21, 'B-', 22, 'C-', 'CN-')
            || sd.ins_srtdeel_code
            || ']'
     FROM   ins_srtdeel sd
    WHERE   sd.ins_srtgroep_key IN (21, 22, 23)
            AND sd.ins_srtdeel_verwijder IS NULL;

-- Veelvuldig gebruikt in MLD-module (oa. DID)!
/* Formatted on 1-7-2009 8:35:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW RWSN_V_GEBOUWEN
(
   GEBOUW_KEY,
   GEBOUW_OMS
)
AS
   SELECT   g.alg_gebouw_key,
            TRIM (g.alg_gebouw_naam) || ' [' || g.alg_gebouw_code || ']'
     FROM   alg_v_aanweziggebouw g;

-- RWSN#29284: Nieuwe variant incl. TenminsteHoudbaarTot-mechanisme!
/* Formatted on 20-5-2014 10:14:46 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW RWSN_V_GEBOUWEN_THT
(
   GEBOUW_KEY,
   GEBOUW_OMS,
   GEBOUW_VVD
)
AS
   SELECT x.alg_gebouw_key,
             TRIM (COALESCE (x.alg_locatie_plaats, alg_locatie_code))
          || ' '
          || TRIM (COALESCE (x.alg_gebouw_naam, x.alg_gebouw_code))
          || DECODE (TRIM (x.alg_gebouw_opmerking),
                     NULL, '',
                     ' ' || TRIM (x.alg_gebouw_opmerking)),
          DECODE (x.alg_srtgebouw_key,
                  81, TRUNC (SYSDATE),                           -- Afgestoten
                  x.alg_gebouw_verwijder)
     FROM (SELECT g.alg_gebouw_key,
                  g.alg_gebouw_naam,
                  g.alg_gebouw_code,
                  g.alg_gebouw_opmerking,
                  g.alg_srtgebouw_key,
                  g.alg_gebouw_verwijder,
                  l.alg_locatie_key,
                  l.alg_locatie_plaats,
                  l.alg_locatie_code
             FROM alg_gebouw g, alg_locatie l
            WHERE g.alg_locatie_key = l.alg_locatie_key) x
          LEFT JOIN (SELECT DISTINCT   -- Ergens gebruikt als melding-kenmerk?
                            fac.safe_to_number (km.mld_kenmerkmelding_waarde)
                               gebouw_key
                       FROM mld_kenmerkmelding 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
                            AND sk.fac_kenmerkdomein_key = 76) km -- Deze view als domein!
             ON x.alg_gebouw_key = km.gebouw_key
          LEFT JOIN (SELECT DISTINCT  -- Ergens gebruikt als opdracht-kenmerk?
                            fac.safe_to_number (ko.mld_kenmerkopdr_waarde)
                               gebouw_key
                       FROM mld_kenmerkopdr ko,
                            mld_kenmerk k,
                            mld_srtkenmerk sk
                      WHERE     ko.mld_kenmerk_key = k.mld_kenmerk_key
                            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                            AND sk.fac_kenmerkdomein_key = 76) ko -- Deze view als domein!
             ON x.alg_gebouw_key = ko.gebouw_key
    WHERE    x.alg_gebouw_verwijder IS NULL
          OR km.gebouw_key IS NOT NULL
          OR ko.gebouw_key IS NOT NULL;

/* Formatted on 21-10-2010 14:20:32 (QP5 v5.115.810.9015) */
-- Veelvuldig gebruikt in MLD-module; niet meer in INS-module(?)!
CREATE OR REPLACE VIEW RWSN_V_DIENSTEN
(
   DIENST_KEY,
   DIENST_OMS
)
AS
   SELECT   a.prs_afdeling_key, a.prs_afdeling_omschrijving
     FROM   prs_v_aanwezigafdeling a
    WHERE   a.prs_afdeling_parentkey IS NULL;

/* Formatted on 26-1-2012 14:24:34 (QP5 v5.115.810.9015) */
-- Niet meer gebruikt; pas droppen als 'fac_kenmerkdomein_verwijder'???
CREATE OR REPLACE VIEW RWSN_V_DID_DIENSTEN
(
   DIENST_KEY,
   DIENST_OMS
)
AS
   SELECT   a.prs_afdeling_key, a.prs_afdeling_omschrijving
     FROM   prs_v_aanwezigafdeling a, fac_v_aanwezigusrdata ud
    WHERE       a.prs_afdeling_key <> 2201           -- RWSN#22219: Niet 'VWM'
            AND ud.fac_usrtab_key = 421              -- Uitvoerende per dienst
            AND a.prs_afdeling_key = fac.safe_to_number (ud.fac_usrdata_code);

/* Formatted on 1-7-2009 8:46:12 (QP5 v5.115.810.9015) */
-- Veelvuldig gebruikt in MLD- en INS-module!
CREATE OR REPLACE VIEW RWSN_V_DIENSTPERSONEN
(
   PRS_PERSLID_KEY,
   PRS_PERSLID_NAAM_FULL
)
AS
   SELECT   p.prs_perslid_key,
            p.prs_perslid_naam
            || DECODE (p.prs_perslid_voorletters,
                       NULL, '',
                       ', ' || p.prs_perslid_voorletters)
            || DECODE (p.prs_perslid_tussenvoegsel,
                       NULL, '',
                       ' ' || p.prs_perslid_tussenvoegsel)
            || DECODE (p.prs_perslid_voornaam,
                       NULL, '',
                       ' (' || p.prs_perslid_voornaam || ')')
            || ' ['
            || a.prs_afdeling_omschrijving
            || ']'
               prs_perslid_naam_full
     FROM   prs_v_aanwezigperslid p,
            prs_v_afdeling_familie af,
            prs_v_aanwezigafdeling a
    WHERE       p.prs_afdeling_key = af.prs_afdeling_key
            AND af.niveau = 1
            AND af.prs_afdeling_elder_key = a.prs_afdeling_key;

-- RWSN#33527
CREATE OR REPLACE VIEW RWSN_V_PERSONEN_LOGIN
(
   PRS_PERSLID_KEY,
   PRS_PERSLID_NAAM_FULL
)
AS
   SELECT   p.prs_perslid_key,
            p.prs_perslid_naam
            || DECODE (p.prs_perslid_voorletters,
                       NULL, '',
                       ', ' || p.prs_perslid_voorletters)
            || DECODE (p.prs_perslid_tussenvoegsel,
                       NULL, '',
                       ' ' || p.prs_perslid_tussenvoegsel)
            || DECODE (p.prs_perslid_voornaam,
                       NULL, '',
                       ' (' || p.prs_perslid_voornaam || ')')
            || ' ['
            || p.prs_perslid_oslogin
            || ']'
               prs_perslid_naam_full
     FROM   prs_v_aanwezigperslid p;

/* Formatted on 1-7-2009 9:04:25 (QP5 v5.115.810.9015) */
-- Veelvuldig gebruikt in MLD-module!
CREATE OR REPLACE VIEW RWSN_V_SERVICEPUNTEN
(
   SP_KEY,
   SP_OMS
)
AS
   SELECT   l.alg_locatie_key,
            l.alg_locatie_omschrijving || ' (' || l.alg_locatie_adres || ')'
     FROM   alg_v_aanweziglocatie l, alg_v_aanwezigonrgoedkenmerk ok
    WHERE       l.alg_locatie_key = ok.alg_onrgoed_key
            AND ok.alg_onrgoed_niveau = 'L'
            AND ok.alg_kenmerk_key = 1000
            AND ok.alg_onrgoedkenmerk_waarde = 1;

/* Formatted on 11-8-2009 11:18:04 (QP5 v5.115.810.9015) */
-- Nergens meer gebruikt; droppen???
CREATE OR REPLACE VIEW RWSN_V_ICTCONTACTPERSONEN
(
   PRS_PERSLID_KEY,
   PRS_PERSLID_NAAM_FULL
)
AS
   SELECT   p.prs_perslid_key,
            p.prs_perslid_naam
            || DECODE (p.prs_perslid_voorletters,
                       NULL, '',
                       ', ' || p.prs_perslid_voorletters)
            || DECODE (p.prs_perslid_tussenvoegsel,
                       NULL, '',
                       ' ' || p.prs_perslid_tussenvoegsel)
            || DECODE (p.prs_perslid_voornaam,
                       NULL, '',
                       ' (' || p.prs_perslid_voornaam || ') [')
            || a.prs_afdeling_omschrijving
            || ']'
               prs_perslid_naam_full
     FROM   prs_v_aanwezigperslid p,
            prs_v_afdeling_familie af,
            prs_v_aanwezigafdeling a,
            fac_gebruikersgroep gg
    WHERE       p.prs_afdeling_key = af.prs_afdeling_key
            AND af.niveau = 1
            AND af.prs_afdeling_elder_key = a.prs_afdeling_key
            AND p.prs_perslid_key = gg.prs_perslid_key
            AND gg.fac_groep_key IN (421, 422);          -- ICT contactpersoon

-- Domein-views met applicaties per SPIV-domein voor max. 12 domeinen!
-- Als de precieze SPIV-domeinen bekend zijn, dan evt. elke domein-view
-- baseren op de betreffende 'ins_srtgroep_key' per SPIV-domein.
/* Formatted on 26-3-2014 14:22:08 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV0_APPL
(
   vnr,
   ins_srtgroep_key,
   ins_srtgroep_oms,
   ins_srtdeel_key,
   ins_srtdeel_oms,
   ins_srtdeel_vvd
)
AS
   SELECT x.vnr,
          appl.ins_srtgroep_key,
          appl.ins_srtgroep_oms,
          appl.ins_srtdeel_key,
          appl.ins_srtdeel_oms,
          appl.ins_srtdeel_vervaldatum
     FROM    (  SELECT sg1.ins_srtgroep_key, COUNT ( * ) vnr
                  FROM (SELECT ins_srtgroep_key
                          FROM ins_srtgroep
                         WHERE ins_discipline_key = 2361) sg1,
                       (SELECT ins_srtgroep_key
                          FROM ins_srtgroep
                         WHERE ins_discipline_key = 2361) sg2
                 WHERE sg1.ins_srtgroep_key >= sg2.ins_srtgroep_key
              GROUP BY sg1.ins_srtgroep_key) x
          LEFT JOIN
             (SELECT sg.ins_srtgroep_key,
                     sg.ins_srtgroep_omschrijving ins_srtgroep_oms,
                     sd.ins_srtdeel_key,
                     DECODE (
                        sd.ins_srtdeel_verwijder,
                        NULL,
                        DECODE (SIGN (sd.ins_srtdeel_vervaldatum - SYSDATE),
                                -1,
                                'VERVALLEN:' || sd.ins_srtdeel_omschrijving,
                                sd.ins_srtdeel_omschrijving),
                        'VERVALLEN:' || sd.ins_srtdeel_omschrijving)
                        ins_srtdeel_oms,
                     sd.ins_srtdeel_vervaldatum
                FROM ins_srtgroep sg, ins_srtdeel sd
               WHERE sg.ins_discipline_key = 2361
                     AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) appl
          ON x.ins_srtgroep_key = appl.ins_srtgroep_key;

CREATE OR REPLACE VIEW RWSN_V_DID_SPIV1_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 1;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV2_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 2;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV3_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 3;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV4_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 4;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV5_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 5;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV6_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 6;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV7_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 7;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV8_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 8;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV9_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 9;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV10_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 10;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV11_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 11;
CREATE OR REPLACE VIEW RWSN_V_DID_SPIV12_APPL
AS
   SELECT   ins_srtdeel_key, ins_srtdeel_oms, ins_srtdeel_vvd
     FROM   rwsn_v_did_spiv0_appl
    WHERE   vnr = 12;

/* RWSN#15835 - Automatisch aanmaken van opdrachten bij ICT aanvragen! */
/* Formatted on 28-6-2011 11:48:04 (QP5 v5.115.810.9015) */
CREATE OR REPLACE FUNCTION rwsn_did_flexcontent (p_mldkey      IN NUMBER,
                                                 p_deel1_vnr   IN NUMBER,
                                                 p_deeln_vnr   IN NUMBER)
   RETURN VARCHAR2
IS
   CURSOR c1
   IS
        SELECT   k.mld_kenmerk_key,
                 COALESCE (k.mld_kenmerk_volgnummer, 0) volgnummer,
                 sk.mld_srtkenmerk_kenmerktype,
                 sk.mld_srtkenmerk_omschrijving,
                 sk.mld_srtkenmerk_upper,
                 rsk.fac_kenmerkdomein_objectnaam,
                 rsk.fac_kenmerkdomein_kolomnaam,
                 rsk.fac_kenmerkdomein_kolomtxt,
                 rsk.fac_usrtab_key,
                 k.mld_kenmerk_default
          FROM   mld_melding m,
                 mld_stdmelding sm,
                 mld_kenmerk k,
                 mld_srtkenmerk sk,
                 fac_kenmerkdomein rsk
         WHERE   m.mld_melding_key = p_mldkey
                 AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                 AND ( (sm.mld_ins_discipline_key = k.mld_stdmelding_key
                        AND k.mld_kenmerk_niveau = 'D')
                      OR (m.mld_stdmelding_key = k.mld_stdmelding_key
                          AND k.mld_kenmerk_niveau = 'S'))
                 AND (k.mld_kenmerk_volgnummer < p_deel1_vnr  -- algemene deel
                      OR k.mld_kenmerk_volgnummer >= p_deeln_vnr)    -- deel n
                 AND k.mld_kenmerk_verwijder IS NULL
                 AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                 AND sk.mld_srtkenmerk_kenmerktype <> 'Q'           -- blanco!
                 AND sk.mld_srtkenmerk_verwijder IS NULL
                 AND sk.fac_kenmerkdomein_key = rsk.fac_kenmerkdomein_key(+)
      ORDER BY   COALESCE (k.mld_kenmerk_volgnummer, 0);

   v_skip                 NUMBER (3);
   v_flexcontent          VARCHAR2 (4000);
   v_kenmerk_waarde       VARCHAR2 (1000);
   v_ref_kenmerk_waarde   VARCHAR2 (1000);
   sql_stmt               VARCHAR2 (1000);
   v_count                NUMBER (3);
BEGIN
   v_skip := -1;                         -- wel of niet skippen nog onbepaald!
   v_flexcontent := '';

   -- bij alles tonen van een ICT aanvraag (al of niet samengesteld) wordt als
   -- 'header' de betreffende meldingsoort - bovenaan - toegevoegd!
   IF (p_deeln_vnr IS NULL)                                          -- alles!
   THEN
      v_skip := 0;                                            -- niet skippen!

      SELECT   sm.mld_stdmelding_omschrijving
        INTO   v_kenmerk_waarde
        FROM   mld_melding m, mld_stdmelding sm
       WHERE   m.mld_melding_key = p_mldkey
               AND m.mld_stdmelding_key = sm.mld_stdmelding_key;

      v_flexcontent :=
         SUBSTR (v_kenmerk_waarde || CHR (13) || CHR (10), 1, 4000);
   -- bij een deel tonen van een samengestelde ICT aanvraag wordt als 'header'
   -- de betreffende label-default - bovenaan - toegevoegd!
   ELSE                        -- een deel van een samengestelde ICT aanvraag!
      SELECT   k.mld_kenmerk_default
        INTO   v_kenmerk_waarde
        FROM   mld_melding m,
               mld_stdmelding sm,
               mld_kenmerk k
               --mld_srtkenmerk sk
       WHERE   m.mld_melding_key = p_mldkey
               AND m.mld_stdmelding_key = sm.mld_stdmelding_key
               AND ( (sm.mld_ins_discipline_key = k.mld_stdmelding_key
                      AND k.mld_kenmerk_niveau = 'D')
                    OR (m.mld_stdmelding_key = k.mld_stdmelding_key
                        AND k.mld_kenmerk_niveau = 'S'))
               AND (k.mld_kenmerk_volgnummer < p_deel1_vnr
                    OR k.mld_kenmerk_volgnummer >= p_deeln_vnr)
               --AND k.mld_kenmerk_verwijder IS NULL
               AND k.mld_kenmerk_volgnummer = p_deeln_vnr;
               --AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
               --AND sk.mld_srtkenmerk_kenmerktype = 'L'
               --AND sk.mld_srtkenmerk_upper LIKE '%DEEL%';

      v_flexcontent :=
         SUBSTR (v_kenmerk_waarde || CHR (13) || CHR (10), 1, 4000);
   END IF;

   FOR rec IN c1
   LOOP
      BEGIN
         -- voor een deel van een samengestelde ICT aanvraag worden alleen de
         -- kenmerken tot de volgende 'header' getoond!
         IF (    rec.volgnummer > p_deeln_vnr
             AND rec.mld_srtkenmerk_kenmerktype = 'L'
             AND rec.mld_srtkenmerk_upper LIKE '%DEEL%')
         THEN
            IF (v_skip = 1)
            THEN
               RETURN NULL;                                          -- break!
            ELSE
               RETURN v_flexcontent;                                 -- break!
            END IF;
         END IF;

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

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

            IF (rec.mld_srtkenmerk_kenmerktype IN ('R', 'S'))
            THEN
               -- RWSN#20852: Kenmerk-waarde is in principe nooit NULL, maar
               -- soms wel, zonder dat precies duidelijk is in welke gevallen?
               IF (v_kenmerk_waarde IS NOT NULL)
               THEN
                  sql_stmt :=
                        'SELECT MIN('
                     || rec.fac_kenmerkdomein_kolomtxt
                     || ')'
                     || '  FROM '
                     || rec.fac_kenmerkdomein_objectnaam
                     || ' WHERE '
                     || rec.fac_kenmerkdomein_kolomnaam
                     || ' = '
                     || v_kenmerk_waarde;

                  EXECUTE IMMEDIATE sql_stmt INTO   v_ref_kenmerk_waarde;
               END IF;

               v_flexcontent :=
                  SUBSTR (
                        v_flexcontent
                     || rec.mld_srtkenmerk_omschrijving
                     || ': '
                     || v_ref_kenmerk_waarde
                     || CHR (13)
                     || CHR (10),
                     1,
                     4000
                  );

               IF (v_skip = -1           -- wel of niet skippen nog onbepaald!
                              AND rec.volgnummer > p_deeln_vnr)
               THEN
                  IF (UPPER (v_ref_kenmerk_waarde) LIKE 'NEE%')
                  THEN
                     v_skip := 1;                              -- wel skippen!
                  ELSE
                     v_skip := 0;                             -- niet skippen!
                  END IF;
               END IF;
            ELSE
               v_flexcontent :=
                  SUBSTR (
                        v_flexcontent
                     || rec.mld_srtkenmerk_omschrijving
                     || ': '
                     || v_kenmerk_waarde
                     || CHR (13)
                     || CHR (10),
                     1,
                     4000
                  );

               IF (v_skip = -1           -- wel of niet skippen nog onbepaald!
                              AND rec.volgnummer > p_deeln_vnr)
               THEN
                  v_skip := 0;       -- niet skippen, want kenmerk met waarde!
               END IF;
            END IF;
         ELSE             -- geen kenmerkwaarde, dus optioneel veld of L=label
            IF (rec.mld_srtkenmerk_kenmerktype = 'L')
            THEN
               -- bij alles tonen van een samengestelde ICT aanvraag wordt per
               -- deel de label-default als 'header' tussengevoegd!
               IF (p_deeln_vnr IS NULL                               -- alles!
                   AND rec.mld_srtkenmerk_upper LIKE '%DEEL%')
               THEN
                  v_flexcontent :=
                     SUBSTR (
                           v_flexcontent
                        || '***'
                        || rec.mld_kenmerk_default
                        || CHR (13)
                        || CHR (10),
                        1,
                        4000
                     );
               END IF;
            ELSE
               IF (rec.mld_srtkenmerk_kenmerktype <> 'M')
               THEN
                  IF (p_deeln_vnr IS NULL)                           -- alles!
                  THEN
                     v_flexcontent :=
                        SUBSTR (
                              v_flexcontent
                           || rec.mld_srtkenmerk_omschrijving
                           || ': [leeg]'
                           || CHR (13)
                           || CHR (10),
                           1,
                           4000
                        );
                  END IF;

                  IF (v_skip = -1        -- wel of niet skippen nog onbepaald!
                                 AND rec.volgnummer > p_deeln_vnr)
                  THEN
                     v_skip := 1;  -- wel skippen, want kenmerk zonder waarde!
                  END IF;
               END IF;
            END IF;
         END IF;
      END;
   END LOOP;

   IF (v_skip = 1)
   THEN
      RETURN NULL;
   ELSE
      RETURN v_flexcontent;
   END IF;
END;
/

/* Formatted on 11-12-2009 13:12:58 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_select_did_opdr (p_applname   IN VARCHAR2,
                                                  p_applrun    IN VARCHAR2)
AS
BEGIN
   NULL;
END;
/

/* Formatted on 2008/10/23 12:12 (Formatter Plus v4.8.7) */
CREATE OR REPLACE VIEW rwsn_v_export_did_opdr (RESULT, result_order)
AS
   SELECT '', 0
     FROM DUAL
    WHERE 1 = 0
/

/* Formatted on 29-11-2013 10:30:50 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_export_did_opdr (p_applname   IN VARCHAR2,
                                                  p_applrun    IN VARCHAR2,
                                                  p_filedir    IN VARCHAR2,
                                                  p_filename   IN VARCHAR2)
AS
   -- RWSN#24870: Per RWSN49 vervallen.
   -- Cursor (c1) liep over !dienstspecifieke! ICT aanvragen waarvan aanvrager
   -- in een andere dienst (niet geautoriseerd) en invoerder is Leidinggevende;
   -- deze worden automatisch afgewezen!
   -- Achtergrond: Leidinggevenden hebben (FO-)rechten op alle ICT aanvr.,
   --              dus ook op "niet eigen" dienstspecifieke vakgroepen!
   -- RWSN#24870-einde!

   -- RWSN#27015: Per RWSN51 vervallen; afgehandeld binnen insert_mld_opdr!
   -- Cursor (c2a) liep over ICT aanvragen zonder acceptatietijd of waarvan
   -- invoerder is Leidinggevende; deze worden automatisch geaccepteerd!
   -- RWSN#27015-einde!

   -- RWSN#27015: Per RWSN51 vervallen; afgehandeld binnen insert_mld_opdr!
   -- Cursor (c2b) liep over ICT aanvragen mét acceptatietijd én waarvan
   -- invoerder is géén Leidinggevende; hiervan wordt de Opmerking bijgewerkt
   -- met de tekst '...ter autorisatie aangeboden aan Leidinggevende.' (en is
   -- de "educated guess" dat dit veld dan altijd nog leeg=NULL zal zijn)!
   -- RWSN#27015-einde!

   -- Cursor loopt over alle te accepteren en uit te geven ICT aanvragen.
   CURSOR c3
   IS
        SELECT   m.mld_melding_key, m.mld_melding_status
          FROM   mld_melding m, mld_stdmelding sm, ins_tab_discipline td
         WHERE       m.mld_stdmelding_key = sm.mld_stdmelding_key
                 AND sm.mld_ins_discipline_key = td.ins_discipline_key
                 AND td.ins_srtdiscipline_key = 21            -- ICT aanvragen
                 AND td.ins_discipline_key <> 532   -- Niet standaard aanvraag
                 AND m.mld_melding_status IN (2, 3, 4)
                 AND NOT EXISTS
                       (SELECT   1
                          FROM   mld_opdr o
                         WHERE   o.mld_melding_key = m.mld_melding_key)
      ORDER BY   m.mld_melding_key;

   -- Cursor loopt over zojuist goedgekeurde (door BEH) of gefiatteerde (door
   -- LDG of DBV) ICT opdrachten; hiervan wordt de melding bijgewerkt en igv.
   -- webbased-applicatie aanvragen wordt deze ook direct afgemeld.
   -- RWSN#27015: Was na DBV-goedkeuring, nu na BEH-, LDG- én DBV-goedkeuring!
   --             Hoe onderscheid maken? -> prs_kostenplaatsgrp/collega (DBV),
   --             prs_kostenplaats (LDG), ins_kenmerkdeel (BEH)
   --             Hoe eerdere goedkeuring herkennen? -> mld_melding_opmerking
   -- RWSN#27015: Per RWSN51 loopt het uitgeven via (Fiatteringsverzoeken-)GUI
   --             automatisch; alleen dus nog de melding bijwerken.
   -- RWSN#29095: Per RWSN53 aanvragen van webbased-applicaties via aut.proces
   --             2 of 3 (waarvoor FB/KEY bestaat) direct afmelden.
   --             Voor deze aanvragen geldt: kosten=1 en teverzenden=NULL!
   CURSOR c4
   IS
      SELECT m.mld_melding_key,
             m.mld_melding_opmerking,
             o.mld_opdr_key,
             o.mld_opdr_bedrijfopdr_volgnr,
             SUBSTR (o.mld_opdr_omschrijving, 1, INSTR (o.mld_opdr_omschrijving, CHR (13), 1, 1) - 1)
                opdracht,
             o.mld_opdr_kosten,
             o.mld_opdr_teverzenden,
             pf.prs_perslid_naam_full fiatteur_naam,
             DECODE (dbv.prs_perslid_key, NULL, 'Leidinggevende', 'DBV')
                fiatteur_type
        FROM mld_melding m,
             mld_stdmelding sm,
             ins_tab_discipline td,
             mld_opdr o,
             fac_tracking t,
             prs_v_perslid_fullnames_all pf,
             (SELECT prs_perslid_key FROM prs_kostenplaats
              UNION ALL
              SELECT c.prs_perslid_key_alt prs_perslid_key
                FROM prs_kostenplaats kp, prs_collega c
               WHERE kp.prs_perslid_key = c.prs_perslid_key) ldg,
             (SELECT prs_perslid_key FROM prs_kostenplaatsgrp
              UNION ALL
              SELECT c.prs_perslid_key_alt prs_perslid_key
                FROM prs_kostenplaatsgrp kpg, prs_collega c
               WHERE kpg.prs_perslid_key = c.prs_perslid_key) dbv
       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = td.ins_discipline_key
             AND td.ins_srtdiscipline_key = 21                -- ICT aanvragen
             AND td.ins_discipline_key <> 532       -- Niet standaard aanvraag
             AND m.mld_melding_status IN (4, 7)     -- Geaccepteerd/Uitgegeven
             AND m.mld_melding_key = o.mld_melding_key
             AND o.mld_opdr_key = t.fac_tracking_refkey
             AND t.fac_srtnotificatie_key = 167                      -- ORDFOK
             AND t.fac_tracking_datum > TRUNC (SYSDATE - (1 / 24), 'HH24')
             AND t.prs_perslid_key = pf.prs_perslid_key
             AND t.prs_perslid_key = ldg.prs_perslid_key(+)
             AND t.prs_perslid_key = dbv.prs_perslid_key(+)
      UNION ALL
      SELECT m.mld_melding_key,
             m.mld_melding_opmerking,
             o.mld_opdr_key,
             o.mld_opdr_bedrijfopdr_volgnr,
             SUBSTR (o.mld_opdr_omschrijving, 1, INSTR (o.mld_opdr_omschrijving, CHR (13), 1, 1) - 1)
                opdracht,
             o.mld_opdr_kosten,
             o.mld_opdr_teverzenden,
             pf.prs_perslid_naam_full fiatteur_naam,
             'Beheerder' fiatteur_type
        FROM mld_melding m,
             mld_stdmelding sm,
             ins_tab_discipline td,
             mld_opdr o,
             fac_tracking t,
             prs_v_perslid_fullnames_all pf
       WHERE     m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_ins_discipline_key = td.ins_discipline_key
             AND td.ins_srtdiscipline_key = 21                -- ICT aanvragen
             AND td.ins_discipline_key <> 532       -- Niet standaard aanvraag
             AND m.mld_melding_status IN (4, 7)     -- Geaccepteerd/Uitgegeven
             AND m.mld_melding_key = o.mld_melding_key
             AND o.mld_opdr_kosten = 1     -- Langs BEH, dus aut.proces 2 of 3
             AND o.mld_opdr_key = t.fac_tracking_refkey
             AND t.fac_srtnotificatie_key = 165                      -- ORDNEW
             AND t.fac_tracking_datum > TRUNC (SYSDATE - (1 / 24), 'HH24')
             AND t.prs_perslid_key = pf.prs_perslid_key;

   -- Cursor loopt over zojuist afgewezen ICT opdrachten (door BEH/LDG/DBV);
   -- hiervan wordt de melding bijgewerkt.
   -- RWSN#27015: Was na DBV-afwijzing, nu na BEH-, LDG- én DBV-afwijzing!
   --             Hoe onderscheid te maken? -> prs_kostenplaatsgrp/collega
   CURSOR c5
   IS
        SELECT   m.mld_melding_key,
                 m.mld_melding_opmerking,
                 o.mld_opdr_key,
                 o.mld_opdr_bedrijfopdr_volgnr,
                 SUBSTR (o.mld_opdr_omschrijving, 1, INSTR (o.mld_opdr_omschrijving, CHR (13), 1, 1) - 1)
                    opdracht,
                 TRIM (o.mld_opdr_opmerking_fiat) mld_opdr_opmerking_fiat,
                 pf.prs_perslid_naam_full fiatteur_naam,
                 DECODE (t.fac_srtnotificatie_key, 277, 'Beheerder', DECODE (dbv.prs_perslid_key, NULL, 'Leidinggevende', 'DBV'))
                    fiatteur_type
          FROM   mld_melding m,
                 mld_stdmelding sm,
                 ins_tab_discipline td,
                 mld_opdr o,
                 fac_tracking t,
                 prs_v_perslid_fullnames_all pf,
                 (  SELECT   prs_perslid_key FROM prs_kostenplaatsgrp
                  UNION ALL
                  SELECT   c.prs_perslid_key_alt prs_perslid_key
                    FROM   prs_kostenplaatsgrp kpg, prs_collega c
                   WHERE   kpg.prs_perslid_key = c.prs_perslid_key) dbv
         WHERE       m.mld_stdmelding_key = sm.mld_stdmelding_key
                 AND sm.mld_ins_discipline_key = td.ins_discipline_key
                 AND td.ins_srtdiscipline_key = 21            -- ICT aanvragen
                 AND td.ins_discipline_key <> 532   -- Niet standaard aanvraag
                 AND m.mld_melding_status IN (4, 7) -- Geaccepteerd/Uitgegeven
                 AND m.mld_melding_key = o.mld_melding_key
                 AND o.mld_statusopdr_key = 2                  -- Niet akkoord
                 AND NOT EXISTS
                       (SELECT   1
                          FROM   mld_kenmerkopdr ko
                         WHERE   ko.mld_opdr_key = o.mld_opdr_key
                                 AND ko.mld_kenmerk_key = 1577)
                 AND o.mld_opdr_key = t.fac_tracking_refkey
                 AND t.fac_srtnotificatie_key IN (168, 277) -- ORDFNO + ORDGNO
                 AND t.fac_tracking_datum > TRUNC (SYSDATE - (1 / 24), 'HH24')
                 AND t.prs_perslid_key = pf.prs_perslid_key
                 AND t.prs_perslid_key = dbv.prs_perslid_key(+);

   -- Cursor loopt over de verzonden ICT opdrachten; deze worden bijgewerkt.
   -- RWSN#27015: Nieuw!
   --             Hoe eerdere verzending herkennen? -> mld_melding_opmerking
   CURSOR c6
   IS
        SELECT   m.mld_melding_key,
                 m.mld_melding_opmerking,
                 o.mld_opdr_key,
                 o.mld_opdr_bedrijfopdr_volgnr,
                 SUBSTR (o.mld_opdr_omschrijving, 1, INSTR (o.mld_opdr_omschrijving, CHR (13), 1, 1) - 1)
                    opdracht
          FROM   mld_melding m,
                 mld_stdmelding sm,
                 ins_tab_discipline td,
                 mld_opdr o,
                 fac_tracking t
         WHERE       m.mld_stdmelding_key = sm.mld_stdmelding_key
                 AND sm.mld_ins_discipline_key = td.ins_discipline_key
                 AND td.ins_srtdiscipline_key = 21            -- ICT aanvragen
                 AND td.ins_discipline_key <> 532   -- Niet standaard aanvraag
                 AND m.mld_melding_status = 7                    -- Uitgegeven
                 AND m.mld_melding_key = o.mld_melding_key
                 AND o.mld_opdr_key = t.fac_tracking_refkey
                 AND t.fac_srtnotificatie_key = 171                  -- ORDSNT
                 AND t.fac_tracking_datum > TRUNC (SYSDATE - (1 / 24), 'HH24');

   -- Cursor loopt over alle 'Laatste actie'-kenmerkwaarden en voert deze door
   -- in de Afhandeling en Opmerking van resp. de opdracht en de melding.
   CURSOR c7
   IS
      SELECT   m.mld_melding_key,
               m.mld_melding_opmerking,
               o.mld_opdr_key,
               o.mld_opdr_bedrijfopdr_volgnr,
               SUBSTR (o.mld_opdr_omschrijving, 1, INSTR (o.mld_opdr_omschrijving, CHR (13), 1, 1) - 1)
                  opdracht,
               o.mld_opdr_opmerking,
               ko.mld_kenmerkopdr_key,
               TRIM (ko.mld_kenmerkopdr_waarde) laatste_actie
        FROM   mld_kenmerkopdr ko, mld_opdr o, mld_melding m
       WHERE       ko.mld_kenmerk_key = 3767                  -- Laatste actie
               AND ko.mld_opdr_key = o.mld_opdr_key
               AND o.mld_typeopdr_key = 1441                            -- DID
               AND o.mld_statusopdr_key IN (5, 6, 8)
               AND o.mld_melding_key = m.mld_melding_key;

   -- Cursor loopt over alle ICT aanvragen waaronder opdrachten bestaan die
   -- allemaal de status Afgewezen, Niet akkoord, Afgemeld of Verwerkt hebben;
   -- deze worden automatisch afgemeld!
   CURSOR c8
   IS
      SELECT   mld_melding_key
        FROM   mld_melding
       WHERE   mld_melding_key IN
                     (SELECT   niet_opgelost.mld_melding_key
                        FROM   (SELECT   m.mld_melding_key,
                                         (SELECT   COUNT ( * )
                                            FROM   mld_opdr o
                                           WHERE   mld_melding_key = m.mld_melding_key)
                                            aanw_opdr,
                                         (SELECT   COUNT ( * )
                                            FROM   mld_opdr o
                                           WHERE   mld_melding_key = m.mld_melding_key
                                                   AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7))
                                            open_opdr
                                  FROM   mld_melding m, mld_stdmelding sm, ins_tab_discipline td
                                 WHERE   m.mld_stdmelding_key = sm.mld_stdmelding_key
                                         AND sm.mld_ins_discipline_key = td.ins_discipline_key
                                         AND td.ins_srtdiscipline_key IN (21, 121) -- ICT/GPO
                                         AND td.ins_discipline_key <> 532
                                         AND m.mld_melding_status IN (4, 7))
                               niet_opgelost
                       WHERE   aanw_opdr > 0 AND open_opdr = 0);

   c_externnr_kenmerk_key   NUMBER (10) := 1577;
   v_errormsg               VARCHAR2 (1000);
   oracle_err_num           NUMBER;
   oracle_err_mes           VARCHAR2 (200);
   v_aanduiding             VARCHAR2 (200);
   v_count                  NUMBER (10);
   v_count_tot              NUMBER (10);
   v_count_upd              NUMBER (10);
   v_mld_opmerking          VARCHAR (4000);

   -- SUBPROC
   PROCEDURE insert_mld_opdr (p_applname   IN VARCHAR2,
                              p_applrun    IN VARCHAR2,
                              p_mldkey     IN NUMBER)
   AS
      -- Cursor loopt over alle volgnummers van delen uit een ICT aanvraag.
      CURSOR c1
      IS
         SELECT COALESCE (k.mld_kenmerk_volgnummer, 0) volgnummer,
                k.mld_kenmerk_default
           FROM mld_melding m, mld_stdmelding sm, mld_kenmerk k
          WHERE     m.mld_melding_key = p_mldkey
                AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                AND m.mld_stdmelding_key = k.mld_stdmelding_key
                AND k.mld_kenmerk_niveau = 'S'
                AND k.mld_kenmerk_verwijder IS NULL
                AND k.mld_srtkenmerk_key BETWEEN 200 AND 207
         UNION ALL               -- Geen delen, dan enkelvoudige ICT aanvraag!
         SELECT 999 volgnummer, NULL mld_kenmerk_default
           FROM DUAL
          WHERE NOT EXISTS
                   (SELECT 1
                      FROM mld_melding m, mld_stdmelding sm, mld_kenmerk k
                     WHERE     m.mld_melding_key = p_mldkey
                           AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                           AND m.mld_stdmelding_key = k.mld_stdmelding_key
                           AND k.mld_kenmerk_niveau = 'S'
                           AND k.mld_kenmerk_verwijder IS NULL
                           AND k.mld_srtkenmerk_key BETWEEN 200 AND 207)
         ORDER BY 1;

      v_errormsg           VARCHAR2 (1000);
      oracle_err_num       NUMBER;
      oracle_err_mes       VARCHAR2 (200);
      v_aanduiding         VARCHAR2 (200);
      v_count              NUMBER (10);
      v_afdeling_key       NUMBER (10);
      v_kostenplaats_key   NUMBER (10);
      v_budgethouder_key   NUMBER (10);
      v_fiatteur_type      VARCHAR2 (100);
      v_kosten_appl        NUMBER (12, 2) := NULL;
      v_aut_proces         VARCHAR2 (10) := '';
      v_webbased           NUMBER (10) := -1;
      v_opdr_dagen         NUMBER (3);
      v_stdmelding         VARCHAR2 (200);
      v_typeopdr_key       NUMBER (10);
      v_deel1_start        NUMBER (3);
      v_deeln_start        NUMBER (3);
      v_kosten_rest        NUMBER (12, 2);
      v_mld_flexcontent    VARCHAR2 (4000);
      v_opdr_key           NUMBER (10);
      v_mld_opmerking      VARCHAR2 (4000);
      v_srtnoti_oms        VARCHAR2 (4000);
   BEGIN
      v_aanduiding := '[ICT aanvraag ' || p_mldkey || '] ';

      v_errormsg := 'Fout bepalen kostenplaats.';

      SELECT   a.prs_afdeling_key, a.prs_kostenplaats_key
        INTO   v_afdeling_key, v_kostenplaats_key
        FROM   mld_melding m, prs_perslid p, prs_afdeling a
       WHERE       m.mld_melding_key = p_mldkey
               AND m.prs_perslid_key = p.prs_perslid_key
               AND p.prs_afdeling_key = a.prs_afdeling_key;

      v_errormsg := 'Fout bepalen budgethouder.';

      v_budgethouder_key := prs.getkpverantwoordelijke (v_kostenplaats_key, 2, -1);

      IF (v_budgethouder_key = -1)
      THEN
         fac.writelog (p_applname,
                       'I',
                       v_aanduiding || 'Budgethouder ongedefinieerd.',
                       '');
         COMMIT;
      ELSE
         SELECT   DECODE (COUNT ( * ), 0, 'Leidinggevende', 'DBV')
           INTO   v_fiatteur_type
           FROM   prs_kostenplaatsgrp kpg
          WHERE   kpg.prs_perslid_key = v_budgethouder_key;
      END IF;

      -- Geen autorisatieproces, dan ook geen applicatieaanvraag!
      v_errormsg := 'Fout bepalen autorisatieproces.';

      SELECT   COUNT ( * ), MIN (ud.fac_usrdata_upper)
        INTO   v_count, v_aut_proces
        FROM   mld_melding m,
               mld_stdmelding sm,
               mld_kenmerk mk,
               mld_srtkenmerk msk,
               fac_kenmerkdomein kd,
               mld_v_aanwezigkenmerkmelding mkm,
               ins_v_aanwezigkenmerkdeel ikd,
               ins_kenmerk ik,
               fac_usrdata ud
       WHERE       m.mld_melding_key = p_mldkey
               AND m.mld_stdmelding_key = sm.mld_stdmelding_key
               AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
                    OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
               AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
               AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
               AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
               AND kd.fac_kenmerkdomein_module = 'MLD'
               AND m.mld_melding_key = mkm.mld_melding_key
               AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
               AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd.ins_deel_key)
               AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
               AND ik.ins_srtkenmerk_key = 101            -- Autorisatieproces
               AND ikd.ins_kenmerkdeel_waarde = TO_CHAR (ud.fac_usrdata_key);

      -- Logica specifiek voor Applicatieaanvragen; de kosten (v_kosten_appl)
      -- bepalen uiteindelijk of opdracht via status 'Ter goedkeuring' loopt!
      IF (v_count = 1)
      THEN
         v_errormsg := 'Fout bepalen webbased.';

         SELECT   fac_usrdata_key          -- 1 = Ja; anders Nee of EXCEPTION!
           INTO   v_webbased
           FROM   mld_melding m,
                  mld_stdmelding sm,
                  mld_kenmerk mk,
                  mld_srtkenmerk msk,
                  fac_kenmerkdomein kd,
                  mld_v_aanwezigkenmerkmelding mkm,
                  ins_v_aanwezigkenmerkdeel ikd,
                  ins_kenmerk ik,
                  fac_usrdata ud
          WHERE       m.mld_melding_key = p_mldkey
                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
                       OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
                  AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                  AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
                  AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
                  AND kd.fac_kenmerkdomein_module = 'MLD'
                  AND m.mld_melding_key = mkm.mld_melding_key
                  AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
                  AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd.ins_deel_key)
                  AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                  AND ik.ins_srtkenmerk_key = 102                  -- Webbased
                  AND ikd.ins_kenmerkdeel_waarde = TO_CHAR (ud.fac_usrdata_key)
                  AND ud.fac_usrtab_key = 1;

         -- Applicatie-flow wordt bepaald op basis van 'v_kosten_appl'!
         -- -1 => Geen goedkeuring/fiattering en opdracht niet verzenden (als
         -- [a] aut.proces=2 en webbased=J of [b] aut.proces=4)!
         --  0 => Geen goedkeuring/fiattering en opdracht direct verzenden!
         --  1 => Goedkeuring door FB/KEY, later opdracht pas verzenden!
         --  2 => Fiattering door budgethouder, later opdracht pas verzenden!
         v_kosten_appl := -1;      -- Aut.proces=4=Bijzonder, nader te bepalen

         IF (v_aut_proces = '0')                     -- Geen autorisatie nodig
         THEN
            v_kosten_appl := 0;
         ELSIF (v_aut_proces = '1')                    -- Autorisatie door LDG
         THEN
            v_kosten_appl := 2;
         ELSIF (v_aut_proces = '2')                     -- Autorisatie door FB
         THEN
            -- Bepaal aantal FBs via srtkenmerk_key=103/104/105!
            v_errormsg := 'Fout bepalen aantal FBs.';

            SELECT   COUNT (*)
              INTO   v_count
              FROM   mld_melding m,
                     mld_stdmelding sm,
                     mld_kenmerk mk,
                     mld_srtkenmerk msk,
                     fac_kenmerkdomein kd,
                     mld_v_aanwezigkenmerkmelding mkm,
                     ins_v_aanwezigkenmerkdeel ikd,
                     ins_kenmerk ik
             WHERE       m.mld_melding_key = p_mldkey
                     AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                     AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
                          OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
                     AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                     AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
                     AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
                     AND kd.fac_kenmerkdomein_module = 'MLD'
                     AND m.mld_melding_key = mkm.mld_melding_key
                     AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
                     AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd.ins_deel_key)
                     AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                     AND ik.ins_srtkenmerk_key BETWEEN 103 AND 105;   -- FB123

            IF (v_count > 0)
            THEN
               v_kosten_appl := 1;         -- ORDGOE; FB bekend, dan langs FB!
            ELSE
               IF (v_webbased = 1)
               THEN
                  v_kosten_appl := 0;   -- Webbased; geen FB, dan direct door!
               ELSE
                  v_kosten_appl := 2; -- ORDFIA; geen FB, dan langs budgethouder!
               END IF;
            END IF;
         ELSIF (v_aut_proces = '3')                    -- Autorisatie door KEY
         THEN
            -- Bepaal aantal KEYs via eigen tabel Org2Afkorting!
            v_errormsg := 'Fout bepalen aantal KEYs.';

            SELECT   COUNT (*)
              INTO   v_count
              FROM   prs_v_afdeling_boom ab,
                     fac_usrdata ud,
                     mld_melding m,
                     mld_stdmelding sm,
                     mld_kenmerk mk,
                     mld_srtkenmerk msk,
                     fac_kenmerkdomein kd,
                     mld_v_aanwezigkenmerkmelding mkm,
                     ins_v_aanwezigkenmerkdeel ikd,
                     ins_kenmerk ik,
                     ins_srtkenmerk isk
             WHERE   ab.prs_afdeling_key = v_afdeling_key
                     AND TO_CHAR (ab.prs_afdeling_key1) = ud.fac_usrdata_code
                     AND ud.fac_usrtab_key = 2                -- Org2Afkorting
                     AND m.mld_melding_key = p_mldkey
                     AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                     AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
                          OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
                     AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
                     AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
                     AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
                     AND kd.fac_kenmerkdomein_module = 'MLD'
                     AND m.mld_melding_key = mkm.mld_melding_key
                     AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
                     AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd.ins_deel_key)
                     AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                     AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
                     AND isk.ins_srtkenmerk_upper LIKE '%' || UPPER (ud.fac_usrdata_omschr);

            IF (v_count > 0)
            THEN
               v_kosten_appl := 1;       -- ORDGOE; KEY bekend, dan langs KEY!
            ELSE
               IF (v_webbased = 1)
               THEN
                  v_kosten_appl := 0;  -- Webbased; geen KEY, dan direct door!
               ELSE
                  v_kosten_appl := 2; -- ORDFIA; geen KEY, dan langs budgethouder!
               END IF;
            END IF;
         END IF;
      END IF;

      v_errormsg := 'Fout bepalen uitvoertijd + stdmelding.';

      SELECT   DECODE (
                  COALESCE (sm.mld_stdmelding_t_accepttijd.tijdsduur, 0),
                  0, sm.mld_stdmelding_t_uitvoertijd.tijdsduur,
                  sm.mld_stdmelding_t_uitvoertijd.tijdsduur - (ROUND (sm.mld_stdmelding_t_accepttijd.tijdsduur / 24, 0))
               ),
               sm.mld_stdmelding_omschrijving
        INTO   v_opdr_dagen, v_stdmelding
        FROM   mld_melding m, mld_stdmelding sm, ins_tab_discipline td, mld_disc_params dp
       WHERE       m.mld_melding_key = p_mldkey
               AND m.mld_stdmelding_key = sm.mld_stdmelding_key
               AND sm.mld_ins_discipline_key = td.ins_discipline_key
               AND td.ins_discipline_key = dp.mld_ins_discipline_key;

      v_errormsg := 'Fout bepalen opdrachttype.';

        SELECT   MIN (ts.mld_typeopdr_key)
          INTO   v_typeopdr_key
          FROM   mld_typeopdr_srtdiscipline ts
         WHERE   ts.ins_srtdiscipline_key = 21                -- ICT aanvragen
      GROUP BY   ts.ins_srtdiscipline_key;

      v_count := 0;
      v_deel1_start := -1;
      v_deeln_start := -1;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count := v_count + 1;
            v_kosten_rest := 0;

            -- Bepaal/bewaar tot waar de kenmerken in het algemene deel lopen.
            IF (v_deel1_start = -1)
            THEN
               v_deel1_start := rec.volgnummer;
            END IF;

            -- Bepaal vanaf waar de kenmerken van dit deel lopen.
            IF (v_deel1_start = 999)
            THEN                                  -- Enkelvoudige ICT aanvraag
               v_deeln_start := NULL;
            ELSE                                 -- Samengestelde ICT aanvraag
               v_deeln_start := rec.volgnummer;
            END IF;

            v_errormsg := 'Fout bepalen opdrachttekst (' || TO_CHAR (v_count) || ').';

            v_mld_flexcontent :=
               rwsn_did_flexcontent (p_mldkey, v_deel1_start, v_deeln_start);

            IF (v_mld_flexcontent IS NOT NULL)
            THEN
               v_errormsg := 'Fout bepalen noodzaak fiattering (' || TO_CHAR (v_count) || ').';

               -- Overige flows worden bepaald op basis van 'v_kosten_rest'!
               -- 2=mét acceptatietijd én invoerder géén Leidinggevende
               --   => Opdracht alleen langs Leidinggevende.
               -- 3=fiat-mode <> 2 of
               --   fiat-mode = 2 én aanvrager zonder SAP-id (= Extern)
               --   => Opdracht alleen langs Leidinggevende én DBV-er.
               SELECT   MAX (kosten)
                 INTO   v_kosten_rest
                 FROM   (SELECT   mld_melding_key, 2 kosten
                           FROM   mld_melding m, mld_stdmelding sm
                          WHERE   m.mld_melding_key = p_mldkey
                                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                                  AND COALESCE (sm.mld_stdmelding_t_accepttijd.tijdsduur, 0) > 0
                                  AND NOT EXISTS
                                        (SELECT   1
                                           FROM   fac_gebruikersgroep gg
                                          WHERE   gg.fac_groep_key IN (421, 422)  -- ICT cp.
                                                  AND gg.prs_perslid_key = fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key))
                         UNION ALL
                         SELECT   mld_melding_key, 3 kosten
                           FROM   mld_melding m, fac_v_aanwezigusrdata ud, prs_perslid p
                          WHERE       m.mld_melding_key = p_mldkey
                                  AND TO_CHAR (m.mld_stdmelding_key) || DECODE (v_deeln_start, NULL, '', '_' || TO_CHAR (v_deeln_start))
                                         = TRIM (ud.fac_usrdata_code)
                                  AND m.prs_perslid_key = p.prs_perslid_key
                                  AND ud.fac_usrtab_key = 463 -- Fiat-mode/opdr.
                                  AND (COALESCE (ud.fac_usrdata_omschr, '1') <> '2'
                                       OR (ud.fac_usrdata_omschr = '2' AND p.prs_perslid_nr IS NULL)));

               v_errormsg := 'Fout toevoegen opdracht (' || TO_CHAR (v_count) || ').';

               INSERT INTO mld_opdr (
                                        mld_opdr_datumbegin,
                                        mld_opdr_einddatum,
                                        mld_uitvoerende_keys,
                                        prs_contactpersoon_key,
                                        mld_typeopdr_key,
                                        prs_perslid_key,
                                        mld_opdr_omschrijving,
                                        mld_opdr_materiaal,
                                        mld_opdr_uren,
                                        mld_opdr_uurloon,
                                        mld_opdr_kosten,
                                        prs_kostenplaats_key,
                                        mld_melding_key,
                                        mld_opdr_module,
                                        mld_opdr_bedrijfopdr_volgnr,
                                        mld_opdr_teverzenden,
                                        mld_opdr_contactpersoon
                           )
                  VALUES   (
                               SYSDATE,
                               FAC.DatumTijdPlusUitvoerTijd (SYSDATE, COALESCE (v_opdr_dagen, 0), 'DAGEN'),
                               45916,               -- Alles naar TOPdesk-KCC!
                               NULL,
                               v_typeopdr_key,                          -- DID
                               4,                                 -- Facilitor
                               v_mld_flexcontent,
                               DECODE (v_kosten_appl, -1, 0, COALESCE (v_kosten_appl, v_kosten_rest, 0)),
                               0,
                               0,
                               DECODE (v_kosten_appl, -1, 0, COALESCE (v_kosten_appl, v_kosten_rest, 0)),
                               v_kostenplaats_key,
                               p_mldkey,
                               'MLD',
                               MLD.bepaalopdrmeldingvolgnr (p_mldkey),
                               DECODE (v_kosten_appl, -1, NULL, 1, DECODE (v_webbased, 1, NULL, 1), 1),
                               SUBSTR ('Facilitor', 1, 30)
                           )
               RETURNING   mld_opdr_key      INTO   v_opdr_key;

               COMMIT;

               -- v_kosten_appl=-1, dan doe niets en laat aangemaakte opdracht
               -- "bungelen"!
               IF (v_kosten_appl = -1)
               THEN
                  BEGIN
                     MLD.setopdrachtstatus (v_opdr_key, 5, 4);    -- Facilitor

                     v_errormsg := 'Fout bijwerken toekenning (' || TO_CHAR (v_count) || ').';

                     v_mld_opmerking :=
                           TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
                        || ' Opdracht "'
                        || COALESCE (rec.mld_kenmerk_default, v_stdmelding)
                        || '" geregistreerd tbv. verdere afhandeling.';
                  END;
               -- v_kosten_appl=1, dan ALTIJD 'Ter goedkeuring'!
               -- Of bestellimiet wel of niet voldoet doet er niet toe.
               -- NB. Tenminste 1 Beheerder hier altijd bekend/gedefinieerd.
               ELSIF (v_kosten_appl = 1)
               THEN
                  BEGIN
                     -- Via MLD.setopdrachtstatus() naar 10 doet ORDGOE-trackaction en triggert een ORD2GO-notificatie naar iedereen met ORDGOE-rechten!
                     --MLD.setopdrachtstatus (v_opdr_key, 10, 4);   -- Facilitor
                     -- Bovenstaande willen wij niet, daarom hier via UPDATE, eigen #ORDGOE-trackaction (#-prefix onderdrukt standaard notificaties) en
                     -- ORD2GO-notificatie naar beheerders volgt via notificatiejob!
                     UPDATE   mld_opdr
                        SET   mld_statusopdr_key = 10
                      WHERE   mld_opdr_key = v_opdr_key;

                     fac.trackaction ('#ORDGOE',
                                      v_opdr_key,
                                      4,
                                      NULL,
                                      NULL);

                     v_errormsg := 'Fout bijwerken ter ORD2GO-fiattering (' || TO_CHAR (v_count) || ').';

                     v_mld_opmerking :=
                           TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
                        || ' Opdracht "'
                        || COALESCE (rec.mld_kenmerk_default, v_stdmelding)
                        || '" ter autorisatie aangeboden aan Beheerder.';
                  END;
               -- v_kosten_xxxx>1, dan ALTIJD 'Ter fiattering'!
               -- Of budgethouder wel of niet bestaat doet er niet toe.
               ELSIF (COALESCE (v_kosten_appl, v_kosten_rest, 0) > 1)
               THEN
                  BEGIN
                     MLD.setopdrachtstatus (v_opdr_key, 3, 4);    -- Facilitor

                     -- Notificeren als budgethouder bekend!
                     IF (v_budgethouder_key <> -1)
                     THEN
                        v_errormsg := 'Fout bepalen MLDAP1-omschrijving.';

                        SELECT lcl.x ('fac_srtnotificatie_oms', fac_srtnotificatie_key, fac_srtnotificatie_oms)
                          INTO v_srtnoti_oms
                          FROM fac_srtnotificatie
                         WHERE fac_srtnotificatie_code = 'MLDAP1';

                        fac.putnotificationsrtprio (
                           NULL,
                           v_budgethouder_key,
                           'MLDAP1',
                           v_opdr_key,
                           mld.opdrsprintf (v_srtnoti_oms, v_opdr_key),
                           NULL,
                           NULL,
                           NULL,
                           NULL,
                           2,
                           NULL);
                     END IF;

                     v_errormsg := 'Fout bijwerken ter MLDAP1-fiattering (' || TO_CHAR (v_count) || ').';

                     v_mld_opmerking :=
                           TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
                        || ' Opdracht "'
                        || COALESCE (rec.mld_kenmerk_default, v_stdmelding)
                        || '" ter autorisatie aangeboden aan '
                        || v_fiatteur_type
                        || '.';
                  END;
               ELSE
                  BEGIN
                     MLD.setopdrachtstatus (v_opdr_key, 5, 4);    -- Facilitor

                     v_errormsg := 'Fout bijwerken verzending (' || TO_CHAR (v_count) || ').';

                     v_mld_opmerking :=
                           TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
                        || ' Opdracht "'
                        || COALESCE (rec.mld_kenmerk_default, v_stdmelding)
                        || '" aangeboden aan de ICT-servicedesk.';
                  END;
               END IF;

               v_count := LENGTH (v_mld_opmerking) + 5;

               -- Beetje speling qua lengte!
               UPDATE   mld_melding
                  SET   mld_melding_opmerking = v_mld_opmerking || CHR (13) || CHR (10) || SUBSTR (mld_melding_opmerking, 1, (4000 - v_count))
                WHERE   mld_melding_key = p_mldkey;

               BEGIN
                  MLD.updatemeldingstatus (p_mldkey, 0, 4);       -- Facilitor
               END;

               COMMIT;
            END IF;
         EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
               v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
               fac.writelog (p_applname, 'E', v_aanduiding || v_errormsg, '');
               COMMIT;
         END;
      END LOOP;
   END;
BEGIN
   -- RWSN#24870: Per RWSN49 vervallen.
   -- Afwijzen open !dienstspecifieke! ICT aanvragen waarvan aanvrager in een
   -- andere dienst (niet geautoriseerd) en invoerder is ICT contactpersoon!
   -- RWSN#24870-einde!

   -- RWSN#27015: Per RWSN51 vervallen; afgehandeld binnen insert_mld_opdr!
   -- Accepteren open ICT aanvragen zonder acceptatietijd of waarvan invoerder
   -- is zelf Leidinggevende (deze behoeven geen goedkeuring)!
   -- RWSN#27015-einde!

   -- RWSN#27015: Per RWSN51 vervallen; afgehandeld binnen insert_mld_opdr!
   -- Bijwerken voortgang van open ICT aanvragen mét acceptatietijd én waarvan
   -- invoerder is zelf géén Leidinggevende!
   -- RWSN#27015-einde!

   v_count_tot := 0;
   v_count_upd := 0;

   -- Loop door alle te behandelen ICT aanvragen en maak - per aanvraag - 1 of
   -- meer (deel)opdrachten aan, tenminste, zover een geldige uitvoerende voor
   -- gekozen hoofdlocatie is geconfigureerd (anders skippen).
   -- Per RWSN#27105 hier voortaan altijd eerst de melding (auto-)accepteren!
   FOR rec IN c3
   LOOP
      BEGIN
         v_aanduiding := '[ICT aanvraag ' || rec.mld_melding_key || '] ';
         v_errormsg := 'Fout controle configuratie uitvoerende.';

         v_count_tot := v_count_tot + 1;

         -- Controleer configuratie uitvoerende voor gekozen hoofdlocatie.
         SELECT   COUNT ( * )
           INTO   v_count
           FROM   prs_v_aanwezigbedrijf b
          WHERE   b.prs_bedrijf_key = 45916         -- Alles naar TOPdesk!
               AND EXISTS (SELECT ''
                             FROM prs_bedrijfadres a
                            WHERE a.prs_bedrijfadres_type = 'O'
                              AND a.prs_bedrijf_key = b.prs_bedrijf_key
                          );

         IF (v_count = 1)
         THEN
            v_errormsg := 'Fout auto-accepteren.';

            BEGIN
               MLD.setmeldingstatus (rec.mld_melding_key, 4, 4);  -- Facilitor
            END;

            COMMIT;

            v_errormsg := 'Fout aanmaken opdracht(en).';

            insert_mld_opdr (p_applname, p_applrun, rec.mld_melding_key);
            v_count_upd := v_count_upd + 1;
         END IF;
      END;
   END LOOP;

   fac.writelog (
      p_applname,
      'S',
         'Proces: '
      || TO_CHAR (v_count_upd)
      || ' van '
      || TO_CHAR (v_count_tot)
      || ' ICT aanvragen uitgegeven',
      ''
   );
   COMMIT;

   -- Loop door de ter goedkeuring of ter fiattering aangeboden ICT opdrachten
   -- die zojuist zijn goedgekeurd/gefiatteerd en werk melding bij.
   -- Per RWSN#27015 loopt de flow (na autorisatie via de GUI) voortaan verder
   -- vanzelf (gebruikmakend van standaard functionaliteit).
   -- Per RWSN#29095 aanvragen van webbased-applicaties via aut.proces 2 of 3
   -- (waarvoor FB/KEY bestaat) direct afmelden.
   FOR rec IN c4
   LOOP
      BEGIN
         v_aanduiding :=
               '[ICT aanvraag '
            || rec.mld_melding_key
            || '/'
            || rec.mld_opdr_bedrijfopdr_volgnr
            || '] ';
         v_errormsg := 'Fout bijwerken goedkeuring door ' || rec.fiatteur_type || '.';

         IF (rec.mld_melding_opmerking NOT LIKE
                '%goedgekeurd door ' || rec.fiatteur_naam || '%')
         THEN
            v_mld_opmerking :=
                  TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
               || ' Opdracht "'
               || SUBSTR (rec.opdracht, 1, 60)
               || '" goedgekeurd door '
               || rec.fiatteur_naam
               || '.';

            IF (rec.fiatteur_type = 'Beheerder' AND rec.mld_opdr_kosten > 1)
            THEN
               v_mld_opmerking :=
                     TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
                  || ' Opdracht "'
                  || SUBSTR (rec.opdracht, 1, 60)
                  || '" ter autorisatie aangeboden aan Leidinggevende.'
                  || CHR (13)
                  || CHR (10)
                  || v_mld_opmerking;
            ELSIF (rec.fiatteur_type = 'Leidinggevende' AND rec.mld_opdr_kosten > 2)
            THEN
               v_mld_opmerking :=
                     TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
                  || ' Opdracht "'
                  || SUBSTR (rec.opdracht, 1, 60)
                  || '" ter autorisatie aangeboden aan DBV.'
                  || CHR (13)
                  || CHR (10)
                  || v_mld_opmerking;
            END IF;

            v_count := LENGTH (v_mld_opmerking) + 5;

            -- Beetje speling qua lengte!
            UPDATE   mld_melding
               SET   mld_melding_opmerking =
                        v_mld_opmerking || CHR (13) || CHR (10)
                        || SUBSTR (rec.mld_melding_opmerking,
                                   1,
                                   (4000 - v_count))
             WHERE   mld_melding_key = rec.mld_melding_key;

            IF (rec.mld_opdr_kosten = 1 AND rec.mld_opdr_teverzenden IS NULL)
            THEN
               BEGIN
                  MLD.setopdrachtstatus (rec.mld_opdr_key, 6, 4); -- Facilitor
               END;
            END IF;

            COMMIT;
         END IF;
      END;
   END LOOP;

   -- Loop door de ter autorisatie aangeboden ICT opdrachten die zojuist zijn
   -- afgewezen en werk melding bij.
   FOR rec IN c5
   LOOP
      BEGIN
         v_aanduiding :=
               '[ICT aanvraag '
            || rec.mld_melding_key
            || '/'
            || rec.mld_opdr_bedrijfopdr_volgnr
            || '] ';
         v_errormsg := 'Fout toevoegen opdrachtkenmerk XXX.';

         INSERT INTO mld_kenmerkopdr (
                                         mld_kenmerkopdr_waarde,
                                         mld_kenmerk_key,
                                         mld_opdr_key
                    )
           VALUES   ('XXX', c_externnr_kenmerk_key, rec.mld_opdr_key);

         v_errormsg := 'Fout bijwerken afwijzing door ' || rec.fiatteur_type || '.';

         IF (rec.mld_melding_opmerking NOT LIKE
                '%afgewezen door ' || rec.fiatteur_naam || '%')
         THEN
            v_mld_opmerking :=
                  TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
               || ' Opdracht "'
               || SUBSTR (rec.opdracht, 1, 60)
               || '" afgewezen door '
               || rec.fiatteur_naam
               || ', met als reden: '
               || SUBSTR (rec.mld_opdr_opmerking_fiat, 1, 1024);
            v_count := LENGTH (v_mld_opmerking) + 5;

            -- Beetje speling qua lengte!
            UPDATE   mld_melding
               SET   mld_melding_opmerking =
                        v_mld_opmerking || CHR (13) || CHR (10)
                        || SUBSTR (rec.mld_melding_opmerking,
                                   1,
                                   (4000 - v_count))
             WHERE   mld_melding_key = rec.mld_melding_key;

            COMMIT;
         END IF;
      END;
   END LOOP;

   -- Loop door de ter autorisatie aangeboden ICT opdrachten die zojuist zijn
   -- verzonden en werk melding bij.
   FOR rec IN c6
   LOOP
      BEGIN
         v_aanduiding :=
               '[ICT aanvraag '
            || rec.mld_melding_key
            || '/'
            || rec.mld_opdr_bedrijfopdr_volgnr
            || '] ';
         v_errormsg := 'Fout bijwerken verzending.';

         IF (rec.mld_melding_opmerking NOT LIKE
                '%aangeboden aan de ICT-servicedesk%')
         THEN
            v_mld_opmerking :=
                  TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
               || ' Opdracht "'
               || SUBSTR (rec.opdracht, 1, 60)
               || '" aangeboden aan de ICT-servicedesk.';
            v_count := LENGTH (v_mld_opmerking) + 5;

            -- Beetje speling qua lengte!
            UPDATE   mld_melding
               SET   mld_melding_opmerking =
                        v_mld_opmerking || CHR (13) || CHR (10)
                        || SUBSTR (rec.mld_melding_opmerking,
                                   1,
                                   (4000 - v_count))
             WHERE   mld_melding_key = rec.mld_melding_key;

            COMMIT;
         END IF;
      END;
   END LOOP;

   -- Doorvoeren 'Laatste actie' in de Afhandeling en Opmerking van resp. de
   -- opdracht en de melding.
   FOR rec IN c7
   LOOP
      BEGIN
         v_aanduiding :=
               '[ICT aanvraag '
            || rec.mld_melding_key
            || '/'
            || rec.mld_opdr_bedrijfopdr_volgnr
            || '] ';
         v_errormsg := 'Fout bijwerken laatste actie/melding.';

         v_mld_opmerking :=
               TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
            || ' / "'
            || SUBSTR (rec.opdracht, 1, 60)
            || '" '
            || CHR (13)
            || CHR (10)
            || SUBSTR (rec.laatste_actie, 1, 255);
         v_count := LENGTH (v_mld_opmerking) + 5;

         -- Beetje speling qua lengte!
         UPDATE   mld_melding
            SET   mld_melding_opmerking =
                     v_mld_opmerking || CHR (13) || CHR (10)
                     || SUBSTR (rec.mld_melding_opmerking,
                                1,
                                (4000 - v_count))
          WHERE   mld_melding_key = rec.mld_melding_key;

         v_errormsg := 'Fout bijwerken laatste actie/opdracht.';

         v_mld_opmerking :=
               TO_CHAR (SYSDATE, 'dd-mm-yyyy hh24:mi:ss')
            || CHR (13)
            || CHR (10)
            || SUBSTR (rec.laatste_actie, 1, 255);
         v_count := LENGTH (v_mld_opmerking) + 5;

         -- Beetje speling qua lengte!
         UPDATE   mld_opdr
            SET   mld_opdr_opmerking =
                        v_mld_opmerking
                     || CHR (13)
                     || CHR (10)
                     || SUBSTR (rec.mld_opdr_opmerking, 1, (4000 - v_count))
          WHERE   mld_opdr_key = rec.mld_opdr_key;

         DELETE FROM mld_kenmerkopdr WHERE mld_kenmerkopdr_key = rec.mld_kenmerkopdr_key;
         COMMIT;
      END;
   END LOOP;

   -- Afmelden niet opgeloste ICT aanvragen (waaronder opdrachten bestaan die
   -- allemaal de status Afgewezen, Niet akkoord, Afgemeld of Verwerkt hebben!
   FOR rec IN c8
   LOOP
      v_aanduiding := '[ICT aanvraag ' || rec.mld_melding_key || '] ';
      v_errormsg := 'Fout auto-afmelden.';

      BEGIN
         MLD.setmeldingstatus (rec.mld_melding_key, 5, 4);        -- Facilitor

         -- Handle workflow actions for completion.
         MLD.mld_nextworkflowstep (rec.mld_melding_key, 1);     -- 1=Completed

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

-- Multi variant voor automatische import via gen_import van DID statusberichten.
/* Formatted on 11-1-2011 18:00:50 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_import_did_status (p_import_key IN NUMBER)
AS
   c_delim                 VARCHAR2 (1) := ';';
   v_newline               VARCHAR2 (1000);                      -- Input line
   v_errormsg              VARCHAR2 (1000);
   oracle_err_num          NUMBER;
   oracle_err_mes          VARCHAR2 (200);
   v_aanduiding            VARCHAR2 (200);
   header_is_valid         NUMBER := 0;
   v_count_tot             NUMBER (10) := 0;
   v_count_import          NUMBER (10) := 0;
   v_ongeldig              NUMBER (1) := 0;
   -- De importvelden
   v_opdrachtnr            VARCHAR2 (255);                               -- C?
   v_msg_type              VARCHAR2 (255);                               -- C?
   v_imp_log_timestamp     VARCHAR2 (255);                             -- DATE
   v_imp_log_timestamp_d   DATE;                                       -- DATE
   v_externnr              VARCHAR2 (255);                               -- C?
   v_mld_info              VARCHAR2 (1000);                              -- C?
   v_mld_einddatum         VARCHAR2 (255);                             -- DATE
   v_mld_einddatum_d       DATE;                                       -- DATE

   -- Overige velden:
   CURSOR c1
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM rwsn_imp_didstatusmulti WHERE imp_log_run <> TO_CHAR (p_import_key);
   COMMIT;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';
         v_ongeldig := 0;

         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_opdrachtnr);
         fac.imp_getfield (v_newline, c_delim, v_msg_type);
         fac.imp_getfield (v_newline, c_delim, v_imp_log_timestamp);
         fac.imp_getfield (v_newline, c_delim, v_externnr);
         fac.imp_getfield (v_newline, c_delim, v_mld_info);
         fac.imp_getfield (v_newline, c_delim, v_mld_einddatum);
         v_aanduiding :=
               '['
            || v_msg_type
            || '|'
            || v_opdrachtnr
            || '|'
            || v_externnr
            || '] ';

         -- 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 (TRIM(v_opdrachtnr)) = 'OPDRACHTNUMMER'
               AND UPPER (TRIM(v_msg_type)) = 'MUTATIECODE'
               AND UPPER (TRIM(v_imp_log_timestamp)) = 'MUTATIETIJDSTIP'
               AND UPPER (TRIM(v_externnr)) = 'EXTERNNR'
               AND UPPER (TRIM(v_mld_info)) = 'OPMERKING'
               AND UPPER (TRIM(v_mld_einddatum)) = 'EINDDATUM'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Fout inlezen opdrachtnummer';
            v_opdrachtnr := TRIM (v_opdrachtnr);

            IF (v_opdrachtnr IS NULL)
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Opdrachtnummer verplicht; regel wordt overgeslagen!'
               );
               v_ongeldig := 1;
            END IF;

            --
            v_errormsg := 'Fout inlezen mutatiecode';
            v_msg_type := TRIM (v_msg_type);

            IF (COALESCE (v_msg_type, 'XXX') != 'UPD'
                AND COALESCE (v_msg_type, 'XXX') != 'AFM')
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Mutatiecode ongeldig; regel wordt overgeslagen!'
               );
               v_ongeldig := 1;
            END IF;

            --
            v_errormsg := 'Fout inlezen mutatietijdstip';
            v_imp_log_timestamp := TRIM (v_imp_log_timestamp);

            IF (fac.safe_to_date (v_imp_log_timestamp, 'yyyy-mm-dd hh24:mi:ss') IS NULL)
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Mutatietijdstip ongeldig; regel wordt overgeslagen!'
               );
               v_ongeldig := 1;
            ELSE
               v_imp_log_timestamp_d := fac.safe_to_date (v_imp_log_timestamp, 'yyyy-mm-dd hh24:mi:ss');
            END IF;

            --
            v_errormsg := 'Fout inlezen externnr';
            v_externnr := TRIM (v_externnr);

            --
            v_errormsg := 'Fout inlezen opmerking';
            v_mld_info :=
               SUBSTR (
                  TRIM (REPLACE (v_mld_info, '%%0A', CHR (13) || CHR (10))),
                  1,
                  500
               );

            --
            v_errormsg := 'Fout inlezen einddatum';
            v_mld_einddatum := TRIM (v_mld_einddatum);

            IF (v_mld_einddatum IS NOT NULL)
            THEN
               IF (fac.safe_to_date (v_mld_einddatum, 'yyyy-mm-dd hh24:mi:ss') IS NULL)
               THEN
                  fac.imp_writelog (
                    p_import_key,
                     'W',
                     v_aanduiding || v_errormsg,
                     'Einddatum ongeldig; datum wordt niet bijgewerkt!'
                  );
                  v_mld_einddatum_d := NULL;
               ELSE
                  v_mld_einddatum_d := fac.safe_to_date (v_mld_einddatum, 'yyyy-mm-dd hh24:mi:ss');
               END IF;
            END IF;

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

                  INSERT INTO rwsn_imp_didstatusmulti (
                                                          imp_log_run,
                                                          imp_log_timestamp,
                                                          msg_type,
                                                          opdrachtnr,
                                                          externnr,
                                                          mld_info,
                                                          mld_einddatum
                             )
                    VALUES   (
                                 TO_CHAR (p_import_key),
                                 v_imp_log_timestamp_d,
                                 SUBSTR (v_msg_type, 1, 30),
                                 SUBSTR (v_opdrachtnr, 1, 15),
                                 SUBSTR (v_externnr, 1, 15),
                                 SUBSTR (v_mld_info, 1, 1000),
                                 v_mld_einddatum_d
                             );

                  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,
                        'E',
                        v_aanduiding || v_errormsg,
                        ''
                     );
               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',
         'Inleesproces/#ingelezen importregels: '
         || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Inleesproces/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   DELETE FROM fac_imp_file 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 :=
            v_errormsg
         || 'ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Inleesproces DID statusberichten afgebroken!');
END;
/

/* Formatted on 9-11-2015 13:23:34 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_update_did_status (p_import_key IN NUMBER)
AS
   -- Cursor loopt - in volgorde! - over alle ingelezen DID statusberichten.
   CURSOR c1
   IS
        SELECT imp_log_timestamp,
               msg_type,
               opdrachtnr,
               externnr,
               DECODE (
                  mld_info,
                  NULL, NULL,
                     TO_CHAR (imp_log_timestamp, 'dd-mm-yyyy hh24:mi:ss')
                  || CHR (13)
                  || CHR (10)
                  || mld_info)
                  mld_info,
               mld_einddatum
          FROM rwsn_imp_didstatusmulti
         WHERE imp_log_run = TO_CHAR (p_import_key)
      ORDER BY 1, 2 DESC, 3;

   --c_externnr_kenmerk_key   NUMBER (10) := 1577;
   c_externnr_ksrtkey   NUMBER (10) := 321;                   -- Extern nummer
   v_errormsg           VARCHAR2 (1000);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_aanduiding         VARCHAR2 (200);
   v_count_tot          NUMBER (10);
   v_count              NUMBER (10);
   v_mld_key            NUMBER (10);
   v_opdr_key           NUMBER (10);
   v_typeopdr_key       NUMBER (10);
   v_opdr_status        NUMBER (10);
   v_externnr_kkey      NUMBER (10);
BEGIN
   -- Loop door alle geimporteerde DID statusberichten en verwerk deze.
   v_count_tot := 0;

   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.msg_type || '|' || rec.opdrachtnr || '] ';
         v_count_tot := v_count_tot + 1;
         v_count := 0;
         v_mld_key := -1;
         v_opdr_key := -1;

         -- Key van melding/opdracht bepalen (alleen DID en GPO gerelateerd!).
         IF (rec.opdrachtnr IS NOT NULL)
         THEN
            v_errormsg := 'Fout bepalen melding/opdracht.';

            --SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key
            --  INTO v_mld_key, v_opdr_key, v_opdr_status
            --  FROM mld_opdr
            -- WHERE     mld_typeopdr_key = 1441                          -- DID
            --       AND mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr = rec.opdrachtnr;
            SELECT o.mld_melding_key, o.mld_opdr_key, o.mld_typeopdr_key, o.mld_statusopdr_key
              INTO v_mld_key, v_opdr_key, v_typeopdr_key, v_opdr_status
              FROM mld_opdr o, mld_melding m, mld_stdmelding sm, mld_discipline md
             WHERE     o.mld_melding_key = m.mld_melding_key
                   AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                   AND sm.mld_ins_discipline_key = md.ins_discipline_key
                   AND md.ins_srtdiscipline_key IN (21, 121)        -- ICT/GPO
                   AND o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = rec.opdrachtnr;
         END IF;

         -- Alleen iets doen als melding/opdracht succesvol is bepaald.
         IF (v_mld_key > 0 AND v_opdr_key > 0)
         THEN
            -- Externnr-kenmerk initieel opslaan bij opdracht (met externnr).
            IF (rec.externnr IS NOT NULL)
            THEN
               v_errormsg := 'Fout bepalen externnr-bestaan.';

               SELECT COUNT ( * )
                 INTO v_count
                 FROM mld_kenmerk
                WHERE     mld_kenmerk_verwijder IS NULL
                      AND mld_srtkenmerk_key = c_externnr_ksrtkey
                      AND mld_typeopdr_key = v_typeopdr_key
                      AND mld_kenmerk_niveau = 'O';

               IF (v_count = 1)
               THEN
                  v_errormsg := 'Fout bepalen externnr-key.';

                  SELECT mld_kenmerk_key
                    INTO v_externnr_kkey
                    FROM mld_kenmerk
                   WHERE     mld_kenmerk_verwijder IS NULL
                         AND mld_srtkenmerk_key = c_externnr_ksrtkey
                         AND mld_typeopdr_key = v_typeopdr_key
                         AND mld_kenmerk_niveau = 'O';

                  v_errormsg := 'Fout toevoegen externr-waarde.';

                  SELECT COUNT ( * )
                    INTO v_count
                    FROM mld_v_aanwezigkenmerkopdr ok, mld_kenmerk k
                   WHERE     ok.mld_opdr_key = v_opdr_key
                         AND ok.mld_kenmerk_key = k.mld_kenmerk_key
                         AND k.mld_srtkenmerk_key = c_externnr_ksrtkey;

                  IF (v_count = 0)
                  THEN
                     INSERT INTO mld_kenmerkopdr (mld_kenmerkopdr_waarde,
                                                  mld_kenmerk_key,
                                                  mld_opdr_key)
                         VALUES (rec.externnr, v_externnr_kkey, v_opdr_key);
                  END IF;
               END IF;
            END IF;

            -- Bijwerken Opmerking met mld_info (bovenin melding en opdracht).
            IF (rec.mld_info IS NOT NULL)
            THEN
               v_errormsg := 'Fout bijwerken opdracht-opmerking.';

               v_count := LENGTH (rec.mld_info) + 5; -- Beetje speling qua lengte!

               UPDATE mld_opdr
                  SET mld_opdr_opmerking =
                         DECODE (
                            mld_opdr_opmerking,
                            NULL, rec.mld_info,
                            rec.mld_info || CHR (13) || CHR (10)
                            || SUBSTR (mld_opdr_opmerking,
                                       1,
                                       (4000 - v_count)))
                WHERE mld_opdr_key = v_opdr_key
                      AND mld_statusopdr_key IN (5, 8);

               IF (rec.msg_type <> 'NOK') -- NOK voor DID - nog - ongedefinieerd!
               THEN
                  v_errormsg := 'Fout bijwerken melding-opmerking.';

                  UPDATE mld_melding
                     SET mld_melding_opmerking =
                            DECODE (
                               mld_melding_opmerking,
                               NULL, rec.mld_info,
                               rec.mld_info || CHR (13) || CHR (10)
                               || SUBSTR (mld_melding_opmerking,
                                          1,
                                          (4000 - v_count)))
                   WHERE mld_melding_key = v_mld_key
                         AND mld_melding_status IN (4, 7);
               END IF;

               COMMIT;
            END IF;

            -- Plandatum van melding bijwerken volgens mld_einddatum (alleen naar
            -- achteren en als msg_type=UPD).
            IF (rec.msg_type = 'UPD' AND rec.mld_einddatum IS NOT NULL)
            THEN
               v_errormsg := 'Fout bijwerken einddatum volgens UPD.';

               UPDATE mld_melding
                  SET mld_melding_einddatum = rec.mld_einddatum
                WHERE     mld_melding_key = v_mld_key
                      AND mld_melding_status IN (4, 7)
                      AND rec.mld_einddatum > mld_melding_einddatum;

               COMMIT;
            END IF;

            -- Sluit opdracht (als msg_type=AFM); de bovenliggende melding wordt
            -- eventueel gesloten tijdens db-procedure: rwsn_export_did_opdr!
            IF (rec.msg_type = 'AFM')
            THEN
               -- Sluit opdracht!
               IF (v_opdr_status = 5 OR v_opdr_status = 8)
               THEN
                  v_errormsg := 'Fout sluiten opdracht.';

                  MLD.setopdrachtstatus (v_opdr_key, 6, 4);       -- Facilitor

                  COMMIT;
               END IF;
            END IF;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.imp_writelog (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              'Fout verwerken DID statusbericht.');
      END;
   END LOOP;

   fac.imp_writelog (
      p_import_key,
      'S',
         'Proces: '
      || TO_CHAR (v_count_tot)
      || ' DID statusberichten afgehandeld.',
      '');
   COMMIT;
END;
/


/* Formatted on 3-7-2013 13:14:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW RWSN_V_ICTCP_PER_AFD
(
   afd_key,
   prs_key,
   direct,
   bv
)
AS
   SELECT   afdx.prs_afdeling_key afd_key,
            pb.prs_perslid_key prs_key,
            'Ja' direct,
            'B' bv                                   -- Budgethouder/Vervanger
     FROM   prs_afdeling afdx,
            prs_v_aanwezigkostenplaats kp,
            prs_v_aanwezigperslid pb
    WHERE       afdx.prs_afdeling_verwijder IS NULL
            AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND kp.prs_perslid_key = pb.prs_perslid_key
   UNION ALL
   SELECT   afdx.prs_afdeling_key afd_key,
            c.prs_perslid_key_alt prs_key,
            'Ja' direct,
            'V' bv                                   -- Budgethouder/Vervanger
     FROM   prs_afdeling afdx, prs_v_aanwezigkostenplaats kp, prs_collega c
    WHERE       afdx.prs_afdeling_verwijder IS NULL
            AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
            AND kp.prs_perslid_key = c.prs_perslid_key
   UNION ALL                  -- Afdelingen zonder budgethouder 1 niveau lager
   SELECT   afd1.prs_afdeling_key afd_key,
            ap.prs_key,
            'Nee',
            ap.bv
     FROM   (SELECT   afdx.prs_afdeling_key afd_key,
                      kp.prs_perslid_key prs_key,
                      'B' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_v_aanwezigperslid pb
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = pb.prs_perslid_key
             UNION ALL
             SELECT   afdx.prs_afdeling_key afd_key,
                      c.prs_perslid_key_alt prs_key,
                      'V' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_collega c
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = c.prs_perslid_key) ap,
            prs_afdeling afd1,
            prs_v_aanwezigkostenplaats kp1
    WHERE       ap.afd_key = afd1.prs_afdeling_parentkey
            AND afd1.prs_afdeling_verwijder IS NULL
            AND afd1.prs_kostenplaats_key = kp1.prs_kostenplaats_key
            AND kp1.prs_perslid_key IS NULL
   UNION ALL                 -- Afdelingen zonder budgethouder 2 niveaux lager
   SELECT   afd2.prs_afdeling_key afd_key,
            ap.prs_key,
            'Nee',
            ap.bv
     FROM   (SELECT   afdx.prs_afdeling_key afd_key,
                      kp.prs_perslid_key prs_key,
                      'B' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_v_aanwezigperslid pb
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = pb.prs_perslid_key
             UNION ALL
             SELECT   afdx.prs_afdeling_key afd_key,
                      c.prs_perslid_key_alt prs_key,
                      'V' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_collega c
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = c.prs_perslid_key) ap,
            prs_afdeling afd1,
            prs_v_aanwezigkostenplaats kp1,
            prs_afdeling afd2,
            prs_v_aanwezigkostenplaats kp2
    WHERE       ap.afd_key = afd1.prs_afdeling_parentkey
            AND afd1.prs_afdeling_verwijder IS NULL
            AND afd1.prs_kostenplaats_key = kp1.prs_kostenplaats_key
            AND kp1.prs_perslid_key IS NULL
            AND afd1.prs_afdeling_key = afd2.prs_afdeling_parentkey
            AND afd2.prs_afdeling_verwijder IS NULL
            AND afd2.prs_kostenplaats_key = kp2.prs_kostenplaats_key
            AND kp2.prs_perslid_key IS NULL
   UNION ALL                 -- Afdelingen zonder budgethouder 3 niveaux lager
   SELECT   afd3.prs_afdeling_key afd_key,
            ap.prs_key,
            'Nee',
            ap.bv
     FROM   (SELECT   afdx.prs_afdeling_key afd_key,
                      kp.prs_perslid_key prs_key,
                      'B' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_v_aanwezigperslid pb
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = pb.prs_perslid_key
             UNION ALL
             SELECT   afdx.prs_afdeling_key afd_key,
                      c.prs_perslid_key_alt prs_key,
                      'V' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_collega c
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = c.prs_perslid_key) ap,
            prs_afdeling afd1,
            prs_v_aanwezigkostenplaats kp1,
            prs_afdeling afd2,
            prs_v_aanwezigkostenplaats kp2,
            prs_afdeling afd3,
            prs_v_aanwezigkostenplaats kp3
    WHERE       ap.afd_key = afd1.prs_afdeling_parentkey
            AND afd1.prs_afdeling_verwijder IS NULL
            AND afd1.prs_kostenplaats_key = kp1.prs_kostenplaats_key
            AND kp1.prs_perslid_key IS NULL
            AND afd1.prs_afdeling_key = afd2.prs_afdeling_parentkey
            AND afd2.prs_afdeling_verwijder IS NULL
            AND afd2.prs_kostenplaats_key = kp2.prs_kostenplaats_key
            AND kp2.prs_perslid_key IS NULL
            AND afd2.prs_afdeling_key = afd3.prs_afdeling_parentkey
            AND afd3.prs_afdeling_verwijder IS NULL
            AND afd3.prs_kostenplaats_key = kp3.prs_kostenplaats_key
            AND kp3.prs_perslid_key IS NULL
   UNION ALL                 -- Afdelingen zonder budgethouder 4 niveaux lager
   SELECT   afd4.prs_afdeling_key afd_key,
            ap.prs_key,
            'Nee',
            ap.bv
     FROM   (SELECT   afdx.prs_afdeling_key afd_key,
                      kp.prs_perslid_key prs_key,
                      'B' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_v_aanwezigperslid pb
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = pb.prs_perslid_key
             UNION ALL
             SELECT   afdx.prs_afdeling_key afd_key,
                      c.prs_perslid_key_alt prs_key,
                      'V' bv                         -- Budgethouder/Vervanger
               FROM   prs_afdeling afdx,
                      prs_v_aanwezigkostenplaats kp,
                      prs_collega c
              WHERE       afdx.prs_afdeling_verwijder IS NULL
                      AND afdx.prs_kostenplaats_key = kp.prs_kostenplaats_key
                      AND kp.prs_perslid_key = c.prs_perslid_key) ap,
            prs_afdeling afd1,
            prs_v_aanwezigkostenplaats kp1,
            prs_afdeling afd2,
            prs_v_aanwezigkostenplaats kp2,
            prs_afdeling afd3,
            prs_v_aanwezigkostenplaats kp3,
            prs_afdeling afd4,
            prs_v_aanwezigkostenplaats kp4
    WHERE       ap.afd_key = afd1.prs_afdeling_parentkey
            AND afd1.prs_afdeling_verwijder IS NULL
            AND afd1.prs_kostenplaats_key = kp1.prs_kostenplaats_key
            AND kp1.prs_perslid_key IS NULL
            AND afd1.prs_afdeling_key = afd2.prs_afdeling_parentkey
            AND afd2.prs_afdeling_verwijder IS NULL
            AND afd2.prs_kostenplaats_key = kp2.prs_kostenplaats_key
            AND kp2.prs_perslid_key IS NULL
            AND afd2.prs_afdeling_key = afd3.prs_afdeling_parentkey
            AND afd3.prs_afdeling_verwijder IS NULL
            AND afd3.prs_kostenplaats_key = kp3.prs_kostenplaats_key
            AND kp3.prs_perslid_key IS NULL
            AND afd3.prs_afdeling_key = afd4.prs_afdeling_parentkey
            AND afd4.prs_afdeling_verwijder IS NULL
            AND afd4.prs_kostenplaats_key = kp4.prs_kostenplaats_key
            AND kp4.prs_perslid_key IS NULL;

-- RWSN#27015: Omgebutst!
/* Formatted on 25-6-2014 13:22:56 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_noti_aut_ictaanvragen
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS                          -- ORD2GO naar FBs via srtkenmerk_key=103/104/105!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          fac.safe_to_number (ikd2.ins_kenmerkdeel_waarde),
          REPLACE (
             REPLACE (
                lcl.x ('fac_srtnotificatie_oms', fac_srtnotificatie_key, fac_srtnotificatie_oms),
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             p.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          mld_kenmerk mk,
          mld_srtkenmerk msk,
          fac_kenmerkdomein kd,
          prs_perslid p,
          mld_v_aanwezigkenmerkmelding mkm,
          ins_v_aanwezigkenmerkdeel ikd1,
          ins_kenmerk ik1,
          fac_usrdata ap,
          ins_v_aanwezigkenmerkdeel ikd2,
          ins_kenmerk ik2,
          fac_srtnotificatie sn
    WHERE o.mld_statusopdr_key = 10                        -- Ter goedkeuring!
          AND EXISTS
                (SELECT 1
                   FROM fac_tracking
                  WHERE fac_srtnotificatie_key = 276                 -- ORDGOE
                        AND fac_tracking_refkey = o.mld_opdr_key
                        AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE + 5 / 1440)
                        AND TO_NUMBER (TO_CHAR (fac_tracking_datum, 'HH24')) + 1 = TO_NUMBER (TO_CHAR (SYSDATE + 5 / 1440, 'HH24')))
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
               OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
          AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
          AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
          AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
          AND kd.fac_kenmerkdomein_module = 'MLD'
          AND m.prs_perslid_key = p.prs_perslid_key
          AND m.mld_melding_key = mkm.mld_melding_key
          AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd1.ins_deel_key)
          AND ikd1.ins_kenmerk_key = ik1.ins_kenmerk_key
          AND ik1.ins_srtkenmerk_key = 101                -- Autorisatieproces
          AND ikd1.ins_kenmerkdeel_waarde = TO_CHAR (ap.fac_usrdata_key)
          AND ap.fac_usrdata_code = '2'                            -- Langs FB
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd2.ins_deel_key)
          AND ikd2.ins_kenmerk_key = ik2.ins_kenmerk_key
          AND ik2.ins_srtkenmerk_key BETWEEN 103 AND 105              -- FB123
          AND sn.fac_srtnotificatie_code = 'ORD2GO'
   UNION ALL                -- ORD2GO naar KEYs via eigen tabel Org2Afkorting!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          fac.safe_to_number (ikd2.ins_kenmerkdeel_waarde),
          REPLACE (
             REPLACE (
                lcl.x ('fac_srtnotificatie_oms', fac_srtnotificatie_key, fac_srtnotificatie_oms),
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             p.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          mld_kenmerk mk,
          mld_srtkenmerk msk,
          fac_kenmerkdomein kd,
          prs_perslid p,
          prs_v_afdeling_boom ab,
          fac_usrdata oa,
          mld_v_aanwezigkenmerkmelding mkm,
          ins_v_aanwezigkenmerkdeel ikd1,
          ins_kenmerk ik1,
          fac_usrdata ap,
          ins_v_aanwezigkenmerkdeel ikd2,
          ins_kenmerk ik2,
          ins_srtkenmerk isk,
          fac_srtnotificatie sn
    WHERE o.mld_statusopdr_key = 10                        -- Ter goedkeuring!
          AND EXISTS
                (SELECT 1
                   FROM fac_tracking
                  WHERE fac_srtnotificatie_key = 276                 -- ORDGOE
                        AND fac_tracking_refkey = o.mld_opdr_key
                        AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE + 5 / 1440)
                        AND TO_NUMBER (TO_CHAR (fac_tracking_datum, 'HH24')) + 1 = TO_NUMBER (TO_CHAR (SYSDATE + 5 / 1440, 'HH24')))
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
               OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
          AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
          AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
          AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
          AND kd.fac_kenmerkdomein_module = 'MLD'
          AND m.prs_perslid_key = p.prs_perslid_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND TO_CHAR (ab.prs_afdeling_key1) = oa.fac_usrdata_code
          AND oa.fac_usrtab_key = 2                           -- Org2Afkorting
          AND m.mld_melding_key = mkm.mld_melding_key
          AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd1.ins_deel_key)
          AND ikd1.ins_kenmerk_key = ik1.ins_kenmerk_key
          AND ik1.ins_srtkenmerk_key = 101                -- Autorisatieproces
          AND ikd1.ins_kenmerkdeel_waarde = TO_CHAR (ap.fac_usrdata_key)
          AND ap.fac_usrdata_code = '3'                           -- Langs KEY
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd2.ins_deel_key)
          AND ikd2.ins_kenmerk_key = ik2.ins_kenmerk_key
          AND ik2.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
          AND isk.ins_srtkenmerk_upper LIKE '%' || UPPER (oa.fac_usrdata_omschr)
          AND sn.fac_srtnotificatie_code = 'ORD2GO'
   UNION ALL     -- Initiele notificatie ook naar (huidige) vervangers van BH!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          pv.prs_perslid_key,
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             pv.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          (  SELECT fac_tracking_refkey, MIN (fac_tracking_key) fac_tracking_key
               FROM fac_tracking
              WHERE fac_srtnotificatie_key = 166                     -- ORDFIA
                    AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE + 5 / 1440)
                    AND TO_NUMBER (TO_CHAR (fac_tracking_datum, 'HH24')) + 1 = TO_NUMBER (TO_CHAR (SYSDATE + 5 / 1440, 'HH24'))
           GROUP BY fac_tracking_refkey) t,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          prs_collega c,                                        -- Vervangers!
          prs_perslid pv,                                       -- Vervangers!
          fac_gebruikersgroep gg,
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 3                      -- Ter fiattering!
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND c.prs_perslid_key =
                CASE
                   WHEN NOT EXISTS
                           (SELECT 1
                              FROM fac_tracking
                             WHERE fac_srtnotificatie_key = 167      -- ORDFOK
                                   AND fac_tracking_refkey = o.mld_opdr_key)
                   THEN
                      prs.getkpverantwoordelijke (kp.prs_kostenplaats_key, 2, -1)
                   ELSE
                      kpg.prs_perslid_key
                END
          AND c.prs_perslid_key_alt = pv.prs_perslid_key
          AND pv.prs_perslid_key = gg.prs_perslid_key
          AND gg.fac_groep_key = 1219                -- ICT: Fiattering namens
          AND sn.fac_srtnotificatie_code = 'CUST02'
   UNION ALL                                          -- Afwijzing naar klant!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          m.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          (  SELECT fac_tracking_refkey, MAX (fac_tracking_key) fac_tracking_key
               FROM fac_tracking
              WHERE fac_srtnotificatie_key IN (168, 277)         -- ORDFNO/GNO
                    AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE + 5 / 1440)
                    AND TO_NUMBER (TO_CHAR (fac_tracking_datum, 'HH24')) + 1 = TO_NUMBER (TO_CHAR (SYSDATE + 5 / 1440, 'HH24'))
           GROUP BY fac_tracking_refkey) t,
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 2                        -- Niet akkoord!
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_status IN (4, 7)        -- Geaccepteerd/Uitgegeven
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND sn.fac_srtnotificatie_code = 'CUST06';
/* RWSN#29686: In RWSN57 verwijderen (en CUST08 opruimen?)!
   UNION ALL -- RWSN#29851: Tijdelijke CUST-noti naar klant (per 543 gewoon via MLDNEW-noti)!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          m.prs_perslid_key,
          REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
          m.mld_melding_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          fac_srtnotificatie sn
    WHERE o.mld_statusopdr_key = 10                        -- Ter goedkeuring!
          AND o.mld_opdr_kosten = 1 -- AANNAME: Status=10 en kosten=1, dan bij FBs (of KEYs)!
          AND EXISTS
                (SELECT 1
                   FROM fac_tracking
                  WHERE fac_srtnotificatie_key = 276                 -- ORDGOE
                        AND fac_tracking_refkey = o.mld_opdr_key
                        AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE + 5 / 1440)
                        AND TO_NUMBER (TO_CHAR (fac_tracking_datum, 'HH24')) + 1 = TO_NUMBER (TO_CHAR (SYSDATE + 5 / 1440, 'HH24')))
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_status IN (4, 7)        -- Geaccepteerd/Uitgegeven
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND sn.fac_srtnotificatie_code = 'CUST08';
*/

-- RWSN#29685: Uitgebreid met ook de reminders tbv. FBs/KEYs!
-- RWSN#38588: CUST07-noti ook naar oude budgethouder (van kostenplaats bij opdracht).
/* Formatted on 25-6-2014 12:06:02 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_noti_did_reminder
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
   WITH ordfia
           AS (  SELECT fac_tracking_refkey, MAX (fac_tracking_key) fac_tracking_key
                   FROM fac_tracking
                  WHERE fac_srtnotificatie_key IN (166, 276)  -- ORDFIA/ORDGOE
                        AND fac.count_work_days (fac_tracking_datum, SYSDATE) > 2
                        AND MOD (fac.count_work_days (fac_tracking_datum, SYSDATE), 2) = 1
                        AND TO_CHAR (SYSDATE, 'd') BETWEEN '2' AND '6' -- Ma t/m Vr
               GROUP BY fac_tracking_refkey)               -- Om de (werk)dag!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          pf.prs_perslid_key,                 -- Reminder naar actuele LDG/DBV
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             pf.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          ordfia t,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          prs_perslid pm,                                           -- Melder!
          prs_afdeling a,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          prs_perslid pf,                                  -- ORDFIA-fiatteur!
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 3                      -- Ter fiattering!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND m.prs_perslid_key = pm.prs_perslid_key
          AND pm.prs_afdeling_key = a.prs_afdeling_key
          AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND pf.prs_perslid_key =
                CASE
                   WHEN NOT EXISTS
                           (SELECT 1
                              FROM fac_tracking
                             WHERE fac_srtnotificatie_key = 167      -- ORDFOK
                                   AND fac_tracking_refkey = o.mld_opdr_key)
                   THEN
                      prs.getkpverantwoordelijke (a.prs_kostenplaats_key, 2, -1)
                   ELSE
                      kpg.prs_perslid_key
                END
          AND sn.fac_srtnotificatie_code = 'CUST07'
   UNION                    -- En reminder naar vervangers van actuele LDG/DBV
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          c.prs_perslid_key_alt,             -- Vervangers van actuele LDG/DBV
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             pv.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          ordfia t,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          prs_perslid pm,                                           -- Melder!
          prs_afdeling a,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          prs_perslid pf,                                  -- ORDFIA-fiatteur!
          prs_collega c,                                        -- Vervangers!
          prs_perslid pv,                                       -- Vervangers!
          fac_gebruikersgroep gg,
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 3                      -- Ter fiattering!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND m.prs_perslid_key = pm.prs_perslid_key
          AND pm.prs_afdeling_key = a.prs_afdeling_key
          AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND pf.prs_perslid_key =
                CASE
                   WHEN NOT EXISTS
                           (SELECT 1
                              FROM fac_tracking
                             WHERE fac_srtnotificatie_key = 167      -- ORDFOK
                                   AND fac_tracking_refkey = o.mld_opdr_key)
                   THEN
                      prs.getkpverantwoordelijke (a.prs_kostenplaats_key, 2, -1)
                   ELSE
                      kpg.prs_perslid_key
                END
          AND pf.prs_perslid_key = c.prs_perslid_key
          AND c.prs_perslid_key_alt = pv.prs_perslid_key
          AND pv.prs_perslid_key = gg.prs_perslid_key
          AND gg.fac_groep_key = 1219                -- ICT: Fiattering namens
          AND sn.fac_srtnotificatie_code = 'CUST07'
   UNION -- En reminder naar "oude" LDG/DBV (afdelingskostenplaats van melder anders dan opdrachtkostenplaats)
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          pf.prs_perslid_key,                                -- "Oude" LDG/DBV
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             pf.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          ordfia t,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          prs_perslid pm,                                           -- Melder!
          prs_afdeling a,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          prs_perslid pf,                                  -- ORDFIA-fiatteur!
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 3                      -- Ter fiattering!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND m.prs_perslid_key = pm.prs_perslid_key
          AND pm.prs_afdeling_key = a.prs_afdeling_key
          AND a.prs_kostenplaats_key <> o.prs_kostenplaats_key -- Afdelingskostenplaats van melder anders dan opdrachtkostenplaats!
          AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND pf.prs_perslid_key =
                CASE
                   WHEN NOT EXISTS
                           (SELECT 1
                              FROM fac_tracking
                             WHERE fac_srtnotificatie_key = 167      -- ORDFOK
                                   AND fac_tracking_refkey = o.mld_opdr_key)
                   THEN
                      prs.getkpverantwoordelijke (o.prs_kostenplaats_key, 2, -1)
                   ELSE
                      kpg.prs_perslid_key
                END
          AND sn.fac_srtnotificatie_code = 'CUST07'
   UNION -- En reminder naar vervangers van "oude" LDG/DBV (afdelingskostenplaats van melder anders dan opdrachtkostenplaats)
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          c.prs_perslid_key_alt,              -- Vervangers van "oude" LDG/DBV
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             pv.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          ordfia t,
          mld_melding m,
          mld_stdmelding sm,
          ins_tab_discipline td,
          prs_perslid pm,                                           -- Melder!
          prs_afdeling a,
          prs_kostenplaats kp,
          prs_kostenplaatsgrp kpg,
          prs_perslid pf,                                  -- ORDFIA-fiatteur!
          prs_collega c,                                        -- Vervangers!
          prs_perslid pv,                                       -- Vervangers!
          fac_gebruikersgroep gg,
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 3                      -- Ter fiattering!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          AND td.ins_srtdiscipline_key = 21                   -- ICT aanvragen
          AND td.ins_discipline_key <> 532          -- Niet standaard aanvraag
          AND m.prs_perslid_key = pm.prs_perslid_key
          AND pm.prs_afdeling_key = a.prs_afdeling_key
          AND a.prs_kostenplaats_key <> o.prs_kostenplaats_key -- Afdelingskostenplaats van melder anders dan opdrachtkostenplaats!
          AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
          AND kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
          AND pf.prs_perslid_key =
                CASE
                   WHEN NOT EXISTS
                           (SELECT 1
                              FROM fac_tracking
                             WHERE fac_srtnotificatie_key = 167      -- ORDFOK
                                   AND fac_tracking_refkey = o.mld_opdr_key)
                   THEN
                      prs.getkpverantwoordelijke (o.prs_kostenplaats_key, 2, -1)
                   ELSE
                      kpg.prs_perslid_key
                END
          AND pf.prs_perslid_key = c.prs_perslid_key
          AND c.prs_perslid_key_alt = pv.prs_perslid_key
          AND pv.prs_perslid_key = gg.prs_perslid_key
          AND gg.fac_groep_key = 1219                -- ICT: Fiattering namens
          AND sn.fac_srtnotificatie_code = 'CUST07'
   UNION       -- En reminder naar actuele FBs via srtkenmerk_key=103/104/105!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          fac.safe_to_number (ikd2.ins_kenmerkdeel_waarde),
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             p.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          ordfia t,
          mld_melding m,
          mld_stdmelding sm,
          --ins_tab_discipline td,
          mld_kenmerk mk,
          mld_srtkenmerk msk,
          fac_kenmerkdomein kd,
          prs_perslid p,
          mld_v_aanwezigkenmerkmelding mkm,
          ins_v_aanwezigkenmerkdeel ikd1,
          ins_kenmerk ik1,
          fac_usrdata ap,
          ins_v_aanwezigkenmerkdeel ikd2,
          ins_kenmerk ik2,
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 10                    -- Ter goedkeuring!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          --AND sm.mld_ins_discipline_key = td.ins_discipline_key
          --AND td.ins_srtdiscipline_key = 21                 -- ICT aanvragen
          AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
               OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
          AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
          AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
          AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
          AND kd.fac_kenmerkdomein_module = 'MLD'
          AND m.prs_perslid_key = p.prs_perslid_key
          AND m.mld_melding_key = mkm.mld_melding_key
          AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd1.ins_deel_key)
          AND ikd1.ins_kenmerk_key = ik1.ins_kenmerk_key
          AND ik1.ins_srtkenmerk_key = 101                -- Autorisatieproces
          AND ikd1.ins_kenmerkdeel_waarde = TO_CHAR (ap.fac_usrdata_key)
          AND ap.fac_usrdata_code = '2'                            -- Langs FB
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd2.ins_deel_key)
          AND ikd2.ins_kenmerk_key = ik2.ins_kenmerk_key
          AND ik2.ins_srtkenmerk_key BETWEEN 103 AND 105              -- FB123
          AND sn.fac_srtnotificatie_code = 'CUST07'
   UNION       -- En reminder naar actuele KEYs via eigen tabel Org2Afkorting!
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          fac.safe_to_number (ikd2.ins_kenmerkdeel_waarde),
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##OPDRKEY##',
                   TO_CHAR (o.mld_melding_key)
                || '/'
                || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
             '##MAILTO##',
             p.prs_perslid_email),
          o.mld_opdr_key,
          sm.mld_stdmelding_omschrijving,
          NULL,
          NULL
     FROM mld_opdr o,
          ordfia t,
          mld_melding m,
          mld_stdmelding sm,
          --ins_tab_discipline td,
          mld_kenmerk mk,
          mld_srtkenmerk msk,
          fac_kenmerkdomein kd,
          prs_perslid p,
          prs_v_afdeling_boom ab,
          fac_usrdata oa,
          mld_v_aanwezigkenmerkmelding mkm,
          ins_v_aanwezigkenmerkdeel ikd1,
          ins_kenmerk ik1,
          fac_usrdata ap,
          ins_v_aanwezigkenmerkdeel ikd2,
          ins_kenmerk ik2,
          ins_srtkenmerk isk,
          fac_srtnotificatie sn
    WHERE     o.mld_statusopdr_key = 10                    -- Ter goedkeuring!
          AND o.mld_opdr_key = t.fac_tracking_refkey
          AND o.mld_melding_key = m.mld_melding_key
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          --AND sm.mld_ins_discipline_key = td.ins_discipline_key
          --AND td.ins_srtdiscipline_key = 21                 -- ICT aanvragen
          AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
               OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
          AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
          AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
          AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
          AND kd.fac_kenmerkdomein_module = 'MLD'
          AND m.prs_perslid_key = p.prs_perslid_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND TO_CHAR (ab.prs_afdeling_key1) = oa.fac_usrdata_code
          AND oa.fac_usrtab_key = 2                           -- Org2Afkorting
          AND m.mld_melding_key = mkm.mld_melding_key
          AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd1.ins_deel_key)
          AND ikd1.ins_kenmerk_key = ik1.ins_kenmerk_key
          AND ik1.ins_srtkenmerk_key = 101                -- Autorisatieproces
          AND ikd1.ins_kenmerkdeel_waarde = TO_CHAR (ap.fac_usrdata_key)
          AND ap.fac_usrdata_code = '3'                           -- Langs KEY
          AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd2.ins_deel_key)
          AND ikd2.ins_kenmerk_key = ik2.ins_kenmerk_key
          AND ik2.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
          AND isk.ins_srtkenmerk_upper LIKE '%' || UPPER (oa.fac_usrdata_omschr)
          AND sn.fac_srtnotificatie_code = 'CUST07';

-- RWSN#27015: Voorheen rwsn_v_rap_aut_ictaanvragen!
/* Formatted on 9-11-2013 21:15:20 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_aut_ictbeheer
(
   nummer,
   datum,
   fclt_f_vakgroep,
   fclt_f_melding,
   melding_tekst,
   fclt_f_melder,
   status,
   geplande_einddatum,
   hide_f_mld_melding_key,
   hide_f_mld_opdr_key,
   fclt_3d_user_key
)
AS
   -- 1 regel per FB voor applicatie in onderdeel van melder!
   SELECT      COALESCE (sd.ins_srtdiscipline_prefix, '')
            || TO_CHAR (o.mld_melding_key)
            || '/'
            || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
               nummer,
            TO_CHAR (m.mld_melding_datum, 'dd-mm-yyyy') datum,
            DECODE (COALESCE (sd.ins_srtdiscipline_prefix, ''),
                    '', '',
                    sd.ins_srtdiscipline_prefix || '-')
            || td.ins_discipline_omschrijving
               vakgroep,
            sm.mld_stdmelding_omschrijving melding,
            o.mld_opdr_omschrijving opdracht_tekst,
            p.prs_perslid_naam
            || DECODE (NVL (p.prs_perslid_voorletters, ''),
                       '', '',
                       ', ' || p.prs_perslid_voorletters)
            || DECODE (NVL (p.prs_perslid_tussenvoegsel, ''),
                       '', '',
                       ' ' || p.prs_perslid_tussenvoegsel)
            || DECODE (NVL (p.prs_perslid_voornaam, ''),
                       '', '',
                       ' (' || p.prs_perslid_voornaam || ')')
            || DECODE (NVL (p.prs_perslid_nr, ''),
                       '', '',
                       ' [' || p.prs_perslid_nr || ']')
               melder,
            s.mld_statusopdr_omschrijving status,
            m.mld_melding_einddatum geplande_einddatum,
            o.mld_melding_key melding_key,
            o.mld_opdr_key opdracht_key,
            fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) beheerder_key
     FROM   mld_opdr o,
            mld_statusopdr s,
            mld_melding m,
            mld_stdmelding sm,
            ins_tab_discipline td,
            ins_srtdiscipline sd,
            --mld_disc_params dp,
            mld_kenmerk mk,
            mld_srtkenmerk msk,
            fac_kenmerkdomein kd,
            prs_v_aanwezigperslid p,
            mld_v_aanwezigkenmerkmelding mkm,
            ins_v_aanwezigkenmerkdeel ikd,
            ins_kenmerk ik,
            ins_v_aanwezigkenmerkdeel ikd2,
            ins_kenmerk ik2,
            fac_usrdata ud2
    WHERE       o.mld_statusopdr_key = 10                  -- Ter goedkeuring!
            AND o.mld_statusopdr_key = s.mld_statusopdr_key
            AND o.mld_melding_key = m.mld_melding_key
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = td.ins_discipline_key
            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            AND td.ins_srtdiscipline_key = 21                 -- ICT aanvragen
            AND td.ins_discipline_key <> 532        -- Niet standaard aanvraag
            --AND td.ins_discipline_key = dp.mld_ins_discipline_key
            AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
                 OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
            AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
            AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
            AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
            AND kd.fac_kenmerkdomein_module = 'MLD'
            AND m.prs_perslid_key = p.prs_perslid_key
            AND m.mld_melding_key = mkm.mld_melding_key
            AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd.ins_deel_key)
            AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
            AND ik.ins_srtkenmerk_key BETWEEN 103 AND 105             -- FB123
            AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd2.ins_deel_key)
            AND ikd2.ins_kenmerk_key = ik2.ins_kenmerk_key
            AND ik2.ins_srtkenmerk_key = 101              -- Autorisatieproces
            AND ikd2.ins_kenmerkdeel_waarde = TO_CHAR (ud2.fac_usrdata_key)
            AND ud2.fac_usrdata_code = '2'
   UNION ALL       -- 1 regel per KEY voor applicatie in onderdeel van melder!
   SELECT      COALESCE (sd.ins_srtdiscipline_prefix, '')
            || TO_CHAR (o.mld_melding_key)
            || '/'
            || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
               nummer,
            TO_CHAR (m.mld_melding_datum, 'dd-mm-yyyy') datum,
            DECODE (COALESCE (sd.ins_srtdiscipline_prefix, ''),
                    '', '',
                    sd.ins_srtdiscipline_prefix || '-')
            || td.ins_discipline_omschrijving
               vakgroep,
            sm.mld_stdmelding_omschrijving melding,
            o.mld_opdr_omschrijving opdracht_tekst,
            p.prs_perslid_naam
            || DECODE (NVL (p.prs_perslid_voorletters, ''),
                       '', '',
                       ', ' || p.prs_perslid_voorletters)
            || DECODE (NVL (p.prs_perslid_tussenvoegsel, ''),
                       '', '',
                       ' ' || p.prs_perslid_tussenvoegsel)
            || DECODE (NVL (p.prs_perslid_voornaam, ''),
                       '', '',
                       ' (' || p.prs_perslid_voornaam || ')')
            || DECODE (NVL (p.prs_perslid_nr, ''),
                       '', '',
                       ' [' || p.prs_perslid_nr || ']')
               melder,
            s.mld_statusopdr_omschrijving status,
            m.mld_melding_einddatum geplande_einddatum,
            o.mld_melding_key melding_key,
            o.mld_opdr_key opdracht_key,
            fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) beheerder_key
     FROM   mld_opdr o,
            mld_statusopdr s,
            mld_melding m,
            mld_stdmelding sm,
            ins_tab_discipline td,
            ins_srtdiscipline sd,
            --mld_disc_params dp,
            mld_kenmerk mk,
            mld_srtkenmerk msk,
            fac_kenmerkdomein kd,
            prs_v_aanwezigperslid p,
            prs_v_afdeling_boom ab,
            fac_usrdata ud,
            mld_v_aanwezigkenmerkmelding mkm,
            ins_v_aanwezigkenmerkdeel ikd,
            ins_kenmerk ik,
            ins_srtkenmerk isk,
            ins_v_aanwezigkenmerkdeel ikd2,
            ins_kenmerk ik2,
            fac_usrdata ud2
    WHERE       o.mld_statusopdr_key = 10                  -- Ter goedkeuring!
            AND o.mld_statusopdr_key = s.mld_statusopdr_key
            AND o.mld_melding_key = m.mld_melding_key
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = td.ins_discipline_key
            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            AND td.ins_srtdiscipline_key = 21                 -- ICT aanvragen
            AND td.ins_discipline_key <> 532        -- Niet standaard aanvraag
            --AND td.ins_discipline_key = dp.mld_ins_discipline_key
            AND ((sm.mld_stdmelding_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'S')
                 OR (sm.mld_ins_discipline_key = mk.mld_stdmelding_key AND mk.mld_kenmerk_niveau = 'D'))
            AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key
            AND msk.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
            AND kd.fac_kenmerkdomein_objectnaam LIKE 'RWSN_V_DID_SPIV%'
            AND kd.fac_kenmerkdomein_module = 'MLD'
            AND m.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key = ab.prs_afdeling_key
            AND TO_CHAR (ab.prs_afdeling_key1) = ud.fac_usrdata_code
            AND ud.fac_usrtab_key = 2                         -- Org2Afkorting
            AND m.mld_melding_key = mkm.mld_melding_key
            AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd.ins_deel_key)
            AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
            AND ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key
            AND isk.ins_srtkenmerk_upper LIKE '%' || UPPER (ud.fac_usrdata_omschr)
            AND mkm.mld_kenmerkmelding_waarde = TO_CHAR (ikd2.ins_deel_key)
            AND ikd2.ins_kenmerk_key = ik2.ins_kenmerk_key
            AND ik2.ins_srtkenmerk_key = 101              -- Autorisatieproces
            AND ikd2.ins_kenmerkdeel_waarde = TO_CHAR (ud2.fac_usrdata_key)
            AND ud2.fac_usrdata_code = '3';

/* Formatted on 23-7-2010 14:32:13 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_orphan_ictaanvragen
(
   nummer,
   datum,
   fclt_f_vakgroep,
   fclt_f_melding,
   melding_tekst,
   fclt_f_melder,
   status,
   geplande_einddatum,
   hide_f_mld_melding_key
)
AS
   SELECT   DECODE (COALESCE (sd.ins_srtdiscipline_prefix, ''), '', '', sd.ins_srtdiscipline_prefix)
            || TO_CHAR (m.mld_melding_key)
               nummer,
            TO_CHAR (m.mld_melding_datum, 'dd-mm-yyyy') datum,
            DECODE (COALESCE (sd.ins_srtdiscipline_prefix, ''), '', '', sd.ins_srtdiscipline_prefix || '-')
            || td.ins_discipline_omschrijving
               vakgroep,
            sm.mld_stdmelding_omschrijving melding,
            rwsn_did_flexcontent (m.mld_melding_key, 999, NULL) melding_tekst,
               p.prs_perslid_naam
            || DECODE (NVL (p.prs_perslid_voorletters, ''), '', '', ', ' || p.prs_perslid_voorletters)
            || DECODE (NVL (p.prs_perslid_tussenvoegsel, ''), '', '', ' ' || p.prs_perslid_tussenvoegsel)
            || DECODE (NVL (p.prs_perslid_voornaam, ''), '', '', ' (' || p.prs_perslid_voornaam || ')')
            || DECODE (NVL (p.prs_perslid_nr, ''), '', '', ' [' || p.prs_perslid_nr || ']')
               melder,
            s.mld_statuses_omschrijving status,
            m.mld_melding_einddatum geplande_einddatum,
            m.mld_melding_key mld_key
     FROM   mld_melding m,
            mld_statuses s,
            mld_stdmelding sm,
            ins_tab_discipline td,
            ins_srtdiscipline sd,
            prs_v_aanwezigperslid p
    WHERE       m.mld_melding_status IN (2, 3)                                                         -- Te behandelen!
            AND m.mld_melding_status = s.mld_statuses_key
            AND m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND COALESCE (sm.mld_stdmelding_t_accepttijd.tijdsduur, 0) > 0
            AND sm.mld_ins_discipline_key = td.ins_discipline_key
            AND td.ins_srtdiscipline_key = 21                                                           -- ICT aanvragen
            AND td.ins_discipline_key <> 532                                                  -- Niet standaard aanvraag
            AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
            AND m.prs_perslid_key = p.prs_perslid_key
            AND p.prs_afdeling_key NOT IN (SELECT   cp.afd_key
                                             FROM   rwsn_v_ictcp_per_afd cp)
            AND NOT EXISTS
                  (SELECT   1
                     FROM   fac_gebruikersgroep gg
                    WHERE   gg.fac_groep_key IN (421, 422)                                                    -- ICT cp.
                            AND gg.prs_perslid_key = fac.gettrackinguserkey ('MLDNEW', m.mld_melding_key));

/* Formatted on 18-10-2010 13:54:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW RWSN_V_RAP_ICTCP_OVERZICHT
(
   FCLT_F_DIENST,
   FCLT_F_AFDELING_CODE,
   FCLT_F_AFDELING_OMSCHRIJVING,
   FCLT_F_NIVO,
   FCLT_F_DIRECT,
   FCLT_F_NAAM,
   EMAIL,
   FCLT_F_ROL
)
AS
   SELECT   COALESCE (b.dienst, '-'),
            COALESCE (b.afd_naam, '-'),
            COALESCE (b.afd_oms, '-'),
            COALESCE (TO_CHAR (b.nivo), '-'),
            COALESCE (b.direct, '-'),
            DECODE (a.prs_perslid_key, NULL, b.naam_full, a.naam_full)
               naam_full,
            DECODE (a.prs_perslid_key, NULL, b.email, a.email) email,
            DECODE (a.prs_perslid_key, NULL, 'Nee', 'Ja') rol
     FROM      (SELECT   p.prs_perslid_key,
                         p.prs_perslid_naam
                         || DECODE (p.prs_perslid_voorletters,
                                    NULL, '',
                                    ', ' || p.prs_perslid_voorletters)
                         || DECODE (p.prs_perslid_tussenvoegsel,
                                    NULL, '',
                                    ' ' || p.prs_perslid_tussenvoegsel)
                         || DECODE (p.prs_perslid_voornaam,
                                    NULL, '',
                                    ' (' || p.prs_perslid_voornaam || ')')
                            naam_full,
                         p.prs_perslid_email email,
                         a.prs_afdeling_omschrijving dienst
                  FROM   prs_v_aanwezigperslid p,
                         prs_v_afdeling_familie af,
                         prs_v_aanwezigafdeling a,
                         fac_gebruikersgroep gg
                 WHERE       p.prs_afdeling_key = af.prs_afdeling_key
                         AND af.niveau = 1
                         AND af.prs_afdeling_elder_key = a.prs_afdeling_key
                         AND p.prs_perslid_key = gg.prs_perslid_key
                         AND gg.fac_groep_key IN (421, 422)) a      -- ICT cp.
            FULL JOIN
               (SELECT   cp.prs_key,
                         p.prs_perslid_naam
                         || DECODE (p.prs_perslid_voorletters,
                                    NULL, '',
                                    ', ' || p.prs_perslid_voorletters)
                         || DECODE (p.prs_perslid_tussenvoegsel,
                                    NULL, '',
                                    ' ' || p.prs_perslid_tussenvoegsel)
                         || DECODE (p.prs_perslid_voornaam,
                                    NULL, '',
                                    ' (' || p.prs_perslid_voornaam || ')')
                            naam_full,
                         p.prs_perslid_email email,
                         a1.prs_afdeling_omschrijving dienst,
                         a2.prs_afdeling_naam afd_naam,
                         a2.prs_afdeling_omschrijving afd_oms,
                         af2.niveau nivo,
                         cp.direct
                  FROM   rwsn_v_ictcp_per_afd cp,
                         prs_v_aanwezigperslid p,
                         prs_v_afdeling_familie af1,
                         prs_afdeling a1,
                         prs_v_afdeling_familie af2,
                         prs_afdeling a2
                 WHERE       cp.prs_key = p.prs_perslid_key
                         AND cp.afd_key = af1.prs_afdeling_key
                         AND af1.niveau = 1
                         AND af1.prs_afdeling_elder_key = a1.prs_afdeling_key
                         AND cp.afd_key = af2.prs_afdeling_key
                         AND af2.prs_afdeling_key =
                               af2.prs_afdeling_elder_key
                         AND af2.prs_afdeling_elder_key = a2.prs_afdeling_key)
               b
            ON a.prs_perslid_key = b.prs_key;

/* Formatted on 25-7-2011 17:04:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_did_mi_ordafm
(
   fclt_f_maand,
   fclt_f_dienst,
   nummer,
   aanmaak,
   fclt_f_status,
   fclt_f_vakgroep,
   fclt_f_melding,
   organisatie,
   naam,
   fclt_f_applicatie,
   fclt_f_hardware,
   doorloop_icp,
   doorloop_dbv,
   doorloop_klant,
   doorloop_aanvr,
   doorloop_did
)
AS
   SELECT   DECODE (
               opdr.status_key,
               NULL,
               DECODE (meld.status_key,
                       1, TO_CHAR (meld.mldrej_date, 'yyyy-mm'),
                       5, TO_CHAR (meld.mldafm_date, 'yyyy-mm'),
                       6, TO_CHAR (meld.mldafm_date, 'yyyy-mm'),
                       'Lopend'),
               1,
               TO_CHAR (
                  COALESCE (ordfno.fac_tracking_datum, opdr.ordcan_date),
                  'yyyy-mm'
               ),
               2,
               TO_CHAR (ordfno.fac_tracking_datum, 'yyyy-mm'),
               6,
               TO_CHAR (opdr.ordafm_date, 'yyyy-mm'),
               7,
               TO_CHAR (opdr.ordafm_date, 'yyyy-mm'),
               'Lopend'
            )
               maand,
            meld.dienst,
            meld.mld_key
            || DECODE (opdr.volgnr, NULL, NULL, '/' || opdr.volgnr),
            TO_CHAR (meld.mldnew_date, 'dd-mm-yyyy hh24:mi'),
            DECODE (opdr.status_key,
                    NULL, (SELECT   mld_statuses_omschrijving
                             FROM   mld_statuses
                            WHERE   mld_statuses_key = meld.status_key),
                    1, 'Geannuleerd',
                    2, 'Afgewezen',
                    (SELECT   mld_statusopdr_omschrijving
                       FROM   mld_statusopdr
                      WHERE   mld_statusopdr_key = opdr.status_key)),
            meld.vakgroep,
            COALESCE (opdr.melding, meld.melding),
            meld.organisatie,
            meld.naam,
            applicatie.oms,
            hardware.oms,
            DECODE (
               COALESCE (meld.mldacp_date, meld.mldrej_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (meld.mldacp_date, meld.mldrej_date)
                             - meld.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (meld.mldacp_date,
                                               meld.mldrej_date)
                                     - meld.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (meld.mldacp_date,
                                           meld.mldrej_date)
                                 - meld.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_icp,
            DECODE (
               COALESCE (ordfok.fac_tracking_datum,
                         ordfno.fac_tracking_datum),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (ordfok.fac_tracking_datum,
                                       ordfno.fac_tracking_datum)
                             - ordfia.fac_tracking_datum))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (ordfok.fac_tracking_datum,
                                               ordfno.fac_tracking_datum)
                                     - ordfia.fac_tracking_datum)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (ordfok.fac_tracking_datum,
                                           ordfno.fac_tracking_datum)
                                 - ordfia.fac_tracking_datum)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_dbv,
            DECODE (
               COALESCE (meld.mldrej_date,
                         ordfno.fac_tracking_datum,
                         opdr.verzonden),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (meld.mldrej_date,
                                       ordfno.fac_tracking_datum,
                                       opdr.verzonden)
                             - meld.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (meld.mldrej_date,
                                               ordfno.fac_tracking_datum,
                                               opdr.verzonden)
                                     - meld.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (meld.mldrej_date,
                                           ordfno.fac_tracking_datum,
                                           opdr.verzonden)
                                 - meld.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_klant,
            DECODE (
               COALESCE (meld.mldrej_date,
                         ordfno.fac_tracking_datum,
                         opdr.ordafm_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (meld.mldrej_date,
                                       ordfno.fac_tracking_datum,
                                       opdr.ordafm_date)
                             - meld.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (meld.mldrej_date,
                                               ordfno.fac_tracking_datum,
                                               opdr.ordafm_date)
                                     - meld.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (meld.mldrej_date,
                                           ordfno.fac_tracking_datum,
                                           opdr.ordafm_date)
                                 - meld.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_aanvr,
            DECODE (
               COALESCE (opdr.ordcan_date, opdr.ordafm_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (opdr.ordcan_date, opdr.ordafm_date)
                             - opdr.verzonden))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (opdr.ordcan_date,
                                               opdr.ordafm_date)
                                     - opdr.verzonden)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (opdr.ordcan_date,
                                           opdr.ordafm_date)
                                 - opdr.verzonden)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_did
     FROM                        (SELECT   m.mld_key,
                                           m.vakgroep_oms vakgroep,
                                           m.stdmld_key,
                                           m.stdmld_oms melding,
                                           m.mld_sla norm_sla,
                                           m.mld_status_key status_key,
                                           m.mld_plan_date plandatum,
                                           pf.prs_perslid_naam_full naam,
                                           org.prs_afdeling_omschrijving
                                              organisatie,
                                           dienst.prs_afdeling_omschrijving
                                              dienst,
                                           m.mldnew_date,
                                           m.mldacp_date,
                                           m.mldrej_date,
                                           m.mldafm_date
                                    FROM   rwsn_mld_freeze m,
                                           prs_perslid p,
                                           prs_v_perslid_fullnames_all pf,
                                           prs_afdeling org,
                                           prs_v_afdeling_boom ab,
                                           prs_afdeling dienst
                                   WHERE   m.vakgroeptype_key = 21
                                           AND m.melder_userkey =
                                                 p.prs_perslid_key
                                           AND p.prs_perslid_key =
                                                 pf.prs_perslid_key
                                           AND p.prs_afdeling_key =
                                                 org.prs_afdeling_key
                                           AND p.prs_afdeling_key =
                                                 ab.prs_afdeling_key
                                           AND ab.prs_afdeling_key1 =
                                                 dienst.prs_afdeling_key)
                                 meld
                              LEFT JOIN
                                 (SELECT   o.mld_key,
                                           o.opdr_key,
                                           o.opdr_volgnr volgnr,
                                           o.opdr_status_key status_key,
                                           b.prs_bedrijf_naam bedrijf,
                                           SUBSTR (o.opdr_oms,
                                                   1,
                                                   INSTR (o.opdr_oms,
                                                          CHR (13),
                                                          1,
                                                          1)
                                                   - 1)
                                              melding,
                                           o.ord_verz_date verzonden,
                                           o.ordnew_date,
                                           o.ord_fiat_date,
                                           o.ordcan_date,
                                           o.ordafm_date
                                    FROM   rwsn_opdr_freeze o, prs_bedrijf b
                                   WHERE   o.opdr_uv_key = b.prs_bedrijf_key)
                                 opdr
                              ON meld.mld_key = opdr.mld_key
                           LEFT JOIN
                              fac_tracking ordfia
                           ON opdr.opdr_key = ordfia.fac_tracking_refkey
                              AND ordfia.fac_srtnotificatie_key = 166
                        LEFT JOIN
                           fac_tracking ordfok
                        ON opdr.opdr_key = ordfok.fac_tracking_refkey
                           AND ordfok.fac_srtnotificatie_key = 167
                     LEFT JOIN
                        fac_tracking ordfno
                     ON opdr.opdr_key = ordfno.fac_tracking_refkey
                        AND ordfno.fac_srtnotificatie_key = 168
                  LEFT JOIN
                     (SELECT   km.mld_melding_key, ud.fac_usrdata_omschr oms
                        FROM   mld_srtkenmerk sk,
                               mld_kenmerk k,
                               mld_kenmerkmelding km,
                               fac_usrdata ud
                       WHERE   UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                                  '%APPLICATIE%'
                               AND sk.mld_srtkenmerk_kenmerktype IN
                                        ('R', 'S')
                               AND sk.fac_kenmerkdomein_key != 1     -- Ja/Nee
                               AND sk.mld_srtkenmerk_verwijder IS NULL
                               AND sk.mld_srtkenmerk_key =
                                     k.mld_srtkenmerk_key
                               AND k.mld_kenmerk_verwijder IS NULL
                               AND k.mld_kenmerk_key = km.mld_kenmerk_key
                               AND km.mld_kenmerkmelding_verwijder IS NULL
                               AND fac.safe_to_number (
                                     km.mld_kenmerkmelding_waarde
                                  ) = ud.fac_usrdata_key) applicatie
                  ON meld.mld_key = applicatie.mld_melding_key
               LEFT JOIN
                  (SELECT   k.mld_stdmelding_key stdmld_key,
                            COALESCE (k.mld_kenmerk_volgnummer, 0) volgnr,
                            k.mld_kenmerk_default melding
                     FROM   mld_kenmerk k, mld_srtkenmerk sk
                    WHERE       k.mld_kenmerk_niveau = 'S'
                            AND k.mld_kenmerk_verwijder IS NULL
                            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                            AND sk.mld_srtkenmerk_kenmerktype = 'L'
                            AND sk.mld_srtkenmerk_upper LIKE '%DEEL%'
                            AND sk.mld_srtkenmerk_verwijder IS NULL)
                  onderdeel
               ON meld.stdmld_key = onderdeel.stdmld_key
                  AND opdr.melding = onderdeel.melding
            LEFT JOIN
               (SELECT   km.mld_melding_key,
                         COALESCE (k.mld_kenmerk_volgnummer, 0) volgnr,
                         ud.fac_usrdata_omschr oms
                  FROM   mld_srtkenmerk sk,
                         mld_kenmerk k,
                         mld_kenmerkmelding km,
                         fac_usrdata ud
                 WHERE   (UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                             '%APPARATUUR%'
                          OR UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                               '%PRODUCTKEUZE%'
                          OR UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                               '%WERKPLEK%')
                         AND sk.mld_srtkenmerk_kenmerktype IN ('R', 'S')
                         AND sk.fac_kenmerkdomein_key != 1           -- Ja/Nee
                         AND sk.mld_srtkenmerk_verwijder IS NULL
                         AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                         AND k.mld_kenmerk_verwijder IS NULL
                         AND k.mld_kenmerk_key = km.mld_kenmerk_key
                         AND km.mld_kenmerkmelding_verwijder IS NULL
                         AND fac.safe_to_number (
                               km.mld_kenmerkmelding_waarde
                            ) = ud.fac_usrdata_key) hardware
            ON meld.mld_key = hardware.mld_melding_key
               AND (onderdeel.volgnr IS NULL
                    OR hardware.volgnr BETWEEN onderdeel.volgnr
                                           AND  onderdeel.volgnr + 10)
    WHERE      onderdeel.volgnr IS NULL           -- Enkelvoudige ICT Aanvraag
            OR opdr.mld_key IS NOT NULL                -- Opdracht bij melding
            OR hardware.oms IS NOT NULL          -- ICT Aanvraag voor hardware
/

/* Formatted on 25-7-2011 17:04:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_did_mi_ordnew
(
   fclt_f_maand,
   fclt_f_dienst,
   nummer,
   aanmaak,
   fclt_f_status,
   fclt_f_vakgroep,
   fclt_f_melding,
   organisatie,
   naam,
   fclt_f_applicatie,
   fclt_f_hardware,
   doorloop_icp,
   doorloop_dbv,
   doorloop_klant,
   doorloop_aanvr,
   doorloop_did
)
AS
   SELECT   TO_CHAR (meld.mldnew_date, 'yyyy-mm') maand,
            meld.dienst,
            meld.mld_key
            || DECODE (opdr.volgnr, NULL, NULL, '/' || opdr.volgnr),
            TO_CHAR (meld.mldnew_date, 'dd-mm-yyyy hh24:mi'),
            DECODE (opdr.status_key,
                    NULL, (SELECT   mld_statuses_omschrijving
                             FROM   mld_statuses
                            WHERE   mld_statuses_key = meld.status_key),
                    1, 'Geannuleerd',
                    2, 'Afgewezen',
                    (SELECT   mld_statusopdr_omschrijving
                       FROM   mld_statusopdr
                      WHERE   mld_statusopdr_key = opdr.status_key)),
            meld.vakgroep,
            COALESCE (opdr.melding, meld.melding),
            meld.organisatie,
            meld.naam,
            applicatie.oms,
            hardware.oms,
            DECODE (
               COALESCE (meld.mldacp_date, meld.mldrej_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (meld.mldacp_date, meld.mldrej_date)
                             - meld.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (meld.mldacp_date,
                                               meld.mldrej_date)
                                     - meld.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (meld.mldacp_date,
                                           meld.mldrej_date)
                                 - meld.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_icp,
            DECODE (
               COALESCE (ordfok.fac_tracking_datum,
                         ordfno.fac_tracking_datum),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (ordfok.fac_tracking_datum,
                                       ordfno.fac_tracking_datum)
                             - ordfia.fac_tracking_datum))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (ordfok.fac_tracking_datum,
                                               ordfno.fac_tracking_datum)
                                     - ordfia.fac_tracking_datum)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (ordfok.fac_tracking_datum,
                                           ordfno.fac_tracking_datum)
                                 - ordfia.fac_tracking_datum)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_dbv,
            DECODE (
               COALESCE (meld.mldrej_date,
                         ordfno.fac_tracking_datum,
                         opdr.verzonden),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (meld.mldrej_date,
                                       ordfno.fac_tracking_datum,
                                       opdr.verzonden)
                             - meld.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (meld.mldrej_date,
                                               ordfno.fac_tracking_datum,
                                               opdr.verzonden)
                                     - meld.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (meld.mldrej_date,
                                           ordfno.fac_tracking_datum,
                                           opdr.verzonden)
                                 - meld.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_klant,
            DECODE (
               COALESCE (meld.mldrej_date,
                         ordfno.fac_tracking_datum,
                         opdr.ordafm_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (meld.mldrej_date,
                                       ordfno.fac_tracking_datum,
                                       opdr.ordafm_date)
                             - meld.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (meld.mldrej_date,
                                               ordfno.fac_tracking_datum,
                                               opdr.ordafm_date)
                                     - meld.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (meld.mldrej_date,
                                           ordfno.fac_tracking_datum,
                                           opdr.ordafm_date)
                                 - meld.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_aanvr,
            DECODE (
               COALESCE (opdr.ordcan_date, opdr.ordafm_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (opdr.ordcan_date, opdr.ordafm_date)
                             - opdr.verzonden))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (opdr.ordcan_date,
                                               opdr.ordafm_date)
                                     - opdr.verzonden)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (opdr.ordcan_date,
                                           opdr.ordafm_date)
                                 - opdr.verzonden)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               doorloop_did
     FROM                        (SELECT   m.mld_key,
                                           m.vakgroep_oms vakgroep,
                                           m.stdmld_key,
                                           m.stdmld_oms melding,
                                           m.mld_sla norm_sla,
                                           m.mld_status_key status_key,
                                           m.mld_plan_date plandatum,
                                           pf.prs_perslid_naam_full naam,
                                           org.prs_afdeling_omschrijving
                                              organisatie,
                                           dienst.prs_afdeling_omschrijving
                                              dienst,
                                           m.mldnew_date,
                                           m.mldacp_date,
                                           m.mldrej_date,
                                           m.mldafm_date
                                    FROM   rwsn_mld_freeze m,
                                           prs_perslid p,
                                           prs_v_perslid_fullnames_all pf,
                                           prs_afdeling org,
                                           prs_v_afdeling_boom ab,
                                           prs_afdeling dienst
                                   WHERE   m.vakgroeptype_key = 21
                                           AND m.melder_userkey =
                                                 p.prs_perslid_key
                                           AND p.prs_perslid_key =
                                                 pf.prs_perslid_key
                                           AND p.prs_afdeling_key =
                                                 org.prs_afdeling_key
                                           AND p.prs_afdeling_key =
                                                 ab.prs_afdeling_key
                                           AND ab.prs_afdeling_key1 =
                                                 dienst.prs_afdeling_key)
                                 meld
                              LEFT JOIN
                                 (SELECT   o.mld_key,
                                           o.opdr_key,
                                           o.opdr_volgnr volgnr,
                                           o.opdr_status_key status_key,
                                           b.prs_bedrijf_naam bedrijf,
                                           SUBSTR (o.opdr_oms,
                                                   1,
                                                   INSTR (o.opdr_oms,
                                                          CHR (13),
                                                          1,
                                                          1)
                                                   - 1)
                                              melding,
                                           o.ord_verz_date verzonden,
                                           o.ordnew_date,
                                           o.ord_fiat_date,
                                           o.ordcan_date,
                                           o.ordafm_date
                                    FROM   rwsn_opdr_freeze o, prs_bedrijf b
                                   WHERE   o.opdr_uv_key = b.prs_bedrijf_key)
                                 opdr
                              ON meld.mld_key = opdr.mld_key
                           LEFT JOIN
                              fac_tracking ordfia
                           ON opdr.opdr_key = ordfia.fac_tracking_refkey
                              AND ordfia.fac_srtnotificatie_key = 166
                        LEFT JOIN
                           fac_tracking ordfok
                        ON opdr.opdr_key = ordfok.fac_tracking_refkey
                           AND ordfok.fac_srtnotificatie_key = 167
                     LEFT JOIN
                        fac_tracking ordfno
                     ON opdr.opdr_key = ordfno.fac_tracking_refkey
                        AND ordfno.fac_srtnotificatie_key = 168
                  LEFT JOIN
                     (SELECT   km.mld_melding_key, ud.fac_usrdata_omschr oms
                        FROM   mld_srtkenmerk sk,
                               mld_kenmerk k,
                               mld_kenmerkmelding km,
                               fac_usrdata ud
                       WHERE   UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                                  '%APPLICATIE%'
                               AND sk.mld_srtkenmerk_kenmerktype IN
                                        ('R', 'S')
                               AND sk.fac_kenmerkdomein_key != 1     -- Ja/Nee
                               AND sk.mld_srtkenmerk_verwijder IS NULL
                               AND sk.mld_srtkenmerk_key =
                                     k.mld_srtkenmerk_key
                               AND k.mld_kenmerk_verwijder IS NULL
                               AND k.mld_kenmerk_key = km.mld_kenmerk_key
                               AND km.mld_kenmerkmelding_verwijder IS NULL
                               AND fac.safe_to_number (
                                     km.mld_kenmerkmelding_waarde
                                  ) = ud.fac_usrdata_key) applicatie
                  ON meld.mld_key = applicatie.mld_melding_key
               LEFT JOIN
                  (SELECT   k.mld_stdmelding_key stdmld_key,
                            COALESCE (k.mld_kenmerk_volgnummer, 0) volgnr,
                            k.mld_kenmerk_default melding
                     FROM   mld_kenmerk k, mld_srtkenmerk sk
                    WHERE       k.mld_kenmerk_niveau = 'S'
                            AND k.mld_kenmerk_verwijder IS NULL
                            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                            AND sk.mld_srtkenmerk_kenmerktype = 'L'
                            AND sk.mld_srtkenmerk_upper LIKE '%DEEL%'
                            AND sk.mld_srtkenmerk_verwijder IS NULL)
                  onderdeel
               ON meld.stdmld_key = onderdeel.stdmld_key
                  AND opdr.melding = onderdeel.melding
            LEFT JOIN
               (SELECT   km.mld_melding_key,
                         COALESCE (k.mld_kenmerk_volgnummer, 0) volgnr,
                         ud.fac_usrdata_omschr oms
                  FROM   mld_srtkenmerk sk,
                         mld_kenmerk k,
                         mld_kenmerkmelding km,
                         fac_usrdata ud
                 WHERE   (UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                             '%APPARATUUR%'
                          OR UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                               '%PRODUCTKEUZE%'
                          OR UPPER (sk.mld_srtkenmerk_omschrijving) LIKE
                               '%WERKPLEK%')
                         AND sk.mld_srtkenmerk_kenmerktype IN ('R', 'S')
                         AND sk.fac_kenmerkdomein_key != 1           -- Ja/Nee
                         AND sk.mld_srtkenmerk_verwijder IS NULL
                         AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                         AND k.mld_kenmerk_verwijder IS NULL
                         AND k.mld_kenmerk_key = km.mld_kenmerk_key
                         AND km.mld_kenmerkmelding_verwijder IS NULL
                         AND fac.safe_to_number (
                               km.mld_kenmerkmelding_waarde
                            ) = ud.fac_usrdata_key) hardware
            ON meld.mld_key = hardware.mld_melding_key
               AND (onderdeel.volgnr IS NULL
                    OR hardware.volgnr BETWEEN onderdeel.volgnr
                                           AND  onderdeel.volgnr + 10)
    WHERE      onderdeel.volgnr IS NULL           -- Enkelvoudige ICT Aanvraag
            OR opdr.mld_key IS NOT NULL                -- Opdracht bij melding
            OR hardware.oms IS NOT NULL          -- ICT Aanvraag voor hardware
/

-- RWSN#27943 - Via product/dienst in eigen tabel naar alle contactpersonen in
--              autorisatiegroep en daarvan de contactgegevens!
/* Formatted on 31-10-2013 17:16:08 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_civ_specials
(
   fclt_f_product,
   contactpersoon,
   telefoon,
   email
)
AS
   SELECT   ud.fac_usrdata_code,
            pf.prs_perslid_naam_full,
            COALESCE (p.prs_perslid_telefoonnr, p.prs_perslid_mobiel),
            p.prs_perslid_email
     FROM   fac_usrdata ud,
            fac_gebruikersgroep gg,
            prs_perslid p,
            prs_v_perslid_fullnames_all pf
    WHERE       ud.fac_usrtab_key = 2302                       -- CIV-specials
            AND fac.safe_to_number (ud.fac_usrdata_omschr) = gg.fac_groep_key
            AND gg.prs_perslid_key = p.prs_perslid_key
            AND p.prs_perslid_key = pf.prs_perslid_key;

-- RWSN#29240 - Per applicaties van elke FB123 de contactgegevens!
/* Formatted on 18-4-2014 13:08:32 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_fb_spiv_appl
(
   fclt_f_spiv_domein,
   applicatiecode,
   fclt_f_applicatienaam,
   contactpersoon,
   telefoon,
   email
)
AS
   SELECT sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_code,
          sd.ins_srtdeel_omschrijving,
          pf.prs_perslid_naam_full,
          COALESCE (p.prs_perslid_telefoonnr, p.prs_perslid_mobiel),
          p.prs_perslid_email
     FROM ins_srtgroep sg,
          ins_srtdeel sd,
          ins_v_aanwezigkenmerkdeel ikd,
          ins_kenmerk ik,
          prs_perslid p,
          prs_v_perslid_fullnames_all pf
    WHERE     sg.ins_discipline_key = 2361
          AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
          AND sd.ins_srtdeel_key = ikd.ins_deel_key
          AND ikd.ins_kenmerk_key = ik.ins_kenmerk_key
          AND ik.ins_srtkenmerk_key BETWEEN 103 AND 105               -- FB123
          AND fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) =
                p.prs_perslid_key
          AND p.prs_perslid_key = pf.prs_perslid_key;

-- RWSN#33690 - Objectsoorten-rapportage!
/* Formatted on 11-11-2015 14:32:28 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_appl_geg
(
   fclt_f_spiv_domein,
   applicatiecode,
   fclt_f_applicatienaam,
   autorisatieproces,
   fb1_mail,
   fb2_mail,
   fb3_mail,
   fclt_f_webbased,
   vervaldatum
)
AS
   SELECT x.ins_srtgroep_omschrijving,
          x.ins_srtdeel_code,
          x.ins_srtdeel_omschrijving,
          aut.fac_usrdata_omschr autproc,
          fb1.prs_perslid_email,
          fb2.prs_perslid_email,
          fb3.prs_perslid_email,
          web.fac_usrdata_omschr webbased,
          x.ins_srtdeel_vervaldatum
     FROM (SELECT sd.ins_srtdeel_key,
                  sg.ins_srtgroep_omschrijving,
                  sd.ins_srtdeel_code,
                  sd.ins_srtdeel_omschrijving,
                  sd.ins_srtdeel_vervaldatum
             FROM ins_srtgroep sg, ins_srtdeel sd
            WHERE sg.ins_discipline_key = 2361  -- Geconsolideerde applicaties
                  AND sg.ins_srtgroep_key = sd.ins_srtgroep_key) x
          LEFT JOIN (SELECT ikd.ins_deel_key, ud.fac_usrdata_omschr
                       FROM ins_v_aanwezigkenmerkdeel ikd, ins_kenmerk ik, fac_usrdata ud
                      WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                            AND ik.ins_srtkenmerk_key = 101 -- Autorisatieproces
                            AND fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) = ud.fac_usrdata_key) aut
             ON x.ins_srtdeel_key = aut.ins_deel_key
          LEFT JOIN (SELECT ikd.ins_deel_key, ud.fac_usrdata_omschr
                       FROM ins_v_aanwezigkenmerkdeel ikd, ins_kenmerk ik, fac_usrdata ud
                      WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                            AND ik.ins_srtkenmerk_key = 102        -- Webbased
                            AND fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) = ud.fac_usrdata_key) web
             ON x.ins_srtdeel_key = web.ins_deel_key
          LEFT JOIN (SELECT ikd.ins_deel_key, p.prs_perslid_email
                       FROM ins_v_aanwezigkenmerkdeel ikd, ins_kenmerk ik, prs_perslid p
                      WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                            AND ik.ins_srtkenmerk_key = 103             -- FB1
                            AND fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) = p.prs_perslid_key) fb1
             ON x.ins_srtdeel_key = fb1.ins_deel_key
          LEFT JOIN (SELECT ikd.ins_deel_key, p.prs_perslid_email
                       FROM ins_v_aanwezigkenmerkdeel ikd, ins_kenmerk ik, prs_perslid p
                      WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                            AND ik.ins_srtkenmerk_key = 104             -- FB2
                            AND fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) = p.prs_perslid_key) fb2
             ON x.ins_srtdeel_key = fb2.ins_deel_key
          LEFT JOIN (SELECT ikd.ins_deel_key, p.prs_perslid_email
                       FROM ins_v_aanwezigkenmerkdeel ikd, ins_kenmerk ik, prs_perslid p
                      WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key
                            AND ik.ins_srtkenmerk_key = 105             -- FB3
                            AND fac.safe_to_number (ikd.ins_kenmerkdeel_waarde) = p.prs_perslid_key) fb3
             ON x.ins_srtdeel_key = fb3.ins_deel_key;


-- Import van partners uit het IKD
CREATE OR REPLACE PROCEDURE rwsn_import_partners (
   p_import_key IN NUMBER
)
AS
   c_delim           VARCHAR2 (1) := ';';
   v_newline         VARCHAR2 (4000);                            -- Input line
   v_errormsg        VARCHAR2 (1000);
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
   header_is_valid   NUMBER;
   v_count_tot       NUMBER (10);
   v_count_import    NUMBER (10);
   v_ongeldig        NUMBER (1);
   v_aanduiding      VARCHAR2 (200);
   -- De importvelden
   v_contractant        VARCHAR2 (255);
   v_naam               VARCHAR2 (255);
   v_adres              VARCHAR2 (255);
   v_postc              VARCHAR2 (255);
   v_plaats             VARCHAR2 (255);
   v_land               VARCHAR2 (255);
   v_postbus            VARCHAR2 (255);
   v_pb_postc           VARCHAR2 (255);
   v_pb_plaats          VARCHAR2 (255);
   v_pb_land            VARCHAR2 (255);
   v_telefoon           VARCHAR2 (255);
   v_fax                VARCHAR2 (255);

   -- Overige velden:
   CURSOR c1
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM rwsn_imp_partners;
   COMMIT;

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden

         fac.imp_getfield (v_newline, c_delim, v_contractant);
         fac.imp_getfield (v_newline, c_delim, v_naam);
         fac.imp_getfield (v_newline, c_delim, v_adres);
         fac.imp_getfield (v_newline, c_delim, v_postc);
         fac.imp_getfield (v_newline, c_delim, v_plaats);
         fac.imp_getfield (v_newline, c_delim, v_land);
         fac.imp_getfield (v_newline, c_delim, v_postbus);
         fac.imp_getfield (v_newline, c_delim, v_pb_postc);
         fac.imp_getfield (v_newline, c_delim, v_pb_plaats);
         fac.imp_getfield (v_newline, c_delim, v_pb_land);
         fac.imp_getfield (v_newline, c_delim, v_telefoon);
         fac.imp_getfield (v_newline, c_delim, v_fax);
         v_aanduiding := '[' || v_contractant || '|' || v_naam || '] ';

         v_count_tot := v_count_tot + 1;
         -- Controleer alle veldwaarden
         v_errormsg    := 'Fout inlezen contractant';
         v_contractant := SUBSTR(TRIM (v_contractant),1,50);
         --
         v_errormsg    := 'Fout inlezen naam';
         v_naam        := SUBSTR(TRIM (v_naam),1,60);
         --
         v_errormsg    := 'Fout inlezen adres';
         v_adres       := SUBSTR(TRIM (v_adres),1,35);
         --
         v_errormsg    := 'Fout inlezen postc';
         v_postc       := SUBSTR(TRIM (v_postc),1,12);
         --
         v_errormsg    := 'Fout inlezen plaats';
         v_plaats      := SUBSTR(TRIM (v_plaats),1,30);
         --
         v_errormsg    := 'Fout inlezen land';
         v_land        := SUBSTR(TRIM (v_land),1,30);
         --
         v_errormsg    := 'Fout inlezen postbus';
         v_postbus     := SUBSTR(TRIM (v_postbus),1,35);
         --
         v_errormsg    := 'Fout inlezen pb_postc';
         v_pb_postc    := SUBSTR(TRIM (v_pb_postc),1,12);
         --
         v_errormsg    := 'Fout inlezen pb_plaats';
         v_pb_plaats   := SUBSTR(TRIM (v_pb_plaats),1,30);
         --
         v_errormsg    := 'Fout inlezen pb_land';
         v_pb_land     := SUBSTR(TRIM (v_pb_land),1,30);
         --
         v_errormsg    := 'Fout inlezen telefoon';
         v_telefoon    := SUBSTR(TRIM (v_telefoon),1,20);
         --
         v_errormsg    := 'Fout inlezen fax';
         v_fax         := SUBSTR(TRIM (v_fax),1,20);

         v_ongeldig := 0;

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

            INSERT INTO rwsn_imp_partners
                    ( contractant,
                      naam,
                      adres,
                      postc,
                      plaats,
                      land,
                      postbus,
                      pb_postc,
                      pb_plaats,
                      pb_land,
                      telefoon,
                      fax)
                   VALUES
                    ( v_contractant,
                      v_naam,
                      v_adres,
                      v_postc,
                      v_plaats,
                      v_land,
                      v_postbus,
                      v_pb_postc,
                      v_pb_plaats,
                      v_pb_land,
                      v_telefoon,
                      v_fax);

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

   fac.imp_writelog (
      p_import_key,
      'S',
      'Inleesproces/#ingelezen importregels: '
      || TO_CHAR (v_count_tot),
      ''
   );
   fac.imp_writelog (
      p_import_key,
      'S',
      'Inleesproces/#ongeldige niet ingelezen importregels: '
      || TO_CHAR (v_count_tot - v_count_import),
      ''
   );

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Inleesproces IKD partners afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE rwsn_update_partners (p_import_key IN NUMBER)
AS
   -- Cursor loopt - in volgorde! - over alle ingelezen partners.
   CURSOR c1
   IS
        SELECT contractant,
               naam,
               adres,
               postc,
               plaats,
               land,
               postbus,
               pb_postc,
               pb_plaats,
               pb_land,
               telefoon,
               fax
          FROM rwsn_imp_partners
      ORDER BY contractant;

   CURSOR c2
   IS
        SELECT prs_bedrijf_key, prs_bedrijf_naam
          FROM prs_bedrijf
         WHERE prs_leverancier_nr IS NOT NULL
               AND NOT EXISTS (SELECT 1
                                 FROM rwsn_imp_partners
                                WHERE prs_leverancier_nr = contractant)
      ORDER BY prs_bedrijf_key;

   c_kenmerk_inactief   NUMBER (10) := 1040;
   v_errormsg           VARCHAR2 (1000);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_aanduiding         VARCHAR2 (200);
   v_count              NUMBER (10);
   v_prs_bedrijf_key    NUMBER (10);
BEGIN
   SELECT COUNT (contractant) INTO v_count FROM rwsn_imp_partners;

   IF v_count = 0
   THEN
      fac.imp_writelog (p_import_key,
                        'W',
                        'Fout inlezen partners.',
                        'Geen importbestand gevonden.');
      RETURN;
   END IF;

   -- Toevoegen/bijwerken geimporteerde partners.
   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.contractant || '|' || rec.naam || '] ';

         -- Bestaat de partner al?
         BEGIN
            SELECT prs_bedrijf_key
              INTO v_prs_bedrijf_key
              FROM prs_bedrijf
             WHERE prs_leverancier_nr = rec.contractant;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_prs_bedrijf_key := -1;
         END;

         IF v_prs_bedrijf_key = -1
         THEN
            INSERT INTO prs_bedrijf (prs_leverancier_nr,
                                     prs_bedrijf_naam,
                                     prs_bedrijf_uitvoerende)
                VALUES (rec.contractant, rec.naam, NULL)
             RETURNING prs_bedrijf_key
                  INTO v_prs_bedrijf_key;
         END IF;

         UPDATE prs_bedrijf
            SET prs_bedrijf_naam = SUBSTR (rec.naam || ' [' || rec.contractant || ']', 1, 60),
                prs_bedrijf_bezoek_adres = rec.adres,
                prs_bedrijf_bezoek_postcode = rec.postc,
                prs_bedrijf_bezoek_plaats = rec.plaats,
                prs_bedrijf_bezoek_land = rec.land,
                prs_bedrijf_post_adres = rec.postbus,
                prs_bedrijf_post_postcode = rec.pb_postc,
                prs_bedrijf_post_plaats = rec.pb_plaats,
                prs_bedrijf_post_land = rec.pb_land,
                prs_bedrijf_telefoon = rec.telefoon,
                prs_bedrijf_fax = rec.fax,
                prs_bedrijf_contract = 1
          WHERE prs_bedrijf_key = v_prs_bedrijf_key;

         -- Verwijder kenmerk met datum inactief.
         DELETE prs_kenmerklink
          WHERE prs_link_key = v_prs_bedrijf_key
                AND prs_kenmerk_key = c_kenmerk_inactief;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.imp_writelog (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              'Fout toevoegen partner!');
      END;
   END LOOP;

   -- Verwijderen geimporteerde partners.
   FOR rec IN c2
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.prs_bedrijf_key || '|' || rec.prs_bedrijf_naam || '] ';

         SELECT COUNT (prs_kenmerklink_key)
           INTO v_count
           FROM prs_kenmerklink
          WHERE prs_kenmerk_key = c_kenmerk_inactief
                AND prs_link_key = rec.prs_bedrijf_key;

         IF v_count = 0
         THEN
            -- Toevoegen kenmerk met datum inactief.
            INSERT INTO prs_kenmerklink (prs_kenmerk_key,
                                         prs_kenmerklink_niveau,
                                         prs_link_key,
                                         prs_kenmerklink_waarde)
                VALUES (c_kenmerk_inactief,
                        'B',
                        rec.prs_bedrijf_key,
                        TO_CHAR (SYSDATE, 'dd-mm-yyyy'));
         END IF;

         UPDATE prs_bedrijf
            SET prs_bedrijf_naam = SUBSTR ('Inactief: ' || prs_bedrijf_naam, 1, 60)
          WHERE prs_bedrijf_key = rec.prs_bedrijf_key
                AND prs_bedrijf_naam NOT LIKE 'Inactief:%';
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
            fac.imp_writelog (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              'Fout verwijderen partner!');
      END;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Importproces IKD partners afgebroken!');
END;
/


-- Import van contracts uit het IKD
CREATE OR REPLACE PROCEDURE rwsn_import_contracts (
   p_import_key IN NUMBER
)
AS
   c_delim           VARCHAR2 (1) := ';';
   v_newline         VARCHAR2 (4000);                            -- Input line
   v_errormsg        VARCHAR2 (1000);
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
   header_is_valid   NUMBER;
   v_count_tot       NUMBER (10);
   v_count_import    NUMBER (10);
   v_ongeldig        NUMBER (1);
   v_aanduiding      VARCHAR2 (200);
   -- De importvelden
   v_zaakid          VARCHAR2 (1000);
   v_contracttype    VARCHAR2 (1000);
   v_zaaksoort       VARCHAR2 (1000);
   v_contractant     VARCHAR2 (1000);
   v_inkgroep        VARCHAR2 (1000);
   v_inkgoms         VARCHAR2 (1000);
   v_raamcontract    VARCHAR2 (1000);
   v_onderwerp       VARCHAR2 (1000);
   v_opdrachtdat     VARCHAR2 (1000);
   v_d_opdrachtdat   DATE;
   v_startwerkdat    VARCHAR2 (1000);
   v_d_startwerkdat  DATE;
   v_einddat         VARCHAR2 (1000);
   v_d_einddat       DATE;
   v_uitactiedat     VARCHAR2 (1000);
   v_d_uitactiedat   DATE;
   v_actverl         VARCHAR2 (1000);
   v_status          VARCHAR2 (1000);
   v_contrfase       VARCHAR2 (1000);
   v_zaakbehand      VARCHAR2 (1000);
   v_rol01           VARCHAR2 (1000);
   v_rol05           VARCHAR2 (1000);
   v_rol07           VARCHAR2 (1000);
   v_rol08           VARCHAR2 (1000);
   v_verzgeb         VARCHAR2 (1000);
   v_inksegm         VARCHAR2 (1000);
   v_buspartner      VARCHAR2 (1000);
   v_opdrachtgever   VARCHAR2 (1000);
   v_indexcontract   VARCHAR2 (1000);
   v_dat_index       VARCHAR2 (1000);
   v_d_dat_index     DATE;
   v_pernr           VARCHAR2 (1000);
   v_poski_post1     VARCHAR2 (1000);

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

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden

         fac.imp_getfield (v_newline, c_delim, v_zaakid);
         fac.imp_getfield (v_newline, c_delim, v_contracttype);
         fac.imp_getfield (v_newline, c_delim, v_zaaksoort);
         fac.imp_getfield (v_newline, c_delim, v_contractant);
         fac.imp_getfield (v_newline, c_delim, v_inkgroep);
         fac.imp_getfield (v_newline, c_delim, v_inkgoms);
         fac.imp_getfield (v_newline, c_delim, v_raamcontract);
         fac.imp_getfield (v_newline, c_delim, v_onderwerp);
         fac.imp_getfield (v_newline, c_delim, v_opdrachtdat);
         fac.imp_getfield (v_newline, c_delim, v_startwerkdat);
         fac.imp_getfield (v_newline, c_delim, v_einddat);
         fac.imp_getfield (v_newline, c_delim, v_uitactiedat);
         fac.imp_getfield (v_newline, c_delim, v_actverl);
         fac.imp_getfield (v_newline, c_delim, v_status);
         fac.imp_getfield (v_newline, c_delim, v_contrfase);
         fac.imp_getfield (v_newline, c_delim, v_zaakbehand);
         fac.imp_getfield (v_newline, c_delim, v_rol01);
         fac.imp_getfield (v_newline, c_delim, v_rol05);
         fac.imp_getfield (v_newline, c_delim, v_rol07);
         fac.imp_getfield (v_newline, c_delim, v_rol08);
         fac.imp_getfield (v_newline, c_delim, v_verzgeb);
         fac.imp_getfield (v_newline, c_delim, v_inksegm);
         fac.imp_getfield (v_newline, c_delim, v_buspartner);
         fac.imp_getfield (v_newline, c_delim, v_opdrachtgever);
         fac.imp_getfield (v_newline, c_delim, v_indexcontract);
         fac.imp_getfield (v_newline, c_delim, v_dat_index);
         fac.imp_getfield (v_newline, c_delim, v_pernr);
         fac.imp_getfield (v_newline, c_delim, v_poski_post1);
         v_aanduiding := '[' || v_zaakid || '|' || v_contracttype || '|' || v_zaaksoort || '] ';

         v_count_tot := v_count_tot + 1;
         -- Controleer alle veldwaarden
         v_errormsg          := 'Fout inlezen zaakid';
         v_zaakid            := SUBSTR(TRIM (v_zaakid),1,30);
         --
         v_errormsg          := 'Fout inlezen contracttype';
         v_contracttype      := SUBSTR(TRIM (v_contracttype),1,64);
         --
         v_errormsg          := 'Fout inlezen zaaksoort';
         v_zaaksoort         := SUBSTR(TRIM (v_zaaksoort),1,30);
         --
         v_errormsg          := 'Fout inlezen contractant';
         v_contractant       := SUBSTR(TRIM (v_contractant),1,50);
         --
         v_errormsg          := 'Fout inlezen inkgroep';
         v_inkgroep          := SUBSTR(TRIM (v_inkgroep),1,30);
         --
         v_errormsg          := 'Fout inlezen inkgoms';
         v_inkgoms           := SUBSTR(TRIM (v_inkgoms),1,50);
         --
         v_errormsg          := 'Fout inlezen raamcontract';
         v_raamcontract      := SUBSTR(TRIM (v_raamcontract),1,30);
         --
         v_errormsg          := 'Fout inlezen onderwerp';
         v_onderwerp         := SUBSTR(TRIM (v_onderwerp),1,50);
         --
         v_errormsg          := 'Fout inlezen opdrachtdat';
         v_d_opdrachtdat     := fac.safe_to_date(TRIM (v_opdrachtdat), 'yyyy-mm-dd');
         --
         v_errormsg          := 'Fout inlezen startwerkdat (' || v_startwerkdat || ')';
         v_d_startwerkdat    := fac.safe_to_date(TRIM (v_startwerkdat), 'yyyy-mm-dd');
         --
         v_errormsg          := 'Fout inlezen einddat';
         v_d_einddat         := fac.safe_to_date(TRIM (v_einddat),'yyyy-mm-dd');
         --
         v_errormsg          := 'Fout inlezen uitactiedat';
         v_d_uitactiedat     := fac.safe_to_date(TRIM (v_uitactiedat),'yyyy-mm-dd');
         --
         v_errormsg          := 'Fout inlezen actverl';
         v_actverl           := SUBSTR(TRIM (v_actverl),1,3);
         --
         v_errormsg          := 'Fout inlezen status';
         v_status            := SUBSTR(TRIM (v_status),1,30);
         --
         v_errormsg          := 'Fout inlezen contrfase';
         v_contrfase         := SUBSTR(TRIM (v_contrfase),1,80);
         --
         v_errormsg          := 'Fout inlezen zaakbehand';
         v_zaakbehand        := SUBSTR(TRIM (v_zaakbehand),1,12);
         --
         v_errormsg          := 'Fout inlezen rol01';
         v_rol01             := SUBSTR(TRIM (v_rol01),1,12);
         --
         v_errormsg          := 'Fout inlezen rol05';
         v_rol05             := SUBSTR(TRIM (v_rol05),1,12);
         --
         v_errormsg          := 'Fout inlezen rol07';
         v_rol07             := SUBSTR(TRIM (v_rol07),1,12);
         --
         v_errormsg          := 'Fout inlezen rol08';
         v_rol08             := SUBSTR(TRIM (v_rol08),1,12);
         --
         v_errormsg          := 'Fout inlezen verzgeb';
         v_verzgeb           := SUBSTR(REPLACE (TRIM (v_verzgeb),'@',CHR (13) || CHR (10)),1,255);
         --
         v_errormsg          := 'Fout inlezen inksegm';
         v_inksegm           := SUBSTR(REPLACE (TRIM (v_inksegm),'@',CHR (13) || CHR (10)),1,255);
         --
         v_errormsg          := 'Fout inlezen buspartner';
         v_buspartner        := SUBSTR(TRIM (v_buspartner),1,50);
         --
         v_errormsg          := 'Fout inlezen opdrachtgever';
         v_opdrachtgever     := SUBSTR(TRIM (v_opdrachtgever),1,80);
         --
         v_errormsg          := 'Fout inlezen indexcontract';
         v_indexcontract     := SUBSTR(TRIM (v_indexcontract),1,3);
         --
         v_errormsg          := 'Fout inlezen dat_index';
         v_d_dat_index       := fac.safe_to_date(TRIM (v_dat_index),'yyyy-mm-dd');
         --
         v_errormsg          := 'Fout inlezen pernr';
         v_pernr             := SUBSTR(REPLACE (TRIM (v_pernr),'@',CHR (13) || CHR (10)),1,255);
         --
         v_errormsg          := 'Fout inlezen poski/post1';
         v_poski_post1       := SUBSTR(REPLACE (TRIM (v_poski_post1),'@',CHR (13) || CHR (10)),1,255);

         v_ongeldig := 0;

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

            INSERT INTO rwsn_imp_contracts
                    ( zaakid,
                      contracttype,
                      zaaksoort,
                      contractant,
                      inkgroep,
                      inkgoms,
                      raamcontract,
                      onderwerp,
                      opdrachtdat,
                      startwerkdat,
                      einddat,
                      uitactiedat,
                      actverl,
                      status,
                      contrfase,
                      zaakbehand,
                      rol01,
                      opdrachtgev,                                    -- rol05
                      rol07,
                      rol08,
                      verzgeb,
                      inksegm,
                      buspartner,
                      opdrachtgever,
                      indexcontract,
                      dat_index,
                      pernr,
                      poski_post1)
                   VALUES
                    ( v_zaakid,
                      v_contracttype,
                      v_zaaksoort,
                      v_contractant,
                      v_inkgroep,
                      v_inkgoms,
                      v_raamcontract,
                      v_onderwerp,
                      v_d_opdrachtdat,
                      v_d_startwerkdat,
                      v_d_einddat,
                      v_d_uitactiedat,
                      v_actverl,
                      v_status,
                      v_contrfase,
                      v_zaakbehand,
                      v_rol01,
                      v_rol05,
                      v_rol07,
                      v_rol08,
                      v_verzgeb,
                      v_inksegm,
                      v_buspartner,
                      v_opdrachtgever,
                      v_indexcontract,
                      v_d_dat_index,
                      v_pernr,
                      v_poski_post1);

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

   fac.imp_writelog (
      p_import_key, 'S',
      'Inleesproces/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
      ''
   );
   fac.imp_writelog (
      p_import_key, 'S',
      'Inleesproces/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import),
      ''
   );

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.imp_writelog (p_import_key, 'E',
                        v_aanduiding || v_errormsg,
                        'Inleesproces IKD contracts afgebroken!');
END;
/

/* Formatted on 17-8-2015 18:06:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_update_contracts (p_import_key IN NUMBER)
AS
   -- Cursor loopt - in volgorde! - alleen over de ingelezen contracten op
   -- inkoopsegmenten die zijn gedefinieerd in Eigen tabel 781 of met ZOPB
   -- alszaaksoort (die worden sowieso ingelezen)!
   CURSOR c1
   IS
        SELECT i.zaakid,
               i.contracttype,
               i.zaaksoort,
               DECODE (UPPER (i.zaaksoort), 'ZOPB', COALESCE (i.contractant, 'Rijkswaterstaat'), i.contractant) contractant,
               i.raamcontract,
               i.onderwerp,
               i.startwerkdat,
               i.einddat,
               i.uitactiedat,
               i.opdrachtdat,
               i.actverl,
               i.status,
               i.contrfase,
               i.opdrachtgev,
               i.verzgeb,
               i.inksegm,
               i.zaakbehand,
               i.rol01,
               i.rol07,
               i.rol08,
               i.buspartner,
               i.opdrachtgever,
               i.indexcontract,
               i.dat_index,
               i.pernr,
               i.poski_post1,
               DECODE (UPPER (i.status), 'TE ARCHIVEREN', 1, 0) gesloten
          FROM rwsn_imp_contracts i, fac_v_aanwezigusrdata inksg
         WHERE     UPPER (i.inkgroep) = '026'
               AND UPPER (i.status) IN ('NORMAAL', 'TE ARCHIVEREN')
               AND inksg.fac_usrtab_key = 781               -- Inkoopsegmenten
               AND (INSTR (UPPER (i.inksegm), UPPER (inksg.fac_usrdata_omschr), 1, 1) > 0
                    OR UPPER (i.zaaksoort) = 'ZOPB')
      ORDER BY DECODE (i.raamcontract, NULL, 0, 1);

   /*
      -- Cursor loopt alle te verwijderen "lege mantels".
      CURSOR c2
      IS
           SELECT   c.cnt_contract_key, c.cnt_contract_nummer
             FROM   cnt_contract c, cnt_disc_params dp
            WHERE   c.ins_discipline_key = dp.cnt_ins_discipline_key
                    AND dp.cnt_srtcontract_type = 6                     -- Master
                    AND NOT EXISTS
                          (SELECT   1
                             FROM   cnt_contract
                            WHERE   cnt_contract_key = c.cnt_contract_mantel_key)
         ORDER BY   1;
   */

   c_mantel_zaaksoort          VARCHAR2 (10) := 'ZROK';
   c_mantel_separator          VARCHAR2 (10) := '/';
   c_fac_groep_key_zb          NUMBER (10) := 623;
   c_prs_perslid_key_beh       NUMBER (10) := 3629; -- Jan Udding/00007714 is default!
   c_rappel_termijn_key        NUMBER (10) := 21;
   v_errormsg                  VARCHAR2 (1000);
   oracle_err_num              NUMBER;
   oracle_err_mes              VARCHAR2 (200);
   v_aanduiding                VARCHAR2 (200);
   v_count_tot                 NUMBER (10);
   v_count_chg                 NUMBER (10);
   v_geldig                    NUMBER (1);
   v_contract_type             NUMBER (1);
   v_contract_soort            VARCHAR2 (30);
   v_cnt_discipline_key        NUMBER (10);
   v_prs_afdeling_key_eig      NUMBER (10);
   v_naam_rol05                VARCHAR2 (100);
   v_prs_perslid_key_zb        NUMBER (10);
   v_naam_zaakbehand           VARCHAR2 (100);
   v_gebruikersgroep_key       NUMBER (10);
   v_naam_rol01                VARCHAR2 (100);
   v_naam_rol07                VARCHAR2 (100);
   v_naam_rol08                VARCHAR2 (100);
   v_prs_bedrijf_key           NUMBER (10);
   v_cntnr_postfix             VARCHAR2 (100);
   v_occ                       NUMBER;
   v_beg                       NUMBER;
   v_end                       NUMBER;
   v_tmp                       VARCHAR2 (255);
   v_count                     NUMBER (10);
   v_prs_dienst_key            NUMBER (10);
   v_cnt_contract_mantel_key   NUMBER (10);
   v_cnt_contract_key          NUMBER (10);
   v_termijn_type              VARCHAR2 (1);
   v_termijn_aantal            NUMBER;                       -- Was NUMBER (3)
   v_opzeg_termijn_key         NUMBER (10);
   v_rappel_termijn_key        NUMBER (10);

   v_kenmerksrt_contracttype   NUMBER (10);
   v_kenmerksrt_opdrachtdat    NUMBER (10);
   v_kenmerksrt_actverl        NUMBER (10);
   v_kenmerksrt_status         NUMBER (10);
   v_kenmerksrt_contrfase      NUMBER (10);
   v_kenmerksrt_rol05          NUMBER (10);
   v_kenmerksrt_verzgeb        NUMBER (10);
   v_kenmerksrt_inksegm        NUMBER (10);
   v_kenmerksrt_link           NUMBER (10);
   v_kenmerksrt_zaakbehand     NUMBER (10);
   v_kenmerksrt_rol01          NUMBER (10);
   v_kenmerksrt_rol07          NUMBER (10);
   v_kenmerksrt_rol08          NUMBER (10);
   v_kenmerksrt_opdrachtgever  NUMBER (10);
   v_kenmerksrt_indexcontract  NUMBER (10);
   v_kenmerksrt_dat_index      NUMBER (10);
   v_kenmerksrt_pernr          NUMBER (10);
   v_kenmerksrt_poski_post1    NUMBER (10);
   v_kenmerk_link_waarde       VARCHAR2 (255);

   PROCEDURE insert_or_update_kenmerk (
      p_cnt_contract_key             IN NUMBER,
      p_cnt_srtkenmerk_key           IN NUMBER,
      p_cnt_kenmerkcontract_waarde      VARCHAR2)
   AS
      v_cnt_kenmerk_key              NUMBER;
      v_cnt_kenmerkcontract_key      NUMBER;
      v_cnt_srtkenmerk_lengte        NUMBER;
      v_cnt_srtkenmerk_kenmerktype   VARCHAR2 (10);
      v_waarde                       VARCHAR2 (255);
   BEGIN
      -- Laten we eerst op zoek gaan naar het kenmerk.
      SELECT cnt_kenmerk_key,
             COALESCE (cnt_srtkenmerk_lengte, 255),
             cnt_srtkenmerk_kenmerktype
        INTO v_cnt_kenmerk_key,
             v_cnt_srtkenmerk_lengte,
             v_cnt_srtkenmerk_kenmerktype
        FROM cnt_kenmerk k, cnt_srtkenmerk sk, cnt_contract c
       WHERE     sk.cnt_srtkenmerk_key = p_cnt_srtkenmerk_key
             AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
             AND c.ins_discipline_key = k.cnt_srtcontract_key
             AND c.cnt_contract_key = p_cnt_contract_key
             AND k.cnt_kenmerk_verwijder IS NULL;

      v_waarde :=
         SUBSTR (p_cnt_kenmerkcontract_waarde, 1, v_cnt_srtkenmerk_lengte);

      BEGIN
         -- Bestaat er al een kenmerkcontract record dat bij de srtkenmerk hoort?
         SELECT cnt_kenmerkcontract_key
           INTO v_cnt_kenmerkcontract_key
           FROM cnt_kenmerkcontract kc, cnt_kenmerk k
          WHERE     k.cnt_srtkenmerk_key = p_cnt_srtkenmerk_key
                AND k.cnt_kenmerk_key = kc.cnt_kenmerk_key
                AND kc.cnt_contract_key = p_cnt_contract_key;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            IF p_cnt_kenmerkcontract_waarde IS NULL
            THEN
               RETURN;
            END IF;

            INSERT INTO cnt_kenmerkcontract (cnt_contract_key,
                                             cnt_kenmerk_key,
                                             cnt_kenmerkcontract_waarde)
                VALUES (p_cnt_contract_key, v_cnt_kenmerk_key, v_waarde);

            RETURN;
      END;

      IF p_cnt_kenmerkcontract_waarde IS NULL
      THEN
         DELETE cnt_kenmerkcontract
          WHERE cnt_kenmerkcontract_key = v_cnt_kenmerkcontract_key;
      ELSE
         UPDATE cnt_kenmerkcontract
            SET cnt_kenmerkcontract_waarde = v_waarde,
                cnt_kenmerk_key = v_cnt_kenmerk_key
          WHERE cnt_kenmerkcontract_key = v_cnt_kenmerkcontract_key;
      END IF;
   END;
BEGIN
   v_aanduiding := '';
   v_count_tot := 0;
   v_count_chg := 0;
   v_kenmerksrt_contracttype := 1;
   v_kenmerksrt_opdrachtdat := 2;
   v_kenmerksrt_actverl := 21;
   v_kenmerksrt_status := 22;
   v_kenmerksrt_contrfase := 23;
   v_kenmerksrt_rol05 := 24;
   v_kenmerksrt_verzgeb := 25;
   v_kenmerksrt_inksegm := 26;
   v_kenmerksrt_link := 27;
   v_kenmerksrt_zaakbehand := 28;
   v_kenmerksrt_rol01 := 29;
   v_kenmerksrt_rol07 := 30;
   v_kenmerksrt_rol08 := 31;
   v_kenmerksrt_opdrachtgever := 32;
   v_kenmerksrt_indexcontract := 33;
   v_kenmerksrt_dat_index := 34;
   v_kenmerksrt_pernr := 35;
   v_kenmerksrt_poski_post1 := 36;

   -- Toevoegen/bijwerken geimporteerde contracts.
   FOR rec IN c1
   LOOP
      BEGIN
         v_geldig := 1;
         v_aanduiding :=
               '['
            || rec.zaakid
            || '|'
            || rec.contracttype
            || '|'
            || rec.zaaksoort
            || '] ';
         v_count_tot := v_count_tot + 1;

         -- Betreft het hier een ROK (= mantel)? Zo ja, dan moet het contract
         -- onder een andere contractsoort vallen.
         IF UPPER (rec.zaaksoort) != c_mantel_zaaksoort
         THEN
            v_contract_type := 5;                                  -- Supplier
            v_contract_soort := rec.zaaksoort;
         ELSE
            v_contract_type := 6;                                    -- Master
            v_contract_soort := rec.zaaksoort;
         END IF;

         -- Eerst kijken of de contractsoort al bestaat?
         v_errormsg := 'Fout bepalen contractsoort.';

         BEGIN
            SELECT ins_discipline_key
              INTO v_cnt_discipline_key
              FROM cnt_discipline
             WHERE UPPER (TRIM (SUBSTR (ins_discipline_omschrijving, 1, INSTR (ins_discipline_omschrijving || '/', '/') - 1))) = v_contract_soort;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               -- Contractsoort bestaat nog niet, laten we deze dan maar aanmaken.
               v_errormsg := 'Fout toevoegen contractsoort.';

               INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving)
                   VALUES ('CNT', v_contract_soort)
                RETURNING ins_discipline_key
                     INTO v_cnt_discipline_key;

               INSERT INTO cnt_disc_params (cnt_ins_discipline_key, cnt_srtcontract_type)
                   VALUES (v_cnt_discipline_key, v_contract_type);

               -- Kenmerken toevoegen.
               v_errormsg := 'Fout toevoegen contractsoort-kenmerken.';

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_contracttype,
                           v_cnt_discipline_key,
                           'S',
                           100);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_opdrachtdat,
                           v_cnt_discipline_key,
                           'S',
                           110);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_actverl,
                           v_cnt_discipline_key,
                           'S',
                           120);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_status,
                           v_cnt_discipline_key,
                           'S',
                           130);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_contrfase,
                           v_cnt_discipline_key,
                           'S',
                           140);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_rol05,
                           v_cnt_discipline_key,
                           'S',
                           150);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_verzgeb,
                           v_cnt_discipline_key,
                           'S',
                           160);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_inksegm,
                           v_cnt_discipline_key,
                           'S',
                           170);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_link,
                           v_cnt_discipline_key,
                           'S',
                           180);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_zaakbehand,
                           v_cnt_discipline_key,
                           'S',
                           190);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_rol01,
                           v_cnt_discipline_key,
                           'S',
                           200);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_rol07,
                           v_cnt_discipline_key,
                           'S',
                           210);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_rol08,
                           v_cnt_discipline_key,
                           'S',
                           220);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_opdrachtgever,
                           v_cnt_discipline_key,
                           'S',
                           230);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_indexcontract,
                           v_cnt_discipline_key,
                           'S',
                           240);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_dat_index,
                           v_cnt_discipline_key,
                           'S',
                           250);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_pernr,
                           v_cnt_discipline_key,
                           'S',
                           260);

               INSERT INTO cnt_kenmerk (cnt_srtkenmerk_key,
                                        cnt_srtcontract_key,
                                        cnt_kenmerk_niveau,
                                        cnt_kenmerk_volgnummer)
                   VALUES (v_kenmerksrt_poski_post1,
                           v_cnt_discipline_key,
                           'S',
                           270);
         END;

         -- Bepaal de eigenaar-afdeling (van contract)/opdrachtgever intern.
         v_errormsg := 'Fout bepalen eigenaar-afdeling/opdrachtgever intern.';

         BEGIN
            SELECT p.prs_afdeling_key, SUBSTR (pf.prs_perslid_naam_full, 1, 40)
              INTO v_prs_afdeling_key_eig, v_naam_rol05
              FROM prs_perslid p, prs_v_perslid_fullnames pf
             WHERE p.prs_perslid_nr = rec.opdrachtgev
                   AND p.prs_perslid_key = pf.prs_perslid_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key, 'I',
                  v_aanduiding || 'Opdrachtgever intern ' || rec.opdrachtgev,
                  v_errormsg);
               v_prs_afdeling_key_eig := 1;                        -- Onbekend
               v_naam_rol05 := rec.opdrachtgev;
         END;

         -- Bepaal de zaakbehandelaar (voorheen beheerder van contract).
         v_errormsg := 'Fout bepalen zaakbehandelaar.';

         BEGIN
            SELECT pf.prs_perslid_key, SUBSTR (pf.prs_perslid_naam_full, 1, 40)
              INTO v_prs_perslid_key_zb, v_naam_zaakbehand
              FROM prs_perslid p, prs_v_perslid_fullnames pf
             WHERE p.prs_perslid_nr = rec.zaakbehand
                   AND p.prs_perslid_key = pf.prs_perslid_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key, 'I',
                  v_aanduiding || 'Zaakbehandelaar ' || rec.zaakbehand,
                  v_errormsg);
               v_prs_perslid_key_zb := -1;
               v_naam_zaakbehand := rec.zaakbehand;
         END;

         -- Plaats de zaakbehandelaar (voorheen beheerder van contract) in de afgesproken autorisatiegroep.
         v_errormsg := 'Fout toekennen autorisatiegroep aan zaakbehandelaar.';

         IF v_prs_perslid_key_zb <> -1
         THEN
            BEGIN
               SELECT fac_gebruikersgroep_key
                 INTO v_gebruikersgroep_key
                 FROM fac_gebruikersgroep
                WHERE fac_groep_key = c_fac_groep_key_zb
                      AND prs_perslid_key = v_prs_perslid_key_zb;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
                      VALUES (c_fac_groep_key_zb, v_prs_perslid_key_zb);
            END;
         END IF;

         -- Bepaal de inkoper / inkoopondersteuner (rol01).
         v_errormsg := 'Fout bepalen ROL01.';

         BEGIN
            SELECT SUBSTR (pf.prs_perslid_naam_full, 1, 40)
              INTO v_naam_rol01
              FROM prs_perslid p, prs_v_perslid_fullnames pf
             WHERE p.prs_perslid_nr = rec.rol01
                   AND p.prs_perslid_key = pf.prs_perslid_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key, 'I',
                  v_aanduiding || 'Inkoper / Inkoopondersteuner ' || rec.rol01,
                  v_errormsg);
               v_naam_rol01 := rec.rol01;
         END;

         -- Bepaal de contractmanager (rol07).
         v_errormsg := 'Fout bepalen ROL07.';

         BEGIN
            SELECT SUBSTR (pf.prs_perslid_naam_full, 1, 40)
              INTO v_naam_rol07
              FROM prs_perslid p, prs_v_perslid_fullnames pf
             WHERE p.prs_perslid_nr = rec.rol07
                   AND p.prs_perslid_key = pf.prs_perslid_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key, 'I',
                  v_aanduiding || 'Contractmanager ' || rec.rol07,
                  v_errormsg);
               v_naam_rol07 := rec.rol07;
         END;

         -- Bepaal de medewerker bedrijfsbureau (rol08).
         v_errormsg := 'Fout bepalen ROL08.';

         BEGIN
            SELECT SUBSTR (pf.prs_perslid_naam_full, 1, 40)
              INTO v_naam_rol08
              FROM prs_perslid p, prs_v_perslid_fullnames pf
             WHERE p.prs_perslid_nr = rec.rol08
                   AND p.prs_perslid_key = pf.prs_perslid_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               fac.imp_writelog (
                  p_import_key, 'I',
                  v_aanduiding || 'Medewerker bedrijfsbureau ' || rec.rol08,
                  v_errormsg);
               v_naam_rol08 := rec.rol08;
         END;

         -- Bepaal de contractuitvoerder.
         IF v_contract_type = 5                        -- Supplier; voor NOKs!
         THEN
            BEGIN
               -- Bepaal de uitvoerder=contractant van een NOK-contract.
               v_errormsg := 'Fout bepalen NOK-contractuitvoerder.';

               SELECT prs_bedrijf_key, ''
                 INTO v_prs_bedrijf_key, v_cntnr_postfix
                 FROM prs_v_contractbedrijf
                WHERE prs_leverancier_nr = rec.contractant;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  fac.imp_writelog (
                     p_import_key, 'E',
                     v_aanduiding || 'NOK-uitvoerder ' || rec.contractant || ' kan niet worden bepaald.',
                     v_errormsg);
                  v_prs_bedrijf_key := -1;
                  v_geldig := 0;
            END;
         ELSE                                            -- Mantel; voor ROKs!
            BEGIN
               -- Bepaal de uitvoerder=buspartner van een ROK-contract.
               v_errormsg := 'Fout bepalen ROK-contractuitvoerder.';

               SELECT prs_bedrijf_key, c_mantel_separator || prs_bedrijf_naam
                 INTO v_prs_bedrijf_key, v_cntnr_postfix
                 FROM prs_v_contractbedrijf
                WHERE prs_leverancier_nr = rec.buspartner;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  fac.imp_writelog (
                     p_import_key, 'E',
                     v_aanduiding || 'ROK-uitvoerder ' || rec.buspartner || ' kan niet worden bepaald.',
                     v_errormsg);
                  v_prs_bedrijf_key := -1;
                  v_geldig := 0;
            END;
         END IF;

         -- Koppel inkoopsegment als dienst aan contractuitvoerder.
         IF rec.inksegm IS NOT NULL AND v_geldig = 1
         THEN
            v_occ := 1;
            v_beg := 1;
            v_end :=
               INSTR (rec.inksegm,
                      CHR (13),
                      1,
                      v_occ);

            WHILE v_end > 0
            LOOP
               v_tmp := SUBSTR (rec.inksegm, v_beg, v_end - v_beg);
               v_tmp :=
                  SUBSTR (v_tmp, 1, INSTR (v_tmp,
                                           ':',
                                           -1,
                                           1)
                                    - 1);

               v_errormsg := 'Fout bepalen dienst.';

               SELECT COUNT ( * )
                 INTO v_count
                 FROM prs_dienst
                WHERE UPPER (prs_dienst_omschrijving) = UPPER (v_tmp);

               IF v_count = 0
               THEN
                  v_errormsg := 'Fout toevoegen dienst.';

                  INSERT INTO prs_dienst (prs_dienst_omschrijving)
                      VALUES (SUBSTR (v_tmp, 1, 60))
                   RETURNING prs_dienst_key
                        INTO v_prs_dienst_key;
               ELSE
                  SELECT prs_dienst_key
                    INTO v_prs_dienst_key
                    FROM prs_dienst
                   WHERE UPPER (prs_dienst_omschrijving) = UPPER (v_tmp);
               END IF;

               v_errormsg := 'Fout bepalen bedrijfdienst.';

               SELECT COUNT ( * )
                 INTO v_count
                 FROM prs_bedrijfdienstlocatie
                WHERE prs_bedrijf_key = v_prs_bedrijf_key
                      AND prs_dienst_key = v_prs_dienst_key;

               IF v_count = 0
               THEN
                  v_errormsg := 'Fout toevoegen bedrijfdienst.';

                  INSERT INTO prs_bedrijfdienstlocatie (prs_bedrijf_key,
                                                        prs_dienst_key)
                      VALUES (v_prs_bedrijf_key, v_prs_dienst_key);
               END IF;

               v_occ := v_occ + 1;
               v_beg := v_end + 2;
               v_end :=
                  INSTR (rec.inksegm,
                         CHR (13),
                         1,
                         v_occ);
            END LOOP;
         END IF;

         -- Als contract verwijst naar een mantel, dan gaan we deze nu zoeken.
         v_errormsg := 'Fout bepalen mantel.';
         v_cnt_contract_mantel_key := NULL;

         IF rec.raamcontract IS NOT NULL AND v_geldig = 1
         THEN
            IF v_contract_type = 5            -- Supplier; zou zo moeten zijn!
            THEN
               BEGIN
                  SELECT cnt_contract_key
                    INTO v_cnt_contract_mantel_key
                    FROM cnt_contract
                   WHERE SUBSTR (
                            cnt_contract_nummer,
                            1,
                            INSTR (cnt_contract_nummer || c_mantel_separator,
                                   c_mantel_separator,
                                   1,
                                   1)
                            - 1) = rec.raamcontract
                         AND cnt_prs_bedrijf_key = v_prs_bedrijf_key;
               EXCEPTION
                  WHEN NO_DATA_FOUND
                  THEN
                     fac.imp_writelog (
                        p_import_key, 'W',
                        v_aanduiding || 'Raamcontract ' || rec.raamcontract || ' kan niet worden bepaald.',
                        v_errormsg);
               END;
            ELSE
               fac.imp_writelog (
                  p_import_key, 'E',
                  v_aanduiding || 'Een ROK mag niet verwijzen naar een andere ROK!',
                  v_errormsg);
               v_geldig := 0;
            END IF;
         END IF;

         -- Bestaat het contract al?
         v_errormsg := 'Fout bepalen contract.';

         BEGIN
            SELECT cnt_contract_key
              INTO v_cnt_contract_key
              FROM cnt_contract
             WHERE SUBSTR (cnt_contract_nummer, 1, INSTR (cnt_contract_nummer || c_mantel_separator, c_mantel_separator, 1, 1) - 1) = rec.zaakid
                   AND cnt_prs_bedrijf_key = v_prs_bedrijf_key;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_cnt_contract_key := -1;
         END;

         -- Bepaal opzegtermijn.
         v_errormsg := 'Fout bepalen opzegtermijn.';
         v_termijn_type := 'M';
         v_termijn_aantal := 0;

         IF UPPER (rec.actverl) = 'JA' AND rec.uitactiedat IS NOT NULL AND rec.einddat <> rec.uitactiedat
         THEN
            -- Is het verschil een geheel aantal jaren?
            IF TO_CHAR (rec.einddat, 'ddmm') = TO_CHAR (rec.uitactiedat, 'ddmm')
            THEN
               -- Verschil geheel aantal jaren.
               v_termijn_type := 'Y';
               v_termijn_aantal := TO_NUMBER (TO_CHAR (rec.einddat, 'yyyy')) - TO_NUMBER (TO_CHAR (rec.uitactiedat, 'yyyy'));
            ELSE
               -- Verschil afgrond op geheel aantal maanden.
               v_termijn_type := 'M';
               v_termijn_aantal := ROUND ((rec.einddat - rec.uitactiedat) / 30);
            END IF;
         END IF;

         IF v_termijn_aantal < 0
         THEN
            v_termijn_aantal := 0;
         END IF;

         IF v_termijn_aantal > 999
         THEN
            v_termijn_aantal := 999;
         END IF;

         -- Bestaat de termijn al?
         BEGIN
            SELECT cnt_termijn_key
              INTO v_opzeg_termijn_key
              FROM cnt_termijn
             WHERE cnt_termijn_type = v_termijn_type
                   AND cnt_termijn_aantal = v_termijn_aantal;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               INSERT INTO cnt_termijn (cnt_termijn_omschrijving,
                                        cnt_termijn_type,
                                        cnt_termijn_aantal)
                   VALUES (TO_CHAR (v_termijn_aantal) || DECODE (v_termijn_type, 'Y', ' Jaar', ' Maand(en)'),
                           v_termijn_type,
                           v_termijn_aantal)
                RETURNING cnt_termijn_key
                     INTO v_opzeg_termijn_key;
         END;

         -- Bepaal rappeltermijn via Eigen tabel met key=4; anders c_rappel_termijn_key!
         v_errormsg := 'Fout bepalen rappeltermijn.';

         BEGIN
            SELECT t.cnt_termijn_key
              INTO v_rappel_termijn_key
              FROM fac_usrdata ud, cnt_termijn t
             WHERE ud.fac_usrtab_key = 4                    -- Zaaksrt2RapTerm
                   AND ud.fac_usrdata_upper = UPPER (v_contract_soort)
                   AND TRIM (ud.fac_usrdata_omschr) = TO_CHAR (t.cnt_termijn_key);
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_rappel_termijn_key := c_rappel_termijn_key;
         END;

         IF v_geldig = 1
         THEN
            IF v_cnt_contract_key = -1
            THEN
               v_errormsg := 'Toevoegen contract.';

               INSERT INTO cnt_contract (cnt_contract_nummer,
                                         cnt_contract_omschrijving,
                                         --cnt_contract_opmerking,
                                         cnt_contract_mantel_key,
                                         cnt_contract_looptijd_van,
                                         cnt_contract_looptijd_tot,
                                         cnt_prs_bedrijf_key,
                                         ins_discipline_key,
                                         prs_perslid_key_beh,
                                         prs_afdeling_key_eig,
                                         cnt_contract_opzegtermijn,
                                         cnt_contract_rappeltermijn,
                                         cnt_contract_status)
                   VALUES (SUBSTR (rec.zaakid || v_cntnr_postfix, 1, 30),
                           rec.onderwerp,
                           --NULL,
                           v_cnt_contract_mantel_key,
                           COALESCE (rec.startwerkdat, SYSDATE),
                           COALESCE (rec.einddat, TO_DATE ('29991231', 'yyyymmdd')),
                           v_prs_bedrijf_key,
                           v_cnt_discipline_key,
                           c_prs_perslid_key_beh,
                           v_prs_afdeling_key_eig,
                           v_opzeg_termijn_key,
                           v_rappel_termijn_key,
                           rec.gesloten)
                RETURNING cnt_contract_key
                     INTO v_cnt_contract_key;

               -- 09-12-2010/MVH: Tracking + Notificatie naar beheerder bij aanmaken contract!
               -- 16-10-2015/MVH: Geen notificatie, want beheerder bij aanmaken vaste default!
               -- Track het aanmaken van een nieuwe contract.
               fac.trackaction ('CNTNEW',
                                v_cnt_contract_key,
                                NULL,
                                NULL,
                                NULL);
/*
               IF v_new_perslid_key_beh != -1
               THEN
                  fac.putnotificationsrtprio (NULL,
                                              v_new_perslid_key_beh,
                                              'CNTNEW',
                                              v_cnt_contract_key,
                                              NULL,
                                              NULL,
                                              NULL,
                                              NULL,
                                              NULL,
                                              2,
                                              NULL);
               END IF;
*/
            ELSE
               v_errormsg := 'Bijwerken contract.';

               UPDATE cnt_contract
                  SET cnt_contract_omschrijving = rec.onderwerp,
                      cnt_contract_mantel_key = v_cnt_contract_mantel_key,
                      cnt_contract_looptijd_van = COALESCE (rec.startwerkdat, cnt_contract_looptijd_van),
                      cnt_contract_looptijd_tot = COALESCE (rec.einddat, TO_DATE ('29991231', 'yyyymmdd')),
                      cnt_prs_bedrijf_key = v_prs_bedrijf_key,
                      ins_discipline_key = v_cnt_discipline_key,
                      prs_afdeling_key_eig = v_prs_afdeling_key_eig,
                      cnt_contract_opzegtermijn = v_opzeg_termijn_key,
                      cnt_contract_rappeltermijn = v_rappel_termijn_key,
                      cnt_contract_status = rec.gesloten
                WHERE cnt_contract_key = v_cnt_contract_key;

               -- 07-12-2010/MVH: Notificatie naar nieuwe beheerder op verzoek Hans de Zwarte!
               -- 16-10-2015/MVH: Geen notificatie, want beheerder bij import nooit gewijzigd!
/*
               IF v_new_perslid_key_beh != v_cur_perslid_key_beh
               THEN
                  fac.putnotificationsrtprio (NULL,
                                              v_new_perslid_key_beh,
                                              'CUST04',
                                              v_cnt_contract_key,
                                              NULL,
                                              NULL,
                                              NULL,
                                              NULL,
                                              NULL,
                                              2,
                                              NULL);
               END IF;
*/
            END IF;
            COMMIT;

            -- Update kenmerken.
            -- Haal default link naar contract uit kenmerk en vervang <CASE_ID> met actuele nummer.
            -- 16-10-2015/MVH: Mag weg, want niemand die dit nog weet/wil (overblijfsel 1e versie)?
            v_errormsg := 'Toevoegen contract link.';

            BEGIN
               SELECT REPLACE (cnt_kenmerk_default, '<CASE_ID>', rec.zaakid)
                 INTO v_kenmerk_link_waarde
                 FROM cnt_kenmerk
                WHERE cnt_srtkenmerk_key = v_kenmerksrt_link
                      AND cnt_srtcontract_key = v_cnt_discipline_key;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  v_kenmerk_link_waarde := NULL;
            END;

            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_link, v_kenmerk_link_waarde);
            COMMIT;

            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_contracttype) || '=' || rec.contracttype;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_contracttype, rec.contracttype);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_opdrachtdat) || '=' || TO_CHAR (rec.opdrachtdat, 'dd-mm-yyyy');
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_opdrachtdat, TO_CHAR (rec.opdrachtdat, 'dd-mm-yyyy'));
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_actverl) || '=' || rec.actverl;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_actverl, rec.actverl);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_status) || '=' || rec.status;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_status, rec.status);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_contrfase) || '=' || rec.contrfase;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_contrfase, rec.contrfase);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_rol05) || '=' || v_naam_rol05;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_rol05, v_naam_rol05);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_verzgeb) || '=' || rec.verzgeb;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_verzgeb, rec.verzgeb);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_inksegm) || '=' || rec.inksegm;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_inksegm, rec.inksegm);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_zaakbehand) || '=' || v_naam_zaakbehand;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_zaakbehand, v_naam_zaakbehand);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_rol01) || '=' || v_naam_rol01;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_rol01, v_naam_rol01);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_rol07) || '=' || v_naam_rol07;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_rol07, v_naam_rol07);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_rol08) || '=' || v_naam_rol08;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_rol08, v_naam_rol08);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_opdrachtgever) || '=' || rec.opdrachtgever;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_opdrachtgever, rec.opdrachtgever);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_indexcontract) || '=' || rec.indexcontract;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_indexcontract, rec.indexcontract);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_dat_index) || '=' || TO_CHAR (rec.dat_index, 'dd-mm-yyyy');
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_dat_index, TO_CHAR (rec.dat_index, 'dd-mm-yyyy'));
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_pernr) || '=' || rec.pernr;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_pernr, rec.pernr);
            v_errormsg := 'UPSERT kenmerk: ' || TO_CHAR (v_kenmerksrt_poski_post1) || '=' || rec.poski_post1;
            insert_or_update_kenmerk (v_cnt_contract_key, v_kenmerksrt_poski_post1, rec.poski_post1);
            COMMIT;

            v_count_chg := v_count_chg + 1;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.imp_writelog (p_import_key, 'E',
                              v_aanduiding || v_errormsg,
                              'Fout toevoegen/bijwerken contract!');

            COMMIT;
      END;
   END LOOP;

   fac.imp_writelog (
      p_import_key, 'S',
      'Updateproces/#verwerkte updateregels: ' || TO_CHAR (v_count_tot),
      '');
   fac.imp_writelog (
      p_import_key, 'S',
      'Updateproces/#ongeldige niet verwerkte updateregels: ' || TO_CHAR (v_count_tot - v_count_chg),
      '');
/*
   COMMIT;

   -- Loop door alle lege mantels en verwijder deze. Toch?
   v_count_tot := 0;

   v_errormsg := 'Fout verwijderen lege mantel.';

   FOR rec IN c2
   LOOP
      BEGIN
         v_aanduiding := rec.cnt_contract_nummer;

         DELETE FROM cnt_contract WHERE cnt_contract_key = rec.cnt_contract_key;
         COMMIT;

         v_count_tot := v_count_tot + 1;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                  v_errormsg
               || ' ORACLE (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            fac.imp_writelog (p_import_key, 'E',
                              v_aanduiding || v_errormsg,
                              'Fout verwijderen contract!');

            COMMIT;
      END;
   END LOOP;

   IF (v_count_tot > 0)
   THEN
      fac.imp_writelog (
         p_import_key, 'S',
         'Updateproces/#verwijderde lege mantels: ' || TO_CHAR (v_count_tot),
         '');
   END IF;
*/
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
            v_errormsg
         || ' ORACLE (error '
         || oracle_err_num
         || '/'
         || oracle_err_mes
         || ')';
      fac.imp_writelog (p_import_key, 'E',
                        v_aanduiding || v_errormsg,
                        'Updateproces IKD contracts afgebroken!');
END;
/


--RWSN#54732
--Deze rapportage dient als input voor de leverancier van de klanttevredenheidsonderzoeken
CREATE OR REPLACE VIEW rwsn_v_kto_melding
(
   nummer,
   email,
   prs_perslid_voornaam,
   naam,
   vakgroep,
   melding,
   organisatie_1,
   organisatie_2,
   organisatie_3,
   regio,
   district,
   locatie,
   eenheid,
   aangemaakt,
   afgehandeld,
   afm_persoon,
   afm_org_3,
   afm_org_4,
   afm_org_5,
   omschrijving,
   afhandeling,
   groep,
   bedrijf,
   meldingkey,
   uitvoeringoptijd,
   afspraakoptijd,
   meedoen_in_kto,
   onderwerp,
   behandelgroep,
   email_extern,
   kandidaatnummer
)
AS
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key nummer,
       p.prs_perslid_email email,
       p.prs_perslid_voornaam,
       p.prs_perslid_naam naam,
       disc.ins_discipline_omschrijving vakgroep,
       rwsn.format_string_voor_rap (stdm.mld_stdmelding_omschrijving, 500) melding,
       afd1_m.prs_afdeling_omschrijving organisatie_1,
       afd2_m.prs_afdeling_omschrijving organisatie_2,
       afd3_m.prs_afdeling_omschrijving organisatie_3,
       COALESCE(lm.alg_regio_omschrijving, lwp.alg_regio_omschrijving) regio,
       COALESCE(lm.alg_district_omschrijving, lwp.alg_district_omschrijving) district,
       COALESCE(lm.alg_locatie_omschrijving, lwp.alg_locatie_omschrijving) locatie,
       sd.ins_srtdiscipline_omschrijving eenheid,
       m.mld_melding_datum aangemaakt,
       t.fac_tracking_datum afgehandeld,
       p_afm.prs_perslid_oslogin afm_persoon,
       afd3_afm.prs_afdeling_omschrijving afm_org_3,
       afd4_afm.prs_afdeling_omschrijving afm_org_4,
       afd5_afm.prs_afdeling_omschrijving afm_org_5,
       rwsn.format_string_voor_rap (m.mld_melding_omschrijving, 500) omschrijving,
       rwsn.format_string_voor_rap (m.mld_melding_opmerking, 500) afhandeling,
       mg.mld_stdmeldinggroep_naam groep,
       b.prs_bedrijf_naam bedrijf,
       m.mld_melding_key meldingkey,
       DECODE ( SIGN (m.mld_melding_einddatum_std - t.fac_tracking_datum), -1, 'nee', 'ja') uitvoering_volgens_sla,
       DECODE ( SIGN (m.mld_melding_einddatum  - t.fac_tracking_datum), -1, 'nee', 'ja') afspraak_volgens_sla,
       (SELECT MAX (ud.fac_usrdata_omschr)
          FROM mld_v_aanwezigkenmerkmelding  km,
               mld_kenmerk                   k,
               fac_v_aanwezigusrdata         ud
         WHERE     km.mld_kenmerk_key = k.mld_kenmerk_key
               AND k.mld_srtkenmerk_key = 1
               AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) =
                   ud.fac_usrdata_key
               AND km.MLD_MELDING_KEY = m.mld_melding_key)   -- Meedoen in KTO
           meedoen,
       m.mld_melding_onderwerp,
       bg.mld_behandelgroep_naam behandelgroep,
       (SELECT MAX (km.mld_kenmerkmelding_waarde) -- Kenmerken komen soms op stdmelding en vakgroep voor.
          FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k
         WHERE     km.mld_melding_key = m.mld_melding_key
               AND km.mld_kenmerk_key = k.mld_kenmerk_key
               AND k.mld_kenmerk_verwijder IS NULL
               AND k.mld_srtkenmerk_key = 20)                         -- Email
           email,
       (SELECT km.mld_kenmerkmelding_waarde
          FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k
         WHERE     km.MLD_MELDING_KEY = m.mld_melding_key
               AND km.mld_kenmerk_key = k.mld_kenmerk_key
               AND k.mld_srtkenmerk_key = 11151)            -- Kandidaatnummer
           kandidaatnummer
  FROM mld_melding          m,
       prs_perslid          p,
       prs_v_afdeling_boom  ab_m,
       prs_afdeling       afd1_m,
       prs_afdeling       afd2_m,
       prs_afdeling       afd3_m,
       alg_v_locatie_gegevens lm,
       alg_v_locatie_gegevens lwp,
       prs_perslid          p_afm,
       prs_v_afdeling_boom  ab_afm,
       prs_afdeling       afd3_afm,
       prs_afdeling       afd4_afm,
       prs_afdeling       afd5_afm,
       (SELECT prs_perslid_key, alg_locatie_key
          FROM prs_v_perslidwerkplek_gegevens pwg
         WHERE NOT EXISTS
                   (SELECT pwg2.prs_perslidwerkplek_key
                      FROM prs_v_perslidwerkplek_gegevens pwg2
                     WHERE     pwg2.prs_perslidwerkplek_key <
                               pwg.prs_perslidwerkplek_key
                           AND pwg.prs_perslid_key = pwg2.prs_perslid_key)) melder_wp,
       (SELECT mt.mld_melding_key, MAX(fac_tracking_key) fac_tracking_key
          FROM mld_melding mt, fac_tracking t, fac_srtnotificatie sn
         WHERE     mt.mld_melding_key = t.fac_tracking_refkey
               AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
               AND sn.fac_srtnotificatie_code = 'MLDAFM'
               AND mt.mld_melding_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'mm')
         GROUP BY mt.mld_melding_key)afm,
       mld_stdmelding       stdm,
       mld_stdmeldinggroep  mg,
       ins_tab_discipline   disc,
       ins_srtdiscipline    sd,
       fac_tracking         t,
       prs_bedrijf          b,
       mld_disc_params      dp,
       mld_behandelgroep    bg
 WHERE     m.mld_melding_status IN (5, 6)
       AND m.prs_perslid_key = p.prs_perslid_key
       AND m.mld_melding_key = afm.mld_melding_key(+)
       AND afm.fac_tracking_key = t.fac_tracking_key(+)
       AND t.prs_perslid_key = p_afm.prs_perslid_key(+)
       AND m.prs_perslid_key = melder_wp.prs_perslid_key(+)
       AND p.prs_afdeling_key = ab_m.prs_afdeling_key(+)
       AND ab_m.prs_afdeling_key1 = afd1_m.prs_afdeling_key(+)
       AND ab_m.prs_afdeling_key2 = afd2_m.prs_afdeling_key(+)
       AND ab_m.prs_afdeling_key3 = afd3_m.prs_afdeling_key(+)
       AND ab_m.prs_bedrijf_key = b.prs_bedrijf_key(+)
       AND m.mld_alg_locatie_key = lm.alg_locatie_key(+)
       AND melder_wp.alg_locatie_key = lwp.alg_locatie_key(+)
       AND p_afm.prs_afdeling_key = ab_afm.prs_afdeling_key(+)
       AND ab_afm.prs_afdeling_key3 = afd3_afm.prs_afdeling_key(+)
       AND ab_afm.prs_afdeling_key4 = afd4_afm.prs_afdeling_key(+)
       AND ab_afm.prs_afdeling_key5 = afd5_afm.prs_afdeling_key(+)
       AND m.mld_stdmelding_key = stdm.mld_stdmelding_key(+)
       AND stdm.mld_stdmeldinggroep_key = mg.mld_stdmeldinggroep_key(+)
       AND stdm.mld_ins_discipline_key = disc.ins_discipline_key(+)
       AND disc.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
       AND disc.ins_discipline_key = dp.mld_ins_discipline_key(+)
       AND dp.mld_behandelgroep_key = bg.mld_behandelgroep_key(+)
       AND m.mld_melding_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'mm');



-- RWSN#35936
/* Formatted on 13-2-2017 16:02:58 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_contractpersoon
(
   fclt_f_contract,
   fclt_f_naam,
   fclt_f_rol
)
AS
     SELECT c.cnt_contract_nummer_intern,
            x.prs_perslid_naam_full,
            --x.rol
            LISTAGG (x.rol, ', ') WITHIN GROUP (ORDER BY x.rol) AS rol
       FROM (SELECT c.cnt_contract_key, p.prs_perslid_naam_full, 'Eigenaar' rol
               FROM cnt_v_aanwezigcontract c, prs_v_perslid_fullnames p
              WHERE c.prs_perslid_key_eig = p.prs_perslid_key
             UNION ALL
             SELECT c.cnt_contract_key, p.prs_perslid_naam_full, 'Beheerder' rol
               FROM cnt_v_aanwezigcontract c, prs_v_perslid_fullnames p
              WHERE c.prs_perslid_key_beh = p.prs_perslid_key
             UNION ALL -- Personen in kenmerkvelden 24=ROL05, 29=ROL01, 30=ROL07, 31=ROL08 en 32=Opdrachtgever
             SELECT kc.cnt_contract_key, kc.cnt_kenmerkcontract_waarde, sk.cnt_srtkenmerk_omschrijving rol
               FROM cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk
              WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
                    AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                    AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
                    AND sk.cnt_srtkenmerk_key IN (24, 29, 30, 31, 32)
             UNION ALL -- Personen in kenmerkvelden 61=Producteigenaar, 62=Adviseur en 63=Contracttoezichthouder
             SELECT kc.cnt_contract_key, p.prs_perslid_naam_full, sk.cnt_srtkenmerk_omschrijving rol
               FROM cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk, prs_v_perslid_fullnames p
              WHERE kc.cnt_kenmerkcontract_verwijder IS NULL
                    AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                    AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
                    AND sk.cnt_srtkenmerk_key IN (61, 62, 63)
                    AND kc.cnt_kenmerkcontract_waarde = TO_CHAR (p.prs_perslid_key)) x,
            cnt_contract c
      WHERE x.cnt_contract_key = c.cnt_contract_key
   GROUP BY c.cnt_contract_key,
            c.cnt_contract_nummer_intern,
            x.prs_perslid_naam_full;


create or replace view rwsn_v_afd_hierarchie as
        select boom.prs_afdeling_key4 as prs_afdeling_key, boom.prs_afdeling_key5 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key4 is not null
        and boom.prs_afdeling_key5 is not null
        union
        select boom.prs_afdeling_key3 as prs_afdeling_key, boom.prs_afdeling_key4 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key3 is not null
        and boom.prs_afdeling_key4 is not null
        union
        select boom.prs_afdeling_key3 as prs_afdeling_key, boom.prs_afdeling_key5 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key3 is not null
        and boom.prs_afdeling_key5 is not null
        union
        select boom.prs_afdeling_key2 as prs_afdeling_key, boom.prs_afdeling_key3 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key2 is not null
        and boom.prs_afdeling_key3 is not null
        union
        select boom.prs_afdeling_key2 as prs_afdeling_key, boom.prs_afdeling_key4 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key2 is not null
        and boom.prs_afdeling_key4 is not null
        union
        select boom.prs_afdeling_key2 as prs_afdeling_key, boom.prs_afdeling_key5 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key2 is not null
        and boom.prs_afdeling_key5 is not null
        union
        select boom.prs_afdeling_key1 as prs_afdeling_key, boom.prs_afdeling_key2 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key1 is not null
        and boom.prs_afdeling_key2 is not null
        union
        select boom.prs_afdeling_key1 as prs_afdeling_key, boom.prs_afdeling_key3 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key1 is not null
        and boom.prs_afdeling_key3 is not null
        union
        select boom.prs_afdeling_key1 as prs_afdeling_key, boom.prs_afdeling_key4 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key1 is not null
        and boom.prs_afdeling_key4 is not null
        union
        select boom.prs_afdeling_key1 as prs_afdeling_key, boom.prs_afdeling_key5 as prs_afdeling_childkey
        from prs_v_afdeling_boom boom
        where boom.prs_afdeling_key1 is not null
        and boom.prs_afdeling_key5 is not null;


-- Van de persoon user_key (1e kolom) zijn afdeling (2e en 3e kolom) en
-- vervolgens alle collega's (4e + 5e kolom) op zijn afdeling en eronder, met hun afdeling (6e + 7e kolom)
-- Alle collega's van de subafdelingen
-- UNION
-- Alle collega's van de eigen afdeling (en niet jezelf).
create or replace view rwsn_v_pers_hier_up_and_below as
select p1.prs_perslid_key AS user_key, a1.prs_afdeling_key AS user_afdeling_key, a1.prs_afdeling_naam AS user_afdeling_naam,
       p2.prs_perslid_key, p2.prs_perslid_naam, a2.prs_afdeling_key, a2.prs_afdeling_naam, a2.prs_afdeling_omschrijving
from prs_perslid p1, prs_afdeling a1, rwsn_v_afd_hierarchie boom, prs_afdeling a2, prs_perslid p2
where p1.prs_afdeling_key = a1.prs_afdeling_key
and boom.prs_afdeling_key = a1.prs_afdeling_key (+)
and boom.prs_afdeling_childkey = a2.prs_afdeling_key (+)
and (p2.prs_afdeling_key = a1.prs_afdeling_key or p2.prs_afdeling_key = a2.prs_afdeling_key)
UNION
select p1.prs_perslid_key AS user_key, a1.prs_afdeling_key AS user_afdeling_key, a1.prs_afdeling_naam AS user_afdeling_naam,
       p2.prs_perslid_key, p2.prs_perslid_naam, a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving
from prs_perslid p1, prs_afdeling a1, prs_perslid p2
where p1.prs_afdeling_key = a1.prs_afdeling_key
and p1.prs_perslid_key <> p2.prs_perslid_key
and a1.prs_afdeling_key = p2.prs_afdeling_key (+);

create or replace view rwsn_v_pers_hier_above
as
select p.prs_perslid_key as user_key, a.* from prs_perslid p, rwsn_v_organogram a
where a.prs_afdeling_key2 = p.prs_afdeling_key
and a.prs_afdeling_key2 <> 0
UNION
select p.prs_perslid_key as user_key, a2.* from prs_perslid p, rwsn_v_organogram a, rwsn_v_organogram a2
where a.prs_afdeling_key2 = p.prs_afdeling_key
and a2.prs_afdeling_key2 = a.prs_afdeling_key1
and a.prs_afdeling_key2 <> 0
and a2.prs_afdeling_key2 <> 0
UNION
select p.prs_perslid_key as user_key, a3.* from prs_perslid p, rwsn_v_organogram a, rwsn_v_organogram a2, rwsn_v_organogram a3
where a.prs_afdeling_key2 = p.prs_afdeling_key
and a2.prs_afdeling_key2 = a.prs_afdeling_key1
and a3.prs_afdeling_key2 = a2.prs_afdeling_key1
and a.prs_afdeling_key2 <> 0
and a2.prs_afdeling_key2 <> 0
and a3.prs_afdeling_key2 <> 0
UNION
select p.prs_perslid_key as user_key, a4.* from prs_perslid p, rwsn_v_organogram a, rwsn_v_organogram a2, rwsn_v_organogram a3, rwsn_v_organogram a4
where a.prs_afdeling_key2 = p.prs_afdeling_key
and a2.prs_afdeling_key2 = a.prs_afdeling_key1
and a3.prs_afdeling_key2 = a2.prs_afdeling_key1
and a4.prs_afdeling_key2 = a3.prs_afdeling_key1
and a.prs_afdeling_key2 <> 0
and a2.prs_afdeling_key2 <> 0
and a3.prs_afdeling_key2 <> 0
and a4.prs_afdeling_key2 <> 0
UNION
select p.prs_perslid_key as user_key, a5.* from prs_perslid p, rwsn_v_organogram a, rwsn_v_organogram a2, rwsn_v_organogram a3, rwsn_v_organogram a4, rwsn_v_organogram a5
where a.prs_afdeling_key2 = p.prs_afdeling_key
and a2.prs_afdeling_key2 = a.prs_afdeling_key1
and a3.prs_afdeling_key2 = a2.prs_afdeling_key1
and a4.prs_afdeling_key2 = a3.prs_afdeling_key1
and a5.prs_afdeling_key2 = a4.prs_afdeling_key1
and a.prs_afdeling_key2 <> 0
and a2.prs_afdeling_key2 <> 0
and a3.prs_afdeling_key2 <> 0
and a4.prs_afdeling_key2 <> 0
and a5.prs_afdeling_key2 <> 0;




create or replace view rwsn_v_idm_boom
as
	SELECT LEVEL as idmlevel, afdelingscode, omschrijving, parentcode
	FROM rwsn_imp_idm_org
	WHERE afdelingscode IS NOT NULL
	CONNECT BY PRIOR afdelingscode = parentcode
	START WITH parentcode = '00000000';

-- Autorisatieinzicht van personen op eigen afdeling en eronder
create or replace view rwsn_v_autorisatie_inzicht as
select   distinct hier.user_key AS FCLT_3D_USER_KEY,
         a2.prs_afdeling_naam AS SUBAFDELING,
         a2.prs_afdeling_omschrijving AS SUBAFDELING_OMSCHRIJVING,
         pf.prs_perslid_naam_full AS PERSOON,
         g.fac_groep_omschrijving AS FCLT_F_AUTORISATIEGROEP
from     rwsn_v_pers_hier_up_and_below hier,
         fac_gebruikersgroep gg,
      	 fac_groep g,
      	 prs_v_perslid_fullnames pf,
      	 prs_afdeling a2,
      	 prs_perslid p
WHERE g.fac_groep_key = gg.fac_groep_key
AND hier.prs_perslid_key = gg.prs_perslid_key
AND g.fac_groep_key <> 1
AND hier.prs_perslid_key = pf.prs_perslid_key
AND hier.prs_perslid_key = p.prs_perslid_key
AND a2.prs_afdeling_key = p.prs_afdeling_key;


create or replace view rwsn_v_autorisatie_inzicht2
(FCLT_F_AFDELING, SUBAFDELING, SUBAFDELING_OMSCHRIJVING,  PERSOON, FCLT_F_AFDELINGSNIVEAU, FCLT_F_AUTORISATIEGROEP)
AS select a.prs_afdeling_naam,
       a2.prs_afdeling_naam, a2.prs_afdeling_omschrijving, pf2.prs_perslid_naam_full,
       to_char(idm.idmlevel), g.fac_groep_omschrijving
from rwsn_v_idm_boom idm, prs_afdeling a, rwsn_v_afd_hierarchie boom, prs_perslid p2, prs_afdeling a2,
     prs_v_perslid_fullnames pf2, fac_gebruikersgroep gg, fac_groep g
where (boom.prs_afdeling_key = a.prs_afdeling_key or boom.prs_afdeling_childkey = a.prs_afdeling_key)
and p2.prs_afdeling_key = boom.prs_afdeling_childkey
and a2.prs_afdeling_key = p2.prs_afdeling_key
and a2.prs_afdeling_naam = IDM.AFDELINGSCODE (+)
and pf2.prs_perslid_key = p2.prs_perslid_key
and g.fac_groep_key = gg.fac_groep_key
and g.fac_groep_key <> 1
AND p2.prs_perslid_key = gg.prs_perslid_key;

-- Organogram van uitsluitend de organisatie/afdelingen, dus EXCLUSIEF de personen (prs_perslid_key = 0)
-- Boomstructuur volgens 2 kolommen.
-- UNION
-- Afdeling op laagste nivo erbij (als blad).
-- UNION
-- Bedrijf als 'afdeling' op hoogste nivo erbij (top).
create or replace view rwsn_v_organogram
	(prs_afdeling_key1, prs_afdeling_naam1, prs_afdeling_omschrijving1,
   prs_afdeling_key2, prs_afdeling_naam2, prs_afdeling_omschrijving2, prs_afdeling_persoon, prs_perslid_key)
as
select a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving,
       a2.prs_afdeling_key, a2.prs_afdeling_naam, a2.prs_afdeling_omschrijving, 'A', 0
from prs_afdeling a1, prs_afdeling a2
where a2.prs_afdeling_parentkey = a1.prs_afdeling_key
and a1.prs_afdeling_verwijder is null
union
select a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving,
       0, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving, 'A', 0
from prs_afdeling a1, prs_afdeling a2
where not exists (select 'x' from prs_afdeling a2 where a2.prs_afdeling_parentkey = a1.prs_afdeling_key)
and a1.prs_afdeling_verwijder is null
union
select 0, 'RWSN', 'RWSN',
       a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving, 'A', 0
from prs_afdeling a1
where a1.prs_afdeling_parentkey is null
and a1.prs_afdeling_verwijder is null;


-- Organogram van de organisatie/afdelingen INCLUSIEF de personen
create or replace view rwsn_v_organogram_incl_perslid
	(prs_afdeling_key1, prs_afdeling_naam1, prs_afdeling_omschrijving1,
   prs_afdeling_key2, prs_afdeling_naam2, prs_afdeling_omschrijving2, prs_afdeling_persoon, prs_perslid_key)
as select * from rwsn_v_organogram where prs_afdeling_key2 <> 0
union
select a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving,
       0, pf.prs_perslid_naam_full, sp.prs_srtperslid_omschrijving, 'P', p1.prs_perslid_key
from prs_afdeling a1, prs_perslid p1, prs_srtperslid sp, prs_v_perslid_fullnames pf
where p1.prs_afdeling_key = a1.prs_afdeling_key
and p1.prs_srtperslid_key = sp.prs_srtperslid_key
and p1.prs_perslid_key = pf.prs_perslid_key
and p1.prs_perslid_verwijder is null;

-- Mijn organogram, d.w.z. mijn afdeling en de afdelingen eronder inclusief de personen,
-- en alleen de afdelingen boven mij (ouders) ZONDER de personen.
create or replace view rwsn_v_my_organogram
	(fclt_3d_user_key, prs_afdeling_key1, prs_afdeling_naam1, prs_afdeling_omschrijving1,
   prs_afdeling_key2, prs_afdeling_naam2, prs_afdeling_omschrijving2, prs_afdeling_persoon, prs_perslid_key)
as
select distinct hier.user_key, ogram.* from rwsn_v_pers_hier_up_and_below hier, rwsn_v_organogram ogram
  where ogram.prs_afdeling_key2 <> 0
  and ( (ogram.prs_afdeling_key2 = hier.prs_afdeling_key)
         or
        (ogram.prs_afdeling_key2 = hier.user_afdeling_key)
      )
union
select * from rwsn_v_pers_hier_above
union
select distinct hier.user_key, a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving,
       0, pf.prs_perslid_naam_full, sp.prs_srtperslid_omschrijving, 'P', p1.prs_perslid_key
from prs_afdeling a1, prs_perslid p1, prs_srtperslid sp, prs_v_perslid_fullnames pf, rwsn_v_pers_hier_up_and_below hier
where p1.prs_afdeling_key = a1.prs_afdeling_key
and p1.prs_srtperslid_key = sp.prs_srtperslid_key
and p1.prs_perslid_key = pf.prs_perslid_key
and p1.prs_perslid_verwijder is null
and a1.prs_afdeling_key = hier.prs_afdeling_key
and p1.prs_perslid_verwijder is null;

-- Organogram van ALLE organisatie/afdelingen INCLUSIEF de personen andere dan de _default-rol hebben
create or replace view rwsn_v_organogram_autorisatie
	(prs_afdeling_key1, prs_afdeling_naam1, prs_afdeling_omschrijving1,
   prs_afdeling_key2, prs_afdeling_naam2, prs_afdeling_omschrijving2, prs_afdeling_persoon, prs_perslid_key, autorisatiegroep)
as select prs_afdeling_key1, prs_afdeling_naam1, prs_afdeling_omschrijving1,
   prs_afdeling_key2, prs_afdeling_naam2, prs_afdeling_omschrijving2, prs_afdeling_persoon, prs_perslid_key, ''
   from rwsn_v_organogram where prs_afdeling_key2 <> 0
union
select a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving,
       0, pf.prs_perslid_naam_full, sp.prs_srtperslid_omschrijving, 'P', p1.prs_perslid_key, g.fac_groep_omschrijving
from prs_afdeling a1, prs_perslid p1, prs_srtperslid sp, prs_v_perslid_fullnames pf,
		 fac_gebruikersgroep gg, fac_groep g
where p1.prs_afdeling_key = a1.prs_afdeling_key
and p1.prs_srtperslid_key = sp.prs_srtperslid_key
and p1.prs_perslid_key = pf.prs_perslid_key
and g.fac_groep_key = gg.fac_groep_key
and g.fac_groep_key <> 1
and p1.prs_perslid_key = gg.prs_perslid_key
and p1.prs_perslid_verwijder is null;

-- Autorisatie-organogram van MIJ: dus 'mijn' afdelingen INCLUSIEF de personen andere dan de _default-rol hebben
create or replace view rwsn_v_my_organogram_autorisat
	(fclt_3d_user_key, prs_afdeling_key1, prs_afdeling_naam1, prs_afdeling_omschrijving1,
   prs_afdeling_key2, prs_afdeling_naam2, prs_afdeling_omschrijving2, prs_afdeling_persoon, prs_perslid_key, autorisatiegroep)
as
select distinct hier.user_key, ogram.*, '' from rwsn_v_pers_hier_up_and_below hier, rwsn_v_organogram ogram
  where ogram.prs_afdeling_key2 <> 0
  and ( (ogram.prs_afdeling_key2 = hier.prs_afdeling_key)
         or
        (ogram.prs_afdeling_key2 = hier.user_afdeling_key)
      )
union
select hier.*, '' from rwsn_v_pers_hier_above hier
union
select distinct hier.user_key, a1.prs_afdeling_key, a1.prs_afdeling_naam, a1.prs_afdeling_omschrijving,
       0, pf.prs_perslid_naam_full, sp.prs_srtperslid_omschrijving, 'P', p1.prs_perslid_key, g.fac_groep_omschrijving
from prs_afdeling a1, prs_perslid p1, prs_srtperslid sp, prs_v_perslid_fullnames pf, rwsn_v_pers_hier_up_and_below hier,
		 fac_gebruikersgroep gg, fac_groep g
where p1.prs_afdeling_key = a1.prs_afdeling_key
and p1.prs_srtperslid_key = sp.prs_srtperslid_key
and p1.prs_perslid_key = pf.prs_perslid_key
and p1.prs_perslid_verwijder is null
and a1.prs_afdeling_key = hier.prs_afdeling_key
and g.fac_groep_key = gg.fac_groep_key
and g.fac_groep_key <> 1
and p1.prs_perslid_key = gg.prs_perslid_key;

CREATE OR REPLACE VIEW rwsn_v_receptie_bezoekers
AS SELECT
			 l.alg_locatie_key FCLT_3D_LOCATIE_KEY,
			 l.alg_locatie_omschrijving FCLT_F_Locatie,
       TO_CHAR (a.bez_afspraak_datum, 'DD-MM-YYYY') FCLT_D_Datum,
       TO_CHAR (a.bez_afspraak_datum, 'HH24:MI') Tijd,
       TO_CHAR( a.bez_afspraak_key) Nr,
       b.bez_afspraak_naam Bezoeker,
       b.bez_afspraak_bedrijf Bedrijf,
       p.prs_perslid_naam
       || DECODE (NVL (p.prs_perslid_voorletters, ''),
             '', '',
             ', ' || p.prs_perslid_voorletters)
       || DECODE (NVL (p.prs_perslid_tussenvoegsel, ''),
             '', '',
             ' ' || p.prs_perslid_tussenvoegsel)
       || DECODE (NVL (p.prs_perslid_voornaam, ''),
             '', '',
             ' (' || p.prs_perslid_voornaam || ')')
       || DECODE (NVL (p.prs_perslid_nr, ''),
             '', '',
             ' [' || p.prs_perslid_nr || ']')
          Aanvrager,
       a.bez_afspraak_gastheer Gastheer,
       a.bez_afspraak_telefoonnr Telefoon,
       a.bez_afspraak_ruimte Ruimte,
       COALESCE (a.bez_afspraak_opmerking, '') Opmerking,
			 TO_CHAR (b.bez_bezoekers_done, 'DD-MM-YYYY HH24:MI') Aankomst,
       TO_CHAR (b.bez_bezoekers_out, 'DD-MM-YYYY HH24:MI') Vertrek,
       b.bez_bezoekers_pasnr Badge
FROM bez_afspraak a,
     bez_bezoekers b,
     prs_perslid p,
     alg_locatie l,
     res_rsv_ruimte rrr,
     res_ruimte_opstelling rro,
     res_ruimte rr,
     (SELECT alg_r.alg_ruimte_key alg_onroerendgoed_keys,
             alg_r.alg_ruimte_key,
             alg_r.alg_verdieping_key,
             alg_v.alg_gebouw_key,
             'R' alg_type
      FROM alg_ruimte alg_r, alg_verdieping alg_v
      WHERE alg_r.alg_verdieping_key = alg_v.alg_verdieping_key
      UNION ALL
      SELECT alg_v.alg_verdieping_key,
             TO_NUMBER (NULL),
             alg_v.alg_verdieping_key,
             alg_v.alg_gebouw_key,
             'V'
      FROM alg_verdieping alg_v
      UNION ALL
      SELECT alg_g.alg_gebouw_key,
             TO_NUMBER (NULL),
             TO_NUMBER (NULL),
             alg_g.alg_gebouw_key,
             'G'
      FROM alg_gebouw alg_g) og,
     res_rsv_deel rd
WHERE     a.bez_afspraak_key = b.bez_afspraak_key
      AND a.alg_locatie_key = l.alg_locatie_key
      AND og.alg_onroerendgoed_keys(+) = a.alg_onrgoed_keys
      AND b.bez_bezoekers_key = rd.bez_bezoekers_key(+)
      AND p.prs_perslid_key = a.bez_afspraak_contact_key
      AND a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key(+)
      AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)
      AND rro.res_ruimte_key = rr.res_ruimte_key(+);

/* Formatted on 22-6-2010 13:36:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_cat_per_afd
(
   fclt_f_maand,
   fclt_f_dienst,
   fclt_f_hid,
   fclt_f_directie,
   fclt_f_district,
   fclt_f_afdeling,
   fclt_f_catalogus,
   fclt_f_artikel,
   aantal
)
AS
   SELECT   x.maand,
            y.afd1,
            y.afd2,
            y.afd3,
            y.afd4,
            y.afd5,
            x.catalogus,
            x.artikel,
            x.aantal
     FROM      (SELECT   a.prs_afdeling_key,
                         a.maand,
                         b.catalogus,
                         b.artikel,
                         a.aantal
                  FROM      (  SELECT   ra.res_artikel_key,
                                        p.prs_afdeling_key,
                                        TO_CHAR (ra.res_rsv_artikel_levering,
                                                 'yyyy-mm')
                                           maand,
                                        SUM (ra.res_rsv_artikel_aantal) aantal
                                 FROM   res_v_aanwezigrsv_artikel ra,
                                        res_v_aanwezigrsv_ruimte rr,
                                        prs_perslid p
                                WHERE   ra.res_rsv_ruimte_key =
                                           rr.res_rsv_ruimte_key
                                        AND rr.res_rsv_ruimte_host_key =
                                              p.prs_perslid_key
                             GROUP BY   ra.res_artikel_key,
                                        p.prs_afdeling_key,
                                        TO_CHAR (ra.res_rsv_artikel_levering,
                                                 'yyyy-mm')) a
                         LEFT JOIN
                            (SELECT   art.res_artikel_key,
                                      rd.ins_discipline_omschrijving
                                         catalogus,
                                      art.res_artikel_omschrijving artikel
                               FROM   res_artikel art, res_discipline rd
                              WHERE   art.res_discipline_key =
                                         rd.ins_discipline_key) b
                         ON a.res_artikel_key = b.res_artikel_key) x
            LEFT JOIN
               (SELECT   ab.prs_afdeling_key,
                         afd1.prs_afdeling_omschrijving afd1,
                         afd2.prs_afdeling_omschrijving afd2,
                         afd3.prs_afdeling_omschrijving afd3,
                         afd4.prs_afdeling_omschrijving afd4,
                         afd5.prs_afdeling_omschrijving afd5
                  FROM   prs_v_afdeling_boom ab,
                         prs_afdeling afd1,
                         prs_afdeling afd2,
                         prs_afdeling afd3,
                         prs_afdeling afd4,
                         prs_afdeling afd5
                 WHERE       ab.prs_afdeling_key1 = afd1.prs_afdeling_key
                         AND ab.prs_afdeling_key2 = afd2.prs_afdeling_key(+)
                         AND ab.prs_afdeling_key3 = afd3.prs_afdeling_key(+)
                         AND ab.prs_afdeling_key4 = afd4.prs_afdeling_key(+)
                         AND ab.prs_afdeling_key5 = afd5.prs_afdeling_key(+))
               y
            ON x.prs_afdeling_key = y.prs_afdeling_key;

/* Formatted on 22-6-2010 17:18:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_ruimte_opstellingen
(
   fclt_f_ruimtenaam,
   ruimte_key,
   fclt_f_opstelling,
   opstel_key,
   aantal_bezoekers
)
AS
   SELECT   r.res_ruimte_nr fclt_f_ruimte_naam,
            r.res_ruimte_key ruimte_key,
            o.res_opstelling_omschrijving fclt_f_opstelling,
            ro.res_ruimte_opstel_key opstel_key,
            ro.res_ruimte_opstel_bezoekers aantal_bezoekers
     FROM   res_v_aanwezigruimte r,
            res_ruimte_opstelling ro,
            res_v_aanwezigopstelling o
    WHERE   r.res_ruimte_key = ro.res_ruimte_key
            AND ro.res_opstelling_key = o.res_opstelling_key;

/* Formatted on 22-6-2010 17:35:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_res_ruimten
(
   fclt_f_ruimtenaam,
   ruimte_key,
   omschrijving,
   uur_prijs,
   vaste_prijs,
   fclt_f_ruimtecategorie,
   openingstijd,
   sluitingstijd,
   prijs_ochtend,
   prijs_middag,
   prijs_avond,
   fclt_f_opstelling,
   opstel_key,
   aantal_bezoekers,
   fclt_f_locatie,
   fclt_f_gebouw,
   fclt_f_verdieping,
   ruimte
)
AS
   SELECT   x.res_ruimte_nr fclt_f_ruimtenaam,
            x.res_ruimte_key ruimte_key,
            x.res_ruimte_omschrijving omschrijving,
            x.uur_prijs,
            x.vaste_prijs,
            x.catalogus ruimtecategorie,
            x.openingstijd,
            x.sluitingstijd,
            x.prijs_ochtend,
            x.prijs_middag,
            x.prijs_avond,
            y.opstelling,
            y.res_ruimte_opstel_key opstel_key,
            y.bezoekers aantal_bezoekers,
            z.alg_locatie_code locatie,
            z.alg_gebouw_code gebouw,
            z.alg_verdieping_code verdieping,
            z.alg_ruimte_nr ruimte
     FROM         (SELECT   rr.res_ruimte_key,
                            rr.res_ruimte_nr,
                            rr.res_ruimte_omschrijving,
                            rr.res_ruimte_prijs uur_prijs,
                            rr.res_ruimte_prijs_vast vaste_prijs,
                            d.ins_discipline_omschrijving catalogus,
                            rr.res_ruimte_begintijd openingstijd,
                            rr.res_ruimte_eindtijd sluitingstijd,
                            rr.res_ruimte_prijs_ochtend prijs_ochtend,
                            rr.res_ruimte_prijs_middag prijs_middag,
                            rr.res_ruimte_prijs_avond prijs_avond
                     FROM   res_v_aanwezigruimte rr, res_discipline d
                    WHERE   rr.res_discipline_key = d.ins_discipline_key) x
               LEFT JOIN
                  (SELECT   ro.res_ruimte_key,
                            ro.res_ruimte_opstel_key,
                            o.res_opstelling_omschrijving opstelling,
                            ro.res_ruimte_opstel_bezoekers bezoekers
                     FROM   res_ruimte_opstelling ro, res_opstelling o
                    WHERE   ro.res_opstelling_key = o.res_opstelling_key) y
               ON x.res_ruimte_key = y.res_ruimte_key
            LEFT JOIN
               (SELECT   rar.res_ruimte_key,
                         r.alg_ruimte_nr,
                         v.alg_verdieping_code,
                         g.alg_gebouw_code,
                         l.alg_locatie_code
                  FROM   res_v_aanwezigalg_ruimte rar,
                         alg_v_aanwezigruimte r,
                         alg_v_aanwezigverdieping v,
                         alg_v_aanweziggebouw g,
                         alg_v_aanweziglocatie l
                 WHERE       rar.alg_ruimte_key = r.alg_ruimte_key
                         AND r.alg_verdieping_key = v.alg_verdieping_key
                         AND v.alg_gebouw_key = g.alg_gebouw_key
                         AND g.alg_locatie_key = l.alg_locatie_key) z
            ON x.res_ruimte_key = z.res_ruimte_key;

/* Formatted on 29-10-2012 16:26:20 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_opdr_doorloop
(
   fclt_f_maand,
   fclt_f_vakgroeptype,
   fclt_f_vakgroep,
   fclt_f_melding,
   fclt_f_uitgegeven,
   melding_nr,
   fclt_f_status,
   m_aangemaakt,
   m_geaccepteerd,
   m_afgewezen,
   m_afgemeld,
   m_gepland,
   m_plan_sla,
   m_norm_sla,
   m_uitvoertijd,
   opdracht_nr,
   fclt_f_bedrijf,
   o_aangemaakt,
   o_gefiatteerd,
   o_verzonden,
   o_geaccepteerd,
   o_geannuleerd,
   o_afgemeld,
   o_uitvoertijd
)
AS
   SELECT   TO_CHAR (m.mldnew_date, 'yyyy-mm') maand,
            sd.ins_srtdiscipline_omschrijving vakgroeptype_oms,
            m.vakgroep_oms,
            m.stdmld_oms,
            DECODE (o.mld_key, NULL, NULL, 'X'),
            TO_CHAR (m.mld_key),
            DECODE (
               m.mld_status_key,
               1,
               'Afgewezen',
               5,
               'Gesloten',
               6,
               DECODE (o.opdr_status_key,
                       1, 'Afgewezen',
                       2, 'Afgewezen',
                       'Gesloten'),
               'Open'
            ),
            TO_CHAR (m.mldnew_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (m.mldacp_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (m.mldrej_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (m.mldafm_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (m.mld_plan_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (fac.count_work_days (m.mldnew_date, m.mld_plan_date)),
            TO_CHAR (m.mld_sla),
            TO_CHAR(fac.count_work_days (
                       m.mldnew_date,
                       COALESCE (m.mldrej_date, m.mldafm_date)
                    )),
            m.mld_key
            || DECODE (o.opdr_volgnr, NULL, NULL, '/' || o.opdr_volgnr),
            b.prs_bedrijf_naam,
            TO_CHAR (o.ordnew_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (o.ord_fiat_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (o.ord_verz_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (o.ordacp_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (o.ordcan_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR (o.ordafm_date, 'dd-mm-yyyy hh24:mi'),
            TO_CHAR(fac.count_work_days (
                       o.ordnew_date,
                       COALESCE (o.ord_fiat_date,
                                 o.ordcan_date,
                                 o.ordafm_date)
                    ))
     FROM   rwsn_mld_freeze m,
            ins_srtdiscipline sd,
            rwsn_opdr_freeze o,
            prs_bedrijf b
    WHERE       m.vakgroeptype_key = sd.ins_srtdiscipline_key
            AND m.mld_key = o.mld_key(+)
            AND o.opdr_uv_key = b.prs_bedrijf_key(+);

/* Formatted on 11-12-2009 17:50:05 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_imp_log
(
   fclt_f_applicatie,
   datum,
   fclt_f_status,
   omschrijving,
   hint
)
AS
   SELECT   COALESCE (fac_import_app_code, imp_log_applicatie),
            imp_log_datum,
            imp_log_status,
            imp_log_omschrijving,
            imp_log_hint
     FROM   imp_log il, fac_import fi, fac_import_app fia
    WHERE   il.fac_import_key = fi.fac_import_key(+)
            AND fi.fac_import_app_key = fia.fac_import_app_key(+);

/* Formatted on 2-12-2010 9:20:54 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_imp_log
(
   fclt_f_applicatie,
   datum,
   fclt_f_status,
   omschrijving,
   hint
)
AS
   SELECT COALESCE (fac_import_app_code, imp_log_applicatie),
          imp_log_datum,
          imp_log_status,
          imp_log_omschrijving,
          imp_log_hint
     FROM imp_log il, fac_import fi, fac_import_app fia
    WHERE il.fac_import_key = fi.fac_import_key(+)
          AND fi.fac_import_app_key = fia.fac_import_app_key(+);

-- RWSN#29000: Logging CMDB-import (= 202).
/* Formatted on 14-4-2014 12:50:16 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_imp_log_cmdb
(
   datum,
   fclt_f_status,
   omschrijving,
   hint
)
AS
   SELECT il.imp_log_datum,
          il.imp_log_status,
          il.imp_log_omschrijving,
          il.imp_log_hint
     FROM imp_log il
    WHERE il.fac_import_key = (SELECT MAX (fac_import_key)
                                 FROM fac_import
                                WHERE fac_import_app_key = 202);

-- Dummy export NACHT_WERK!
/* Formatted on 29-11-2010 16:25:20 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_export_nacht_werk (RESULT, result_order)
AS
   SELECT '', 0
     FROM DUAL
    WHERE 1 = 0
/

/* Formatted on 11-8-2016 15:54:45 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_mld_actual
(
   mld_key,
   vakgroeptype_key,
   vakgroeptype_prefix,
   vakgroep_key,
   vakgroep_oms,
   stdmld_key,
   stdmld_oms,
   stdmld_groep,
   melder_userkey,
   melder_naam,
   dienst,
   mld_oms,
   mld_opm,
   mld_status_key,
   mld_begin_date,
   mld_sla,
   sla_doorloop,
   mld_plan_date,
   plan_doorloop,
   onderdeel,
   lsu,
   locatiecode,
   mldnew_date,
   mldnew_userkey,
   mldnew_naam,
   mlding_date,
   mlding_userkey,
   mlding_naam,
   mldacp_date,
   mldacp_userkey,
   mldacp_naam,
   mldrej_date,
   mldrej_userkey,
   mldrej_naam,
   mldafm_date,
   mldafm_userkey,
   mldafm_naam,
   mldver_date
)
AS
   SELECT meld.mld_key,
          meld.vakgroeptype_key,
          SUBSTR (meld.vakgroeptype_prefix, 1, 3),
          meld.vakgroep_key,
          SUBSTR (meld.vakgroep_oms, 1, 30),
          meld.stdmld_key,
          SUBSTR (meld.stdmld_oms, 1, 60),
          SUBSTR (COALESCE (meld.stdmld_groep, 'Onbekend'), 1, 30) groep,
          meld.prs_perslid_key,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = meld.prs_perslid_key),
          SUBSTR (rwsn.bepaal_dienst (meld.prs_perslid_key), 1, 60) dienst,
          SUBSTR (meld.mld_oms, 1, 1000) mld_oms,
          SUBSTR (meld.mld_opm, 1, 1000) mld_opm,
          meld.status_key,
          meld.begindatum,
          --COALESCE (meld.sla, 0) mld_sla,                -- Is nooit NULL?
          DECODE (
             meld.stdmld_pb,         -- Is stdmld planbaar, dan plan_doorloop!
             1, fac.count_work_days (TRUNC (meld.begindatum), TRUNC (meld.einddatum)) + 1,
             meld.sla)
             mld_sla,
          rwsn.bepaal_doorlooptijd (
             DECODE (
                meld.stdmld_pb,      -- Is stdmld planbaar, dan plan_doorloop!
                1, fac.count_work_days (TRUNC (meld.begindatum), TRUNC (meld.einddatum)) + 1,
                meld.sla),
             meld.begindatum,
             COALESCE (mldrej.fac_tracking_datum, mldafm.fac_tracking_datum, SYSDATE))
             sla_doorloop,
          meld.einddatum,
          rwsn.bepaal_doorlooptijd (
             fac.count_work_days (TRUNC (meld.begindatum), TRUNC (meld.einddatum)) + 1,
             meld.begindatum,
             COALESCE (mldrej.fac_tracking_datum, mldafm.fac_tracking_datum, SYSDATE))
             plan_doorloop,
          DECODE (
             meld.vakgroeptype_key,
             3,  SUBSTR (meld.vakgroep_oms, 1, INSTR (meld.vakgroep_oms, '-') - 1), -- KCC
             'FB')
             onderdeel,
          DECODE (
             (SELECT COUNT (gr.fac_groeprechten_key)
                FROM fac_groeprechten gr
               WHERE     gr.fac_groep_key = 59                          -- FCC
                     AND gr.fac_functie_key = 27                     -- MLDBOF
                     AND gr.ins_discipline_key = meld.vakgroep_key),
             0, DECODE (SUBSTR (meld.vakgroep_oms, 1, 2), 'FE', 'FE', meld.district_oms),
             'FCC')
             lsu,
          meld.alg_locatie_code,
          mldnew.fac_tracking_datum,
          mldnew.prs_perslid_key,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = mldnew.prs_perslid_key),
          mlding.fac_tracking_datum,
          mlding.prs_perslid_key,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = mlding.prs_perslid_key),
          mldacp.fac_tracking_datum,
          mldacp.prs_perslid_key,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = mldacp.prs_perslid_key),
          mldrej.fac_tracking_datum,
          mldrej.prs_perslid_key,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = mldrej.prs_perslid_key),
          mldafm.fac_tracking_datum,
          mldafm.prs_perslid_key,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = mldafm.prs_perslid_key),
          mldver.fac_tracking_datum
     FROM (SELECT m.mld_melding_key mld_key,
                  sd.ins_srtdiscipline_key vakgroeptype_key,
                  sd.ins_srtdiscipline_prefix vakgroeptype_prefix,
                  td.ins_discipline_key vakgroep_key,
                  td.ins_discipline_omschrijving vakgroep_oms,
                  sm.mld_stdmelding_key stdmld_key,
                  sm.mld_stdmelding_omschrijving stdmld_oms,
                  smg.mld_stdmeldinggroep_naam stdmld_groep,
                  sm.mld_stdmelding_planbaar stdmld_pb,
                  m.prs_perslid_key,
                  m.mld_melding_omschrijving mld_oms,
                  m.mld_melding_opmerking mld_opm,
                  m.mld_melding_status status_key,
                  m.mld_melding_t_uitvoertijd.tijdsduur sla,
                  m.mld_melding_datum begindatum,
                  m.mld_melding_einddatum einddatum,
                  d.alg_district_omschrijving district_oms,
                  l.alg_locatie_code
             FROM mld_melding m,
                  mld_stdmelding sm,
                  mld_stdmeldinggroep smg,
                  ins_tab_discipline td,
                  ins_srtdiscipline sd,
                  alg_locatie l,
                  alg_district d
            WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_stdmeldinggroep_key = smg.mld_stdmeldinggroep_key(+)
                  AND sm.mld_ins_discipline_key = td.ins_discipline_key
                  AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                  AND l.alg_district_key = d.alg_district_key(+)) meld
          LEFT JOIN fac_tracking mldnew
             ON meld.mld_key = mldnew.fac_tracking_refkey
                AND mldnew.fac_srtnotificatie_key = 26
          LEFT JOIN (SELECT t.fac_tracking_refkey, t.fac_tracking_datum, t.prs_perslid_key
                       FROM fac_tracking t
                      WHERE t.fac_srtnotificatie_key = 25
                            AND t.fac_tracking_key IN
                                     (SELECT MAX (fac_tracking_key)
                                        FROM fac_tracking
                                       WHERE fac_srtnotificatie_key = 25
                                             AND fac_tracking_refkey = t.fac_tracking_refkey))
                    mlding
             ON meld.mld_key = mlding.fac_tracking_refkey
          LEFT JOIN (SELECT t.fac_tracking_refkey, t.fac_tracking_datum, t.prs_perslid_key
                       FROM fac_tracking t
                      WHERE t.fac_srtnotificatie_key = 21
                            AND t.fac_tracking_key IN
                                     (SELECT MAX (fac_tracking_key)
                                        FROM fac_tracking
                                       WHERE fac_srtnotificatie_key = 21
                                             AND fac_tracking_refkey = t.fac_tracking_refkey))
                    mldacp
             ON meld.mld_key = mldacp.fac_tracking_refkey
          LEFT JOIN fac_tracking mldrej
             ON meld.mld_key = mldrej.fac_tracking_refkey
                AND mldrej.fac_srtnotificatie_key = 27
          LEFT JOIN fac_tracking mldafm
             ON meld.mld_key = mldafm.fac_tracking_refkey
                AND mldafm.fac_srtnotificatie_key = 22
          LEFT JOIN fac_tracking mldver
             ON meld.mld_key = mldver.fac_tracking_refkey
                AND mldver.fac_srtnotificatie_key = 29
    WHERE mldafm.fac_tracking_datum IS NULL
          OR mldafm.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY');

/* Formatted on 2-12-2010 15:08:18 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_opdr_actual
(
   mld_key,
   opdr_volgnr,
   opdr_key,
   opdr_oms,
   opdr_opm,
   opdr_status_key,
   opdr_uv_key,
   ordnew_date,
   ord_fiat_date,                              -- laatste ordfno danwel ordfok
   fiatteur_userkey,                                       -- laatste fiatteur
   ord_verz_date,
   ordacp_date,
   ordcan_date,                                  -- ordcan of ordrej of beide?
   ordafm_date,
   ordver_date
)
AS
   SELECT opdr.mld_key,
          opdr.volgnr,
          opdr.opdr_key,
          SUBSTR (opdr.opdr_oms, 1, 1000) opdr_oms,
          SUBSTR (opdr.opdr_opm, 1, 1000) opdr_opm,
          opdr.status_key,
          opdr.uv_key,
          ordnew.fac_tracking_datum,
          ord_fiat.fac_tracking_datum,
          ord_fiat.prs_perslid_key,
          opdr.verzonden,
          ordacp.fac_tracking_datum,
          ordcan.fac_tracking_datum,
          ordafm.fac_tracking_datum,
          ordver.fac_tracking_datum
     FROM (SELECT o.mld_melding_key mld_key,
                  o.mld_opdr_bedrijfopdr_volgnr volgnr,
                  o.mld_opdr_key opdr_key,
                  o.mld_opdr_omschrijving opdr_oms,
                  o.mld_opdr_opmerking opdr_opm,
                  o.mld_statusopdr_key status_key,
                  o.mld_uitvoerende_keys uv_key,
                  o.mld_opdr_verzonden verzonden
             FROM mld_opdr o) opdr
          LEFT JOIN fac_tracking mldafm
             ON opdr.mld_key = mldafm.fac_tracking_refkey
                AND mldafm.fac_srtnotificatie_key = 22
          LEFT JOIN fac_tracking ordnew
             ON opdr.opdr_key = ordnew.fac_tracking_refkey
                AND ordnew.fac_srtnotificatie_key = 165
          LEFT JOIN (SELECT t.fac_tracking_refkey, t.fac_tracking_datum, t.prs_perslid_key
                       FROM fac_tracking t
                      WHERE t.fac_srtnotificatie_key IN (167, 168)
                            AND t.fac_tracking_key IN
                                     (SELECT MAX (fac_tracking_key)
                                        FROM fac_tracking
                                       WHERE fac_srtnotificatie_key IN (167, 168)
                                             AND fac_tracking_refkey = t.fac_tracking_refkey))
                    ord_fiat
             ON opdr.opdr_key = ord_fiat.fac_tracking_refkey
          LEFT JOIN fac_tracking ordacp
             ON opdr.opdr_key = ordacp.fac_tracking_refkey
                AND ordacp.fac_srtnotificatie_key = 186
          LEFT JOIN fac_tracking ordcan
             ON opdr.opdr_key = ordcan.fac_tracking_refkey
                AND ordcan.fac_srtnotificatie_key = 172
          LEFT JOIN fac_tracking ordafm
             ON opdr.opdr_key = ordafm.fac_tracking_refkey
                AND ordafm.fac_srtnotificatie_key = 30
          LEFT JOIN fac_tracking ordver
             ON opdr.opdr_key = ordver.fac_tracking_refkey
                AND ordver.fac_srtnotificatie_key = 170
    WHERE mldafm.fac_tracking_datum IS NULL
          OR mldafm.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -12), 'YYYY');

/* Formatted on 10-9-2014 11:12:48 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_select_nacht_werk (p_applname   IN VARCHAR2,
                                                    p_applrun    IN VARCHAR2)
AS
   CURSOR cmldcust05                                            -- CUST05-noti
   IS
      SELECT m.mld_melding_key mldkey,
             km.mld_kenmerkmelding_waarde mailto,
             sn.fac_srtnotificatie_code noti,
             REPLACE (sn.fac_srtnotificatie_oms,
                      '##STDMLD##',
                      sm.mld_stdmelding_omschrijving)
                subj
        FROM mld_melding m,
             mld_v_aanwezigkenmerkmelding km,
             mld_stdmelding sm,
             fac_srtnotificatie sn
       WHERE     m.mld_melding_status NOT IN (1, 5, 6)
             AND m.mld_melding_key = km.mld_melding_key
             AND km.mld_kenmerk_key = 5827               -- E-mail adres klant
             AND m.mld_stdmelding_key = sm.mld_stdmelding_key
             AND sm.mld_stdmelding_key = 2681   -- KCC-Klanttevr. Adviesdienst
             AND TRUNC (m.mld_melding_einddatum + 1) = TRUNC (SYSDATE)
             AND sn.fac_srtnotificatie_code = 'CUST05';

   -- Automatisch afmelden OPEN meldingen noti_dagen (indien gedefinieerd) na
   -- geplande einddatum en alleen als status=Geaccepteerd/Uitgegeven (en geen
   -- OPEN onderliggende opdrachten) of - ongeacht status - als factuurappr=1
   -- (speciale afspraak met JvD tbv. specifieke meldingen zoals onder KTO)!
   CURSOR cmldafmeld        -- auto-afmeld, maar alleen ZONDER OPEN OPDRACHTEN
   IS
      SELECT m.mld_melding_key mldkey, m.mld_melding_status mldstatus
        FROM mld_melding m, mld_stdmelding std, mld_disc_params mdp
       WHERE     m.mld_melding_status NOT IN (1, 5, 6)
             AND m.mld_stdmelding_key = std.mld_stdmelding_key
             AND std.mld_ins_discipline_key = mdp.mld_ins_discipline_key
             AND (m.mld_melding_status IN (4, 7)    -- Geaccepteerd/Uitgegeven
                  OR mdp.mld_disc_params_factuurappr = 1)        -- OBSCUUR!!!
             AND mdp.mld_disc_params_noti_dagen IS NOT NULL
             AND TRUNC (m.mld_melding_einddatum + 1)  + mdp.mld_disc_params_noti_dagen <= TRUNC (SYSDATE)
             AND NOT EXISTS
                   (SELECT 1
                      FROM mld_opdr o
                     WHERE o.mld_melding_key = m.mld_melding_key
                           AND o.mld_statusopdr_key IN (3, 4, 5, 8));

   CURSOR cart
   IS
      SELECT    '['
             || TO_CHAR (ra.res_rsv_ruimte_key)
             || '/'
             || TO_CHAR (ra.res_rsv_artikel_key)
             || '] '
                aanduiding,
             ra.res_rsv_ruimte_key,
             ra.res_rsv_artikel_key,
             ra.res_artikel_key
        FROM res_rsv_artikel ra
       WHERE     ra.res_status_bo_key = 2
             AND ra.res_rsv_artikel_dirtlevel = 0
             AND ra.res_rsv_artikel_verwijder IS NULL
             AND ra.res_rsv_artikel_levering <
                   TRUNC (ADD_MONTHS (SYSDATE, -3), 'Q');

   CURSOR cobj
   IS
      SELECT    '['
             || TO_CHAR (rd.res_rsv_ruimte_key)
             || '/'
             || TO_CHAR (rd.res_rsv_deel_key)
             || '] '
                aanduiding,
             rd.res_rsv_ruimte_key,
             rd.res_rsv_deel_key
        FROM res_rsv_deel rd
       WHERE     rd.res_status_bo_key = 2
             AND rd.res_rsv_ruimte_key IS NOT NULL     -- Geen parkeerplaatsen
             AND rd.res_rsv_deel_dirtlevel = 0
             AND rd.res_rsv_deel_verwijder IS NULL
             AND rd.res_rsv_deel_tot < TRUNC (ADD_MONTHS (SYSDATE, -3), 'Q');

   CURSOR cres
   IS
      SELECT '[' || TO_CHAR (rrr.res_rsv_ruimte_key) || '] ' aanduiding,
             rrr.res_rsv_ruimte_key
        FROM res_rsv_ruimte rrr
       WHERE     rrr.res_status_bo_key = 2
             AND rrr.res_ruimte_opstel_key IS NOT NULL   -- Geen "roomservice"
             AND rrr.res_rsv_ruimte_dirtlevel = 0
             AND rrr.res_rsv_ruimte_verwijder IS NULL
             AND rrr.res_rsv_ruimte_tot <
                   TRUNC (ADD_MONTHS (SYSDATE, -3), 'Q');

   -- RWSN#38216: Dezelfde nacht automatisch afmelden OPEN 'Zelfservice-IVB'-
   --             opdrachten incl. bovenliggende melding!
   CURSOR civbopdr
   IS
      SELECT mld_opdr_key, mld_melding_key, mld_opdr_bedrijfopdr_volgnr
        FROM mld_opdr
       WHERE     mld_typeopdr_key IN (9401, 8721) -- Zelfservice-IVB opdrachttype (A-key=8721)
             AND mld_statusopdr_key IN (4, 5, 8);

   v_errormsg          VARCHAR2 (1000);
   oracle_err_num      NUMBER;
   oracle_err_mes      VARCHAR2 (200);
   v_count             NUMBER;
   v_date              DATE;
   v_prijs             NUMBER (9, 2);
   v_kenmerklink_key   NUMBER (10);
   v_kenmerk_key       NUMBER (10);
   v_cur_perslid_key   NUMBER (10);
BEGIN
   v_count := 0;

   -- CUST05-noti op geplande einddatum (nav. adviesgesprek).
   FOR r IN cmldcust05
   LOOP
      BEGIN
         v_errormsg := 'Fout bij CUST05-noti [' || r.mldkey || '] ';

         fac.putnotificationsrtprio (NULL,
                                     NULL,
                                     r.noti,
                                     r.mldkey,
                                     r.subj,
                                     NULL,
                                     r.mailto,
                                     NULL,
                                     NULL,
                                     2,
                                     NULL);
         v_count := v_count + 1;
         COMMIT;
      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, 'E', v_errormsg, '');
            COMMIT;
      END;
   END LOOP;

   fac.writelog (p_applname, 'S',
                 'Aantal cust05-noti meldingen: ' || TO_CHAR (v_count), '');

   COMMIT;

   v_count := 0;

   -- Auto-afmeld meldingen noti-dagen na geplande einddatum.
   FOR r IN cmldafmeld
   LOOP
      BEGIN
         v_errormsg := 'Fout bij auto-afmeld [' || r.mldkey || '] ';

         -- Overgang van Ingezien naar Afgemeld is niet mogelijk, daarom - igv.
         -- 'direct klaar' (kan dan status Ingezien?) - eerst accepteren!
         IF (r.mldstatus = 3)                                     -- Ingezien?
         THEN
            MLD.setmeldingstatus (r.mldkey, 4, 4);            -- Geaccepteerd?
         END IF;

         MLD.setmeldingstatus (r.mldkey, 5, 4);                   -- Afgemeld?
         v_count := v_count + 1;
         COMMIT;
      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, 'E', v_errormsg, '');
            COMMIT;
      END;
   END LOOP;

   fac.writelog (p_applname, 'S',
                 'Aantal auto-afmeld meldingen: ' || TO_CHAR (v_count), '');

   COMMIT;

   -- Clear bevries-tabel met meldinggegevens
   DELETE FROM rwsn_mld_freeze;
   COMMIT;

   -- Clear bevries-tabel met opdrachtgegevens
   DELETE FROM rwsn_opdr_freeze;
   COMMIT;

   -- Bewaar MLD-gegevens om morgen "zware" rapportages op te baseren.
   INSERT INTO rwsn_mld_freeze (mld_key,
                                vakgroeptype_key,
                                vakgroeptype_prefix,
                                vakgroep_key,
                                vakgroep_oms,
                                stdmld_key,
                                stdmld_oms,
                                stdmld_groep,
                                melder_userkey,
                                melder_naam,
                                dienst,
                                mld_oms,
                                mld_opm,
                                mld_status_key,
                                mld_begin_date,
                                mld_sla,
                                sla_doorloop,
                                mld_plan_date,
                                plan_doorloop,
                                onderdeel,
                                lsu,
                                locatiecode,
                                mldnew_date,
                                mldnew_userkey,
                                mldnew_naam,
                                mlding_date,
                                mlding_userkey,
                                mlding_naam,
                                mldacp_date,
                                mldacp_userkey,
                                mldacp_naam,
                                mldrej_date,
                                mldrej_userkey,
                                mldrej_naam,
                                mldafm_date,
                                mldafm_userkey,
                                mldafm_naam,
                                mldver_date)
        SELECT mld_key,
               vakgroeptype_key,
               vakgroeptype_prefix,
               vakgroep_key,
               vakgroep_oms,
               stdmld_key,
               stdmld_oms,
               stdmld_groep,
               melder_userkey,
               melder_naam,
               dienst,
               mld_oms,
               mld_opm,
               mld_status_key,
               mld_begin_date,
               mld_sla,
               sla_doorloop,
               mld_plan_date,
               plan_doorloop,
               onderdeel,
               lsu,
               locatiecode,
               mldnew_date,
               mldnew_userkey,
               mldnew_naam,
               mlding_date,
               mlding_userkey,
               mlding_naam,
               mldacp_date,
               mldacp_userkey,
               mldacp_naam,
               mldrej_date,
               mldrej_userkey,
               mldrej_naam,
               mldafm_date,
               mldafm_userkey,
               mldafm_naam,
               mldver_date
          FROM rwsn_v_mld_actual
      ORDER BY mld_key;

   COMMIT;

   SELECT COUNT ( * ) INTO v_count FROM rwsn_mld_freeze;

   fac.writelog (p_applname, 'S',
                 'Aantal bevroren MLD-regels: ' || TO_CHAR (v_count), '');

   COMMIT;

   -- Bewaar OPDR-gegevens om morgen "zware" rapportages op te baseren.
   INSERT INTO rwsn_opdr_freeze (mld_key,
                                 opdr_volgnr,
                                 opdr_key,
                                 opdr_status_key,
                                 opdr_oms,
                                 opdr_opm,
                                 opdr_uv_key,
                                 ordnew_date,
                                 ord_fiat_date,
                                 fiatteur_userkey,
                                 ord_verz_date,
                                 ordacp_date,
                                 ordcan_date,
                                 ordafm_date,
                                 ordver_date)
        SELECT mld_key,
               opdr_volgnr,
               opdr_key,
               opdr_status_key,
               opdr_oms,
               opdr_opm,
               opdr_uv_key,
               ordnew_date,
               ord_fiat_date,
               fiatteur_userkey,
               ord_verz_date,
               ordacp_date,
               ordcan_date,
               ordafm_date,
               ordver_date
          FROM rwsn_v_opdr_actual
      ORDER BY mld_key, opdr_volgnr;

   COMMIT;

   SELECT COUNT ( * ) INTO v_count FROM rwsn_opdr_freeze;

   fac.writelog (p_applname, 'S',
                 'Aantal bevroren OPDR-regels: ' || TO_CHAR (v_count), '');

   COMMIT;

   -- controle taak om te kijken of de AAFM-communicatie loopt.
   BEGIN
      -- bedrijf aafm heeft key 5;
      -- kenmerk voor laatste synchronisatie heeft key 1;
      -- kijk eerst of het kenmerk uberhaupt bestaat.
      SELECT COUNT ( * )
        INTO v_count
        FROM prs_kenmerklink kl
       WHERE kl.prs_link_key = 5 AND prs_kenmerk_key = 1;

      IF v_count = 1
      THEN
         SELECT TO_DATE (prs_kenmerklink_waarde, 'yyyy-mm-dd hh24:mi:ss')
                   laatste_sync
           INTO v_date
           FROM prs_kenmerklink kl
          WHERE kl.prs_link_key = 5 AND prs_kenmerk_key = 1;

         IF SYSDATE - v_date > 1
         THEN
            fac.writelog (p_applname, 'E',
                          'AAFM-communicatie is laatste 24 uur niet uitgevoerd!', '');
         END IF;
      END IF;
   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',
                       'Controle AAFM-communicatie afgebroken!', v_errormsg);
   END;

   COMMIT;

   -- controle taak om te kijken of PutOrders loopt.
   BEGIN
      SELECT MAX (imp_log_datum)
        INTO v_date
        FROM imp_log
       WHERE imp_log_omschrijving LIKE '%PUTORDERS FINISHED%';

      IF SYSDATE - v_date > 1
      THEN
         fac.writelog (p_applname, 'E',
                       'PutOrders is laatste 24 uur niet gescheduled!', '');
      END IF;
   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',
                       'Controle PutOrders afgebroken!', v_errormsg);
   END;

   COMMIT;

   -- RWSN#30202 - Per 2014-Q4 alle artikelen, delen en ruimten voor de 1e van
   --              het lopende kwartaal automatisch afmelden!
   FOR rc IN cart
   LOOP
      BEGIN
         v_errormsg := 'Fout bepalen res_rsv_artikel_prijs.';

         SELECT res.getartikelprijs (rc.res_rsv_artikel_key)
           INTO v_prijs
           FROM DUAL;

         v_errormsg := 'Fout bijwerken res_rsv_artikel_prijs.';

         UPDATE res_rsv_artikel
            SET res_status_bo_key = 5,
                res_rsv_artikel_prijs = v_prijs,
                res_rsv_artikel_inkoopprijs =
                   (SELECT res_artikel_inkoopprijs
                      FROM res_artikel
                     WHERE res_artikel_key = rc.res_artikel_key),
                res_rsv_artikel_btw =
                   (SELECT res_artikel_btw
                      FROM res_artikel
                     WHERE res_artikel_key = rc.res_artikel_key)
          WHERE res_rsv_artikel_key = rc.res_rsv_artikel_key;

         fac.trackaction ('RESAFM',
                          rc.res_rsv_ruimte_key,
                          NULL,
                          NULL,
                          'Catering afgemeld');
      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, 'W',
                          rc.aanduiding || v_errormsg, 'Afmelden artikelen');
            COMMIT;
      END;
   END LOOP;

   COMMIT;

   FOR rc IN cobj
   LOOP
      BEGIN
         v_errormsg := 'Fout bepalen res_rsv_deel_prijs.';

         SELECT res.getdeelprijs (rc.res_rsv_deel_key) INTO v_prijs FROM DUAL;

         v_errormsg := 'Fout bijwerken res_rsv_deel_prijs.';

         UPDATE res_rsv_deel
            SET res_status_bo_key = 5, res_rsv_deel_prijs = v_prijs
          WHERE res_rsv_deel_key = rc.res_rsv_deel_key;

         fac.trackaction ('RESAFM',
                          rc.res_rsv_ruimte_key,
                          NULL,
                          NULL,
                          'Voorziening(en) afgemeld');
      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, 'W',
                          rc.aanduiding || v_errormsg, 'Afmelden delen');
            COMMIT;
      END;
   END LOOP;

   COMMIT;

   FOR rc IN cres
   LOOP
      BEGIN
         v_errormsg := 'Fout bepalen res_rsv_ruimte_prijs.';

         SELECT res.getruimteprijs (rc.res_rsv_ruimte_key)
           INTO v_prijs
           FROM DUAL;

         v_errormsg := 'Fout bijwerken res_rsv_ruimte_prijs.';

         UPDATE res_rsv_ruimte
            SET res_status_bo_key = 5, res_rsv_ruimte_prijs = v_prijs
          WHERE res_rsv_ruimte_key = rc.res_rsv_ruimte_key;

         fac.trackaction ('RESAFM',
                          rc.res_rsv_ruimte_key,
                          NULL,
                          NULL,
                          NULL);
      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, 'W',
                          rc.aanduiding || v_errormsg, 'Afmelden ruimten');
            COMMIT;
      END;
   END LOOP;

   COMMIT;

   -- RWSN#27015: Bijwerken vervangers van budgethouders=leidinggevenden in
   --             afdelingskenmerken 1020/1021/1022 (max. 3 op alfabetische
   --             volgorde)!
   FOR rc1
      IN (SELECT x.prs_afdeling_key,
                 x.prs_perslid_key budgethouder_key,
                 v1.prs_kenmerklink_key v1_kenmerklink_key,
                 v1.prs_kenmerk_key v1_kenmerk_key,
                 fac.safe_to_number (v1.prs_kenmerklink_waarde)
                    v1_perslid_key,
                 v2.prs_kenmerklink_key v2_kenmerklink_key,
                 v2.prs_kenmerk_key v2_kenmerk_key,
                 fac.safe_to_number (v2.prs_kenmerklink_waarde)
                    v2_perslid_key,
                 v3.prs_kenmerklink_key v3_kenmerklink_key,
                 v3.prs_kenmerk_key v3_kenmerk_key,
                 fac.safe_to_number (v3.prs_kenmerklink_waarde)
                    v3_perslid_key
            FROM (SELECT a.prs_afdeling_key, kp.prs_perslid_key
                    FROM prs_kostenplaats kp, prs_afdeling a
                   WHERE     a.prs_kostenplaats_key = kp.prs_kostenplaats_key
                         AND kp.prs_perslid_key IS NOT NULL
                         AND a.prs_afdeling_verwijder IS NULL
                         AND kp.prs_kostenplaats_verwijder IS NULL) x
                 LEFT JOIN                             -- 1020 = 1e vervanger!
                          prs_v_aanwezigkenmerklink v1
                    ON x.prs_afdeling_key = v1.prs_link_key
                       AND v1.prs_kenmerk_key = 1020
                 LEFT JOIN                             -- 1021 = 2e vervanger!
                          prs_v_aanwezigkenmerklink v2
                    ON x.prs_afdeling_key = v2.prs_link_key
                       AND v2.prs_kenmerk_key = 1021
                 LEFT JOIN                             -- 1022 = 3e vervanger!
                          prs_v_aanwezigkenmerklink v3
                    ON x.prs_afdeling_key = v3.prs_link_key
                       AND v3.prs_kenmerk_key = 1022)
   LOOP                        -- Alleen over afdelingen met een budgethouder!
      BEGIN
         FOR rc2
            IN (  SELECT x.vnr, v.prs_perslid_key_alt, v.prs_perslid_naam_full
                    FROM    (    SELECT LEVEL vnr
                                   FROM DUAL
                             CONNECT BY LEVEL <= 3) x
                         LEFT JOIN
                            (SELECT ROWNUM vnr,
                                    prs_perslid_key_alt,
                                    prs_perslid_naam_full
                               FROM (  SELECT c.prs_perslid_key_alt,
                                              pc.prs_perslid_naam_full
                                         FROM prs_collega c,
                                              fac_gebruikersgroep gg,
                                              prs_v_perslid_fullnames pc
                                        WHERE c.prs_perslid_key =
                                                 rc1.budgethouder_key
                                              AND c.prs_perslid_key_alt =
                                                    gg.prs_perslid_key
                                              AND gg.fac_groep_key = 1219
                                              AND c.prs_perslid_key_alt =
                                                    pc.prs_perslid_key
                                     ORDER BY 2)) v
                         ON x.vnr = v.vnr
                ORDER BY 1)
         LOOP           -- Altijd alfabetisch over 3 echte of lege vervangers!
            IF rc2.vnr = 1
            THEN
               v_kenmerklink_key := rc1.v1_kenmerklink_key;
               v_kenmerk_key := 1020;                          -- 1e vervanger
               v_cur_perslid_key := rc1.v1_perslid_key;
            ELSIF rc2.vnr = 2
            THEN
               v_kenmerklink_key := rc1.v2_kenmerklink_key;
               v_kenmerk_key := 1021;                          -- 2e vervanger
               v_cur_perslid_key := rc1.v2_perslid_key;
            ELSE                                                -- rc2.vnr = 3
               v_kenmerklink_key := rc1.v3_kenmerklink_key;
               v_kenmerk_key := 1022;                          -- 3e vervanger
               v_cur_perslid_key := rc1.v3_perslid_key;
            END IF;

            IF (rc2.prs_perslid_key_alt IS NOT NULL)
            THEN                                        -- Er is een vervanger
               IF (v_kenmerklink_key IS NULL)    -- Was geen vervanger->insert
               THEN
                  v_errormsg := 'Fout toevoegen vervanger-' || TO_CHAR (rc2.vnr);

                  INSERT INTO prs_kenmerklink (prs_link_key,
                                               prs_kenmerklink_niveau,
                                               prs_kenmerk_key,
                                               prs_kenmerklink_waarde)
                      VALUES (rc1.prs_afdeling_key,
                              'A',
                              v_kenmerk_key,
                              TO_CHAR (rc2.prs_perslid_key_alt));
               ELSIF (v_cur_perslid_key != rc2.prs_perslid_key_alt)
               THEN                            -- Was andere vervanger->update
                  v_errormsg := 'Fout bijwerken vervanger-' || TO_CHAR (rc2.vnr);

                  UPDATE prs_kenmerklink
                     SET prs_kenmerklink_waarde =
                            TO_CHAR (rc2.prs_perslid_key_alt)
                   WHERE prs_kenmerklink_key = v_kenmerklink_key;
               END IF;
            ELSE                                       -- Er is geen vervanger
               IF (v_kenmerklink_key IS NOT NULL) -- Was wel vervanger->delete
               THEN
                  v_errormsg := 'Fout verwijderen vervanger-' || TO_CHAR (rc2.vnr);

                  DELETE FROM prs_kenmerklink WHERE prs_kenmerklink_key = v_kenmerklink_key;
               END IF;
            END IF;
         END LOOP;

         COMMIT;
      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', v_errormsg, '');
            COMMIT;
      END;
   END LOOP;

   COMMIT;

   -- RWSN#27015: Toevoegen nieuwe BH-vervangers aan 1219=ICT:Fiattering namens.
   INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
      SELECT DISTINCT 1219, c.prs_perslid_key_alt
        FROM prs_kostenplaats kp,
             prs_afdeling a,
             prs_v_afdeling_boom ab,
             prs_collega c,
             prs_v_aanwezigperslid pl,
             prs_v_aanwezigperslid pv
       WHERE     kp.prs_kostenplaats_verwijder IS NULL
             AND kp.prs_kostenplaats_key = a.prs_kostenplaats_key   -- PRS-KPN
             AND a.prs_afdeling_verwijder IS NULL
             AND a.prs_afdeling_key = ab.prs_afdeling_key
             AND ab.prs_afdeling_key1 IN        -- Afdeling onder Troux-regime
                      (SELECT fac.safe_to_number (fac_usrdata_code)
                         FROM fac_usrdata
                        WHERE fac_usrtab_key = 2)
             AND kp.prs_perslid_key = c.prs_perslid_key    -- BH met collega's
             AND c.prs_perslid_key = pl.prs_perslid_key              -- Actief
             AND c.prs_perslid_key_alt = pv.prs_perslid_key          -- Actief
             AND NOT EXISTS                    -- Nog niet in autorisatiegroep
                   (SELECT 1
                      FROM fac_gebruikersgroep
                     WHERE fac_groep_key = 1219       -- ICT:Fiattering namens
                           AND prs_perslid_key = c.prs_perslid_key_alt)
      UNION
      SELECT DISTINCT 1219, c.prs_perslid_key_alt
        FROM prs_kostenplaatsgrp kpg,
             prs_collega c,
             prs_v_aanwezigperslid pl,
             prs_v_aanwezigperslid pv
       WHERE     kpg.prs_perslid_key = c.prs_perslid_key   -- BH met collega's
             AND c.prs_perslid_key = pl.prs_perslid_key              -- Actief
             AND c.prs_perslid_key_alt = pv.prs_perslid_key          -- Actief
             AND NOT EXISTS                    -- Nog niet in autorisatiegroep
                   (SELECT 1
                      FROM fac_gebruikersgroep
                     WHERE fac_groep_key = 1219       -- ICT:Fiattering namens
                           AND prs_perslid_key = c.prs_perslid_key_alt);

   COMMIT;

   -- RWSN#27015: Verwijderen oude BH-vervangers uit 1219=ICT:Fiattering namens.
   DELETE FROM fac_gebruikersgroep gg
         WHERE gg.fac_groep_key = 1219                -- ICT:Fiattering namens
               AND NOT EXISTS
                     (SELECT 1
                        FROM prs_collega c, prs_kostenplaats kp
                       WHERE c.prs_perslid_key_alt = gg.prs_perslid_key
                             AND c.prs_perslid_key = kp.prs_perslid_key)
               AND NOT EXISTS
                     (SELECT 1
                        FROM prs_collega c, prs_kostenplaatsgrp kpg
                       WHERE c.prs_perslid_key_alt = gg.prs_perslid_key
                             AND c.prs_perslid_key = kpg.prs_perslid_key);

   COMMIT;

   -- RWSN#27015: Bijwerken profielen van alle (aanwezige) medewerkers zonder
   --             een profiel of met een profiel_key <= 4!
   UPDATE prs_perslid p
      SET p.fac_profiel_key = 1
    WHERE p.prs_perslid_verwijder IS NULL
          AND COALESCE (p.fac_profiel_key, 0) < 1;

   UPDATE prs_perslid p
      SET p.fac_profiel_key = 2
    WHERE p.prs_perslid_verwijder IS NULL
          AND COALESCE (p.fac_profiel_key, 0) < 2
          AND EXISTS
                (SELECT 1
                   FROM ins_kenmerkdeel kd, ins_kenmerk k
                  WHERE kd.ins_kenmerkdeel_waarde = TO_CHAR (p.prs_perslid_key)
                        AND kd.ins_kenmerkdeel_verwijder IS NULL
                        AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                        AND k.ins_srtkenmerk_key BETWEEN 103 AND 200);

   UPDATE prs_perslid p
      SET p.fac_profiel_key = 1
    WHERE p.prs_perslid_verwijder IS NULL AND p.fac_profiel_key = 2
          AND NOT EXISTS
                (SELECT 1
                   FROM ins_kenmerkdeel kd, ins_kenmerk k
                  WHERE kd.ins_kenmerkdeel_waarde = TO_CHAR (p.prs_perslid_key)
                        AND kd.ins_kenmerkdeel_verwijder IS NULL
                        AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                        AND k.ins_srtkenmerk_key BETWEEN 103 AND 200);

   UPDATE prs_perslid p
      SET p.fac_profiel_key = 3
    WHERE p.prs_perslid_verwijder IS NULL
          AND COALESCE (p.fac_profiel_key, 0) < 3
          AND (EXISTS
                  (SELECT 1
                     FROM prs_kostenplaats
                    WHERE prs_perslid_key = p.prs_perslid_key
                          AND prs_kostenplaats_verwijder IS NULL)
               OR EXISTS
                    (SELECT 1
                       FROM prs_collega c,
                            fac_gebruikersgroep gg,
                            prs_kostenplaats kp
                      WHERE     c.prs_perslid_key_alt = p.prs_perslid_key
                            AND c.prs_perslid_key_alt = gg.prs_perslid_key
                            AND gg.fac_groep_key = 1219
                            AND c.prs_perslid_key = kp.prs_perslid_key));

   UPDATE prs_perslid p
      SET p.fac_profiel_key = 1
    WHERE p.prs_perslid_verwijder IS NULL AND p.fac_profiel_key = 3
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_kostenplaats
                  WHERE prs_perslid_key = p.prs_perslid_key
                        AND prs_kostenplaats_verwijder IS NULL)
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_collega c,
                        fac_gebruikersgroep gg,
                        prs_kostenplaats kp
                  WHERE     c.prs_perslid_key_alt = p.prs_perslid_key
                        AND c.prs_perslid_key_alt = gg.prs_perslid_key
                        AND gg.fac_groep_key = 1219
                        AND c.prs_perslid_key = kp.prs_perslid_key);

   UPDATE prs_perslid p
      SET p.fac_profiel_key = 4
    WHERE p.prs_perslid_verwijder IS NULL
          AND COALESCE (p.fac_profiel_key, 0) < 4
          AND (EXISTS (SELECT 1
                         FROM prs_kostenplaatsgrp
                        WHERE prs_perslid_key = p.prs_perslid_key)
               OR EXISTS
                    (SELECT 1
                       FROM prs_collega c,
                            fac_gebruikersgroep gg,
                            prs_kostenplaatsgrp kpg
                      WHERE     c.prs_perslid_key_alt = p.prs_perslid_key
                            AND c.prs_perslid_key_alt = gg.prs_perslid_key
                            AND gg.fac_groep_key = 1219
                            AND c.prs_perslid_key = kpg.prs_perslid_key));

   UPDATE prs_perslid p
      SET p.fac_profiel_key = 1
    WHERE     p.prs_perslid_verwijder IS NULL
          AND p.fac_profiel_key = 4
          AND NOT EXISTS (SELECT 1
                            FROM prs_kostenplaatsgrp
                           WHERE prs_perslid_key = p.prs_perslid_key)
          AND NOT EXISTS
                (SELECT 1
                   FROM prs_collega c,
                        fac_gebruikersgroep gg,
                        prs_kostenplaatsgrp kpg
                  WHERE     c.prs_perslid_key_alt = p.prs_perslid_key
                        AND c.prs_perslid_key_alt = gg.prs_perslid_key
                        AND gg.fac_groep_key = 1219
                        AND c.prs_perslid_key = kpg.prs_perslid_key);

   COMMIT;

   -- RWSN#27015: Toekennen/afnemen Beheerder-autorisatiegroep (key=2661)!
   INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
      SELECT 2661, p.prs_perslid_key
        FROM prs_perslid p
       WHERE p.prs_perslid_verwijder IS NULL AND p.fac_profiel_key = 2
             AND EXISTS
                   (SELECT 1
                      FROM ins_kenmerkdeel kd, ins_kenmerk k
                     WHERE kd.ins_kenmerkdeel_waarde = TO_CHAR (p.prs_perslid_key)
                           AND kd.ins_kenmerkdeel_verwijder IS NULL
                           AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                           AND k.ins_srtkenmerk_key BETWEEN 103 AND 200)
             AND NOT EXISTS
                   (SELECT 1
                      FROM fac_gebruikersgroep
                     WHERE prs_perslid_key = p.prs_perslid_key
                           AND fac_groep_key = 2661);

   DELETE FROM fac_gebruikersgroep gg
         WHERE gg.fac_groep_key = 2661
               AND NOT EXISTS
                     (SELECT 1
                        FROM ins_kenmerkdeel kd, ins_kenmerk k
                       WHERE kd.ins_kenmerkdeel_waarde = TO_CHAR (gg.prs_perslid_key)
                             AND kd.ins_kenmerkdeel_verwijder IS NULL
                             AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                             AND k.ins_srtkenmerk_key BETWEEN 103 AND 200);

   COMMIT;

   v_count := 0;

   -- Auto-afmeld 'Zelfservice-IVB'-opdrachten incl. bovenliggende melding!
   FOR r IN civbopdr
   LOOP
      BEGIN
         v_errormsg := 'Fout bij auto-afmeld [' || r.mld_melding_key || '] ';

         MLD.setopdrachtstatus (r.mld_opdr_key, 6, 4);            -- Facilitor
         MLD.updatemeldingstatus (r.mld_melding_key, 1, 4);       -- Facilitor
         v_count := v_count + 1;
         COMMIT;
      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, 'E', v_errormsg, '');
            COMMIT;
      END;
   END LOOP;

   fac.writelog (p_applname, 'S',
                 'Aantal auto-afmeld Zelfservice-IVB opdrachten: ' || TO_CHAR (v_count), '');

   COMMIT;
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 NACHT_WERK afgebroken!', v_errormsg);
      COMMIT;
END;
/


/* Formatted on 24-6-2010 12:55:55 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_kenmerksoorten
(
   fclt_f_module,
   hide_f_key,
   key,
   omschrijving,
   fclt_f_kenmerktype,
   eenheid,
   systeemkenmerk,
   lengte,
   decimalen,
   minimum,
   maximum,
   kenmerkdomein
)
AS
   SELECT   'ALG' module,
            k.alg_kenmerk_key,
            TO_CHAR (k.alg_kenmerk_key) key,
            k.alg_kenmerk_omschrijving omschrijving,
            k.alg_kenmerk_kenmerktype kenmerktype,
            k.alg_kenmerk_dimensie eenheid,
            TO_CHAR (k.alg_kenmerk_systeem) systeemkenmerk,
            TO_CHAR (k.alg_kenmerk_lengte) lengte,
            TO_CHAR (k.alg_kenmerk_dec) decimalen,
            TO_CHAR (k.alg_kenmerk_nmin),
            TO_CHAR (k.alg_kenmerk_nmax),
            rk.fac_kenmerkdomein_omschrijving kenmerkdomein
     FROM   alg_kenmerk k, fac_kenmerkdomein rk
    WHERE   k.alg_kenmerk_verwijder IS NULL
            AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key(+)
   UNION ALL
   SELECT   'CNT' module,
            k.cnt_srtkenmerk_key,
            TO_CHAR (k.cnt_srtkenmerk_key) srtkey,
            k.cnt_srtkenmerk_omschrijving omschrijving,
            k.cnt_srtkenmerk_kenmerktype kenmerktype,
            k.cnt_srtkenmerk_dimensie eenheid,
            TO_CHAR (k.cnt_srtkenmerk_systeem) systeemkenmerk,
            TO_CHAR (k.cnt_srtkenmerk_lengte) lengte,
            TO_CHAR (k.cnt_srtkenmerk_dec) decimalen,
            TO_CHAR (k.cnt_srtkenmerk_nmin),
            TO_CHAR (k.cnt_srtkenmerk_nmax),
            rk.fac_kenmerkdomein_omschrijving kenmerkdomein
     FROM   cnt_srtkenmerk k, fac_kenmerkdomein rk
    WHERE   k.cnt_srtkenmerk_verwijder IS NULL
            AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key(+)
   UNION ALL
   SELECT   'INS' module,
            k.ins_srtkenmerk_key,
            TO_CHAR (k.ins_srtkenmerk_key) srtkey,
            k.ins_srtkenmerk_omschrijving omschrijving,
            k.ins_srtkenmerk_kenmerktype kenmerktype,
            k.ins_srtkenmerk_dimensie eenheid,
            TO_CHAR (k.ins_srtkenmerk_systeem) systeemkenmerk,
            TO_CHAR (k.ins_srtkenmerk_lengte) lengte,
            TO_CHAR (k.ins_srtkenmerk_dec) decimalen,
            TO_CHAR (k.ins_srtkenmerk_nmin),
            TO_CHAR (k.ins_srtkenmerk_nmax),
            rk.fac_kenmerkdomein_omschrijving kenmerkdomein
     FROM   ins_v_aanwezigsrtkenmerk k, fac_kenmerkdomein rk
    WHERE   k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key(+)
   UNION ALL
   SELECT   'MLD' module,
            k.mld_srtkenmerk_key,
            TO_CHAR (k.mld_srtkenmerk_key) srtkey,
            k.mld_srtkenmerk_omschrijving omschrijving,
            k.mld_srtkenmerk_kenmerktype kenmerktype,
            k.mld_srtkenmerk_dimensie eenheid,
            TO_CHAR (k.mld_srtkenmerk_systeem) systeemkenmerk,
            TO_CHAR (k.mld_srtkenmerk_lengte) lengte,
            TO_CHAR (k.mld_srtkenmerk_dec) decimalen,
            TO_CHAR (k.mld_srtkenmerk_nmin),
            TO_CHAR (k.mld_srtkenmerk_nmax),
            rk.fac_kenmerkdomein_omschrijving kenmerkdomein
     FROM   mld_srtkenmerk k, fac_kenmerkdomein rk
    WHERE   k.mld_srtkenmerk_verwijder IS NULL
            AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key(+)
   UNION ALL
   SELECT   'PRS' module,
            k.prs_kenmerk_key,
            TO_CHAR (k.prs_kenmerk_key) srtkey,
            k.prs_kenmerk_omschrijving omschrijving,
            k.prs_kenmerk_kenmerktype kenmerktype,
            k.prs_kenmerk_dimensie eenheid,
            TO_CHAR (k.prs_kenmerk_systeem) systeemkenmerk,
            TO_CHAR (k.prs_kenmerk_lengte) lengte,
            TO_CHAR (k.prs_kenmerk_dec) decimalen,
            TO_CHAR (k.prs_kenmerk_nmin),
            TO_CHAR (k.prs_kenmerk_nmax),
            rk.fac_kenmerkdomein_omschrijving kenmerkdomein
     FROM   prs_v_aanwezigkenmerk k, fac_kenmerkdomein rk
    WHERE   k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key(+)
   UNION ALL
   SELECT   'RES' module,
            k.res_srtkenmerk_key,
            TO_CHAR (k.res_srtkenmerk_key) srtkey,
            k.res_srtkenmerk_omschrijving omschrijving,
            k.res_srtkenmerk_kenmerktype kenmerktype,
            NULL eenheid,
            TO_CHAR (k.res_srtkenmerk_systeem) systeemkenmerk,
            TO_CHAR (k.res_srtkenmerk_lengte) lengte,
            TO_CHAR (k.res_srtkenmerk_dec) decimalen,
            TO_CHAR (k.res_srtkenmerk_nmin),
            TO_CHAR (k.res_srtkenmerk_nmax),
            rk.fac_kenmerkdomein_omschrijving kenmerkdomein
     FROM   res_srtkenmerk k, fac_kenmerkdomein rk
    WHERE   k.res_srtkenmerk_verwijder IS NULL
            AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key(+);

/* Formatted on 24-6-2010 14:24:34 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_kenmerken
(
   fclt_f_module,
   hide_f_key,
   key,
   fclt_f_kenmerksoort,
   fclt_f_niveau,
   fclt_f_afhankelijk_van,
   volgnr,
   verplicht,
   niet_wijzigbaar,
   defaultwaarde
)
AS
   SELECT   'ALG' module,
            k.alg_kenmerk_key,
            TO_CHAR (k.alg_kenmerk_key) key,
            k.alg_kenmerk_omschrijving kenmerksoort,
            k.alg_kenmerk_niveau niveau,
            NULL afhankelijk_van,
            TO_CHAR (k.alg_kenmerk_volgnr) volgnummer,
            NULL verplicht,
            NULL niet_wijzigbaar,
            k.alg_kenmerk_default defaultwaarde
     FROM   alg_kenmerk k
    WHERE   k.alg_kenmerk_verwijder IS NULL
   UNION ALL
   SELECT   'CNT' module,
            k.cnt_kenmerk_key,
            TO_CHAR (k.cnt_kenmerk_key) key,
            sk.cnt_srtkenmerk_omschrijving kenmerksoort,
            k.cnt_kenmerk_niveau niveau,
            (SELECT   d.ins_discipline_omschrijving
               FROM   cnt_discipline d
              WHERE   d.ins_discipline_key = k.cnt_srtcontract_key
                      AND d.ins_discipline_verwijder IS NULL)
               afhankelijk_van,
            TO_CHAR (k.cnt_kenmerk_volgnummer) volgnummer,
            TO_CHAR (k.cnt_kenmerk_verplicht) verplicht,
            TO_CHAR (k.cnt_kenmerk_toonbaar) niet_wijzigbaar,
            k.cnt_kenmerk_default defaultwaarde
     FROM   cnt_kenmerk k, cnt_srtkenmerk sk
    WHERE       k.cnt_kenmerk_verwijder IS NULL
            AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
            AND sk.cnt_srtkenmerk_verwijder IS NULL
   UNION ALL
   SELECT   'INS' module,
            k.ins_kenmerk_key,
            TO_CHAR (k.ins_kenmerk_key) key,
            sk.ins_srtkenmerk_omschrijving kenmerksoort,
            k.ins_kenmerk_niveau niveau,
            DECODE (
               k.ins_kenmerk_niveau,
               'D',
               (SELECT   d.ins_discipline_omschrijving
                  FROM   ins_discipline d
                 WHERE   d.ins_discipline_key = k.ins_srtinstallatie_key
                         AND d.ins_discipline_verwijder IS NULL),
               'G',
               (SELECT      d.ins_discipline_omschrijving
                         || ' - '
                         || sg.ins_srtgroep_omschrijving
                  FROM   ins_v_aanwezigsrtgroep sg, ins_discipline d
                 WHERE       sg.ins_srtgroep_key = k.ins_srtinstallatie_key
                         AND sg.ins_discipline_key = d.ins_discipline_key
                         AND d.ins_discipline_verwijder IS NULL),
               (SELECT      d.ins_discipline_omschrijving
                         || ' - '
                         || sg.ins_srtgroep_omschrijving
                         || ' - '
                         || sd.ins_srtdeel_omschrijving
                  FROM   ins_v_aanwezigsrtdeel sd,
                         ins_v_aanwezigsrtgroep sg,
                         ins_discipline d
                 WHERE       sd.ins_srtdeel_key = k.ins_srtinstallatie_key
                         AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                         AND sg.ins_discipline_key = d.ins_discipline_key
                         AND d.ins_discipline_verwijder IS NULL)
            )
               afhankelijk_van,
            TO_CHAR (k.ins_kenmerk_volgnummer) volgnummer,
            NULL verplicht,
            NULL niet_wijzigbaar,
            k.ins_kenmerk_default defaultwaarde
     FROM   ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk
    WHERE   k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
   UNION ALL
   SELECT   'MLD' module,
            k.mld_kenmerk_key,
            TO_CHAR (k.mld_kenmerk_key) key,
            sk.mld_srtkenmerk_omschrijving kenmerksoort,
            k.mld_kenmerk_niveau niveau,
            DECODE (
               k.mld_kenmerk_niveau,
               'D',
               (SELECT   d.ins_discipline_omschrijving
                  FROM   mld_discipline d
                 WHERE   d.ins_discipline_key = k.mld_stdmelding_key
                         AND d.ins_discipline_verwijder IS NULL),
               'S',
               (SELECT      d.ins_discipline_omschrijving
                         || ' - '
                         || sm.mld_stdmelding_omschrijving
                  FROM   mld_stdmelding sm, mld_discipline d
                 WHERE       sm.mld_stdmelding_key = k.mld_stdmelding_key
                         AND sm.mld_ins_discipline_key = d.ins_discipline_key
                         AND d.ins_discipline_verwijder IS NULL),
               (SELECT   t.mld_typeopdr_omschrijving
                  FROM   mld_typeopdr t
                 WHERE   t.mld_typeopdr_key = k.mld_typeopdr_key)
            )
               afhankelijk_van,
            TO_CHAR (k.mld_kenmerk_volgnummer) volgnummer,
            TO_CHAR (k.mld_kenmerk_verplicht) verplicht,
            TO_CHAR (k.mld_kenmerk_toonbaar) niet_wijzigbaar,
            k.mld_kenmerk_default defaultwaarde
     FROM   mld_kenmerk k, mld_srtkenmerk sk
    WHERE       k.mld_kenmerk_verwijder IS NULL
            AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
            AND sk.mld_srtkenmerk_verwijder IS NULL
   UNION ALL
   SELECT   'PRS' module,
            k.prs_kenmerk_key,
            TO_CHAR (k.prs_kenmerk_key) key,
            k.prs_kenmerk_omschrijving omschrijving,
            k.prs_kenmerk_niveau niveau,
            NULL afhankelijk_van,
            TO_CHAR (k.prs_kenmerk_volgnr) volgnummer,
            NULL verplicht,
            NULL niet_wijzigbaar,
            k.prs_kenmerk_default defaultwaarde
     FROM   prs_v_aanwezigkenmerk k
   UNION ALL
   SELECT   'RES' module,
            k.res_kenmerk_key,
            TO_CHAR (k.res_kenmerk_key) key,
            sk.res_srtkenmerk_omschrijving kenmerksoort,
            k.res_kenmerk_niveau niveau,
            (SELECT   a.res_activiteit_omschrijving
               FROM   res_activiteit a
              WHERE   a.res_activiteit_verwijder IS NULL
                      AND a.res_activiteit_key = k.res_activiteit_key)
               afhankelijk_van,
            TO_CHAR (k.res_kenmerk_volgnummer) volgnummer,
            TO_CHAR (k.res_kenmerk_verplicht) verplicht,
            NULL niet_wijzigbaar,
            k.res_kenmerk_default defaultwaarde
     FROM   res_kenmerk k, res_srtkenmerk sk
    WHERE       k.res_kenmerk_verwijder IS NULL
            AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key
            AND sk.res_srtkenmerk_verwijder IS NULL;

/* Formatted on 19-8-2011 16:04:10 (QP5 v5.115.810.9015) */
-- TODO1: Welke precieze contractgegevens/kolommen?
-- TODO2: Alleen actieve of ook verlopen?
CREATE OR REPLACE VIEW rwsn_v_rap_cntnotities
(
   nummer,
   fclt_f_zaaksoort,
   beschrijving,
   fclt_f_mantel,
   --omschrijving,
   --ingangsdatum,
   --rappeldatum,
   --opzegdatum,
   einddatum,
   fclt_f_dienst,
   --eigenaar,
   --beheerder,
   fclt_f_contractant,
   fclt_f_contracttype,
   fclt_f_contractstatus,
   fclt_f_contractfase,
   fclt_f_opdrachtgever,
   fclt_f_inkoopsegment,
   notitie_op,
   notitie_door,
   notitie,
   fclt_3d_user_key
)
AS
   SELECT   basis.nummer,
            basis.contractsoort,
            basis.beschrijving,
            DECODE (basis.contractsoort, 'ZROK', basis.nummer, basis.mantel),
            --basis.omschrijving,
            --TO_CHAR (basis.ingangsdatum, 'dd-mm-yyyy'),
            --TO_CHAR (basis.rappeldatum, 'dd-mm-yyyy'),
            --TO_CHAR (basis.opzegdatum, 'dd-mm-yyyy'),
            TO_CHAR (basis.einddatum, 'dd-mm-yyyy'),
            --basis.eig_afdeling,
            basis.eig_dienst,
            --basis.beheerder,
            basis.prs_bedrijf_naam,
            basis.contracttype,
            basis.contractstatus,
            basis.contractfase,
            basis.opdrachtgever,
            basis.inkoopsegment,
            TO_CHAR (notitie.aanmaak, 'dd-mm-yyyy hh24:mi:ss'),
            notitie.schrijver,
            notitie.omschrijving,
            basis.beheerder_key
     FROM      (SELECT   c.cnt_contract_key,
                         c.cnt_contract_nummer_intern nummer,
                         cd.ins_discipline_omschrijving contractsoort,
                         c.cnt_contract_omschrijving beschrijving,
                         mc.cnt_contract_nummer_intern mantel,
                         c.cnt_contract_document omschrijving,
                         c.cnt_contract_looptijd_van ingangsdatum,
                         cnt.cnt_getrappeldatum (c.cnt_contract_key)
                            rappeldatum,
                         cnt.cnt_getopzegdatum (c.cnt_contract_key)
                            opzegdatum,
                         c.cnt_contract_looptijd_tot einddatum,
                            a1.prs_afdeling_upper
                         || '-'
                         || a1.prs_afdeling_omschrijving
                            eig_afdeling,
                            a2.prs_afdeling_upper
                         || '-'
                         || a2.prs_afdeling_omschrijving
                            eig_dienst,
                         c.prs_perslid_key_beh beheerder_key,
                         p.prs_perslid_naam_full beheerder,
                         b.prs_bedrijf_naam,
                         (SELECT   kc.cnt_kenmerkcontract_waarde
                            FROM   cnt_kenmerkcontract kc, cnt_kenmerk k
                           WHERE   kc.cnt_contract_key = c.cnt_contract_key
                                   AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                   AND k.cnt_srtkenmerk_key = 1
                                   AND kc.cnt_kenmerkcontract_verwijder IS NULL)
                            contracttype,
                         (SELECT   kc.cnt_kenmerkcontract_waarde
                            FROM   cnt_kenmerkcontract kc, cnt_kenmerk k
                           WHERE   kc.cnt_contract_key = c.cnt_contract_key
                                   AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                   AND k.cnt_srtkenmerk_key = 22
                                   AND kc.cnt_kenmerkcontract_verwijder IS NULL)
                            contractstatus,
                         (SELECT   kc.cnt_kenmerkcontract_waarde
                            FROM   cnt_kenmerkcontract kc, cnt_kenmerk k
                           WHERE   kc.cnt_contract_key = c.cnt_contract_key
                                   AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                   AND k.cnt_srtkenmerk_key = 23
                                   AND kc.cnt_kenmerkcontract_verwijder IS NULL)
                            contractfase,
                         (SELECT   kc.cnt_kenmerkcontract_waarde
                            FROM   cnt_kenmerkcontract kc, cnt_kenmerk k
                           WHERE   kc.cnt_contract_key = c.cnt_contract_key
                                   AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                   AND k.cnt_srtkenmerk_key = 24
                                   AND kc.cnt_kenmerkcontract_verwijder IS NULL)
                            opdrachtgever,
                         (SELECT   kc.cnt_kenmerkcontract_waarde
                            FROM   cnt_kenmerkcontract kc, cnt_kenmerk k
                           WHERE   kc.cnt_contract_key = c.cnt_contract_key
                                   AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                                   AND k.cnt_srtkenmerk_key = 26
                                   AND kc.cnt_kenmerkcontract_verwijder IS NULL)
                            inkoopsegment
                  FROM   cnt_v_aanwezigcontract c,
                         cnt_v_aanwezigdiscipline cd,
                         cnt_v_aanwezigcontract mc,
                         prs_afdeling a1,
                         prs_v_afdeling_boom ab,
                         prs_afdeling a2,
                         prs_v_perslid_fullnames p,
                         prs_bedrijf b
                 WHERE   c.ins_discipline_key = cd.ins_discipline_key
                         AND c.cnt_contract_mantel_key =
                               mc.cnt_contract_key(+)
                         AND c.prs_afdeling_key_eig = a1.prs_afdeling_key
                         AND c.prs_afdeling_key_eig = ab.prs_afdeling_key
                         AND ab.prs_afdeling_key1 = a2.prs_afdeling_key
                         AND c.prs_perslid_key_beh = p.prs_perslid_key
                         AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) basis
            LEFT JOIN
               (SELECT   cn.cnt_contract_key,
                         cn.cnt_contract_note_aanmaak aanmaak,
                         p.prs_perslid_naam_full schrijver,
                         cn.cnt_contract_note_omschrijving omschrijving
                  FROM   cnt_contract_note cn, prs_v_perslid_fullnames_all p
                 WHERE   cn.prs_perslid_key = p.prs_perslid_key) notitie
            ON basis.cnt_contract_key = notitie.cnt_contract_key;

/* Formatted on 5-6-2012 16:32:48 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_import_cmdb (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);              -- Input line
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER;
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_ongeldig                      NUMBER (1);
   v_aanduiding                    VARCHAR (200);
   -- De importvelden:
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   v_ins_srtgroep_omschrijving     VARCHAR2 (255);                      -- C60
   v_ins_srtdeel_omschrijving      VARCHAR2 (255);                     -- C100
   v_ins_deel_omschrijving         VARCHAR2 (255);                      -- C60
   v_prs_perslid_email             VARCHAR2 (255);                      -- C30
   v_merk                          VARCHAR2 (255);                      -- C50
   v_type                          VARCHAR2 (255);                      -- C50
   v_serienummer                   VARCHAR2 (255);                      -- C50

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

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   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_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_prs_perslid_email);
         fac.imp_getfield (v_newline, c_delim, v_merk);
         fac.imp_getfield (v_newline, c_delim, v_type);
         fac.imp_getfield (v_newline, c_delim, v_serienummer);

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

         -- 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) = 'OBJECTDISCIPLINE'
               AND UPPER (v_ins_srtgroep_omschrijving) = 'OBJECTGROEP'
               AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORT'
               AND UPPER (v_ins_deel_omschrijving) = 'REGISTRATIENUMMER'
               AND UPPER (v_prs_perslid_email) = 'EMAIL'
               AND UPPER (v_merk) = 'MERK'
               AND UPPER (v_type) = 'TYPE'
               AND UPPER (v_serienummer) = 'SERIENUMMER'
            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 := '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 := 'Email ongeldig; ongedefinieerd of te lang';
            v_prs_perslid_email := TRIM (v_prs_perslid_email);

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

            --
            v_errormsg := 'Merk ongeldig';
            v_merk := TRIM (v_merk);

            IF LENGTH (v_merk) > 50
            THEN
               v_merk := SUBSTR (v_merk, 1, 50);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Merk wordt afgebroken tot [' || v_merk || ']'
               );
            END IF;

            --
            v_errormsg := 'Type ongeldig';
            v_type := TRIM (v_type);

            IF LENGTH (v_type) > 50
            THEN
               v_type := SUBSTR (v_type, 1, 50);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                  'Type wordt afgebroken tot [' || v_type || ']'
               );
            END IF;

            --
            v_errormsg := 'Serienummer ongeldig';
            v_serienummer := TRIM (v_serienummer);

            IF LENGTH (v_serienummer) > 50
            THEN
               v_serienummer := SUBSTR (v_serienummer, 1, 50);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Serienummer wordt afgebroken tot ['
                  || v_serienummer
                  || ']'
               );
            END IF;

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

                  INSERT INTO rwsn_imp_cmdb (ins_discipline_omschrijving,
                                             ins_srtgroep_omschrijving,
                                             ins_srtdeel_omschrijving,
                                             ins_deel_omschrijving,
                                             prs_perslid_email,
                                             merk,
                                             TYPE,
                                             serienummer)
                    VALUES   (v_ins_discipline_omschrijving,
                              v_ins_srtgroep_omschrijving,
                              v_ins_srtdeel_omschrijving,
                              v_ins_deel_omschrijving,
                              v_prs_perslid_email,
                              v_merk,
                              v_type,
                              v_serienummer);

                  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',
         'ICT-objecten/#ingelezen importregels: '
         || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'ICT-objecten/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   COMMIT;
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 ICT-objecten afgebroken!');
END rwsn_import_cmdb;
/

/* Formatted on 14-6-2012 19:24:32 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_update_cmdb (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);

   -- 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   rwsn_imp_cmdb
         GROUP BY   UPPER (ins_discipline_omschrijving);

      v_errormsg         VARCHAR2 (1024);
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      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)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            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   rwsn_imp_cmdb
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_srtgroep_omschrijving);

      v_errormsg         VARCHAR2 (1024);
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      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)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            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)) =
                           UPPER (TRIM (rec.ins_srtgroep_omschrijving));

            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(UPPER(   SUBSTR (ins_srtgroep_omschrijving, 1, 4)
                              || '-'
                              || SUBSTR (ins_srtdeel_omschrijving, 1, 5)))
                       new_srtdeel_code_upper,
                    MAX (ins_discipline_omschrijving)
                       ins_discipline_omschrijving,
                    MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
                    MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
             FROM   rwsn_imp_cmdb
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_srtgroep_omschrijving),
                    UPPER (ins_srtdeel_omschrijving);

      v_errormsg         VARCHAR2 (1024);
      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      ccount             NUMBER (10);
      oracle_err_num     NUMBER;
      oracle_err_mes     VARCHAR2 (200);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      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)) =
                           UPPER (TRIM (rec.ins_discipline_omschrijving));

            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)) =
                           UPPER (TRIM (rec.ins_srtgroep_omschrijving));

            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)) =
                           UPPER (TRIM (rec.ins_srtdeel_omschrijving));

            IF ccount = 0
            THEN
               -- Binding 16 betekent persoonsgebonden (Persoon-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',
                           rec.new_srtdeel_code_upper,
                           rec.ins_srtdeel_omschrijving,
                           16);

               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
      CURSOR c1
      IS
         SELECT   ins_discipline_omschrijving,
                  ins_srtgroep_omschrijving,
                  ins_srtdeel_omschrijving,
                  ins_deel_omschrijving,
                  prs_perslid_email,
                  merk,
                  TYPE,
                  serienummer
           FROM   rwsn_imp_cmdb;

      v_errormsg             VARCHAR2 (1024);
      c_merk_srtkey          NUMBER (10) := 5;
      c_type_srtkey          NUMBER (10) := 6;
      c_serienummer_srtkey   NUMBER (10) := 7;
      v_discipline_key       NUMBER (10);
      v_srtgroep_key         NUMBER (10);
      v_srtdeel_key          NUMBER (10);
      v_new_perslid_key      NUMBER (10); -- volgens import op basis van email
      v_cur_perslid_key      NUMBER (10); -- zoals nu geregistreerd in FACILITOR
      v_deel_key             NUMBER (10);
      v_deel_oms             VARCHAR2 (60);
      v_kenmerk_key          NUMBER (10);
      ccount                 NUMBER (10);
      oracle_err_num         NUMBER;
      oracle_err_mes         VARCHAR2 (200);
      v_count_tot            NUMBER (10);
      v_count_create         NUMBER (10);
      v_count_update         NUMBER (10);
      v_aanduiding           VARCHAR (200);
   BEGIN
      v_count_tot := 0;
      v_count_create := 0;
      v_count_update := 0;
      v_aanduiding := '';

      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_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '|'
               || rec.prs_perslid_email
               || '] ';
            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 (TRIM (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 (TRIM (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 (TRIM (rec.ins_srtdeel_omschrijving));

            v_errormsg := 'Fout bepalen persoon [' || rec.prs_perslid_email || ']';

            SELECT   p.prs_perslid_key
              INTO   v_new_perslid_key
              FROM   prs_perslid p
             WHERE   p.prs_perslid_verwijder IS NULL
                     --AND p.prs_perslid_authenticatie IS NOT NULL
                     AND EXISTS
                           (SELECT   1
                              FROM   prs_v_aanwezigkenmerklink
                             WHERE   prs_link_key = p.prs_perslid_key
                                     AND prs_kenmerk_key = 1160)
                     AND UPPER (p.prs_perslid_email) LIKE
                           UPPER (rec.prs_perslid_email) || '%';

            -- Persoonsgebonden objecten hebben een unieke ID
            v_errormsg := 'Fout (uniek) bepalen INS-object';

            SELECT   COUNT ( * )
              INTO   ccount
              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);

            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_alg_ruimte_key,
                                     ins_alg_ruimte_type,
                                     ins_alg_locatie_key)
                  VALUES   (v_discipline_key,
                            v_srtdeel_key,
                            'INS',
                            rec.ins_deel_omschrijving,
                            v_new_perslid_key,
                            'P',
                            NULL)
               RETURNING   ins_deel_key      INTO   v_deel_key;

               COMMIT;

               v_count_create := v_count_create + 1;
            ELSE                                      -- Object bestaat reeds!
               SELECT   d.ins_deel_key, ins_alg_ruimte_key
                 INTO   v_deel_key, v_cur_perslid_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);

               IF v_new_perslid_key <> v_cur_perslid_key
               THEN
                  v_errormsg := 'Fout bijwerken INS-object';

                  UPDATE   ins_deel
                     SET   ins_deel_omschrijving = rec.ins_deel_omschrijving,
                           ins_alg_ruimte_key = v_new_perslid_key,
                           ins_alg_ruimte_type = 'P',
                           ins_alg_locatie_key = NULL
                   WHERE   ins_deel_key = v_deel_key;

                  COMMIT;

                  v_count_update := v_count_update + 1;
               END IF;
            END IF;

            -- MERK toevoegen/bijwerken; NOOIT naar NULL via import!
            IF rec.merk IS NOT NULL
            THEN
               v_errormsg := 'Fout bepalen merk-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_merk_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout toevoegen merk-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_merk_srtkey,
                               v_srtdeel_key,
                               'S',
                               100)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Merk-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_merk_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bepalen huidige merk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout toevoegen merk';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.merk);

                  COMMIT;
               ELSE
                  v_errormsg := 'Fout bijwerken merk';

                  UPDATE   ins_kenmerkdeel
                     SET   ins_kenmerkdeel_waarde = rec.merk
                   WHERE       ins_kenmerkdeel_verwijder IS NULL
                           AND ins_deel_key = v_deel_key
                           AND ins_kenmerk_key = v_kenmerk_key;

                  COMMIT;
               END IF;
            END IF;

            -- TYPE toevoegen/bijwerken; NOOIT naar NULL via import!
            IF rec.TYPE IS NOT NULL
            THEN
               v_errormsg := 'Fout bepalen type-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_type_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout toevoegen type-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_type_srtkey,
                               v_srtdeel_key,
                               'S',
                               105)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Type-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_type_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bepalen huidige type';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout toevoegen type';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.TYPE);

                  COMMIT;
               ELSE
                  v_errormsg := 'Fout bijwerken type';

                  UPDATE   ins_kenmerkdeel
                     SET   ins_kenmerkdeel_waarde = rec.TYPE
                   WHERE       ins_kenmerkdeel_verwijder IS NULL
                           AND ins_deel_key = v_deel_key
                           AND ins_kenmerk_key = v_kenmerk_key;

                  COMMIT;
               END IF;
            END IF;

            -- SERIENUMMER toevoegen/bijwerken; NOOIT naar NULL via import!
            IF rec.serienummer IS NOT NULL
            THEN
               v_errormsg := 'Fout bepalen serienummer-kenmerk';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerk k
                WHERE   k.ins_srtkenmerk_key = c_serienummer_srtkey
                        AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                               AND k.ins_kenmerk_niveau = 'S')
                             OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                 AND k.ins_kenmerk_niveau = 'G')
                             OR (k.ins_srtinstallatie_key = v_discipline_key
                                 AND k.ins_kenmerk_niveau = 'D'));

               IF ccount = 0            -- Kenmerk bestaat niet; dan aanmaken!
               THEN
                  v_errormsg := 'Fout toevoegen serienummer-kenmerk';

                  INSERT INTO ins_kenmerk (ins_srtkenmerk_key,
                                           ins_srtinstallatie_key,
                                           ins_kenmerk_niveau,
                                           ins_kenmerk_volgnummer)
                     VALUES   (c_serienummer_srtkey,
                               v_srtdeel_key,
                               'S',
                               110)
                  RETURNING   ins_kenmerk_key      INTO   v_kenmerk_key;

                  fac.imp_writelog (
                     p_import_key,
                     'I',
                     'INS-Objecten/Serienummer-kenmerk toegevoegd voor: '
                     || rec.ins_srtdeel_omschrijving,
                     ''
                  );
                  COMMIT;
               ELSE
                  SELECT   k.ins_kenmerk_key
                    INTO   v_kenmerk_key
                    FROM   ins_v_aanwezigkenmerk k
                   WHERE   k.ins_srtkenmerk_key = c_serienummer_srtkey
                           AND ( (k.ins_srtinstallatie_key = v_srtdeel_key
                                  AND k.ins_kenmerk_niveau = 'S')
                                OR (k.ins_srtinstallatie_key = v_srtgroep_key
                                    AND k.ins_kenmerk_niveau = 'G')
                                OR (k.ins_srtinstallatie_key =
                                       v_discipline_key
                                    AND k.ins_kenmerk_niveau = 'D'));
               END IF;

               v_errormsg := 'Fout bepalen huidige serienummer';

               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigkenmerkdeel
                WHERE   ins_deel_key = v_deel_key
                        AND ins_kenmerk_key = v_kenmerk_key;

               IF ccount = 0
               THEN
                  v_errormsg := 'Fout toevoegen serienummer';

                  INSERT INTO ins_kenmerkdeel (
                                                  ins_deel_key,
                                                  ins_kenmerk_key,
                                                  ins_kenmerkdeel_waarde
                             )
                    VALUES   (v_deel_key, v_kenmerk_key, rec.serienummer);

                  COMMIT;
               ELSE
                  v_errormsg := 'Fout bijwerken serienummer';

                  UPDATE   ins_kenmerkdeel
                     SET   ins_kenmerkdeel_waarde = rec.serienummer
                   WHERE       ins_kenmerkdeel_verwijder IS NULL
                           AND ins_deel_key = v_deel_key
                           AND ins_kenmerk_key = v_kenmerk_key;

                  COMMIT;
               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,
                                 '');
               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_omschrijving,
                  d.ins_deel_omschrijving,
                  p.prs_perslid_email,
                  d.ins_deel_key
           FROM   ins_v_aanwezigdeel d,
                  ins_v_aanwezigsrtdeel sd,
                  ins_v_aanwezigsrtgroep sg,
                  ins_discipline id,
                  prs_perslid p
          WHERE       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_omschrijving = 'CMDB'
                  AND TO_CHAR (id.ins_discipline_aanmaak, 'yyyy') = '2012'
                  AND d.ins_alg_ruimte_key = p.prs_perslid_key
                  AND NOT EXISTS
                        (SELECT   1
                           FROM   rwsn_imp_cmdb 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);

      v_errormsg       VARCHAR2 (1024);
      oracle_err_num   NUMBER;
      oracle_err_mes   VARCHAR2 (200);
      v_count_delete   NUMBER (10);
      v_aanduiding     VARCHAR (200);
   BEGIN
      v_count_delete := 0;
      v_aanduiding := '';

      FOR rec IN c1
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.ins_discipline_omschrijving
               || '|'
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '|'
               || rec.ins_deel_omschrijving
               || '|'
               || rec.prs_perslid_email
               || '] ';
            v_errormsg := 'Fout verwijderen INS-object';

            DELETE FROM ins_deel 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
   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 ICT-objecten afgebroken!');
END rwsn_update_cmdb;
/

-- RWSN#23799
/* Formatted on 25-7-2012 15:10:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_cmdb
(
   fclt_f_medewerker,
   fclt_f_dienst,
   fclt_f_afdeling,
   fclt_x_nivo,
   fclt_f_omschrijving,
   registratienummer,
   merk,
   TYPE,
   serienummer
)
AS
   SELECT   x.prs_perslid_naam_full,
            x.dienst,
            x.afd_oms,
            TO_CHAR (x.nivo),
            x.ins_srtdeel_omschrijving,
            x.ins_deel_omschrijving,
            kd1.ins_kenmerkdeel_waarde merk,
            kd2.ins_kenmerkdeel_waarde TYPE,
            kd3.ins_kenmerkdeel_waarde serienummer
     FROM            (SELECT   d.ins_deel_key,
                               d.ins_deel_omschrijving,
                               sd.ins_srtdeel_omschrijving,
                               a1.prs_afdeling_omschrijving dienst,
                               a2.prs_afdeling_upper afd_code,
                               a2.prs_afdeling_omschrijving afd_oms,
                               af2.niveau nivo,
                               pf.prs_perslid_naam_full
                        FROM   ins_v_aanwezigdeel d,
                               ins_srtdeel sd,
                               ins_srtgroep sg,
                               ins_tab_discipline td,
                               prs_perslid p,
                               prs_v_afdeling_familie af1,
                               prs_afdeling a1,
                               prs_v_afdeling_familie af2,
                               prs_afdeling a2,
                               prs_v_perslid_fullnames pf
                       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_omschrijving = 'CMDB'
                               --AND d.ins_alg_ruimte_type = 'P'
                               AND d.ins_alg_ruimte_key = p.prs_perslid_key
                               AND p.prs_afdeling_key = af1.prs_afdeling_key
                               AND af1.niveau = 1
                               AND af1.prs_afdeling_elder_key =
                                     a1.prs_afdeling_key
                               AND p.prs_afdeling_key = af2.prs_afdeling_key
                               AND af2.prs_afdeling_key =
                                     af2.prs_afdeling_elder_key
                               AND af2.prs_afdeling_elder_key =
                                     a2.prs_afdeling_key
                               AND p.prs_perslid_key = pf.prs_perslid_key) x
                  LEFT JOIN
                     (SELECT   kd1.ins_deel_key, kd1.ins_kenmerkdeel_waarde
                        FROM   ins_kenmerkdeel kd1, ins_kenmerk k
                       WHERE       kd1.ins_kenmerkdeel_verwijder IS NULL
                               AND kd1.ins_kenmerk_key = k.ins_kenmerk_key
                               AND k.ins_srtkenmerk_key = 5) kd1       -- Merk
                  ON x.ins_deel_key = kd1.ins_deel_key
               LEFT JOIN
                  (SELECT   kd2.ins_deel_key, kd2.ins_kenmerkdeel_waarde
                     FROM   ins_kenmerkdeel kd2, ins_kenmerk k
                    WHERE       kd2.ins_kenmerkdeel_verwijder IS NULL
                            AND kd2.ins_kenmerk_key = k.ins_kenmerk_key
                            AND k.ins_srtkenmerk_key = 6) kd2          -- Type
               ON x.ins_deel_key = kd2.ins_deel_key
            LEFT JOIN
               (SELECT   kd3.ins_deel_key, kd3.ins_kenmerkdeel_waarde
                  FROM   ins_kenmerkdeel kd3, ins_kenmerk k
                 WHERE       kd3.ins_kenmerkdeel_verwijder IS NULL
                         AND kd3.ins_kenmerk_key = k.ins_kenmerk_key
                         AND k.ins_srtkenmerk_key = 7) kd3      -- Serienummer
            ON x.ins_deel_key = kd3.ins_deel_key;

/* Formatted on 25-7-2012 15:10:45 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_cmdb_per_ictcp
(
   fclt_3d_user_key,
   fclt_f_medewerker,
   fclt_f_dienst,
   fclt_f_afdeling,
   fclt_f_omschrijving,
   registratienummer,
   merk,
   TYPE,
   serienummer
)
AS
   SELECT   cp.prs_key,
            x.prs_perslid_naam_full,
            x.dienst,
            x.afd_oms,
            x.ins_srtdeel_omschrijving,
            x.ins_deel_omschrijving,
            kd1.ins_kenmerkdeel_waarde merk,
            kd2.ins_kenmerkdeel_waarde TYPE,
            kd3.ins_kenmerkdeel_waarde serienummer
     FROM               (SELECT   d.ins_deel_key,
                                  d.ins_deel_omschrijving,
                                  sd.ins_srtdeel_omschrijving,
                                  a1.prs_afdeling_omschrijving dienst,
                                  a2.prs_afdeling_key afd_key,
                                  a2.prs_afdeling_upper afd_code,
                                  a2.prs_afdeling_omschrijving afd_oms,
                                  pf.prs_perslid_naam_full
                           FROM   ins_v_aanwezigdeel d,
                                  ins_srtdeel sd,
                                  ins_srtgroep sg,
                                  ins_tab_discipline td,
                                  prs_perslid p,
                                  prs_v_afdeling_familie af1,
                                  prs_afdeling a1,
                                  prs_v_afdeling_familie af2,
                                  prs_afdeling a2,
                                  prs_v_perslid_fullnames pf
                          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_omschrijving = 'CMDB'
                                  --AND d.ins_alg_ruimte_type = 'P'
                                  AND d.ins_alg_ruimte_key =
                                        p.prs_perslid_key
                                  AND p.prs_afdeling_key =
                                        af1.prs_afdeling_key
                                  AND af1.niveau = 1
                                  AND af1.prs_afdeling_elder_key =
                                        a1.prs_afdeling_key
                                  AND p.prs_afdeling_key =
                                        af2.prs_afdeling_key
                                  AND af2.prs_afdeling_key =
                                        af2.prs_afdeling_elder_key
                                  AND af2.prs_afdeling_elder_key =
                                        a2.prs_afdeling_key
                                  AND p.prs_perslid_key = pf.prs_perslid_key)
                        x
                     LEFT JOIN
                        (SELECT   kd1.ins_deel_key,
                                  kd1.ins_kenmerkdeel_waarde
                           FROM   ins_kenmerkdeel kd1, ins_kenmerk k
                          WHERE       kd1.ins_kenmerkdeel_verwijder IS NULL
                                  AND kd1.ins_kenmerk_key = k.ins_kenmerk_key
                                  AND k.ins_srtkenmerk_key = 5) kd1    -- Merk
                     ON x.ins_deel_key = kd1.ins_deel_key
                  LEFT JOIN
                     (SELECT   kd2.ins_deel_key, kd2.ins_kenmerkdeel_waarde
                        FROM   ins_kenmerkdeel kd2, ins_kenmerk k
                       WHERE       kd2.ins_kenmerkdeel_verwijder IS NULL
                               AND kd2.ins_kenmerk_key = k.ins_kenmerk_key
                               AND k.ins_srtkenmerk_key = 6) kd2       -- Type
                  ON x.ins_deel_key = kd2.ins_deel_key
               LEFT JOIN
                  (SELECT   kd3.ins_deel_key, kd3.ins_kenmerkdeel_waarde
                     FROM   ins_kenmerkdeel kd3, ins_kenmerk k
                    WHERE       kd3.ins_kenmerkdeel_verwijder IS NULL
                            AND kd3.ins_kenmerk_key = k.ins_kenmerk_key
                            AND k.ins_srtkenmerk_key = 7) kd3   -- Serienummer
               ON x.ins_deel_key = kd3.ins_deel_key
            LEFT JOIN
               rwsn_v_ictcp_per_afd cp
            ON x.afd_key = cp.afd_key;

-- RWSN#30371
/* Formatted on 12-9-2014 17:00:30 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_ldg_per_medewerker
(
   fclt_f_medewerker,
   email_medewerker,
   fclt_f_leidinggevende,
   email_leidinggevende,
   fclt_f_onderdeel,
   fclt_f_afdeling
)
AS
   WITH a2ldg
           AS (SELECT a.prs_afdeling_key,
                      a.prs_afdeling_parentkey,
                      a.prs_afdeling_omschrijving,
                      pf.prs_perslid_key,
                      pf.prs_perslid_naam_full,
                      p.prs_perslid_email
                 FROM rwsn_v_ictcp_per_afd v,
                      prs_afdeling a,
                      prs_perslid p,
                      prs_v_perslid_fullnames pf
                WHERE     v.bv = 'B'                    -- Geen V = Vervangers
                      AND v.afd_key = a.prs_afdeling_key
                      AND v.prs_key = p.prs_perslid_key
                      AND p.prs_perslid_key = pf.prs_perslid_key)
   SELECT pf.prs_perslid_naam_full,
          p.prs_perslid_email,
          DECODE (
             p.prs_perslid_key,
             a.prs_perslid_key,                             -- MDW = LDG eigen
             DECODE (p.prs_perslid_key,
                     ap.prs_perslid_key, 'Geen',            -- MDW = LDG ouder
                     ap.prs_perslid_naam_full),
             a.prs_perslid_naam_full),
          DECODE (
             p.prs_perslid_key,
             a.prs_perslid_key,                             -- MDW = LDG eigen
             DECODE (p.prs_perslid_key,
                     ap.prs_perslid_key, 'Geen',            -- MDW = LDG ouder
                     ap.prs_perslid_email),
             a.prs_perslid_email),
          d.prs_afdeling_omschrijving,
          a.prs_afdeling_omschrijving
     FROM prs_v_aanwezigperslid p,
          prs_v_perslid_fullnames pf,
          prs_v_afdeling_boom ab,
          a2ldg a,                                   -- LDG per eigen afdeling
          a2ldg ap,                                  -- LDG per ouder afdeling
          prs_afdeling d
    WHERE     p.prs_perslid_key = pf.prs_perslid_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_afdeling_key = a.prs_afdeling_key(+)
          AND a.prs_afdeling_parentkey = ap.prs_afdeling_key(+)
          AND ab.prs_afdeling_key1 = d.prs_afdeling_key;

-- RWSN#23256
/* Formatted on 24-7-2012 14:55:44 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW rwsn_v_rap_beo_doorloop
(
   hide_f_volgorde,
   fclt_f_maand,
   nummer,
   fclt_f_status,
   fclt_f_vakgroep,
   fclt_f_melding,
   omschrijving,
   opmerking,
   fclt_f_leverancier,
   registratie,
   acceptatie,
   afhandeling,
   bruto_rsp,
   bruto_afh,
   bruto_tot,
   netto_rsp,
   netto_afh,
   netto_tot
)
AS
   SELECT   TO_CHAR (m.mldnew_date, 'yyyy-mm') || TO_CHAR (m.mldafm_userkey)
               volgorde,
            TO_CHAR (m.mldnew_date, 'yyyy-mm') maand,
            TO_CHAR (m.mld_key),
            m.mld_statuses_omschrijving,
            m.vakgroep_oms vakgroep,
            m.stdmld_oms melding,
            m.mld_oms,
            m.mld_opm,
            DECODE (m.mldafm_userkey, 37976, 'Noord', 'Zuid') leverancier,
            TO_CHAR (m.mldnew_date, 'yyyy-mm-dd hh24:mi') registratie,
            TO_CHAR (m.mldacp_date, 'yyyy-mm-dd hh24:mi') acceptatie,
            TO_CHAR (COALESCE (m.mldrej_date, m.mldafm_date),
                     'yyyy-mm-dd hh24:mi')
               afhandeling,
            DECODE (
               COALESCE (m.mldacp_date, m.mldrej_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (m.mldacp_date, m.mldrej_date)
                             - m.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (m.mldacp_date, m.mldrej_date)
                                     - m.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (m.mldacp_date, m.mldrej_date)
                                 - m.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               bruto_rsp,
            DECODE (
               COALESCE (m.mldrej_date, m.mldafm_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (m.mldrej_date, m.mldafm_date)
                             - COALESCE (m.mldacp_date, m.mldrej_date)))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (m.mldrej_date, m.mldafm_date)
                                     - COALESCE (m.mldacp_date,
                                                 m.mldrej_date))
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (m.mldrej_date, m.mldafm_date)
                                 - COALESCE (m.mldacp_date, m.mldrej_date))
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               bruto_afh,
            DECODE (
               COALESCE (m.mldrej_date, m.mldafm_date),
               NULL,
               NULL,
               TO_CHAR(FLOOR(COALESCE (m.mldrej_date, m.mldafm_date)
                             - m.mldnew_date))
               || 'd-'
               || TO_CHAR(MOD (
                             FLOOR( (COALESCE (m.mldrej_date, m.mldafm_date)
                                     - m.mldnew_date)
                                   * 24),
                             24
                          ))
               || 'u-'
               || TO_CHAR(MOD (
                             ROUND (
                                (COALESCE (m.mldrej_date, m.mldafm_date)
                                 - m.mldnew_date)
                                * 24
                                * 60,
                                0
                             ),
                             60
                          ))
               || 'm'
            )
               bruto_tot,
            DECODE (
               m.netto_rsp,
               NULL,
               NULL,
                  TO_CHAR (FLOOR ( (m.netto_rsp) / 8))
               || 'd-'
               || TO_CHAR (MOD (FLOOR (m.netto_rsp), 8))
               || 'u-'
               || TO_CHAR (MOD (ROUND (m.netto_rsp * 60, 0), 60))
               || 'm'
            )
               netto_rsp,
            DECODE (
               m.netto_afh,
               NULL,
               NULL,
                  TO_CHAR (FLOOR (m.netto_afh / 8))
               || 'd-'
               || TO_CHAR (MOD (FLOOR (m.netto_afh), 8))
               || 'u-'
               || TO_CHAR (MOD (ROUND (m.netto_afh * 60, 0), 60))
               || 'm'
            )
               netto_afh,
            DECODE (
               m.netto_tot,
               NULL,
               NULL,
                  TO_CHAR (FLOOR (m.netto_tot / 8))
               || 'd-'
               || TO_CHAR (MOD (FLOOR (m.netto_tot), 8))
               || 'u-'
               || TO_CHAR (MOD (ROUND (m.netto_tot * 60, 0), 60))
               || 'm'
            )
               netto_tot
     FROM   (SELECT   m.*,
                      DECODE (
                         COALESCE (m.mldacp_date, m.mldrej_date),
                         NULL,
                         NULL,
                         rwsn.bepaal_rws_kantooruren (
                            m.mldnew_date,
                            COALESCE (m.mldacp_date, m.mldrej_date)
                         )
                      )
                         netto_rsp,
                      DECODE (
                         COALESCE (m.mldrej_date, m.mldafm_date),
                         NULL,
                         NULL,
                         rwsn.bepaal_rws_kantooruren (
                            COALESCE (m.mldacp_date, m.mldrej_date),
                            COALESCE (m.mldrej_date, m.mldafm_date)
                         )
                      )
                         netto_afh,
                      DECODE (
                         COALESCE (m.mldrej_date, m.mldafm_date),
                         NULL,
                         NULL,
                         rwsn.bepaal_rws_kantooruren (
                            m.mldnew_date,
                            COALESCE (m.mldrej_date, m.mldafm_date)
                         )
                      )
                         netto_tot,
                      s.mld_statuses_omschrijving
               FROM   rwsn_mld_freeze m, fac_usrdata ud, mld_statuses s
              WHERE   m.mldafm_userkey IN (37976, 37977)    -- REGIONOORD/ZUID
                      AND COALESCE (m.mldrej_date, m.mldafm_date) IS NOT NULL
                      AND m.stdmld_key =
                            fac.safe_to_number (ud.fac_usrdata_code)
                      AND ud.fac_usrtab_key = 1111           -- BEO_STDMLDKEYS
                      AND m.mld_status_key = s.mld_statuses_key) m
   UNION ALL
   SELECT   m.maand || TO_CHAR (m.mldafm_userkey) volgorde,
            m.maand,
            'TOTAAL/GEMIDDELD' nummer,
            NULL mld_status_key,
            NULL vakgroep,
            NULL melding,
            NULL omschrijving,
            NULL opmerking,
            DECODE (m.mldafm_userkey, 37976, 'Noord', 'Zuid') leverancier,
            NULL registratie,
            NULL acceptatie,
            TO_CHAR (m.aant) afhandeling,      -- Totaal per maand/leverancier
               TO_CHAR (FLOOR (m.bruto_rsp / m.aant))
            || 'd-'
            || TO_CHAR (MOD (FLOOR (m.bruto_rsp / m.aant * 24), 24))
            || 'u-'
            || TO_CHAR (MOD (ROUND (m.bruto_rsp / m.aant * 24 * 60, 0), 60))
            || 'm'
               bruto_rsp,                  -- Gemiddelde per maand/leverancier
               TO_CHAR (FLOOR (m.bruto_afh / m.aant))
            || 'd-'
            || TO_CHAR (MOD (FLOOR (m.bruto_afh / m.aant * 24), 24))
            || 'u-'
            || TO_CHAR (MOD (ROUND (m.bruto_afh / m.aant * 24 * 60, 0), 60))
            || 'm'
               bruto_afh,                  -- Gemiddelde per maand/leverancier
               TO_CHAR (FLOOR (m.bruto_tot / m.aant))
            || 'd-'
            || TO_CHAR (MOD (FLOOR (m.bruto_tot / m.aant * 24), 24))
            || 'u-'
            || TO_CHAR (MOD (ROUND (m.bruto_tot / m.aant * 24 * 60, 0), 60))
            || 'm'
               bruto_tot,                  -- Gemiddelde per maand/leverancier
               TO_CHAR (FLOOR ( (m.netto_rsp / m.aant) / 8))
            || 'd-'
            || TO_CHAR (MOD (FLOOR (m.netto_rsp / m.aant), 8))
            || 'u-'
            || TO_CHAR (MOD (ROUND (m.netto_rsp / m.aant * 60, 0), 60))
            || 'm'
               netto_rsp,                  -- Gemiddelde per maand/leverancier
               TO_CHAR (FLOOR ( (m.netto_afh / m.aant) / 8))
            || 'd-'
            || TO_CHAR (MOD (FLOOR (m.netto_afh / m.aant), 8))
            || 'u-'
            || TO_CHAR (MOD (ROUND (m.netto_afh / m.aant * 60, 0), 60))
            || 'm'
               netto_afh,                  -- Gemiddelde per maand/leverancier
               TO_CHAR (FLOOR ( (m.netto_tot / m.aant) / 8))
            || 'd-'
            || TO_CHAR (MOD (FLOOR (m.netto_tot / m.aant), 8))
            || 'u-'
            || TO_CHAR (MOD (ROUND (m.netto_tot / m.aant * 60, 0), 60))
            || 'm'
               netto_tot                   -- Gemiddelde per maand/leverancier
     FROM   (  SELECT   TO_CHAR (m.mldnew_date, 'yyyy-mm') maand,
                        m.mldafm_userkey,
                        COUNT ( * ) aant,
                        SUM(COALESCE (m.mldacp_date, m.mldrej_date)
                            - m.mldnew_date)
                           bruto_rsp,
                        SUM(COALESCE (m.mldrej_date, m.mldafm_date)
                            - COALESCE (m.mldacp_date, m.mldrej_date))
                           bruto_afh,
                        SUM(COALESCE (m.mldrej_date, m.mldafm_date)
                            - m.mldnew_date)
                           bruto_tot,
                        SUM(rwsn.bepaal_rws_kantooruren (
                               m.mldnew_date,
                               COALESCE (m.mldacp_date, m.mldrej_date)
                            ))
                           netto_rsp,
                        SUM(rwsn.bepaal_rws_kantooruren (
                               COALESCE (m.mldacp_date, m.mldrej_date),
                               COALESCE (m.mldrej_date, m.mldafm_date)
                            ))
                           netto_afh,
                        SUM(rwsn.bepaal_rws_kantooruren (
                               m.mldnew_date,
                               COALESCE (m.mldrej_date, m.mldafm_date)
                            ))
                           netto_tot
                 FROM   rwsn_mld_freeze m, fac_usrdata ud
                WHERE   m.mldafm_userkey IN (37976, 37977)  -- REGIONOORD/ZUID
                        AND COALESCE (m.mldrej_date, m.mldafm_date) IS NOT NULL
                        AND m.stdmld_key =
                              fac.safe_to_number (ud.fac_usrdata_code)
                        AND ud.fac_usrtab_key = 1111         -- BEO_STDMLDKEYS
             GROUP BY   TO_CHAR (m.mldnew_date, 'yyyy-mm'), m.mldafm_userkey)
            m;

-- RWSN#24902
/* Formatted on 12-12-2012 12:42:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_import_ins (p_import_key IN NUMBER)
AS
   c_delim                         VARCHAR2 (1) := ';';
   v_newline                       VARCHAR2 (1000);              -- Input line
   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER;
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_ongeldig                      NUMBER (1);
   v_aanduiding                    VARCHAR (200);
   v_ins_srtkenmerk_key1           VARCHAR2 (255);
   v_ins_srtkenmerk_key2           VARCHAR2 (255);
   v_ins_srtkenmerk_key3           VARCHAR2 (255);
   v_ins_srtkenmerk_key4           VARCHAR2 (255);
   v_ins_srtkenmerk_key5           VARCHAR2 (255);
   v_ins_srtkenmerk_key6           VARCHAR2 (255);
   v_ins_srtkenmerk_key7           VARCHAR2 (255);
   v_ins_srtkenmerk_key8           VARCHAR2 (255);
   v_ins_srtkenmerk_key9           VARCHAR2 (255);
   v_ins_srtkenmerk_key10          VARCHAR2 (255);
   v_ins_srtkenmerk_key11          VARCHAR2 (255);
   v_ins_srtkenmerk_key12          VARCHAR2 (255);
   v_ins_srtkenmerk_key13          VARCHAR2 (255);
   v_ins_srtkenmerk_key14          VARCHAR2 (255);
   v_ins_srtkenmerk_key15          VARCHAR2 (255);
   v_ins_srtkenmerk_key16          VARCHAR2 (255);
   v_ins_srtkenmerk_key17          VARCHAR2 (255);
   v_ins_srtkenmerk_key18          VARCHAR2 (255);
   v_ins_srtkenmerk_key19          VARCHAR2 (255);
   v_ins_srtkenmerk_key20          VARCHAR2 (255);
   -- De importvelden
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   v_ins_discipline_kostensoort    VARCHAR2 (255);                       --C60
   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_reserveerbaar                 VARCHAR2 (255);                       -- C1
   v_reserveerbaar_n               NUMBER (1);                           -- N1
   v_res_deel_eenheid              VARCHAR2 (255);                      -- C10
   v_res_deel_prijs                VARCHAR2 (255);                     -- N7,2
   v_res_deel_prijs_n              NUMBER (7, 2);                      -- N7,2
   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_res_deel_alg_level            VARCHAR2 (255);       -- C1 (naar -1 t/m 5)
   v_res_deel_alg_level_n          NUMBER (1);                           -- N1
   v_res_discipline_omschrijving   VARCHAR2 (255);                      -- C30
   v_res_discipline_kostensoort    VARCHAR2 (255);                      -- C60
   v_prs_perslid_matchcode         VARCHAR2 (255);
   v_prs_perslid_matchwaarde       VARCHAR2 (255);
   v_ins_kenmerkwaarde1            VARCHAR2 (255);
   v_ins_kenmerkwaarde2            VARCHAR2 (255);
   v_ins_kenmerkwaarde3            VARCHAR2 (255);
   v_ins_kenmerkwaarde4            VARCHAR2 (255);
   v_ins_kenmerkwaarde5            VARCHAR2 (255);
   v_ins_kenmerkwaarde6            VARCHAR2 (255);
   v_ins_kenmerkwaarde7            VARCHAR2 (255);
   v_ins_kenmerkwaarde8            VARCHAR2 (255);
   v_ins_kenmerkwaarde9            VARCHAR2 (255);
   v_ins_kenmerkwaarde10           VARCHAR2 (255);
   v_ins_kenmerkwaarde11           VARCHAR2 (255);
   v_ins_kenmerkwaarde12           VARCHAR2 (255);
   v_ins_kenmerkwaarde13           VARCHAR2 (255);
   v_ins_kenmerkwaarde14           VARCHAR2 (255);
   v_ins_kenmerkwaarde15           VARCHAR2 (255);
   v_ins_kenmerkwaarde16           VARCHAR2 (255);
   v_ins_kenmerkwaarde17           VARCHAR2 (255);
   v_ins_kenmerkwaarde18           VARCHAR2 (255);
   v_ins_kenmerkwaarde19           VARCHAR2 (255);
   v_ins_kenmerkwaarde20           VARCHAR2 (255);

   -- Overige velden:
   CURSOR c1
   IS
        SELECT   *
          FROM   fac_imp_file
         WHERE   fac_import_key = p_import_key
      ORDER BY   fac_imp_file_index;

   -- Controleer tijdens import-fase alleen op bestaan van kenmerksoort (of
   -- deze - via een kenmerk - wel is gedefinieerd voor de betreffende object-
   -- discipline/groep/soort, volgt pas tijdens de update-fase)!
   FUNCTION bepaal_srtkenmerk_key (kw IN VARCHAR)
      RETURN NUMBER
   IS
      v_srtkenmerk_key   NUMBER;
   BEGIN
      IF fac.safe_to_number (kw) IS NULL
      THEN                -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
         SELECT   ins_srtkenmerk_key
           INTO   v_srtkenmerk_key
           FROM   ins_v_aanwezigsrtkenmerk
          WHERE   ins_srtkenmerk_upper = UPPER (kw)
                  AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'V');
      ELSE                             -- kenmerkwaarde is numeriek (dus key)!
         SELECT   ins_srtkenmerk_key
           INTO   v_srtkenmerk_key
           FROM   ins_v_aanwezigsrtkenmerk
          WHERE   ins_srtkenmerk_key = fac.safe_to_number (kw)
                  AND ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'V');
      END IF;

      RETURN v_srtkenmerk_key;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         IF kw IS NULL OR UPPER (kw) LIKE 'KENMERK%'
         THEN
            RETURN NULL;
         ELSE
            fac.imp_writelog (p_import_key,
                              'W',
                              'Fout bepalen kenmerksoort [' || kw || ']',
                              'Bestaat niet of type ongeldig');
            COMMIT;
            RETURN NULL;
         END IF;
   END;
BEGIN
   -- Eerst opruiming
   DELETE FROM rwsn_imp_ins;
   COMMIT;

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;
   v_prs_perslid_matchcode := '';

   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_discipline_kostensoort);
         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_reserveerbaar);
         fac.imp_getfield (v_newline, c_delim, v_res_deel_eenheid);
         fac.imp_getfield (v_newline, c_delim, v_res_deel_prijs);
         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_res_deel_alg_level);
         fac.imp_getfield (v_newline, c_delim, v_res_discipline_omschrijving);
         fac.imp_getfield (v_newline, c_delim, v_res_discipline_kostensoort);
         fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchcode);
         fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchwaarde);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde12);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde13);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde14);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde15);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde16);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde17);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde18);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde19);
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde20);

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

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk 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_discipline_kostensoort) =
                     'DISCIPLINEKOSTENSOORT'
               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_reserveerbaar) = 'RESERVEERBAAR'
               AND UPPER (v_res_deel_eenheid) = 'EENHEID'
               AND UPPER (v_res_deel_prijs) = 'PRIJS'
               AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
               AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
               AND UPPER (v_alg_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
               AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
               AND UPPER (v_res_deel_alg_level) = 'RESERVERINGSCOPE'
               AND UPPER (v_res_discipline_omschrijving) = 'CATALOGUSNAAM'
               AND UPPER (v_res_discipline_kostensoort) =
                     'CATALOGUSKOSTENSOORT'
               AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE'
               AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE'
            THEN
               v_ins_srtkenmerk_key1 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde1);
               v_ins_srtkenmerk_key2 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde2);
               v_ins_srtkenmerk_key3 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde3);
               v_ins_srtkenmerk_key4 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde4);
               v_ins_srtkenmerk_key5 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde5);
               v_ins_srtkenmerk_key6 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde6);
               v_ins_srtkenmerk_key7 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde7);
               v_ins_srtkenmerk_key8 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde8);
               v_ins_srtkenmerk_key9 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde9);
               v_ins_srtkenmerk_key10 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde10);
               v_ins_srtkenmerk_key11 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde11);
               v_ins_srtkenmerk_key12 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde12);
               v_ins_srtkenmerk_key13 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde13);
               v_ins_srtkenmerk_key14 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde14);
               v_ins_srtkenmerk_key15 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde15);
               v_ins_srtkenmerk_key16 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde16);
               v_ins_srtkenmerk_key17 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde17);
               v_ins_srtkenmerk_key18 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde18);
               v_ins_srtkenmerk_key19 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde19);
               v_ins_srtkenmerk_key20 :=
                  bepaal_srtkenmerk_key (v_ins_kenmerkwaarde20);

               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'Disciplineomschrijving ongeldig';
            v_ins_discipline_omschrijving :=
               TRIM (v_ins_discipline_omschrijving);

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

            --
            v_errormsg := 'Kostensoort ongeldig';
            v_ins_discipline_kostensoort :=
               TRIM (v_ins_discipline_kostensoort);

            IF LENGTH (v_ins_discipline_kostensoort) > 60
            THEN
               v_ins_discipline_kostensoort :=
                  SUBSTR (v_ins_discipline_kostensoort, 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Disciplinekostensoort wordt afgebroken tot ['
                  || v_ins_discipline_kostensoort
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Groepsoortomschrijving ongeldig';
            v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);

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

            --
            v_errormsg := 'Objectsoortcode ongeldig';
            v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);

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

            --
            v_errormsg := 'Objectsoortomschrijving ongeldig';
            v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);

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

            --
            v_errormsg := 'Objectomschrijving ongeldig';
            v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);

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

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT   DECODE (SUBSTR (TRIM (UPPER (v_reserveerbaar)), 1, 1),
                             'J', 1,
                             0)
              INTO   v_reserveerbaar_n
              FROM   DUAL;

            --
            v_errormsg := 'Eenheid ongeldig';
            v_res_deel_eenheid := TRIM (v_res_deel_eenheid);

            IF LENGTH (v_res_deel_eenheid) > 10
            THEN
               v_res_deel_eenheid := SUBSTR (v_res_deel_eenheid, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Eenheid wordt afgebroken tot ['
                  || v_res_deel_eenheid
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Prijs ongeldig; maximale grootte 99999.99';
            v_res_deel_prijs := TRIM (v_res_deel_prijs);
            v_res_deel_prijs_n := NULL;

            IF (v_res_deel_prijs IS NOT NULL)
            THEN
               IF (fac.safe_to_number (v_res_deel_prijs) IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               ELSE
                  v_res_deel_prijs_n := fac.safe_to_number (v_res_deel_prijs);
               END IF;
            END IF;

            --
            v_errormsg := 'Locatiecode ongeldig';
            v_alg_locatie_code := TRIM (v_alg_locatie_code);

            IF LENGTH (v_alg_locatie_code) > 10
            THEN
               v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Locatiecode wordt afgebroken tot ['
                  || v_alg_locatie_code
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Gebouwcode ongeldig';
            v_alg_gebouw_code := TRIM (v_alg_gebouw_code);

            IF LENGTH (v_alg_gebouw_code) > 12
            THEN
               v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Gebouwcode wordt afgebroken tot ['
                  || v_alg_gebouw_code
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Bouwlaagvolgnummer ongeldig';
            v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
            v_alg_verdieping_volgnr_n := NULL;

            IF (v_alg_verdieping_volgnr IS NOT NULL)
            THEN
               v_alg_verdieping_volgnr_n :=
                  ROUND (fac.safe_to_number (v_alg_verdieping_volgnr));

               IF 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!');
               ELSE
                  v_alg_verdieping_volgnr_n :=
                     fac.safe_to_number (v_alg_verdieping_volgnr);
               END IF;
            END IF;

            --
            v_errormsg := 'Ruimtenummer ongeldig';
            v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);

            IF LENGTH (v_alg_ruimte_nr) > 10
            THEN
               v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Ruimtenummer wordt afgebroken tot ['
                  || v_alg_ruimte_nr
                  || ']'
               );
            END IF;

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT   DECODE (SUBSTR (TRIM (v_res_deel_alg_level), 1, 1),
                             'E', 0,
                             'D', 1,
                             'L', 2,
                             'G', 3,
                             'V', 4,
                             'R', 5,
                             -1)
              INTO   v_res_deel_alg_level_n
              FROM   DUAL;

            --
            v_errormsg := 'Catalogusnaam ongeldig';
            v_res_discipline_omschrijving :=
               TRIM (v_res_discipline_omschrijving);

            IF LENGTH (v_res_discipline_omschrijving) > 30
            THEN
               v_res_discipline_omschrijving :=
                  SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 30);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Catalogusnaam wordt afgebroken tot ['
                  || v_res_discipline_omschrijving
                  || ']'
               );
            END IF;

            --
            v_errormsg := 'Cataloguskostensoort ongeldig';
            v_res_discipline_kostensoort :=
               TRIM (v_res_discipline_kostensoort);

            IF LENGTH (v_res_discipline_kostensoort) > 60
            THEN
               v_res_discipline_kostensoort :=
                  SUBSTR (TRIM (v_res_discipline_kostensoort), 1, 60);
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || v_errormsg,
                     'Cataloguskostensoort wordt afgebroken tot ['
                  || v_res_discipline_kostensoort
                  || ']'
               );
            END IF;

            -- De rest alleen ff trimmen.
            v_prs_perslid_matchcode := TRIM (v_prs_perslid_matchcode);
            v_prs_perslid_matchwaarde := TRIM (v_prs_perslid_matchwaarde);
            v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1);
            v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2);
            v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3);
            v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4);
            v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5);
            v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6);
            v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7);
            v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8);
            v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9);
            v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10);
            v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11);
            v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12);
            v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13);
            v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14);
            v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15);
            v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16);
            v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17);
            v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18);
            v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19);
            v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20);

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

                  -- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
                  -- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
                  -- dan is kenmerkwaarde<n> gevuld met <waarde>!
                  -- NB. Een NULL-waarde resulteert NIET in het wissen van een
                  --     kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
                  INSERT INTO rwsn_imp_ins (
                                               ins_discipline_omschrijving,
                                               ins_discipline_kostensoort,
                                               ins_srtgroep_omschrijving,
                                               ins_srtdeel_code,
                                               ins_srtdeel_omschrijving,
                                               ins_deel_omschrijving,
                                               reserveerbaar,
                                               res_deel_eenheid,
                                               res_deel_prijs,
                                               alg_locatie_code,
                                               alg_gebouw_code,
                                               alg_verdieping_volgnr,
                                               alg_ruimte_nr,
                                               res_deel_alg_level,
                                               res_discipline_omschrijving,
                                               res_discipline_kostensoort,
                                               prs_perslid_matchcode,
                                               prs_perslid_matchwaarde,
                                               ins_kenmerkwaarde1,
                                               ins_kenmerkwaarde2,
                                               ins_kenmerkwaarde3,
                                               ins_kenmerkwaarde4,
                                               ins_kenmerkwaarde5,
                                               ins_kenmerkwaarde6,
                                               ins_kenmerkwaarde7,
                                               ins_kenmerkwaarde8,
                                               ins_kenmerkwaarde9,
                                               ins_kenmerkwaarde10,
                                               ins_kenmerkwaarde11,
                                               ins_kenmerkwaarde12,
                                               ins_kenmerkwaarde13,
                                               ins_kenmerkwaarde14,
                                               ins_kenmerkwaarde15,
                                               ins_kenmerkwaarde16,
                                               ins_kenmerkwaarde17,
                                               ins_kenmerkwaarde18,
                                               ins_kenmerkwaarde19,
                                               ins_kenmerkwaarde20
                             )
                    VALUES   (
                                 v_ins_discipline_omschrijving,
                                 v_ins_discipline_kostensoort,
                                 v_ins_srtgroep_omschrijving,
                                 v_ins_srtdeel_code,
                                 v_ins_srtdeel_omschrijving,
                                 v_ins_deel_omschrijving,
                                 v_reserveerbaar_n,
                                 v_res_deel_eenheid,
                                 v_res_deel_prijs_n,
                                 v_alg_locatie_code,
                                 v_alg_gebouw_code,
                                 v_alg_verdieping_volgnr_n,
                                 v_alg_ruimte_nr,
                                 v_res_deel_alg_level_n,
                                 v_res_discipline_omschrijving,
                                 v_res_discipline_kostensoort,
                                 v_prs_perslid_matchcode,
                                 v_prs_perslid_matchwaarde,
                                 DECODE (v_ins_srtkenmerk_key1,
                                    NULL, v_ins_kenmerkwaarde1,
                                       TO_CHAR (v_ins_srtkenmerk_key1)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde1, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key2,
                                    NULL, v_ins_kenmerkwaarde2,
                                       TO_CHAR (v_ins_srtkenmerk_key2)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde2, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key3,
                                    NULL, v_ins_kenmerkwaarde3,
                                       TO_CHAR (v_ins_srtkenmerk_key3)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde3, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key4,
                                    NULL, v_ins_kenmerkwaarde4,
                                       TO_CHAR (v_ins_srtkenmerk_key4)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde4, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key5,
                                    NULL, v_ins_kenmerkwaarde5,
                                       TO_CHAR (v_ins_srtkenmerk_key5)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde5, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key6,
                                    NULL, v_ins_kenmerkwaarde6,
                                       TO_CHAR (v_ins_srtkenmerk_key6)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde6, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key7,
                                    NULL, v_ins_kenmerkwaarde7,
                                       TO_CHAR (v_ins_srtkenmerk_key7)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde7, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key8,
                                    NULL, v_ins_kenmerkwaarde8,
                                       TO_CHAR (v_ins_srtkenmerk_key8)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde8, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key9,
                                    NULL, v_ins_kenmerkwaarde9,
                                       TO_CHAR (v_ins_srtkenmerk_key9)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde9, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key10,
                                    NULL, v_ins_kenmerkwaarde10,
                                       TO_CHAR (v_ins_srtkenmerk_key10)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde10, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key11,
                                    NULL, v_ins_kenmerkwaarde11,
                                       TO_CHAR (v_ins_srtkenmerk_key11)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde11, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key12,
                                    NULL, v_ins_kenmerkwaarde12,
                                       TO_CHAR (v_ins_srtkenmerk_key12)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde12, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key13,
                                    NULL, v_ins_kenmerkwaarde13,
                                       TO_CHAR (v_ins_srtkenmerk_key13)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde13, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key14,
                                    NULL, v_ins_kenmerkwaarde14,
                                       TO_CHAR (v_ins_srtkenmerk_key14)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde14, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key15,
                                    NULL, v_ins_kenmerkwaarde15,
                                       TO_CHAR (v_ins_srtkenmerk_key15)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde15, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key16,
                                    NULL, v_ins_kenmerkwaarde16,
                                       TO_CHAR (v_ins_srtkenmerk_key16)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde16, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key17,
                                    NULL, v_ins_kenmerkwaarde17,
                                       TO_CHAR (v_ins_srtkenmerk_key17)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde17, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key18,
                                    NULL, v_ins_kenmerkwaarde18,
                                       TO_CHAR (v_ins_srtkenmerk_key18)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde18, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key19,
                                    NULL, v_ins_kenmerkwaarde19,
                                       TO_CHAR (v_ins_srtkenmerk_key19)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde19, 1, 200)
                                 ),
                                 DECODE (
                                    v_ins_srtkenmerk_key20,
                                    NULL, v_ins_kenmerkwaarde20,
                                       TO_CHAR (v_ins_srtkenmerk_key20)
                                    || '='
                                    || SUBSTR (v_ins_kenmerkwaarde20, 1, 200)
                                 )
                             );

                  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',
         'Objecten/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   COMMIT;
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 objecten afgebroken!');
END rwsn_import_ins;
/

/* Formatted on 13-12-2012 11:42:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_update_ins (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (200);

   -- SUBPROC
   PROCEDURE add_kostensoort (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   prs_kostensoort_upper,
                    MAX (prs_kostensoort_omschrijving)
                       prs_kostensoort_omschrijving
             FROM   (  SELECT   UPPER (ins_discipline_kostensoort)
                                   prs_kostensoort_upper,
                                MAX (ins_discipline_kostensoort)
                                   prs_kostensoort_omschrijving
                         FROM   rwsn_imp_ins
                        WHERE   ins_discipline_kostensoort IS NOT NULL
                     GROUP BY   UPPER (ins_discipline_kostensoort)
                     UNION ALL
                       SELECT   UPPER (res_discipline_kostensoort)
                                   prs_kostensoort_upper,
                                MAX (res_discipline_kostensoort)
                                   prs_kostensoort_omschrijving
                         FROM   rwsn_imp_ins
                        WHERE   reserveerbaar = 1
                                AND res_discipline_kostensoort IS NOT NULL
                     GROUP BY   UPPER (res_discipline_kostensoort))
         GROUP BY   prs_kostensoort_upper;

      v_kostensoort_key   NUMBER (10);
      ccount              NUMBER (10);
      v_count_tot         NUMBER (10);
      v_count_update      NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout toevoegen kostensoort [' || rec.prs_kostensoort_omschrijving || ']';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   prs_kostensoort
             WHERE   TRIM (prs_kostensoort_upper) = rec.prs_kostensoort_upper;

            IF ccount = 0
            THEN
               INSERT INTO prs_kostensoort (prs_kostensoort_oms)
                 VALUES   (rec.prs_kostensoort_omschrijving);

               v_count_update := v_count_update + 1;
            END IF;

            COMMIT;
         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',
         'Kostensoorten/#ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Kostensoorten/#toegevoegd: ' || TO_CHAR (v_count_update),
         ''
      );
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   UPPER (ins_discipline_omschrijving) ins_discipline_upper,
                    UPPER (ins_discipline_kostensoort) ins_kostensoort_upper,
                    MAX (ins_discipline_omschrijving)
                       ins_discipline_omschrijving
             FROM   rwsn_imp_ins
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_discipline_kostensoort);

      v_kostensoort_key   NUMBER (10);
      v_discipline_key    NUMBER (10);
      ccount              NUMBER (10);
      v_count_tot         NUMBER (10);
      v_count_update      NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      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
               IF rec.ins_kostensoort_upper IS NULL
               THEN
                  v_kostensoort_key := NULL;
               ELSE
                  SELECT   prs_kostensoort_key
                    INTO   v_kostensoort_key
                    FROM   prs_kostensoort
                   WHERE   TRIM (prs_kostensoort_upper) =
                              rec.ins_kostensoort_upper;
               END IF;

               INSERT INTO ins_tab_discipline (ins_discipline_module,
                                               ins_discipline_omschrijving,
                                               ins_discipline_min_level,
                                               ins_discipline_kpnverplicht,
                                               prs_kostensoort_key)
                  VALUES   ('INS',
                            SUBSTR (rec.ins_discipline_omschrijving, 1, 30),
                            1,
                            0,
                            v_kostensoort_key)
               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);

               v_count_update := v_count_update + 1;
            END IF;

            COMMIT;
         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_resdiscipline (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   UPPER (res_discipline_omschrijving) res_discipline_upper,
                    UPPER (res_discipline_kostensoort) res_kostensoort_upper,
                    MAX (res_discipline_omschrijving)
                       res_discipline_omschrijving
             FROM   rwsn_imp_ins
            WHERE   reserveerbaar = 1
         GROUP BY   UPPER (res_discipline_omschrijving),
                    UPPER (res_discipline_kostensoort);

      v_kostensoort_key   NUMBER (10);
      v_discipline_key    NUMBER (10);
      ccount              NUMBER (10);
      v_count_tot         NUMBER (10);
      v_count_update      NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout toevoegen RES-discipline [' || rec.res_discipline_omschrijving || ']';

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

            IF ccount = 0
            THEN
               IF rec.res_kostensoort_upper IS NULL
               THEN
                  v_kostensoort_key := NULL;
               ELSE
                  SELECT   prs_kostensoort_key
                    INTO   v_kostensoort_key
                    FROM   prs_kostensoort
                   WHERE   TRIM (prs_kostensoort_upper) =
                              rec.res_kostensoort_upper;
               END IF;

               INSERT INTO ins_tab_discipline (ins_discipline_module,
                                               ins_discipline_omschrijving,
                                               ins_discipline_min_level,
                                               ins_discipline_kpnverplicht,
                                               prs_kostensoort_key)
                  VALUES   ('RES',
                            SUBSTR (rec.res_discipline_omschrijving, 1, 30),
                            1,
                            0,
                            v_kostensoort_key)
               RETURNING   ins_discipline_key      INTO   v_discipline_key;

               INSERT INTO res_disc_params (res_ins_discipline_key)
                 VALUES   (v_discipline_key);

               v_count_update := v_count_update + 1;
            END IF;

            COMMIT;
         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',
         'RES-Disciplines/#ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'RES-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   rwsn_imp_ins
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_srtgroep_omschrijving);

      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen discipline';

            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 groepsoort [' || rec.ins_srtgroep_omschrijving || '] ';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_srtgroep
             WHERE       ins_srtgroep_verwijder IS NULL
                     AND ins_srtgroep_module = 'INS'
                     AND ins_discipline_key = v_discipline_key
                     AND TRIM (ins_srtgroep_upper) = 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',
                              SUBSTR (TRIM (rec.ins_srtgroep_omschrijving),
                                      1,
                                      60)
                          );

               v_count_update := v_count_update + 1;
            END IF;

            COMMIT;
         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',
         'Groepsoorten/#ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         '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_code) ins_srtdeel_code_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   rwsn_imp_ins
         GROUP BY   UPPER (ins_discipline_omschrijving),
                    UPPER (ins_srtgroep_omschrijving),
                    UPPER (ins_srtdeel_code),
                    UPPER (ins_srtdeel_omschrijving);

      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      ccount             NUMBER (10);
      v_count_tot        NUMBER (10);
      v_count_update     NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_update := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen discipline';

            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 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 TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;

            v_errormsg := 'Fout toevoegen 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 TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;

            IF ccount = 0
            THEN
               -- binding 17 betekent ruimtegebonden 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',
                           rec.ins_srtdeel_code,
                           rec.ins_srtdeel_omschrijving,
                           17);

               v_count_update := v_count_update + 1;
            END IF;

            COMMIT;
         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',
         'Objectsoorten/#ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         '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;
   BEGIN
      IF p_srtkenmerk_key IS NOT NULL AND p_waarde 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 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_omschr)) =
                              UPPER (p_waarde);
            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 ('''
                  || p_waarde
                  || ''')';

               EXECUTE IMMEDIATE sql_stmt INTO   v_waarde;
            END IF;
         ELSE                                  -- C(haracter)/D(ate)/N(umeric)
            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;
      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');
   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, alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr,
                  reserveerbaar, res_discipline_omschrijving, res_deel_eenheid, res_deel_prijs, res_deel_alg_level,
                  prs_perslid_matchcode, prs_perslid_matchwaarde,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde1, 1, INSTR (ins_kenmerkwaarde1, '=') - 1)) srtkenmerk_key1,
                  SUBSTR (ins_kenmerkwaarde1, INSTR (ins_kenmerkwaarde1, '=') + 1) waarde1,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde2, 1, INSTR (ins_kenmerkwaarde2, '=') - 1)) srtkenmerk_key2,
                  SUBSTR (ins_kenmerkwaarde2, INSTR (ins_kenmerkwaarde2, '=') + 1) waarde2,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde3, 1, INSTR (ins_kenmerkwaarde3, '=') - 1)) srtkenmerk_key3,
                  SUBSTR (ins_kenmerkwaarde3, INSTR (ins_kenmerkwaarde3, '=') + 1) waarde3,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde4, 1, INSTR (ins_kenmerkwaarde4, '=') - 1)) srtkenmerk_key4,
                  SUBSTR (ins_kenmerkwaarde4, INSTR (ins_kenmerkwaarde4, '=') + 1) waarde4,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde5, 1, INSTR (ins_kenmerkwaarde5, '=') - 1)) srtkenmerk_key5,
                  SUBSTR (ins_kenmerkwaarde5, INSTR (ins_kenmerkwaarde5, '=') + 1) waarde5,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde6, 1, INSTR (ins_kenmerkwaarde6, '=') - 1)) srtkenmerk_key6,
                  SUBSTR (ins_kenmerkwaarde6, INSTR (ins_kenmerkwaarde6, '=') + 1) waarde6,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde7, 1, INSTR (ins_kenmerkwaarde7, '=') - 1)) srtkenmerk_key7,
                  SUBSTR (ins_kenmerkwaarde7, INSTR (ins_kenmerkwaarde7, '=') + 1) waarde7,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde8, 1, INSTR (ins_kenmerkwaarde8, '=') - 1)) srtkenmerk_key8,
                  SUBSTR (ins_kenmerkwaarde8, INSTR (ins_kenmerkwaarde8, '=') + 1) waarde8,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde9, 1, INSTR (ins_kenmerkwaarde9, '=') - 1)) srtkenmerk_key9,
                  SUBSTR (ins_kenmerkwaarde9, INSTR (ins_kenmerkwaarde9, '=') + 1) waarde9,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde10, 1, INSTR (ins_kenmerkwaarde10, '=') - 1)) srtkenmerk_key10,
                  SUBSTR (ins_kenmerkwaarde10, INSTR (ins_kenmerkwaarde10, '=') + 1) waarde10,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde11, 1, INSTR (ins_kenmerkwaarde11, '=') - 1)) srtkenmerk_key11,
                  SUBSTR (ins_kenmerkwaarde11, INSTR (ins_kenmerkwaarde11, '=') + 1) waarde11,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde12, 1, INSTR (ins_kenmerkwaarde12, '=') - 1)) srtkenmerk_key12,
                  SUBSTR (ins_kenmerkwaarde12, INSTR (ins_kenmerkwaarde12, '=') + 1) waarde12,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde13, 1, INSTR (ins_kenmerkwaarde13, '=') - 1)) srtkenmerk_key13,
                  SUBSTR (ins_kenmerkwaarde13, INSTR (ins_kenmerkwaarde13, '=') + 1) waarde13,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde14, 1, INSTR (ins_kenmerkwaarde14, '=') - 1)) srtkenmerk_key14,
                  SUBSTR (ins_kenmerkwaarde14, INSTR (ins_kenmerkwaarde14, '=') + 1) waarde14,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde15, 1, INSTR (ins_kenmerkwaarde15, '=') - 1)) srtkenmerk_key15,
                  SUBSTR (ins_kenmerkwaarde15, INSTR (ins_kenmerkwaarde15, '=') + 1) waarde15,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde16, 1, INSTR (ins_kenmerkwaarde16, '=') - 1)) srtkenmerk_key16,
                  SUBSTR (ins_kenmerkwaarde16, INSTR (ins_kenmerkwaarde16, '=') + 1) waarde16,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde17, 1, INSTR (ins_kenmerkwaarde17, '=') - 1)) srtkenmerk_key17,
                  SUBSTR (ins_kenmerkwaarde17, INSTR (ins_kenmerkwaarde17, '=') + 1) waarde17,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde18, 1, INSTR (ins_kenmerkwaarde18, '=') - 1)) srtkenmerk_key18,
                  SUBSTR (ins_kenmerkwaarde18, INSTR (ins_kenmerkwaarde18, '=') + 1) waarde18,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde19, 1, INSTR (ins_kenmerkwaarde19, '=') - 1)) srtkenmerk_key19,
                  SUBSTR (ins_kenmerkwaarde19, INSTR (ins_kenmerkwaarde19, '=') + 1) waarde19,
                  fac.safe_to_number(SUBSTR (ins_kenmerkwaarde20, 1, INSTR (ins_kenmerkwaarde20, '=') - 1)) srtkenmerk_key20,
                  SUBSTR (ins_kenmerkwaarde20, INSTR (ins_kenmerkwaarde20, '=') + 1) waarde20
           FROM   rwsn_imp_ins;

      v_discipline_key    NUMBER (10);
      v_rdiscipline_key   NUMBER (10);
      v_srtgroep_key      NUMBER (10);
      v_srtdeel_key       NUMBER (10);
      v_locatie_key       NUMBER (10);
      v_gebouw_key        NUMBER (10);
      v_verdieping_key    NUMBER (10);
      v_ruimte_key        NUMBER (10);
      v_matchkolom        VARCHAR2 (255);
      sql_stmt            VARCHAR2 (1000);
      v_ruimte_type       VARCHAR2 (10);
      v_deel_key          NUMBER (10);
      ccount              NUMBER (10);
      v_count_tot         NUMBER (10);
      v_count_insnew      NUMBER (10);
      v_count_insupd      NUMBER (10);
      v_count_resnew      NUMBER (10);
      v_srtnoti_code      VARCHAR2 (6);
   BEGIN
      v_count_tot := 0;
      v_count_insnew := 0;
      v_count_insupd := 0;
      v_count_resnew := 0;
      v_aanduiding := '';

      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
               || '] ';
            v_errormsg := 'Fout bepalen discipline';

            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)) =
                           UPPER (rec.ins_discipline_omschrijving);

            v_errormsg := 'Fout bepalen 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 TRIM (ins_srtgroep_upper) =
                           UPPER (rec.ins_srtgroep_omschrijving);

            v_errormsg := 'Fout bepalen 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 TRIM (ins_srtdeel_upper) =
                           UPPER (rec.ins_srtdeel_omschrijving);

            v_locatie_key := NULL;

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

               v_ruimte_type := 'R';

               -- ruimtegebonden objecten hebben een unieke ID binnen locatie
               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigdeel
                WHERE       ins_deel_module = 'INS'
                        AND ins_srtdeel_key = v_srtdeel_key
                        AND ins_alg_ruimte_type = v_ruimte_type           -- R
                        AND ins_alg_locatie_key = v_locatie_key
                        AND TRIM (ins_deel_upper) =
                              UPPER (rec.ins_deel_omschrijving);
            ELSE                                    -- persoonsgebonden object
               v_matchkolom := '';

               CASE rec.prs_perslid_matchcode
                  WHEN '1'
                  THEN
                     v_matchkolom := 'PRS_PERSLID_EMAIL';
                  WHEN '2'
                  THEN
                     v_matchkolom := 'PRS_PERSLID_OSLOGIN';
                  WHEN '3'
                  THEN
                     v_matchkolom := 'PRS_PERSLID_KEY';
                  WHEN '4'
                  THEN
                     v_matchkolom := 'PRS_PERSLID_NR';
                  WHEN '5'
                  THEN
                     v_matchkolom :=
                        'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
                  ELSE
                     -- voor developers only: indien geen code wordt gebruikt,
                     -- kan als persoonmatchcode een kolom uit de perslid-tabel
                     -- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2
                     v_matchkolom := rec.prs_perslid_matchcode;
               END CASE;

               v_errormsg := 'Fout bepalen persoon [' || rec.prs_perslid_matchwaarde || ']';
               sql_stmt :=
                     'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) '
                  || '  FROM prs_v_aanwezigperslid '
                  || ' WHERE UPPER ('
                  || v_matchkolom
                  || ') = UPPER ('''
                  || rec.prs_perslid_matchwaarde
                  || ''') '
                  || 'GROUP BY prs_perslid_key';

               EXECUTE IMMEDIATE sql_stmt INTO   v_ruimte_key, ccount;

               IF ccount != 1
               THEN
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Kan persoon niet 1-duidig bepalen');
               END IF;

               v_ruimte_type := 'P';

               -- persoonsgebonden objecten hebben een unieke ID
               SELECT   COUNT ( * )
                 INTO   ccount
                 FROM   ins_v_aanwezigdeel
                WHERE       ins_deel_module = 'INS'
                        AND ins_srtdeel_key = v_srtdeel_key
                        AND ins_alg_ruimte_type = v_ruimte_type           -- P
                        AND ins_alg_locatie_key IS NULL
                        AND TRIM (ins_deel_upper) =
                              UPPER (rec.ins_deel_omschrijving);
            END IF;

            IF ccount = 0
            THEN                                          -- toevoegen object!
               v_errormsg := 'Fout toevoegen INS-object';

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

               -- Overslaan als reserveerbaar en geen RES-discipline of andersom,
               -- dus verder geen controle op eventuele inconsistentie!
               IF (rec.reserveerbaar = 1
                   AND rec.res_discipline_omschrijving IS NOT NULL)
               THEN
                  v_errormsg := 'Fout bepalen RES-discipline [' || rec.res_discipline_omschrijving || ']';

                  SELECT   ins_discipline_key
                    INTO   v_rdiscipline_key
                    FROM   res_discipline
                   WHERE   ins_discipline_verwijder IS NULL
                           AND ins_discipline_module = 'RES'
                           AND UPPER (TRIM (ins_discipline_omschrijving)) =
                                 UPPER (rec.res_discipline_omschrijving);

                  v_errormsg := 'Fout toevoegen RES-object';

                  INSERT INTO res_deel (res_ins_deel_key,
                                        res_deel_eenheid,
                                        res_deel_prijs,
                                        res_discipline_key,
                                        res_deel_alg_level)
                    VALUES   (v_deel_key,
                              rec.res_deel_eenheid,
                              rec.res_deel_prijs,
                              v_rdiscipline_key,
                              rec.res_deel_alg_level);

                  v_count_resnew := v_count_resnew + 1;
               END IF;

               v_srtnoti_code := 'INSNEW';
               v_count_insnew := v_count_insnew + 1;
            ELSE                                          -- bijwerken object!
               v_errormsg := 'Fout bepalen INS-object';

               SELECT   ins_deel_key
                 INTO   v_deel_key
                 FROM   ins_v_aanwezigdeel
                WHERE       ins_deel_module = 'INS'
                        AND ins_srtdeel_key = v_srtdeel_key
                        AND ins_alg_ruimte_type = v_ruimte_type         -- R/P
                        AND COALESCE (ins_alg_locatie_key, -1) =
                              COALESCE (v_locatie_key, -1)      -- gevuld/NULL
                        AND TRIM (ins_deel_upper) =
                              UPPER (rec.ins_deel_omschrijving);

               v_srtnoti_code := 'INSUPD';
               v_count_insupd := v_count_insupd + 1;
            END IF;

            -- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
            -- (bijwerken kan wel, maar wissen dus niet)!
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key1, rec.waarde1);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key2, rec.waarde2);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key3, rec.waarde3);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key4, rec.waarde4);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key5, rec.waarde5);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key6, rec.waarde6);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key7, rec.waarde7);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key8, rec.waarde8);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key9, rec.waarde9);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key10, rec.waarde10);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key11, rec.waarde11);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key12, rec.waarde12);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key13, rec.waarde13);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key14, rec.waarde14);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key15, rec.waarde15);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key16, rec.waarde16);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key17, rec.waarde17);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key18, rec.waarde18);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key19, rec.waarde19);
            upsert_inskenmerk (v_deel_key, rec.srtkenmerk_key20, rec.waarde20);

            fac.trackaction (v_srtnoti_code, v_deel_key, NULL, NULL, NULL);
            COMMIT;
         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_insnew),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'INS-objecten/#bijgewerkt: ' || TO_CHAR (v_count_insupd),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'RES-objecten/#toegevoegd: ' || TO_CHAR (v_count_resnew),
         ''
      );
      COMMIT;
   END;
-- MAIN
BEGIN
   add_kostensoort (p_import_key);
   add_insdiscipline (p_import_key);
   add_resdiscipline (p_import_key);
   add_srtgroep (p_import_key);
   add_srtdeel (p_import_key);
   add_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 objecten afgebroken!');
END rwsn_update_ins;
/

-- RWSN#25817: Rapportage voor Unit IV (Unit4?)
/* Formatted on 24-3-2014 17:15:35 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_gebouwenlijst
(
   objectcode,
   fclt_f_bezoekplaats,
   bezoekadres,
   bezoekpostcode,
   dienstnaam,
   fclt_f_pp_ef,
   fclt_f_regio,
   district,
   fclt_f_type_vastgoed,
   fclt_f_gebouwfunctie,
   gebouwopmerking,
   fclt_f_eigendom_huur,
   verantwoordelijke,
   verantw_tel,
   email
)
AS
   SELECT x.alg_gebouw_code,
          x.alg_locatie_plaats,
          x.alg_locatie_adres,
          x.alg_locatie_postcode,
          a.dienstnaam,
          b.pp_ef,
          x.alg_regio_omschrijving,
          x.alg_district_omschrijving,
          c.type_vastgoed,
          x.alg_srtgebouw_omschrijving,
          x.alg_gebouw_opmerking,
          d.eigendom_huur,
          x.alg_locatie_verantw,
          x.alg_locatie_verantw_tel,
          e.alg_onrgoedkenmerk_waarde email
     FROM (SELECT g.alg_gebouw_key,
                  g.alg_gebouw_code,
                  g.alg_gebouw_opmerking,
                  sg.alg_srtgebouw_omschrijving,
                  l.alg_locatie_key,
                  l.alg_locatie_code,
                  l.alg_locatie_adres,
                  l.alg_locatie_postcode,
                  l.alg_locatie_plaats,
                  l.alg_locatie_verantw,
                  l.alg_locatie_verantw_tel,
                  d.alg_district_omschrijving,
                  r.alg_regio_omschrijving
             FROM alg_v_aanwezigregio r,
                  alg_v_aanwezigdistrict d,
                  alg_v_aanweziglocatie l,
                  alg_v_aanweziggebouw g,
                  alg_srtgebouw sg
            WHERE     r.alg_regio_key = d.alg_regio_key
                  AND d.alg_district_key = l.alg_district_key
                  AND l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_upper NOT LIKE 'ZZ%'
                  AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key) x
          LEFT JOIN                                         -- 1061=Dienstnaam
                    (SELECT ok.alg_onrgoed_key,
                            ud.fac_usrdata_omschr dienstnaam
                       FROM alg_v_aanwezigonrgoedkenmerk ok,
                            fac_v_aanwezigusrdata ud
                      WHERE ok.alg_kenmerk_key = 1061
                            AND ud.fac_usrdata_key =
                                  fac.safe_to_number (
                                     ok.alg_onrgoedkenmerk_waarde)) a
             ON x.alg_gebouw_key = a.alg_onrgoed_key
          LEFT JOIN                                              -- 1121=PP/EF
                    (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr pp_ef
                       FROM alg_v_aanwezigonrgoedkenmerk ok,
                            fac_v_aanwezigusrdata ud
                      WHERE ok.alg_kenmerk_key = 1121
                            AND ud.fac_usrdata_key =
                                  fac.safe_to_number (
                                     ok.alg_onrgoedkenmerk_waarde)) b
             ON x.alg_gebouw_key = b.alg_onrgoed_key
          LEFT JOIN                                      -- 1068=Type vastgoed
                    (SELECT ok.alg_onrgoed_key,
                            ud.fac_usrdata_omschr type_vastgoed
                       FROM alg_v_aanwezigonrgoedkenmerk ok,
                            fac_v_aanwezigusrdata ud
                      WHERE ok.alg_kenmerk_key = 1068
                            AND ud.fac_usrdata_key =
                                  fac.safe_to_number (
                                     ok.alg_onrgoedkenmerk_waarde)) c
             ON x.alg_gebouw_key = c.alg_onrgoed_key
          LEFT JOIN                                      -- 1072=Eigendom/huur
                    (SELECT ok.alg_onrgoed_key,
                            ud.fac_usrdata_omschr eigendom_huur
                       FROM alg_v_aanwezigonrgoedkenmerk ok,
                            fac_v_aanwezigusrdata ud
                      WHERE ok.alg_kenmerk_key = 1072
                            AND ud.fac_usrdata_key =
                                  fac.safe_to_number (
                                     ok.alg_onrgoedkenmerk_waarde)) d
             ON x.alg_gebouw_key = d.alg_onrgoed_key
          LEFT JOIN              -- 1381=E-mail verantwoordelijke (RWSN#29157)
                   alg_v_aanwezigonrgoedkenmerk e
             ON x.alg_locatie_key = e.alg_onrgoed_key
                AND e.alg_kenmerk_key = 1381;

/* Formatted on 21-11-2013 10:42:16 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_import_appl (p_import_key IN NUMBER)
IS
   c_delim            VARCHAR2 (1) := ';';
   v_newline          VARCHAR2 (1000);                           -- Input line
   v_errormsg         VARCHAR2 (1000);
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   header_is_valid    NUMBER;
   v_count_tot        NUMBER (10);
   v_count_import     NUMBER (10);
   v_ongeldig         NUMBER (1);
   v_aanduiding       VARCHAR (200);
   -- De importvelden:
   v_spiv_domein      VARCHAR2 (255);                                   -- C60
   v_applicatiecode   VARCHAR2 (255);                                   -- C10
   v_applicatienaam   VARCHAR2 (255);                                  -- C100
   v_aut_proces       VARCHAR2 (255);                     -- C10; feitelijk 1!
   v_beh_type         VARCHAR2 (255);                                   -- C10
   v_beh_mail         VARCHAR2 (255);                                   -- C60
   v_beh_org          VARCHAR2 (255);                                   -- C10
   v_webbased         VARCHAR2 (255);                     -- C10; feitelijk 1!
   v_vervaldatum      VARCHAR2 (255);                                   -- C10
   v_vervaldatum_d    DATE;

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

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   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_spiv_domein);
         fac.imp_getfield (v_newline, c_delim, v_applicatiecode);
         fac.imp_getfield (v_newline, c_delim, v_applicatienaam);
         fac.imp_getfield (v_newline, c_delim, v_aut_proces);
         fac.imp_getfield (v_newline, c_delim, v_beh_type);
         fac.imp_getfield (v_newline, c_delim, v_beh_mail);
         fac.imp_getfield (v_newline, c_delim, v_beh_org);
         fac.imp_getfield (v_newline, c_delim, v_webbased);
         fac.imp_getfield (v_newline, c_delim, v_vervaldatum);

         v_aanduiding :=
               '['
            || v_spiv_domein
            || '|'
            || v_applicatiecode
            || '|'
            || v_applicatienaam
            || '|'
            || v_aut_proces
            || '] ';

         -- 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_spiv_domein) = 'SPIV_DOMEIN'
               AND UPPER (v_applicatiecode) = 'APPLICATIECODE'
               AND UPPER (v_applicatienaam) = 'APPLICATIENAAM'
               AND UPPER (v_aut_proces) = 'AUTORISATIEPROCES'
               AND UPPER (v_beh_type) = 'BEHEERDER_TYPE'
               AND UPPER (v_beh_mail) = 'BEHEERDER_MAIL'
               AND UPPER (v_beh_org) = 'BEHEERDER_ORG'
               AND UPPER (v_webbased) = 'WEBBASED'
               AND UPPER (v_vervaldatum) = 'VERVALDATUM'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'SPIV-domein ongeldig; ongedefinieerd of te lang';
            v_spiv_domein := TRIM (v_spiv_domein);

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

            --
            v_errormsg := 'Applicatiecode ongeldig; ongedefinieerd of te lang';
            v_applicatiecode := TRIM (v_applicatiecode);

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

            --
            v_errormsg := 'Applicatienaam ongeldig; ongedefinieerd of te lang';
            v_applicatienaam := TRIM (v_applicatienaam);

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

            --
            v_errormsg :=
               'Autorisatieproces ongeldig; ongedefinieerd of te lang';
            v_aut_proces := TRIM (v_aut_proces);

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

            --
            v_errormsg := 'Beheerder-type ongeldig; ongedefinieerd';
            v_beh_type := TRIM (v_beh_type);

            IF UPPER (v_beh_type) != 'FB' AND UPPER (v_beh_type) != 'KEY'
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Regel wordt overgeslagen!');
            END IF;

            --
            v_errormsg := 'Beheerder-mail ongeldig';
            v_beh_mail := TRIM (v_beh_mail);

            IF UPPER (v_beh_type) = 'FB' OR UPPER (v_beh_type) = 'KEY'
            THEN
               IF v_beh_mail IS NULL OR LENGTH (v_beh_org) > 60
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               END IF;
            ELSE
               IF v_ongeldig = 0 AND LENGTH (v_beh_mail) > 0
               THEN
                  v_beh_mail := NULL;
                  fac.imp_writelog (p_import_key,
                                    'I',
                                    v_aanduiding || v_errormsg,
                                    'Beheerder-mail wordt genegeerd');
               END IF;
            END IF;

            --
            v_errormsg := 'Beheerder-organisatie ongeldig';
            v_beh_org := TRIM (v_beh_org);

            IF UPPER (v_beh_type) = 'KEY'
            THEN
               IF v_beh_org IS NULL OR LENGTH (v_beh_org) > 10
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               END IF;
            ELSE
               IF v_ongeldig = 0 AND LENGTH (v_beh_org) > 0
               THEN
                  v_beh_org := NULL;
                  fac.imp_writelog (p_import_key,
                                    'I',
                                    v_aanduiding || v_errormsg,
                                    'Beheerder-organisatie wordt genegeerd');
               END IF;
            END IF;

            --
            v_errormsg := 'Webbased-eigenschap ongeldig; ongedefinieerd of te lang';
            v_webbased := TRIM (v_webbased);

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

            --
            v_errormsg := 'Vervaldatum ongeldig';
            v_vervaldatum := TRIM (v_vervaldatum);
            v_vervaldatum_d := fac.safe_to_date (v_vervaldatum, 'dd-mm-yyyy');

            IF v_vervaldatum IS NOT NULL AND v_vervaldatum_d IS NULL
            THEN
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errormsg,
                                 'Vervaldatum wordt genegeerd');
            END IF;

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

                  INSERT INTO rwsn_imp_appl (spiv_domein,
                                             applicatiecode,
                                             applicatienaam,
                                             aut_proces,
                                             beh_type,
                                             beh_mail,
                                             beh_org,
                                             webbased,
                                             vervaldatum)
                    VALUES   (v_spiv_domein,
                              v_applicatiecode,
                              v_applicatienaam,
                              v_aut_proces,
                              v_beh_type,
                              v_beh_mail,
                              v_beh_org,
                              v_webbased,
                              v_vervaldatum_d);

                  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',
         'DID-applicaties/#ingelezen importregels: '
         || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'DID-applicaties/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   COMMIT;
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 DID-applicaties afgebroken!');
END rwsn_import_appl;
/

/* Formatted on 12-12-2013 15:52:25 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE rwsn_update_appl (p_import_key IN NUMBER)
AS
   c_appl_discipline     NUMBER (10) := 2361;
   c_aut_proces_srtkey   NUMBER (10) := 101;
   c_webbased_srtkey     NUMBER (10) := 102;
   c_fb1_srtkey          NUMBER (10) := 103;
   c_fb2_srtkey          NUMBER (10) := 104;
   c_fb3_srtkey          NUMBER (10) := 105;
   c_min_key_srtkey      NUMBER (10) := 121;                    -- Keyuser1 NN
   c_max_key_srtkey      NUMBER (10) := 195;                   -- Keyuser5 RvR
   v_errormsg            VARCHAR2 (1000) := '-';
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_aanduiding          VARCHAR2 (200);

   -- SUBPROC
   PROCEDURE add_srtgroep (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   UPPER (spiv_domein) spiv_domein_upper,
                    MAX (spiv_domein) spiv_domein
             FROM   rwsn_imp_appl
         GROUP BY   UPPER (spiv_domein)
         ORDER BY   1;

      v_count_tot        NUMBER (10);
      v_count_new        NUMBER (10);
      v_discipline_key   NUMBER (10);
      ccount             NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_new := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bepalen INS-discipline [' || TO_CHAR (c_appl_discipline) || ']';

            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 = c_appl_discipline;

            v_errormsg := 'Fout toevoegen SPIV-domein [' || rec.spiv_domein || ']';

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

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

               v_count_new := v_count_new + 1;
            ELSE                     -- Reanimeer eventueel verwijderde groep!
               UPDATE   ins_srtgroep
                  SET   ins_srtgroep_verwijder = NULL
                WHERE   ins_srtgroep_verwijder IS NOT NULL
                        AND ins_discipline_key = v_discipline_key
                        AND UPPER (TRIM (ins_srtgroep_omschrijving)) =
                              rec.spiv_domein_upper;
            END IF;

            COMMIT;
         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',
         'SPIV-domeinen/#ingelezen: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'SPIV-domeinen/#toegevoegd: ' || TO_CHAR (v_count_new),
         ''
      );
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE upsert_inskenmerk (p_srtdeel_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_objectnaam        VARCHAR2 (30);
      v_kolomnaam         VARCHAR2 (30);
      v_kolomtxt          VARCHAR2 (30);
      sql_stmt            VARCHAR2 (1000);
      v_new_waarde        VARCHAR2 (1000);
      v_kenmerkdeel_key   NUMBER;
      v_cur_waarde        VARCHAR2 (4000);
   BEGIN
      v_errormsg := 'Fout bepalen D-kenmerksoort [' || p_srtkenmerk_key || ']';

      SELECT   k.ins_kenmerk_key, sk.ins_srtkenmerk_kenmerktype
        INTO   v_kenmerk_key, v_srtkenmerk_type
        FROM   ins_srtdeel sd,
               ins_srtgroep sg,
               ins_v_aanwezigkenmerk k,
               ins_v_aanwezigsrtkenmerk sk
       WHERE       sd.ins_srtdeel_key = p_srtdeel_key
               AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
               AND k.ins_srtkenmerk_key = p_srtkenmerk_key
               AND k.ins_srtinstallatie_key = sg.ins_discipline_key
               AND k.ins_kenmerk_niveau = 'D'
               AND k.ins_kenmerk_bewerkniveau = 'S'
               AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;

      IF (v_srtkenmerk_type IN ('R', 'S') AND p_waarde IS NOT NULL)
      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; p_waarde is code!
            SELECT   TO_CHAR (ud.fac_usrdata_key)
              INTO   v_new_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);
         ELSE               -- FACILITOR view/tabel; p_waarde is omschrijving!
            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 ('''
               || p_waarde
               || ''')';

            EXECUTE IMMEDIATE sql_stmt INTO   v_new_waarde;
         END IF;
      ELSE                                     -- C(haracter)/D(ate)/N(umeric)
         v_new_waarde := p_waarde;
      END IF;

      v_errormsg := 'Fout bepalen huidige waarde';

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

      IF (ccount = 0)
      THEN
         IF (v_new_waarde IS NOT NULL)
         THEN
            v_errormsg := 'Fout toevoegen waarde [' || v_new_waarde || ']';

            INSERT INTO ins_kenmerkdeel (
                                            ins_deel_key,
                                            ins_kenmerk_key,
                                            ins_kenmerkdeel_waarde
                       )
              VALUES   (p_srtdeel_key, v_kenmerk_key, v_new_waarde);

            COMMIT;
         END IF;
      ELSIF (COALESCE (v_cur_waarde, -1) <> COALESCE (v_new_waarde, -1))
      THEN
         IF (v_new_waarde IS NOT NULL)
         THEN
            v_errormsg := 'Fout bijwerken waarde [' || v_new_waarde || ']';

            UPDATE   ins_kenmerkdeel
               SET   ins_kenmerkdeel_waarde = v_new_waarde
             WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;
         ELSE                                          -- v_new_waarde IS NULL
            v_errormsg := 'Fout verwijderen waarde [' || v_cur_waarde || ']';

            UPDATE   ins_kenmerkdeel
               SET   ins_kenmerkdeel_verwijder = SYSDATE
             WHERE   ins_kenmerkdeel_key = v_kenmerkdeel_key;
         END IF;

         COMMIT;
      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');
   END;

   -- SUBPROC
   -- Aanmaken/bijwerken applicaties (incl. aut.proces + webbased)!
   PROCEDURE upd_srtdeel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   DISTINCT
                    spiv_domein,
                    applicatiecode,
                    applicatienaam,
                    aut_proces aut_proc_code,                   -- '0' t/m '4'
                    DECODE (UPPER (webbased), 'J', 1, 'N', 0, NULL)
                       webbased_code,
                    vervaldatum
             FROM   rwsn_imp_appl
         ORDER BY   1, 2, 3;

      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      v_srtdeel_key      NUMBER (10);
      ccount             NUMBER (10);
      v_count_tot        NUMBER (10);
      v_count_new        NUMBER (10);
      v_count_upd        NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_new := 0;
      v_count_upd := 0;
      v_aanduiding := '';

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.spiv_domein
               || '|'
               || rec.applicatiecode
               || '|'
               || rec.applicatienaam
               || '] ';
            v_errormsg := 'Fout bepalen INS-discipline [' || TO_CHAR (c_appl_discipline) || ']';

            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 = c_appl_discipline;

            v_errormsg := 'Fout bepalen SPIV-domein';

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

            -- Applicaties hebben unieke code/naam per SPIV-domein???
            -- In FACILITOR naam leidend/uniek en in Troux code leidend/uniek,
            -- dus wat te doen? -> Als 1 of meer namen per code voorkomen, dan
            -- accepteren wij maar dat dit fouten tot gevolg heeft!
            v_errormsg := 'Fout (uniek) bepalen applicatie';

            SELECT   COUNT ( * )
              INTO   ccount
              FROM   ins_srtdeel
             WHERE   ins_srtdeel_module = 'INS'
                     AND ins_srtgroep_key = v_srtgroep_key
                     --AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
                     --      UPPER (rec.applicatienaam)
                     AND TRIM (ins_srtdeel_code_upper) =
                           UPPER (rec.applicatiecode);

            IF (ccount = 0)
            THEN
               v_errormsg := 'Fout toevoegen applicatie';

               -- Binding 16 betekent persoonsgebonden (Persoon-vinkje)!
               INSERT INTO ins_srtdeel (ins_srtgroep_key,
                                        ins_srtdeel_module,
                                        ins_srtdeel_code,
                                        ins_srtdeel_omschrijving,
                                        ins_srtdeel_binding,
                                        ins_srtdeel_vervaldatum)
                  VALUES   (v_srtgroep_key,
                            'INS',
                            UPPER (rec.applicatiecode),
                            rec.applicatienaam,
                            16,
                            rec.vervaldatum)
               RETURNING   ins_srtdeel_key      INTO   v_srtdeel_key;

               COMMIT;

               --v_srtnoti_code := 'INSNEW';
               v_count_new := v_count_new + 1;
            ELSE          -- Objectsoort bestaat reeds en reanimeer eventueel!
               SELECT   MAX (ins_srtdeel_key)
                 INTO   v_srtdeel_key
                 FROM   ins_srtdeel
                WHERE   ins_srtdeel_module = 'INS'
                        AND ins_srtgroep_key = v_srtgroep_key
                        --AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
                        --      UPPER (rec.applicatienaam)
                        AND TRIM (ins_srtdeel_code_upper) =
                              UPPER (rec.applicatiecode);

               v_errormsg := 'Fout bijwerken applicatie';

               UPDATE   ins_srtdeel
                  SET   ins_srtdeel_verwijder = NULL,
                        ins_srtdeel_omschrijving = rec.applicatienaam,
                        ins_srtdeel_vervaldatum = rec.vervaldatum
                WHERE   ins_srtdeel_key = v_srtdeel_key;

               COMMIT;

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

            upsert_inskenmerk (v_srtdeel_key,
                               c_aut_proces_srtkey,
                               rec.aut_proc_code);
            upsert_inskenmerk (v_srtdeel_key,
                               c_webbased_srtkey,
                               rec.webbased_code);
         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',
                        'Applicaties/#ingelezen: ' || TO_CHAR (v_count_tot),
                        '');
      fac.imp_writelog (p_import_key,
                        'S',
                        'Applicaties/#toegevoegd: ' || TO_CHAR (v_count_new),
                        '');
      fac.imp_writelog (p_import_key,
                        'S',
                        'Applicaties/#bijgewerkt: ' || TO_CHAR (v_count_upd),
                        '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE insert_FB (p_srtdeel_key IN NUMBER, p_beh_mail IN VARCHAR2)
   AS
      v_perslid_key   NUMBER;
      v_kenmerk_key   NUMBER;
   BEGIN
      -- Bepalen fb-user op basis van e-mail.
      v_errormsg := 'Fout bepalen fb-user [' || p_beh_mail || ']';

      SELECT   prs_perslid_key
        INTO   v_perslid_key
        FROM   prs_v_aanwezigperslid
       WHERE   INSTR (UPPER (prs_perslid_email), UPPER (p_beh_mail)) > 0
               AND prs_perslid_oslogin IS NOT NULL;

      -- Bepalen eerstvrije=niet gevulde fb-veld (max. 3).
      v_errormsg := 'Fout bepalen fb-veld';

      SELECT   MIN (ins_kenmerk_key) eerstvrije
        INTO   v_kenmerk_key
        FROM   (SELECT   k.ins_kenmerk_key
                  FROM   ins_v_aanwezigkenmerk k, ins_srtkenmerk sk
                 WHERE   k.ins_kenmerk_bewerkniveau = 'S'
                         AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                         AND sk.ins_srtkenmerk_key IN
                                  (c_fb1_srtkey, c_fb2_srtkey, c_fb3_srtkey)
                MINUS
                SELECT   k.ins_kenmerk_key
                  FROM   ins_v_aanwezigkenmerkdeel kd,
                         ins_v_aanwezigkenmerk k,
                         ins_srtkenmerk sk
                 WHERE       kd.ins_deel_key = p_srtdeel_key
                         AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                         AND k.ins_kenmerk_bewerkniveau = 'S'
                         AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                         AND sk.ins_srtkenmerk_key IN
                                  (c_fb1_srtkey, c_fb2_srtkey, c_fb3_srtkey));

      -- Toevoegen (vullen) key-veldwaarde met fb-user.
      v_errormsg := 'Fout toevoegen fb-veldwaarde';

      INSERT INTO ins_kenmerkdeel (
                                      ins_deel_key,
                                      ins_kenmerk_key,
                                      ins_kenmerkdeel_waarde
                 )
        VALUES   (p_srtdeel_key, v_kenmerk_key, v_perslid_key);

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

   -- SUBPROC
   PROCEDURE insert_KEY (p_srtdeel_key   IN NUMBER,
                         p_beh_mail      IN VARCHAR2,
                         p_beh_org       IN VARCHAR2)
   AS
      v_perslid_key   NUMBER;
      v_kenmerk_key   NUMBER;
   BEGIN
      -- Bepalen key-user op basis van e-mail.
      v_errormsg := 'Fout bepalen key-user [' || p_beh_mail || ']';

      SELECT   prs_perslid_key
        INTO   v_perslid_key
        FROM   prs_v_aanwezigperslid
       WHERE   INSTR (UPPER (prs_perslid_email), UPPER (p_beh_mail)) > 0
               AND prs_perslid_oslogin IS NOT NULL;

      -- Bepalen eerstvrije=niet gevulde key-veld voor onderdeel (max. 5).
      v_errormsg := 'Fout bepalen key-veld [' || p_beh_org || ']';

      SELECT   MIN (ins_kenmerk_key) eerstvrije
        INTO   v_kenmerk_key
        FROM   (SELECT   k.ins_kenmerk_key
                  FROM   ins_v_aanwezigkenmerk k, ins_srtkenmerk sk
                 WHERE   k.ins_kenmerk_bewerkniveau = 'S'
                         AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                         AND sk.ins_srtkenmerk_key BETWEEN c_min_key_srtkey
                                                       AND  c_max_key_srtkey
                         AND UPPER (TRIM (sk.ins_srtkenmerk_omschrijving)) LIKE
                               '%' || p_beh_org
                MINUS
                SELECT   k.ins_kenmerk_key
                  FROM   ins_v_aanwezigkenmerkdeel kd,
                         ins_v_aanwezigkenmerk k,
                         ins_srtkenmerk sk
                 WHERE       kd.ins_deel_key = p_srtdeel_key
                         AND kd.ins_kenmerk_key = k.ins_kenmerk_key
                         AND k.ins_kenmerk_bewerkniveau = 'S'
                         AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                         AND sk.ins_srtkenmerk_key BETWEEN c_min_key_srtkey
                                                       AND  c_max_key_srtkey
                         AND UPPER (TRIM (sk.ins_srtkenmerk_omschrijving)) LIKE
                               '%' || p_beh_org);

      -- Toevoegen (vullen) key-veldwaarde met key-user voor onderdeel.
      v_errormsg := 'Fout toevoegen key-veldwaarde';

      INSERT INTO ins_kenmerkdeel (
                                      ins_deel_key,
                                      ins_kenmerk_key,
                                      ins_kenmerkdeel_waarde
                 )
        VALUES   (p_srtdeel_key, v_kenmerk_key, v_perslid_key);

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

   -- SUBPROC
   -- Bijwerken beheerders!
   PROCEDURE upd_beheerder (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   DISTINCT spiv_domein,
                             applicatiecode,
                             applicatienaam,
                             beh_type,
                             beh_mail,
                             beh_org
             FROM   rwsn_imp_appl
            WHERE   beh_type = 'FB' OR beh_type = 'KEY'
         ORDER BY   1, 2, 3;

      v_errorhint        VARCHAR2 (1000) := '-';
      v_discipline_key   NUMBER (10);
      v_srtgroep_key     NUMBER (10);
      v_srtdeel_key      NUMBER (10);
      ccount             NUMBER (10);
      v_count_tot        NUMBER (10);
      v_count_upd        NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_upd := 0;
      v_aanduiding := '';

      -- Verwijder -elke import opnieuw- alle beheerders (FB + KEY) en maak de
      -- mogelijk gewijzigde set beheerders vervolgens weer aan!
      -- Aanname: Import buiten werktijd ('s nachts) om samenloop te voorkomen
      --          met notificaties en goedkeuring/afwijzing van opdrachten.
      v_errormsg := 'Fout verwijderen beheerders (huidige)';

      SELECT   COUNT ( * )
        INTO   ccount
        FROM   ins_kenmerkdeel
       WHERE   ins_kenmerk_key IN
                     (SELECT   ins_kenmerk_key
                        FROM   ins_kenmerk
                       WHERE   ins_kenmerk_bewerkniveau = 'S'
                               AND ins_srtkenmerk_key BETWEEN c_fb1_srtkey
                                                          AND  c_max_key_srtkey);

      --DELETE FROM   ins_kenmerkdeel
      --      WHERE   ins_kenmerkdeel_verwijder IS NULL
      --              AND ins_kenmerk_key IN
      --                       (SELECT   ins_kenmerk_key
      --                          FROM   ins_kenmerk
      --                         WHERE   ins_kenmerk_bewerkniveau = 'S'
      --                                 AND ins_srtkenmerk_key BETWEEN c_fb1_srtkey
      --                                                            AND  c_max_key_srtkey);
      UPDATE   ins_kenmerkdeel
         SET   ins_kenmerkdeel_verwijder = SYSDATE
       WHERE   ins_kenmerkdeel_verwijder IS NULL
               AND ins_kenmerk_key IN
                        (SELECT   ins_kenmerk_key
                           FROM   ins_kenmerk
                          WHERE   ins_kenmerk_bewerkniveau = 'S'
                                  AND ins_srtkenmerk_key BETWEEN c_fb1_srtkey
                                                             AND  c_max_key_srtkey);

      fac.imp_writelog (p_import_key,
                        'S',
                        'Beheerders/#verwijderd: ' || TO_CHAR (ccount),
                        '');
      COMMIT;

      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.spiv_domein
               || '|'
               || rec.applicatiecode
               || '|'
               || rec.applicatienaam
               || '] ';
            v_errormsg := 'Fout bepalen INS-discipline [' || TO_CHAR (c_appl_discipline) || ']';

            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 = c_appl_discipline;

            v_errormsg := 'Fout bepalen SPIV-domein';

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

            v_errormsg := 'Fout (uniek) bepalen applicatie';

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

            IF (rec.beh_type = 'FB')
            THEN
               v_errorhint := 'insert_FB';
               insert_FB (v_srtdeel_key, rec.beh_mail);
            ELSE
               v_errorhint := 'insert_KEY';
               insert_KEY (v_srtdeel_key, rec.beh_mail, rec.beh_org);
            END IF;

            v_count_upd := v_count_upd + 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',
                        'Beheerders/#ingelezen: ' || TO_CHAR (v_count_tot),
                        '');
      fac.imp_writelog (p_import_key,
                        'S',
                        'Beheerders/#toegevoegd: ' || TO_CHAR (v_count_upd),
                        '');
      COMMIT;
   END;

   -- SUBPROC
   -- Verwijderen applicaties (incl. alle gegevens???) op basis van code!
   -- Wat met lopende ICT aanvragen? Voorstel om in view op applicaties, de
   -- verwijderde applicaties te prefixen met 'VERVALLEN:'?
   PROCEDURE del_srtdeel (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
           SELECT   sg.ins_srtgroep_omschrijving,
                    sd.ins_srtdeel_code,
                    sd.ins_srtdeel_omschrijving,
                    sd.ins_srtdeel_key
             FROM   ins_v_aanwezigsrtgroep sg, ins_v_aanwezigsrtdeel sd
            WHERE   sg.ins_discipline_key = c_appl_discipline
                    AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
                    AND NOT EXISTS
                          (SELECT   1
                             FROM   rwsn_imp_appl
                            WHERE   UPPER (spiv_domein) =
                                       TRIM (sg.ins_srtgroep_upper)
                                    --AND UPPER (applicatienaam) =
                                    --      TRIM (sd.ins_srtdeel_upper))
                                    AND UPPER (applicatiecode) =
                                          TRIM (sd.ins_srtdeel_code_upper))
         ORDER BY   1, 2, 3;

      v_count_del   NUMBER (10);
   BEGIN
      v_count_del := 0;
      v_aanduiding := '';

      FOR rec IN c1
      LOOP
         BEGIN
            v_aanduiding :=
                  '['
               || rec.ins_srtgroep_omschrijving
               || '|'
               || rec.ins_srtdeel_omschrijving
               || '] ';
            v_errormsg := 'Fout verwijderen applicatie';

            --DELETE FROM ins_srtdeel WHERE ins_srtdeel_key = rec.ins_srtdeel_key;
            UPDATE ins_srtdeel
               SET ins_srtdeel_vervaldatum =
                      DECODE (ins_srtdeel_vervaldatum,
                              NULL, SYSDATE,
                              ins_srtdeel_vervaldatum),
                   ins_srtdeel_verwijder = SYSDATE
             WHERE ins_srtdeel_key = rec.ins_srtdeel_key;

            --UPDATE   ins_kenmerkdeel kd
            --   SET   kd.ins_kenmerkdeel_verwijder = SYSDATE
            -- WHERE   kd.ins_kenmerkdeel_verwijder IS NULL
            --         AND kd.ins_deel_key = rec.ins_srtdeel_key
            --         AND EXISTS
            --               (SELECT   1
            --                  FROM   ins_kenmerk
            --                 WHERE   ins_kenmerk_key = kd.ins_kenmerk_key
            --                         AND ins_kenmerk_bewerkniveau = 'S');

            COMMIT;

            v_count_del := v_count_del + 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',
         'Applicaties/#verwijderd: ' || TO_CHAR (v_count_del),
         ''
      );
      COMMIT;
   END;
-- MAIN
BEGIN
   add_srtgroep (p_import_key);
   upd_srtdeel (p_import_key);
   upd_beheerder (p_import_key);
   del_srtdeel (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 DID-applicaties afgebroken!');
END rwsn_update_appl;
/


-- RWSN#33267 Import werkplekken (4e variant van een object-import tbv. RWS,
-- maar - helaas - net weer anders dan CMDB, INS en APPL).
/* Formatted on 30-9-2015 10:44:14 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_import_wp (p_import_key IN NUMBER)
IS
   c_delim           VARCHAR2 (1) := ';';
   v_newline         VARCHAR2 (1000);                            -- Input line
   v_errormsg        VARCHAR2 (1000);
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
   header_is_valid   NUMBER := 0;
   v_count_tot       NUMBER (10) := 0;
   v_count_import    NUMBER (10) := 0;
   v_ongeldig        NUMBER (1);
   v_aanduiding      VARCHAR2 (200);
   -- De importvelden:
   v_objectid        VARCHAR2 (255);                                    -- C50
   v_kamer           VARCHAR2 (255);                                    -- C50
   v_locatie         VARCHAR2 (255);                                   -- C100
   v_vestiging       VARCHAR2 (255);                                   -- C100

   CURSOR c1
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   DELETE FROM rwsn_imp_wp;
   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_objectid);
         fac.imp_getfield (v_newline, c_delim, v_kamer);
         fac.imp_getfield (v_newline, c_delim, v_locatie);
         fac.imp_getfield (v_newline, c_delim, v_vestiging);

         v_aanduiding := '[' || v_objectid || '|' || v_locatie || '|' || v_vestiging || '] ';

         -- 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_objectid) = 'OBJECT ID'
               AND UPPER (v_kamer) = 'KAMER (PLAATSING)'
               AND UPPER (v_locatie) = 'LOCATIE'
               AND UPPER (v_vestiging) = 'VESTIGING'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'ObjectID ongeldig; ongedefinieerd of te lang';
            v_objectid := TRIM (v_objectid);

            IF SUBSTR (v_objectid, 1, 1) = 'D' AND SUBSTR (v_objectid, 2, 1) BETWEEN '1' AND '9'
            THEN
               IF v_objectid IS NULL OR LENGTH (v_objectid) > 50
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               END IF;

               -- Don't care
               v_errormsg := 'Kamer ongeldig';
               v_kamer := TRIM (v_kamer);

               --
               v_errormsg := 'Locatie ongeldig; ongedefinieerd of te lang';
               v_locatie := TRIM (v_locatie);

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

               --
               v_errormsg := 'Vestiging ongeldig; ongedefinieerd of te lang';
               v_vestiging := TRIM (v_vestiging);

               IF v_vestiging IS NULL OR LENGTH (v_vestiging) > 100
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               END IF;
            ELSE
               v_ongeldig := 1;       -- Gewoon overslaan en niet eens loggen!
            END IF;

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

                  INSERT INTO rwsn_imp_wp (objectid, kamer, locatie, vestiging)
                      VALUES (v_objectid, v_kamer, v_locatie, v_vestiging);

                  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',
         'WP/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
         '');
      fac.imp_writelog (
         p_import_key,
         'S',
         'WP/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         '');
   END IF;

   COMMIT;
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 WP afgebroken!');
END rwsn_import_wp;
/

CREATE OR REPLACE PROCEDURE rwsn_update_wp (p_import_key IN NUMBER)
AS
   c_disc_key_wp      NUMBER (10) := 3250; -- T=3801/WORK=3321=>P=3250
   c_srtd_key_wp      NUMBER (10) := 3250; -- T=3242/WORK=3182=>P=3250
   v_errormsg         VARCHAR2 (1000) := '-';
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_aanduiding       VARCHAR2 (200);
   v_count            NUMBER (10);
   v_count_del        NUMBER (10);
   v_count_new        NUMBER (10);
   v_count_upd        NUMBER (10);
   v_count_skp        NUMBER (10);
   v_srtdeel_key      NUMBER (10);
   v_deel_key         NUMBER (10);
   v_cur_ruimte_key   NUMBER (10);

   CURSOR c1                     -- VERWIJDEREN (voorlopig alleen vervaldatum)?
   IS
        SELECT d.ins_deel_key, d.ins_deel_omschrijving
          FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep 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 = 2350                         -- WPs
               AND NOT EXISTS
                     (SELECT 1
                        FROM rwsn_imp_wp x
                       WHERE UPPER (x.objectid) = TRIM (d.ins_deel_upper))
      ORDER BY 1;

   CURSOR c2                                             -- AANMAKEN/BIJWERKEN
   IS
      SELECT x.objectid,
             x.alg_locatie_code,      -- FACILITOR-locatiecode na match (kort)
             x.aantal lmatch,
             x.alg_locatie_key,
             x.locatie alg_ruimte_nr,
             r.aantal rmatch,
             r.alg_ruimte_key
        FROM    (  SELECT x.objectid, l.alg_locatie_code, x.locatie,
                          COUNT ( * ) aantal,
                          MIN (l.alg_locatie_key) alg_locatie_key
                     FROM rwsn_imp_wp x, alg_v_aanweziglocatie l
                    WHERE REPLACE (UPPER(SUBSTR (x.vestiging, INSTR (x.vestiging, '(', 1) + 1)), ' ', '') LIKE
                             REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6), ' ', '') || '%'
                 GROUP BY x.objectid, l.alg_locatie_code, x.locatie) x
             LEFT JOIN
                (  SELECT x.objectid,
                          COUNT ( * ) aantal,
                          MIN (r.alg_ruimte_key) alg_ruimte_key
                     FROM rwsn_imp_wp x,
                          alg_v_aanweziglocatie l,
                          alg_gebouw g,
                          alg_verdieping v,
                          alg_v_aanwezigruimte r
                    WHERE REPLACE (UPPER(SUBSTR (x.vestiging, INSTR (x.vestiging, '(', 1) + 1)), ' ', '') LIKE
                             REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6), ' ', '') || '%'
                          AND l.alg_locatie_key = g.alg_locatie_key
                          AND g.alg_gebouw_key = v.alg_gebouw_key
                          AND v.alg_verdieping_key = r.alg_verdieping_key
                          AND TRIM (r.alg_ruimte_upper_nr) = UPPER (x.locatie)
                 GROUP BY x.objectid) r
             ON x.objectid = r.objectid
      UNION ALL    -- Object-vestiging kan niet worden bepaald (tbv. logging)!
      SELECT x.objectid,
             x.vestiging alg_locatie_code,  -- CMDB-waarde zonder match (lang)
             NULL lmatch,
             NULL alg_locatie_key,
             SUBSTR (x.locatie, 1, 50) alg_ruimte_nr,             -- Afkappen!
             NULL rmatch,
             NULL alg_ruimte_key
        FROM rwsn_imp_wp x
       WHERE NOT EXISTS
                (SELECT 1
                   FROM alg_v_aanweziglocatie l
                  WHERE REPLACE (UPPER(SUBSTR (x.vestiging, INSTR (x.vestiging, '(', 1) + 1)), ' ', '') LIKE
                           REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6), ' ', '') || '%')
      ORDER BY 1;
/*
SELECT v.*,
       REPLACE (UPPER (SUBSTR (v.vestiging, INSTR (v.vestiging, '(', 1) + 1)), ' ', '') vpc
  FROM rwsn_imp_wp v
 WHERE NOT EXISTS
          (SELECT 1
             FROM alg_v_aanweziglocatie l
            WHERE REPLACE (UPPER (SUBSTR (v.vestiging, INSTR (v.vestiging, '(', 1) + 1)), ' ', '') LIKE
                     REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6), ' ', '') || '%';

SELECT x.objectid, x.vestiging, x.locatie
  FROM rwsn_imp_wp x, alg_v_aanweziglocatie l
 WHERE REPLACE (
          UPPER (SUBSTR (x.vestiging, INSTR (x.vestiging, '(', 1) + 1)),
          ' ',
          '') LIKE
          --REPLACE (UPPER (l.alg_locatie_code), ' ', '') || '%'
          REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6), ' ', '') || '%'
MINUS
  SELECT x.objectid, x.vestiging, x.locatie
    FROM rwsn_imp_wp x,
         alg_v_aanweziglocatie l,
         alg_gebouw g,
         alg_verdieping v,
         alg_v_aanwezigruimte r
   WHERE REPLACE (
            UPPER (SUBSTR (x.vestiging, INSTR (x.vestiging, '(', 1) + 1)),
            ' ',
            '') LIKE
            --REPLACE (UPPER (l.alg_locatie_code), ' ', '') || '%'
            REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6), ' ', '') || '%'
         AND l.alg_locatie_key = g.alg_locatie_key(+)
         AND g.alg_gebouw_key = v.alg_gebouw_key(+)
         AND v.alg_verdieping_key = r.alg_verdieping_key(+)
         AND TRIM (r.alg_ruimte_upper_nr) = UPPER (x.locatie)
GROUP BY x.objectid, x.vestiging, x.locatie;

SELECT l.objectid,
       l.locatie,
       l.vestiging,
       l.lpc,
       l.aantal l_aant,
       r.aantal r_aant,
       r.alg_locatie_code,
       r.alg_gebouw_code,
       r.alg_verdieping_code,
       r.alg_ruimte_nr
  FROM    (  SELECT x.objectid,
                    x.locatie,
                    x.vestiging,
                    MIN (REPLACE (UPPER (l.alg_locatie_code), ' ', '')) lpc,
                    COUNT ( * ) aantal
               FROM rwsn_imp_wp x, alg_v_aanweziglocatie l
              WHERE REPLACE (
                       UPPER(SUBSTR (x.vestiging,
                                     INSTR (x.vestiging, '(', 1) + 1)),
                       ' ',
                       '') LIKE
                       REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6),
                                ' ',
                                '')
                       || '%'
           GROUP BY x.objectid, x.locatie, x.vestiging) l
       LEFT JOIN
          (  SELECT x.objectid,
                    x.locatie,
                    MIN (l.alg_locatie_key) alg_locatie_key,
                    MIN (g.alg_gebouw_key) alg_gebouw_key,
                    MIN (v.alg_verdieping_key) alg_verdieping_key,
                    MIN (l.alg_locatie_code) alg_locatie_code,
                    MIN (g.alg_gebouw_code) alg_gebouw_code,
                    MIN (v.alg_verdieping_code) alg_verdieping_code,
                    MIN (r.alg_ruimte_nr) alg_ruimte_nr,
                    COUNT ( * ) aantal
               FROM rwsn_imp_wp x,
                    alg_v_aanweziglocatie l,
                    alg_gebouw g,
                    alg_verdieping v,
                    alg_v_aanwezigruimte r
              WHERE REPLACE (
                       UPPER(SUBSTR (x.vestiging,
                                     INSTR (x.vestiging, '(', 1) + 1)),
                       ' ',
                       '') LIKE
                       REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6),
                                ' ',
                                '')
                       || '%'
                    AND l.alg_locatie_key = g.alg_locatie_key
                    AND g.alg_gebouw_key = v.alg_gebouw_key
                    AND v.alg_verdieping_key = r.alg_verdieping_key
                    AND TRIM (r.alg_ruimte_upper_nr) = UPPER (x.locatie)
           GROUP BY x.objectid, x.locatie) r
       ON l.objectid = r.objectid AND l.locatie = r.locatie
UNION ALL
SELECT x.objectid,
       x.locatie,
       x.vestiging,
       NULL lpc,
       0 l_aant,
       NULL r_aant,
       NULL alg_locatie_code,
       NULL alg_gebouw_code,
       NULL alg_verdieping_code,
       NULL alg_ruimte_nr
  FROM rwsn_imp_wp x
 WHERE NOT EXISTS
          (SELECT 1
             FROM alg_v_aanweziglocatie l
            WHERE REPLACE (
                     UPPER(SUBSTR (x.vestiging,
                                   INSTR (x.vestiging, '(', 1) + 1)),
                     ' ',
                     '') LIKE
                     REPLACE (SUBSTR (UPPER (l.alg_locatie_code), 1, 6),
                              ' ',
                              '')
                     || '%');
*/
BEGIN
   v_count_del := 0;

   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding :=
               '['
            || rec.ins_deel_key
            || '|'
            || rec.ins_deel_omschrijving
            || '] ';

         v_errormsg := 'Fout verwijderen WP';

         UPDATE ins_deel
            SET ins_deel_vervaldatum = SYSDATE
          WHERE ins_deel_key = rec.ins_deel_key;

         COMMIT;

         v_count_del := v_count_del + 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',
                     'WP/#verwijderd: ' || TO_CHAR (v_count_del),
                     '');

   v_count_new := 0;
   v_count_upd := 0;
   v_count_skp := 0;

   FOR rec IN c2
   LOOP
      BEGIN
         v_aanduiding :=
               '['
            || rec.objectid
            || '|'
            || rec.alg_locatie_code
            || '|'
            || rec.alg_ruimte_nr
            || '] ';

         v_errormsg := 'Fout (uniek) bepalen WP';

         IF rec.lmatch = 1 AND rec.rmatch = 1
         THEN
            SELECT COUNT ( * )
              INTO v_count
              FROM ins_srtgroep sg, ins_srtdeel sd, ins_v_aanwezigdeel d
             WHERE     sg.ins_discipline_key = c_disc_key_wp -- Afgesproken discipline!
                   AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
                   AND sd.ins_srtdeel_key = d.ins_srtdeel_key
                   --AND d.ins_srtdeel_key = c_srtd_key_wp -- Afgesproken srtdeel!
                   AND d.ins_srtdeel_key IN (c_srtd_key_wp, 3242) -- Afgesproken srtdeel!
                   AND TRIM (d.ins_deel_upper) = UPPER (rec.objectid);

            IF v_count = 0          -- Object bestaat nog niet, dus toevoegen!
            THEN
               v_errormsg := 'Fout toevoegen WP';

               INSERT INTO ins_deel (ins_discipline_key,
                                     ins_srtdeel_key,
                                     ins_deel_module,
                                     ins_deel_omschrijving,
                                     ins_alg_ruimte_key,
                                     ins_alg_ruimte_type,
                                     ins_alg_locatie_key)
                   VALUES (c_disc_key_wp,           -- Afgesproken discipline!
                           c_srtd_key_wp,              -- Afgesproken srtdeel!
                           'INS',
                           rec.objectid,
                           rec.alg_ruimte_key,
                           'R',
                           rec.alg_locatie_key)
                RETURNING ins_deel_key
                     INTO v_deel_key;

               COMMIT;

               v_count_new := v_count_new + 1;
            ELSE                                      -- Object bestaat reeds!
               SELECT ins_deel_key, ins_alg_ruimte_key
                 INTO v_deel_key, v_cur_ruimte_key
                 FROM ins_srtgroep sg, ins_srtdeel sd, ins_v_aanwezigdeel d
                WHERE     sg.ins_discipline_key = c_disc_key_wp -- Afgesproken discipline!
                      AND sg.ins_srtgroep_key = sd.ins_srtgroep_key
                      AND sd.ins_srtdeel_key = d.ins_srtdeel_key
                      --AND d.ins_srtdeel_key = c_srtd_key_wp -- Afgesproken srtdeel!
                      AND d.ins_srtdeel_key IN (c_srtd_key_wp, 3242) -- Afgesproken srtdeel!
                      AND TRIM (d.ins_deel_upper) = UPPER (rec.objectid);

               IF rec.alg_ruimte_key != v_cur_ruimte_key
               THEN
                  v_errormsg := 'Fout bijwerken WP';

                  UPDATE ins_deel
                     SET ins_alg_ruimte_key = rec.alg_ruimte_key,
                         ins_alg_ruimte_type = 'R'
                   WHERE ins_deel_key = v_deel_key;

                  COMMIT;

                  v_count_upd := v_count_upd + 1;
               ELSE
                  v_count_skp := v_count_skp + 1;
               END IF;
            END IF;
         ELSIF COALESCE (rec.lmatch, 0) != 1
         THEN
            fac.imp_writelog (p_import_key,
                              'W',
                              v_aanduiding || v_errormsg,
                              'Geen (unieke) match op locatie');
         ELSE                                 -- COALESCE (rec.rmatch, 0) != 1
            fac.imp_writelog (p_import_key,
                              'W',
                              v_aanduiding || v_errormsg,
                              'Geen (unieke) match op ruimte');
         END IF;

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

   fac.imp_writelog (p_import_key,
                     'S',
                     'WP/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'WP/#gewijzigd: ' || TO_CHAR (v_count_upd),
                     '');
   fac.imp_writelog (p_import_key,
                     'S',
                     'WP/#ongewijzigd: ' || TO_CHAR (v_count_skp),
                     '');
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 WP afgebroken!');
END rwsn_update_wp;
/


/* Formatted on 16-10-2015 16:52:28 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_cnt_algscope
(
   fclt_f_zaakid,
   gebouwcode,
   locatiecode,
   locatieomschrijving
)
AS
   SELECT c.cnt_contract_nummer, g.alg_gebouw_code, l.alg_locatie_code, l.alg_locatie_omschrijving
     FROM cnt_contract_plaats cp, cnt_v_aanwezigcontract c, alg_gebouw g, alg_locatie l
    WHERE     cp.cnt_contract_plaats_verwijder IS NULL
          AND cp.cnt_contract_key = c.cnt_contract_key
          --AND c.cnt_contract_status = 0                      -- Niet gesloten!
          AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
          AND cp.cnt_alg_plaats_code = 'G'
          AND g.alg_locatie_key = l.alg_locatie_key;

/* Formatted on 13-8-2015 10:48:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_import_cnt_algscope (p_import_key IN NUMBER)
IS
   c_delim           VARCHAR2 (1) := ';';
   v_newline         VARCHAR2 (1000);                            -- Input line
   v_errormsg        VARCHAR2 (1000);
   oracle_err_num    NUMBER;
   oracle_err_mes    VARCHAR2 (200);
   header_is_valid   NUMBER;
   v_count_tot       NUMBER (10);
   v_count_import    NUMBER (10);
   v_ongeldig        NUMBER (1);
   v_aanduiding      VARCHAR2 (200);
   -- De importvelden:
   v_zaakid          VARCHAR2 (255);                                    -- C30
   v_gebouwcode      VARCHAR2 (255);                                    -- C12

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

   v_count_tot := 0;
   v_count_import := 0;
   header_is_valid := 0;

   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_zaakid);
         fac.imp_getfield (v_newline, c_delim, v_gebouwcode);

         v_aanduiding := '[' || v_zaakid || '|' || v_gebouwcode || '] ';

         -- 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_zaakid) = 'ZAAKID'
               AND UPPER (v_gebouwcode) = 'GEBOUWCODE'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden
            v_errormsg := 'ZaakID ongeldig; ongedefinieerd of te lang';
            v_zaakid := TRIM (v_zaakid);

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

            --
            v_errormsg := 'GebouwCode ongeldig; ongedefinieerd of te lang';
            v_gebouwcode := TRIM (v_gebouwcode);

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

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

                  INSERT INTO rwsn_imp_cnt_algscope (zaakid, gebouwcode)
                      VALUES (v_zaakid, v_gebouwcode);

                  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',
         'CNT-algscope/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
         '');
      fac.imp_writelog (
         p_import_key,
         'S',
         'CNT-algscope/#ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         '');
   END IF;

   COMMIT;
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 CNT-algscope afgebroken!');
END rwsn_import_cnt_algscope;
/

/* Formatted on 14-8-2015 13:14:15 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE rwsn_update_cnt_algscope (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (200);
   v_count          NUMBER (10);
   v_count_del      NUMBER (10);
   v_count_new      NUMBER (10);

   CURSOR c1
   IS
        SELECT c.cnt_contract_nummer,
               g.alg_gebouw_code,
               cp.cnt_contract_plaats_key
          FROM cnt_contract_plaats cp, cnt_contract c, alg_gebouw g
         WHERE     cp.cnt_contract_plaats_verwijder IS NULL
               AND cp.cnt_contract_key = c.cnt_contract_key
               --AND c.cnt_contract_status = 0                 -- Niet gesloten!
               AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
               AND cp.cnt_alg_plaats_code = 'G'
               AND EXISTS
                     (SELECT 1
                        FROM rwsn_imp_cnt_algscope i
                       WHERE UPPER (i.zaakid) =
                                UPPER(SUBSTR (
                                         c.cnt_contract_nummer || '/',
                                         1,
                                         INSTR (c.cnt_contract_nummer || '/',
                                                '/',
                                                1,
                                                1)
                                         - 1)))
               AND NOT EXISTS
                     (SELECT 1
                        FROM rwsn_imp_cnt_algscope i
                       WHERE UPPER (i.zaakid) =
                                UPPER(SUBSTR (
                                         c.cnt_contract_nummer || '/',
                                         1,
                                         INSTR (c.cnt_contract_nummer || '/',
                                                '/',
                                                1,
                                                1)
                                         - 1))
                             AND UPPER (i.gebouwcode) = g.alg_gebouw_upper)
      ORDER BY 1, 2;

   CURSOR c2
   IS
        SELECT i.zaakid,
               i.gebouwcode,
               c.cnt_contract_key,
               g.alg_gebouw_key
          FROM rwsn_imp_cnt_algscope i, cnt_v_aanwezigcontract c, cnt_disc_params dp, alg_v_aanweziggebouw g
         WHERE UPPER (i.zaakid) =
                  UPPER(SUBSTR (c.cnt_contract_nummer || '/',
                                1,
                                INSTR (c.cnt_contract_nummer || '/',
                                       '/',
                                       1,
                                       1)
                                - 1))
               --AND c.cnt_contract_status = 0                 -- Niet gesloten!
               AND c.ins_discipline_key = dp.cnt_ins_discipline_key
               AND dp.cnt_srtcontract_type != 6                -- Mantel/Master!
               AND UPPER (i.gebouwcode) = g.alg_gebouw_upper(+)
      ORDER BY 1, 2;
BEGIN
   v_count_del := 0;

   FOR rec IN c1
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.cnt_contract_nummer || '|' || rec.alg_gebouw_code || '] ';

         v_errormsg := 'Fout verwijderen contract-plaats-relatie';

         UPDATE cnt_contract_plaats
            SET cnt_contract_plaats_verwijder = SYSDATE
          WHERE cnt_contract_plaats_key = rec.cnt_contract_plaats_key;

         v_count_del := v_count_del + 1;
         COMMIT;
      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',
                     'CNT-scope/#verwijderd: ' || TO_CHAR (v_count_del),
                     '');

   v_count_new := 0;

   FOR rec IN c2
   LOOP
      BEGIN
         v_aanduiding := '[' || rec.zaakid || '|' || rec.gebouwcode || '] ';

         IF rec.alg_gebouw_key IS NOT NULL
         THEN
            v_errormsg := 'Fout bepalen contract-plaats-relatie';

            SELECT COUNT ( * )
              INTO v_count
              FROM cnt_contract_plaats
             WHERE     cnt_contract_plaats_verwijder IS NULL
                   AND cnt_contract_key = rec.cnt_contract_key
                   AND cnt_alg_plaats_key = rec.alg_gebouw_key
                   AND cnt_alg_plaats_code = 'G';

            IF v_count = 0
            THEN
               v_errormsg := 'Fout toevoegen contract-plaats-scope';

               INSERT INTO cnt_contract_plaats (cnt_contract_key,
                                                cnt_alg_plaats_key,
                                                cnt_alg_plaats_code)
                   VALUES (rec.cnt_contract_key, rec.alg_gebouw_key, 'G');

               v_count_new := v_count_new + 1;
            END IF;
         ELSE
            fac.imp_writelog (p_import_key,
                              'W',
                              v_aanduiding || 'Fout bepalen gebouw',
                              'Gebouw bestaat niet');
         END IF;

         COMMIT;
      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',
                     'CNT-scope/#toegevoegd: ' || TO_CHAR (v_count_new),
                     '');

   v_errormsg := 'Fout bepalen #zaken';

   SELECT COUNT (DISTINCT i.zaakid)
     INTO v_count
     FROM rwsn_imp_cnt_algscope i;

   fac.imp_writelog (p_import_key,
                     'S',
                     'CNT-zaken/#ingelezen: ' || TO_CHAR (v_count),
                     '');

   SELECT COUNT (DISTINCT i.zaakid)
     INTO v_count
     FROM rwsn_imp_cnt_algscope i
    WHERE EXISTS (SELECT 1
                    FROM cnt_v_aanwezigcontract c
                   WHERE UPPER(SUBSTR (c.cnt_contract_nummer || '/',
                                       1,
                                       INSTR (c.cnt_contract_nummer || '/',
                                              '/',
                                              1,
                                              1)
                                       - 1)) = UPPER (i.zaakid));

   fac.imp_writelog (p_import_key,
                     'S',
                     'CNT-zaken/#bijgewerkt: ' || TO_CHAR (v_count),
                     '');
   COMMIT;
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 CNT-algscope afgebroken!');
END rwsn_update_cnt_algscope;
/


-- RWSN#27838
CREATE OR REPLACE VIEW RWSN_V_NOTI_RESREMINDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT   'RESINF',
            NULL,
            rsvr.res_rsv_ruimte_contact_key,
               'Herinnering van uw reservering '
            || res.res_reservering_key
            || '/'
            || rsvr.res_rsv_ruimte_volgnr
            || ' ('
            || rsvr.res_rsv_ruimte_omschrijving
            || ')',
            res.res_reservering_key,
            rsvr.res_rsv_ruimte_key
     FROM   res_v_aanwezigreservering res,
            res_v_aanwezigrsv_ruimte rsvr,
            res_ruimte_opstelling opst,
            res_disc_params rdp,
            res_ruimte r
    WHERE       r.res_discipline_key = rdp.res_ins_discipline_key
            AND rdp.res_disc_params_noti_dagen IS NOT NULL
            AND res.res_reservering_key = rsvr.res_reservering_key
            AND opst.res_ruimte_opstel_key = rsvr.res_ruimte_opstel_key
            AND opst.res_ruimte_key = r.res_ruimte_key
            AND rsvr.res_status_fo_key <= 5
            AND rsvr.res_rsv_ruimte_van BETWEEN fac.datumtijdplusuitvoertijd (
                                                   SYSDATE,
                                                   res_disc_params_noti_dagen,
                                                   'DAGEN'
                                                )
                                            AND  fac.datumtijdplusuitvoertijd (
                                                    SYSDATE,
                                                    res_disc_params_noti_dagen
                                                    + 1,
                                                    'DAGEN'
                                                 )
            AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7)
            AND rsvr.res_rsv_ruimte_van >= SYSDATE
   UNION ALL
     SELECT   'RESINF',
              NULL,
              res_rsv_ruimte_contact_key,
                 'Reservering '
              || res_reservering_key
              || ': U heeft op '
              || TO_CHAR (MIN (van), 'dd-mm')
              || DECODE (
                    MIN (van),
                    MAX (tot),
                    ' om ' || TO_CHAR (MIN (van), 'hh24:mi'),
                       ' van '
                    || TO_CHAR (MIN (van), 'hh24:mi')
                    || ' tot '
                    || TO_CHAR (MAX (tot), 'hh24:mi')
                 )
              || ' in ruimte ('
              || (SELECT      alg_gebouw_code
                           || '-'
                           || alg_verdieping_code
                           || '-'
                           || alg_ruimte_nr
                    FROM   alg_v_onroerendgoed_gegevens arg
                   WHERE   arg.alg_ruimte_key = ruimte_key)
              || ') '
              || COUNT (res_reservering_key)
              || ' voorziening(en) gereserveerd.',
              res_reservering_key,
              res_rsv_ruimte_key
       FROM   (SELECT   rsvr.res_rsv_ruimte_contact_key,
                        res.res_reservering_key,
                        rsvd.res_rsv_deel_van van,
                        rsvd.res_rsv_deel_tot tot,
                        rsvr.res_rsv_ruimte_key,
                        rsvr.alg_ruimte_key ruimte_key
                 FROM   res_v_aanwezigreservering res,
                        res_v_aanwezigrsv_ruimte rsvr,
                        res_disc_params rdp,
                        res_rsv_deel rsvd,
                        res_deel rd
                WHERE       rsvd.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
                        AND rd.res_deel_key = rsvd.res_deel_key
                        AND rd.res_discipline_key = rdp.res_ins_discipline_key
                        AND rdp.res_disc_params_noti_dagen IS NOT NULL
                        AND res.res_reservering_key = rsvr.res_reservering_key
                        AND rsvr.res_ruimte_opstel_key IS NULL
                        AND rsvr.res_status_fo_key <= 5
                        AND rsvd.res_rsv_deel_verwijder IS NULL
                        AND rsvd.res_rsv_deel_van BETWEEN fac.datumtijdplusuitvoertijd (
                                                             SYSDATE,
                                                             res_disc_params_noti_dagen,
                                                             'DAGEN'
                                                          )
                                                      AND  fac.datumtijdplusuitvoertijd (
                                                              SYSDATE,
                                                              res_disc_params_noti_dagen
                                                              + 1,
                                                              'DAGEN'
                                                           )
                        AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7)
                        AND rsvd.res_rsv_deel_van >= SYSDATE
               UNION ALL
               SELECT   rsvr.res_rsv_ruimte_contact_key,
                        res.res_reservering_key,
                        rsva.res_rsv_artikel_levering van,
                        rsva.res_rsv_artikel_levering tot,
                        rsvr.res_rsv_ruimte_key,
                        rsvr.alg_ruimte_key ruimte_key
                 FROM   res_v_aanwezigreservering res,
                        res_v_aanwezigrsv_ruimte rsvr,
                        res_disc_params rdp,
                        res_rsv_artikel rsva,
                        res_artikel ra
                WHERE       rsva.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
                        AND ra.res_discipline_key = rdp.res_ins_discipline_key
                        AND rsva.res_artikel_key = ra.res_artikel_key
                        AND rdp.res_disc_params_noti_dagen IS NOT NULL
                        AND res.res_reservering_key = rsvr.res_reservering_key
                        AND rsvr.res_ruimte_opstel_key IS NULL
                        AND rsvr.res_status_fo_key <= 5
                        AND rsva.res_rsv_artikel_verwijder IS NULL
                        AND rsva.res_rsv_artikel_levering BETWEEN fac.datumtijdplusuitvoertijd (
                                                                     SYSDATE,
                                                                     res_disc_params_noti_dagen,
                                                                     'DAGEN'
                                                                  )
                                                              AND  fac.datumtijdplusuitvoertijd (
                                                                      SYSDATE,
                                                                      res_disc_params_noti_dagen
                                                                      + 1,
                                                                      'DAGEN'
                                                                   )
                        AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7)
                        AND rsva.res_rsv_artikel_levering >= SYSDATE)
   GROUP BY   res_rsv_ruimte_contact_key,
              res_reservering_key,
              res_rsv_ruimte_key,
              ruimte_key;

-- RWSN#33266: CUST09-notificatie naar lener om boek te retourneren.
-- Wekelijks totdat geretourneerd.
/* Formatted on 12-11-2015 14:56:04 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_noti_bibliotheek
(
   code,
   sender,
   receiver,
   text,
   key,
   par1,
   par2,
   xkey
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          d.ins_alg_ruimte_key,
          REPLACE (sn.fac_srtnotificatie_oms, '##OMS##', d.ins_deel_omschrijving),
          d.ins_deel_key,
          NULL,
          NULL,
          NULL
     FROM ins_v_aanwezigdeel d,
          ins_v_aanwezigkenmerkdeel kd,
          fac_srtnotificatie sn
    WHERE     d.ins_discipline_key = 3261                       -- Bibliotheek
          AND d.ins_alg_ruimte_key_org IS NOT NULL               -- Uitgeleend
          AND d.ins_alg_ruimte_type = 'P'
          AND d.ins_deel_key = kd.ins_deel_key
          AND kd.ins_kenmerk_key = 601                         -- Verloopdatum
          AND fac.safe_to_date (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') - 7 < SYSDATE
          AND MOD (fac.safe_to_date (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') - TRUNC (SYSDATE), 7) = 0
          AND sn.fac_srtnotificatie_code = 'CUST09';

-- RWSN#35286 - Overzicht van uitgeleende boeken door bibliotheek.
-- Of alle boeken met aantal keren INSOUT met laatste/actuele lener?
/* Formatted on 12-8-2016 19:12:48 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_bibliotheek
(
   fclt_f_boek_id,
   fclt_f_titel,
   aantal_keer_uitgeleend,
   laatst_uitgeleend_aan,                          -- Laatste of actuele lener
   laatst_uitgeleend_op,                                     -- Laatste INSOUT
   laatst_ingeleverd_op,                                     -- Laatste INSINN
   retourdatum,
   opmerkingen,
   fclt_f_nu_uitgeleend
)
AS
   SELECT x.ins_deel_omschrijving boek,
          kd1.ins_kenmerkdeel_waarde titel,
          insout.aantal,
          DECODE (
             x.ins_alg_ruimte_key_org,
             NULL, SUBSTR (ll.fac_tracking_oms, INSTR (ll.fac_tracking_oms, 'uitgegeven aan')+LENGTH ('uitgegeven aan')+1),
             (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = x.ins_alg_ruimte_key))
             laatst_uitgeleend_aan,                -- Laatste of actuele lener
          fac.gettrackingdate ('INSOUT', x.ins_deel_key) laatst_uitgeleend_op,
          DECODE (
             x.ins_alg_ruimte_key_org,
             NULL, fac.gettrackingdate ('INSINN', x.ins_deel_key),
             TO_DATE (NULL))
             laatst_ingeleverd_op,                 -- Gevuld als nu ingeleverd
          DECODE (
             x.ins_alg_ruimte_key_org,
             NULL, TO_DATE (NULL),
             fac.safe_to_date (kd2.ins_kenmerkdeel_waarde, 'dd-mm-yyyy'))
             retourdatum,                          -- Gevuld als nu uitgeleend
          kd3.ins_kenmerkdeel_waarde opmerkingen,
          DECODE (x.ins_alg_ruimte_key_org, NULL, 'Nee', 'Ja') uitgeleend
     FROM (SELECT d.ins_deel_key,
                  d.ins_deel_omschrijving,
                  sd.ins_srtdeel_omschrijving,
                  d.ins_alg_ruimte_key_org,          -- NULL als nu ingeleverd
                  d.ins_alg_ruimte_key                    -- Lener of eigenaar
             FROM ins_v_aanwezigdeel d,
                  ins_srtdeel sd
            WHERE d.ins_discipline_key = 3261                   -- Bibliotheek
                  AND d.ins_srtdeel_key = sd.ins_srtdeel_key) x
          LEFT JOIN ins_v_aanwezigkenmerkdeel kd1
             ON x.ins_deel_key = kd1.ins_deel_key
                AND kd1.ins_kenmerk_key = 602                         -- Titel
          LEFT JOIN ins_v_aanwezigkenmerkdeel kd2
             ON x.ins_deel_key = kd2.ins_deel_key
                AND kd2.ins_kenmerk_key = 601                  -- Verloopdatum
          LEFT JOIN ins_v_aanwezigkenmerkdeel kd3
             ON x.ins_deel_key = kd3.ins_deel_key
                AND kd3.ins_kenmerk_key = 603                   -- Opmerkingen
          LEFT JOIN (  SELECT fac_tracking_refkey, COUNT ( * ) aantal
                         FROM fac_tracking
                        WHERE fac_srtnotificatie_key = 176           -- INSOUT
                     GROUP BY fac_tracking_refkey) insout
             ON x.ins_deel_key = insout.fac_tracking_refkey
          LEFT JOIN (SELECT t.fac_tracking_refkey, t.fac_tracking_oms
                       FROM fac_tracking t
                      WHERE t.fac_srtnotificatie_key = 176           -- INSOUT
                            AND NOT EXISTS
                                  (SELECT 1
                                     FROM fac_tracking
                                    WHERE fac_srtnotificatie_key = 176 -- INSOUT
                                          AND fac_tracking_refkey = t.fac_tracking_refkey
                                          AND fac_tracking_key > t.fac_tracking_key)) ll
             ON x.ins_deel_key = ll.fac_tracking_refkey;

-- RWSN#30460
/* Formatted on 25-9-2014 12:12:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW RWSN_V_AFDELINGEN3
(
   AFDELING_KEY,
   AFDELING_OMS
)
AS
   SELECT a.prs_afdeling_key,
          a.prs_afdeling_naam || ' ' || a.prs_afdeling_omschrijving
     FROM prs_v_afdeling_boom23 ab, prs_afdeling a
    WHERE ab.prs_afdeling_key3 = a.prs_afdeling_key
          AND EXISTS
                (SELECT 1
                   FROM prs_afdeling
                  WHERE prs_afdeling_verwijder IS NULL
                        AND prs_afdeling_parentkey IS NULL
                        AND (prs_afdeling_naam LIKE '63%'    -- RWS Onderdelen
                             OR prs_afdeling_key = 32)       -- 60009550 (RvR)
                        AND prs_afdeling_omschrijving NOT LIKE 'VERVALLEN:%'
                        AND prs_afdeling_key = ab.prs_afdeling_key1);


-- RWSN#53084 Rapportages om acties in facilitor in kaart te kunnen brengen met UDR
CREATE OR REPLACE VIEW RWSN_V_UDR_GUI_USAGE_DEVICE
AS
SELECT * FROM FAC_V_RAP_GUI_USAGE_DEVICE;

CREATE OR REPLACE VIEW RWSN_V_UDR_GUI_USAGE_LAST100
AS
SELECT * FROM FAC_V_RAP_GUI_USAGE_LAST100;

CREATE OR REPLACE VIEW RSWN_V_RAP_GUI_COUNTER
(
    FAC_GUI_COUNTER_KEY,
    FAC_GUI_COUNTER_GROUP,
    FAC_GUI_COUNTER_INFO,
    FAC_GUI_COUNTER_REFKEY,
    FAC_GUI_COUNTER_CHOICE,
    FAC_GUI_COUNTER_RESULT,
    FAC_GUI_COUNTER_DATE,
    PRS_PERSLID_KEY,
    PRS_PERSLID_NAAM_FULL,
    PRS_AFDELING_OMSCHRIJVING,
    PRS_BEDRIJF_NAAM
)
AS
    SELECT fgc.fac_gui_counter_key,
           fgc.fac_gui_counter_group,
           fgc.fac_gui_counter_info,
           fgc.fac_gui_counter_refkey,
           choice.fac_gui_counter_info fac_gui_counter_choice,
           result.fac_gui_counter_info fac_gui_counter_result,
           fac_gui_counter_date,
           fgc.prs_perslid_key,
           prs_perslid_naam_full,
           afd.prs_afdeling_omschrijving,
           bedr.prs_bedrijf_naam
      FROM fac_gui_counter          fgc,
           prs_v_perslid_fullnames  pf,
           prs_perslid              pr,
           prs_afdeling             afd,
           prs_bedrijf              bedr,
           (SELECT fac_gui_counter_refkey, fac_gui_counter_info
              FROM fac_gui_counter fgc
             WHERE     fac_gui_counter_info IS NOT NULL
                   AND fac_gui_counter_group = 'searchchoice') choice,
           (SELECT fac_gui_counter_refkey, fac_gui_counter_info
              FROM fac_gui_counter fgc
             WHERE     fac_gui_counter_info IS NOT NULL
                   AND fac_gui_counter_group = 'searchresult') result
     WHERE     fac_gui_counter_group = 'search'
           AND fgc.fac_gui_counter_info IS NOT NULL
           AND fgc.prs_perslid_key = pf.prs_perslid_key
           AND choice.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key
           AND result.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key
           AND pr.prs_perslid_key = fgc.prs_perslid_key
           AND afd.PRS_AFDELING_KEY = pr.prs_afdeling_key
           AND bedr.prs_bedrijf_key = afd.prs_bedrijf_key
    UNION ALL
    SELECT fgc.fac_gui_counter_key,
           fgc.fac_gui_counter_group,
           fac_usrrap_omschrijving,
           fgc.fac_gui_counter_refkey,
           NULL,
           NULL,
           fac_gui_counter_date,
           fgc.prs_perslid_key,
           prs_perslid_naam_full,
           afd.prs_afdeling_omschrijving,
           bedr.prs_bedrijf_naam
      FROM fac_gui_counter fgc,
           prs_v_perslid_fullnames pf,
           fac_usrrap fr,
           prs_afdeling  afd,
           prs_perslid              pr,
           prs_bedrijf   bedr
     WHERE     fgc.fac_gui_counter_group = 'report'
           AND fgc.prs_perslid_key = pf.prs_perslid_key(+)
           AND fr.fac_usrrap_key(+) = fgc.fac_gui_counter_refkey
           AND pr.prs_perslid_key = fgc.prs_perslid_key
           AND afd.PRS_AFDELING_KEY = pr.prs_afdeling_key
           AND bedr.prs_bedrijf_key = afd.prs_bedrijf_key
    UNION ALL
    SELECT fgc.fac_gui_counter_key,
           fgc.fac_gui_counter_group,
           COALESCE (fac_menu_altlabel, lcl.l (fac_menuitems_label)),
           fgc.fac_gui_counter_refkey,
           NULL,
           NULL,
           fac_gui_counter_date,
           fgc.prs_perslid_key,
           prs_perslid_naam_full,
           afd.prs_afdeling_omschrijving,
           bedr.prs_bedrijf_naam
      FROM fac_gui_counter          fgc,
           prs_v_perslid_fullnames  pf,
           prs_afdeling             afd,
           prs_bedrijf              bedr,
           prs_perslid              pr,
           fac_menu                 m,
           fac_menuitems            mi
     WHERE     fgc.fac_gui_counter_group = 'menu'
           AND fgc.prs_perslid_key = pf.prs_perslid_key(+)
           AND m.fac_menu_key = fac_gui_counter_refkey
           AND mi.fac_menuitems_key(+) = m.fac_menuitems_key
           AND pr.prs_perslid_key = fgc.prs_perslid_key
           AND afd.PRS_AFDELING_KEY = pr.prs_afdeling_key
           AND bedr.prs_bedrijf_key = afd.prs_bedrijf_key;


-- RWSN#30201 Dashboards "Tijdelijke capaciteit"
-- Gestylede rapportage met diverse grafieken. Rapport kan uitgedraaid worden voor
-- afgelopen jaar/halfjaar/kwartaal/maand. Daarom vrijwel alle views vier keer.
-- Er wordt onderscheid gemaakt tussen nieuwe aanvragen en wijzigingsvragen, wat ook weer tot verdubbeling leidt.
-- Daarnaast grafieken voor totaal en per organisatieonderdeel

-- Basisview met brongegevens. hier wordt met een tabelizer-usrrap een tabel van gemaakt.
-- Gebruikte kenmerk(soort)en:
-- AANVRAAG TIJDELIJKE CAPACITEIT
-- mld_stdmelding        8021           TCN-Aanvragen/Wijzigingen (N)  / Aanvraag tijdelijke capaciteit (N)
-- mld_stdmelding        8101   Stap 2: HR tijdelijke capaciteit (N)   / Aanvraag Tijdelijke Capaciteit (N)
-- mld_stdmelding        8121   Stap 3: KCC tijdelijke capaciteit (N)  / Nieuwe aanvraag (invoer JOB) (N)
-- mld_stdmelding        8062   Stap 4: ECO&P tijdelijke capaciteit(N) / Nieuwe aanvraag (externe werving) (N)
-- mld_stdmelding        8041   Stap 5: BIO tijdelijke capaciteit (N)  / Aanmaken nieuwe bestelling (N)
-- mld_stdmelding        8043   Stap 6: EBF tijdelijke capaciteit (N)  / Nieuw inzetcontract (N)
-- fac_srtnotificatie      22   MLDAFM
-- mld_kenmerk          20584   Organisatieonderdeel (incl. PPO verdeling)    *A
-- mld_kenmerk          20591   Directie                                      *A
-- mld_kenmerk          20817   Opdrachtgevende afdeling                      *A
-- mld_kenmerk          20886   Start periode                                 *A
-- mld_kenmerk          21288   Kostenplaatsverantwoordelijke                 *2
-- WIJZIGING TIJDELIJKE CAPACITEIT
-- mld_stdmelding        8022   TCN-Aanvragen/Wijzigingen (N) / Wijziging tijdelijke capaciteit (N)
-- mld_stdmelding        8122   Stap 2: KCC tijdelijke capaciteit (N) / Wijzigingsaanvraag (invoer JOB) (N)
-- mld_stdmelding        8081   Stap 3: ECO&P tijdelijke capaciteit(N) / Wijzigingsaanvraag (N)
-- mld_stdmelding        8042   Stap 4: BIO tijdelijke capaciteit (N) / Wijziging bestelling (N)
-- mld_stdmelding        8061   Stap 5: EBF tijdelijke capaciteit (N) / Wijziging inzetcontract (N)
-- fac_srtnotificatie      22   MLDAFM
-- mld_kenmerk          20584   Organisatieonderdeel (incl. PPO verdeling)    *A
-- mld_kenmerk          20594   Directie                                      *A
-- mld_kenmerk          20818   Opdrachtgevende afdeling                      *A
-- mld_kenmerk          20884   Start periode                                 *A
-- mld_kenmerk          21289   Kostenplaatsverantwoordelijke                 *2
-- mld_kenmerk          21148   Verlenging zittende kracht
-- mld_kenmerk          21149   Contractuele wijziging binnen de looptijd
-- mld_kenmerk          21150   Administratieve wijziging (kostenplaats)
-- mld_kenmerk          21151   Administratieve wijziging (ophoging budget)
-- mld_kenmerk          21152   Anders
-- ISSUELIJSTEN
-- mld_kenmerk          20719     (L) Issuelijst KCC HR
-- mld_kenmerk          20648     Gegevens niet compleet of correct
-- mld_kenmerk          20718     (L) Issuelijst ECO&P
-- mld_kenmerk          20510     ATB en/of Zaak ID niet aangeleverd
-- mld_kenmerk          20517     Aanvraag/Wijziging niet geaccordeerd in JOB
-- mld_kenmerk          20646     Geen tijdige terugkoppeling CV's
-- mld_kenmerk          20647     Geen tijdige terugkoppeling gesprekken
-- mld_kenmerk          20645     Geen geschikte kandidaten / meer selectierondes
-- mld_kenmerk          20913     Wachten op GUH-akkoord
-- mld_kenmerk          20914     Wachten op akkoord te hoog uurtarief
-- mld_kenmerk          20812     Onderhandeling tarieven bij verlenging
-- mld_kenmerk          20706     IVP niet geaccordeerd
-- mld_kenmerk          20586     Digitaal dossier niet op orde
-- mld_kenmerk          20518     Aanvraag/Wijziging on hold
-- mld_kenmerk          20716     (L) Issuelijst BIO
-- mld_kenmerk          20511     ATB niet vrijgegeven
-- mld_kenmerk          20649     Gegevens niet compleet of correct aangeleverd
-- mld_kenmerk          20705     IVP (ondertekend) niet aanwezig
-- mld_kenmerk          20813     Ontoereikend budget voor vastlegging bestelling
-- mld_kenmerk          20543     BIO- Leverancier niet bekend in SAP en Esize
-- mld_kenmerk          20717     (L) Issuelijst EBF
-- mld_kenmerk          20650     Gegevens niet correct of volledig aangeleverd BIO
-- mld_kenmerk          20898     Verkeerde crediteur stamgegevens
-- mld_kenmerk          20544     Bestelling foutief vastgelegd
-- mld_kenmerk          20651     Gegevens niet volledig aangeleverd door ECO&P
CREATE OR REPLACE VIEW rwsn_v_workflows_inhuur
AS
   WITH
      workflows_a AS
        (SELECT m.mld_melding_key,
                pfa.prs_perslid_naam_full melder,
                m.mld_melding_datum startdatum,
                st.mld_statuses_omschrijving status,
                ft.fac_tracking_datum afmelddatum,
                m.mld_melding_einddatum einddatum,
                ROUND(fac.datumtijdnaaruitvoertijd(m.mld_melding_datum, m.mld_melding_einddatum, 'D').tijdsduur) normtijd,
                fac.safe_to_date(startper.mld_kenmerkmelding_waarde, 'DD-MM-YYYY') start_periode,
                ud_orgond.fac_usrdata_key organisatieonderdeel_key,
                ud_orgond.fac_usrdata_omschr organisatieonderdeel,
                directie.mld_kenmerkmelding_waarde directie,
                opdrafd.mld_kenmerkmelding_waarde opdr_afdeling,
                pf_kpnvaw.prs_perslid_naam_full kpn_verantw,
                key2, startdatum2, status2, afmelddatum2, einddatum2, behandelaar2,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum2, einddatum2, 'D').tijdsduur) normtijd2,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum2, tracking_datum2, 'D').tijdsduur, 1) delta_t2,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum2, tracking_datum2, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig2,
                key3, startdatum3, status3, afmelddatum3, einddatum3, behandelaar3,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum3, einddatum3, 'D').tijdsduur) normtijd3,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum3, tracking_datum3, 'D').tijdsduur, 1) delta_t3,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum3, tracking_datum3, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig3,
                key4, startdatum4, status4, afmelddatum4, einddatum4, behandelaar4,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum4, einddatum4, 'D').tijdsduur) normtijd4,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum4, tracking_datum4, 'D').tijdsduur, 1) delta_t4,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum4, tracking_datum4, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig4,
                key5, startdatum5, status5, afmelddatum5, einddatum5, behandelaar5,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum5, einddatum5, 'D').tijdsduur) normtijd5,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum5, tracking_datum5, 'D').tijdsduur, 1) delta_t5,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum5, tracking_datum5, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig5,
                key6, startdatum6, status6, afmelddatum6, einddatum6, behandelaar6,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum6, einddatum6, 'D').tijdsduur) normtijd6,
                ROUND(fac.datumtijdnaaruitvoertijd(tracking_datum6, einddatum6, 'D').tijdsduur, 1) delta_t6,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum6, tracking_datum6, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig6
           FROM mld_melding m,
                mld_statuses st,
                fac_tracking ft,
                prs_v_perslid_fullnames_all pfa,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20584) orgond,
                fac_usrdata ud_orgond,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20591) directie,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20817) opdrafd,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20886) startper,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21288) kpnvaw,
                prs_v_perslid_fullnames_all pf_kpnvaw,
                (SELECT m.mld_melding_key key2,
                        m.mld_melding_datum startdatum2,
                        st.mld_statuses_omschrijving status2,
                        ft.fac_tracking_datum afmelddatum2,
                        m.mld_melding_einddatum einddatum2,
                        ft.fac_tracking_datum tracking_datum2,
                        pfa.prs_perslid_naam_full behandelaar2,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8101
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap2,
                (SELECT m.mld_melding_key key3,
                        m.mld_melding_datum startdatum3,
                        st.mld_statuses_omschrijving status3,
                        ft.fac_tracking_datum afmelddatum3,
                        m.mld_melding_einddatum einddatum3,
                        ft.fac_tracking_datum tracking_datum3,
                        pfa.prs_perslid_naam_full behandelaar3,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8121
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap3,
                (SELECT m.mld_melding_key key4,
                        m.mld_melding_datum startdatum4,
                        st.mld_statuses_omschrijving status4,
                        ft.fac_tracking_datum afmelddatum4,
                        m.mld_melding_einddatum einddatum4,
                        ft.fac_tracking_datum tracking_datum4,
                        pfa.prs_perslid_naam_full behandelaar4,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8062
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap4,
                (SELECT m.mld_melding_key key5,
                        m.mld_melding_datum startdatum5,
                        st.mld_statuses_omschrijving status5,
                        ft.fac_tracking_datum afmelddatum5,
                        m.mld_melding_einddatum einddatum5,
                        ft.fac_tracking_datum tracking_datum5,
                        pfa.prs_perslid_naam_full behandelaar5,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8041
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap5,
                (SELECT m.mld_melding_key key6,
                        m.mld_melding_datum startdatum6,
                        st.mld_statuses_omschrijving status6,
                        ft.fac_tracking_datum afmelddatum6,
                        m.mld_melding_einddatum einddatum6,
                        ft.fac_tracking_datum tracking_datum6,
                        pfa.prs_perslid_naam_full behandelaar6,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8043
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap6
          WHERE m.mld_stdmelding_key = 8021
            AND st.mld_statuses_key = m.mld_melding_status
            AND ft.fac_tracking_refkey(+) = m.mld_melding_key
            AND ft.fac_srtnotificatie_key = 22
            AND pfa.prs_perslid_key = m.prs_perslid_key_voor
            AND orgond.mld_melding_key = m.mld_melding_key
            AND ud_orgond.fac_usrdata_key = fac.safe_to_number(orgond.mld_kenmerkmelding_waarde)
            AND directie.mld_melding_key = m.mld_melding_key
            AND opdrafd.mld_melding_key = m.mld_melding_key
            AND startper.mld_melding_key = m.mld_melding_key
            AND kpnvaw.mld_melding_key(+) = m.mld_melding_key
            AND pf_kpnvaw.prs_perslid_key(+) = fac.safe_to_number(kpnvaw.mld_kenmerkmelding_waarde)
            AND stap2.mld_melding_start_key = m.mld_melding_key
            AND stap3.mld_melding_start_key = m.mld_melding_key
            AND stap4.mld_melding_start_key = m.mld_melding_key
            AND stap5.mld_melding_start_key = m.mld_melding_key
            AND stap6.mld_melding_start_key = m.mld_melding_key ),
      workflows_w AS
        (SELECT m.mld_melding_key,
                pfa.prs_perslid_naam_full melder,
                m.mld_melding_datum startdatum,
                st.mld_statuses_omschrijving status,
                ft.fac_tracking_datum afmelddatum,
                m.mld_melding_einddatum einddatum,
                ROUND(fac.datumtijdnaaruitvoertijd(m.mld_melding_datum, m.mld_melding_einddatum, 'D').tijdsduur) normtijd,
                fac.safe_to_date(startper.mld_kenmerkmelding_waarde, 'DD-MM-YYYY') start_periode,
                ud_orgond.fac_usrdata_key organisatieonderdeel_key,
                ud_orgond.fac_usrdata_omschr organisatieonderdeel,
                directie.mld_kenmerkmelding_waarde directie,
                opdrafd.mld_kenmerkmelding_waarde opdr_afdeling,
                pf_kpnvaw.prs_perslid_naam_full kpn_verantw,
                COALESCE(verleng.mld_kenmerk_key,
                         wijzcnt.mld_kenmerk_key,
                         wijzkpn.mld_kenmerk_key,
                         wijzbudg.mld_kenmerk_key,
                         anders.mld_kenmerk_key) vraagsoort,
                key2, startdatum2, status2, afmelddatum2, einddatum2, behandelaar2,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum2, einddatum2, 'D').tijdsduur) normtijd2,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum2, tracking_datum2, 'D').tijdsduur, 1) delta_t2,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum2, tracking_datum2, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig2,
                key3, startdatum3, status3, afmelddatum3, einddatum3, behandelaar3,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum3, einddatum3, 'D').tijdsduur) normtijd3,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum3, tracking_datum3, 'D').tijdsduur, 1) delta_t3,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum3, tracking_datum3, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig3,
                key4, startdatum4, status4, afmelddatum4, einddatum4, behandelaar4,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum4, einddatum4, 'D').tijdsduur) normtijd4,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum4, tracking_datum4, 'D').tijdsduur, 1) delta_t4,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum4, tracking_datum4, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig4,
                key5, startdatum5, status5, afmelddatum5, einddatum5, behandelaar5,
                ROUND(fac.datumtijdnaaruitvoertijd(startdatum5, einddatum5, 'D').tijdsduur) normtijd5,
                ROUND(fac.datumtijdnaaruitvoertijd(einddatum5, tracking_datum5, 'D').tijdsduur, 1) delta_t5,
                DECODE(SIGN(fac.datumtijdnaaruitvoertijd(einddatum5, tracking_datum5, 'D').tijdsduur), 1, 'Te laat', 'Op tijd') tijdig5
           FROM mld_melding m,
                mld_statuses st,
                fac_tracking ft,
                prs_v_perslid_fullnames_all pfa,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20584) orgond,
                fac_usrdata ud_orgond,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20594) directie,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20818) opdrafd,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 20884) startper,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21289) kpnvaw,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21148) verleng,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21149) wijzcnt,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21150) wijzkpn,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21151) wijzbudg,
                (SELECT * FROM mld_kenmerkmelding
                  WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 21152) anders,
                prs_v_perslid_fullnames_all pf_kpnvaw,
                (SELECT m.mld_melding_key key2,
                        m.mld_melding_datum startdatum2,
                        st.mld_statuses_omschrijving status2,
                        ft.fac_tracking_datum afmelddatum2,
                        m.mld_melding_einddatum einddatum2,
                        ft.fac_tracking_datum tracking_datum2,
                        pfa.prs_perslid_naam_full behandelaar2,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8122
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap2,
                (SELECT m.mld_melding_key key3,
                        m.mld_melding_datum startdatum3,
                        st.mld_statuses_omschrijving status3,
                        ft.fac_tracking_datum afmelddatum3,
                        m.mld_melding_einddatum einddatum3,
                        ft.fac_tracking_datum tracking_datum3,
                        pfa.prs_perslid_naam_full behandelaar3,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8081
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap3,
                (SELECT m.mld_melding_key key4,
                        m.mld_melding_datum startdatum4,
                        st.mld_statuses_omschrijving status4,
                        ft.fac_tracking_datum afmelddatum4,
                        m.mld_melding_einddatum einddatum4,
                        ft.fac_tracking_datum tracking_datum4,
                        pfa.prs_perslid_naam_full behandelaar4,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8042
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap4,
                (SELECT m.mld_melding_key key5,
                        m.mld_melding_datum startdatum5,
                        st.mld_statuses_omschrijving status5,
                        ft.fac_tracking_datum afmelddatum5,
                        m.mld_melding_einddatum einddatum5,
                        ft.fac_tracking_datum tracking_datum5,
                        pfa.prs_perslid_naam_full behandelaar5,
                        m.mld_melding_start_key
                   FROM mld_melding m,
                        mld_statuses st,
                        fac_tracking ft,
                        prs_v_perslid_fullnames_all pfa
                  WHERE m.mld_stdmelding_key = 8061
                    AND st.mld_statuses_key = m.mld_melding_status
                    AND ft.fac_tracking_refkey(+) = m.mld_melding_key
                    AND ft.fac_srtnotificatie_key = 22
                    AND pfa.prs_perslid_key(+) = m.mld_melding_behandelaar_key) stap5
          WHERE m.mld_stdmelding_key = 8022
            AND st.mld_statuses_key = m.mld_melding_status
            AND ft.fac_tracking_refkey(+) = m.mld_melding_key
            AND ft.fac_srtnotificatie_key = 22
            AND pfa.prs_perslid_key = m.prs_perslid_key_voor
            AND orgond.mld_melding_key = m.mld_melding_key
            AND ud_orgond.fac_usrdata_key = fac.safe_to_number(orgond.mld_kenmerkmelding_waarde)
            AND directie.mld_melding_key = m.mld_melding_key
            AND opdrafd.mld_melding_key = m.mld_melding_key
            AND startper.mld_melding_key = m.mld_melding_key
            AND kpnvaw.mld_melding_key(+) = m.mld_melding_key
            AND verleng.mld_melding_key(+) = m.mld_melding_key
            AND wijzcnt.mld_melding_key(+) = m.mld_melding_key
            AND wijzkpn.mld_melding_key(+) = m.mld_melding_key
            AND wijzbudg.mld_melding_key(+) = m.mld_melding_key
            AND anders.mld_melding_key(+) = m.mld_melding_key
            AND pf_kpnvaw.prs_perslid_key(+) = fac.safe_to_number(kpnvaw.mld_kenmerkmelding_waarde)
            AND stap2.mld_melding_start_key = m.mld_melding_key
            AND stap3.mld_melding_start_key = m.mld_melding_key
            AND stap4.mld_melding_start_key = m.mld_melding_key
            AND stap5.mld_melding_start_key = m.mld_melding_key ),
      -- KCC HR
      kcc_geg AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20648 AND mld_kenmerkmelding_verwijder IS NULL),   -- Gegevens niet compleet of correct
      -- ECOnP
      eco_atb AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20510 AND mld_kenmerkmelding_verwijder IS NULL),   -- ATB en/of Zaak ID niet aangeleverd
      eco_job AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20517 AND mld_kenmerkmelding_verwijder IS NULL),   -- Aanvraag/Wijziging niet geaccordeerd in JOB
      eco_cvs AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20646 AND mld_kenmerkmelding_verwijder IS NULL),   -- Geen tijdige terugkoppeling CV's
      eco_gsp AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20647 AND mld_kenmerkmelding_verwijder IS NULL),   -- Geen tijdige terugkoppeling gesprekken
      eco_kan AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20645 AND mld_kenmerkmelding_verwijder IS NULL),   -- Geen geschikte kandidaten / meer selectierondes
      eco_guh AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20913 AND mld_kenmerkmelding_verwijder IS NULL),   -- Wachten op GUH-akkoord
      eco_uur AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20914 AND mld_kenmerkmelding_verwijder IS NULL),   -- Wachten op akkoord te hoog uurtarief
      eco_odh AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20812 AND mld_kenmerkmelding_verwijder IS NULL),   -- Onderhandeling tarieven bij verlenging
      eco_ivp AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20706 AND mld_kenmerkmelding_verwijder IS NULL),   -- IVP niet geaccordeerd
      eco_dos AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20586 AND mld_kenmerkmelding_verwijder IS NULL),   -- Digitaal dossier niet op orde
      eco_hld AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20518 AND mld_kenmerkmelding_verwijder IS NULL),   -- Aanvraag/Wijziging on hold
      -- BIO
      bio_atb AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20511 AND mld_kenmerkmelding_verwijder IS NULL),   -- ATB niet vrijgegeven
      bio_geg AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20649 AND mld_kenmerkmelding_verwijder IS NULL),   -- Gegevens niet compleet of correct aangeleverd
      bio_ivp AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20705 AND mld_kenmerkmelding_verwijder IS NULL),   -- IVP (ondertekend) niet aanwezig
      bio_bud AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20813 AND mld_kenmerkmelding_verwijder IS NULL),   -- Ontoereikend budget voor vastlegging bestelling
      bio_lev AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20543 AND mld_kenmerkmelding_verwijder IS NULL),   -- BIO- Leverancier niet bekend in SAP en Esize
      -- EBF
      ebf_geb AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20650 AND mld_kenmerkmelding_verwijder IS NULL),   -- Gegevens niet correct of volledig aangeleverd BIO
      ebf_crd AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20898 AND mld_kenmerkmelding_verwijder IS NULL),   -- Verkeerde crediteur stamgegevens
      ebf_bes AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20544 AND mld_kenmerkmelding_verwijder IS NULL),   -- Bestelling foutief vastgelegd
      ebf_gee AS (SELECT mld_melding_key, mld_kenmerkmelding_waarde waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 20651 AND mld_kenmerkmelding_verwijder IS NULL)    -- Gegevens niet volledig aangeleverd door ECOnP
   SELECT 'Aanvraag' fclt_f_soort,
          workflows_a.mld_melding_key melding,
          workflows_a.melder,
          TO_CHAR(workflows_a.startdatum, 'DD-MM-YYYY') fclt_d_start,
          workflows_a.startdatum,
          workflows_a.status,
          workflows_a.afmelddatum,
          workflows_a.einddatum,
          workflows_a.normtijd,
          workflows_a.start_periode,
          ROUND(fac.datumtijdnaaruitvoertijd(workflows_a.start_periode, workflows_a.afmelddatum, 'D').tijdsduur , 1) delta_t,
          DECODE( SIGN( fac.datumtijdnaaruitvoertijd(workflows_a.start_periode, workflows_a.afmelddatum, 'D').tijdsduur),
                  1, 'Te laat',
                  'Op tijd') fclt_f_uitvoer_tijdig,
          DECODE( SIGN( fac.datumtijdnaaruitvoertijd(workflows_a.start_periode, workflows_a.einddatum, 'D').tijdsduur),
                  1, 'Te laat',
                  'Op tijd') aanvraag_tijdig,
          workflows_a.organisatieonderdeel_key,
          workflows_a.organisatieonderdeel fclt_f_organisatieonderdeel,
          workflows_a.directie,
          workflows_a.opdr_afdeling,
          workflows_a.kpn_verantw,
          NULL vraagsoort,
          workflows_a.key2 melding2, workflows_a.startdatum2, workflows_a.status2, workflows_a.afmelddatum2, workflows_a.einddatum2,
          workflows_a.normtijd2, workflows_a.delta_t2, workflows_a.tijdig2, workflows_a.behandelaar2,
          workflows_a.key3 melding3, workflows_a.startdatum3, workflows_a.status3, workflows_a.afmelddatum3, workflows_a.einddatum3,
          workflows_a.normtijd3, workflows_a.delta_t3, workflows_a.tijdig3, workflows_a.behandelaar3,
          workflows_a.key4 melding4, workflows_a.startdatum4, workflows_a.status4, workflows_a.afmelddatum4, workflows_a.einddatum4,
          workflows_a.normtijd4, workflows_a.delta_t4, workflows_a.tijdig4, workflows_a.behandelaar4,
          workflows_a.key5 melding5, workflows_a.startdatum5, workflows_a.status5, workflows_a.afmelddatum5, workflows_a.einddatum5,
          workflows_a.normtijd5, workflows_a.delta_t5, workflows_a.tijdig5, workflows_a.behandelaar5,
          workflows_a.key6 melding6, workflows_a.startdatum6, workflows_a.status6, workflows_a.afmelddatum6, workflows_a.einddatum6,
          workflows_a.normtijd6, workflows_a.delta_t6, workflows_a.tijdig6, workflows_a.behandelaar6,
          COALESCE(kcc_geg6.waarde, kcc_geg5.waarde, kcc_geg4.waarde, kcc_geg3.waarde, kcc_geg2.waarde) kcc_gegevens,
          COALESCE(eco_atb6.waarde, eco_atb5.waarde, eco_atb4.waarde) eco_atb_zaak_id,
          COALESCE(eco_job6.waarde, eco_job5.waarde, eco_job4.waarde) eco_akoord_job,
          COALESCE(eco_cvs6.waarde, eco_cvs5.waarde, eco_cvs4.waarde) eco_cv,
          COALESCE(eco_gsp6.waarde, eco_gsp5.waarde, eco_gsp4.waarde) eco_gesprekken,
          COALESCE(eco_kan6.waarde, eco_kan5.waarde, eco_kan4.waarde) eco_kandidaten,
          COALESCE(eco_guh6.waarde, eco_guh5.waarde, eco_guh4.waarde) eco_guh_akkoord,
          COALESCE(eco_uur6.waarde, eco_uur5.waarde, eco_uur4.waarde) eco_uurtarief,
          COALESCE(eco_odh6.waarde, eco_odh5.waarde, eco_odh4.waarde) eco_onderhandeling,
          COALESCE(eco_ivp6.waarde, eco_ivp5.waarde, eco_ivp4.waarde) eco_akoord_ivp,
          COALESCE(eco_dos6.waarde, eco_dos5.waarde, eco_dos4.waarde) eco_dossier,
          COALESCE(eco_hld6.waarde, eco_hld5.waarde, eco_hld4.waarde) eco_on_hold,
          COALESCE(bio_atb6.waarde, bio_atb5.waarde) bio_atb_vrij,
          COALESCE(bio_geg6.waarde, bio_geg5.waarde) bio_gegevens,
          COALESCE(bio_ivp6.waarde, bio_ivp5.waarde) bio_ivp,
          COALESCE(bio_bud6.waarde, bio_bud5.waarde) bio_budget,
          COALESCE(bio_lev6.waarde, bio_lev5.waarde) bio_leverancier,
          ebf_geb6.waarde ebf_gegevens_bio,
          ebf_crd6.waarde ebf_crediteur,
          ebf_bes6.waarde ebf_bestelling,
          ebf_gee6.waarde ebf_gegevens_eco
     FROM workflows_a,
          kcc_geg kcc_geg6, kcc_geg kcc_geg5, kcc_geg kcc_geg4, kcc_geg kcc_geg3, kcc_geg kcc_geg2,
          eco_atb eco_atb6, eco_atb eco_atb5, eco_atb eco_atb4,
          eco_job eco_job6, eco_job eco_job5, eco_job eco_job4,
          eco_cvs eco_cvs6, eco_cvs eco_cvs5, eco_cvs eco_cvs4,
          eco_gsp eco_gsp6, eco_gsp eco_gsp5, eco_gsp eco_gsp4,
          eco_kan eco_kan6, eco_kan eco_kan5, eco_kan eco_kan4,
          eco_guh eco_guh6, eco_guh eco_guh5, eco_guh eco_guh4,
          eco_uur eco_uur6, eco_uur eco_uur5, eco_uur eco_uur4,
          eco_odh eco_odh6, eco_odh eco_odh5, eco_odh eco_odh4,
          eco_ivp eco_ivp6, eco_ivp eco_ivp5, eco_ivp eco_ivp4,
          eco_dos eco_dos6, eco_dos eco_dos5, eco_dos eco_dos4,
          eco_hld eco_hld6, eco_hld eco_hld5, eco_hld eco_hld4,
          bio_atb bio_atb6, bio_atb bio_atb5,
          bio_geg bio_geg6, bio_geg bio_geg5,
          bio_ivp bio_ivp6, bio_ivp bio_ivp5,
          bio_bud bio_bud6, bio_bud bio_bud5,
          bio_lev bio_lev6, bio_lev bio_lev5,
          ebf_geb ebf_geb6,
          ebf_crd ebf_crd6,
          ebf_bes ebf_bes6,
          ebf_gee ebf_gee6
    WHERE kcc_geg6.mld_melding_key(+) = workflows_a.key6 AND kcc_geg5.mld_melding_key(+) = workflows_a.key5 AND kcc_geg4.mld_melding_key(+) = workflows_a.key4 AND kcc_geg3.mld_melding_key(+) = workflows_a.key3 AND kcc_geg2.mld_melding_key(+) = workflows_a.key2
      AND eco_atb6.mld_melding_key(+) = workflows_a.key6 AND eco_atb5.mld_melding_key(+) = workflows_a.key5 AND eco_atb4.mld_melding_key(+) = workflows_a.key4
      AND eco_job6.mld_melding_key(+) = workflows_a.key6 AND eco_job5.mld_melding_key(+) = workflows_a.key5 AND eco_job4.mld_melding_key(+) = workflows_a.key4
      AND eco_cvs6.mld_melding_key(+) = workflows_a.key6 AND eco_cvs5.mld_melding_key(+) = workflows_a.key5 AND eco_cvs4.mld_melding_key(+) = workflows_a.key4
      AND eco_gsp6.mld_melding_key(+) = workflows_a.key6 AND eco_gsp5.mld_melding_key(+) = workflows_a.key5 AND eco_gsp4.mld_melding_key(+) = workflows_a.key4
      AND eco_kan6.mld_melding_key(+) = workflows_a.key6 AND eco_kan5.mld_melding_key(+) = workflows_a.key5 AND eco_kan4.mld_melding_key(+) = workflows_a.key4
      AND eco_guh6.mld_melding_key(+) = workflows_a.key6 AND eco_guh5.mld_melding_key(+) = workflows_a.key5 AND eco_guh4.mld_melding_key(+) = workflows_a.key4
      AND eco_uur6.mld_melding_key(+) = workflows_a.key6 AND eco_uur5.mld_melding_key(+) = workflows_a.key5 AND eco_uur4.mld_melding_key(+) = workflows_a.key4
      AND eco_odh6.mld_melding_key(+) = workflows_a.key6 AND eco_odh5.mld_melding_key(+) = workflows_a.key5 AND eco_odh4.mld_melding_key(+) = workflows_a.key4
      AND eco_ivp6.mld_melding_key(+) = workflows_a.key6 AND eco_ivp5.mld_melding_key(+) = workflows_a.key5 AND eco_ivp4.mld_melding_key(+) = workflows_a.key4
      AND eco_dos6.mld_melding_key(+) = workflows_a.key6 AND eco_dos5.mld_melding_key(+) = workflows_a.key5 AND eco_dos4.mld_melding_key(+) = workflows_a.key4
      AND eco_hld6.mld_melding_key(+) = workflows_a.key6 AND eco_hld5.mld_melding_key(+) = workflows_a.key5 AND eco_hld4.mld_melding_key(+) = workflows_a.key4
      AND bio_atb6.mld_melding_key(+) = workflows_a.key6 AND bio_atb5.mld_melding_key(+) = workflows_a.key5
      AND bio_geg6.mld_melding_key(+) = workflows_a.key6 AND bio_geg5.mld_melding_key(+) = workflows_a.key5
      AND bio_ivp6.mld_melding_key(+) = workflows_a.key6 AND bio_ivp5.mld_melding_key(+) = workflows_a.key5
      AND bio_bud6.mld_melding_key(+) = workflows_a.key6 AND bio_bud5.mld_melding_key(+) = workflows_a.key5
      AND bio_lev6.mld_melding_key(+) = workflows_a.key6 AND bio_lev5.mld_melding_key(+) = workflows_a.key5
      AND ebf_geb6.mld_melding_key(+) = workflows_a.key6
      AND ebf_crd6.mld_melding_key(+) = workflows_a.key6
      AND ebf_bes6.mld_melding_key(+) = workflows_a.key6
      AND ebf_gee6.mld_melding_key(+) = workflows_a.key6
   UNION ALL
   SELECT 'Wijziging' fclt_f_soort,
          workflows_w.mld_melding_key melding,
          workflows_w.melder,
          TO_CHAR(workflows_w.startdatum, 'DD-MM-YYYY') fclt_d_start,
          workflows_w.startdatum,
          workflows_w.status,
          workflows_w.afmelddatum,
          workflows_w.einddatum,
          workflows_w.normtijd,
          workflows_w.start_periode,
          ROUND(fac.datumtijdnaaruitvoertijd(workflows_w.start_periode, workflows_w.afmelddatum, 'D').tijdsduur , 1) delta_t,
          DECODE( SIGN( fac.datumtijdnaaruitvoertijd(workflows_w.start_periode, workflows_w.afmelddatum, 'D').tijdsduur),
                  1, 'Te laat',
                  'Op tijd') fclt_f_uitvoer_tijdig,
          DECODE( SIGN( fac.datumtijdnaaruitvoertijd(workflows_w.start_periode, workflows_w.einddatum, 'D').tijdsduur),
                  1, 'Te laat',
                  'Op tijd') aanvraag_tijdig,
          workflows_w.organisatieonderdeel_key,
          workflows_w.organisatieonderdeel fclt_f_organisatieonderdeel,
          workflows_w.directie,
          workflows_w.opdr_afdeling,
          workflows_w.kpn_verantw,
          COALESCE(kenm.mld_srtkenmerk_omschrijving, 'Onbekend') vraagsoort,
          workflows_w.key2 melding2, workflows_w.startdatum2, workflows_w.status2, workflows_w.afmelddatum2, workflows_w.einddatum2,
          workflows_w.normtijd2, workflows_w.delta_t2, workflows_w.tijdig2, workflows_w.behandelaar2,
          workflows_w.key3 melding3, workflows_w.startdatum3, workflows_w.status3, workflows_w.afmelddatum3, workflows_w.einddatum3,
          workflows_w.normtijd3, workflows_w.delta_t3, workflows_w.tijdig3, workflows_w.behandelaar3,
          workflows_w.key4 melding4, workflows_w.startdatum4, workflows_w.status4, workflows_w.afmelddatum4, workflows_w.einddatum4,
          workflows_w.normtijd4, workflows_w.delta_t4, workflows_w.tijdig4, workflows_w.behandelaar4,
          workflows_w.key5 melding5, workflows_w.startdatum5, workflows_w.status5, workflows_w.afmelddatum5, workflows_w.einddatum5,
          workflows_w.normtijd5, workflows_w.delta_t5, workflows_w.tijdig5, workflows_w.behandelaar5,
          NULL melding6, NULL startdatum6, NULL status6, NULL afmelddatum6, NULL einddatum6, NULL normtijd6, NULL delta_t6, NULL tijdig6, NULL behandelaar6,
          COALESCE(kcc_geg5.waarde, kcc_geg4.waarde, kcc_geg3.waarde, kcc_geg2.waarde) kcc_gegevens,
          COALESCE(eco_atb5.waarde, eco_atb4.waarde, eco_atb3.waarde) eco_atb_zaak_id,
          COALESCE(eco_job5.waarde, eco_job4.waarde, eco_job3.waarde) eco_akoord_job,
          COALESCE(eco_cvs5.waarde, eco_cvs4.waarde, eco_cvs3.waarde) eco_cv,
          COALESCE(eco_gsp5.waarde, eco_gsp4.waarde, eco_gsp3.waarde) eco_gesprekken,
          COALESCE(eco_kan5.waarde, eco_kan4.waarde, eco_kan3.waarde) eco_kandidaten,
          COALESCE(eco_guh5.waarde, eco_guh4.waarde, eco_guh3.waarde) eco_guh_akkoord,
          COALESCE(eco_uur5.waarde, eco_uur4.waarde, eco_uur3.waarde) eco_uurtarief,
          COALESCE(eco_odh5.waarde, eco_odh4.waarde, eco_odh3.waarde) eco_onderhandeling,
          COALESCE(eco_ivp5.waarde, eco_ivp4.waarde, eco_ivp3.waarde) eco_akoord_ivp,
          COALESCE(eco_dos5.waarde, eco_dos4.waarde, eco_dos3.waarde) eco_dossier,
          COALESCE(eco_hld5.waarde, eco_hld4.waarde, eco_hld3.waarde) eco_on_hold,
          COALESCE(bio_atb5.waarde, bio_atb4.waarde) bio_atb_vrij,
          COALESCE(bio_geg5.waarde, bio_geg4.waarde) bio_gegevens,
          COALESCE(bio_ivp5.waarde, bio_ivp4.waarde) bio_ivp,
          COALESCE(bio_bud5.waarde, bio_bud4.waarde) bio_budget,
          COALESCE(bio_lev5.waarde, bio_lev4.waarde) bio_leverancier,
          ebf_geb5.waarde ebf_gegevens_bio,
          ebf_crd5.waarde ebf_crediteur,
          ebf_bes5.waarde ebf_bestelling,
          ebf_gee5.waarde ebf_gegevens_eco
     FROM workflows_w,
          (SELECT mld_kenmerk_key, mld_srtkenmerk_omschrijving
             FROM mld_kenmerk k, mld_srtkenmerk sk
            WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key) kenm,
          kcc_geg kcc_geg5, kcc_geg kcc_geg4, kcc_geg kcc_geg3, kcc_geg kcc_geg2,
          eco_atb eco_atb5, eco_atb eco_atb4, eco_atb eco_atb3,
          eco_job eco_job5, eco_job eco_job4, eco_job eco_job3,
          eco_cvs eco_cvs5, eco_cvs eco_cvs4, eco_cvs eco_cvs3,
          eco_gsp eco_gsp5, eco_gsp eco_gsp4, eco_gsp eco_gsp3,
          eco_kan eco_kan5, eco_kan eco_kan4, eco_kan eco_kan3,
          eco_guh eco_guh5, eco_guh eco_guh4, eco_guh eco_guh3,
          eco_uur eco_uur5, eco_uur eco_uur4, eco_uur eco_uur3,
          eco_odh eco_odh5, eco_odh eco_odh4, eco_odh eco_odh3,
          eco_ivp eco_ivp5, eco_ivp eco_ivp4, eco_ivp eco_ivp3,
          eco_dos eco_dos5, eco_dos eco_dos4, eco_dos eco_dos3,
          eco_hld eco_hld5, eco_hld eco_hld4, eco_hld eco_hld3,
          bio_atb bio_atb5, bio_atb bio_atb4,
          bio_geg bio_geg5, bio_geg bio_geg4,
          bio_ivp bio_ivp5, bio_ivp bio_ivp4,
          bio_bud bio_bud5, bio_bud bio_bud4,
          bio_lev bio_lev5, bio_lev bio_lev4,
          ebf_geb ebf_geb5,
          ebf_crd ebf_crd5,
          ebf_bes ebf_bes5,
          ebf_gee ebf_gee5
    WHERE kcc_geg5.mld_melding_key(+) = workflows_w.key5 AND kcc_geg4.mld_melding_key(+) = workflows_w.key4 AND kcc_geg3.mld_melding_key(+) = workflows_w.key3 AND kcc_geg2.mld_melding_key(+) = workflows_w.key2
      AND eco_atb5.mld_melding_key(+) = workflows_w.key5 AND eco_atb4.mld_melding_key(+) = workflows_w.key4 AND eco_atb3.mld_melding_key(+) = workflows_w.key3
      AND eco_job5.mld_melding_key(+) = workflows_w.key5 AND eco_job4.mld_melding_key(+) = workflows_w.key4 AND eco_job3.mld_melding_key(+) = workflows_w.key3
      AND eco_cvs5.mld_melding_key(+) = workflows_w.key5 AND eco_cvs4.mld_melding_key(+) = workflows_w.key4 AND eco_cvs3.mld_melding_key(+) = workflows_w.key3
      AND eco_gsp5.mld_melding_key(+) = workflows_w.key5 AND eco_gsp4.mld_melding_key(+) = workflows_w.key4 AND eco_gsp3.mld_melding_key(+) = workflows_w.key3
      AND eco_kan5.mld_melding_key(+) = workflows_w.key5 AND eco_kan4.mld_melding_key(+) = workflows_w.key4 AND eco_kan3.mld_melding_key(+) = workflows_w.key3
      AND eco_guh5.mld_melding_key(+) = workflows_w.key5 AND eco_guh4.mld_melding_key(+) = workflows_w.key4 AND eco_guh3.mld_melding_key(+) = workflows_w.key3
      AND eco_uur5.mld_melding_key(+) = workflows_w.key5 AND eco_uur4.mld_melding_key(+) = workflows_w.key4 AND eco_uur3.mld_melding_key(+) = workflows_w.key3
      AND eco_odh5.mld_melding_key(+) = workflows_w.key5 AND eco_odh4.mld_melding_key(+) = workflows_w.key4 AND eco_odh3.mld_melding_key(+) = workflows_w.key3
      AND eco_ivp5.mld_melding_key(+) = workflows_w.key5 AND eco_ivp4.mld_melding_key(+) = workflows_w.key4 AND eco_ivp3.mld_melding_key(+) = workflows_w.key3
      AND eco_dos5.mld_melding_key(+) = workflows_w.key5 AND eco_dos4.mld_melding_key(+) = workflows_w.key4 AND eco_dos3.mld_melding_key(+) = workflows_w.key3
      AND eco_hld5.mld_melding_key(+) = workflows_w.key5 AND eco_hld4.mld_melding_key(+) = workflows_w.key4 AND eco_hld3.mld_melding_key(+) = workflows_w.key3
      AND bio_atb5.mld_melding_key(+) = workflows_w.key5 AND bio_atb4.mld_melding_key(+) = workflows_w.key4
      AND bio_geg5.mld_melding_key(+) = workflows_w.key5 AND bio_geg4.mld_melding_key(+) = workflows_w.key4
      AND bio_ivp5.mld_melding_key(+) = workflows_w.key5 AND bio_ivp4.mld_melding_key(+) = workflows_w.key4
      AND bio_bud5.mld_melding_key(+) = workflows_w.key5 AND bio_bud4.mld_melding_key(+) = workflows_w.key4
      AND bio_lev5.mld_melding_key(+) = workflows_w.key5 AND bio_lev4.mld_melding_key(+) = workflows_w.key4
      AND ebf_geb5.mld_melding_key(+) = workflows_w.key5
      AND ebf_crd5.mld_melding_key(+) = workflows_w.key5
      AND ebf_bes5.mld_melding_key(+) = workflows_w.key5
      AND ebf_gee5.mld_melding_key(+) = workflows_w.key5
      AND kenm.mld_kenmerk_key(+) = workflows_w.vraagsoort;

-- Dummy-rapportages voor stylesheet (maand, kwartaal, halfjaar, jaar)
CREATE OR REPLACE FORCE VIEW rwsn_v_rap_tijdelijke_cap
AS
   SELECT DISTINCT organisatieonderdeel_key,
          fclt_f_organisatieonderdeel organisatieonderdeel,
          'HRM Mobiliteit' stap2,
          'KCC' stap3,
          'EC O&'||'P' stap4,
          'Inkoop' stap5,
          'EBF' stap6
     FROM t_rwsn_v_workflows_inhuur
    ORDER BY fclt_f_organisatieonderdeel;

CREATE OR REPLACE FORCE VIEW rwsn_v_rap_tijdelijke_cap_m
AS
   SELECT cap.*,
          TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'DD-MM-YYYY') van,
          TO_CHAR(SYSDATE, 'DD-MM-YYYY') tot,
          t0a.fac_usrgraph_key  t0a, t0b.fac_usrgraph_key  t0b,
          t1aa.fac_usrgraph_key t1aa, t1aw.fac_usrgraph_key t1aw, t1ba.fac_usrgraph_key t1ba, t1bw.fac_usrgraph_key t1bw,
          t2aa.fac_usrgraph_key t2aa, t2aw.fac_usrgraph_key t2aw, t2ba.fac_usrgraph_key t2ba, t2bw.fac_usrgraph_key t2bw,
          t3a.fac_usrgraph_key  t3a, t3w.fac_usrgraph_key  t3w,
          t4a.fac_usrgraph_key  t4a, t4w.fac_usrgraph_key  t4w
     FROM rwsn_v_rap_tijdelijke_cap cap,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_'     ||'m') t0a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_org_' ||'m') t0b,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_'      ||'m') t1aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_'      ||'m') t1aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_org_'  ||'m') t1ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_org_'  ||'m') t1bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_aanv_'        ||'m') t2aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_wijz_'        ||'m') t2aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_aanv_org_'    ||'m') t2ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_wijz_org_'    ||'m') t2bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_aanv_'    ||'m') t3a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_wijz_'    ||'m') t3w,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_aanv_'    ||'m') t4a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_wijz_'    ||'m') t4w
    ORDER BY organisatieonderdeel;

CREATE OR REPLACE FORCE VIEW rwsn_v_rap_tijdelijke_cap_k
AS
   SELECT cap.*,
          TO_CHAR(ADD_MONTHS(SYSDATE, -3), 'DD-MM-YYYY') van,
          TO_CHAR(SYSDATE, 'DD-MM-YYYY') tot,
          t0a.fac_usrgraph_key  t0a, t0b.fac_usrgraph_key  t0b,
          t1aa.fac_usrgraph_key t1aa, t1aw.fac_usrgraph_key t1aw, t1ba.fac_usrgraph_key t1ba, t1bw.fac_usrgraph_key t1bw,
          t2aa.fac_usrgraph_key t2aa, t2aw.fac_usrgraph_key t2aw, t2ba.fac_usrgraph_key t2ba, t2bw.fac_usrgraph_key t2bw,
          t3a.fac_usrgraph_key  t3a, t3w.fac_usrgraph_key  t3w,
          t4a.fac_usrgraph_key  t4a, t4w.fac_usrgraph_key  t4w
     FROM rwsn_v_rap_tijdelijke_cap cap,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_'     ||'k') t0a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_org_' ||'k') t0b,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_'      ||'k') t1aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_'      ||'k') t1aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_org_'  ||'k') t1ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_org_'  ||'k') t1bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_aanv_'        ||'k') t2aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_wijz_'        ||'k') t2aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_aanv_org_'    ||'k') t2ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_wijz_org_'    ||'k') t2bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_aanv_'    ||'k') t3a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_wijz_'    ||'k') t3w,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_aanv_'    ||'k') t4a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_wijz_'    ||'k') t4w
    ORDER BY organisatieonderdeel;

CREATE OR REPLACE FORCE VIEW rwsn_v_rap_tijdelijke_cap_h
AS
   SELECT cap.*,
          TO_CHAR(ADD_MONTHS(SYSDATE, -6), 'DD-MM-YYYY') van,
          TO_CHAR(SYSDATE, 'DD-MM-YYYY') tot,
          t0a.fac_usrgraph_key  t0a, t0b.fac_usrgraph_key  t0b,
          t1aa.fac_usrgraph_key t1aa, t1aw.fac_usrgraph_key t1aw, t1ba.fac_usrgraph_key t1ba, t1bw.fac_usrgraph_key t1bw,
          t2aa.fac_usrgraph_key t2aa, t2aw.fac_usrgraph_key t2aw, t2ba.fac_usrgraph_key t2ba, t2bw.fac_usrgraph_key t2bw,
          t3a.fac_usrgraph_key  t3a, t3w.fac_usrgraph_key  t3w,
          t4a.fac_usrgraph_key  t4a, t4w.fac_usrgraph_key  t4w
     FROM rwsn_v_rap_tijdelijke_cap cap,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_'     ||'h') t0a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_org_' ||'h') t0b,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_'      ||'h') t1aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_'      ||'h') t1aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_org_'  ||'h') t1ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_org_'  ||'h') t1bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_aanv_'        ||'h') t2aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_wijz_'        ||'h') t2aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_aanv_org_'    ||'h') t2ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_wijz_org_'    ||'h') t2bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_aanv_'    ||'h') t3a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_wijz_'    ||'h') t3w,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_aanv_'    ||'h') t4a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_wijz_'    ||'h') t4w
    ORDER BY organisatieonderdeel;

CREATE OR REPLACE FORCE VIEW rwsn_v_rap_tijdelijke_cap_j
AS
   SELECT cap.*,
          TO_CHAR(ADD_MONTHS(SYSDATE, -12), 'DD-MM-YYYY') van,
          TO_CHAR(SYSDATE, 'DD-MM-YYYY') tot,
          t0a.fac_usrgraph_key  t0a, t0b.fac_usrgraph_key  t0b,
          t1aa.fac_usrgraph_key t1aa, t1aw.fac_usrgraph_key t1aw, t1ba.fac_usrgraph_key t1ba, t1bw.fac_usrgraph_key t1bw,
          t2aa.fac_usrgraph_key t2aa, t2aw.fac_usrgraph_key t2aw, t2ba.fac_usrgraph_key t2ba, t2bw.fac_usrgraph_key t2bw,
          t3a.fac_usrgraph_key  t3a, t3w.fac_usrgraph_key  t3w,
          t4a.fac_usrgraph_key  t4a, t4w.fac_usrgraph_key  t4w
     FROM rwsn_v_rap_tijdelijke_cap cap,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_'     ||'j') t0a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_wijz_hoofd_org_' ||'j') t0b,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_'      ||'j') t1aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_'      ||'j') t1aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_aanv_org_'  ||'j') t1ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_kpi1_wijz_org_'  ||'j') t1bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_aanv_'        ||'j') t2aa,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2a_wijz_'        ||'j') t2aw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_aanv_org_'    ||'j') t2ba,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_2b_wijz_org_'    ||'j') t2bw,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_aanv_'    ||'j') t3a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_3_stap_wijz_'    ||'j') t3w,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_aanv_'    ||'j') t4a,
          (SELECT fac_usrgraph_key FROM fac_usrgraph WHERE fac_usrgraph_view_name = 'rwsn_v_graph_issues_wijz_'    ||'j') t4w
    ORDER BY organisatieonderdeel;

-- Mogelijke issues
-- mld_srtkenmerk           6081    Gegevens niet compleet of correct
-- mld_srtkenmerk           6071    ATB en/of Zaak ID niet aangeleverd
-- mld_srtkenmerk           6073    Aanvraag/Wijziging niet geaccordeerd in JOB
-- mld_srtkenmerk           6079    Geen tijdige terugkoppeling CV's
-- mld_srtkenmerk           6080    Geen tijdige terugkoppeling gesprekken
-- mld_srtkenmerk           6078    Geen geschikte kandidaten / meer selectierondes
-- mld_srtkenmerk           6096    Wachten op GUH-akkoord
-- mld_srtkenmerk           6097    Wachten op akkoord te hoog uurtarief
-- mld_srtkenmerk           6093    Onderhandeling tarieven bij verlenging
-- mld_srtkenmerk           6086    IVP niet geaccordeerd
-- mld_srtkenmerk           6077    Digitaal dossier niet op orde
-- mld_srtkenmerk           6074    Aanvraag/Wijziging on hold
-- mld_srtkenmerk           6072    ATB niet vrijgegeven
-- mld_srtkenmerk           6082    Gegevens niet compleet of correct aangeleverd
-- mld_srtkenmerk           6085    IVP (ondertekend) niet aanwezig
-- mld_srtkenmerk           6094    Ontoereikend budget voor vastlegging bestelling
-- mld_srtkenmerk           6075    BIO- Leverancier niet bekend in SAP en Esize
-- mld_srtkenmerk           6083    Gegevens niet correct of volledig aangeleverd BIO
-- mld_srtkenmerk           6095    Verkeerde crediteur stamgegevens
-- mld_srtkenmerk           6076    Bestelling foutief vastgelegd
-- mld_srtkenmerk           6084    Gegevens niet volledig aangeleverd door ECO&P
CREATE OR REPLACE VIEW rwsn_v_issues
AS
   SELECT (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6081) kcc_gegevens,         -- Gegevens niet compleet of correct
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6071) eco_atb_zaak_id,      -- ATB en/of Zaak ID niet aangeleverd
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6073) eco_akoord_job,       -- Aanvraag/Wijziging niet geaccordeerd in JOB
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6079) eco_cv,               -- Geen tijdige terugkoppeling CV's
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6080) eco_gesprekken,       -- Geen tijdige terugkoppeling gesprekken
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6078) eco_kandidaten,       -- Geen geschikte kandidaten / meer selectierondes
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6096) eco_guh_akkoord,      -- Wachten op GUH-akkoord
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6097) eco_uurtarief,        -- Wachten op akkoord te hoog uurtarief
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6093) eco_onderhandeling,   -- Onderhandeling tarieven bij verlenging
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6086) eco_akoord_ivp,       -- IVP niet geaccordeerd
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6077) eco_dossier,          -- Digitaal dossier niet op orde
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6074) eco_on_hold,          -- Aanvraag/Wijziging on hold
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6072) bio_atb_vrij,         -- ATB niet vrijgegeven
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6082) bio_gegevens,         -- Gegevens niet compleet of correct aangeleverd
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6085) bio_ivp,              -- IVP (ondertekend) niet aanwezig
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6094) bio_budget,           -- Ontoereikend budget voor vastlegging bestelling
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6075) bio_leverancier,      -- BIO- Leverancier niet bekend in SAP en Esize
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6083) ebf_gegevens_bio,     -- Gegevens niet correct of volledig aangeleverd BIO
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6095) ebf_crediteur,        -- Verkeerde crediteur stamgegevens
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6076) ebf_bestelling,       -- Bestelling foutief vastgelegd
          (SELECT mld_srtkenmerk_omschrijving FROM mld_srtkenmerk WHERE mld_srtkenmerk_key = 6084) ebf_gegevens_eco      -- Gegevens niet volledig aangeleverd door ECOenP
     FROM DUAL;

-- Hoofdlijn A
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_m
AS
   SELECT COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY vraagsoort;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_k
AS
   SELECT COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY vraagsoort;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_h
AS
   SELECT COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY vraagsoort;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_j
AS
   SELECT COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY vraagsoort;


-- Hoofdlijn B
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_org_m
AS
   SELECT organisatieonderdeel_key fclt_key,
          COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY organisatieonderdeel_key, vraagsoort;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_org_k
AS
   SELECT organisatieonderdeel_key fclt_key,
          COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY organisatieonderdeel_key, vraagsoort;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_org_h
AS
   SELECT organisatieonderdeel_key fclt_key,
          COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY organisatieonderdeel_key, vraagsoort;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_wijz_hoofd_org_j
AS
   SELECT organisatieonderdeel_key fclt_key,
          COALESCE(vraagsoort, 'Nieuwe aanvraag') fclt_xas_,
          COUNT(*) fclt_yas_,
          DECODE(vraagsoort,
                 NULL, '#007bc7',
                 'Verlenging zittende kracht', '#39870c',
                 'Administratieve wijziging (kostenplaats)',  '#275937',
                 'Administratieve wijziging (ophoging budget)',  '#777c00',
                 'Contractuele wijziging binnen de looptijd',  '#94710a',
                 'Anders',  '#673327',
                 'Onbekend',  '#999999',
                 '#ff00ff') fclt_color,
          DECODE(vraagsoort,
                 NULL, 1,
                 'Verlenging zittende kracht', 11,
                 'Administratieve wijziging (kostenplaats)', 12,
                 'Administratieve wijziging (ophoging budget)', 13,
                 'Contractuele wijziging binnen de looptijd', 14,
                 'Anders', 20,
                 'Onbekend', 99,
                 25) fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY organisatieonderdeel_key, vraagsoort;


-- KPI 1A en 2A
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_m
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_k
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -5)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_h
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_j
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_m
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_k
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_h
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_j
AS
   SELECT fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY fclt_f_uitvoer_tijdig;


-- KPI 1B en 2B
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_org_m
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_org_k
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_org_h
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_aanv_org_j
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_org_m
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_org_k
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_org_h
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_kpi1_wijz_org_j
AS
   SELECT organisatieonderdeel_key fclt_key,
          fclt_f_uitvoer_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(fclt_f_uitvoer_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_f_uitvoer_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY organisatieonderdeel_key, fclt_f_uitvoer_tijdig;


-- Element 2A
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_aanv_m
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_aanv_k
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_aanv_h
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_aanv_j
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY aanvraag_tijdig;


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_wijz_m
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_wijz_k
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_wijz_h
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2a_wijz_j
AS
   SELECT aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY aanvraag_tijdig;


-- Element 2B
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_aanv_org_m
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_aanv_org_k
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_aanv_org_h
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_aanv_org_j
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Aanvraag'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_wijz_org_m
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_wijz_org_k
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_wijz_org_h
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_2b_wijz_org_j
AS
   SELECT organisatieonderdeel_key fclt_key,
          aanvraag_tijdig fclt_xas_,
          COUNT(*) fclt_yas_,
          '' fclt_url,
          DECODE(aanvraag_tijdig,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          aanvraag_tijdig fclt_sort
     FROM t_rwsn_v_workflows_inhuur
    WHERE fclt_f_soort = 'Wijziging'
      AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
    GROUP BY organisatieonderdeel_key, aanvraag_tijdig;


-- Element 3
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_aanv_m
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig5
            UNION ALL
            SELECT 6 fclt_key,
                   tijdig6 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig6);


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_aanv_k
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig5
            UNION ALL
            SELECT 6 fclt_key,
                   tijdig6 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig6);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_aanv_h
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig5
            UNION ALL
            SELECT 6 fclt_key,
                   tijdig6 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig6);


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_aanv_j
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig5
            UNION ALL
            SELECT 6 fclt_key,
                   tijdig6 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Aanvraag'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig6);


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_wijz_m
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -1)
             GROUP BY tijdig5);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_wijz_k
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -3)
             GROUP BY tijdig5);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_wijz_h
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -6)
             GROUP BY tijdig5);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_3_stap_wijz_j
AS
   SELECT fclt_key,
          fclt_xas_,
          fclt_yas_,
          DECODE(fclt_xas_,
                 'Op tijd', '#77BB00',
                 'Te laat', '#990000',
                 '#ff00ff') fclt_color,
          fclt_xas_ fclt_sort
     FROM ( SELECT 2 fclt_key,
                   tijdig2 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig2
            UNION ALL
            SELECT 3 fclt_key,
                   tijdig3 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig3
            UNION ALL
            SELECT 4 fclt_key,
                   tijdig4 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig4
            UNION ALL
            SELECT 5 fclt_key,
                   tijdig5 fclt_xas_,
                   COUNT(*) fclt_yas_
              FROM t_rwsn_v_workflows_inhuur
             WHERE fclt_f_soort = 'Wijziging'
               AND afmelddatum > ADD_MONTHS(SYSDATE, -12)
             GROUP BY tijdig5);


-- Element 4
CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_aanv_m
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Aanvraag'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -1))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_aanv_k
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Aanvraag'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -3))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_aanv_h
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Aanvraag'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -6))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_aanv_j
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Aanvraag'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -12))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);


CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_wijz_m
   (fclt_xas_,
    fclt_yas_,
    fclt_sort)
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Wijziging'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -1))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_wijz_k
   (fclt_xas_,
    fclt_yas_,
    fclt_sort)
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Wijziging'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -3))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_wijz_h
   (fclt_xas_,
    fclt_yas_,
    fclt_sort)
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Wijziging'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -6))
      SELECT MIN(i.kcc_gegevens)       fclt_yas_, COUNT(wi.kcc_gegevens)       fclt_xas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_yas_, COUNT(wi.eco_atb_zaak_id)    fclt_xas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_yas_, COUNT(wi.eco_akoord_job)     fclt_xas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_yas_, COUNT(wi.eco_cv)             fclt_xas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_yas_, COUNT(wi.eco_gesprekken)     fclt_xas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_yas_, COUNT(wi.eco_kandidaten)     fclt_xas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_yas_, COUNT(wi.eco_guh_akkoord)    fclt_xas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_yas_, COUNT(wi.eco_uurtarief)      fclt_xas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_yas_, COUNT(wi.eco_onderhandeling) fclt_xas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_yas_, COUNT(wi.eco_akoord_ivp)     fclt_xas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_yas_, COUNT(wi.eco_dossier)        fclt_xas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_yas_, COUNT(wi.eco_on_hold)        fclt_xas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_yas_, COUNT(wi.bio_atb_vrij)       fclt_xas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_yas_, COUNT(wi.bio_gegevens)       fclt_xas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_yas_, COUNT(wi.bio_ivp)            fclt_xas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_yas_, COUNT(wi.bio_budget)         fclt_xas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_yas_, COUNT(wi.bio_leverancier)    fclt_xas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_yas_, COUNT(wi.ebf_gegevens_bio)   fclt_xas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_yas_, COUNT(wi.ebf_crediteur)      fclt_xas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_yas_, COUNT(wi.ebf_bestelling)     fclt_xas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_yas_, COUNT(wi.ebf_gegevens_eco)   fclt_xas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

CREATE OR REPLACE FORCE VIEW rwsn_v_graph_issues_wijz_j
   (fclt_xas_,
    fclt_yas_,
    fclt_sort)
AS
   SELECT * FROM (
      WITH wi AS
        (SELECT * FROM t_rwsn_v_workflows_inhuur
          WHERE fclt_f_soort = 'Wijziging'
            AND afmelddatum > ADD_MONTHS(SYSDATE, -12))
      SELECT MIN(i.kcc_gegevens)       fclt_xas_, COUNT(wi.kcc_gegevens)       fclt_yas_,  1 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_atb_zaak_id)    fclt_xas_, COUNT(wi.eco_atb_zaak_id)    fclt_yas_,  2 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_job)     fclt_xas_, COUNT(wi.eco_akoord_job)     fclt_yas_,  3 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_cv)             fclt_xas_, COUNT(wi.eco_cv)             fclt_yas_,  4 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_gesprekken)     fclt_xas_, COUNT(wi.eco_gesprekken)     fclt_yas_,  5 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_kandidaten)     fclt_xas_, COUNT(wi.eco_kandidaten)     fclt_yas_,  6 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_guh_akkoord)    fclt_xas_, COUNT(wi.eco_guh_akkoord)    fclt_yas_,  7 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_uurtarief)      fclt_xas_, COUNT(wi.eco_uurtarief)      fclt_yas_,  8 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_onderhandeling) fclt_xas_, COUNT(wi.eco_onderhandeling) fclt_yas_,  9 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_akoord_ivp)     fclt_xas_, COUNT(wi.eco_akoord_ivp)     fclt_yas_, 10 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_dossier)        fclt_xas_, COUNT(wi.eco_dossier)        fclt_yas_, 11 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.eco_on_hold)        fclt_xas_, COUNT(wi.eco_on_hold)        fclt_yas_, 12 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_atb_vrij)       fclt_xas_, COUNT(wi.bio_atb_vrij)       fclt_yas_, 13 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_gegevens)       fclt_xas_, COUNT(wi.bio_gegevens)       fclt_yas_, 14 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_ivp)            fclt_xas_, COUNT(wi.bio_ivp)            fclt_yas_, 15 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_budget)         fclt_xas_, COUNT(wi.bio_budget)         fclt_yas_, 16 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.bio_leverancier)    fclt_xas_, COUNT(wi.bio_leverancier)    fclt_yas_, 17 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_bio)   fclt_xas_, COUNT(wi.ebf_gegevens_bio)   fclt_yas_, 18 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_crediteur)      fclt_xas_, COUNT(wi.ebf_crediteur)      fclt_yas_, 19 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_bestelling)     fclt_xas_, COUNT(wi.ebf_bestelling)     fclt_yas_, 20 fclt_sort FROM wi, rwsn_v_issues i UNION ALL
      SELECT MIN(i.ebf_gegevens_eco)   fclt_xas_, COUNT(wi.ebf_gegevens_eco)   fclt_yas_, 21 fclt_sort FROM wi, rwsn_v_issues i);

-- RWSN#33267
-- Bezet=1 of onbezet=0 per WP en basis voor UDR-rapportages/visualisaties!
/* Formatted on 7-12-2016 11:02:28 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_wpbez_per_wp
(
   locatie_key,
   locatie_code,
   locatie_oms,
   gebouw_key,
   gebouw_code,
   gebouw_naam,
   verdieping_key,
   vleugel,                                                   -- Ruimteprefix!
   verdieping_volgnr,
   verdieping_code,
   verdieping_oms,
   wp_bez                                              -- Bezet=1 of onbezet=0
)
AS
   SELECT l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          g.alg_gebouw_key,
          g.alg_gebouw_code,
          g.alg_gebouw_naam,
          v.alg_verdieping_key,
          DECODE (fac.safe_to_number (SUBSTR (r.alg_ruimte_upper_nr, 1, 1)),
                  NULL, SUBSTR (r.alg_ruimte_upper_nr, 1, 1),
                  NULL),
          v.alg_verdieping_volgnr,
          v.alg_verdieping_code,
          g.alg_gebouw_code || '/' || SUBSTR ('0' || v.alg_verdieping_code, -2),
          DECODE (d.ins_deel_state, '1', 1, 0)             -- NU bezet/onbezet
     FROM ins_v_aanwezigdeel d,
          ins_srtdeel sd,
          ins_srtgroep sg,
          alg_v_aanwezigruimte r,
          alg_v_aanwezigverdieping v,
          alg_gebouw g,
          alg_locatie l,
          fac_v_aanwezigusrdata ud
    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 = 3250                              -- WPs
          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
          AND ud.fac_usrtab_key = 3                           -- WPZ-gebouwen!
          AND ud.fac_usrdata_code = TO_CHAR (g.alg_gebouw_key);

-- Bron met aantallen/percentages per verdieping (tbv. alle WPZ-gebouwen) en
-- per vleugel (tbv. RTMs voor Westraven)!
/* Formatted on 7-12-2016 11:05:25 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_wpbez
(
   locatie_key,
   locatie_code,
   locatie_oms,
   gebouw_key,
   gebouw_code,
   gebouw_naam,
   verdieping_key,
   vleugel,                                -- Ruimteprefix (alleen Westraven)!
   verdieping_volgnr,
   verdieping_code,
   verdieping_oms,
   wp_tot,                                                           -- Totaal
   wp_bez,                                                            -- Bezet
   wp_onb,                                                          -- Onbezet
   wp_bezpct,
   wp_onbpct
)
AS
   SELECT x.alg_locatie_key,
          x.alg_locatie_code,
          x.alg_locatie_omschrijving,
          x.alg_gebouw_key,
          x.alg_gebouw_code,
          x.alg_gebouw_naam,
          x.alg_verdieping_key,
          NULL vleugel,
          x.alg_verdieping_volgnr,
          x.alg_verdieping_code,
          x.alg_verdieping_omschrijving,
          COALESCE (wp.tot, 0) wp_tot,
          COALESCE (wp.bez, 0) wp_bez,
          COALESCE (wp.tot, 0) - COALESCE (wp.bez, 0) wp_onb,
          DECODE (wp.tot, 0, TO_NUMBER (NULL), wp.bez / wp.tot) wp_bezpct,
          DECODE (COALESCE (wp.tot, 0),
                  0, TO_NUMBER (NULL),
                  (wp.tot - COALESCE (wp.bez, 0)) / wp.tot)
             wp_onbpct
     FROM    (SELECT v.alg_verdieping_key,
                     v.alg_verdieping_volgnr,
                     v.alg_verdieping_code,
                     v.alg_verdieping_omschrijving,
                     g.alg_gebouw_key,
                     g.alg_gebouw_code,
                     g.alg_gebouw_naam,
                     l.alg_locatie_key,
                     l.alg_locatie_code,
                     l.alg_locatie_omschrijving
                FROM alg_v_aanwezigverdieping v,
                     alg_gebouw g,
                     alg_locatie l,
                     fac_v_aanwezigusrdata ud
               WHERE v.alg_gebouw_key = g.alg_gebouw_key
                     AND g.alg_locatie_key = l.alg_locatie_key
                     AND ud.fac_usrtab_key = 3                -- WPZ-gebouwen!
                     AND ud.fac_usrdata_code = TO_CHAR (g.alg_gebouw_key)) x
          LEFT JOIN
             (  SELECT r.alg_verdieping_key,
                       COUNT ( * ) tot,
                       SUM (DECODE (d.ins_deel_state, '1', 1, 0)) bez -- NU bezet
                  FROM ins_v_aanwezigdeel d,
                       ins_srtdeel sd,
                       ins_srtgroep sg,
                       alg_v_aanwezigruimte r
                 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 = 3250                 -- WPs
                       AND d.ins_alg_ruimte_key = r.alg_ruimte_key
              GROUP BY r.alg_verdieping_key) wp
          ON x.alg_verdieping_key = wp.alg_verdieping_key
   UNION ALL
   SELECT x.alg_locatie_key,
          x.alg_locatie_code,
          x.alg_locatie_omschrijving,
          x.alg_gebouw_key,
          x.alg_gebouw_code,
          x.alg_gebouw_naam,
          x.alg_verdieping_key,
          x.vleugel,
          x.alg_verdieping_volgnr,
          x.alg_verdieping_code,
          x.alg_verdieping_omschrijving,
          COALESCE (wp.tot, 0) wp_tot,
          COALESCE (wp.bez, 0) wp_bez,
          COALESCE (wp.tot, 0) - COALESCE (wp.bez, 0) wp_onb,
          DECODE (wp.tot, 0, TO_NUMBER (NULL), wp.bez / wp.tot) wp_bezpct,
          DECODE (COALESCE (wp.tot, 0),
                  0, TO_NUMBER (NULL),
                  (wp.tot - COALESCE (wp.bez, 0)) / wp.tot)
             wp_onbpct
     FROM    (SELECT DISTINCT v.alg_verdieping_key,
                              SUBSTR (r.alg_ruimte_upper_nr, 1, 1) vleugel,
                              v.alg_verdieping_volgnr,
                              v.alg_verdieping_code,
                              v.alg_verdieping_omschrijving,
                              g.alg_gebouw_key,
                              g.alg_gebouw_code,
                              g.alg_gebouw_naam,
                              l.alg_locatie_key,
                              l.alg_locatie_code,
                              l.alg_locatie_omschrijving
                FROM alg_v_aanwezigruimte r,
                     alg_verdieping v,
                     alg_gebouw g,
                     alg_locatie l
               WHERE fac.safe_to_number (SUBSTR (r.alg_ruimte_upper_nr, 1, 1)) IS NULL
                     AND r.alg_verdieping_key = v.alg_verdieping_key
                     AND v.alg_verdieping_code NOT IN ('1', '23') -- Weglaten!
                     AND v.alg_gebouw_key = g.alg_gebouw_key
                     AND g.alg_gebouw_key IN (203)               -- Westraven!
                     AND g.alg_locatie_key = l.alg_locatie_key) x
          LEFT JOIN
             (  SELECT r.alg_verdieping_key,
                       SUBSTR (r.alg_ruimte_upper_nr, 1, 1) vleugel,
                       COUNT ( * ) tot,
                       SUM (DECODE (d.ins_deel_state, '1', 1, 0)) bez -- NU bezet
                  FROM ins_v_aanwezigdeel d,
                       ins_srtdeel sd,
                       ins_srtgroep sg,
                       alg_v_aanwezigruimte r
                 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 = 3250                 -- WPs
                       AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                       AND fac.safe_to_number (SUBSTR (r.alg_ruimte_upper_nr, 1, 1)) IS NULL
              GROUP BY r.alg_verdieping_key, SUBSTR (r.alg_ruimte_upper_nr, 1, 1)) wp
          ON x.alg_verdieping_key = wp.alg_verdieping_key
             AND x.vleugel = wp.vleugel;

/* Formatted on 4-2-2016 14:48:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_onbezet_per_ruimte
(
   hide_f_sortering,
   ruimte,
   wp_onb,
   hide_f_verdieping_key
)
AS
   SELECT TO_CHAR (alg_verdieping_key) || SUBSTR ('0000' || TO_CHAR (ABS (aantal - 1000)), -4),
          ruimte,
          aantal,
          alg_verdieping_key
     FROM (  SELECT r.alg_verdieping_key,
                       g.alg_gebouw_code
                    || '-'
                    || SUBSTR ('0' || v.alg_verdieping_code, -2)
                    || '-'
                    || r.alg_ruimte_nr
                       ruimte,
                    COUNT ( * ) aantal
               FROM ins_v_aanwezigdeel d,
                    ins_srtdeel sd,
                    ins_srtgroep sg,
                    alg_v_aanwezigruimte r,
                    alg_verdieping v,
                    alg_gebouw g,
                    alg_locatie l
              WHERE     COALESCE (d.ins_deel_state, '0') != '1'  -- NU onbezet
                    AND 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 = 3250                    -- WPs
                    AND d.ins_alg_ruimte_key = r.alg_ruimte_key
                    --AND COALESCE (SUBSTR (r.alg_ruimte_upper_nr, 1, 1), 'H') = 'H'
                    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
           GROUP BY r.alg_verdieping_key,
                       g.alg_gebouw_code
                    || '-'
                    || SUBSTR ('0' || v.alg_verdieping_code, -2)
                    || '-'
                    || r.alg_ruimte_nr);

-- Aantallen/percentages per verdieping (tbv. alle WPZ-gebouwen)!
CREATE OR REPLACE VIEW rwsn_v_rap_wpbez
(
   verdieping,
   bezpct,
   fclt_3d_gebouw_key,
   hide_f_verdieping_key
)
AS
   SELECT gebouw_code || '/' || SUBSTR ('0' || verdieping_code, -2),
          TO_CHAR (ROUND (DECODE (wp_tot, 0, 100, COALESCE (wp_bezpct, 0) * 100)))
          || '% ('
          || TO_CHAR (wp_bez)
          || '/'
          || TO_CHAR (wp_tot)
          || ')',
          gebouw_key,
          verdieping_key
     FROM rwsn_v_wpbez
    WHERE vleugel IS NULL;

-- RTMs voor Westraven H(oogbouw) en vleugels A t/m E: locatie=82/gebouw=203!
/* Formatted on 11-11-2015 12:12:12 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW RWSN_V_GRAPH_WPBEZ_WR_H
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
   SELECT --x.gebouw_code || '/' || x.verdieping_code,
          x.verdieping_code,
          x.wp_bez, x.wp_tot - x.wp_bez,
          SUBSTR ('0000' || TO_CHAR (x.verdieping_volgnr + 1000), -4)
     FROM rwsn_v_wpbez x
    WHERE x.gebouw_key = 203 AND x.vleugel = 'H';

CREATE OR REPLACE VIEW RWSN_V_GRAPH_WPBEZ_WR_A
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
   SELECT --x.gebouw_code || '/' || x.verdieping_code,
          x.verdieping_code,
          x.wp_bez, x.wp_tot - x.wp_bez,
          SUBSTR ('0000' || TO_CHAR (x.verdieping_volgnr + 1000), -4)
     FROM rwsn_v_wpbez x
    WHERE x.gebouw_key = 203 AND x.vleugel = 'A';

CREATE OR REPLACE VIEW RWSN_V_GRAPH_WPBEZ_WR_B
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
   SELECT --x.gebouw_code || '/' || x.verdieping_code,
          x.verdieping_code,
          x.wp_bez, x.wp_tot - x.wp_bez,
          SUBSTR ('0000' || TO_CHAR (x.verdieping_volgnr + 1000), -4)
     FROM rwsn_v_wpbez x
    WHERE x.gebouw_key = 203 AND x.vleugel = 'B';

CREATE OR REPLACE VIEW RWSN_V_GRAPH_WPBEZ_WR_C
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
   SELECT --x.gebouw_code || '/' || x.verdieping_code,
          x.verdieping_code,
          x.wp_bez, x.wp_tot - x.wp_bez,
          SUBSTR ('0000' || TO_CHAR (x.verdieping_volgnr + 1000), -4)
     FROM rwsn_v_wpbez x
    WHERE x.gebouw_key = 203 AND x.vleugel = 'C';

CREATE OR REPLACE VIEW RWSN_V_GRAPH_WPBEZ_WR_D
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
   SELECT --x.gebouw_code || '/' || x.verdieping_code,
          x.verdieping_code,
          x.wp_bez, x.wp_tot - x.wp_bez,
          SUBSTR ('0000' || TO_CHAR (x.verdieping_volgnr + 1000), -4)
     FROM rwsn_v_wpbez x
    WHERE x.gebouw_key = 203 AND x.vleugel = 'D';

CREATE OR REPLACE VIEW RWSN_V_GRAPH_WPBEZ_WR_E
(
   FCLT_XAS_,
   FCLT_YAS_,
   FCLT_YAS2_,
   VOLGORDE
)
AS
   SELECT --x.gebouw_code || '/' || x.verdieping_code,
          x.verdieping_code,
          x.wp_bez, x.wp_tot - x.wp_bez,
          SUBSTR ('0000' || TO_CHAR (x.verdieping_volgnr + 1000), -4)
     FROM rwsn_v_wpbez x
    WHERE x.gebouw_key = 203 AND x.vleugel = 'E';

-- RWSN#36576/Toevoeging 1
/* Formatted on 10-8-2016 18:24:42 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW RWSN_V_UDR_BEZOEKER
(
   KEY,
   HOST,
   CONTACT,
   PLAATS_CODE,
   PLAATS_OMSCHRIJVING,
   REGIO,
   DISTRICT,
   LOCATIE_CODE,
   LOCATIE_NAAM,
   GEBOUW_CODE,
   GEBOUW_NAAM,
   VERDIEPING_CODE,
   VERDIEPING_NAAM,
   RUIMTE_CODE,
   RUIMTE_NAAM,
   AFSPRAAK_RUIMTE,
   AFSPRAAK_OPMERKING,
   BEZOEKER_NAAM,
   BEZOEKER_BEDRIJF,
   BEZOEK_VAN,
   BEZOEK_TOT,
   ACTIE,
   BEZOEKER_OPMERKING,
   BEZOEKER_BINNEN,
   BEZOEKER_BUITEN,
   PASNR,
   PARKEERPLAATS,
   FCLT_3D_LOCATIE_KEY,
   FCLT_3D_AFDELING_KEY,
   BEDRIJF_HOST,
   AFDELING1_HOST,
   AFDELING2_HOST,
   AFDELING_HOST,
   BEDRIJF_CONTACT,
   AFDELING1_CONTACT,
   AFDELING2_CONTACT,
   AFDELING_CONTACT,
   ZELFSERVICE,
   TYPE_VASTGOED
)
AS
   SELECT x.bez_bezoekers_key,
          x.bez_afspraak_host,
          x.bez_afspraak_contact,
          x.alg_onroerendgoed_code,
          x.alg_onroerendgoed_omschrijving,
          x.alg_regio_omschrijving,
          x.alg_district_omschrijving,
          x.alg_locatie_code,
          x.alg_locatie_omschrijving,
          x.alg_gebouw_code,
          x.alg_gebouw_naam,
          x.alg_verdieping_code,
          x.alg_verdieping_omschrijving,
          x.alg_ruimte_nr,
          x.alg_ruimte_omschrijving,
          x.bez_afspraak_ruimte,
          x.bez_afspraak_opmerking,
          x.bezoeker_naam,
          x.bezoeker_bedrijf,
          x.bez_afspraak_datum,
          x.bez_afspraak_eind,
          x.bez_actie_omschrijving,
          x.bez_afspraak_opmerking bezoeker_opmerking,
          x.bez_bezoekers_done,
          x.bez_bezoekers_out,
          x.bez_bezoekers_pasnr,
          x.res_deel_omschrijving,
          x.alg_locatie_key,
          x.prs_afdeling_key,
          x.bedrijf_host,
          x.afdeling1_host,
          x.afdeling2_host,
          x.afdeling_host,
          x.bedrijf_contact,
          x.afdeling1_contact,
          x.afdeling2_contact,
          x.afdeling_contact,
          DECODE (x.prs_perslid_key, x.bez_afspraak_contact_key, 'Ja', 'Nee')
             zelfservice,
          tv.fac_usrdata_omschr
     FROM    (SELECT b.bez_bezoekers_key,
                     --COALESCE (p1.prs_perslid_naam_full, a.bez_afspraak_gastheer) bez_afspraak_host
                     p1.prs_perslid_naam_full bez_afspraak_host,
                     p2.prs_perslid_naam_full bez_afspraak_contact,
                     og.alg_onroerendgoed_code,
                     og.alg_onroerendgoed_omschrijving,
                     r.alg_regio_omschrijving,
                     d.alg_district_omschrijving,
                     l.alg_locatie_code,
                     l.alg_locatie_omschrijving,
                     og.alg_gebouw_code,
                     og.alg_gebouw_naam,
                     og.alg_verdieping_code,
                     og.alg_verdieping_omschrijving,
                     og.alg_ruimte_nr,
                     og.alg_ruimte_omschrijving,
                     a.bez_afspraak_ruimte,
                     a.bez_afspraak_opmerking,
                     b.bez_afspraak_naam bezoeker_naam,
                     b.bez_afspraak_bedrijf bezoeker_bedrijf,
                     a.bez_afspraak_datum,
                     a.bez_afspraak_eind,
                     ba.bez_actie_omschrijving,
                     b.bez_afspraak_opmerking bezoeker_opmerking,
                     b.bez_bezoekers_done,
                     b.bez_bezoekers_out,
                     b.bez_bezoekers_pasnr,
                     rd.res_deel_omschrijving,
                     og.alg_locatie_key,
                     pp1.prs_afdeling_key,
                     bh.prs_bedrijf_naam bedrijf_host,
                     ah1.prs_afdeling_omschrijving afdeling1_host,
                     ah2.prs_afdeling_omschrijving afdeling2_host,
                     ah.prs_afdeling_omschrijving afdeling_host,
                     bc.prs_bedrijf_naam bedrijf_contact,
                     ac1.prs_afdeling_omschrijving afdeling1_contact,
                     ac2.prs_afdeling_omschrijving afdeling2_contact,
                     ac.prs_afdeling_omschrijving afdeling_contact,
                     a.bez_afspraak_key,
                     a.prs_perslid_key,
                     a.bez_afspraak_contact_key,
                     og.alg_gebouw_key
                FROM bez_afspraak a,
                     bez_bezoekers b,
                     prs_v_perslid_fullnames_all p1,
                     prs_v_perslid_fullnames_all p2,
                     alg_v_allonrgoed_gegevens og,
                     alg_locatie l,
                     alg_district d,
                     alg_regio r,
                     bez_actie ba,
                     res_rsv_deel rrd,
                     res_deel rd,
                     prs_perslid pp1,
                     prs_v_afdeling_boom abh,
                     prs_bedrijf bh,
                     prs_afdeling ah1,
                     prs_afdeling ah2,
                     prs_afdeling ah,
                     prs_perslid pp2,
                     prs_v_afdeling_boom abc,
                     prs_bedrijf bc,
                     prs_afdeling ac1,
                     prs_afdeling ac2,
                     prs_afdeling ac
               WHERE     a.bez_afspraak_key = b.bez_afspraak_key
                     AND p1.prs_perslid_key(+) = a.bez_afspraak_host_key
                     AND p2.prs_perslid_key = a.bez_afspraak_contact_key
                     AND a.bez_actie_key = ba.bez_actie_key
                     AND l.alg_district_key = d.alg_district_key
                     AND d.alg_regio_key = r.alg_regio_key
                     AND l.alg_locatie_key = og.alg_locatie_key
                     AND a.alg_onrgoed_keys = og.alg_onroerendgoed_keys
                     AND b.bez_bezoekers_key = rrd.bez_bezoekers_key(+)
                     AND rrd.res_deel_key = rd.res_deel_key(+)
                     AND a.bez_afspraak_host_key = pp1.prs_perslid_key
                     AND pp1.prs_afdeling_key = abh.prs_afdeling_key
                     AND abh.prs_bedrijf_key = bh.prs_bedrijf_key
                     AND abh.prs_afdeling_key1 = ah1.prs_afdeling_key
                     AND abh.prs_afdeling_key2 = ah2.prs_afdeling_key(+)
                     AND abh.prs_afdeling_key = ah.prs_afdeling_key
                     AND a.bez_afspraak_contact_key = pp2.prs_perslid_key
                     AND pp2.prs_afdeling_key = abc.prs_afdeling_key
                     AND abc.prs_bedrijf_key = bc.prs_bedrijf_key
                     AND abc.prs_afdeling_key1 = ac1.prs_afdeling_key
                     AND abc.prs_afdeling_key2 = ac2.prs_afdeling_key(+)
                     AND abc.prs_afdeling_key = ac.prs_afdeling_key) x
          LEFT JOIN
             (SELECT ok.alg_onrgoed_key, ud.fac_usrdata_omschr
                FROM alg_v_aanwezigonrgoedkenmerk ok, fac_v_aanwezigusrdata ud
               WHERE ok.alg_onrgoed_niveau = 'G'
                     AND ok.alg_kenmerk_key = 1068            -- Type vastgoed
                     AND ok.alg_onrgoedkenmerk_waarde = TO_CHAR (ud.fac_usrdata_key)) tv
          ON x.alg_gebouw_key = tv.alg_onrgoed_key;

-- RWSN#36576/Toevoeging 2
CREATE OR REPLACE VIEW RWSN_V_UDR_DEEL
(
   DEEL_KEY,
   DISCIPLINE,
   SOORT,
   GROEP,
   SOORTCODE,
   OMSCHRIJVING,
   PLAATSEIGENAAR,
   PLAATSEIGENAARTYPE,
   PLAATSAANDUIDING,
   EIGENAAR,
   EIG_EINDDATUM,                                             -- RWS-specifiek
   EIG_AFDELING,                                              -- RWS-specifiek
   EIG_BUDGETH_MAIL,                                          -- RWS-specifiek
   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
)
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.eig_einddatum,
          ii.eig_afdeling,
          ii.eig_budgeth_mail,
          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
     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,
                  NULL eig_einddatum,
                  NULL eig_afdeling,
                  NULL eig_budgeth_mail,
                  i.ins_discipline_key,
                  i.ins_alg_ruimte_key, -- prs_afdeling_key van afdeling bij object
                  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
                     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,
                  p.prs_perslid_einddatum eig_einddatum,
                  a.prs_afdeling_naam || '-' || a.prs_afdeling_omschrijving eig_afdeling,
                  pb.prs_perslid_email eig_budgeth_mail,
                  i.ins_discipline_key,
                  a.prs_afdeling_key ins_alg_ruimte_key, -- prs_afdeling_key van persoon bij object
                  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
                     FROM res_deel
                    WHERE res_deel_verwijder IS NULL) rd,
                  prs_perslid p,
                  prs_v_perslid_fullnames_all pf,
                  --prs_v_afdeling_boom d
                  prs_afdeling a,
                  prs_kostenplaats kp,
                  prs_perslid pb
            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 p.prs_afdeling_key = a.prs_afdeling_key
                  AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                  AND kp.prs_perslid_key = pb.prs_perslid_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 eig_einddatum,
                  NULL eig_afdeling,
                  NULL eig_budgeth_mail,
                  NULL discipline_key,
                  NULL ins_alg_ruimte_key,                -- Stond alleen 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
                     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 eig_einddatum,
                  NULL eig_afdeling,
                  NULL eig_budgeth_mail,
                  i.ins_discipline_key,
                  NULL ins_alg_ruimte_key,                -- Stond alleen 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
                     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;


--RSWN#54745 View voor vervallen cateringproducten
CREATE OR REPLACE VIEW RWSN_V_UDR_RESDEL
(
    RES_RSV_ARTIKEL_KEY,
    RES_RESERVERING_AANMAAK,
    RES_RSV_ARTIKEL_LEVERING,
    RES_RSV_ARTIKEL_VERWIJDER,
    RES_ARTIKEL_KEY,
    RES_RSV_ARTIKEL_AANTAL,
    RES_ARTIKEL_OMSCHRIJVING,
    INS_DISCIPLINE_OMSCHRIJVING,
    RESERVERING_KEY_WITH_VOLGNR
)
AS
  SELECT
    rsv.RES_RSV_ARTIKEL_KEY,
    rsv.RES_RSV_ARTIKEL_AANMAAK,
    rsv.RES_RSV_ARTIKEL_LEVERING,
    rsv.RES_RSV_ARTIKEL_VERWIJDER,
    rsv.RES_ARTIKEL_KEY,
    rsv.RES_RSV_ARTIKEL_AANTAL,
    art.RES_ARTIKEL_OMSCHRIJVING,
    disc.INS_DISCIPLINE_OMSCHRIJVING,
    rui.RES_RESERVERING_KEY ||  '/' || rui.RES_RSV_RUIMTE_VOLGNR
  FROM RES_RSV_ARTIKEL rsv, RES_ARTIKEl art, RES_DISCIPLINE  disc, res_rsv_ruimte rui
  WHERE RES_RSV_ARTIKEL_VERWIJDER IS NOT NULL
  AND art.RES_ARTIKEL_KEY =  rsv.RES_ARTIKEL_KEY
  AND art.RES_DISCIPLINE_KEY = disc.INS_DISCIPLINE_KEY
  AND rsv.RES_RSV_RUIMTE_KEY = rui.RES_RSV_RUIMTE_KEY
  AND TRUNC(RES_RSV_ARTIKEL_VERWIJDER) > ADD_MONTHS(SYSDATE,-(12));


-- RWSN#39105: UDR view tbv. Inhuurproces-rapportages.
/* Formatted on 17-2-2017 15:32:28 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_udr_inhuurproces
(
   nummer,
   mld_key,
   start_key,                                                      -- Workflow
   wf_start,
   email,
   naam,
   vakgroep,
   melding,
   aangemaakt,
   afgemeld,
   status,
   afm_persoon,
   afgewezen,                                           -- Teruggestuurd ECO+P
   mld_sla,
   doorlooptijd,
   startdat,
   afm_voor_startdat,                           -- Afgehandeld voor startdatum
   einddat,
   onderdeel,
   jobnr,
   zaakid,
   levnaam,
   afgebroken
)
AS
   SELECT x.ins_srtdiscipline_prefix || TO_CHAR (x.mld_melding_key) nummer,
          x.mld_melding_key mld_key,
          x.mld_melding_start_key wf,
          DECODE (x.mld_melding_key, x.mld_melding_start_key, 1, 0) wf_start,
          x.prs_perslid_email email,
          x.prs_perslid_naam_full naam,
          x.ins_discipline_omschrijving vakgroep,
          x.mld_stdmelding_omschrijving melding,
          x.mld_melding_datum mldnew,
          mldafm.fac_tracking_datum mldafm,
          x.mld_statuses_omschrijving status,
          pafm.prs_perslid_naam_full afmelder,
          mldrej.fac_tracking_datum mldrej,
          DECODE (x.mld_melding_t_uitvoertijd.eenheid,
                  'D', TO_CHAR (x.mld_melding_t_uitvoertijd.tijdsduur),
                  NULL)
             mld_sla,
          DECODE (mldafm.fac_tracking_datum,
                  NULL, TO_NUMBER (NULL),
                  fac.count_work_days_incltime (x.mld_melding_datum, mldafm.fac_tracking_datum))
             doorlooptijd,
          fac.safe_to_date (sd.mld_kenmerkmelding_waarde, 'dd-mm-yyyy') startdat,
          CASE
             WHEN sd.mld_kenmerkmelding_waarde < TO_CHAR (mldafm.fac_tracking_datum, 'dd-mm-yyyy')
             THEN
                1
             ELSE
                0
          END
             afm_voor_startdat,
          fac.safe_to_date (ed.mld_kenmerkmelding_waarde, 'dd-mm-yyyy') einddat,
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = oo.mld_kenmerkmelding_waarde) onderdeel,
          jn.mld_kenmerkmelding_waarde jobnr,
          zk.mld_kenmerkmelding_waarde zaakid,
          lv.mld_kenmerkmelding_waarde levnaam,
          DECODE (afgebroken.mld_melding_start_key, NULL, 0, 1) afgebroken
     FROM (SELECT m.mld_melding_key,
                  m.mld_melding_start_key,
                  sd.ins_srtdiscipline_prefix,
                  p.prs_perslid_email,
                  pf.prs_perslid_naam_full,
                  md.ins_discipline_omschrijving,
                  sm.mld_stdmelding_omschrijving,
                  m.mld_melding_datum,
                  ms.mld_statuses_omschrijving,
                  m.mld_melding_t_uitvoertijd
             FROM mld_melding m,
                  mld_stdmelding sm,
                  mld_discipline md,
                  ins_srtdiscipline sd,
                  prs_perslid p,
                  prs_v_perslid_fullnames_all pf,
                  mld_statuses ms
            WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_ins_discipline_key = md.ins_discipline_key
                  AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                  AND md.ins_srtdiscipline_key = 242  -- Tijdelijke Capaciteit
                  AND m.prs_perslid_key = p.prs_perslid_key
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND m.mld_melding_status = ms.mld_statuses_key) x
          LEFT JOIN fac_tracking mldafm
             ON x.mld_melding_key = mldafm.fac_tracking_refkey
                AND mldafm.fac_srtnotificatie_key = 22               -- MLDAFM
          LEFT JOIN prs_v_perslid_fullnames pafm
             ON mldafm.prs_perslid_key = pafm.prs_perslid_key
          LEFT JOIN fac_tracking mldrej
             ON x.mld_melding_key = mldrej.fac_tracking_refkey
                AND mldrej.fac_srtnotificatie_key = 27               -- MLDREJ
          LEFT JOIN mld_v_aanwezigkenmerkmelding sd
             ON x.mld_melding_key = sd.mld_melding_key
                AND EXISTS
                      (SELECT 1
                         FROM mld_kenmerk
                        WHERE mld_srtkenmerk_key = 3571          -- Startdatum
                              AND mld_kenmerk_key = sd.mld_kenmerk_key)
          LEFT JOIN mld_v_aanwezigkenmerkmelding ed
             ON x.mld_melding_key = ed.mld_melding_key
                AND EXISTS
                      (SELECT 1
                         FROM mld_kenmerk
                        WHERE mld_srtkenmerk_key = 364            -- Einddatum
                              AND mld_kenmerk_key = ed.mld_kenmerk_key)
          LEFT JOIN mld_v_aanwezigkenmerkmelding oo
             ON x.mld_melding_key = oo.mld_melding_key
                AND EXISTS
                      (SELECT 1
                         FROM mld_kenmerk
                        WHERE mld_srtkenmerk_key = 6052 -- Organisatieonderdeel (incl. PPO verdeling)
                              AND mld_kenmerk_key = oo.mld_kenmerk_key)
          LEFT JOIN mld_v_aanwezigkenmerkmelding jn
             ON x.mld_melding_key = jn.mld_melding_key
                AND EXISTS
                      (SELECT 1
                         FROM mld_kenmerk
                        WHERE mld_srtkenmerk_key = 2312             -- Job nr.
                              AND mld_kenmerk_key = jn.mld_kenmerk_key)
          LEFT JOIN mld_v_aanwezigkenmerkmelding zk
             ON x.mld_melding_key = zk.mld_melding_key
                AND EXISTS
                      (SELECT 1
                         FROM mld_kenmerk
                        WHERE mld_srtkenmerk_key = 6131             -- Zaak-ID
                              AND mld_kenmerk_key = zk.mld_kenmerk_key)
          LEFT JOIN mld_v_aanwezigkenmerkmelding lv
             ON x.mld_melding_key = lv.mld_melding_key
                AND EXISTS
                      (SELECT 1
                         FROM mld_kenmerk
                        WHERE mld_srtkenmerk_key = 1663    -- Leveranciersnaam
                              AND mld_kenmerk_key = lv.mld_kenmerk_key)
          LEFT JOIN mld_melding afgebroken
             ON x.mld_melding_start_key = afgebroken.mld_melding_start_key
                AND afgebroken.mld_melding_status = 1;

-- RWSN#40155: Overzicht op/doorvoering instroom nieuwe medewerkers.
/* Formatted on 29-9-2017 14:42:18 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW rwsn_v_rap_doorvoer_instroom
(
   meldingsnummer,
   naam,
   dienst,
   onderdeel,
   afdeling,
   emailadres,
   voorletters,
   geboortenaam,
   functie,
   begindatum_aanstelling,
   einddatum_aanstelling,
   datum_afgemeld,
   tijdig
)
AS
   SELECT TO_CHAR (x.mld_melding_key),
          x.prs_perslid_naam_full,
          rwsn.bepaal_dienst (x.prs_perslid_key),
          DECODE (
             x.ins_srtdiscipline_key,
             3, SUBSTR (x.ins_discipline_omschrijving, 1, INSTR (x.ins_discipline_omschrijving, '-') - 1), -- KCC
             'FB'),
          x.prs_afdeling_naam || '-' || x.prs_afdeling_omschrijving,
          x.prs_perslid_email,
          vl.mld_kenmerkmelding_waarde,
          gn.mld_kenmerkmelding_waarde,
          --em.mld_kenmerkmelding_waarde,
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = fun.mld_kenmerkmelding_waarde),
          --TO_DATE ('120916', 'ddmmyy'),
          bda.mld_kenmerkmelding_waarde,
          eda.mld_kenmerkmelding_waarde,
          mldafm.fac_tracking_datum,
          --fac.datumtijdplusuitvoertijd (mldafm.fac_tracking_datum, 5, 'D'),
          --DECODE (SIGN(TO_DATE ('120916', 'ddmmyy') - fac.datumtijdplusuitvoertijd (mldafm.fac_tracking_datum, 5, 'D')),
          --        -1, 'Nee',
          --        'Ja'),
          DECODE (SIGN(fac.safe_to_date (bda.mld_kenmerkmelding_waarde, 'dd-mm-yyyy') - fac.datumtijdplusuitvoertijd (mldafm.fac_tracking_datum, 5, 'D')),
                  -1, 'Nee',
                  'Ja')
     FROM (SELECT m.mld_melding_key,
                  p.prs_perslid_key,
                  p.prs_perslid_email,
                  pf.prs_perslid_naam_full,
                  a.prs_afdeling_naam,
                  a.prs_afdeling_omschrijving,
                  md.ins_srtdiscipline_key,
                  md.ins_discipline_omschrijving
             FROM mld_melding m,
                  mld_stdmelding sm,
                  mld_discipline md,
                  prs_perslid p,
                  prs_v_perslid_fullnames_all pf,
                  prs_afdeling a
            WHERE m.mld_stdmelding_key = 9801             -- Aanvraag WID-scan
                  AND m.mld_stdmelding_key = sm.mld_stdmelding_key
                  AND sm.mld_ins_discipline_key = md.ins_discipline_key
                  AND m.prs_perslid_key = p.prs_perslid_key
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND p.prs_afdeling_key = a.prs_afdeling_key) x
          LEFT JOIN mld_v_aanwezigkenmerkmelding vl
             ON x.mld_melding_key = vl.mld_melding_key
                AND vl.mld_kenmerk_key = 25668                  -- Voorletters
          LEFT JOIN mld_v_aanwezigkenmerkmelding gn
             ON x.mld_melding_key = gn.mld_melding_key
                AND gn.mld_kenmerk_key = 25672    -- Geboortenaam (achternaam)
          --LEFT JOIN mld_v_aanwezigkenmerkmelding em
          --   ON x.mld_melding_key = em.mld_melding_key
          --      AND em.mld_kenmerk_key = 16148         -- E-mail adres (privé)
          LEFT JOIN mld_v_aanwezigkenmerkmelding fun
             ON x.mld_melding_key = fun.mld_melding_key
                AND fun.mld_kenmerk_key = 26208                     -- Functie
          LEFT JOIN mld_v_aanwezigkenmerkmelding bda
             ON x.mld_melding_key = bda.mld_melding_key
                AND bda.mld_kenmerk_key = 26636      -- Begindatum aanstelling
          LEFT JOIN mld_v_aanwezigkenmerkmelding eda
             ON x.mld_melding_key = eda.mld_melding_key
                AND eda.mld_kenmerk_key = 26638       -- Einddatum aanstelling
          LEFT JOIN fac_tracking mldafm
             ON x.mld_melding_key = mldafm.fac_tracking_refkey
                AND mldafm.fac_srtnotificatie_key = 22               -- MLDAFM
;

-- RWSN#39764: Kruisjeslijst producten per dienstniveau.
CREATE OR REPLACE VIEW rwsn_v_rap_prod_per_dienstniv
(
   en15221_volgnr,
   en15221_code,
   en15221_omschrijving,
   dienstniveau,
   aantal
)
AS
   SELECT x.fac_usrdata_volgnr,
          x.fac_usrdata_code,
          DECODE (INSTR (x.fac_usrdata_omschr, x.fac_usrdata_code),
                  1, TRIM (SUBSTR (x.fac_usrdata_omschr, INSTR (x.fac_usrdata_omschr, x.fac_usrdata_code) + LENGTH (x.fac_usrdata_code))),
                  TRIM (x.fac_usrdata_omschr)),
          dn.mld_dienstniveau_omschr,
          dn.aantal
     FROM (SELECT fac_usrdata_key, fac_usrdata_code, fac_usrdata_omschr, fac_usrdata_volgnr
             FROM fac_v_aanwezigusrdata
            WHERE fac_usrtab_key = 3783) x                 -- CNT-EN15221-Prod
          LEFT JOIN
          (  SELECT kc.cnt_kenmerkcontract_waarde, dn.mld_dienstniveau_omschr, COUNT ( * ) aantal
               FROM cnt_v_aanwezigcontract c,
                    cnt_kenmerkcontract kc,
                    cnt_kenmerk k,
                    (SELECT cp.cnt_contract_key, l.mld_dienstniveau_key
                       FROM cnt_contract_plaats cp, alg_v_aanweziglocatie l
                      WHERE cp.cnt_alg_plaats_code = 'L'
                            AND cp.cnt_alg_plaats_key = l.alg_locatie_key
                     UNION ALL
                     SELECT cp.cnt_contract_key, g.mld_dienstniveau_key
                       FROM cnt_contract_plaats cp, alg_v_aanweziggebouw g
                      WHERE cp.cnt_alg_plaats_code = 'G'
                           AND cp.cnt_alg_plaats_key = g.alg_gebouw_key) cdn,
                    mld_dienstniveau dn
              WHERE c.cnt_contract_key = kc.cnt_contract_key
                    AND kc.cnt_kenmerkcontract_verwijder IS NULL
                    AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
                    AND k.cnt_srtkenmerk_key = 101          -- EN15221 Product
                    AND c.cnt_contract_key = cdn.cnt_contract_key
                    AND cdn.mld_dienstniveau_key = dn.mld_dienstniveau_key
           GROUP BY kc.cnt_kenmerkcontract_waarde, dn.mld_dienstniveau_omschr) dn
          ON TO_CHAR (x.fac_usrdata_key) = dn.cnt_kenmerkcontract_waarde;

-- RWSN#52081: Kruisjeslijst gebouwen per dienst.
CREATE OR REPLACE VIEW rwsn_v_rap_gebouw_per_dienst
(
   --uc,
   bedrijf_naam,
   locatie_code,
   gebouw_code,
   gebouw_naam,
   dienst
)
AS       -- Bedrijfdiensten van alléén Uitvoerenden op alle locaties/gebouwen!
   SELECT DISTINCT --DECODE (b.prs_bedrijf_uitvoerende, 1, 'U', 'C'),
                   b.prs_bedrijf_naam,
                   l.alg_locatie_code,
                   g.alg_gebouw_code,
                   g.alg_gebouw_naam,
                   d.prs_dienst_omschrijving
     FROM prs_bedrijfdienstlocatie bdl,
          prs_v_aanwezigbedrijf b,
          prs_dienst d,
          alg_v_aanweziggebouw g,
          alg_locatie l
    WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key
          --AND (b.prs_bedrijf_uitvoerende = 1 OR b.prs_bedrijf_contract = 1)
          AND b.prs_bedrijf_uitvoerende = 1
          AND bdl.prs_dienst_key = d.prs_dienst_key
          AND bdl.alg_locatie_key IS NULL
          AND bdl.alg_gebouw_key IS NULL
          AND g.alg_locatie_key = l.alg_locatie_key
   UNION ALL   -- Bedrijfdiensten op bepaalde locaties/gebouwen (via locatie)!
   SELECT DISTINCT --DECODE (b.prs_bedrijf_uitvoerende, 1, 'U', 'C'),
                   b.prs_bedrijf_naam,
                   l.alg_locatie_code,
                   g.alg_gebouw_code,
                   g.alg_gebouw_naam,
                   d.prs_dienst_omschrijving
     FROM prs_bedrijfdienstlocatie bdl,
          prs_v_aanwezigbedrijf b,
          prs_dienst d,
          alg_v_aanweziggebouw g,
          alg_locatie l
    WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key
          --AND (b.prs_bedrijf_uitvoerende = 1 OR b.prs_bedrijf_contract = 1)
          AND b.prs_bedrijf_uitvoerende = 1
          AND bdl.prs_dienst_key = d.prs_dienst_key
          AND bdl.alg_locatie_key = g.alg_locatie_key
          AND g.alg_locatie_key = l.alg_locatie_key
   UNION ALL    -- Bedrijfdiensten op bepaalde locaties/gebouwen (via gebouw)!
   SELECT DISTINCT --DECODE (b.prs_bedrijf_uitvoerende, 1, 'U', 'C'),
                   b.prs_bedrijf_naam,
                   l.alg_locatie_code,
                   g.alg_gebouw_code,
                   g.alg_gebouw_naam,
                   d.prs_dienst_omschrijving
     FROM prs_bedrijfdienstlocatie bdl,
          prs_v_aanwezigbedrijf b,
          prs_dienst d,
          alg_v_aanweziggebouw g,
          alg_locatie l
    WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key
          --AND (b.prs_bedrijf_uitvoerende = 1 OR b.prs_bedrijf_contract = 1)
          AND b.prs_bedrijf_uitvoerende = 1
          AND bdl.prs_dienst_key = d.prs_dienst_key
          AND bdl.alg_gebouw_key = g.alg_gebouw_key
          AND g.alg_locatie_key = l.alg_locatie_key;

-- RWSN#51878: Onboarding-noti (CUST11 t/m CUST20 voorgedefinieerd, maar mogen
--             er meer worden) naar nieuwe medewerkers zoals geconfigureerd in
--             Eigen tabel met key=5.
CREATE OR REPLACE VIEW rwsn_v_noti_onboarding
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xsender,
   xemail,
   xmobile,
   attachments
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (sn.fac_srtnotificatie_oms, '##AANT##', TO_CHAR (FLOOR (ud.fac_usrdata_prijs))),
          p.prs_perslid_key,
          NULL,
          ud.fac_usrdata_omschr,
          p.prs_perslid_email,
          NULL,
          NULL
     FROM fac_v_aanwezigusrdata ud, fac_srtnotificatie sn, prs_v_aanwezigperslid p, prs_srtperslid sp, prs_v_afdeling_boom ab
    WHERE ud.fac_usrtab_key = 5                        -- OnboardingNoti-tabel
          AND COALESCE (ud.fac_usrdata_vervaldatum, SYSDATE) > TRUNC (SYSDATE) -- Enabled
          AND ud.fac_usrdata_prijs >= 0    -- Notificeren als prijs=#dagen > 0
          AND ud.fac_usrdata_upper = sn.fac_srtnotificatie_code
          AND INSTR (UPPER (p.prs_perslid_email), '@RWS.NL') > 0     -- RWS-er
          AND EXISTS                     -- Via import binnengelopen (met RIN)
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_link_key = p.prs_perslid_key
                        AND prs_kenmerk_key = 1160)                     -- RIN
          AND p.prs_srtperslid_key = sp.prs_srtperslid_key
          AND TRIM (sp.prs_srtperslid_upper) NOT IN ('EXTERNE MEDEWERKER', 'STAGIAIR', 'SERVICE PERSONEEL')
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_bedrijf_key <> 3                          -- Geen KNMI-er
          AND TRUNC (p.prs_perslid_ingangsdatum + ud.fac_usrdata_prijs) = TRUNC (SYSDATE);

-- RWSN#52295: Gebouwgegevens (tbv. UDR).
CREATE OR REPLACE VIEW rwsn_v_rap_gebouwgeg
AS
   WITH ok AS (SELECT k.vnr, k.alg_kenmerk_key, k.alg_kenmerk_omschrijving, ok.alg_onrgoed_key, ok.waarde
                 FROM    (SELECT ROWNUM vnr, alg_kenmerk_key, alg_kenmerk_omschrijving
                            FROM (  SELECT k.alg_kenmerk_key, k.alg_kenmerk_omschrijving, k.alg_kenmerk_aanmaak
                                      FROM alg_kenmerk k
                                     WHERE k.alg_kenmerk_verwijder IS NULL
                                           AND k.alg_kenmerk_niveau = 'G'
                                           AND k.alg_kenmerk_kenmerktype IN ('C',  'D', 'N', 'R', 'S', 'X', 'B', 'V')
                                  ORDER BY 3)) k
                      LEFT JOIN
                         (SELECT ok.alg_kenmerk_key, ok.alg_onrgoed_key,
                                 DECODE (k.alg_kenmerk_kenmerktype,
                                         'R', fac.getdomeinwaarde (k.fac_kenmerkdomein_key, ok.alg_onrgoedkenmerk_waarde),
                                         'S', fac.getdomeinwaarde (k.fac_kenmerkdomein_key, ok.alg_onrgoedkenmerk_waarde),
                                         ok.alg_onrgoedkenmerk_waarde)
                                    waarde
                            FROM alg_v_aanwezigonrgoedkenmerk ok, alg_kenmerk k
                           WHERE ok.alg_kenmerk_key = k.alg_kenmerk_key
                                 AND k.alg_kenmerk_niveau = 'G') ok
                      ON k.alg_kenmerk_key = ok.alg_kenmerk_key)
   SELECT 0 sortering,
          'regio' regio,
          'district' district,
          'locatiecode' locatiecode,
          'locatieoms' locatieoms,
          'gebouwcode' gebouwcode,
          'gebouwnaam' gebouwnaam,
          'gebouwfunctie' gebouwfunctie,
          'gebouwopmerking' gebouwopmerking,
          'dienstniveau' dienstniveau,
          'verantw1' verantw1,
          'verantw2' verantw2,
          'email' email,
          'bruto_vloeropp' bruto_vloeropp,
          'omtrek' omtrek,
          'inhoud' inhoud,
          'gebouw_x' gebouw_x,
          'gebouw_y' gebouw_y,
          'vervaldatum' vervaldatum,
          'bezoekbaar' bezoekbaar,
          'beginuur' beginuur,
          'einduur' einduur,
          'werkdagen' werkdagen,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 1) kenmerk1,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 2) kenmerk2,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 3) kenmerk3,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 4) kenmerk4,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 5) kenmerk5,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 6) kenmerk6,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 7) kenmerk7,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 8) kenmerk8,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 9) kenmerk9,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 10) kenmerk10,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 11) kenmerk11,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 12) kenmerk12,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 13) kenmerk13,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 14) kenmerk14,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 15) kenmerk15,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 16) kenmerk16,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 17) kenmerk17,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 18) kenmerk18,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 19) kenmerk19,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 20) kenmerk20,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 21) kenmerk21,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 22) kenmerk22,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 23) kenmerk23,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 24) kenmerk24,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 25) kenmerk25,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 26) kenmerk26,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 27) kenmerk27,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 28) kenmerk28,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 29) kenmerk29,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 30) kenmerk30,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 31) kenmerk31,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 32) kenmerk32,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 33) kenmerk33,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 34) kenmerk34,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 35) kenmerk35,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 36) kenmerk36,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 37) kenmerk37,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 38) kenmerk38,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 39) kenmerk39,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 40) kenmerk40,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 41) kenmerk41,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 42) kenmerk42,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 43) kenmerk43,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 44) kenmerk44,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 45) kenmerk45,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 46) kenmerk46,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 47) kenmerk47,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 48) kenmerk48,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 49) kenmerk49,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 50) kenmerk50
     FROM DUAL
   UNION ALL
   SELECT 1 sortering,
          x.alg_regio_omschrijving regio,
          x.alg_district_omschrijving district,
          x.alg_locatie_code locatiecode,
          x.alg_locatie_omschrijving locatieoms,
          x.alg_gebouw_code gebouwcode,
          x.alg_gebouw_naam gebouwnaam,
          x.alg_srtgebouw_omschrijving gebouwfunctie,
          x.alg_gebouw_opmerking gebouwopmerking,
          x.mld_dienstniveau_omschr dienstniveau,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames WHERE prs_perslid_key = x.prs_perslid_key_verantw) verantw1,
          (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames WHERE prs_perslid_key = x.prs_perslid_key_verantw2) verantw2,
          x.alg_gebouw_email email,
          TO_CHAR (x.alg_gebouw_bruto_vloeropp) bruto_vloeropp,
          TO_CHAR (x.alg_gebouw_omtrek) omtrek,
          TO_CHAR (x.alg_gebouw_inhoud) inhoud,
          TO_CHAR (x.alg_gebouw_x) gebouw_x,
          TO_CHAR (x.alg_gebouw_y) gebouw_y,
          TO_CHAR (x.alg_gebouw_vervaldatum, 'dd-mm-yyyy') vervaldatum,
          TO_CHAR (x.alg_gebouw_bez) bezoekbaar,
          TO_CHAR (x.alg_gebouw_beginuur) beginuur,
          TO_CHAR (x.alg_gebouw_einduur) einduur,
          TO_CHAR (x.alg_gebouw_werkdagen) werkdagen,
          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,
          k31.waarde kenmerk31,
          k32.waarde kenmerk32,
          k33.waarde kenmerk33,
          k34.waarde kenmerk34,
          k35.waarde kenmerk35,
          k36.waarde kenmerk36,
          k37.waarde kenmerk37,
          k38.waarde kenmerk38,
          k39.waarde kenmerk39,
          k40.waarde kenmerk40,
          k31.waarde kenmerk41,
          k32.waarde kenmerk42,
          k33.waarde kenmerk43,
          k34.waarde kenmerk44,
          k35.waarde kenmerk45,
          k36.waarde kenmerk46,
          k37.waarde kenmerk47,
          k38.waarde kenmerk48,
          k39.waarde kenmerk49,
          k40.waarde kenmerk50
     FROM (SELECT g.alg_gebouw_key,
                  g.alg_gebouw_naam,
                  sg.alg_srtgebouw_omschrijving,
                  g.alg_gebouw_code,
                  g.alg_gebouw_opmerking,
                  kp.prs_kostenplaats_omschrijving,
                  g.alg_gebouw_ordernr,                          -- Opdrachtnr
                  dn.mld_dienstniveau_omschr,                  -- Dienstniveau
                  g.prs_perslid_key_verantw,              -- Verantwoordelijke
                  g.prs_perslid_key_verantw2,           -- Verantwoordelijke 2
                  g.alg_gebouw_email,                                -- E-mail
                  g.alg_gebouw_bruto_vloeropp,                 -- Bebouwd opp.
                  g.alg_gebouw_omtrek,                               -- Omtrek
                  g.alg_gebouw_inhoud,                               -- Inhoud
                  g.alg_gebouw_x,                              -- X-coördinaat
                  g.alg_gebouw_y,                              -- Y-coördinaat
                  g.alg_gebouw_vervaldatum,                     -- Vervaldatum
                  g.alg_gebouw_bez,                              -- Bezoekbaar
                  g.alg_gebouw_beginuur,                         -- Open vanaf
                  g.alg_gebouw_einduur,                            -- Open tot
                  g.alg_gebouw_werkdagen,               -- Alleen op werkdagen
                  l.alg_locatie_key,
                  l.alg_locatie_code,
                  l.alg_locatie_omschrijving,
                  l.alg_locatie_adres,
                  l.alg_locatie_postcode,
                  l.alg_locatie_plaats,
                  l.alg_locatie_verantw,
                  l.alg_locatie_verantw_tel,
                  d.alg_district_omschrijving,
                  r.alg_regio_omschrijving
             FROM alg_regio r,
                  alg_district d,
                  alg_locatie l,
                  alg_v_aanweziggebouw g,
                  alg_srtgebouw sg,
                  prs_v_aanwezigkostenplaats kp,
                  mld_dienstniveau dn
            WHERE r.alg_regio_key = d.alg_regio_key
                  AND d.alg_district_key = l.alg_district_key
                  AND l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_upper NOT LIKE 'ZZ%'
                  AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key
                  AND g.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
                  AND g.mld_dienstniveau_key = dn.mld_dienstniveau_key(+)) x
          LEFT JOIN ok k1 ON x.alg_gebouw_key = k1.alg_onrgoed_key AND k1.vnr = 1
          LEFT JOIN ok k2 ON x.alg_gebouw_key = k2.alg_onrgoed_key AND k2.vnr = 2
          LEFT JOIN ok k3 ON x.alg_gebouw_key = k3.alg_onrgoed_key AND k3.vnr = 3
          LEFT JOIN ok k4 ON x.alg_gebouw_key = k4.alg_onrgoed_key AND k4.vnr = 4
          LEFT JOIN ok k5 ON x.alg_gebouw_key = k5.alg_onrgoed_key AND k5.vnr = 5
          LEFT JOIN ok k6 ON x.alg_gebouw_key = k6.alg_onrgoed_key AND k6.vnr = 6
          LEFT JOIN ok k7 ON x.alg_gebouw_key = k7.alg_onrgoed_key AND k7.vnr = 7
          LEFT JOIN ok k8 ON x.alg_gebouw_key = k8.alg_onrgoed_key AND k8.vnr = 8
          LEFT JOIN ok k9 ON x.alg_gebouw_key = k9.alg_onrgoed_key AND k9.vnr = 9
          LEFT JOIN ok k10 ON x.alg_gebouw_key = k10.alg_onrgoed_key AND k10.vnr = 10
          LEFT JOIN ok k11 ON x.alg_gebouw_key = k11.alg_onrgoed_key AND k11.vnr = 11
          LEFT JOIN ok k12 ON x.alg_gebouw_key = k12.alg_onrgoed_key AND k12.vnr = 12
          LEFT JOIN ok k13 ON x.alg_gebouw_key = k13.alg_onrgoed_key AND k13.vnr = 13
          LEFT JOIN ok k14 ON x.alg_gebouw_key = k14.alg_onrgoed_key AND k14.vnr = 14
          LEFT JOIN ok k15 ON x.alg_gebouw_key = k15.alg_onrgoed_key AND k15.vnr = 15
          LEFT JOIN ok k16 ON x.alg_gebouw_key = k16.alg_onrgoed_key AND k16.vnr = 16
          LEFT JOIN ok k17 ON x.alg_gebouw_key = k17.alg_onrgoed_key AND k17.vnr = 17
          LEFT JOIN ok k18 ON x.alg_gebouw_key = k18.alg_onrgoed_key AND k18.vnr = 18
          LEFT JOIN ok k19 ON x.alg_gebouw_key = k19.alg_onrgoed_key AND k19.vnr = 19
          LEFT JOIN ok k20 ON x.alg_gebouw_key = k20.alg_onrgoed_key AND k20.vnr = 20
          LEFT JOIN ok k21 ON x.alg_gebouw_key = k21.alg_onrgoed_key AND k21.vnr = 21
          LEFT JOIN ok k22 ON x.alg_gebouw_key = k22.alg_onrgoed_key AND k22.vnr = 22
          LEFT JOIN ok k23 ON x.alg_gebouw_key = k23.alg_onrgoed_key AND k23.vnr = 23
          LEFT JOIN ok k24 ON x.alg_gebouw_key = k24.alg_onrgoed_key AND k24.vnr = 24
          LEFT JOIN ok k25 ON x.alg_gebouw_key = k25.alg_onrgoed_key AND k25.vnr = 25
          LEFT JOIN ok k26 ON x.alg_gebouw_key = k26.alg_onrgoed_key AND k26.vnr = 26
          LEFT JOIN ok k27 ON x.alg_gebouw_key = k27.alg_onrgoed_key AND k27.vnr = 27
          LEFT JOIN ok k28 ON x.alg_gebouw_key = k28.alg_onrgoed_key AND k28.vnr = 28
          LEFT JOIN ok k29 ON x.alg_gebouw_key = k29.alg_onrgoed_key AND k29.vnr = 29
          LEFT JOIN ok k30 ON x.alg_gebouw_key = k30.alg_onrgoed_key AND k30.vnr = 30
          LEFT JOIN ok k31 ON x.alg_gebouw_key = k31.alg_onrgoed_key AND k31.vnr = 31
          LEFT JOIN ok k32 ON x.alg_gebouw_key = k32.alg_onrgoed_key AND k32.vnr = 32
          LEFT JOIN ok k33 ON x.alg_gebouw_key = k33.alg_onrgoed_key AND k33.vnr = 33
          LEFT JOIN ok k34 ON x.alg_gebouw_key = k34.alg_onrgoed_key AND k34.vnr = 34
          LEFT JOIN ok k35 ON x.alg_gebouw_key = k35.alg_onrgoed_key AND k35.vnr = 35
          LEFT JOIN ok k36 ON x.alg_gebouw_key = k36.alg_onrgoed_key AND k36.vnr = 36
          LEFT JOIN ok k37 ON x.alg_gebouw_key = k37.alg_onrgoed_key AND k37.vnr = 37
          LEFT JOIN ok k38 ON x.alg_gebouw_key = k38.alg_onrgoed_key AND k38.vnr = 38
          LEFT JOIN ok k39 ON x.alg_gebouw_key = k39.alg_onrgoed_key AND k39.vnr = 39
          LEFT JOIN ok k40 ON x.alg_gebouw_key = k40.alg_onrgoed_key AND k40.vnr = 40
          LEFT JOIN ok k41 ON x.alg_gebouw_key = k41.alg_onrgoed_key AND k41.vnr = 41
          LEFT JOIN ok k42 ON x.alg_gebouw_key = k42.alg_onrgoed_key AND k42.vnr = 42
          LEFT JOIN ok k43 ON x.alg_gebouw_key = k43.alg_onrgoed_key AND k43.vnr = 43
          LEFT JOIN ok k44 ON x.alg_gebouw_key = k44.alg_onrgoed_key AND k44.vnr = 44
          LEFT JOIN ok k45 ON x.alg_gebouw_key = k45.alg_onrgoed_key AND k45.vnr = 45
          LEFT JOIN ok k46 ON x.alg_gebouw_key = k46.alg_onrgoed_key AND k46.vnr = 46
          LEFT JOIN ok k47 ON x.alg_gebouw_key = k47.alg_onrgoed_key AND k47.vnr = 47
          LEFT JOIN ok k48 ON x.alg_gebouw_key = k48.alg_onrgoed_key AND k48.vnr = 48
          LEFT JOIN ok k49 ON x.alg_gebouw_key = k49.alg_onrgoed_key AND k49.vnr = 49
          LEFT JOIN ok k50 ON x.alg_gebouw_key = k50.alg_onrgoed_key AND k50.vnr = 50;

-- RWSN#53040: Evaluatieformulier coachee (tbv. UDR).
CREATE OR REPLACE VIEW rwsn_v_rap_evaluatie_coachee
(
   melding_key,
   melding_datum,
   melding_afgemeld,
   soort_coaching,
   naam_medewerker,
   leeftijd,
   functie,
   afdeling,
   dienstonderdeel,
   toegewezen_coach,
   toegewezen_coach_key,
   toelichting_doelen,
   toelichting_voorbeelden,
   evaluatie,
   toelichting_bevindingen,
   luistervaardigheid,
   veranderingsgerichtheid,
   juiste_vragen,
   doordringen,
   produktief,
   vertrouwensrelatie,
   gehele_traject,
   opmerking,
   email_coach
)
AS
   SELECT x.mld_melding_key,
          x.mld_melding_datum,
          fac.gettrackingdate ('MLDAFM', x.mld_melding_key),
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = km1.mld_kenmerkmelding_waarde), -- soort_coaching
          (SELECT prs_perslid_naam_full FROM rwsn_v_dienstpersonen WHERE TO_CHAR (prs_perslid_key) = km2.mld_kenmerkmelding_waarde), -- naam_medewerker
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = km3.mld_kenmerkmelding_waarde), -- leeftijd
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = km4.mld_kenmerkmelding_waarde), -- functie FGR
          TRIM (km5.mld_kenmerkmelding_waarde),                    -- afdeling
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = km6.mld_kenmerkmelding_waarde), -- dienstonderdeel
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = km7.mld_kenmerkmelding_waarde), -- toegewezen_coach
          fac.safe_to_number (km7.mld_kenmerkmelding_waarde), -- toegewezen_coach_key
          TRIM (km8.mld_kenmerkmelding_waarde),          -- toelichting_doelen
          TRIM (km9.mld_kenmerkmelding_waarde),     -- toelichting_voorbeelden
          (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE TO_CHAR (fac_usrdata_key) = km10.mld_kenmerkmelding_waarde), -- evaluatie
          TRIM (km11.mld_kenmerkmelding_waarde),    -- toelichting_bevindingen
          fac.safe_to_number (km12.mld_kenmerkmelding_waarde), -- luistervaardigheid
          fac.safe_to_number (km13.mld_kenmerkmelding_waarde), -- veranderingsgerichtheid
          fac.safe_to_number (km14.mld_kenmerkmelding_waarde), -- juiste_vragen
          fac.safe_to_number (km15.mld_kenmerkmelding_waarde),  -- doordringen
          fac.safe_to_number (km16.mld_kenmerkmelding_waarde),   -- produktief
          fac.safe_to_number (km17.mld_kenmerkmelding_waarde), -- vertrouwensrelatie
          fac.safe_to_number (km18.mld_kenmerkmelding_waarde), -- gehele_traject
          TRIM (km19.mld_kenmerkmelding_waarde),                  -- opmerking
          TRIM (km20.mld_kenmerkmelding_waarde)                 -- email_coach
     FROM (SELECT mld_melding_key, mld_melding_datum FROM mld_melding WHERE mld_stdmelding_key = 10661) x -- Evaluatieformulier RWS Coachee
          LEFT JOIN mld_v_aanwezigkenmerkmelding km1
             ON x.mld_melding_key = km1.mld_melding_key AND km1.mld_kenmerk_key = 29330
          LEFT JOIN mld_v_aanwezigkenmerkmelding km2
             ON x.mld_melding_key = km2.mld_melding_key AND km2.mld_kenmerk_key = 29332
          LEFT JOIN mld_v_aanwezigkenmerkmelding km3
             ON x.mld_melding_key = km3.mld_melding_key AND km3.mld_kenmerk_key = 29334
          LEFT JOIN mld_v_aanwezigkenmerkmelding km4
             ON x.mld_melding_key = km4.mld_melding_key AND km4.mld_kenmerk_key = 29549
          LEFT JOIN mld_v_aanwezigkenmerkmelding km5
             ON x.mld_melding_key = km5.mld_melding_key AND km5.mld_kenmerk_key = 29337
          LEFT JOIN mld_v_aanwezigkenmerkmelding km6
             ON x.mld_melding_key = km6.mld_melding_key AND km6.mld_kenmerk_key = 29339
          LEFT JOIN mld_v_aanwezigkenmerkmelding km7
             ON x.mld_melding_key = km7.mld_melding_key AND km7.mld_kenmerk_key = 29348
          LEFT JOIN mld_v_aanwezigkenmerkmelding km8
             ON x.mld_melding_key = km8.mld_melding_key AND km8.mld_kenmerk_key = 29350
          LEFT JOIN mld_v_aanwezigkenmerkmelding km9
             ON x.mld_melding_key = km9.mld_melding_key AND km9.mld_kenmerk_key = 29352
          LEFT JOIN mld_v_aanwezigkenmerkmelding km10
             ON x.mld_melding_key = km10.mld_melding_key AND km10.mld_kenmerk_key = 29354
          LEFT JOIN mld_v_aanwezigkenmerkmelding km11
             ON x.mld_melding_key = km11.mld_melding_key AND km11.mld_kenmerk_key = 29356
          LEFT JOIN mld_v_aanwezigkenmerkmelding km12
             ON x.mld_melding_key = km12.mld_melding_key AND km12.mld_kenmerk_key = 29358
          LEFT JOIN mld_v_aanwezigkenmerkmelding km13
             ON x.mld_melding_key = km13.mld_melding_key AND km13.mld_kenmerk_key = 29360
          LEFT JOIN mld_v_aanwezigkenmerkmelding km14
             ON x.mld_melding_key = km14.mld_melding_key AND km14.mld_kenmerk_key = 29362
          LEFT JOIN mld_v_aanwezigkenmerkmelding km15
             ON x.mld_melding_key = km15.mld_melding_key AND km15.mld_kenmerk_key = 29364
          LEFT JOIN mld_v_aanwezigkenmerkmelding km16
             ON x.mld_melding_key = km16.mld_melding_key AND km16.mld_kenmerk_key = 29366
          LEFT JOIN mld_v_aanwezigkenmerkmelding km17
             ON x.mld_melding_key = km17.mld_melding_key AND km17.mld_kenmerk_key = 29368
          LEFT JOIN mld_v_aanwezigkenmerkmelding km18
             ON x.mld_melding_key = km18.mld_melding_key AND km18.mld_kenmerk_key = 29369
          LEFT JOIN mld_v_aanwezigkenmerkmelding km19
             ON x.mld_melding_key = km19.mld_melding_key AND km19.mld_kenmerk_key = 29372
          LEFT JOIN mld_v_aanwezigkenmerkmelding km20
             ON x.mld_melding_key = km20.mld_melding_key AND km20.mld_kenmerk_key = 29374;

-- RWSN#30975: Afhandelen printer-meldingen!
CREATE OR REPLACE PROCEDURE RWSN_processemail (
   pfrom        IN VARCHAR2,
   pto          IN VARCHAR2,
   psubject     IN VARCHAR2,
   pbody        IN VARCHAR2,
   psessionid   IN VARCHAR2,
   puserkey     IN NUMBER DEFAULT NULL)
AS
   -- Soortmelding=8357 onder Vakgroep=274 onder Vakgroeptype=1!
   v_errormsg           VARCHAR2 (1000);
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_ci                 VARCHAR2 (255) := '';
   v_perslid_key        NUMBER (10);
   v_kostenplaats_key   NUMBER (10);
   v_onderwerp          VARCHAR2 (255);
   v_stdmelding_key     NUMBER (10);
   --v_stdmelding_uvt     mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD (NULL, NULL); -- constructor initialisatie
   v_deel_key           NUMBER (10) := NULL;
   v_onrgoed_keys       NUMBER (10) := NULL;
   v_locatie_key        NUMBER (10) := NULL;
   v_melding_key        NUMBER (10) := NULL;
   v_count              NUMBER (10) := NULL;
BEGIN
   CASE
      WHEN UPPER (pto) LIKE 'PRINTER.FACILITOR@%'
      THEN
         v_errormsg := 'Fout bepalen printer';
         v_ci := TRIM (SUBSTR (psubject,
                               INSTR (psubject, 'EX'),
                               INSTR (SUBSTR (REPLACE (REPLACE (REPLACE (psubject, ' ', '#'), CHR(13), '#'), CHR(10), '#'), INSTR (psubject, 'EX')), '#') - 1));

         -- Bepaal persoon met loginnaam _HMAIL.
         v_errormsg := 'Fout bepalen Printer-melder';
         SELECT p.prs_perslid_key, a.prs_kostenplaats_key
           INTO v_perslid_key, v_kostenplaats_key
           FROM prs_v_aanwezigperslid p, prs_afdeling a
          WHERE p.prs_perslid_oslogin = '_HMAIL'
                AND p.prs_afdeling_key = a.prs_afdeling_key;

         v_errormsg := 'Fout bepalen Printer-onderwerp';
         v_onderwerp := psubject;

         -- Bepaal Soortmelding met afgesproken key=8357.
         v_errormsg := 'Fout bepalen Printer-soortmelding';
         SELECT sm.mld_stdmelding_key
           INTO v_stdmelding_key
           FROM mld_discipline md, mld_stdmelding sm
          WHERE md.ins_discipline_verwijder IS NULL
                --AND md.ins_srtdiscipline_key = 1                 -- Facilitair
                AND md.ins_discipline_key = sm.mld_ins_discipline_key
                AND sm.mld_stdmelding_key = 8357;

         -- Bepaal evt. object met omschrijving zoals in pbody achter EX!
         -- Alleen objecten onder disciplines met keys -1 t/m -1 worden beschouwd!
         v_errormsg := 'Fout bepalen Printer-object ' || v_ci;
         SELECT COUNT (*)
           INTO v_count
           FROM ins_v_aanwezigdeel d, ins_v_aanwezigsrtdeel sd, ins_v_aanwezigsrtgroep sg, ins_v_alg_onroerendgoed og
          WHERE d.ins_deel_upper = UPPER (v_ci)
                AND 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 (-1)
                AND d.ins_alg_ruimte_type = 'R'
                AND d.ins_alg_ruimte_key = og.alg_onrgoed_keys;

         IF v_count = 1
         THEN
            SELECT d.ins_deel_key, og.alg_onrgoed_keys, og.alg_locatie_key
              INTO v_deel_key, v_onrgoed_keys, v_locatie_key
              FROM ins_v_aanwezigdeel d, ins_v_aanwezigsrtdeel sd, ins_v_aanwezigsrtgroep sg, ins_v_alg_onroerendgoed og
             WHERE d.ins_deel_upper = UPPER (v_ci)
                   AND 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 (-1)
                   AND d.ins_alg_ruimte_type = 'R'
                   AND d.ins_alg_ruimte_key = og.alg_onrgoed_keys;
         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 Printer-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
                     DECODE (v_count, 1, v_locatie_key, 82), -- TODO/Westraven als printer niet kan worden bepaald?
                     DECODE (v_count, 1, v_onrgoed_keys, NULL),
                     SYSDATE,
                     SUBSTR (pfrom || CHR (13) || CHR (10) || pbody, 1, 4000),
                     v_stdmelding_key,
                     NULL,                                 --v_stdmelding_uvt,
                     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 Printer-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);
      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', 'RWSN_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 rwsn_v_rap_mail_error
(
   hide_f_offset,
   datum,
   hint,
   error
)
AS
   SELECT SYSDATE - imp_log_datum, imp_log_datum, imp_log_hint, imp_log_omschrijving
     FROM imp_log
    WHERE imp_log_applicatie = 'PROCESSEMAIL' AND imp_log_datum > SYSDATE - 30;

-- RWSN#52630: Rijdend materieel!
CREATE OR REPLACE VIEW rwsn_v_rap_rijdendmat
(
   identificatie,
   beschrijving,
   --plaats,                                                         -- weglaten
   --eigenaar,                                                       -- weglaten
   locatiecode,                                                       -- nieuw
   gebouwnaam,                                                        -- nieuw
   discipline,
   groep,
   objectsoort,
   objectbeheerder,
   --coordinaat,                                                     -- weglaten
   --reserveerbaar,                                                  -- weglaten
   --uitleenbaar,                                                    -- weglaten
   actief,
   vervaldatum
)
AS
   SELECT d.ins_deel_omschrijving,
          d.ins_deel_opmerking,
          --NULL plaats,
          --NULL eigenaar,
          l.alg_locatie_code,
          g.alg_gebouw_naam,
          td.ins_discipline_omschrijving,
          sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_omschrijving,
          pf.prs_perslid_naam_full,
          --NULL coordinaat,
          --NULL reserveerbaar,
          --NULL uitleenbaar,
          DECODE (d.ins_deel_actief, 0, 'nee', NULL) actief,
          d.ins_deel_vervaldatum
     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,
          prs_v_perslid_fullnames pf
    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 = 2101
          --AND d.ins_alg_locatie_key = l.alg_locatie_key
          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
          AND d.prs_perslid_key_beh = pf.prs_perslid_key(+);

-- RWSN#52630: Rijdend materieel!
CREATE OR REPLACE VIEW rwsn_v_rap_rijdendmat_expimp
AS
   WITH kd AS (SELECT sk.vnr, sk.ins_srtkenmerk_key, sk.ins_srtkenmerk_omschrijving, kd.ins_deel_key, kd.waarde
                 FROM    (SELECT ROWNUM vnr, ins_srtkenmerk_key, ins_srtkenmerk_omschrijving
                            FROM (  SELECT DISTINCT k.ins_kenmerk_volgnummer, sk.ins_srtkenmerk_key, sk.ins_srtkenmerk_omschrijving
                                      FROM ins_v_aanwezigsrtdeel sd, ins_v_aanwezigsrtgroep sg, ins_v_aanwezigkenmerk k, ins_v_aanwezigsrtkenmerk sk
                                     WHERE sd.ins_srtgroep_key = sg.ins_srtgroep_key
                                           AND sg.ins_discipline_key = 2101 -- Rijdend materieel
                                           AND ((k.ins_kenmerk_niveau = 'S' AND k.ins_srtinstallatie_key = sd.ins_srtdeel_key)
                                                OR (k.ins_kenmerk_niveau = 'G' AND k.ins_srtinstallatie_key = sg.ins_srtgroep_key)
                                                OR (k.ins_kenmerk_niveau = 'D' AND k.ins_srtinstallatie_key = 2101)) -- Rijdend materieel
                                           AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                                           AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V')
                                  ORDER BY k.ins_kenmerk_volgnummer)) sk
                      LEFT JOIN
                         (SELECT sk.ins_srtkenmerk_key, kd.ins_deel_key,
                                 DECODE (
                                    sk.ins_srtkenmerk_kenmerktype,
                                    'R', flx.getdomeinwaarde (sk.fac_kenmerkdomein_key, kd.ins_kenmerkdeel_waarde),
                                    'S', flx.getdomeinwaarde (sk.fac_kenmerkdomein_key, kd.ins_kenmerkdeel_waarde),
                                    kd.ins_kenmerkdeel_waarde)
                                    waarde
                            FROM ins_v_aanwezigkenmerkdeel kd, ins_v_aanwezigkenmerk k, ins_srtkenmerk sk
                           WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
                                 AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key) kd
                      ON sk.ins_srtkenmerk_key = kd.ins_srtkenmerk_key)
   SELECT 0 hide_f_result_order,
          'disciplineomschrijving' disciplineomschrijving,
          'disciplinekostensoort' disciplinekostensoort,
          'groepsoortomschrijving' groepsoortomschrijving,
          'objectsoortcode' objectsoortcode,
          'objectsoortomschrijving' objectsoortomschrijving,
          'objectomschrijving' objectomschrijving,
          'reserveerbaar' reserveerbaar,
          'eenheid' eenheid,
          'prijs' prijs,
          'locatiecode' locatiecode,
          'gebouwcode' gebouwcode,
          'bouwlaagvolgnummer' bouwlaagvolgnummer,
          'ruimtenummer' ruimtenummer,
          'reserveringscope' reserveringscope,
          'catalogusnaam' catalogusnaam,
          'cataloguskostensoort' cataloguskostensoort,
          'persoonmatchcode' persoonmatchcode,
          'persoonmatchwaarde' persoonmatchwaarde,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 1) kenmerk1,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 2) kenmerk2,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 3) kenmerk3,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 4) kenmerk4,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 5) kenmerk5,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 6) kenmerk6,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 7) kenmerk7,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 8) kenmerk8,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 9) kenmerk9,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 10) kenmerk10,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 11) kenmerk11,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 12) kenmerk12,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 13) kenmerk13,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 14) kenmerk14,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 15) kenmerk15,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 16) kenmerk16,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 17) kenmerk17,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 18) kenmerk18,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 19) kenmerk19,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 20) kenmerk20,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 21) kenmerk21,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 22) kenmerk22,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 23) kenmerk23,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 24) kenmerk24,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 25) kenmerk25,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 26) kenmerk26,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 27) kenmerk27,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 28) kenmerk28,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 29) kenmerk29,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 30) kenmerk30,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 31) kenmerk31,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 32) kenmerk32,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 33) kenmerk33,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 34) kenmerk34,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 35) kenmerk35,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 36) kenmerk36,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 37) kenmerk37,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 38) kenmerk38,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 39) kenmerk39,
          (SELECT MAX (ins_srtkenmerk_omschrijving) FROM kd WHERE vnr = 40) kenmerk40
     FROM DUAL
   UNION ALL
   SELECT 1 hide_f_result_order,
          x.disciplineomschrijving,
          x.disciplinekostensoort,
          x.groepsoortomschrijving,
          x.objectsoortcode,
          x.objectsoortomschrijving,
          x.objectomschrijving,
          x.reserveerbaar,
          x.eenheid,
          REPLACE (TO_CHAR (x.prijs), '.', ',') prijs,
          x.locatiecode,
          x.gebouwcode,
          TO_CHAR (x.bouwlaagvolgnummer) bouwlaagvolgnummer,
          x.ruimtenummer,
          x.reserveringscope,
          x.catalogusnaam,
          x.cataloguskostensoort,
          NULL persoonmatchcode,
          NULL persoonmatchwaarde,
          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,
          k31.waarde kenmerk31,
          k32.waarde kenmerk32,
          k33.waarde kenmerk33,
          k34.waarde kenmerk34,
          k35.waarde kenmerk35,
          k36.waarde kenmerk36,
          k37.waarde kenmerk37,
          k38.waarde kenmerk38,
          k39.waarde kenmerk39,
          k40.waarde kenmerk40
     FROM (SELECT d.ins_deel_key,
                  td1.ins_discipline_omschrijving disciplineomschrijving,
                  ks1.prs_kostensoort_oms disciplinekostensoort,
                  sg.ins_srtgroep_omschrijving groepsoortomschrijving,
                  sd.ins_srtdeel_code objectsoortcode,
                  sd.ins_srtdeel_omschrijving objectsoortomschrijving,
                  d.ins_deel_omschrijving objectomschrijving,
                  DECODE (rd.res_deel_key, NULL, NULL, 'J') reserveerbaar,
                  rd.res_deel_eenheid eenheid,
                  rd.res_deel_prijs prijs,
                  l.alg_locatie_code locatiecode,
                  g.alg_gebouw_code gebouwcode,
                  v.alg_verdieping_volgnr bouwlaagvolgnummer,
                  r.alg_ruimte_nr ruimtenummer,
                  DECODE (rd.res_deel_alg_level,
                          0, 'E',
                          1, 'D',
                          2, 'L',
                          3, 'G',
                          4, 'V',
                          5, 'R',
                          NULL)
                     reserveringscope,
                  td2.ins_discipline_omschrijving catalogusnaam,
                  ks2.prs_kostensoort_oms cataloguskostensoort
             FROM ins_v_aanwezigdeel d,
                  ins_srtdeel sd,
                  ins_srtgroep sg,
                  ins_tab_discipline td1,
                  prs_kostensoort ks1,
                  alg_ruimte r,
                  alg_verdieping v,
                  alg_gebouw g,
                  alg_locatie l,
                  res_v_aanwezigdeel rd,
                  ins_tab_discipline td2,
                  prs_kostensoort ks2
            WHERE d.ins_alg_ruimte_type = 'R' -- Alléén ruimtegebonden objecten!
                  AND d.ins_srtdeel_key = sd.ins_srtdeel_key
                  AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
                  AND sg.ins_discipline_key = td1.ins_discipline_key
                  AND td1.ins_discipline_key = 2101
                  AND td1.prs_kostensoort_key = ks1.prs_kostensoort_key(+)
                  --AND d.ins_alg_locatie_key = l.alg_locatie_key
                  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
                  AND d.ins_deel_key = rd.res_ins_deel_key(+)
                  AND rd.res_discipline_key = td2.ins_discipline_key(+)
                  AND td2.prs_kostensoort_key = ks2.prs_kostensoort_key(+)) x
          LEFT JOIN kd k1 ON x.ins_deel_key = k1.ins_deel_key AND k1.vnr = 1
          LEFT JOIN kd k2 ON x.ins_deel_key = k2.ins_deel_key AND k2.vnr = 2
          LEFT JOIN kd k3 ON x.ins_deel_key = k3.ins_deel_key AND k3.vnr = 3
          LEFT JOIN kd k4 ON x.ins_deel_key = k4.ins_deel_key AND k4.vnr = 4
          LEFT JOIN kd k5 ON x.ins_deel_key = k5.ins_deel_key AND k5.vnr = 5
          LEFT JOIN kd k6 ON x.ins_deel_key = k6.ins_deel_key AND k6.vnr = 6
          LEFT JOIN kd k7 ON x.ins_deel_key = k7.ins_deel_key AND k7.vnr = 7
          LEFT JOIN kd k8 ON x.ins_deel_key = k8.ins_deel_key AND k8.vnr = 8
          LEFT JOIN kd k9 ON x.ins_deel_key = k9.ins_deel_key AND k9.vnr = 9
          LEFT JOIN kd k10 ON x.ins_deel_key = k10.ins_deel_key AND k10.vnr = 10
          LEFT JOIN kd k11 ON x.ins_deel_key = k11.ins_deel_key AND k11.vnr = 11
          LEFT JOIN kd k12 ON x.ins_deel_key = k12.ins_deel_key AND k12.vnr = 12
          LEFT JOIN kd k13 ON x.ins_deel_key = k13.ins_deel_key AND k13.vnr = 13
          LEFT JOIN kd k14 ON x.ins_deel_key = k14.ins_deel_key AND k14.vnr = 14
          LEFT JOIN kd k15 ON x.ins_deel_key = k15.ins_deel_key AND k15.vnr = 15
          LEFT JOIN kd k16 ON x.ins_deel_key = k16.ins_deel_key AND k16.vnr = 16
          LEFT JOIN kd k17 ON x.ins_deel_key = k17.ins_deel_key AND k17.vnr = 17
          LEFT JOIN kd k18 ON x.ins_deel_key = k18.ins_deel_key AND k18.vnr = 18
          LEFT JOIN kd k19 ON x.ins_deel_key = k19.ins_deel_key AND k19.vnr = 19
          LEFT JOIN kd k20 ON x.ins_deel_key = k20.ins_deel_key AND k20.vnr = 20
          LEFT JOIN kd k21 ON x.ins_deel_key = k21.ins_deel_key AND k21.vnr = 21
          LEFT JOIN kd k22 ON x.ins_deel_key = k22.ins_deel_key AND k22.vnr = 22
          LEFT JOIN kd k23 ON x.ins_deel_key = k23.ins_deel_key AND k23.vnr = 23
          LEFT JOIN kd k24 ON x.ins_deel_key = k24.ins_deel_key AND k24.vnr = 24
          LEFT JOIN kd k25 ON x.ins_deel_key = k25.ins_deel_key AND k25.vnr = 25
          LEFT JOIN kd k26 ON x.ins_deel_key = k26.ins_deel_key AND k26.vnr = 26
          LEFT JOIN kd k27 ON x.ins_deel_key = k27.ins_deel_key AND k27.vnr = 27
          LEFT JOIN kd k28 ON x.ins_deel_key = k28.ins_deel_key AND k28.vnr = 28
          LEFT JOIN kd k29 ON x.ins_deel_key = k29.ins_deel_key AND k29.vnr = 29
          LEFT JOIN kd k30 ON x.ins_deel_key = k30.ins_deel_key AND k30.vnr = 30
          LEFT JOIN kd k31 ON x.ins_deel_key = k31.ins_deel_key AND k31.vnr = 31
          LEFT JOIN kd k32 ON x.ins_deel_key = k32.ins_deel_key AND k32.vnr = 32
          LEFT JOIN kd k33 ON x.ins_deel_key = k33.ins_deel_key AND k33.vnr = 33
          LEFT JOIN kd k34 ON x.ins_deel_key = k34.ins_deel_key AND k34.vnr = 34
          LEFT JOIN kd k35 ON x.ins_deel_key = k35.ins_deel_key AND k35.vnr = 35
          LEFT JOIN kd k36 ON x.ins_deel_key = k36.ins_deel_key AND k36.vnr = 36
          LEFT JOIN kd k37 ON x.ins_deel_key = k37.ins_deel_key AND k37.vnr = 37
          LEFT JOIN kd k38 ON x.ins_deel_key = k38.ins_deel_key AND k38.vnr = 38
          LEFT JOIN kd k39 ON x.ins_deel_key = k39.ins_deel_key AND k39.vnr = 39
          LEFT JOIN kd k40 ON x.ins_deel_key = k40.ins_deel_key AND k40.vnr = 40;

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