--
-- $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;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF

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

--=============================================================================
-- 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;
/

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;

   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 (1000) := '';
   oracle_err_num       NUMBER;
   oracle_err_mes       VARCHAR2 (200);
   v_aanduiding         VARCHAR2 (1000) := '';
   v_count              NUMBER;
   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);

   --Altijd 0, want einddatum altijd op 31-12-9999!
   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_v_aanwezigkostenplaats
    WHERE prs_kostenplaats_module = 'PRS'
          AND prs_kostenplaats_eind IS NOT NULL
          AND UPPER (COALESCE (prs_kostenplaats_omschrijving, '-')) NOT LIKE 'VERVALLEN:%';

   SELECT COUNT ( * )
     INTO l_oldcountafd
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND UPPER (COALESCE (a.prs_afdeling_omschrijving, '-')) NOT LIKE 'VERVALLEN:%'
          AND EXISTS -- Afdeling met vervaldatum (in toekomst), dus IDM_ORG-import!
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_kenmerk_key = l_vervalkm_key
                        AND prs_link_key = a.prs_afdeling_key);

   -- 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 prs_kenmerk_key
        INTO l_vervalkm_key
        FROM prs_kenmerk
       WHERE prs_kenmerk_niveau = 'A'
             AND 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;

   -- Oude ellende schonen, in principe eenmalig, want nooit meer VERVALLLEN
   -- met 3 L's!
/*
   SELECT kp.*
     FROM prs_kostenplaats kp
    WHERE kp.prs_kostenplaats_verwijder IS NULL
          AND kp.prs_kostenplaats_module = 'PRS'
          AND kp.prs_kostenplaats_omschrijving LIKE 'VERVALLLEN: %';
   UPDATE prs_kostenplaats kp
      SET kp.prs_kostenplaats_eind = TRUNC (SYSDATE, 'yyyy')
    WHERE kp.prs_kostenplaats_verwijder IS NULL
          AND kp.prs_kostenplaats_module = 'PRS'
          AND kp.prs_kostenplaats_omschrijving LIKE 'VERVALLLEN: %';
*/
   UPDATE prs_kostenplaats kp
      SET kp.prs_kostenplaats_verwijder = SYSDATE
    WHERE kp.prs_kostenplaats_verwijder IS NULL
          AND kp.prs_kostenplaats_module = 'PRS'
          AND kp.prs_kostenplaats_omschrijving LIKE 'VERVALLLEN: %';

   -- Zet kostenplaatsen op VERVALLEN; de rest handmatig verder maar regelen!
   -- Kostenplaatsen zonder einddatum met rust laten (=handmatig aangemaakt)!
   v_errormsg := 'Fout inactiveren kostenplaatsen.';
   SELECT COUNT ( * )
     INTO l_vervcountkp
     FROM prs_kostenplaats kp
    WHERE kp.prs_kostenplaats_verwijder IS NULL
          AND kp.prs_kostenplaats_module = 'PRS'
          AND kp.prs_kostenplaats_eind > TRUNC (SYSDATE) -- Met einddatum in toekomst
          AND UPPER (COALESCE (kp.prs_kostenplaats_omschrijving, '-')) NOT LIKE 'VERVALLEN:%'
          AND NOT EXISTS
                (SELECT 1
                   FROM rwsn_imp_idm_org
                  WHERE UPPER (afdelingscode) = kp.prs_kostenplaats_upper);

   UPDATE prs_kostenplaats kp
      SET kp.prs_kostenplaats_eind = TRUNC (SYSDATE), -- Per vandaag vervallen
          kp.prs_kostenplaats_omschrijving = SUBSTR ('VERVALLEN: ' || COALESCE (prs_kostenplaats_omschrijving, '-'), 1, 60)
    WHERE kp.prs_kostenplaats_verwijder IS NULL
          AND kp.prs_kostenplaats_module = 'PRS'
          AND kp.prs_kostenplaats_eind > TRUNC (SYSDATE) -- Met einddatum in toekomst
          AND UPPER (COALESCE (kp.prs_kostenplaats_omschrijving, '-')) NOT LIKE 'VERVALLEN:%'
          AND NOT EXISTS
                (SELECT 1
                   FROM rwsn_imp_idm_org
                  WHERE UPPER (afdelingscode) = kp.prs_kostenplaats_upper);

   SELECT COUNT ( * )
     INTO l_reancountkp
     FROM prs_kostenplaats kp
    WHERE kp.prs_kostenplaats_verwijder IS NULL
          AND kp.prs_kostenplaats_module = 'PRS'
          AND kp.prs_kostenplaats_eind < SYSDATE  -- Met einddatum in verleden
          AND UPPER (kp.prs_kostenplaats_omschrijving) LIKE 'VERVALLEN:%'
          AND EXISTS
                (SELECT 1
                   FROM rwsn_imp_idm_org
                  WHERE UPPER (afdelingscode) = kp.prs_kostenplaats_upper);
   COMMIT;

   -- Zet afdelingen op VERVALLEN; de rest handmatig verder maar regelen!
   v_errormsg := 'Fout inactiveren afdelingen.';
   SELECT COUNT ( * )
     INTO l_vervcountafd
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND UPPER (a.prs_afdeling_omschrijving) NOT LIKE 'VERVALLEN:%'
          AND EXISTS -- Afdeling met vervaldatum (in toekomst), dus IDM_ORG-import!
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_kenmerk_key = l_vervalkm_key
                        AND prs_link_key = a.prs_afdeling_key)
          AND NOT EXISTS
                (SELECT 1
                   FROM rwsn_imp_idm_org
                  WHERE UPPER (afdelingscode) = a.prs_afdeling_upper);

   UPDATE prs_afdeling a
      SET a.prs_afdeling_omschrijving = SUBSTR ('VERVALLEN: ' || COALESCE (prs_afdeling_omschrijving, '-'), 1, 60)
    WHERE a.prs_afdeling_verwijder IS NULL
          AND UPPER (a.prs_afdeling_omschrijving) NOT LIKE 'VERVALLEN:%'
          AND EXISTS -- Afdeling met vervaldatum (in toekomst), dus IDM_ORG-import!
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_kenmerk_key = l_vervalkm_key
                        AND prs_link_key = a.prs_afdeling_key)
          AND NOT EXISTS
                (SELECT 1
                   FROM rwsn_imp_idm_org
                  WHERE UPPER (afdelingscode) = a.prs_afdeling_upper);

   SELECT COUNT ( * )
     INTO l_reancountafd
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND UPPER (a.prs_afdeling_omschrijving) LIKE 'VERVALLEN:%'
          AND EXISTS -- Afdeling met vervaldatum (in verleden), dus IDM_ORG-import!
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_kenmerk_key = l_vervalkm_key
                        AND prs_link_key = a.prs_afdeling_key)
          AND EXISTS
                (SELECT 1
                   FROM rwsn_imp_idm_org
                  WHERE UPPER (afdelingscode) = a.prs_afdeling_upper);
   COMMIT;

   FOR rc IN cafdelingsboom
   LOOP
      v_aanduiding := '[' || TO_CHAR (rc.fac_lev) || '|' || rc.afdelingscode || '|' || rc.omschrijving || '|' || rc.parentcode || '] ';

      -- Bestaat de kostenplaats al?
      v_errormsg := 'Fout bepalen kostenplaats';
      BEGIN
         SELECT prs_kostenplaats_key
           INTO lkostenplaatskey
           FROM prs_v_aanwezigkostenplaats
          WHERE prs_kostenplaats_upper = rc.afdelingscode;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            lkostenplaatskey := -1;
      END;

      -- Bestaat de afdeling al?
      v_errormsg := 'Fout bepalen afdeling';
      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 -- LET OP: Niet prs_v_aanwezigafdeling (want soms "lager" dan 5)!
          WHERE a.prs_afdeling_verwijder IS NULL
                AND a.prs_afdeling_key = ab.prs_afdeling_key
                AND a.prs_afdeling_upper = rc.afdelingscode;
      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);

      v_errormsg := 'Fout toevoegen/bijwerken kostenplaats.';
      BEGIN
         IF lkostenplaatskey = -1
         THEN
            v_errormsg := 'Fout toevoegen kostenplaats';
            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;
         ELSE  -- Bijwerken kostenplaats met omschrijving het hoogst in de boom!
            v_errormsg := 'Fout bijwerken kostenplaats';
            SELECT COUNT ( * )
              INTO v_count
              FROM (    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) x
             WHERE x.omschrijving = rc.omschrijving
                   AND x.fac_lev < rc.fac_lev;

            IF v_count = 0
            THEN
               UPDATE prs_kostenplaats
                  SET prs_kostenplaats_omschrijving = rc.omschrijving,
                      prs_kostenplaats_begin = rc.begindatum,
                      prs_kostenplaats_eind = rc.einddatum
                WHERE prs_kostenplaats_key = lkostenplaatskey;
            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_errormsg, rc.afdelingscode || '/' || rc.omschrijving);
      END;

      -- Alle niveaus zitten in cursor tbv. bovenstaande kostenplaatsen, maar
      -- bij de mapping naar Facilitor-afdelingen pakken we de IDM-afdelingen
      -- vanaf 3 (= Facilitor Afdeling-1).
      IF rc.idm_lev >= 3 AND lkostenplaatskey <> -1
      THEN
         IF lafdelingkey = -1                 -- Nieuwe afdeling -> toevoegen!
         THEN
            BEGIN
               v_errormsg := 'Fout toevoegen afdeling';
               IF rc.fac_lev = 1     -- Ingelezen afdeling betreft Afdeling-1!
               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
                  -- Bepaal key van parent!
                  SELECT prs_afdeling_key
                    INTO l_new_parentkey
                    FROM prs_afdeling -- LET OP: Niet prs_v_aanwezigafdeling (want soms "lager" dan 5)!
                   WHERE prs_afdeling_verwijder IS NULL AND prs_afdeling_naam = rc.parentcode;

                  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_verwijder IS NULL AND prs_afdeling_naam = l_new_parparcode;

                  -- Doordat cursor van hoog naar laag door organisatie loopt,
                  -- komen afdelingen vanaf IDM-niveau 8 keurig onder de gewenste
                  -- Afdeling-4 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 toegevoegd', v_aanduiding);
            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, v_aanduiding);
            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.
               v_errormsg := 'Fout bijwerken afdeling';
               IF rc.fac_lev = 1     -- Ingelezen afdeling betreft Afdeling-1!
               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 -- LET OP: Niet prs_v_aanwezigafdeling (want soms "lager" dan 5)!
                   WHERE prs_afdeling_verwijder IS NULL AND prs_afdeling_naam = rc.parentcode;

                  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?
                              OR prs_kostenplaats_key <> lkostenplaatskey); -- Kostenplaats 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_verwijder IS NULL AND prs_afdeling_naam = l_new_parparcode;

                  -- Doordat cursor van hoog naar laag door organisatie loopt,
                  -- komen afdelingen vanaf IDM-niveau 8 keurig onder de gewenste
                  -- Afdeling-4 te hangen.
                  UPDATE prs_afdeling
                     SET prs_afdeling_omschrijving = rc.omschrijving,
                         prs_bedrijf_key = NULL,
                         prs_afdeling_parentkey = l_new_parentkey,
                         prs_kostenplaats_key = lkostenplaatskey
                   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?
                              OR prs_kostenplaats_key <> lkostenplaatskey); -- Kostenplaats 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 omgehangen naar level=' || TO_CHAR (rc.fac_lev), v_aanduiding);
               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, v_aanduiding);
            END;
         END IF;

         IF rc.einddatum IS NOT NULL
         THEN
            BEGIN
               -- Heeft afdeling reeds een VERVALDATUM-waarde?
               v_errormsg := 'Fout bepalen einddatum';
               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
                  v_errormsg := 'Fout bijwerken einddatum';
                  UPDATE prs_kenmerklink
                     SET prs_kenmerklink_waarde = TO_CHAR (rc.einddatum, 'dd-mm-yyyy')
                   WHERE prs_kenmerklink_key = l_vervalkl_key;
               END IF;
            EXCEPTION
               WHEN NO_DATA_FOUND
               THEN
                  v_errormsg := 'Fout toevoegen einddatum';
                  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;

   -- 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_v_aanwezigkostenplaats
    WHERE prs_kostenplaats_module = 'PRS'
          AND prs_kostenplaats_eind IS NOT NULL
          AND UPPER (COALESCE (prs_kostenplaats_omschrijving, '-')) NOT LIKE 'VERVALLEN:%';

   SELECT COUNT ( * )
     INTO l_newcountafd
     FROM prs_afdeling a
    WHERE a.prs_afdeling_verwijder IS NULL
          AND UPPER (COALESCE (a.prs_afdeling_omschrijving, '-')) NOT LIKE 'VERVALLEN:%'
          AND EXISTS -- Afdeling met vervaldatum (in toekomst), dus IDM_ORG-import!
                (SELECT 1
                   FROM prs_v_aanwezigkenmerklink
                  WHERE prs_kenmerk_key = l_vervalkm_key
                        AND prs_link_key = a.prs_afdeling_key);

   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 := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key, 'E', v_aanduiding || 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;   -- Altijd werkplek met deze notatie!
   c_prs_werkplek_omschrijving   VARCHAR2 (16) := '1'; -- Altijd werkplek met deze notatie!
   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
   -- 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 persoon, varierend van:
   -- NIKS (als plaats ongeldig is of 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_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 nieuwe werkplek al voor bij bestaande werkplekken (virtueel of niet)?
      -- heeft persoon al bestaande werkplek in gebouw (virtueel of niet)?
      SELECT COUNT (*)
        INTO lv_nr_werkplek
        FROM prs_perslidwerkplek pw, prs_werkplek w, alg_ruimte r, alg_verdieping v
       WHERE pw.prs_perslid_key = pkey
             AND pw.prs_werkplek_key = w.prs_werkplek_key
             --RWSN#8617:AND COALESCE (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 v.alg_gebouw_key = pgebouwkey;

      IF lv_nr_werkplek > 0
      THEN
         -- persoon heeft bestaande werkplek in gebouw (virtueel of niet)!
         lv_errorhint := 'Ongewijzigd gebouw voor persoon/RIN: ' || prin;
         fac.imp_writelog (p_import_key, 'I', lv_errormsg, lv_errorhint);
         RETURN;
      END IF;

      -- verwijder bestaande werkplekken.
      -- HdZ (6-8-2009: werkplekken mogen niet worden verwijderd via 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 gebouw ook.
      -- Dan zoeken we naar laagste verdieping en laagste ruimtenr.
      -- En dan maken we daar werkplek aan.
      IF lv_nr_werkplek = 0
      THEN
         -- persoon heeft nog geen werkplek
         BEGIN
            lv_errormsg := 'Bepalen verdieping';
            SELECT alg_verdieping_key
              INTO lv_verdieping_key
              FROM alg_v_aanwezigverdieping
             WHERE alg_gebouw_key = pgebouwkey 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 laagste=alfabetisch eerste ruimte op verdieping
            SELECT alg_ruimte_key
              INTO lv_ruimte_key
              FROM alg_v_aanwezigruimte
             WHERE alg_verdieping_key = lv_verdieping_key
                   AND alg_ruimte_nr = (SELECT MIN (alg_ruimte_nr)
                                          FROM alg_v_aanwezigruimte
                                         WHERE alg_verdieping_key = lv_verdieping_key);
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Ruimte toevoegen voor persoon/RIN: ' || prin;
               -- AANNAME: 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;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               v_errorhint := 'Werkplek toevoegen voor persoon/RIN: ' || prin;
               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;
         END;

         -- lv_werkplek_key bekend
         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_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.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_nr = rec_prs_upd.dienstverbandid,
                         prs_perslid_titel = rec_prs_upd.prs_perslid_titel,
                         prs_srtperslid_key = v_srtperslid_key,
                         prs_afdeling_key = v_afdeling_key,
                         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_verwijder = NULL,
                         prs_perslid_inactief = NULL
                   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_v_aanwezigruimte 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_v_aanwezigruimte 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;
/

-- RWSN#71458: IDM_BGH-import (tbv. ICT-bestelportaal)!
CREATE OR REPLACE PROCEDURE rwsn_import_idm_bgh (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_found        BOOLEAN;
   endmrk_found        BOOLEAN;
   v_count_tot         NUMBER (10);
   v_count_import      NUMBER (10);
   v_ongeldig          NUMBER (1);
   v_aanduiding        VARCHAR2 (200);
   -- De importvelden:
   v_rin               VARCHAR2 (255);                                  -- C30
   v_accountname       VARCHAR2 (255);                                  -- C30
   v_emailaddress      VARCHAR2 (255);                                 -- C200
   v_userdeffunction   VARCHAR2 (255);                                  -- C60
   v_startdate         VARCHAR2 (255);                                    -- D
   v_startdate_d       DATE;
   v_enddate           VARCHAR2 (255);                                    -- D
   v_enddate_d         DATE;
   v_orgunitid         VARCHAR2 (255);                                  -- C10
   v_orgunitname       VARCHAR2 (255);                                  -- C60
   v_parentorgunitid   VARCHAR2 (255);                                  -- C10

   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_idm_bgh WHERE COALESCE (imp_log_run, -1) <> p_import_key;
   COMMIT;

   header_found := FALSE;
   endmrk_found := FALSE;
   v_count_tot := 0;
   v_count_import := 0;

   FOR rec1 IN c1
   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_errormsg := 'Fout opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_rin);
         fac.imp_getfield (v_newline, c_delim, v_accountname);
         fac.imp_getfield (v_newline, c_delim, v_emailaddress);
         fac.imp_getfield (v_newline, c_delim, v_userdeffunction);
         fac.imp_getfield (v_newline, c_delim, v_startdate);
         fac.imp_getfield (v_newline, c_delim, v_enddate);
         fac.imp_getfield (v_newline, c_delim, v_orgunitid);
         fac.imp_getfield (v_newline, c_delim, v_orgunitname);
         fac.imp_getfield (v_newline, c_delim, v_parentorgunitid);

         v_aanduiding := '[' || v_rin || '|' || v_emailaddress || '|' || v_orgunitid || '] ';

         -- 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 (NOT header_found)
         THEN
            IF     UPPER (v_rin) = 'RIN'
               AND UPPER (v_accountname) = 'ACCOUNTNAME'
               AND UPPER (v_emailaddress) = 'EMAILADDRESS'
               AND UPPER (v_userdeffunction) = 'USERDEFFUNCTION'
               AND UPPER (v_startdate) = 'STARTDATE'
               AND UPPER (v_enddate) = 'ENDDATE'
               AND UPPER (v_orgunitid) = 'ORGUNITID'
               AND UPPER (v_orgunitname) = 'ORGUNITNAME'
               AND UPPER (v_parentorgunitid) = 'PARENTORGUNITID'
            THEN
               header_found := TRUE;
            END IF;
         ELSE
            IF UPPER (v_rin) = '==EINDE==' AND fac.safe_to_number (v_accountname) = v_count_tot
            THEN
               endmrk_found := TRUE;
            ELSIF (NOT endmrk_found)
            THEN
               v_count_tot := v_count_tot + 1;
               -- Controleer alle veldwaarden
               v_errormsg := 'RIN ongeldig; ongedefinieerd of te lang';
               v_rin := TRIM (v_rin);

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

               --
               v_errormsg := 'Accountname ongeldig; ongedefinieerd of te lang';
               v_accountname := TRIM (v_accountname);

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

               --
               v_errormsg := 'Emailaddress ongeldig; ongedefinieerd of te lang';
               v_emailaddress := TRIM (v_emailaddress);

               IF v_emailaddress IS NULL OR LENGTH (v_emailaddress) > 200
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen!');
               END IF;

               --
               v_errormsg := 'Userdeffunction te lang';
               v_userdeffunction := TRIM (v_userdeffunction);

               IF LENGTH (v_userdeffunction) > 60
               THEN
                  v_userdeffunction := SUBSTR (v_userdeffunction, 1, 60);
                  fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Userdeffunction afgekapt!');
               END IF;

               --
               v_errormsg := 'Startdate ongeldig';
               v_startdate:= TRIM (v_startdate);
               v_startdate_d := fac.safe_to_date (SUBSTR (v_startdate, 1, 10), 'yyyy-mm-dd');

               IF v_startdate IS NOT NULL AND v_startdate_d IS NULL
               THEN
                  fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Startdate genegeerd');
               END IF;

               --
               v_errormsg := 'Enddate ongeldig';
               v_enddate:= TRIM (v_enddate);
               v_enddate_d := fac.safe_to_date (SUBSTR (v_enddate, 1, 10), 'yyyy-mm-dd');

               IF v_enddate IS NOT NULL AND v_enddate_d IS NULL
               THEN
                  fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Enddate genegeerd');
               END IF;

               --
               v_errormsg := 'Orgunitid ongeldig; ongedefinieerd of te lang';
               v_orgunitid := TRIM (v_orgunitid);

               IF v_orgunitid IS NULL OR LENGTH (v_orgunitid) > 10
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen!');
               END IF;

               --
               v_errormsg := 'Orgunitname te lang';
               v_orgunitname := TRIM (v_orgunitname);

               IF v_orgunitname IS NULL OR LENGTH (v_orgunitname) > 60
               THEN
                  v_orgunitname := SUBSTR (v_orgunitname, 1, 60);
                  fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Orgunitname afgekapt!');
               END IF;

               --
               v_errormsg := 'Parentorgunitid te lang';
               v_parentorgunitid := TRIM (v_parentorgunitid);

               IF LENGTH (v_parentorgunitid) > 10
               THEN
                  v_parentorgunitid := SUBSTR (v_parentorgunitid, 1, 10);
                  fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Parentorgunitid afgekapt!');
               END IF;

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

                     INSERT INTO rwsn_imp_idm_bgh (rin, accountname, emailaddress, userdeffunction, startdate, enddate, orgunitid, orgunitname, parentorgunitid, imp_log_run)
                         VALUES (v_rin, v_accountname, v_emailaddress, v_userdeffunction, v_startdate_d, v_enddate_d, v_orgunitid, v_orgunitname, v_parentorgunitid, p_import_key);
                     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 IF;
      END;
   END LOOP;

   IF (NOT header_found)
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
   ELSIF (NOT endmrk_found)
   THEN
      fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen geldige eindmarkering aangetroffen!');

      -- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
      DELETE FROM rwsn_imp_idm_bgh;
   ELSE
      fac.imp_writelog (p_import_key, 'S', 'IDM-budgethouders/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '');
      fac.imp_writelog (p_import_key, 'S', 'IDM-budgethouders/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '');
   END IF;
   COMMIT;

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

      -- Maak importtabel leeg om te voorkomen dat foutieve bestanden worden ingelezen.
      DELETE FROM rwsn_imp_idm_bgh;
END rwsn_import_idm_bgh;
/
/*
  SELECT ab.prs_bedrijf_key, kp.prs_kostenplaats_key, COUNT ( * )
    FROM prs_v_aanwezigkostenplaats kp, prs_afdeling a, prs_v_afdeling_boom ab
   WHERE kp.prs_kostenplaats_key = a.prs_kostenplaats_key
         AND a.prs_afdeling_verwijder IS NULL
         AND a.prs_afdeling_key = ab.prs_afdeling_key
GROUP BY ab.prs_bedrijf_key, kp.prs_kostenplaats_key;
*/
CREATE OR REPLACE PROCEDURE rwsn_update_idm_bgh (p_import_key IN NUMBER)
AS
   c_rin_kkey       NUMBER (10) := 1160;
   v_errormsg       VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_aanduiding     VARCHAR2 (200);
   v_count          NUMBER (10);
   v_count_upd      NUMBER (10);
   v_count_del      NUMBER (10);

   -- Toekennen budgethouder-autorisaties!
   CURSOR c_bgh_upd
   IS
        SELECT p.prs_perslid_key, p.prs_perslid_email, kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr
          FROM rwsn_imp_idm_bgh x,
               (SELECT kl.prs_kenmerklink_waarde rin, p.prs_perslid_key, p.prs_perslid_email
                  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) p,
               prs_afdeling a,
               prs_kostenplaats kp
         WHERE 1 = 1                                    --x.enddate > SYSDATE?
               AND x.rin = p.rin
               AND UPPER (x.orgunitid) = a.prs_afdeling_upper
               AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key
      ORDER BY 1;

   -- Afnemen budgethouder-autorisaties!
   CURSOR c_bgh_del
   IS
      --  SELECT kp.prs_perslid_key, p.prs_perslid_email, kp.prs_kostenplaats_key, kp.prs_kostenplaats_nr
      --    FROM prs_kostenplaats kp,
      --         prs_afdeling a,
      --         (SELECT kl.prs_kenmerklink_waarde rin, p.prs_perslid_key, p.prs_afdeling_key, p.prs_perslid_email
      --            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) p
      --   WHERE 1 = 1 --COALESCE (kp.prs_kostenplaats_eind, SYSDATE) > TRUNC (SYSDATE)?
      --         AND kp.prs_kostenplaats_key != 6081 -- Kostenplaats EXTERNE niet/nooit iemand afnemen!
      --         AND kp.prs_perslid_key = p.prs_perslid_key -- Budgethouder van kostenplaats heeft RIN!
      --         AND kp.prs_kostenplaats_key = a.prs_kostenplaats_key -- Afdelingskostenplaats!
      --         AND NOT EXISTS -- RIN van bestaande budgethouder niet/nergens (meer) in importbestand!
      --                       (SELECT 1
      --                          FROM rwsn_imp_idm_bgh
      --                         WHERE rin = p.rin)
      --         AND EXISTS -- Afdeling(skostenplaats) in importbestand heeft een budgethouder met RIN!
      --               (SELECT 1
      --                  FROM rwsn_imp_idm_bgh
      --                 WHERE rin IS NOT NULL
      --                       AND UPPER (orgunitid) = a.prs_afdeling_upper)
      --ORDER BY 1;
        SELECT p.prs_perslid_key, p.prs_perslid_email
          FROM fac_gebruikersgroep gg, prs_v_aanwezigperslid p
         WHERE gg.fac_groep_key = 422                    -- ICT Contactpersoon
               AND gg.prs_perslid_key = p.prs_perslid_key
               AND NOT EXISTS   -- ICT Contactpersoon, maar geen budgethouder!
                             (SELECT 1
                                FROM prs_v_aanwezigkostenplaats
                               WHERE prs_perslid_key = p.prs_perslid_key)
      ORDER BY 1;
BEGIN
   v_count_upd := 0;

   FOR rec IN c_bgh_upd
   LOOP
      BEGIN
         v_aanduiding := '[' || TO_CHAR (rec.prs_perslid_key) || '|' || rec.prs_perslid_email || '|' || rec.prs_kostenplaats_nr || '] ';

         -- Budgethouders toekennen groep 422=ICT Contactpersoon algemeen!
         INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
            SELECT 422, p.prs_perslid_key                -- ICT Contactpersoon
              FROM prs_v_aanwezigperslid p
             WHERE prs_perslid_key = rec.prs_perslid_key
                   AND NOT EXISTS
                         (SELECT 1
                            FROM fac_gebruikersgroep
                           WHERE fac_groep_key = 422     -- ICT Contactpersoon
                             AND prs_perslid_key = p.prs_perslid_key);

         -- Toekennen Leidinggevende-profiel, tenzij DBV-profiel en DBV-er!
         UPDATE prs_perslid
            SET fac_profiel_key = 3                          -- Leidinggevende
          WHERE prs_perslid_key = rec.prs_perslid_key
                AND (COALESCE (fac_profiel_key, 1) != 4                 -- DBV
                     OR NOT EXISTS (SELECT 1 FROM prs_kostenplaatsgrp WHERE prs_perslid_key = rec.prs_perslid_key));

         -- Toekennen als budgethouder bij kostenplaats!
         UPDATE prs_kostenplaats
            SET prs_perslid_key = rec.prs_perslid_key
          WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key;

         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', 'IDM-budgethouders/#bijgewerkt: ' || TO_CHAR (v_count_upd), '');
   COMMIT;

   v_count_del := 0;

   FOR rec IN c_bgh_del
   LOOP
      BEGIN
         v_aanduiding := '[' || TO_CHAR (rec.prs_perslid_key) || '|' || rec.prs_perslid_email || '] ';

         -- Budgethouder niet wissen bij kostenplaats, dat zou moeten gebeuren
         -- via c_bgh_upd-cursor!

         -- Budgethouders afnemen groep 422=ICT Contactpersoon algemeen!
         DELETE FROM fac_gebruikersgroep gg
               WHERE gg.fac_groep_key = 422              -- ICT Contactpersoon
                     AND gg.prs_perslid_key = rec.prs_perslid_key;

         -- Afnemen Leidinggevende-profiel, tenzij DBV-profiel en DBV-er!
         UPDATE prs_perslid
            SET fac_profiel_key = 1                                 -- Default
          WHERE prs_perslid_key = rec.prs_perslid_key
                AND (COALESCE (fac_profiel_key, 1) != 4                   -- DBV
                     OR NOT EXISTS (SELECT 1 FROM prs_kostenplaatsgrp WHERE prs_perslid_key = rec.prs_perslid_key));

         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', 'IDM-budgethouders/#verwijderd: ' || TO_CHAR (v_count_del), '');
   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, 'Importproces IDM_BGH afgebroken!');
END rwsn_update_idm_bgh;
/

--=============================================================================
-- 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, TO_CHAR (SUBSTR (mld_melding_omschrijving, 1, 4000)) mld_melding_omschrijving
          FROM   mld_melding
         WHERE   TO_CHAR (SUBSTR (mld_melding_omschrijving, 1, 4000)) IN
                       (  SELECT   TO_CHAR (SUBSTR (mld_melding_omschrijving, 1, 4000))
                            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   TO_CHAR (SUBSTR (mld_melding_omschrijving, 1, 4000))
                          HAVING   COUNT (TO_CHAR (SUBSTR (mld_melding_omschrijving, 1, 4000))) > 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
          || '";"' || '?'
          || '";"' || ''
          || '";"' || '?'
          || '";"' || 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!
-- RWSN#60670: Per RWSN67 uurlijks (ipv. alleen om 8, 12 en 16 uur)!
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,
                    fac_notificatie_job nj
              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)
                    AND nj.fac_notificatie_job_view = 'RWSN_V_NOTI_EXTERN'
                    AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun
           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);
   PROCEDURE cnd_accept_melding;
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_afdeling afd
                         WHERE       a.res_discipline_key = rd.ins_discipline_key
                                 AND afd.prs_afdeling_verwijder IS NULL
                                 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_afdeling afd
                         WHERE       a.res_discipline_key = rd.ins_discipline_key
                                 AND afd.prs_afdeling_verwijder IS NULL
                                 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_afdeling afd
                      WHERE       afd.prs_afdeling_verwijder IS NULL
                              AND 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_afdeling afd
                      WHERE   afd.prs_afdeling_verwijder IS NULL
                              AND 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_afdeling afd
                      WHERE   afd.prs_afdeling_verwijder IS NULL
                              AND 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_afdeling afd
                      WHERE   afd.prs_afdeling_verwijder IS NULL
                              AND 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_afdeling afd
                      WHERE   afd.prs_afdeling_verwijder IS NULL
                              AND 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;

   PROCEDURE cnd_accept_melding
   AS
    CURSOR c IS
        SELECT mld_melding_key, prs_perslid_key
          FROM mld_melding m, mld_stdmelding std, mld_discipline d
         WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
               AND std.mld_ins_discipline_key = d.ins_discipline_key
               AND d.ins_srtdiscipline_key = fac.getsetting ('cnd_gebreken_srtdisc_key')
               AND mld_melding_status = 2;

       v_errormsg       VARCHAR2 (1000);
       oracle_err_num   NUMBER;
       oracle_err_mes   VARCHAR2 (200);
   BEGIN
       FOR rec IN c
       LOOP
           mld.setmeldingstatus (rec.mld_melding_key,
                                 4,
                                 rec.prs_perslid_key,
                                 0);
           cnd.process_mjb_score_effects (rec.mld_melding_key);
       END LOOP;
   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 ('DAILY-CND_ACCEPT_MLD',
                         'E',
                         v_errormsg,
                         '');
   END cnd_accept_melding;

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, 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 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 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,
   objectopmerking,
   reserveerbaar,
   eenheid,
   prijs,
   fclt_f_locatiecode,
   gebouwcode,
   bouwlaagvolgnummer,
   ruimtenummer,
   reserveringscope,
   fclt_f_catalogusnaam,
   cataloguskostensoort
)
AS
   SELECT di.ins_discipline_omschrijving,
          (SELECT prs_kostensoort_oms FROM prs_kostensoort WHERE prs_kostensoort_key = di.prs_kostensoort_key)
             kostensoort,
          sg.ins_srtgroep_omschrijving,
          sd.ins_srtdeel_code,
          sd.ins_srtdeel_omschrijving,
          d.ins_deel_omschrijving,
          d.ins_deel_opmerking,
          DECODE (rd.res_ins_deel_key, NULL, 'N', 'J') reserveerbaar,
          rd.res_deel_eenheid,
          rd.res_deel_prijs,
          rg.alg_locatie_code,
          (SELECT alg_gebouw_code FROM alg_gebouw WHERE 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,
          rdi.ins_discipline_omschrijving,
          (SELECT prs_kostensoort_oms FROM prs_kostensoort WHERE prs_kostensoort_key = rdi.prs_kostensoort_key)
             cataloguskostensoort
     FROM ins_deel d,
          ins_srtdeel sd,
          ins_srtgroep sg,
          ins_discipline di,
          alg_v_ruimte_gegevens rg,
          (SELECT * FROM res_deel WHERE res_deel_verwijder IS NULL) rd,
          res_discipline rdi
    WHERE d.ins_deel_verwijder IS NULL
          AND d.ins_alg_ruimte_type = 'R'
          AND d.ins_srtdeel_key = sd.ins_srtdeel_key
          AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
          AND sg.ins_discipline_key = di.ins_discipline_key
          AND d.ins_alg_ruimte_key = rg.alg_ruimte_key
          AND d.ins_deel_key = rd.res_ins_deel_key(+)
          AND rd.res_discipline_key = rdi.ins_discipline_key(+);

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

-- 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_afdeling a
     WHERE     a.prs_afdeling_verwijder IS NULL
           AND a.prs_afdeling_parentkey IS NULL;

-- 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_afdeling a
     WHERE     p.prs_afdeling_key = af.prs_afdeling_key
           AND af.niveau = 1
           AND af.prs_afdeling_elder_key = a.prs_afdeling_key
           AND a.prs_afdeling_verwijder IS NULL;

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

-- 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 b.prs_bedrijf_key, b.prs_bedrijf_naam
          FROM prs_bedrijf b
         WHERE b.prs_bedrijf_intern IS NULL
               AND b.prs_leverancier_nr IS NOT NULL
               AND NOT EXISTS (SELECT 1
                                 FROM rwsn_imp_partners
                                WHERE contractant = b.prs_leverancier_nr)
      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 (TO_CHAR (SUBSTR (m.mld_melding_omschrijving, 1, 4000)), 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,
   ruimteopst_verwijder,
   opstelling_verwijder
)
AS
   SELECT r.res_ruimte_nr fclt_f_ruimtenaam,
          r.res_ruimte_key ruimte_key,
          o.res_opstelling_omschrijving opstelling,
          ro.res_ruimte_opstel_key opstel_key,
          ro.res_ruimte_opstel_bezoekers aantal_bezoekers,
          ro.res_ruimte_opstel_verwijder,
          o.res_opstelling_verwijder
     FROM res_v_aanwezigruimte r,
          res_ruimte_opstelling ro,
          res_opstelling 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,
   ruimteopst_verwijder,
   opstelling_verwijder
)
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.res_opstelling_omschrijving opstelling,
          y.res_ruimte_opstel_key opstel_key,
          y.res_ruimte_opstel_bezoekers aantal_bezoekers,
          z.alg_locatie_code locatie,
          z.alg_gebouw_code gebouw,
          z.alg_verdieping_code verdieping,
          z.alg_ruimte_nr ruimte,
          y.res_ruimte_opstel_verwijder,
          y.res_opstelling_verwijder
     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,
                            o.res_opstelling_omschrijving,
                            ro.res_ruimte_opstel_key,
                            ro.res_ruimte_opstel_bezoekers,
                            ro.res_ruimte_opstel_verwijder,
                            o.res_opstelling_verwijder
                       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(+);

-- 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,
          TO_CHAR (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)!
   -- RWSN#57914: Bij invoer rappel-notificatiejob geen auto-afmeldingen meer!
   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.
   -- RWSN#57914: Bij invoer rappel-notificatiejob geen auto-afmeldingen meer!
   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 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;

   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;

-- 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_ins_deel_opmerking);
         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_deel_aanmaak);
         --fac.imp_getfield (v_newline, c_delim, v_ins_deel_vervaldatum);
         --fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal);
         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) = 'OBJECTIDENTIFICATIE'
               --AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING'
               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'
               --AND UPPER (v_ins_deel_aanmaak) = 'INGANGSDATUM'
               --AND UPPER (v_ins_deel_vervaldatum) = 'VERVALDATUM'
               --AND UPPER (v_ins_deel_aantal) = 'AANTAL'
            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 (UPPER (TRIM (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;

-- 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.
-- RWSN#62170: Toevoegen kolommen (en niet meer beperkt tot alleen verwijderde
--             artikelen).
CREATE OR REPLACE VIEW rwsn_v_udr_resdel
(
   res_rsv_artikel_key,
   res_rsv_artikel_aanmaak,
   res_rsv_artikel_levering,
   res_rsv_artikel_verwijder,
   catalogus,
   artikel_key,
   artikel,
   aantal,
   prijs,
   totaal,
   resid,
   res_verwijderd,
   art_verwijderd,
   naam_contact,
   afd1_contact,
   afd_contact,
   naam_host,
   afd1_host,
   afd_host,
   kostenplaats,
   extern_kenmerk,
   opmerking_kcc
)
AS
   SELECT rra.res_rsv_artikel_key,
          rra.res_rsv_artikel_aanmaak,
          rra.res_rsv_artikel_levering,
          rra.res_rsv_artikel_verwijder,
          rd.ins_discipline_omschrijving catalogus,
          ra.res_artikel_key artikel_key,
          ra.res_artikel_omschrijving artikel,
          rra.res_rsv_artikel_aantal aant,
          ra.res_artikel_prijs,
          COALESCE (rra.res_rsv_artikel_prijs, (rra.res_rsv_artikel_aantal * ra.res_artikel_prijs))
             tot,
          TO_CHAR (rrr.res_reservering_key) || '/' || TO_CHAR (rrr.res_rsv_ruimte_volgnr) resid,
          DECODE (rrr.res_rsv_ruimte_verwijder, NULL, 'Nee', 'Ja') reservering_verwijderd,
          DECODE (rra.res_rsv_artikel_verwijder, NULL, 'Nee', 'Ja') artikel_verwijderd,
          pfh.prs_perslid_naam_full naam_host,
          ah1.prs_afdeling_naam || ' - ' || ah1.prs_afdeling_omschrijving
             afd1_host,
          ah.prs_afdeling_naam || ' - ' || ah.prs_afdeling_omschrijving
             afd_host,
          pfc.prs_perslid_naam_full naam_contact,
          ac1.prs_afdeling_naam || ' - ' || ac1.prs_afdeling_omschrijving
             afd1_contact,
          ac.prs_afdeling_naam || ' - ' || ac.prs_afdeling_omschrijving
             afd_contact,
          kp.prs_kostenplaats_omschrijving kostenplaats,
          extern_kenmerk.res_kenmerkreservering_waarde,
          opmerking_kcc.res_kenmerkreservering_waarde
     FROM res_rsv_artikel rra,
          res_artikel ra,
          res_discipline rd,
          res_rsv_ruimte rrr,
          prs_perslid pc,
          prs_perslid ph,
          prs_v_perslid_fullnames pfc,
          prs_v_perslid_fullnames pfh,
          prs_v_afdeling_boom abc,
          prs_afdeling ac1,
          prs_afdeling ac,
          prs_v_afdeling_boom abh,
          prs_afdeling ah1,
          prs_afdeling ah,
          prs_kostenplaats kp,
          (SELECT * FROM res_v_aanwezigkenmerkwaarde WHERE res_kenmerk_key IN (161, 162, 163)) extern_kenmerk,
          (SELECT * FROM res_v_aanwezigkenmerkwaarde WHERE res_kenmerk_key IN (103, 104)) opmerking_kcc
    WHERE rra.res_artikel_key = ra.res_artikel_key
          AND ra.res_discipline_key = rd.ins_discipline_key
          AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
          AND rrr.res_rsv_ruimte_contact_key = pc.prs_perslid_key
          AND pc.prs_perslid_key = pfc.prs_perslid_key
          AND pc.prs_afdeling_key = abc.prs_afdeling_key
          AND abc.prs_afdeling_key1 = ac1.prs_afdeling_key
          AND abc.prs_afdeling_key = ac.prs_afdeling_key
          AND rrr.res_rsv_ruimte_host_key = ph.prs_perslid_key
          AND ph.prs_perslid_key = pfh.prs_perslid_key
          AND ph.prs_afdeling_key = abh.prs_afdeling_key
          AND abh.prs_afdeling_key1 = ah1.prs_afdeling_key
          AND abh.prs_afdeling_key = ah.prs_afdeling_key
          AND rrr.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
          AND rrr.res_rsv_ruimte_key = extern_kenmerk.res_rsv_ruimte_key(+)
          AND rrr.res_rsv_ruimte_key = opmerking_kcc.res_rsv_ruimte_key(+)
          -- AND rra.res_rsv_artikel_verwijder > TRUNC (ADD_MONTHS(SYSDATE,-12), 'yyyy')
          AND rrr.res_rsv_ruimte_tot > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy');


-- 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 zonder vink-velden (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')
                                  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,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 51) kenmerk51,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 52) kenmerk52,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 53) kenmerk53,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 54) kenmerk54,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 55) kenmerk55,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 56) kenmerk56,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 57) kenmerk57,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 58) kenmerk58,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 59) kenmerk59,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 60) kenmerk60,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 61) kenmerk61,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 62) kenmerk62,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 63) kenmerk63,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 64) kenmerk64,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 65) kenmerk65,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 66) kenmerk66,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 67) kenmerk67,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 68) kenmerk68,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 69) kenmerk69,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 70) kenmerk70,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 71) kenmerk71,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 72) kenmerk72,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 73) kenmerk73,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 74) kenmerk74,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 75) kenmerk75,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 76) kenmerk76,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 77) kenmerk77,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 78) kenmerk78,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 79) kenmerk79,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 80) kenmerk80
     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,
          k41.waarde kenmerk41,
          k42.waarde kenmerk42,
          k43.waarde kenmerk43,
          k44.waarde kenmerk44,
          k45.waarde kenmerk45,
          k46.waarde kenmerk46,
          k47.waarde kenmerk47,
          k48.waarde kenmerk48,
          k49.waarde kenmerk49,
          k50.waarde kenmerk50,
          k51.waarde kenmerk51,
          k52.waarde kenmerk52,
          k53.waarde kenmerk53,
          k54.waarde kenmerk54,
          k55.waarde kenmerk55,
          k56.waarde kenmerk56,
          k57.waarde kenmerk57,
          k58.waarde kenmerk58,
          k59.waarde kenmerk59,
          k60.waarde kenmerk60,
          k61.waarde kenmerk61,
          k62.waarde kenmerk62,
          k63.waarde kenmerk63,
          k64.waarde kenmerk64,
          k65.waarde kenmerk65,
          k66.waarde kenmerk66,
          k67.waarde kenmerk67,
          k68.waarde kenmerk68,
          k69.waarde kenmerk69,
          k70.waarde kenmerk70,
          k71.waarde kenmerk71,
          k72.waarde kenmerk72,
          k73.waarde kenmerk73,
          k74.waarde kenmerk74,
          k75.waarde kenmerk75,
          k76.waarde kenmerk76,
          k77.waarde kenmerk77,
          k78.waarde kenmerk78,
          k79.waarde kenmerk79,
          k80.waarde kenmerk80
     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
          LEFT JOIN ok k51 ON x.alg_gebouw_key = k51.alg_onrgoed_key AND k51.vnr = 51
          LEFT JOIN ok k52 ON x.alg_gebouw_key = k52.alg_onrgoed_key AND k52.vnr = 52
          LEFT JOIN ok k53 ON x.alg_gebouw_key = k53.alg_onrgoed_key AND k53.vnr = 53
          LEFT JOIN ok k54 ON x.alg_gebouw_key = k54.alg_onrgoed_key AND k54.vnr = 54
          LEFT JOIN ok k55 ON x.alg_gebouw_key = k55.alg_onrgoed_key AND k55.vnr = 55
          LEFT JOIN ok k56 ON x.alg_gebouw_key = k56.alg_onrgoed_key AND k56.vnr = 56
          LEFT JOIN ok k57 ON x.alg_gebouw_key = k57.alg_onrgoed_key AND k57.vnr = 57
          LEFT JOIN ok k58 ON x.alg_gebouw_key = k58.alg_onrgoed_key AND k58.vnr = 58
          LEFT JOIN ok k59 ON x.alg_gebouw_key = k59.alg_onrgoed_key AND k59.vnr = 59
          LEFT JOIN ok k60 ON x.alg_gebouw_key = k60.alg_onrgoed_key AND k60.vnr = 60
          LEFT JOIN ok k61 ON x.alg_gebouw_key = k61.alg_onrgoed_key AND k61.vnr = 61
          LEFT JOIN ok k62 ON x.alg_gebouw_key = k62.alg_onrgoed_key AND k62.vnr = 62
          LEFT JOIN ok k63 ON x.alg_gebouw_key = k63.alg_onrgoed_key AND k63.vnr = 63
          LEFT JOIN ok k64 ON x.alg_gebouw_key = k64.alg_onrgoed_key AND k64.vnr = 64
          LEFT JOIN ok k65 ON x.alg_gebouw_key = k65.alg_onrgoed_key AND k65.vnr = 65
          LEFT JOIN ok k66 ON x.alg_gebouw_key = k66.alg_onrgoed_key AND k66.vnr = 66
          LEFT JOIN ok k67 ON x.alg_gebouw_key = k67.alg_onrgoed_key AND k67.vnr = 67
          LEFT JOIN ok k68 ON x.alg_gebouw_key = k68.alg_onrgoed_key AND k68.vnr = 68
          LEFT JOIN ok k69 ON x.alg_gebouw_key = k69.alg_onrgoed_key AND k69.vnr = 69
          LEFT JOIN ok k70 ON x.alg_gebouw_key = k70.alg_onrgoed_key AND k70.vnr = 70
          LEFT JOIN ok k71 ON x.alg_gebouw_key = k71.alg_onrgoed_key AND k71.vnr = 71
          LEFT JOIN ok k72 ON x.alg_gebouw_key = k72.alg_onrgoed_key AND k72.vnr = 72
          LEFT JOIN ok k73 ON x.alg_gebouw_key = k73.alg_onrgoed_key AND k73.vnr = 73
          LEFT JOIN ok k74 ON x.alg_gebouw_key = k74.alg_onrgoed_key AND k74.vnr = 74
          LEFT JOIN ok k75 ON x.alg_gebouw_key = k75.alg_onrgoed_key AND k75.vnr = 75
          LEFT JOIN ok k76 ON x.alg_gebouw_key = k76.alg_onrgoed_key AND k76.vnr = 76
          LEFT JOIN ok k77 ON x.alg_gebouw_key = k77.alg_onrgoed_key AND k77.vnr = 77
          LEFT JOIN ok k78 ON x.alg_gebouw_key = k78.alg_onrgoed_key AND k78.vnr = 78
          LEFT JOIN ok k79 ON x.alg_gebouw_key = k79.alg_onrgoed_key AND k79.vnr = 79
          LEFT JOIN ok k80 ON x.alg_gebouw_key = k80.alg_onrgoed_key AND k80.vnr = 80;

-- RWSN#74240: Gebouwgegevens#2 met alleen vink-velden (tbv. UDR).
CREATE OR REPLACE VIEW rwsn_v_rap_gebouwgeg2
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 = '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,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 51) kenmerk51,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 52) kenmerk52,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 53) kenmerk53,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 54) kenmerk54,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 55) kenmerk55,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 56) kenmerk56,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 57) kenmerk57,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 58) kenmerk58,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 59) kenmerk59,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 60) kenmerk60,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 61) kenmerk61,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 62) kenmerk62,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 63) kenmerk63,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 64) kenmerk64,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 65) kenmerk65,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 66) kenmerk66,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 67) kenmerk67,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 68) kenmerk68,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 69) kenmerk69,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 70) kenmerk70,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 71) kenmerk71,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 72) kenmerk72,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 73) kenmerk73,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 74) kenmerk74,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 75) kenmerk75,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 76) kenmerk76,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 77) kenmerk77,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 78) kenmerk78,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 79) kenmerk79,
          (SELECT MAX (alg_kenmerk_omschrijving) FROM ok WHERE vnr = 80) kenmerk80
     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,
          k41.waarde kenmerk41,
          k42.waarde kenmerk42,
          k43.waarde kenmerk43,
          k44.waarde kenmerk44,
          k45.waarde kenmerk45,
          k46.waarde kenmerk46,
          k47.waarde kenmerk47,
          k48.waarde kenmerk48,
          k49.waarde kenmerk49,
          k50.waarde kenmerk50,
          k51.waarde kenmerk51,
          k52.waarde kenmerk52,
          k53.waarde kenmerk53,
          k54.waarde kenmerk54,
          k55.waarde kenmerk55,
          k56.waarde kenmerk56,
          k57.waarde kenmerk57,
          k58.waarde kenmerk58,
          k59.waarde kenmerk59,
          k60.waarde kenmerk60,
          k61.waarde kenmerk61,
          k62.waarde kenmerk62,
          k63.waarde kenmerk63,
          k64.waarde kenmerk64,
          k65.waarde kenmerk65,
          k66.waarde kenmerk66,
          k67.waarde kenmerk67,
          k68.waarde kenmerk68,
          k69.waarde kenmerk69,
          k70.waarde kenmerk70,
          k71.waarde kenmerk71,
          k72.waarde kenmerk72,
          k73.waarde kenmerk73,
          k74.waarde kenmerk74,
          k75.waarde kenmerk75,
          k76.waarde kenmerk76,
          k77.waarde kenmerk77,
          k78.waarde kenmerk78,
          k79.waarde kenmerk79,
          k80.waarde kenmerk80
     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
          LEFT JOIN ok k51 ON x.alg_gebouw_key = k51.alg_onrgoed_key AND k51.vnr = 51
          LEFT JOIN ok k52 ON x.alg_gebouw_key = k52.alg_onrgoed_key AND k52.vnr = 52
          LEFT JOIN ok k53 ON x.alg_gebouw_key = k53.alg_onrgoed_key AND k53.vnr = 53
          LEFT JOIN ok k54 ON x.alg_gebouw_key = k54.alg_onrgoed_key AND k54.vnr = 54
          LEFT JOIN ok k55 ON x.alg_gebouw_key = k55.alg_onrgoed_key AND k55.vnr = 55
          LEFT JOIN ok k56 ON x.alg_gebouw_key = k56.alg_onrgoed_key AND k56.vnr = 56
          LEFT JOIN ok k57 ON x.alg_gebouw_key = k57.alg_onrgoed_key AND k57.vnr = 57
          LEFT JOIN ok k58 ON x.alg_gebouw_key = k58.alg_onrgoed_key AND k58.vnr = 58
          LEFT JOIN ok k59 ON x.alg_gebouw_key = k59.alg_onrgoed_key AND k59.vnr = 59
          LEFT JOIN ok k60 ON x.alg_gebouw_key = k60.alg_onrgoed_key AND k60.vnr = 60
          LEFT JOIN ok k61 ON x.alg_gebouw_key = k61.alg_onrgoed_key AND k61.vnr = 61
          LEFT JOIN ok k62 ON x.alg_gebouw_key = k62.alg_onrgoed_key AND k62.vnr = 62
          LEFT JOIN ok k63 ON x.alg_gebouw_key = k63.alg_onrgoed_key AND k63.vnr = 63
          LEFT JOIN ok k64 ON x.alg_gebouw_key = k64.alg_onrgoed_key AND k64.vnr = 64
          LEFT JOIN ok k65 ON x.alg_gebouw_key = k65.alg_onrgoed_key AND k65.vnr = 65
          LEFT JOIN ok k66 ON x.alg_gebouw_key = k66.alg_onrgoed_key AND k66.vnr = 66
          LEFT JOIN ok k67 ON x.alg_gebouw_key = k67.alg_onrgoed_key AND k67.vnr = 67
          LEFT JOIN ok k68 ON x.alg_gebouw_key = k68.alg_onrgoed_key AND k68.vnr = 68
          LEFT JOIN ok k69 ON x.alg_gebouw_key = k69.alg_onrgoed_key AND k69.vnr = 69
          LEFT JOIN ok k70 ON x.alg_gebouw_key = k70.alg_onrgoed_key AND k70.vnr = 70
          LEFT JOIN ok k71 ON x.alg_gebouw_key = k71.alg_onrgoed_key AND k71.vnr = 71
          LEFT JOIN ok k72 ON x.alg_gebouw_key = k72.alg_onrgoed_key AND k72.vnr = 72
          LEFT JOIN ok k73 ON x.alg_gebouw_key = k73.alg_onrgoed_key AND k73.vnr = 73
          LEFT JOIN ok k74 ON x.alg_gebouw_key = k74.alg_onrgoed_key AND k74.vnr = 74
          LEFT JOIN ok k75 ON x.alg_gebouw_key = k75.alg_onrgoed_key AND k75.vnr = 75
          LEFT JOIN ok k76 ON x.alg_gebouw_key = k76.alg_onrgoed_key AND k76.vnr = 76
          LEFT JOIN ok k77 ON x.alg_gebouw_key = k77.alg_onrgoed_key AND k77.vnr = 77
          LEFT JOIN ok k78 ON x.alg_gebouw_key = k78.alg_onrgoed_key AND k78.vnr = 78
          LEFT JOIN ok k79 ON x.alg_gebouw_key = k79.alg_onrgoed_key AND k79.vnr = 79
          LEFT JOIN ok k80 ON x.alg_gebouw_key = k80.alg_onrgoed_key AND k80.vnr = 80;

-- 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: Printer-mails!
-- RWSN#83086: LEF-mails!
-- RWSN#87760: Afzender-controle via Eigen tabel met key=2502!
CREATE OR REPLACE PROCEDURE RWSN_processemail (
   pfrom        IN VARCHAR2,
   pto          IN VARCHAR2,
   psubject     IN VARCHAR2,
   pbody        IN VARCHAR2,
   psessionid   IN VARCHAR2,
   pemailkey    IN NUMBER)
AS
   -- Printer-Soortmelding=8357 onder Vakgroep=274 onder Vakgroeptype=1!
   c_fd_stdmld_key       NUMBER (10) := 11961; -- Soortmelding=11961=E-mail Algemeen onder Vakgroep=681=MP-FI KCC onder Vakgroeptype=3=KCC!
   c_esize_stdmld_key    NUMBER (10) := 11962; -- Soortmelding=11962=E-mail Algemeen onder Vakgroep=941=MP-EBF Workforce onder Vakgroeptype=3=KCC!
   c_digin_stdmld_key    NUMBER (10) := 11963; -- Soortmelding=11963=E-mail Algemeen onder Vakgroep=3221=MP-EBF DigiInkoop onder Vakgroeptype=3=KCC!
   c_lef_stdmld_key      NUMBER (10) := 16861; -- Soortmelding=11963=E-mail Algemeen onder Vakgroep=3221=MP-EBF DigiInkoop onder Vakgroeptype=3=KCC!
   c_ext_melder_key      NUMBER (10) := 13760;                 -- EXTERN Overig
   v_errormsg            VARCHAR2 (1000);
   oracle_err_num        NUMBER;
   oracle_err_mes        VARCHAR2 (200);
   v_ci                  VARCHAR2 (255) := '';
   v_perslid_key         NUMBER (10) := NULL;
   v_kostenplaats_key    NUMBER (10) := NULL;
   v_onderwerp           VARCHAR2 (255) := '';
   v_discipline_key      NUMBER (10) := NULL;
   v_stdmelding_key      NUMBER (10) := NULL;
   --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_email               VARCHAR2 (255) := '';
   v_bodypart            VARCHAR2 (4000) := '';
   v_email_kkey          NUMBER (10) := NULL;
   v_folder_kkey         NUMBER (10) := NULL;
   v_startnext           VARCHAR2 (4000) := '';
   v_nextpos             NUMBER (10) := NULL;
   v_aanvrager           VARCHAR2 (4000) := '';
   v_opdrachtgever       VARCHAR2 (4000) := '';
   v_organisatie         VARCHAR2 (4000) := '';
   v_email1              VARCHAR2 (4000) := '';
   v_email2              VARCHAR2 (4000) := '';
   v_telefoonnr          VARCHAR2 (4000) := '';
   v_vraagstuk           VARCHAR2 (4000) := '';
   v_doelstelling        VARCHAR2 (4000) := '';
   v_aantal              VARCHAR2 (4000) := '';
   v_datum               VARCHAR2 (4000) := '';
   v_srtkenmerk_type     VARCHAR2 (255) := '';
   v_srtkenmerk_lengte   NUMBER (10) := NULL;
   v_count               NUMBER (10) := NULL;
BEGIN
   CASE
      WHEN UPPER (pto) LIKE 'PRINTER.FACILITOR@%'
      THEN
         -- Afzender-controle obv. configuratie in Eigen tabel (met key=2502)!
         v_errormsg := 'Fout bepalen afzender';
         SELECT COUNT (*)
           INTO v_count
           FROM fac_usrdata
          WHERE fac_usrtab_key = 2502
                AND UPPER (TRIM (fac_usrdata_omschr)) = UPPER (SUBSTR (pto, 1, INSTR (pto, '@') - 1))
                AND (fac_usrdata_omschr2 IS NULL OR UPPER (TRIM (fac_usrdata_omschr2)) = UPPER (pfrom));

         IF v_count = 1
         THEN
            v_errormsg := 'Fout bepalen printer';
            v_ci := SUBSTR (psubject, INSTR (UPPER (psubject), 'EX')) || '#';
            IF SUBSTR (UPPER (v_ci), 1, 2) = 'EX'
            THEN
               v_ci := SUBSTR (v_ci, 1, REGEXP_INSTR (SUBSTR (v_ci, 3), '\D') + 1); -- Gedeelte tot eerste niet-cijfer na 'EX'!
            ELSE
               v_ci := '';
            END IF;

            -- 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 de afgesproken soortmelding met key=5462 (was 8357).
            v_errormsg := 'Fout bepalen Printer-soortmelding';
            SELECT mld_ins_discipline_key, mld_stdmelding_key
              INTO v_discipline_key, v_stdmelding_key
              FROM mld_discipline md, mld_stdmelding sm
             WHERE sm.mld_stdmelding_key = 5462       -- Bijvullen kopi�ren/printen
                   AND sm.mld_ins_discipline_key = md.ins_discipline_key
                   --AND md.ins_srtdiscipline_key = 1                 -- Facilitair
                   AND md.ins_discipline_verwijder IS NULL;

            -- 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, -- TODO:TO_CLOB???
                                     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 ' || TO_CHAR (v_melding_key));
         ELSE
            -- Ignore afzender.
            INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                 VALUES (psessionid, 'errormsg', 'Afzender [' || pfrom || '] ongeldig - Neem contact op met uw systeembeheerder');
         END IF;
      WHEN UPPER (pto) LIKE ('FD.FACILITOR@%') -- RWSN#55808/RWSN#62233: Eerst EBD, daarna FD
           OR UPPER (pto) LIKE ('ESIZE.FACILITOR@%')
           OR UPPER (pto) LIKE ('DIGIINKOOP.FACILITOR@%')
      THEN
         -- VERVALLEN: Negeer mails anders dan vanaf 'KCC@RWS.NL' (was 'MAILS.FD.EBFD@RWS.NL')!
         -- Afzender-controle obv. configuratie in Eigen tabel (met key=2502)!
         v_errormsg := 'Fout bepalen afzender';
         SELECT COUNT (*)
           INTO v_count
           FROM fac_usrdata
          WHERE fac_usrtab_key = 2502
                AND UPPER (TRIM (fac_usrdata_omschr)) = UPPER (SUBSTR (pto, 1, INSTR (pto, '@') - 1))
                AND (fac_usrdata_omschr2 IS NULL OR UPPER (TRIM (fac_usrdata_omschr2)) = UPPER (pfrom));

         IF v_count = 1
         THEN
            IF UPPER (pto) LIKE ('FD.FACILITOR@%')
            THEN
               v_stdmelding_key := c_fd_stdmld_key;
            ELSIF UPPER (pto) LIKE ('ESIZE.FACILITOR@%')
            THEN
               v_stdmelding_key := c_esize_stdmld_key;
            ELSE                -- UPPER (pto) LIKE ('DIGIINKOOP.FACILITOR@%')
               v_stdmelding_key := c_digin_stdmld_key;
            END IF;

            v_errormsg := 'Fout bepalen E-mail';
            v_email := '';
            v_bodypart := SUBSTR (pbody, 1, 4000);
            WHILE v_email IS NULL AND INSTR (v_bodypart, '<') > 0
            LOOP
               v_bodypart := SUBSTR (v_bodypart, INSTR (v_bodypart, '<'));
               IF INSTR (v_bodypart, '>') > 0 AND INSTR (v_bodypart, '>') < INSTR (REPLACE (REPLACE (v_bodypart, CHR (13), '#'), CHR (10), '#') || '#', '#') -- Staan < en > op dezelfde regel?
               THEN
                  v_email := TRIM (SUBSTR (v_bodypart, 2, INSTR (v_bodypart, '>') - 2)); -- v_email=gedeelte tussen < en > op dezelfde regel!
               ELSE
                  v_bodypart := SUBSTR (v_bodypart, 2); -- Skip < op positie 1 en zoek naar het volgende voorkomen van < in de rest van body!
               END IF;
            END LOOP;

            -- Bepaal de afgesproken melder.
            v_errormsg := 'Fout bepalen externe melder';
              SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (g1.alg_locatie_key)
                INTO v_perslid_key, v_kostenplaats_key, v_locatie_key
                FROM prs_v_aanwezigperslid p, prs_afdeling a, prs_perslidwerkplek pw1, prs_werkplek wp1, alg_ruimte r1, alg_verdieping v1, alg_gebouw g1
               WHERE p.prs_afdeling_key = a.prs_afdeling_key
                     AND p.prs_perslid_key = c_ext_melder_key
                     AND p.prs_perslid_key = pw1.prs_perslid_key(+)
                     AND pw1.prs_werkplek_key = wp1.prs_werkplek_key(+)
                     AND wp1.prs_alg_ruimte_key = r1.alg_ruimte_key(+)
                     AND r1.alg_verdieping_key = v1.alg_verdieping_key(+)
                     AND v1.alg_gebouw_key = g1.alg_gebouw_key(+)
                     AND NOT EXISTS
                           (SELECT 1
                              FROM prs_perslidwerkplek pw2, prs_werkplek wp2, alg_ruimte r2, alg_verdieping v2, alg_gebouw g2
                             WHERE pw2.prs_perslid_key = c_ext_melder_key
                                   AND pw2.prs_werkplek_key = wp2.prs_werkplek_key
                                   AND wp2.prs_alg_ruimte_key = r2.alg_ruimte_key
                                   AND r2.alg_verdieping_key = v2.alg_verdieping_key
                                   AND v2.alg_gebouw_key = g2.alg_gebouw_key
                                   AND pw2.prs_werkplek_key != pw1.prs_werkplek_key
                                   AND pw2.prs_perslidwerkplek_bezetting > pw1.prs_perslidwerkplek_bezetting)
            GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key;

            -- Bepaal de afgesproken soortmelding voor deze stroom.
            v_errormsg := 'Fout bepalen soortmelding';
            SELECT mld_ins_discipline_key
              INTO v_discipline_key
              FROM mld_stdmelding
             WHERE mld_stdmelding_key = v_stdmelding_key;

            -- 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 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, -- TODO:TO_CLOB???
                                     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,
                                     mld_melding_behandelaar2_key)
                VALUES ('MLD',
                        4,                                            -- email
                        COALESCE (v_locatie_key, 82), -- Westraven als locatie niet kan worden bepaald?
                        NULL,                                --v_onrgoed_keys,
                        SYSDATE,
                        pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000),
                        v_stdmelding_key,
                        NULL,
                        v_kostenplaats_key,
                        v_perslid_key,
                        v_perslid_key,
                        NULL,
                        3,                                     -- prio normaal
                        SUBSTR (psubject, 1, 80),
                        NULL)
             RETURNING mld_melding_key
                  INTO v_melding_key;

            v_errormsg := 'Fout bepalen E-mail kenmerk';
            SELECT MIN (k.mld_kenmerk_key)
              INTO v_email_kkey
              FROM mld_stdmelding sm, ins_tab_discipline td, mld_kenmerk k--, mld_srtkenmerk sk
             WHERE sm.mld_stdmelding_key = v_stdmelding_key
                   AND sm.mld_ins_discipline_key = td.ins_discipline_key
                   AND k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_srtkenmerk_key = 20                    -- E-mail
                   --AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   --AND sk.mld_srtkenmerk_kenmerktype = 'C'
                   AND ((k.mld_stdmelding_key = sm.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S')
                         OR (k.mld_stdmelding_key = td.ins_discipline_key AND k.mld_kenmerk_niveau = 'D')
                         OR (k.mld_stdmelding_key = td.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T'));

            IF v_email_kkey IS NOT NULL
            THEN
               v_errormsg := 'Fout toevoegen E-mail kenmerk';
               INSERT INTO mld_kenmerkmelding (mld_melding_key,
                                               mld_kenmerk_key,
                                               mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key,
                           v_email_kkey,                             -- E-mail
                           SUBSTR (v_email, 1, 49));
            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 ' || TO_CHAR (v_melding_key));

            -- Find the lowest volgnummer of a Folder-flexfield.
            v_errormsg := 'Fout bepalen Folder kenmerk';
            SELECT MIN (k1.mld_kenmerk_key)
              INTO v_folder_kkey
              FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1
              WHERE sm1.mld_stdmelding_key = v_stdmelding_key
                   AND sm1.mld_ins_discipline_key = td1.ins_discipline_key
                   AND k1.mld_kenmerk_verwijder IS NULL
                   AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
                   AND sk1.mld_srtkenmerk_kenmerktype = 'M'
                   AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S')
                         OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D')
                         OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T'))
                   AND NOT EXISTS
                          (SELECT 1
                             FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2
                            WHERE sm2.mld_stdmelding_key = v_stdmelding_key
                                  AND sm2.mld_ins_discipline_key = td2.ins_discipline_key
                                  AND k2.mld_kenmerk_verwijder IS NULL
                                  AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
                                  AND sk2.mld_srtkenmerk_kenmerktype = 'M'
                                  AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S')
                                       OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D')
                                       OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T'))
                                  AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer);

            IF v_folder_kkey IS NOT NULL
            THEN
               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                  VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || TO_CHAR (v_melding_key) || '\' || TO_CHAR (v_folder_kkey) || '\');
            END IF;

            -- Handle workflow actions for completion (in case of new melding).
            IF v_count = 0
            THEN
               MLD.mld_nextworkflowstep (v_melding_key, -1);     -- -1=Initial
            END IF;
         ELSE
            -- Ignore afzender.
            INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                VALUES (psessionid, 'errormsg', 'Afzender [' || pfrom || '] ongeldig - Neem contact op met uw systeembeheerder');
         END IF;
      WHEN UPPER (pto) LIKE 'LEF@%'
      THEN
         -- Afzender-controle obv. configuratie in Eigen tabel (met key=2502)!
         v_errormsg := 'Fout bepalen afzender';
         SELECT COUNT (*)
           INTO v_count
           FROM fac_usrdata
          WHERE fac_usrtab_key = 2502
                AND UPPER (TRIM (fac_usrdata_omschr)) = UPPER (SUBSTR (pto, 1, INSTR (pto, '@') - 1))
                AND (fac_usrdata_omschr2 IS NULL OR UPPER (TRIM (fac_usrdata_omschr2)) = UPPER (pfrom));

         IF v_count = 1
         THEN
            -- Bepaal persoon met loginnaam _HMAIL_LEF.
            v_errormsg := 'Fout bepalen LEF-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 LEF'
                   AND p.prs_afdeling_key = a.prs_afdeling_key;

            v_errormsg := 'Fout bepalen LEF-onderwerp';
            v_onderwerp := psubject;

            -- Bepaal de afgesproken soortmelding voor deze stroom.
            v_errormsg := 'Fout bepalen LEF-soortmelding';
            v_stdmelding_key := c_lef_stdmld_key;
            SELECT mld_ins_discipline_key
              INTO v_discipline_key
              FROM mld_stdmelding
             WHERE mld_stdmelding_verwijder IS NULL
                   AND COALESCE (mld_stdmelding_vervaldatum, SYSDATE + 1) > SYSDATE
                   AND mld_stdmelding_key = v_stdmelding_key;
/*
            Formuliervelden (letterlijk):
            64608=Naam aanvrager
            64609=Naam opdrachtgever
            64628=Bedrijf/organisatie
            64648=E-mail
            64649=E-mail (opnieuw invullen)
            64650=Telefoonnummer
            64651=Vraagstuk
            64652=Doelstelling (wat wil je bereiken)
            64653=Aantal deelnemers (geschat)
            64654=Gewenste datum voor de sessie (dd-mm-jjjj)
*/
            v_startnext := REGEXP_REPLACE (pbody, '\s', ' ');

            -- Bepaal 'Naam aanvrager' uit body ter vulling van kenmerk met key=64608!
            v_errormsg := 'Fout bepalen Naam aanvrager';
            IF INSTR (UPPER (v_startnext), 'NAAM AANVRAGER') = 0
               OR INSTR (UPPER (v_startnext), 'NAAM OPDRACHTGEVER') = 0
               OR INSTR (UPPER (v_startnext), 'NAAM OPDRACHTGEVER') < INSTR (UPPER (v_startnext), 'NAAM AANVRAGER')
            THEN
              RETURN;
            ELSE
               v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'NAAM AANVRAGER') + 14));
               v_aanvrager := TRIM (SUBSTR (v_startnext, 1, INSTR (UPPER (v_startnext), 'NAAM OPDRACHTGEVER') - 1));
            END IF;

            -- Bepaal 'Naam opdrachtgever' uit body ter vulling van kenmerk met key=64609!
            v_errormsg := 'Fout bepalen Naam opdrachtgever';
            IF INSTR (UPPER (v_startnext), 'NAAM OPDRACHTGEVER') = 0
               OR INSTR (UPPER (v_startnext), 'BEDRIJF/ORGANISATIE') = 0
               OR INSTR (UPPER (v_startnext), 'BEDRIJF/ORGANISATIE') < INSTR (UPPER (v_startnext), 'NAAM OPDRACHTGEVER')
            THEN
              RETURN;
            ELSE
               v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'NAAM OPDRACHTGEVER') + 18));
               v_opdrachtgever := TRIM (SUBSTR (v_startnext, 1, INSTR (UPPER (v_startnext), 'BEDRIJF/ORGANISATIE') - 1));
            END IF;

            -- Bepaal 'Bedrijf/organisatie' uit body ter vulling van kenmerk met key=64628!
            v_errormsg := 'Fout bepalen Bedrijf/organisatie';
            IF INSTR (UPPER (v_startnext), 'BEDRIJF/ORGANISATIE') = 0
               OR INSTR (UPPER (v_startnext), 'E-MAIL') = 0
               OR INSTR (UPPER (v_startnext), 'E-MAIL') < INSTR (UPPER (v_startnext), 'BEDRIJF/ORGANISATIE')
            THEN
              RETURN;
            ELSE
               v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'BEDRIJF/ORGANISATIE') + 19));
               v_organisatie := TRIM (SUBSTR (v_startnext, 1, INSTR (UPPER (v_startnext), 'E-MAIL') - 1));
            END IF;

            -- Bepaal 'E-mail' uit body ter vulling van kenmerk met key=64648!
            v_errormsg := 'Fout bepalen E-mail';
            IF INSTR (UPPER (v_startnext), 'E-MAIL') = 0
               OR INSTR (UPPER (v_startnext), 'E-MAIL (OPNIEUW INVULLEN)') = 0
               OR INSTR (UPPER (v_startnext), 'E-MAIL (OPNIEUW INVULLEN)') < INSTR (UPPER (v_startnext), 'E-MAIL')
            THEN
              RETURN;
            ELSE
               v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'E-MAIL') + 6));
               v_email1 := TRIM (SUBSTR (v_startnext, 1, INSTR (UPPER (v_startnext), 'E-MAIL (OPNIEUW INVULLEN)') - 1));
            END IF;

            -- Bepaal 'E-mail (opnieuw invullen)' uit body ter vulling van kenmerk met key=64649!
            v_errormsg := 'Fout bepalen E-mail (opnieuw invullen)';
            IF INSTR (UPPER (v_startnext), 'E-MAIL (OPNIEUW INVULLEN)') = 0
               OR INSTR (UPPER (v_startnext), 'TELEFOONNUMMER') = 0
               OR INSTR (UPPER (v_startnext), 'TELEFOONNUMMER') < INSTR (UPPER (v_startnext), 'E-MAIL (OPNIEUW INVULLEN)')
            THEN
              RETURN;
            ELSE
               v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'E-MAIL (OPNIEUW INVULLEN)') + 25));
               v_email2 := TRIM (SUBSTR (v_startnext, 1, INSTR (UPPER (v_startnext), 'TELEFOONNUMMER') - 1));
            END IF;

            -- Bepaal 'Telefoonnummer' uit body ter vulling van kenmerk met key=64650!
            v_errormsg := 'Fout bepalen Telefoonnummer';
            IF INSTR (UPPER (v_startnext), 'TELEFOONNUMMER') = 0
               OR INSTR (UPPER (v_startnext), 'VRAAGSTUK') = 0
               OR INSTR (UPPER (v_startnext), 'VRAAGSTUK') < INSTR (UPPER (v_startnext), 'TELEFOONNUMMER')
            THEN
              RETURN;
            ELSE
               v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'TELEFOONNUMMER') + 14));
               v_telefoonnr := TRIM (SUBSTR (v_startnext, 1, INSTR (UPPER (v_startnext), 'VRAAGSTUK') - 1));
            END IF;

            -- Bepaal 'Vraagstuk' uit body ter vulling van kenmerk met key=64651!
            v_errormsg := 'Fout bepalen Vraagstuk';
            v_startnext := TRIM (SUBSTR (v_startnext, INSTR (UPPER (v_startnext), 'VRAAGSTUK') + 9));
            v_nextpos := LEAST (INSTR (UPPER (v_startnext), 'DOELSTELLING (WAT WIL JE BEREIKEN)'),
                                INSTR (UPPER (v_startnext), 'AANTAL DEELNEMERS (GESCHAT)'),
                                INSTR (UPPER (v_startnext), 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)'));
            IF v_nextpos = 0
            THEN
               v_vraagstuk := TRIM (SUBSTR (v_startnext, 1));
            ELSE                                              -- v_nextpos > 0
               v_vraagstuk := TRIM (SUBSTR (v_startnext, 1, v_nextpos - 1));
            END IF;

            -- Bepaal 'Optioneel1' uit body ter vulling van kenmerk met key=64652, 64653 of 64654!
            v_errormsg := 'Fout bepalen Optioneel1';
            v_startnext := TRIM (SUBSTR (v_startnext, v_nextpos));
            IF UPPER (v_startnext) LIKE 'DOELSTELLING (WAT WIL JE BEREIKEN)%'
            THEN
               v_startnext := TRIM (SUBSTR (v_startnext, 34 + 1));
               v_nextpos := LEAST (INSTR (UPPER (v_startnext), 'AANTAL DEELNEMERS (GESCHAT)'),
                                   INSTR (UPPER (v_startnext), 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)'));
               IF v_nextpos = 0
               THEN
                  v_doelstelling := TRIM (SUBSTR (v_startnext, 1));
               ELSE                                           -- v_nextpos > 0
                  v_doelstelling := TRIM (SUBSTR (v_startnext, 1, v_nextpos - 1));
               END IF;
            ELSIF UPPER (v_startnext) LIKE 'AANTAL DEELNEMERS (GESCHAT)%'
            THEN
               v_startnext := TRIM (SUBSTR (v_startnext, 27 + 1));
               v_nextpos := INSTR (UPPER (v_startnext), 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)');
               IF v_nextpos = 0
               THEN
                  v_aantal := TRIM (SUBSTR (v_startnext, 1));
               ELSE                                           -- v_nextpos > 0
                  v_aantal := TRIM (SUBSTR (v_startnext, 1, v_nextpos - 1));
               END IF;
            ELSIF UPPER (v_startnext) LIKE 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)%'
            THEN
               v_startnext := TRIM (SUBSTR (v_startnext, 42 + 1));
               v_nextpos := 0;
               v_datum := TRIM (SUBSTR (v_startnext, 1));
            END IF;

            -- Bepaal 'Optioneel2' uit body ter vulling van kenmerk met key=64653 of 64654!
            v_errormsg := 'Fout bepalen Optioneel2';
            v_startnext := TRIM (SUBSTR (v_startnext, v_nextpos));
            IF UPPER (v_startnext) LIKE 'AANTAL DEELNEMERS (GESCHAT)%'
            THEN
               v_startnext := TRIM (SUBSTR (v_startnext, 27 + 1));
               v_nextpos := INSTR (UPPER (v_startnext), 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)');
               IF v_nextpos = 0
               THEN
                  v_aantal := TRIM (SUBSTR (v_startnext, 1));
               ELSE                                           -- v_nextpos > 0
                  v_aantal := TRIM (SUBSTR (v_startnext, 1, v_nextpos - 1));
               END IF;
            ELSIF UPPER (v_startnext) LIKE 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)%'
            THEN
               v_startnext := TRIM (SUBSTR (v_startnext, 42 + 1));
               v_nextpos := 0;
               v_datum := TRIM (SUBSTR (v_startnext, 1));
            END IF;

            -- Bepaal 'Optioneel3' uit body ter vulling van kenmerk met key=64654!
            v_errormsg := 'Fout bepalen Optioneel3';
            v_startnext := TRIM (SUBSTR (v_startnext, v_nextpos));
            IF UPPER (v_startnext) LIKE 'GEWENSTE DATUM VOOR DE SESSIE (DD-MM-JJJJ)%'
            THEN
               v_startnext := TRIM (SUBSTR (v_startnext, 42 + 1));
               v_nextpos := 0;
               v_datum := TRIM (SUBSTR (v_startnext, 1));
            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 LEF-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, -- TODO:TO_CLOB???
                                     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
                        NULL,                            -- TODO:Geen locatie?
                        NULL,
                        SYSDATE,
                        --SUBSTR (pfrom || CHR (13) || CHR (10) || pbody, 1, 4000),
                        SUBSTR (v_aanvrager
                                || CHR (13) || CHR (10) || v_opdrachtgever
                                || CHR (13) || CHR (10) || v_organisatie
                                || CHR (13) || CHR (10) || v_email1
                                || CHR (13) || CHR (10) || v_email2
                                || CHR (13) || CHR (10) || v_telefoonnr
                                || CHR (13) || CHR (10) || v_vraagstuk
                                || CHR (13) || CHR (10) || v_doelstelling
                                || CHR (13) || CHR (10) || v_aantal
                                || CHR (13) || CHR (10) || v_datum,
                                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;
/*
            Formuliervelden (letterlijk):
            64608=Naam aanvrager
            64609=Naam opdrachtgever
            64628=Bedrijf/organisatie
            64648=E-mail
            64649=E-mail (opnieuw invullen)
            64650=Telefoonnummer
            64651=Vraagstuk
            64652=Doelstelling (wat wil je bereiken)
            64653=Aantal deelnemers (geschat)
            64654=Gewenste datum voor de sessie (dd-mm-jjjj)
*/
            -- Aanname dat kenmerken bestaan en verplichte waarden zijn bepaald!
            v_errormsg := 'Fout toevoegen kenmerk Naam aanvrager';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64608
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_aanvrager IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64608, SUBSTR (v_aanvrager, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Naam opdrachtgever';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64609
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_opdrachtgever IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64609, SUBSTR (v_opdrachtgever, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Bedrijf/organisatie';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64628
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_organisatie IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64628, SUBSTR (v_organisatie, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk E-mail';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64648
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_email1 IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64648, SUBSTR (v_email1, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk E-mail (opnieuw invullen)';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64649
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_email2 IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64649, SUBSTR (v_email2, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Telefoonnummer';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64650
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_telefoonnr IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64650, SUBSTR (v_telefoonnr, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Vraagstuk';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64651
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_vraagstuk IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64651, SUBSTR (v_vraagstuk, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Doelstelling (wat wil je bereiken)';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64652
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_doelstelling IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64652, SUBSTR (v_doelstelling, 1, v_srtkenmerk_lengte));
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Aantal deelnemers (geschat)';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype)
              INTO v_srtkenmerk_type
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64653
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'N' AND fac.safe_to_number (v_aantal) IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64653, v_aantal);
            END IF;

            v_errormsg := 'Fout toevoegen kenmerk Gewenste datum voor de sessie (dd-mm-jjjj)';
            SELECT MIN (sk.mld_srtkenmerk_kenmerktype), MIN (sk.mld_srtkenmerk_lengte)
              INTO v_srtkenmerk_type, v_srtkenmerk_lengte
              FROM mld_kenmerk k, mld_srtkenmerk sk
             WHERE k.mld_kenmerk_verwijder IS NULL
                   AND k.mld_kenmerk_key = 64654
                   AND k.mld_stdmelding_key = v_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S'
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
            IF v_srtkenmerk_type = 'C' AND v_datum IS NOT NULL
            THEN
               INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                   VALUES (v_melding_key, 64654, SUBSTR (v_datum, 1, v_srtkenmerk_lengte));
            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 ' || TO_CHAR (v_melding_key));

            -- Find the lowest key of a Folder-flexfield.
            v_errormsg := 'Fout toevoegen originele mail';
            SELECT MIN (k1.mld_kenmerk_key)
              INTO v_folder_kkey
              FROM mld_kenmerk k1, mld_srtkenmerk sk1
  	          WHERE k1.mld_kenmerk_verwijder IS NULL
                   AND k1.mld_stdmelding_key = v_stdmelding_key
                   AND k1.mld_kenmerk_niveau = 'S'
                   AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
                   AND sk1.mld_srtkenmerk_kenmerktype = 'M'
                   AND NOT EXISTS
                          (SELECT 1
                             FROM mld_kenmerk k2, mld_srtkenmerk sk2
                            WHERE k2.mld_kenmerk_verwijder IS NULL
                                  AND k2.mld_stdmelding_key = v_stdmelding_key
                                  AND k2.mld_kenmerk_niveau = 'S'
                                  AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
                                  AND sk2.mld_srtkenmerk_kenmerktype = 'M'
                                  AND k2.mld_kenmerk_key < k1.mld_kenmerk_key);

            IF v_folder_kkey IS NOT NULL
            THEN
               INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                   VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || TO_CHAR (v_melding_key) || '\' || TO_CHAR (v_folder_kkey) || '\');
            END IF;
         ELSE
            -- Ignore afzender.
            INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
                 VALUES (psessionid, 'errormsg', 'Afzender [' || pfrom || '] ongeldig - Neem contact op met uw systeembeheerder');
         END IF;
      ELSE
         INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
             VALUES (psessionid, 'errormsg', 'Ontvanger [' || pto || '] 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!
-- RWSN#62073: Toevoegen Opmerking-kolom (en andere kolommen volgens standaard FIP:6-template)!
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,
          'objectidentificatie' objectomschrijving,
          'objectopmerking' objectopmerking,   -- RWSN#62073: Opmerking-kolom!
          'reserveerbaar' reserveerbaar,
          'eenheid' eenheid,
          'prijs' prijs,
          'locatiecode' locatiecode,
          'gebouwcode' gebouwcode,
          'bouwlaagvolgnummer' bouwlaagvolgnummer,
          'ruimtenummer' ruimtenummer,
          'reserveringscope' reserveringscope,
          'catalogusnaam' catalogusnaam,
          'cataloguskostensoort' cataloguskostensoort,
          'persoonmatchcode' persoonmatchcode,
          'persoonmatchwaarde' persoonmatchwaarde,
          'ingangsdatum' ingangsdatum,
          'vervaldatum' vervaldatum,
          'aantal' aantal,
          (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.objectopmerking,                   -- RWSN#62073: Opmerking-kolom!
          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,
          TO_CHAR (x.ingangsdatum, 'dd-mm-yyyy') ingangsdatum,
          TO_CHAR (x.vervaldatum, 'dd-mm-yyyy') vervaldatum,
          TO_CHAR (x.aantal) aantal,
          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,
                  d.ins_deel_opmerking objectopmerking,
                  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,
                  d.ins_deel_aanmaak ingangsdatum,
                  d.ins_deel_vervaldatum vervaldatum,
                  d.ins_deel_aantal aantal
             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      -- Rijdend materieel!
                  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;

-- RWSN#64390: Generieke export van objecten tbv. import (excl. Rijdend materieel en zonder kenmerken)!
CREATE OR REPLACE VIEW rwsn_v_rap_inventaris_expimp
AS
     SELECT x.disciplineomschrijving,
            x.disciplinekostensoort,
            x.groepsoortomschrijving,
            x.objectsoortcode,
            x.objectsoortomschrijving,
            x.objectomschrijving,
            x.objectopmerking,
            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,
            x.persoonmatchcode,
            x.persoonmatchwaarde,
            TO_CHAR (x.ingangsdatum, 'dd-mm-yyyy') ingangsdatum,
            TO_CHAR (x.vervaldatum, 'dd-mm-yyyy') vervaldatum,
            TO_CHAR (x.aantal) aantal
       FROM (SELECT 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,
                    d.ins_deel_opmerking objectopmerking,
                    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,
                    NULL persoonmatchcode,
                    NULL persoonmatchwaarde,
                    d.ins_deel_aanmaak ingangsdatum,
                    d.ins_deel_vervaldatum vervaldatum,
                    d.ins_deel_aantal aantal
               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'    -- 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   -- Rijdend materieel!
                    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(+)
             UNION ALL
             SELECT 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,
                    d.ins_deel_opmerking objectopmerking,
                    DECODE (rd.res_deel_key, NULL, NULL, 'J') reserveerbaar,
                    rd.res_deel_eenheid eenheid,
                    rd.res_deel_prijs prijs,
                    NULL locatiecode,
                    NULL gebouwcode,
                    NULL bouwlaagvolgnummer,
                    NULL 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,
                    DECODE (p.prs_perslid_oslogin, NULL, '3', '2') persoonmatchcode,
                    DECODE (p.prs_perslid_oslogin, NULL, TO_CHAR (p.prs_perslid_key), p.prs_perslid_oslogin) persoonmatchwaarde,
                    d.ins_deel_aanmaak ingangsdatum,
                    d.ins_deel_vervaldatum vervaldatum,
                    d.ins_deel_aantal aantal
               FROM ins_v_aanwezigdeel d,
                    ins_srtdeel sd,
                    ins_srtgroep sg,
                    ins_tab_discipline td1,
                    prs_kostensoort ks1,
                    prs_perslid p,
                    res_v_aanwezigdeel rd,
                    ins_tab_discipline td2,
                    prs_kostensoort ks2
              WHERE d.ins_alg_ruimte_type = 'P'  -- Persoonsgebonden 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   -- Rijdend materieel!
                    AND td1.prs_kostensoort_key = ks1.prs_kostensoort_key(+)
                    AND d.ins_alg_ruimte_key = p.prs_perslid_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(+)
             UNION ALL
               SELECT 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,
                      NULL objectomschrijving,
                      'NIET Ruimte- of persoonsgebonden: ' || TO_CHAR (COUNT ( * )) objectopmerking,
                      NULL reserveerbaar,
                      NULL eenheid,
                      NULL prijs,
                      NULL locatiecode,
                      NULL gebouwcode,
                      NULL bouwlaagvolgnummer,
                      NULL ruimtenummer,
                      NULL reserveringscope,
                      NULL catalogusnaam,
                      NULL cataloguskostensoort,
                      NULL persoonmatchcode,
                      NULL persoonmatchwaarde,
                      NULL ingangsdatum,
                      NULL vervaldatum,
                      COUNT ( * ) aantal
                 FROM ins_v_aanwezigdeel d,
                      ins_srtdeel sd,
                      ins_srtgroep sg,
                      ins_tab_discipline td1,
                      prs_kostensoort ks1
                WHERE d.ins_alg_ruimte_type NOT IN ('R', 'P')
                      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 -- Rijdend materieel!
                      AND td1.prs_kostensoort_key = ks1.prs_kostensoort_key(+)
             GROUP BY td1.ins_discipline_omschrijving,
                      ks1.prs_kostensoort_oms,
                      sg.ins_srtgroep_omschrijving,
                      sd.ins_srtdeel_code,
                      sd.ins_srtdeel_omschrijving) x;

-- RWSN#57914: Reminder naar behandelaar als melding x dagen voor gereeddatum.
/*
          AND SIGN(mld.geteinddatum (
                      m.mld_melding_datum,
                      m.mld_stdmelding_key,
                      m.mld_melding_spoed,
                      NULL,                  -- Plaats binnen/kleiner locatie!
                      NULL,                  -- Object met laagste uitvoertijd
                      MLD_T_UITVOERTIJD (
                         0.7 * m.mld_melding_t_uitvoertijd.tijdsduur,
                         m.mld_melding_t_uitvoertijd.eenheid))
                   - TRUNC (SYSDATE, 'mi')) = -1;
*/
CREATE OR REPLACE VIEW rwsn_v_noti_mld_eind_reminder
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          m.mld_melding_behandelaar_key,
          REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
          m.mld_melding_key,
          NULL
     FROM mld_melding m, mld_stdmelding sm, mld_disc_params dp, fac_srtnotificatie sn
    WHERE m.mld_melding_status IN (4, 7, 99)   -- 4-Geaccepteerd, 7-Uitgegeven
          --AND m.mld_melding_einddatum_std > SYSDATE
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key
          AND dp.mld_disc_params_noti_dagen IS NOT NULL
          --AND TRUNC (SYSDATE + dp.mld_disc_params_noti_dagen) > TRUNC (m.mld_melding_einddatum_std)
          --AND TRUNC (SYSDATE + dp.mld_disc_params_noti_dagen) = TRUNC (m.mld_melding_einddatum)
          AND fac.count_work_days (SYSDATE, m.mld_melding_einddatum) = dp.mld_disc_params_noti_dagen
          AND sn.fac_srtnotificatie_code = 'CUST21'
   UNION ALL
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          m.mld_melding_behandelaar_key,
          REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key),
          m.mld_melding_key,
          NULL
     FROM mld_melding m, mld_stdmelding sm, mld_disc_params dp, fac_srtnotificatie sn
    WHERE m.mld_melding_status IN (4, 7, 99)   -- 4-Geaccepteerd, 7-Uitgegeven
          --AND m.mld_melding_einddatum_std > SYSDATE
          AND m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key
          AND dp.mld_disc_params_noti_dagen IS NOT NULL
          --AND TRUNC (SYSDATE + 1) > TRUNC (m.mld_melding_einddatum_std)
          --AND TRUNC (SYSDATE + 1) = TRUNC (m.mld_melding_einddatum)
          AND dp.mld_disc_params_noti_dagen != 1
          AND fac.count_work_days (SYSDATE, m.mld_melding_einddatum) = 1
          AND sn.fac_srtnotificatie_code = 'CUST22'
;

-- RWSN#67120: Uurlijkse melding-notificaties (oa. CUST23)
CREATE OR REPLACE VIEW FMHN_V_NOTI_MLD_DIVERSEN
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT sn.fac_srtnotificatie_code,
          NULL,
          NULL,
          REPLACE (
             REPLACE (
                sn.fac_srtnotificatie_oms,
                '##ID##',
                TO_CHAR (m.mld_melding_key)),
             '##STDMLD##',
             sm.mld_stdmelding_omschrijving),
          m.mld_melding_key,
          NULL xkey
     FROM mld_melding m,
          mld_stdmelding sm,
          fac_srtnotificatie sn,
          fac_notificatie_job nj
    WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
          AND sm.mld_stdmelding_key = 7721          --  Inleveren ICT-middelen
          AND sn.fac_srtnotificatie_code = 'CUST23'
          AND nj.fac_notificatie_job_view = 'FMHN_V_NOTI_MLD_DIVERSEN'
          AND fac.gettrackingdate ('MLDNEW', m.mld_melding_key) BETWEEN COALESCE (nj.fac_notificatie_job_lastrun,
                                                                                  nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24))
                                                                    AND nj.fac_notificatie_job_nextrun;

-- RWSN#56949: Productie KCC medewerkers (MLD+RES)!
CREATE OR REPLACE VIEW rwsn_v_rap_kcc_productie
(
   medewerker,   -- Persoon onder afdeling 'Afd. Meldingenproces' met key=2867
   module,                                                       -- MLD of RES
   stroom,                                       -- Vakgroeptype of Activiteit
   id,                                        -- ID van Melding of Reservering
   aanmaakdatum,                    -- Aanmaakdatum van Melding of Reservering
   status,                                -- Status van Melding of Reservering
   trackdatum,
   trackcode
)
AS
   SELECT pf.prs_perslid_naam_full medewerker,
          'MLD' module,
          sd.ins_srtdiscipline_omschrijving stroom,
          sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) id,
          fac.gettrackingdate ('MLDNEW', m.mld_melding_key) aanmaakdatum,
          ms.mld_statuses_omschrijving status,
          t.fac_tracking_datum trackdatum,
          sn.fac_srtnotificatie_code
     FROM fac_tracking t,
          fac_srtnotificatie sn,
          mld_melding m,
          mld_stdmelding sm,
          mld_discipline md,
          ins_srtdiscipline sd,
          mld_statuses ms,
          prs_v_aanwezigperslid p,
          prs_v_afdeling_boom ab,
          prs_v_perslid_fullnames pf
    WHERE t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy')
          AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
          AND sn.fac_srtnotificatie_key IN (26, 21, 27, 22, 28) -- MLDNEW/MLDACP/MLDREJ/MLDAFM/MLDUPD
          AND t.fac_tracking_refkey = 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 = sd.ins_srtdiscipline_key
          AND sd.ins_srtdiscipline_key IN (1, 3, 121, 242) -- Facilitair/KCC/Aanleg en Onderhoud/Tijdelijke Capaciteit
          AND m.mld_melding_status = ms.mld_statuses_key(+)
          AND t.prs_perslid_key = p.prs_perslid_key
          AND p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_afdeling_key3 = 2867              -- Afd. Meldingenproces
          AND p.prs_perslid_key = pf.prs_perslid_key
   UNION ALL
   SELECT x.prs_perslid_naam_full medewerker,
          'RES' module,
          x.res_activiteit_omschrijving stroom,
          TO_CHAR (x.res_reservering_key) || '/' || TO_CHAR (x.res_rsv_ruimte_volgnr) id,
          x.res_rsv_ruimte_aanmaak aanmaakdatum,
          (SELECT res_status_bo_omschrijving
             FROM res_status_bo
            WHERE res_status_bo_key = COALESCE (x.res_status_bo_key, ads.status_bo_key))
             status,
          x.fac_tracking_datum trackdatum,
          x.fac_srtnotificatie_code
     FROM (SELECT rrr.res_rsv_ruimte_key,
                  rrr.res_reservering_key,
                  rrr.res_rsv_ruimte_volgnr,
                  rrr.res_rsv_ruimte_aanmaak,
                  rrr.res_status_bo_key,
                  ra.res_activiteit_omschrijving,
                  t.fac_tracking_datum,
                  sn.fac_srtnotificatie_code,
                  pf.prs_perslid_naam_full
             FROM fac_tracking t,
                  fac_srtnotificatie sn,
                  res_rsv_ruimte rrr,
                  res_activiteit ra,
                  prs_v_aanwezigperslid p,
                  prs_v_afdeling_boom ab,
                  prs_v_perslid_fullnames pf
            WHERE t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy')
                  AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                  AND sn.fac_srtnotificatie_key IN (34, 35)   -- RESNEW/RESUPD
                  AND t.fac_tracking_refkey = rrr.res_rsv_ruimte_key
                  AND rrr.res_rsv_ruimte_dirtlevel = 0
                  AND rrr.res_rsv_ruimte_volgnr = 1
                  AND rrr.res_activiteit_key = ra.res_activiteit_key
                  AND t.prs_perslid_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                  AND ab.prs_afdeling_key3 = 2867      -- Afd. Meldingenproces
                  AND p.prs_perslid_key = pf.prs_perslid_key) x
          LEFT JOIN -- Niet meetellen losse Artikel/Deel-reserveringen waar nooit iets bijgeboekt is!
          (  SELECT res_rsv_ruimte_key, MIN (res_status_bo_key) status_bo_key
               FROM (SELECT res_rsv_ruimte_key, res_status_bo_key FROM res_rsv_artikel
                     UNION
                     SELECT res_rsv_ruimte_key, res_status_bo_key FROM res_rsv_deel)
           GROUP BY res_rsv_ruimte_key) ads             -- Artikel/Deel-status
          ON x.res_rsv_ruimte_key = ads.res_rsv_ruimte_key
    WHERE x.res_status_bo_key IS NOT NULL OR ads.res_rsv_ruimte_key IS NOT NULL
   UNION ALL
   SELECT x.prs_perslid_naam_full medewerker,
          'RES' module,
          x.res_activiteit_omschrijving stroom,
          TO_CHAR (x.res_reservering_key) || '/' || TO_CHAR (x.res_rsv_ruimte_volgnr) id,
          x.res_rsv_ruimte_aanmaak aanmaakdatum,
          (SELECT res_status_bo_omschrijving
             FROM res_status_bo
            WHERE res_status_bo_key = COALESCE (x.res_status_bo_key, ads.status_bo_key))
             status,
          x.fac_tracking_datum trackdatum,
          x.fac_srtnotificatie_code
     FROM (SELECT rrr.res_rsv_ruimte_key,
                  rrr.res_reservering_key,
                  rrr.res_rsv_ruimte_volgnr,
                  rrr.res_rsv_ruimte_aanmaak,
                  rrr.res_status_bo_key,
                  ra.res_activiteit_omschrijving,
                  t.fac_tracking_datum,
                  sn.fac_srtnotificatie_code,
                  pf.prs_perslid_naam_full
             FROM fac_tracking t,
                  fac_srtnotificatie sn,
                  res_rsv_ruimte rrr,
                  res_activiteit ra,
                  prs_v_aanwezigperslid p,
                  prs_v_afdeling_boom ab,
                  prs_v_perslid_fullnames pf
            WHERE t.fac_tracking_datum > TRUNC (ADD_MONTHS (SYSDATE, -24), 'yyyy')
                  AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
                  AND sn.fac_srtnotificatie_key = 38                 -- RESDEL
                  AND t.fac_tracking_refkey = rrr.res_rsv_ruimte_key
                  AND rrr.res_rsv_ruimte_dirtlevel = 0
                  AND rrr.res_activiteit_key = ra.res_activiteit_key
                  AND t.prs_perslid_key = p.prs_perslid_key
                  AND p.prs_afdeling_key = ab.prs_afdeling_key
                  AND ab.prs_afdeling_key3 = 2867      -- Afd. Meldingenproces
                  AND p.prs_perslid_key = pf.prs_perslid_key
                  AND NOT EXISTS
                        (SELECT 1
                           FROM res_rsv_ruimte
                          WHERE res_rsv_ruimte_verwijder IS NOT NULL
                                AND res_reservering_key = rrr.res_reservering_key
                                AND res_rsv_ruimte_volgnr < rrr.res_rsv_ruimte_volgnr)) x
          LEFT JOIN -- Niet meetellen losse Artikel/Deel-reserveringen waar nooit iets bijgeboekt is!
          (  SELECT res_rsv_ruimte_key, MIN (res_status_bo_key) status_bo_key
               FROM (SELECT res_rsv_ruimte_key, res_status_bo_key FROM res_rsv_artikel
                     UNION
                     SELECT res_rsv_ruimte_key, res_status_bo_key FROM res_rsv_deel)
           GROUP BY res_rsv_ruimte_key) ads             -- Artikel/Deel-status
          ON x.res_rsv_ruimte_key = ads.res_rsv_ruimte_key
    WHERE x.res_status_bo_key IS NOT NULL OR ads.res_rsv_ruimte_key IS NOT NULL;


-- Views en procedures voor MJOP en Condititiemetingen

-- View om de wijzigingen in conditiescores inzichtelijk te maken.
CREATE OR REPLACE VIEW rwsn_v_rap_track_conditie
AS
SELECT dg.ins_deel_key,
       dg.ins_discipline_omschrijving,
       dg.ins_srtgroep_omschrijving,
       dg.ins_srtdeel_omschrijving,
       dg.ins_srtdeel_upper,
       dg.ins_deel_omschrijving,
       dg.ins_deel_opmerking,
       l.alg_locatie_code,
       l.alg_locatie_omschrijving,
       dg.alg_gebouw_upper,
       dg.alg_gebouw_omschrijving,
       sg.alg_srtgebouw_omschrijving,
       dg.alg_verdieping_code,
       dg.alg_ruimte_nr,
       t.fac_tracking_datum,
       t.fac_tracking_oms
  FROM ins_v_deel_gegevens  dg,
       fac_tracking         t,
       alg_srtgebouw        sg,
       alg_gebouw           g,
       alg_locatie          l
 WHERE     dg.ins_deel_key = t.fac_tracking_refkey
       AND fac_tracking_oms LIKE 'Conditie%'
       AND fac_srtnotificatie_key = 174  -- INSUPD
       AND dg.alg_gebouw_key = g.alg_gebouw_key
       AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key
       AND g.alg_locatie_key = l.alg_locatie_key;

CREATE OR REPLACE VIEW rwsn_v_rap_gebrek_gegevens
AS
SELECT m.mld_melding_key,
       de.ins_deel_key,
       ins_discipline_omschrijving,
       mld_stdmelding_omschrijving,
       mld_melding_omschrijving,
       mld_melding_datum,
       mld_melding_status,
       MLD.getmeldingstatusdate(m.mld_melding_key, 5) afgemeld,   -- MLDAFM
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ERNST'
           AND k.mld_stdmelding_key = std.mld_stdmelding_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) ernst,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'OMVANG'
           AND k.mld_stdmelding_key = std.mld_stdmelding_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) omvang,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'INTENSITEIT'
           AND k.mld_stdmelding_key = std.mld_stdmelding_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) intensiteit,
       (SELECT FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key)
          FROM mld_kenmerk k, mld_srtkenmerk sk
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'CONDITIESCORE'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) conditie,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT1'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect1,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT2'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect2,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT3'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect3,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT4'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect4,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT5'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect5,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT6'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect6,
       (SELECT fac_usrdata_omschr
          FROM mld_kenmerk k, mld_srtkenmerk sk, fac_usrdata ud
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'ASPECT7'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key
           AND FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key) = ud.fac_usrdata_key) aspect7,
       (SELECT FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key)
          FROM mld_kenmerk k, mld_srtkenmerk sk
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'PRIORITEITSCORE'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) prioriteit,
       (SELECT FLX.getflex ('MLD', k.mld_kenmerk_key, m.mld_melding_key)
          FROM mld_kenmerk k, mld_srtkenmerk sk
         WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
           AND sk.mld_srtkenmerk_code = 'KOSTEN'
           AND k.mld_stdmelding_key = d.ins_srtdiscipline_key) kosten,
       de.ins_deel_omschrijving,
       de.ins_deel_opmerking,
       de.ins_deel_mjb_score1,
       de.ins_deel_mjb_score2
  FROM mld_melding         m,
       mld_stdmelding      std,
       ins_tab_discipline  d,
       mld_melding_object  mo,
       ins_deel            de
 WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
       AND std.mld_ins_discipline_key = d.ins_discipline_key
       AND d.ins_srtdiscipline_key = fac.getsetting ('cnd_gebreken_srtdisc_key')
       AND m.mld_melding_key = mo.mld_melding_key
       AND mo.ins_deel_key = de.ins_deel_key
       AND mo.mld_melding_object_verwijder IS NULL;


------------------------------------------
--
-- MJOB specifieke routines
--
------------------------------------------
CREATE OR REPLACE PROCEDURE rwsn_import_ins_elementen (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (2) := fac.import_delimiter(p_import_key);
   v_newline                       fac_imp_file.fac_imp_file_line%TYPE;    -- 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 (400);
   v_dummy                         VARCHAR  (255);
   v_ins_kenmerk_key1              VARCHAR2 (255);
   v_ins_kenmerk_key2              VARCHAR2 (255);
   v_ins_kenmerk_key3              VARCHAR2 (255);
   v_ins_kenmerk_key4              VARCHAR2 (255);
   v_ins_kenmerk_key5              VARCHAR2 (255);
   v_ins_kenmerk_key6              VARCHAR2 (255);
   v_ins_kenmerk_key7              VARCHAR2 (255);
   v_ins_kenmerk_key8              VARCHAR2 (255);
   v_ins_kenmerk_key9              VARCHAR2 (255);
   v_ins_kenmerk_key10             VARCHAR2 (255);
   v_ins_kenmerk_key11             VARCHAR2 (255);
   v_ins_kenmerk_key12             VARCHAR2 (255);
   v_ins_kenmerk_key13             VARCHAR2 (255);
   v_ins_kenmerk_key14             VARCHAR2 (255);
   v_ins_kenmerk_key15             VARCHAR2 (255);
   v_ins_kenmerk_key16             VARCHAR2 (255);
   v_ins_kenmerk_key17             VARCHAR2 (255);
   v_ins_kenmerk_key18             VARCHAR2 (255);
   v_ins_kenmerk_key19             VARCHAR2 (255);
   v_ins_kenmerk_key20             VARCHAR2 (255);
   -- De importvelden
   v_ins_discipline_omschrijving   VARCHAR2 (255);                      -- C60
   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_ins_deel_opmerking            VARCHAR2 (1000);                    -- C320
   v_ins_deel_externnr             VARCHAR2 (255);                      -- C60
   v_alg_locatie_code              VARCHAR2 (255);                      -- C10
   v_alg_gebouw_code               VARCHAR2 (255);                      -- C12
   v_alg_verdieping_volgnr         VARCHAR2 (255);                       -- N3
   v_alg_ruimte_nr                 VARCHAR2 (255);                      -- C20

   v_ins_kenmerkwaarde1            VARCHAR2 (4053);
   v_ins_kenmerkwaarde2            VARCHAR2 (4053);
   v_ins_kenmerkwaarde3            VARCHAR2 (4053);
   v_ins_kenmerkwaarde4            VARCHAR2 (4053);
   v_ins_kenmerkwaarde5            VARCHAR2 (4053);
   v_ins_kenmerkwaarde6            VARCHAR2 (4053);
   v_ins_kenmerkwaarde7            VARCHAR2 (4053);
   v_ins_kenmerkwaarde8            VARCHAR2 (4053);
   v_ins_kenmerkwaarde9            VARCHAR2 (4053);
   v_ins_kenmerkwaarde10           VARCHAR2 (4053);
   v_ins_kenmerkwaarde11           VARCHAR2 (4053);
   v_ins_kenmerkwaarde12           VARCHAR2 (4053);
   v_ins_kenmerkwaarde13           VARCHAR2 (4053);
   v_ins_kenmerkwaarde14           VARCHAR2 (4053);
   v_ins_kenmerkwaarde15           VARCHAR2 (4053);
   v_ins_kenmerkwaarde16           VARCHAR2 (4053);
   v_ins_kenmerkwaarde17           VARCHAR2 (4053);
   v_ins_kenmerkwaarde18           VARCHAR2 (4053);
   v_ins_kenmerkwaarde19           VARCHAR2 (4053);
   v_ins_kenmerkwaarde20           VARCHAR2 (4053);
   v_ins_deel_aanmaak              VARCHAR2 (255);                      -- DATE
   v_ins_deel_aanmaak_d            DATE;
   v_ins_deel_vervaldatum          VARCHAR2 (255);                      -- DATE
   v_ins_deel_vervaldatum_d        DATE;
   v_ins_deel_aantal               VARCHAR2 (255);                      -- N8,2
   v_ins_deel_aantal_n             NUMBER(8, 2);
   v_file_index                    NUMBER;

   v_alg_gebouw_key                NUMBER;
   v_alg_verdieping_key            NUMBER;
   v_alg_ruimte_key                NUMBER;
   v_ins_deel_key                  NUMBER;
   v_ins_srtdeel_key               NUMBER;
   v_ins_srtgroep_key              NUMBER;
   v_ins_discipline_key            NUMBER;
   v_ins_deel_volgnr               NUMBER;
   -- Overige velden:
   CURSOR c1
   IS
        SELECT   *
          FROM   fac_imp_file
         WHERE   fac_import_key = p_import_key
      ORDER BY   fac_imp_file_index;

    CURSOR c IS
          SELECT *
            FROM fac_imp_ins
        ORDER BY alg_gebouw_code, ins_deel_omschrijving;

   -- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key.
   -- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk.
   -- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk.
   -- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen.
   -- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende
   -- object-discipline/groep/soort, volgt pas tijdens de update-fase)!
   --
   -- p_kw is bijvoorbeeld 'Parkeercode', 'Parkeercode|3', 234 of 234|3 waarbij de tweede en laatste in groep 3 zitten
   -- het resultaat is NULL (als niet gevonden) of Parkeercode|3 of 234|3 voor kenmer_key 234 in groep 3
   -- Als geen groep is meegegeven dan wordt 'Parkeercode|0' opgeleverd (de default groep)
   FUNCTION bepaal_kenmerk (p_kw IN VARCHAR)
      RETURN VARCHAR
   IS
      v_kenmerk_key        NUMBER;
      v_kenmerk_groep      NUMBER;
      v_kw                 VARCHAR(250);
   BEGIN
      v_kenmerk_groep := 0;
      v_kw := p_kw;
      IF INSTR (v_kw, '|') > 1
      THEN
        v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
        v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
      END IF;

      IF fac.safe_to_number (v_kw) IS NULL
      THEN                -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
         SELECT MIN(k.ins_kenmerk_key)
           INTO v_kenmerk_key
           FROM ins_v_aanwezigkenmerk k,
                ins_v_aanwezigsrtkenmerk sk
          WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
            AND k.ins_kenmerk_groep = v_kenmerk_groep
            AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kw)
            AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
      ELSE                -- kenmerkwaarde is numeriek (dus key)!
         SELECT k.ins_kenmerk_key
           INTO v_kenmerk_key
           FROM ins_v_aanwezigkenmerk k,
                ins_v_aanwezigsrtkenmerk sk
          WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
            AND k.ins_kenmerk_groep = v_kenmerk_groep
            AND k.ins_kenmerk_key = fac.safe_to_number (v_kw)
            AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'S', 'X', 'B', 'V');
      END IF;

      IF v_kenmerk_key IS NULL
      THEN
         RETURN NULL;
      ELSE
         -- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw)
         RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep);
      END IF;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
         THEN
            RETURN NULL;
         ELSE
            fac.imp_writelog (p_import_key,
                              'W',
                              'Fout bij bepalen kenmerk [' || p_kw || ']',
                              'Bestaat niet of type ongeldig');
            COMMIT;
            RETURN NULL;
         END IF;
   END;

BEGIN
   -- Eerst opruiming
   DELETE FROM   fac_imp_ins;

   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_file_index := rec1.fac_imp_file_index;
         v_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);      -- Objectcode
         fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);     -- Componentcode

         fac.imp_getfield (v_newline, c_delim, v_ins_deel_externnr);    -- Element-ID
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_opmerking);   -- Component omschrijving
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1);   -- Opmerkingen
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2);   -- Fabrikant
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3);   -- Kenmerken
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4);   -- Type
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5);   -- Cap
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde6);   -- Eenheid Cap
         fac.imp_getfield (v_newline, c_delim, v_ins_deel_aantal);      -- Aantal
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde7);   -- Eenheid aantal
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde8);   -- Bouwjaar
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde9);   -- Theoretische Levensduur
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde10);  -- Huidige conditie
         fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde11);  -- Gewenste conditie
         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_alg_gebouw_code
            || '|'
            || v_ins_deel_externnr
            || '|'
            || v_ins_srtdeel_code
            || '] ';

         -- 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_alg_gebouw_code) = 'OBJECTCODE'
               AND UPPER (v_ins_srtdeel_code) = 'ELEMENTCODE RWS'
               AND UPPER (v_ins_deel_externnr) = 'ELEMENT-ID'
               AND UPPER (v_ins_deel_opmerking) = 'ELEMENT OMSCHRIJVING'
               AND UPPER (v_ins_kenmerkwaarde1) = 'OPMERKINGEN'
               AND UPPER (v_ins_kenmerkwaarde2) = 'FABRIKANT'
               AND UPPER (v_ins_kenmerkwaarde3) = 'KENMERKEN'
               AND UPPER (v_ins_kenmerkwaarde4) = 'TYPE'
               AND UPPER (v_ins_kenmerkwaarde5) = 'CAPACITEIT'
               AND UPPER (v_ins_kenmerkwaarde6) = 'EENHEID CAPACITEIT'
               AND UPPER (v_ins_deel_aantal) = 'AANTAL'
               AND UPPER (v_ins_kenmerkwaarde7) = 'EENHEID AANTAL'
               AND UPPER (v_ins_kenmerkwaarde8) = 'BOUWJAAR'
               AND UPPER (v_ins_kenmerkwaarde9) = 'THEORETISCHE LEVENSDUUR'
               AND UPPER (v_ins_kenmerkwaarde10) = 'HUIDIGE CONDITIESCORE'
               AND UPPER (v_ins_kenmerkwaarde11) = 'GEWENSTE CONDITIESCORE'
            THEN
               v_ins_kenmerk_key1  := bepaal_kenmerk (v_ins_kenmerkwaarde1);
               v_ins_kenmerk_key2  := bepaal_kenmerk (v_ins_kenmerkwaarde2);
               v_ins_kenmerk_key3  := bepaal_kenmerk (v_ins_kenmerkwaarde3);
               v_ins_kenmerk_key4  := bepaal_kenmerk (v_ins_kenmerkwaarde4);
               v_ins_kenmerk_key5  := bepaal_kenmerk (v_ins_kenmerkwaarde5);
               v_ins_kenmerk_key6  := bepaal_kenmerk (v_ins_kenmerkwaarde6);
               v_ins_kenmerk_key7  := bepaal_kenmerk (v_ins_kenmerkwaarde7);
               v_ins_kenmerk_key8  := bepaal_kenmerk (v_ins_kenmerkwaarde8);
               v_ins_kenmerk_key9  := bepaal_kenmerk (v_ins_kenmerkwaarde9);
               v_ins_kenmerk_key10 := bepaal_kenmerk (v_ins_kenmerkwaarde10);
               v_ins_kenmerk_key11 := bepaal_kenmerk (v_ins_kenmerkwaarde11);
               v_ins_kenmerk_key12 := bepaal_kenmerk (v_ins_kenmerkwaarde12);
               v_ins_kenmerk_key13 := bepaal_kenmerk (v_ins_kenmerkwaarde13);
               v_ins_kenmerk_key14 := bepaal_kenmerk (v_ins_kenmerkwaarde14);
               v_ins_kenmerk_key15 := bepaal_kenmerk (v_ins_kenmerkwaarde15);
               v_ins_kenmerk_key16 := bepaal_kenmerk (v_ins_kenmerkwaarde16);
               v_ins_kenmerk_key17 := bepaal_kenmerk (v_ins_kenmerkwaarde17);
               v_ins_kenmerk_key18 := bepaal_kenmerk (v_ins_kenmerkwaarde18);
               v_ins_kenmerk_key19 := bepaal_kenmerk (v_ins_kenmerkwaarde19);
               v_ins_kenmerk_key20 := bepaal_kenmerk (v_ins_kenmerkwaarde20);

               header_is_valid := 1;
            ELSE
               IF rec1.fac_imp_file_index = 1
               THEN

                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Ongeldige header aangetroffen:',
                                    'OBJECTCODE: ' || UPPER (v_alg_gebouw_code) || CHR(10) ||
                                    'ELEMENTCODE RWS: ' || UPPER (v_ins_srtdeel_code) || CHR(10) ||
                                    'ELEMENT-ID: ' || UPPER (v_ins_deel_externnr) || CHR(10) ||
                                    'ELEMENT OMSCHRIJVING: ' || UPPER (v_ins_deel_opmerking) || CHR(10) ||
                                    'OPMERKINGEN: ' || UPPER (v_ins_kenmerkwaarde1) || CHR(10) ||
                                    'FABRIKANT: ' || UPPER (v_ins_kenmerkwaarde2) || CHR(10) ||
                                    'KENMERKEN: ' || UPPER (v_ins_kenmerkwaarde3) || CHR(10) ||
                                    'TYPE: ' || UPPER (v_ins_kenmerkwaarde4) || CHR(10) ||
                                    'CAPACITEIT: ' || UPPER (v_ins_kenmerkwaarde5) || CHR(10) ||
                                    'EENHEID CAPACITEIT: ' || UPPER (v_ins_kenmerkwaarde6) || CHR(10) ||
                                    'AANTAL: ' || UPPER (v_ins_deel_aantal) || CHR(10) ||
                                    'EENHEID AANTAL: ' || UPPER (v_ins_kenmerkwaarde7) || CHR(10) ||
                                    'BOUWJAAR: ' || UPPER (v_ins_kenmerkwaarde8) || CHR(10) ||
                                    'THEORETISCHE LEVENSDUUR: ' || UPPER (v_ins_kenmerkwaarde9) || CHR(10) ||
                                    'HUIDIGE CONDITIESCORE: ' || UPPER (v_ins_kenmerkwaarde10) || CHR(10) ||
                                    'GEWENSTE CONDITIESCORE: ' || UPPER (v_ins_kenmerkwaarde11));
                END IF;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            v_errormsg := 'Gebouwcode kan niet gevonden worden';
            v_alg_gebouw_code := TRIM (v_alg_gebouw_code);

            SELECT alg_gebouw_key, alg_locatie_code
              INTO v_alg_gebouw_key, v_alg_locatie_code
              FROM alg_gebouw g, alg_locatie l
             WHERE g.alg_locatie_key = l.alg_locatie_key
               AND alg_gebouw_verwijder IS NULL
               AND UPPER(alg_gebouw_code) = v_alg_gebouw_code;

            v_alg_verdieping_volgnr := 0;
            BEGIN
               SELECT alg_verdieping_key
                 INTO v_alg_verdieping_key
                 FROM alg_verdieping
                WHERE alg_verdieping_verwijder IS NULL
                  AND alg_gebouw_key = v_alg_gebouw_key
                  AND alg_verdieping_volgnr = 0;
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_volgnr, alg_verdieping_omschrijving, alg_verdieping_code)
                      VALUES (v_alg_gebouw_key, 0, '_Begane grond', '0')
                      RETURNING alg_verdieping_key INTO v_alg_verdieping_key;
               fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Verdieping aangemaakt');
            END;

            v_alg_ruimte_nr := '_';
            BEGIN
               SELECT alg_ruimte_key
                 INTO v_alg_ruimte_key
                 FROM alg_ruimte
                WHERE alg_ruimte_verwijder IS NULL
                  AND alg_verdieping_key = v_alg_verdieping_key
                  AND alg_ruimte_nr = '_';
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               INSERT INTO alg_ruimte (alg_verdieping_key, alg_ruimte_nr, alg_ruimte_omschrijving)
                      VALUES (v_alg_verdieping_key, '_', 'MJOP ruimte')
                      RETURNING alg_ruimte_key INTO v_alg_ruimte_key;
               fac.imp_writelog (p_import_key, 'I', v_aanduiding, 'Ruimte aangemaakt');
            END;
            --

            v_errormsg := 'Bepaal objectsoort';
            v_ins_srtdeel_code := TRIM(v_ins_srtdeel_code);
            SELECT ins_srtdeel_omschrijving, ins_srtdeel_key, ins_srtgroep_key
              INTO v_ins_srtdeel_omschrijving, v_ins_srtdeel_key, v_ins_srtgroep_key
              FROM ins_srtdeel
             WHERE ins_srtdeel_verwijder IS NULL
               AND ins_srtdeel_code = v_ins_srtdeel_code;

            v_errormsg := 'Bepaal objectgroep';
            SELECT ins_srtgroep_omschrijving, ins_discipline_key
              INTO v_ins_srtgroep_omschrijving, v_ins_discipline_key
              FROM ins_srtgroep
             WHERE ins_srtgroep_key = v_ins_srtgroep_key;

            v_errormsg := 'Bepaal discipline';
            SELECT ins_discipline_omschrijving
              INTO v_ins_discipline_omschrijving
              FROM ins_discipline
             WHERE ins_discipline_key = v_ins_discipline_key;

            BEGIN
               v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat';
               SELECT d.ins_deel_omschrijving
                 INTO v_ins_deel_omschrijving
                 FROM ins_v_deel_gegevens dg, ins_deel d
                WHERE dg.ins_deel_key = d.ins_deel_key
                  AND dg.alg_gebouw_upper = v_alg_gebouw_code
                  AND d.ins_deel_externnr = v_ins_deel_externnr;

               IF v_ins_deel_omschrijving NOT LIKE v_alg_gebouw_code || '%'
               THEN
                  v_ins_deel_omschrijving := NULL;
               END IF;

            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_ins_deel_omschrijving := NULL;
            END;

            IF v_ins_deel_omschrijving IS NULL
            THEN
               v_errormsg := 'Bepaal object id - maak een nieuw nummer aan';
               SELECT MAX(FAC.safe_to_number(SUBSTR(ins_deel_omschrijving, INSTR(ins_deel_omschrijving, '-', 1, 2)+1, 100)))
                 INTO v_ins_deel_volgnr
                 FROM ins_deel
                WHERE ins_deel_verwijder IS NULL
                  AND ins_deel_omschrijving LIKE v_alg_gebouw_code || '-' || v_ins_srtdeel_code || '%';

               IF v_ins_deel_volgnr IS NULL
               THEN
                  v_ins_deel_volgnr := 0;
               END IF;

               v_ins_deel_omschrijving := v_alg_gebouw_code || '-' || v_ins_srtdeel_code || '-' || LPAD(v_ins_deel_volgnr + 1, 2, '0');
            END IF;

            v_errormsg := 'Objectopmerking ongeldig';
            v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);

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

            --
            v_errormsg := 'Aantal ongeldig; maximale grootte 999999.99';
            v_ins_deel_aantal := TRIM (v_ins_deel_aantal);
            v_ins_deel_aantal := REPLACE (v_ins_deel_aantal, ',', '.');
            v_ins_deel_aantal_n := NULL;

            IF (v_ins_deel_aantal IS NOT NULL)
            THEN
               IF (fac.safe_to_number (v_ins_deel_aantal) IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               ELSE
                v_ins_deel_aantal_n := fac.safe_to_number (v_ins_deel_aantal);
               END IF;
            ELSE
              v_ins_deel_aantal_n := 1;
            END IF;

            --
            v_errorhint := 'Bepaling registratiedatum';
            v_ins_kenmerkwaarde8 := TRIM(v_ins_kenmerkwaarde8);
            IF v_ins_kenmerkwaarde8 IS NOT NULL AND LENGTH(v_ins_kenmerkwaarde8) = 4
            THEN
               v_ins_deel_aanmaak := '01-01-' || TRIM(v_ins_kenmerkwaarde8);
               v_ins_deel_aanmaak_d := TO_DATE(v_ins_deel_aanmaak, 'dd-mm-yyyy');
            END IF;

            -- De rest alleen ff trimmen.
            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 bij 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 fac_imp_ins (
                                               ins_discipline_omschrijving,
                                               ins_discipline_kostensoort,
                                               ins_srtgroep_omschrijving,
                                               ins_srtdeel_code,
                                               ins_srtdeel_omschrijving,
                                               ins_deel_omschrijving,
                                               ins_deel_opmerking,
                                               alg_locatie_code,
                                               alg_gebouw_code,
                                               alg_verdieping_volgnr,
                                               alg_ruimte_nr,
                                               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,
                                               ins_deel_aanmaak,
                                               ins_deel_aantal,
                                               ins_deel_externnr
                             )
                    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_ins_deel_opmerking,
                                 v_alg_locatie_code,
                                 v_alg_gebouw_code,
                                 v_alg_verdieping_volgnr,
                                 v_alg_ruimte_nr,
                                 DECODE (v_ins_kenmerk_key1, NULL, v_ins_kenmerkwaarde1, DECODE(v_ins_kenmerk_key1, NULL, NULL, TO_CHAR (v_ins_kenmerk_key1) || '=' || SUBSTR (v_ins_kenmerkwaarde1, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key2, NULL, v_ins_kenmerkwaarde2, DECODE(v_ins_kenmerk_key2, NULL, NULL, TO_CHAR (v_ins_kenmerk_key2) || '=' || SUBSTR (v_ins_kenmerkwaarde2, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key3, NULL, v_ins_kenmerkwaarde3, DECODE(v_ins_kenmerk_key3, NULL, NULL, TO_CHAR (v_ins_kenmerk_key3) || '=' || SUBSTR (v_ins_kenmerkwaarde3, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key4, NULL, v_ins_kenmerkwaarde4, DECODE(v_ins_kenmerk_key4, NULL, NULL, TO_CHAR (v_ins_kenmerk_key4) || '=' || SUBSTR (v_ins_kenmerkwaarde4, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key5, NULL, v_ins_kenmerkwaarde5, DECODE(v_ins_kenmerk_key5, NULL, NULL, TO_CHAR (v_ins_kenmerk_key5) || '=' || SUBSTR (v_ins_kenmerkwaarde5, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key6, NULL, v_ins_kenmerkwaarde6, DECODE(v_ins_kenmerk_key6, NULL, NULL, TO_CHAR (v_ins_kenmerk_key6) || '=' || SUBSTR (v_ins_kenmerkwaarde6, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key7, NULL, v_ins_kenmerkwaarde7, DECODE(v_ins_kenmerk_key7, NULL, NULL, TO_CHAR (v_ins_kenmerk_key7) || '=' || SUBSTR (v_ins_kenmerkwaarde7, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key8, NULL, v_ins_kenmerkwaarde8, DECODE(v_ins_kenmerk_key8, NULL, NULL, TO_CHAR (v_ins_kenmerk_key8) || '=' || SUBSTR (v_ins_kenmerkwaarde8, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key9, NULL, v_ins_kenmerkwaarde9, DECODE(v_ins_kenmerk_key9, NULL, NULL, TO_CHAR (v_ins_kenmerk_key9) || '=' || SUBSTR (v_ins_kenmerkwaarde9, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key10, NULL, v_ins_kenmerkwaarde10, DECODE(v_ins_kenmerk_key10, NULL, NULL, TO_CHAR (v_ins_kenmerk_key10) || '=' || SUBSTR (v_ins_kenmerkwaarde10, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key11, NULL, v_ins_kenmerkwaarde11, DECODE(v_ins_kenmerk_key11, NULL, NULL, TO_CHAR (v_ins_kenmerk_key11) || '=' || SUBSTR (v_ins_kenmerkwaarde11, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key12, NULL, v_ins_kenmerkwaarde12, DECODE(v_ins_kenmerk_key12, NULL, NULL, TO_CHAR (v_ins_kenmerk_key12) || '=' || SUBSTR (v_ins_kenmerkwaarde12, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key13, NULL, v_ins_kenmerkwaarde13, DECODE(v_ins_kenmerk_key13, NULL, NULL, TO_CHAR (v_ins_kenmerk_key13) || '=' || SUBSTR (v_ins_kenmerkwaarde13, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key14, NULL, v_ins_kenmerkwaarde14, DECODE(v_ins_kenmerk_key14, NULL, NULL, TO_CHAR (v_ins_kenmerk_key14) || '=' || SUBSTR (v_ins_kenmerkwaarde14, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key15, NULL, v_ins_kenmerkwaarde15, DECODE(v_ins_kenmerk_key15, NULL, NULL, TO_CHAR (v_ins_kenmerk_key15) || '=' || SUBSTR (v_ins_kenmerkwaarde15, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key16, NULL, v_ins_kenmerkwaarde16, DECODE(v_ins_kenmerk_key16, NULL, NULL, TO_CHAR (v_ins_kenmerk_key16) || '=' || SUBSTR (v_ins_kenmerkwaarde16, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key17, NULL, v_ins_kenmerkwaarde17, DECODE(v_ins_kenmerk_key17, NULL, NULL, TO_CHAR (v_ins_kenmerk_key17) || '=' || SUBSTR (v_ins_kenmerkwaarde17, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key18, NULL, v_ins_kenmerkwaarde18, DECODE(v_ins_kenmerk_key18, NULL, NULL, TO_CHAR (v_ins_kenmerk_key18) || '=' || SUBSTR (v_ins_kenmerkwaarde18, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key19, NULL, v_ins_kenmerkwaarde19, DECODE(v_ins_kenmerk_key19, NULL, NULL, TO_CHAR (v_ins_kenmerk_key19) || '=' || SUBSTR (v_ins_kenmerkwaarde19, 1, 3900))),
                                 DECODE (v_ins_kenmerk_key20, NULL, v_ins_kenmerkwaarde20, DECODE(v_ins_kenmerk_key20, NULL, NULL, TO_CHAR (v_ins_kenmerk_key20) || '=' || SUBSTR (v_ins_kenmerkwaarde20, 1, 3900))),
                                 v_ins_deel_aanmaak_d,
                                 v_ins_deel_aantal_n,
                                 v_ins_deel_externnr
                             );

                  COMMIT;
                  v_count_import := v_count_import + 1;
               END;

            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;

    -- We gaan nu de nummering van de objecten aanpassen. Ze hebben allemaal het hoogste bestaande nummer + 1 meegekregen.
    v_alg_gebouw_code := 'Leeg';
    v_ins_srtdeel_code := 'Leeg';

    FOR rec IN c
    LOOP
        BEGIN
            IF    rec.alg_gebouw_code <> v_alg_gebouw_code
               OR rec.ins_srtdeel_code <> v_ins_srtdeel_code
            THEN
                v_ins_deel_volgnr :=
                    FAC.safe_to_number (
                        SUBSTR (rec.ins_deel_omschrijving, INSTR (rec.ins_deel_omschrijving, '-', 1, 2) + 1, 100));
                v_alg_gebouw_code := rec.alg_gebouw_code;
                v_ins_srtdeel_code := rec.ins_srtdeel_code;
            ELSE
                v_ins_deel_volgnr := v_ins_deel_volgnr + 1;

                UPDATE fac_imp_ins
                   SET ins_deel_omschrijving =
                              rec.alg_gebouw_code
                           || '-'
                           || rec.ins_srtdeel_code
                           || '-'
                           || LPAD (v_ins_deel_volgnr, 2, '0')
                 WHERE     ins_deel_externnr = rec.ins_deel_externnr
                       AND alg_gebouw_code = v_alg_gebouw_code;
            END IF;
        END;
    END LOOP;

   IF (header_is_valid = 1)
   THEN
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal 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! regel:' || v_file_index);
END rwsn_import_ins_elementen;
/


CREATE OR REPLACE PROCEDURE rwsn_update_ins_elementen (
    p_import_key   IN NUMBER)
IS

CURSOR C IS SELECT d.ins_deel_key, d.ins_deel_omschrijving
              FROM ins_v_deel_gegevens dg, ins_deel d
             WHERE     d.ins_deel_vervaldatum IS NULL
                   AND d.ins_deel_key = dg.ins_deel_key
                   AND NOT EXISTS
                           (SELECT 1
                              FROM fac_imp_ins i
                             WHERE     d.ins_deel_externnr = i.ins_deel_externnr
                                   AND dg.alg_gebouw_code = i.alg_gebouw_code)
                   AND dg.alg_gebouw_code IN (SELECT alg_gebouw_code FROM fac_imp_ins)
                   AND dg.ins_discipline_omschrijving = 'MJOB';


CURSOR c_mut_opm IS SELECT dg.ins_deel_key, dg.ins_deel_opmerking ins_deel_opmerking_old, i.ins_deel_opmerking
              FROM ins_v_deel_gegevens dg, fac_imp_ins i
             WHERE dg.ins_deel_omschrijving = i.ins_deel_omschrijving
                   AND COALESCE(dg.ins_deel_opmerking, 'QueQeLeQue') <> COALESCE(i.ins_deel_opmerking, 'QueQeLeQue')
                   AND dg.ins_discipline_omschrijving = 'MJOB';

-- aantallen worden niet automatisch bijgewerkt in de update van objecten.
CURSOR c_mut_aantal IS
SELECT ins_deel_key, dg.ins_deel_aantal ins_deel_aantal_old, i.ins_deel_aantal
  FROM fac_imp_ins i, ins_v_deel_gegevens dg
 WHERE     dg.ins_deel_omschrijving = i.ins_deel_omschrijving
       AND i.ins_deel_aantal <> dg.ins_deel_aantal
       AND dg.ins_discipline_omschrijving = 'MJOB';

CURSOR c_mut IS   SELECT dg.ins_deel_key,
                         SUBSTR(ins_srtkenmerk_omschrijving || ': ' || COALESCE(TRIM(ins_kenmerkdeel_waarde), '<leeg>') || ' --> ' || COALESCE(TRIM(ikenmerkwaarde), '<leeg>'),1,2000) log
                    FROM (SELECT d.ins_deel_key,
                                 k.ins_kenmerk_key,
                                 ins_srtkenmerk_omschrijving,
                                 REPLACE (
                                    CASE
                                         WHEN UPPER(ins_kenmerkwaarde1) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde1
                                         WHEN UPPER(ins_kenmerkwaarde2) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde2
                                         WHEN UPPER(ins_kenmerkwaarde3) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde3
                                         WHEN UPPER(ins_kenmerkwaarde4) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde4
                                         WHEN UPPER(ins_kenmerkwaarde5) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde5
                                         WHEN UPPER(ins_kenmerkwaarde6) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde6
                                         WHEN UPPER(ins_kenmerkwaarde7) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde7
                                         WHEN UPPER(ins_kenmerkwaarde8) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde8
                                         WHEN UPPER(ins_kenmerkwaarde9) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde9
                                         WHEN UPPER(ins_kenmerkwaarde10) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde10
                                         WHEN UPPER(ins_kenmerkwaarde11) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde11
                                         WHEN UPPER(ins_kenmerkwaarde12) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde12
                                         WHEN UPPER(ins_kenmerkwaarde13) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde13
                                         WHEN UPPER(ins_kenmerkwaarde14) like UPPER(ins_srtkenmerk_omschrijving) || '|%'  THEN ins_kenmerkwaarde14
                                         ELSE 'Onbekend'
                                     END,
                                     ins_srtkenmerk_omschrijving || '|0='
                                 ) ikenmerkwaarde
                            FROM fac_imp_ins i,
                                 ins_deel d,
                                 ins_kenmerk k,
                                 ins_srtkenmerk sk
                           WHERE     d.ins_discipline_key = k.ins_srtinstallatie_key
                                 AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
                                 AND i.ins_deel_omschrijving = d.ins_deel_omschrijving
                                 AND k.ins_kenmerk_niveau = 'D') dg
                           JOIN ins_kenmerkdeel kd
                             ON     kd.ins_deel_key = dg.ins_deel_key
                                AND kd.ins_kenmerk_key = dg.ins_kenmerk_key
                   WHERE     ikenmerkwaarde <> 'Onbekend'
                         AND COALESCE(ikenmerkwaarde, 'QueQeLeQue') <> COALESCE(ins_kenmerkdeel_waarde, 'QueQeLeQue');

   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_ongeldig                      NUMBER (1);
   v_aanduiding                    VARCHAR (400);
   v_fac_srtnotificatie_key        FAC_SRTNOTIFICATIE.fac_srtnotificatie_key%TYPE;

BEGIN
   fac_update_ins (p_import_key);

   SELECT fac_srtnotificatie_key
     INTO v_fac_srtnotificatie_key
     FROM fac_srtnotificatie
    WHERE fac_srtnotificatie_code = 'INSTRK';

   -- Pas de beschrijving van de elementen aan.
   FOR reco IN c_mut_opm
   LOOP
      UPDATE ins_deel SET ins_deel_opmerking = reco.ins_deel_opmerking WHERE ins_deel_key = reco.ins_deel_key;
      INSERT INTO fac_tracking (fac_srtnotificatie_key, fac_tracking_oms, fac_tracking_refkey)
           VALUES (v_fac_srtnotificatie_key, 'Object gewijzigd' || CHR(10) || 'Beschrijving: ' || reco.ins_deel_opmerking_old || ' --> ' || reco.ins_deel_opmerking, reco.ins_deel_key);
   END LOOP;

   -- Pas de aantallen van de elementen aan.
   FOR reca IN c_mut_aantal
   LOOP
      UPDATE ins_deel SET ins_deel_aantal = reca.ins_deel_aantal WHERE ins_deel_key = reca.ins_deel_key;
      INSERT INTO fac_tracking (fac_srtnotificatie_key, fac_tracking_oms, fac_tracking_refkey)
           VALUES (v_fac_srtnotificatie_key, 'Object gewijzigd' || CHR(10) || 'Hoeveelheid: ' || reca.ins_deel_aantal_old || ' --> ' || reca.ins_deel_aantal, reca.ins_deel_key);
   END LOOP;


   -- Als er kenmerken wijzigen dan gaan we dat tracken.
   FOR rec IN c_mut
   LOOP
      BEGIN
         INSERT INTO fac_tracking (fac_srtnotificatie_key, fac_tracking_oms, fac_tracking_refkey)
              VALUES (v_fac_srtnotificatie_key, 'Object gewijzigd' || CHR(10) || rec.log, rec.ins_deel_key);
      END;
   END LOOP;

   -- controleer op verwijderde records
   FOR rec IN c
   LOOP
      BEGIN

         UPDATE ins_deel
            SET ins_deel_vervaldatum = SYSDATE
          WHERE ins_deel_key = rec.ins_deel_key;

         fac.imp_writelog (p_import_key,
                           'I',
                           v_aanduiding || 'Element is verwijderd: ' || rec.ins_deel_omschrijving,
                           '');
         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;

   -- Pas de logging aan zodat deze te begrijpen is.
   UPDATE imp_log SET imp_log_hint = 'NL-SfB code komt niet voor in de RWS elementenlijst.' WHERE imp_log_omschrijving LIKE '%Bepaal objectsoort ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key;
   UPDATE imp_log SET imp_log_hint = 'Gebouwcode bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Gebouwcode kan niet gevonden worden ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key;

END rwsn_update_ins_elementen;
/

--
-- MJOB gebreken
--
CREATE OR REPLACE PROCEDURE rwsn_import_ins_gebreken (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (2) := fac.import_delimiter(p_import_key);
   v_newline                       fac_imp_file.fac_imp_file_line%TYPE;    -- Input line
   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   v_file_index                     NUMBER;
   v_count                         NUMBER;
   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 (400);
   v_gebouw_code                   VARCHAR2 (255);
   v_deel_externnr                 VARCHAR2 (255);
   v_code_gebrek                   VARCHAR2 (255);
   v_conditie_gebrek               VARCHAR2 (255);
   v_ernst_gebrek                  VARCHAR2 (255);
   v_gebrekcode_ernst              VARCHAR2 (1);
   v_intensiteit_gebrek            VARCHAR2 (255);
   v_omvang_gebrek                 VARCHAR2 (255);
   v_aspect1                       VARCHAR2 (255);
   v_aspect2                       VARCHAR2 (255);
   v_aspect3                       VARCHAR2 (255);
   v_aspect4                       VARCHAR2 (255);
   v_aspect5                       VARCHAR2 (255);
   v_aspect6                       VARCHAR2 (255);
   v_aspect7                       VARCHAR2 (255);
   v_kosten_gebrek                 VARCHAR2 (255);
   v_kosten_gebrek_n               NUMBER(8,2);
   v_opmerking                     VARCHAR2 (4000);
   v_perslid_email                 VARCHAR2 (100);
   v_gebouw_key                    NUMBER;
   v_deel_omschrijving             INS_DEEL.INS_DEEL_OMSCHRIJVING%TYPE;
   v_stdmelding_key                NUMBER;
   v_discipline_key                NUMBER;
   v_srtdiscipline_key             NUMBER;
   v_stdmelding_omschrijving       MLD_STDMELDING.MLD_STDMELDING_OMSCHRIJVING%TYPE;

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

    FUNCTION get_aspect_value (p_aspect IN VARCHAR2)
        RETURN VARCHAR2
    IS
        v_result   VARCHAR2 (100);
    BEGIN
        v_result := p_aspect;

        IF p_aspect IS NULL OR p_aspect = 0
        THEN
            v_result := 'NVT';
        END IF;

        IF p_aspect = '1'
        THEN
            v_result := 'Gering';
        END IF;

        IF p_aspect = '2'
        THEN
            v_result := 'Matig';
        END IF;

        IF p_aspect = '3'
        THEN
            v_result := 'Sterk';
        END IF;

        RETURN v_result;
    END;

BEGIN
   -- Eerst opruiming
   DELETE FROM   cnd_imp_nen2767_results;

   COMMIT;

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

   -- Bepalen key van het vakgroeptype
   SELECT ins_srtdiscipline_key
     INTO v_srtdiscipline_key
     FROM ins_srtdiscipline
    WHERE ins_srtdiscipline_omschrijving = 'NEN2767 - Conditiemeting';

   -- Bepalen email invoerder
   v_errormsg := 'Bepalen email invoerder';
   SELECT p.prs_perslid_email
     INTO v_perslid_email
     FROM prs_perslid p, fac_import i
    WHERE p.prs_perslid_key = i.prs_perslid_key
      AND i.fac_import_key = p_import_key;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_file_index := rec1.fac_imp_file_index;
         v_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_gebouw_code);      -- Objectcode
         fac.imp_getfield (v_newline, c_delim, v_deel_externnr);    -- Element-ID
         fac.imp_getfield (v_newline, c_delim, v_code_gebrek);          -- NEN code vh gebrek
         fac.imp_getfield (v_newline, c_delim, v_ernst_gebrek);
         fac.imp_getfield (v_newline, c_delim, v_intensiteit_gebrek);
         fac.imp_getfield (v_newline, c_delim, v_omvang_gebrek);
         fac.imp_getfield (v_newline, c_delim, v_aspect1);              -- A. Veiligheid
         fac.imp_getfield (v_newline, c_delim, v_aspect2);              -- B. Binnenmilieu, Gezondheid
         fac.imp_getfield (v_newline, c_delim, v_aspect3);              -- C. Gebruikswaarde en functioneren
         fac.imp_getfield (v_newline, c_delim, v_aspect4);              -- D. Monumentale waarde
         fac.imp_getfield (v_newline, c_delim, v_aspect5);              -- E. Belevingswaarde en aanzien
         fac.imp_getfield (v_newline, c_delim, v_aspect6);              -- F. Storingsonderhoud
         fac.imp_getfield (v_newline, c_delim, v_aspect7);              -- G. Kosten vervolgschade
         fac.imp_getfield (v_newline, c_delim, v_kosten_gebrek);
         fac.imp_getfield (v_newline, c_delim, v_opmerking);

         v_gebouw_code := TRIM(v_gebouw_code);
         v_deel_externnr := TRIM(v_deel_externnr);
         v_code_gebrek := TRIM(v_code_gebrek);
         v_ernst_gebrek := TRIM(v_ernst_gebrek);
         v_intensiteit_gebrek := TRIM(v_intensiteit_gebrek);
         v_omvang_gebrek := TRIM(v_omvang_gebrek);
         v_aspect1 := TRIM(v_aspect1);
         v_aspect2 := TRIM(v_aspect2);
         v_aspect3 := TRIM(v_aspect3);
         v_aspect4 := TRIM(v_aspect4);
         v_aspect5 := TRIM(v_aspect5);
         v_aspect6 := TRIM(v_aspect6);
         v_aspect7 := TRIM(v_aspect7);
         v_kosten_gebrek := TRIM(v_kosten_gebrek);
         v_opmerking := TRIM(v_opmerking);

         v_aanduiding :=
               '['
            || v_gebouw_code
            || '|'
            || v_deel_externnr
            || '|'
            || v_code_gebrek
            || '] ';

         -- 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_gebouw_code) = 'OBJECTCODE'
               AND UPPER(v_deel_externnr) = 'ELEMENT-ID'
               AND UPPER(v_code_gebrek) = 'CODE GEBREK'
               AND UPPER(v_ernst_gebrek) = 'ERNST GEBREK'
               AND UPPER(v_intensiteit_gebrek) = 'INTENSITEIT GEBREK'
               AND UPPER(v_omvang_gebrek) = 'OMVANG GEBREK'
               AND UPPER(v_aspect1) = 'ASPECT 1'
               AND UPPER(v_aspect2) = 'ASPECT 2'
               AND UPPER(v_aspect3) = 'ASPECT 3'
               AND UPPER(v_aspect4) = 'ASPECT 4'
               AND UPPER(v_aspect5) = 'ASPECT 5'
               AND UPPER(v_aspect6) = 'ASPECT 6'
               AND UPPER(v_aspect7) = 'ASPECT 7'
               AND UPPER(v_kosten_gebrek) = 'KOSTEN VAN HET GEBREK'
               AND UPPER(v_opmerking) = 'OPMERKING'
            THEN
               header_is_valid := 1;
            ELSE
               IF rec1.fac_imp_file_index = 1
               THEN

                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Ongeldige header aangetroffen:',
                                    'OBJECTCODE: ' || UPPER (v_gebouw_code) || CHR(10) ||
                                    'ELEMENT-ID: ' || UPPER (v_deel_externnr) || CHR(10) ||
                                    'CODE GEBREK: ' || UPPER (v_code_gebrek) || CHR(10) ||
                                    'ERNST GEBREK: ' || UPPER (v_ernst_gebrek) || CHR(10) ||
                                    'INTENSITEIT GEBREK: ' || UPPER (v_intensiteit_gebrek) || CHR(10) ||
                                    'OMVANG GEBREK: ' || UPPER (v_omvang_gebrek) || CHR(10) ||
                                    'ASPECT 1: ' || UPPER (v_aspect1) || CHR(10) ||
                                    'ASPECT 2: ' || UPPER (v_aspect2) || CHR(10) ||
                                    'ASPECT 3: ' || UPPER (v_aspect3) || CHR(10) ||
                                    'ASPECT 4: ' || UPPER (v_aspect4) || CHR(10) ||
                                    'ASPECT 5: ' || UPPER (v_aspect5) || CHR(10) ||
                                    'ASPECT 6: ' || UPPER (v_aspect6) || CHR(10) ||
                                    'ASPECT 7: ' || UPPER (v_aspect7) || CHR(10) ||
                                    'KOSTEN VAN HET GEBREK: ' || UPPER (v_kosten_gebrek) || CHR(10) ||
                                    'OPMERKING: ' || UPPER (v_opmerking));
                END IF;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            v_errormsg := 'Gebouwcode kan niet gevonden worden';
            v_gebouw_code := TRIM (v_gebouw_code);

            SELECT alg_gebouw_key
              INTO v_gebouw_key
              FROM alg_gebouw g
             WHERE alg_gebouw_verwijder IS NULL
               AND UPPER(alg_gebouw_code) = v_gebouw_code;

            v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat';
            SELECT d.ins_deel_omschrijving
              INTO v_deel_omschrijving
              FROM ins_v_deel_gegevens dg, ins_deel d
             WHERE dg.ins_deel_key = d.ins_deel_key
               AND dg.alg_gebouw_upper = v_gebouw_code
               AND d.ins_deel_externnr = v_deel_externnr;

            v_errormsg := 'Objectopmerking ongeldig';
            v_opmerking := TRIM (v_opmerking);

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

            --
            v_errormsg := 'Kosten ongeldig; maximale grootte 999999.99 ' || v_kosten_gebrek;
            v_kosten_gebrek := TRIM (v_kosten_gebrek);
            v_kosten_gebrek := REPLACE (v_kosten_gebrek, ',', '.');
            v_kosten_gebrek_n := NULL;

            IF v_kosten_gebrek IS NOT NULL
            THEN
               IF (fac.safe_to_number (v_kosten_gebrek) IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
               ELSE
                v_kosten_gebrek_n := fac.safe_to_number (v_kosten_gebrek);
               END IF;
            END IF;

            --
            v_errormsg := 'Bepaling gebrekscode';
            IF v_code_gebrek IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,'I',v_aanduiding,'Gebrekcode niet aanwezig.');
            ELSE
               v_code_gebrek := UPPER(REPLACE(v_code_gebrek, ' '));
               BEGIN
                   SELECT mld_stdmelding_key, mld_stdmelding_omschrijving
                     INTO v_stdmelding_key, v_stdmelding_omschrijving
                     FROM mld_stdmelding
                    WHERE mld_stdmelding_code = v_code_gebrek;
                EXCEPTION WHEN NO_DATA_FOUND
                THEN
                   BEGIN
                      v_errorhint := 'Bepaling leverancier specifieke gebrekscode';
                      -- Is dit een eigen toegevoegd gebrek. Dan begint het met een _
                      SELECT mld_stdmelding_key, mld_stdmelding_omschrijving
                        INTO v_stdmelding_key, v_stdmelding_omschrijving
                        FROM mld_stdmelding
                       WHERE mld_stdmelding_code = '_' || v_code_gebrek;

                      fac.imp_writelog (p_import_key,'W',v_aanduiding,'Gebrekcode voldoet niet aan NEN2767 maar leverancierspecifieke code wordt gebruikt.');
                   EXCEPTION WHEN NO_DATA_FOUND
                   THEN
                      -- Nu gaan we een leverancier specifieke code toevoegen
                      v_errorhint := 'Toevoegen leverancierspecifieke gebrekscode';
                      -- Nu gaan we een leverancier specifieke code toevoegen

                      BEGIN
                         SELECT ins_discipline_key
                           INTO v_discipline_key
                           FROM ins_tab_discipline d
                          WHERE     REGEXP_SUBSTR (v_code_gebrek || 'Leverancier specifiek gebrek', '[[:alpha:]]*[[:digit:]]*') =
                                    SUBSTR (ins_discipline_omschrijving, 1, INSTR (ins_discipline_omschrijving, ' ') - 1)
                                AND d.ins_srtdiscipline_key = v_srtdiscipline_key
                                AND ins_discipline_code <> 'GEEN';
                      EXCEPTION WHEN NO_DATA_FOUND
                      THEN
                         INSERT INTO ins_tab_discipline (ins_discipline_module,
                                                         ins_discipline_code,
                                                         ins_discipline_omschrijving,
                                                         ins_srtdiscipline_key)
                            VALUES ('MLD',
                                    REGEXP_SUBSTR (v_code_gebrek, '[[:alpha:]]*[[:digit:]]*'),
                                    REGEXP_SUBSTR (v_code_gebrek, '[[:alpha:]]*[[:digit:]]*') || ' - Leverancier specifiek gebrek',
                                    v_srtdiscipline_key)
                          RETURNING ins_discipline_key INTO v_discipline_key;
                          fac.imp_writelog (p_import_key,'W',v_aanduiding,'Vakgroep voldoet niet aan NEN2767 maar leverancierspecifieke vakgroep wordt aangemaakt.');
                      END;

                      v_errorhint := 'Toevoegen leverancierspecifieke gebrekscode';
                      INSERT INTO mld_stdmelding (mld_stdmelding_code,
                                                  mld_ins_discipline_key,
                                                  mld_stdmelding_omschrijving,
                                                  mld_stdmelding_hint,
                                                  mld_stdmelding_subject,
                                                  mld_stdmelding_t_accepttijd,
                                                  mld_stdmelding_t_uitvoertijd,
                                                  mld_stdmelding_t_uitvtijd_pr1,
                                                  mld_stdmelding_t_uitvtijd_pr2,
                                                  mld_stdmelding_t_uitvtijd_pr4,
                                                  alg_onrgoed_niveau,
                                                  alg_onrgoed_obj_niveau,
                                                  ins_srtinst_verplichtstatus,
                                                  mld_stdmelding_slabewaken)
                         VALUES ( '_' || v_code_gebrek,
                                 v_discipline_key,
                                 v_code_gebrek || ' Leverancier specifiek gebrek',
                                 v_code_gebrek || ' Leverancier specifiek gebrek',
                                 0,
                                 MLD_T_UITVOERTIJD (NULL, 'U'),
                                 MLD_T_UITVOERTIJD (2, 'D'),
                                 MLD_T_UITVOERTIJD (NULL, 'D'),
                                 MLD_T_UITVOERTIJD (NULL, 'D'),
                                 MLD_T_UITVOERTIJD (NULL, 'D'),
                                 'G',
                                 'G',
                                 2,
                                 0)
                       RETURNING mld_stdmelding_key, mld_stdmelding_omschrijving INTO v_stdmelding_key, v_stdmelding_omschrijving;

                      v_errorhint := 'Toevoegen kenmerk omvang';
                      INSERT INTO mld_kenmerk (mld_srtkenmerk_key,
                                               mld_stdmelding_key,
                                               mld_kenmerk_default,
                                               mld_kenmerk_niveau,
                                               mld_kenmerk_verplicht,
                                               mld_kenmerk_toonbaar,
                                               mld_kenmerk_volgnummer)
                          SELECT (SELECT mld_srtkenmerk_key
                                    FROM mld_srtkenmerk
                                   WHERE mld_srtkenmerk_code = 'OMVANG'),
                                 v_stdmelding_key,
                                 NULL,
                                 'S',
                                 1,
                                 NULL,
                                 20
                            FROM DUAL;


                      v_gebrekcode_ernst := SUBSTR(v_code_gebrek, LENGTH(REGEXP_SUBSTR ( v_code_gebrek, '[[:alpha:]]*[[:digit:]]*'))+1,1);

                      v_errorhint := 'Toevoegen kenmerk ernst';
                      INSERT INTO mld_kenmerk (mld_srtkenmerk_key,
                                               mld_stdmelding_key,
                                               mld_kenmerk_default,
                                               mld_kenmerk_niveau,
                                               mld_kenmerk_verplicht,
                                               mld_kenmerk_toonbaar,
                                               mld_kenmerk_volgnummer)
                          SELECT (SELECT mld_srtkenmerk_key
                                    FROM mld_srtkenmerk
                                   WHERE mld_srtkenmerk_code = 'ERNST'),
                                 v_stdmelding_key,
                                 (SELECT fac_usrdata_key FROM fac_usrdata WHERE fac_usrdata_omschr LIKE v_gebrekcode_ernst || ' - % gebrek'),
                                 'S',
                                 1,
                                 NULL,
                                 10
                            FROM DUAL;

                      v_errorhint := 'Toevoegen kenmerk intensiteit';
                      INSERT INTO mld_kenmerk (mld_srtkenmerk_key,
                                               mld_stdmelding_key,
                                               mld_kenmerk_default,
                                               mld_kenmerk_niveau,
                                               mld_kenmerk_verplicht,
                                               mld_kenmerk_toonbaar,
                                               mld_kenmerk_volgnummer)
                          SELECT (SELECT mld_srtkenmerk_key
                                    FROM mld_srtkenmerk
                                   WHERE mld_srtkenmerk_code = 'INTENSITEIT'),
                                 v_stdmelding_key,
                                 NULL,
                                 'S',
                                 1,
                                 NULL,
                                 30
                            FROM DUAL;

                      fac.imp_writelog (p_import_key,'W',v_aanduiding,'Gebrekcode voldoet niet aan NEN2767 maar leverancierspecifieke code wordt aangemaakt.');
                   END;
                   v_code_gebrek := '_' || v_code_gebrek;
                END;
            END IF;

            IF v_ongeldig = 0
            THEN

              -- Als de codering ingevuld wordt gaan we zelf op zoek naar de omschrijving.
              IF v_ernst_gebrek IN ('E', 'G', 'S')
              THEN
                  CASE v_ernst_gebrek
                      WHEN 'G'
                      THEN
                          v_ernst_gebrek := 'G - Gering gebrek';
                      WHEN 'S'
                      THEN
                          v_ernst_gebrek := 'S - Serieus gebrek';
                      WHEN 'E'
                      THEN
                          v_ernst_gebrek := 'E - Ernstig gebrek';
                  END CASE;
              END IF;

              -- Bepalen of de ingelezen ernst wel overeenkomt met de ernst die bij het gebrek hoort.
              SELECT COUNT (*)
                INTO v_count
                FROM mld_srtkenmerk  sk,
                     mld_kenmerk     k,
                     mld_stdmelding  std,
                     fac_usrdata     ud
               WHERE     sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
                     AND k.mld_kenmerk_niveau = 'S'
                     AND k.mld_stdmelding_key = std.mld_stdmelding_key
                     AND sk.mld_srtkenmerk_code = 'ERNST'
                     AND mld_stdmelding_code = v_code_gebrek
                     AND fac_usrdata_omschr = v_ernst_gebrek
                     AND k.mld_kenmerk_default LIKE '%' || ud.fac_usrdata_key || '%';

              IF v_count <> 1
              THEN
                  fac.imp_writelog (
                      p_import_key,
                      'W',
                      v_aanduiding,
                      'Ernst komt niet overeen met default bij gebrekcode.');
              END IF;

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

              --
              v_errorhint :=
                  'Ongeldig kolom OMVANG (moet 1,2,3,4 of 5 zijn) [' || v_omvang_gebrek || ']';

              -- Als de codering ingevuld wordt gaan we zelf op zoek naar de omschrijving.
              IF fac.safe_to_number(v_omvang_gebrek) IN (1,
                              2,
                              3,
                              4,
                              5)
              THEN
                  CASE v_omvang_gebrek
                      WHEN 1
                      THEN
                          v_omvang_gebrek := '< 2% Incidenteel';
                      WHEN 2
                      THEN
                          v_omvang_gebrek := '2% tot 10% Plaatselijk';
                      WHEN 3
                      THEN
                          v_omvang_gebrek := '10% tot 30% Regelmatig';
                      WHEN 4
                      THEN
                          v_omvang_gebrek := '30% tot 70% Aanzienlijk';
                      WHEN 5
                      THEN
                          v_omvang_gebrek := '> 70% Algemeen';
                  END CASE;
              ELSE
                  fac.imp_writelog (
                      p_import_key,
                      'W',
                      v_aanduiding,
                      v_errorhint || ' - Regel wordt overgeslagen');
                  v_ongeldig := 1;
              END IF;

              --
              v_errorhint :=
                     'Ongeldig kolom INTENSITEIT (moet 1,2 of 3 zijn):  [' || v_intensiteit_gebrek || ']'
                  || v_intensiteit_gebrek;

              -- Als de codering ingevuld wordt gaan we zelf op zoek naar de omschrijving.
              IF fac.safe_to_number(v_intensiteit_gebrek) IN (1, 2, 3)
              THEN
                  CASE v_intensiteit_gebrek
                      WHEN 1
                      THEN
                          v_intensiteit_gebrek := '1 - Beginstadium';
                      WHEN 2
                      THEN
                          v_intensiteit_gebrek := '2 - Gevorderd stadium';
                      WHEN 3
                      THEN
                          v_intensiteit_gebrek := '3 - Eindstadium';
                  END CASE;
              ELSE
                  fac.imp_writelog (
                      p_import_key,
                      'W',
                      v_aanduiding,
                      v_errorhint || ' - Regel wordt overgeslagen');
                  v_ongeldig := 1;
              END IF;

              v_aspect1 := get_aspect_value (v_aspect1);
              v_aspect2 := get_aspect_value (v_aspect2);
              v_aspect3 := get_aspect_value (v_aspect3);
              v_aspect4 := get_aspect_value (v_aspect4);
              v_aspect5 := get_aspect_value (v_aspect5);
              v_aspect6 := get_aspect_value (v_aspect6);
              v_aspect7 := get_aspect_value (v_aspect7);

             IF (v_ongeldig = 0)
             THEN
                 BEGIN
                     v_errorhint :=
                         'Fout bij toevoegen regel aan importtabel cnd_imp_nen2767_results';

                     INSERT INTO cnd_imp_nen2767_results (
                                     fac_import_key,
                                     alg_gebouw_code,
                                     ins_deel_omschrijving,
                                     mld_melding_datum,
                                     mld_melding_omschrijving,
                                     prs_perslid_email,
                                     gebrekcode,
                                     ernst,
                                     omvang,
                                     intensiteit,
                                     aspect1,
                                     aspect2,
                                     aspect3,
                                     aspect4,
                                     aspect5,
                                     aspect6,
                                     aspect7,
                                     kosten)
                          VALUES (p_import_key,
                                  v_gebouw_code,
                                  v_deel_omschrijving,
                                  TO_CHAR(SYSDATE, 'dd-mm-yyyy'),
                                  v_stdmelding_omschrijving,
                                  v_perslid_email,
                                  v_code_gebrek,
                                  v_ernst_gebrek,
                                  v_omvang_gebrek,
                                  v_intensiteit_gebrek,
                                  v_aspect1,
                                  v_aspect2,
                                  v_aspect3,
                                  v_aspect4,
                                  v_aspect5,
                                  v_aspect6,
                                  v_aspect7,
                                  v_kosten_gebrek);

                     v_count_import := v_count_import + 1;
                     COMMIT;
                 EXCEPTION
                     WHEN OTHERS
                     THEN
                         oracle_err_num := SQLCODE;
                         oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                         v_errormsg :=
                                v_errorhint
                             || ' ORACLE (error '
                             || oracle_err_num
                             || '/'
                             || oracle_err_mes
                             || ')';
                         fac.imp_writelog (
                             p_import_key,
                             'E',
                             v_aanduiding || v_errormsg,
                             'Ingelezen regel kan niet worden weggeschreven!');
                         COMMIT;
                 END;
             END IF; -- ongeldig
             COMMIT;
             v_count_import := v_count_import + 1;
         END IF; -- ongeldig
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,
                              v_errorhint);
            COMMIT;
      END;

   END LOOP;

   IF (header_is_valid = 1)
   THEN
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   -- Pas de logging aan zodat deze te begrijpen is.
   UPDATE imp_log SET imp_log_hint = 'Element bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Kijk of het externnr bestaat%' AND fac_import_key = p_import_key;
   UPDATE imp_log SET imp_log_hint = 'Gebouwcode bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Gebouwcode kan niet gevonden worden ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND 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 objecten afgebroken! regel:' || v_file_index);
END rwsn_import_ins_gebreken;
/

CREATE OR REPLACE PROCEDURE rwsn_update_ins_gebreken (
    p_import_key   IN NUMBER)
IS

    CURSOR c_geen
    IS
        SELECT m.mld_melding_key
          FROM ins_v_deel_gegevens dg, mld_melding m, mld_melding_object mo
         WHERE     mo.ins_deel_key = dg.ins_deel_key
               AND mo.mld_melding_key = m.mld_melding_key
               AND m.mld_melding_status IN (1,
                                            3,
                                            4,
                                            7)     -- Nieuw, Te accepteren, In behandeling, Uitgegeven)
               AND ins_discipline_omschrijving = 'MJOB'
               AND alg_gebouw_upper IN (SELECT alg_gebouw_code FROM cnd_imp_nen2767_results)
               AND NOT EXISTS
                       (SELECT 1
                          FROM cnd_imp_nen2767_results i
                         WHERE i.ins_deel_omschrijving = dg.ins_deel_omschrijving);

    CURSOR c_nieuw
    IS
        SELECT *
          FROM cnd_imp_nen2767_results
         WHERE fac_import_key = p_import_key AND flex10 IS NULL ;

    CURSOR c_bestaand
    IS
        SELECT *
          FROM cnd_imp_nen2767_results
         WHERE fac_import_key = p_import_key AND flex10 IS NOT NULL;

    CURSOR c_checknieuw
    IS
          SELECT gebrekcode, ins_deel_omschrijving, COUNT (*) aantal
            FROM cnd_imp_nen2767_results
           WHERE flex10 IS NULL
        GROUP BY gebrekcode, ins_deel_omschrijving;

    CURSOR c_melding (c_gebrekcode VARCHAR2, c_deel_omschrijving VARCHAR2)
    IS
        SELECT m.mld_melding_key
          FROM mld_melding          m,
               mld_stdmelding       std,
               mld_melding_object   mo,
               ins_v_deel_gegevens  dg
         WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
               AND m.mld_melding_key = mo.mld_melding_key
               AND mo.ins_deel_key = dg.ins_deel_key
               AND dg.ins_deel_omschrijving = c_deel_omschrijving
               AND m.mld_melding_status IN (1,
                                            3,
                                            4,
                                            7)                      -- Nieuw, Te accepteren, In behandeling, Uitgegeven)
               AND std.mld_stdmelding_code = c_gebrekcode;




    v_aanduiding                   VARCHAR2 (1000);
    v_errorhint                    VARCHAR2 (1000);
    v_errormsg                     VARCHAR2 (1000);
    oracle_err_num                 NUMBER;
    oracle_err_mes                 VARCHAR2 (200);
    v_count_tot                    NUMBER (10);
    v_count_tot_n                  NUMBER (10);
    v_count_import                 NUMBER (10);

    v_mld_melding_key              NUMBER (10);

    v_alg_gebouw_key               NUMBER (10);
    v_ins_deel_key                 NUMBER (10);
    v_alg_ruimte_key               NUMBER (10);
    v_prs_perslid_key              NUMBER (10);
    v_mld_melding_datum            VARCHAR2 (100);
    v_prs_perslid_email            VARCHAR2 (100);
    v_prs_behandelaar_key          NUMBER (10);
    v_mld_stdmelding_key           NUMBER (10);

    v_ernst_kenmerk_key            NUMBER (10);
    v_ernst_key                    NUMBER (10);
    v_omvang_kenmerk_key           NUMBER (10);
    v_omvang_key                   NUMBER (10);
    v_intensiteit_kenmerk_key      NUMBER (10);
    v_intensiteit_key              NUMBER (10);

    v_foto_kenmerk_key             NUMBER (10);
    v_kosten_kenmerk_key           NUMBER (10) := NULL;
    v_kosten_srtkenmerk_key        NUMBER (10);

    v_ernst_srtkenmerk_key         NUMBER (10);
    v_omvang_srtkenmerk_key        NUMBER (10);
    v_intensiteit_srtkenmerk_key   NUMBER (10);

    v_mld_melding_omschrijving   VARCHAR2 (4000);
    v_omvang                     VARCHAR2 (1000);
    v_intensiteit                VARCHAR2 (1000);
    v_aspect1                    VARCHAR2 (1000);
    v_aspect2                    VARCHAR2 (1000);
    v_aspect3                    VARCHAR2 (1000);
    v_aspect4                    VARCHAR2 (1000);
    v_aspect5                    VARCHAR2 (1000);
    v_aspect6                    VARCHAR2 (1000);
    v_aspect7                    VARCHAR2 (1000);
    v_inspecteur                 VARCHAR2 (1000);
    v_behandelaar                VARCHAR2 (1000);
    v_foto                       VARCHAR2 (1000);
    v_kosten                     VARCHAR2 (1000);
    v_plandatum_date             DATE;
    v_dienst                     VARCHAR2 (1000);
    v_taakgroep                  VARCHAR2 (1000);
    v_datumgereedinspecteur      VARCHAR2 (1000);
    v_geadviseerdstartjaar       VARCHAR2 (1000);
    v_flex1_kenmerk_key          NUMBER (10);
    v_flex2_kenmerk_key          NUMBER (10);
    v_flex3_kenmerk_key          NUMBER (10);
    v_flex4_kenmerk_key          NUMBER (10);
    v_flex5_kenmerk_key          NUMBER (10);
    v_flex6_kenmerk_key          NUMBER (10);
    v_flex7_kenmerk_key          NUMBER (10);
    v_flex8_kenmerk_key          NUMBER (10);

    v_flex1_waarde               VARCHAR2 (1000);
    v_flex1_waarde_key           NUMBER (10);
    v_flex2_waarde               VARCHAR2 (1000);
    v_flex2_waarde_key           NUMBER (10);
    v_flex3_waarde               VARCHAR2 (1000);
    v_flex4_waarde               VARCHAR2 (1000);

    v_conditiescore              NUMBER (10) ;
    v_prioscore                  NUMBER (10) ;
    v_herberekenen               NUMBER (1) :=0;

    v_melding_GV_aantal            NUMBER(10);
    v_melding_GV                   VARCHAR2 (1000);
    v_mld_melding_status            NUMBER(10);



    PROCEDURE set_aspect (p_aspect            IN VARCHAR2,
                          p_aspect_waarde     IN VARCHAR2,
                          p_mld_melding_key   IN NUMBER)
    IS
        v_key              NUMBER (10);
        v_kenmerk_key      NUMBER (10);
        v_srtkenmerk_key   NUMBER (10);
    BEGIN
        SELECT MAX (mld_srtkenmerk_key)
          INTO v_srtkenmerk_key
          FROM mld_srtkenmerk
         WHERE mld_srtkenmerk_code = p_aspect;

        IF v_srtkenmerk_key IS NOT NULL
        THEN
            v_errorhint :=
                   p_aspect
                || ' (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT ud.fac_usrdata_key, k.mld_kenmerk_key
              INTO v_key, v_kenmerk_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k
             WHERE     sk.mld_srtkenmerk_key = v_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_upper = UPPER (p_aspect_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;

            mld.upsertmeldingkenmerk (v_kenmerk_key,
                                      p_mld_melding_key,
                                      v_key);
        END IF;
    END;

BEGIN

    -- Elementen die geen gebreken meer hebben en wel een conditiescore > 1 gaan we voorzien van de geen gebrek melding
    v_errorhint :=
        'Geen gebrek meldingen toevoegen';
    FOR rec IN c_geen
    LOOP
       BEGIN
          mld.setmeldingstatus(rec.mld_melding_key, 5, 4, 0);  -- Afgemeld, Facilitor
          cnd.process_mjb_score_effects (rec.mld_melding_key);
       END;
    END LOOP;

    -- we gaan kijken of het gebrek al voorkomt bij het element. Als dat zo is dan wordt flex10 gelijk aan het meldingnummer
    -- het kan voorkomen dat er meerdere gebreken op een element aanwezig zijn met dezelfde gebrekcode. Dan kunnen we ze niet meer mappen,
    -- we gaan dan de bestaande meldingen afmelden en de gebreken als nieuwe gebreken behandelen.
    FOR rec IN c_checknieuw
    LOOP
        BEGIN
            IF rec.aantal > 1
            THEN
                -- afmelden van bestaande gebreken. Hierdoor worden de dubbele gebreken opnieuw ingelezen.
                FOR recm IN c_melding (rec.gebrekcode, rec.ins_deel_omschrijving)
                LOOP
                     mld.setmeldingstatus(recm.mld_melding_key, 5, 4, 0);  -- Afgemeld, Facilitor
                END LOOP;
            ELSE
                SELECT m.mld_melding_key
                  INTO v_mld_melding_key
                  FROM mld_melding          m,
                       mld_stdmelding       std,
                       mld_melding_object   mo,
                       ins_v_deel_gegevens  dg
                 WHERE     m.mld_stdmelding_key = std.mld_stdmelding_key
                       AND m.mld_melding_key = mo.mld_melding_key
                       AND mo.ins_deel_key = dg.ins_deel_key
                       AND dg.ins_deel_omschrijving = rec.ins_deel_omschrijving
                       AND m.mld_melding_status IN (1,
                                                    3,
                                                    4,
                                                    7)              -- Nieuw, Te accepteren, In behandeling, Uitgegeven)
                       AND std.mld_stdmelding_code = rec.gebrekcode;

                UPDATE cnd_imp_nen2767_results i
                   SET flex10 = v_mld_melding_key
                 WHERE i.gebrekcode = rec.gebrekcode AND i.ins_deel_omschrijving = rec.ins_deel_omschrijving;
            END IF;
        EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
                NULL;                                             -- Er bestaat geen gebrek. Dan is het een nieuw gebrek
        END;
    END LOOP;

    v_errorhint :=
        'Bestaande meldingen markeren';

    v_count_tot := 0;
    v_count_tot_n := 0;
    v_count_import := 0;

    v_errorhint :=
        'Ernst kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd';

    SELECT mld_srtkenmerk_key
      INTO v_ernst_srtkenmerk_key
      FROM mld_srtkenmerk
     WHERE mld_srtkenmerk_code = 'ERNST';

    v_errorhint :=
        'Omvang kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd';

    SELECT mld_srtkenmerk_key
      INTO v_omvang_srtkenmerk_key
      FROM mld_srtkenmerk
     WHERE mld_srtkenmerk_code = 'OMVANG';

    v_errorhint :=
        'Intensiteit kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd';

    SELECT mld_srtkenmerk_key
      INTO v_intensiteit_srtkenmerk_key
      FROM mld_srtkenmerk
     WHERE mld_srtkenmerk_code = 'INTENSITEIT';

    v_errorhint :=
        'Fout bij bepalen kenmerk foto-bestand';

    SELECT max(k.mld_kenmerk_key)
      INTO v_foto_kenmerk_key
      FROM mld_kenmerk k, mld_srtkenmerk sk
     WHERE     k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
          AND k.mld_kenmerk_niveau = 'T'
          AND k.mld_stdmelding_key = fac.getsetting ('cnd_gebreken_srtdisc_key')
          AND sk.mld_srtkenmerk_upper = 'FOTONAAM' ;

    v_errorhint :=
        'Kosten kenmerk bij gebreken niet gevonden (bestaat niet), import wordt niet uitgevoerd';

    SELECT MAX (mld_srtkenmerk_key)
      INTO v_kosten_srtkenmerk_key
      FROM mld_srtkenmerk
     WHERE mld_srtkenmerk_code = 'KOSTEN';

    IF v_kosten_srtkenmerk_key IS NOT NULL
    THEN
        SELECT mld_kenmerk_key
          INTO v_kosten_kenmerk_key
          FROM mld_kenmerk
         WHERE     mld_srtkenmerk_key = v_kosten_srtkenmerk_key;
    END IF;

    FOR rec IN c_nieuw
    LOOP
        BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                   '['
                || rec.alg_gebouw_code
                || '-'
                || rec.ins_deel_omschrijving
                || '-'
                || rec.gebrekcode
                || '] ';

            v_errorhint :=
                'Gebouwcode niet gevonden (bestaat niet), regel wordt overgeslagen';

            v_alg_gebouw_key := -1;

            IF rec.alg_gebouw_code IS NOT NULL
            THEN
                SELECT alg_gebouw_key
                  INTO v_alg_gebouw_key
                  FROM alg_v_aanweziggebouw
                 WHERE alg_gebouw_upper = UPPER (rec.alg_gebouw_code);
            END IF;

            v_errorhint :=
                'Element (object) niet gevonden (bestaat niet bij gebouw), regel wordt overgeslagen';

            -- Uitgangspunt hierbij is dat objectnaam uniek is per gebouw, op zich mag in Facilitor de objectnaam per objectsoort per locatie uniek zijn.
            SELECT ins_deel_key, r.alg_ruimte_key
              INTO v_ins_deel_key, v_alg_ruimte_key
              FROM ins_v_aanwezigdeel, alg_ruimte r, alg_verdieping v
             WHERE     ins_deel_upper = UPPER (rec.ins_deel_omschrijving)
                   AND ins_alg_ruimte_key = r.alg_ruimte_key
                   AND r.alg_verdieping_key = v.alg_verdieping_key
                   AND (   v_alg_gebouw_key = -1
                        OR v.alg_gebouw_key = v_alg_gebouw_key)
                   AND ins_alg_ruimte_type = 'R';

            v_errorhint :=
                'Mailadres van inspecteur (persoon) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT prs_perslid_key
              INTO v_prs_perslid_key
              FROM prs_v_aanwezigperslid
             WHERE UPPER (prs_perslid_email) = UPPER (rec.prs_perslid_email);

            v_errorhint :=
                'Mailadres van behandelaar (persoon) niet gevonden (bestaat niet), regel wordt overgeslagen';

            IF rec.flex9 IS NOT NULL
            THEN

               SELECT prs_perslid_key
                 INTO v_prs_behandelaar_key
                 FROM prs_v_aanwezigperslid
                WHERE UPPER (prs_perslid_email) = UPPER (rec.flex9);

                ELSE
                v_prs_behandelaar_key := NULL ;

            END IF;

            v_errorhint :=
                'Gebrek (melding) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT sm.mld_stdmelding_key
              INTO v_mld_stdmelding_key
              FROM mld_stdmelding sm
             WHERE UPPER(mld_stdmelding_code) = UPPER (rec.gebrekcode);

            IF UPPER(rec.gebrekcode) = 'GEEN'
                THEN
                   v_errorhint :=
                'Geen Gebrek melding. Ernst, Omvang en Intensiteit worden overgeslagen';
                ELSE

            v_errorhint :=
                'Ernst (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen';

            -- We vullen de ERNST altijd met de default-waarde bij kenmerk_key
            SELECT ud.fac_usrdata_key, k.mld_kenmerk_key
              INTO v_ernst_key, v_ernst_kenmerk_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k
             WHERE     sk.mld_srtkenmerk_key = v_ernst_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = k.mld_kenmerk_default
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND k.mld_stdmelding_key = v_mld_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S';

            v_errorhint :=
                'Omvang (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT ud.fac_usrdata_key, k.mld_kenmerk_key
              INTO v_omvang_key, v_omvang_kenmerk_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k
             WHERE     sk.mld_srtkenmerk_key = v_omvang_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_upper = UPPER (rec.omvang)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND k.mld_stdmelding_key = v_mld_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S';

            v_errorhint :=
                'Intensiteit (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT ud.fac_usrdata_key, k.mld_kenmerk_key
              INTO v_intensiteit_key, v_intensiteit_kenmerk_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k
             WHERE     sk.mld_srtkenmerk_key = v_intensiteit_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_upper = UPPER (rec.intensiteit)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND k.mld_stdmelding_key = v_mld_stdmelding_key
                   AND k.mld_kenmerk_niveau = 'S';
             END IF;

            v_errorhint :=
                'Toevoegen melding';
            INSERT INTO mld_melding (mld_melding_module,
                                     mld_meldbron_key,
                                     mld_melding_datum,
                                     mld_melding_omschrijving,
                                     mld_stdmelding_key,
                                     mld_alg_onroerendgoed_keys,
                                     mld_melding_einddatum,
                                     prs_perslid_key,
                                     prs_perslid_key_voor,
                                     -- mld_melding_behandelaar_key,
                                     mld_melding_status,
                                     mld_melding_spoed)
                 VALUES (
                            'MLD',
                            6,
                            fac.safe_to_date (rec.mld_melding_datum, 'dd-mm-yyyy'),
                            rec.mld_melding_omschrijving,
                            v_mld_stdmelding_key,
                            v_alg_ruimte_key,
                            rec.plandatum,
                            v_prs_perslid_key,
                            v_prs_perslid_key,
                            -- v_prs_behandelaar_key,
                            NULL,
                            3)
              RETURNING mld_melding_key
                   INTO v_mld_melding_key;

            mld.setmeldingstatus(v_mld_melding_key, 2, v_prs_perslid_key, 0);

            v_errorhint := 'Koppelen object';
            INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key)
                 VALUES (v_mld_melding_key, v_ins_deel_key);


            IF UPPER(rec.gebrekcode) <> 'GEEN' THEN
            v_errorhint := 'Toevoegen Ernst kenmerk';
            mld.upsertmeldingkenmerk (v_ernst_kenmerk_key,
                                      v_mld_melding_key,
                                      v_ernst_key);

            v_errorhint := 'Toevoegen Omvang kenmerk';
            mld.upsertmeldingkenmerk (v_omvang_kenmerk_key,
                                      v_mld_melding_key,
                                      v_omvang_key);
            v_errorhint := 'Toevoegen Intensiteit kenmerk';
            mld.upsertmeldingkenmerk (v_intensiteit_kenmerk_key,
                                      v_mld_melding_key,
                                      v_intensiteit_key);
            END IF;

            set_aspect ('ASPECT1', rec.aspect1, v_mld_melding_key);
            set_aspect ('ASPECT2', rec.aspect2, v_mld_melding_key);
            set_aspect ('ASPECT3', rec.aspect3, v_mld_melding_key);
            set_aspect ('ASPECT4', rec.aspect4, v_mld_melding_key);
            set_aspect ('ASPECT5', rec.aspect5, v_mld_melding_key);
            set_aspect ('ASPECT6', rec.aspect6, v_mld_melding_key);
            set_aspect ('ASPECT7', rec.aspect7, v_mld_melding_key);

            v_errorhint := 'Toevoegen Foto kenmerk';
            IF rec.foto IS NOT NULL
            THEN
                mld.upsertmeldingkenmerk (v_foto_kenmerk_key,
                                          v_mld_melding_key,
                                          rec.foto);
            END IF;

            v_errorhint := 'Toevoegen Kosten kenmerk';
            IF rec.kosten IS NOT NULL AND v_kosten_kenmerk_key IS NOT NULL
            THEN
                mld.upsertmeldingkenmerk (v_kosten_kenmerk_key,
                                          v_mld_melding_key,
                                          TO_CHAR(rec.kosten));
            END IF;

            -- Bij direct accepteren moet ook de CND-berekening uitgevoerd worden
            ---- En indien meegegeven wordt ook de behandelaar op melding gezet.
            v_errorhint := 'Meldingen direct accepteren ';
            IF fac.getsetting('cnd_autoaccept') = 1
            THEN
                mld.setmeldingstatus(v_mld_melding_key, 4, v_prs_perslid_key, 0);

               BEGIN
               cnd.process_mjb_score_effects (v_mld_melding_key);
               END;
               COMMIT;

                IF v_prs_behandelaar_key IS NOT NULL
                THEN

                UPDATE mld_melding
                SET mld_melding_behandelaar_key = v_prs_behandelaar_key
                WHERE mld_melding_key = v_mld_melding_key ;

            /*   -- Notificatie naar behandelaar
                fac.putnotificationsrtprio (
                  NULL,
                  v_behandelaar_key,
                  'MLDBE2',
                  v_mld_melding_key,
                   'Melding '
                || N
                || v_mld_melding_key
                || ' is door de klant aangepast.',
                2,
                NULL,
                NULL,
                NULL,
                2,
                NULL);   */

                END IF;

            END IF;

            v_count_import := v_count_import + 1;
            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_aanduiding || v_errormsg,
                                  v_errorhint);
                COMMIT;
        END;
    END LOOP;


    FOR rec IN c_bestaand
    LOOP
        BEGIN
            v_count_tot   := v_count_tot + 1;
            v_count_tot_n := v_count_tot_n + 1;

            v_aanduiding :=
                   '['
                || rec.alg_gebouw_code
                || '-'
                || rec.ins_deel_omschrijving
                || '-'
                || rec.gebrekcode
                || '- lopende melding '
                || rec.flex10
                || '] ';

                v_mld_melding_key := fac.safe_to_number(rec.flex10) ;

            -- Gaan eerst alle waarden vullen uit de lopende melding
            --
            v_errorhint := 'Vullen huidige waarde OPMERKING van lopende melding';
            v_mld_melding_omschrijving := '';

            --SELECT max(mld_melding_omschrijving)
            SELECT max(TO_CHAR (SUBSTR (mld_melding_omschrijving, 1, 4000)))
            INTO v_mld_melding_omschrijving
            FROM mld_melding
            WHERE      mld_melding_key = v_mld_melding_key ;

            --
            v_errorhint := 'Vullen huidige waarde OMVANG van lopende melding';
            v_omvang := '';

            SELECT ud.fac_usrdata_omschr, k.mld_kenmerk_key
            INTO v_omvang, v_omvang_kenmerk_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_key = v_omvang_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'S';

            v_errorhint :=
                'Omvang (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT ud.fac_usrdata_key
              INTO v_omvang_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_key = v_omvang_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_upper = UPPER (rec.omvang)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key = v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'S';

            --
            v_errorhint := 'Vullen huidige waarde INTENSITEIT van lopende melding';
            v_intensiteit := '';

            SELECT ud.fac_usrdata_omschr, k.mld_kenmerk_key
            INTO v_intensiteit, v_intensiteit_kenmerk_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_key = v_intensiteit_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key = v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'S';

            v_errorhint := 'Intensiteit (eigen tabel) niet gevonden (bestaat niet), regel wordt overgeslagen';

            SELECT ud.fac_usrdata_key
              INTO v_intensiteit_key
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_key = v_intensiteit_srtkenmerk_key
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_upper = UPPER (rec.intensiteit)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key = v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'S';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT1 van lopende melding';
            v_aspect1 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect1
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT1'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT2 van lopende melding';
            v_aspect2 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect2
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT2'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT3 van lopende melding';
            v_aspect3 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect3
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT3'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT4 van lopende melding';
            v_aspect4 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect4
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT4'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT5 van lopende melding';
            v_aspect5 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect5
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT5'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT6 van lopende melding';
            v_aspect6 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect6
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT6'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde ASPECT7 van lopende melding';
            v_aspect7 := '';

            SELECT ud.fac_usrdata_omschr
            INTO v_aspect7
              FROM mld_srtkenmerk     sk,
                   fac_kenmerkdomein  kd,
                   fac_usrtab         ut,
                   fac_usrdata        ud,
                   mld_kenmerk        k,
                   mld_kenmerkmelding km
             WHERE     sk.mld_srtkenmerk_code = 'ASPECT7'
                   AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
                   AND ut.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrtab_key = kd.fac_usrtab_key
                   AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
                   AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key =  v_mld_melding_key
                   AND k.mld_kenmerk_niveau = 'T';

            --
            v_errorhint := 'Vullen huidige waarde FOTO van lopende melding';
            v_foto := '';
            -- v_foto_kenmerk_key;

            SELECT max(km.mld_kenmerkmelding_waarde)
            INTO v_foto
              FROM mld_kenmerkmelding km, mld_kenmerk k
              WHERE     km.mld_melding_key = v_mld_melding_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'FOTONAAM');

            --
            v_errorhint := 'Vullen huidige waarde KOSTEN van lopende melding';
            v_kosten := '';

            SELECT max(km.mld_kenmerkmelding_waarde)
            INTO v_kosten
              FROM mld_kenmerkmelding km, mld_kenmerk k
              WHERE     km.mld_melding_key = v_mld_melding_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'KOSTEN');

            --
            v_errorhint := 'Vullen huidige waarde PLANDATUM van lopende melding';

            SELECT max(mld_melding_einddatum)
            INTO v_plandatum_date
            FROM mld_melding
            WHERE      mld_melding_key = v_mld_melding_key ;

            -- Conditiescore
            v_errorhint := 'Vullen huidige waarde CONDITIESCORE van lopende melding';
            v_conditiescore := '';

            SELECT max(km.mld_kenmerkmelding_waarde)
            INTO v_conditiescore
              FROM mld_kenmerkmelding km, mld_kenmerk k
              WHERE     km.mld_melding_key = v_mld_melding_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'CONDITIESCORE');

            -- Prioriteitsscore
            v_errorhint := 'Vullen huidige waarde PRIORITEITS-SCORE van lopende melding';
            v_prioscore := '';

            SELECT max(km.mld_kenmerkmelding_waarde)
            INTO v_prioscore
              FROM mld_kenmerkmelding km, mld_kenmerk k
              WHERE     km.mld_melding_key = v_mld_melding_key
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND k.mld_srtkenmerk_key = (SELECT MAX (mld_srtkenmerk_key) FROM mld_srtkenmerk WHERE mld_srtkenmerk_code = 'PRIORITEITSCORE');

            --
            v_errorhint := 'Bepalen STATUS van lopende melding';
            v_mld_melding_status := '';

            SELECT max(mld_melding_status)
            INTO v_mld_melding_status
            FROM mld_melding
            WHERE      mld_melding_key = v_mld_melding_key ;

            --
            v_errorhint := 'Bepalen INSPECTEUR / AANVRAGER van lopende melding';
            v_inspecteur := '';

            SELECT p.prs_perslid_email
            INTO v_inspecteur
            FROM mld_melding m, prs_perslid p
            WHERE      m.prs_perslid_key = p.prs_perslid_key
                       AND mld_melding_key = v_mld_melding_key ;

            --
            v_errorhint := 'Bepalen BEHANDELAAR van lopende melding';
            v_behandelaar := '';

            SELECT max(p.prs_perslid_email)
            INTO v_behandelaar
            FROM mld_melding m, prs_perslid p
            WHERE      m.mld_melding_behandelaar_key = p.prs_perslid_key
                       AND mld_melding_key = v_mld_melding_key ;


            -- Alles gevuld. Nu alle meldingsvelden updaten als REC-waarde gevuld is en als deze afwijkt van de huidige waarde
            v_herberekenen:=0;

            -- Omschrijving melding - Opmerking melding
            v_errorhint := 'Aanpassen opmerking bij melding';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Omschrijving aangevuld met: ' || rec.mld_melding_omschrijving  ;

            IF v_mld_melding_omschrijving <> rec.mld_melding_omschrijving AND rec.mld_melding_omschrijving IS NOT NULL
            THEN

            UPDATE mld_melding
            SET mld_melding_omschrijving = v_mld_melding_omschrijving || CHR (13) || CHR(13) || CHR (10) || to_char(sysdate,'DD-MM-YYYY') || ':' || CHR(13) || CHR (10) || rec.mld_melding_omschrijving
            WHERE mld_melding_key = v_mld_melding_key;

            END IF;

            -- Omvang
            v_errorhint := 'Aanpassen Omvang kenmerk';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Omvang: (' ||  v_omvang || ') --> ' || rec.omvang  ;

            IF rec.omvang IS NOT NULL AND v_omvang <> rec.omvang
            THEN
            mld.upsertmeldingkenmerk (v_omvang_kenmerk_key,
                                      v_mld_melding_key,
                                      v_omvang_key);

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            v_errorhint := 'Aanpassen Intensiteit kenmerk';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Intensiteit: (' ||  v_intensiteit || ') --> ' || rec.intensiteit  ;

            IF rec.intensiteit IS NOT NULL AND v_intensiteit <> rec.intensiteit
            THEN
            mld.upsertmeldingkenmerk (v_intensiteit_kenmerk_key,
                                      v_mld_melding_key,
                                      v_intensiteit_key);

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 1
            v_errorhint := 'Aanpassen aspectwaarde 1';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect1: (' ||  v_aspect1 || ') --> ' || rec.aspect1  ;

            IF NOT(rec.aspect1 = 'NVT') AND v_aspect1 <> rec.aspect1 AND NOT(INSTR(v_aspect1,'NVT')>0 AND INSTR(rec.aspect1,'NVT')>0)
            THEN
                IF rec.aspect1 = '0 - NVT' THEN
                set_aspect ('ASPECT1', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT1', rec.aspect1, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 2
            v_errorhint := 'Aanpassen aspectwaarde 2';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect2: (' ||  v_aspect2 || ') --> ' || rec.aspect2  ;

            IF NOT(rec.aspect2 = 'NVT') AND v_aspect2 <> rec.aspect2 AND NOT(INSTR(v_aspect2,'NVT')>0 AND INSTR(rec.aspect2,'NVT')>0)
            THEN
                IF rec.aspect2 = '0 - NVT' THEN
                set_aspect ('ASPECT2', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT2', rec.aspect2, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 3
            v_errorhint := 'Aanpassen aspectwaarde 3';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect3: (' ||  v_aspect3 || ') --> ' || rec.aspect3  ;

            IF NOT(rec.aspect3 = 'NVT') AND v_aspect3 <> rec.aspect3 AND NOT(INSTR(v_aspect3,'NVT')>0 AND INSTR(rec.aspect3,'NVT')>0)
            THEN
                IF rec.aspect3 = '0 - NVT' THEN
                set_aspect ('ASPECT3', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT3', rec.aspect3, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 4
            v_errorhint := 'Aanpassen aspectwaarde 4';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect4: (' ||  v_aspect4 || ') --> ' || rec.aspect4  ;

            IF NOT(rec.aspect4 = 'NVT') AND v_aspect4 <> rec.aspect4 AND NOT(INSTR(v_aspect4,'NVT')>0 AND INSTR(rec.aspect4,'NVT')>0)
            THEN
                IF rec.aspect4 = '0 - NVT' THEN
                set_aspect ('ASPECT4', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT4', rec.aspect4, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 5
            v_errorhint := 'Aanpassen aspectwaarde 5';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect5: (' ||  v_aspect5 || ') --> ' || rec.aspect5  ;

            IF NOT(rec.aspect5 = 'NVT') AND v_aspect5 <> rec.aspect5 AND NOT(INSTR(v_aspect5,'NVT')>0 AND INSTR(rec.aspect5,'NVT')>0)
            THEN
                IF rec.aspect5 = '0 - NVT' THEN
                set_aspect ('ASPECT5', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT5', rec.aspect5, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 6
            v_errorhint := 'Aanpassen aspectwaarde 6';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect6: (' ||  v_aspect6 || ') --> ' || rec.aspect6  ;

            IF NOT(rec.aspect6 = 'NVT') AND v_aspect6 <> rec.aspect6 AND NOT(INSTR(v_aspect6,'NVT')>0 AND INSTR(rec.aspect6,'NVT')>0)
            THEN
                IF rec.aspect6 = '0 - NVT' THEN
                set_aspect ('ASPECT6', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT6', rec.aspect6, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Aspect 7
            v_errorhint := 'Aanpassen aspectwaarde 7';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Aspect7: (' ||  v_aspect7 || ') --> ' || rec.aspect7  ;

            IF NOT(rec.aspect7 = 'NVT') AND v_aspect7 <> rec.aspect7 AND NOT(INSTR(v_aspect7,'NVT')>0 AND INSTR(rec.aspect7,'NVT')>0)
            THEN
                IF rec.aspect7 = '0 - NVT' THEN
                set_aspect ('ASPECT7', 'NVT', v_mld_melding_key);
                   ELSE
                   set_aspect ('ASPECT7', rec.aspect7, v_mld_melding_key);
                END IF;

            v_herberekenen:=1;
            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            --
            v_errorhint := 'Aanpassen Foto kenmerk';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Fotonaam: (' ||  v_foto || ') --> ' || rec.foto  ;

            IF rec.foto IS NOT NULL AND COALESCE(v_foto, '<leeg>') <> rec.foto AND v_foto_kenmerk_key IS NOT NULL
            THEN
                mld.upsertmeldingkenmerk (v_foto_kenmerk_key,
                                          v_mld_melding_key,
                                          rec.foto);

            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            --
            v_errorhint := 'Aanpassen Kosten kenmerk';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Kosten: (' ||  v_kosten || ') --> ' || rec.kosten  ;

            IF rec.kosten IS NOT NULL AND COALESCE(fac.safe_to_number(v_kosten), -1) <> rec.kosten AND v_kosten_kenmerk_key IS NOT NULL
            THEN
                mld.upsertmeldingkenmerk (v_kosten_kenmerk_key,
                                          v_mld_melding_key,
                                          TO_CHAR(rec.kosten));

            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Plandatum
            v_errorhint := 'Aanpassen Plandatum';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Plandatum: (' ||  TO_CHAR(v_plandatum_date) || ') --> ' || TO_CHAR(rec.plandatum)  ;

            IF rec.plandatum IS NOT NULL AND v_plandatum_date <> rec.plandatum
            THEN
              UPDATE mld_melding
              SET mld_melding_einddatum = rec.plandatum
              WHERE mld_melding_key = v_mld_melding_key ;

            fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            -- Inspecteur
            v_errorhint := 'Aanpassen Inspecteur / Aanvrager';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is gewijzigd via upload gebreken:' || CHR(13) || CHR(10) || 'Inspecteur: (' ||  v_inspecteur || ') --> ' || rec.prs_perslid_email  ;

            IF (rec.prs_perslid_email IS NOT NULL OR LENGTH (rec.prs_perslid_email) > 200) AND COALESCE(v_inspecteur, '<leeg>') <> rec.prs_perslid_email
            THEN

                 SELECT prs_perslid_key
                 INTO v_prs_perslid_key
                 FROM prs_v_aanwezigperslid
                 WHERE UPPER (prs_perslid_email) = UPPER (rec.prs_perslid_email);

                 IF v_prs_perslid_key IS NOT NULL
                 THEN

                    UPDATE mld_melding
                    SET prs_perslid_key = v_prs_perslid_key, prs_perslid_key_voor = v_prs_perslid_key
                    WHERE mld_melding_key = v_mld_melding_key ;

                 fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
                 END IF;
            END IF;

            -- Her-berekenen van de Conditie- en Prioriteitscore
            ---- Alleen als de melding status lopend heeft..
            ---- Alleen als de omvang, intensiteit of 1 vd aspectwaarden is veranderd..
            v_errorhint := 'Herberekenen conditie- en prio-score';
            v_aanduiding := 'Melding N' || TO_CHAR(v_mld_melding_key) || ' is herberekend via upload gebreken:' || CHR(13) || CHR(10) || 'Oorspronkelijke conditiescore: ' ||  TO_CHAR(v_conditiescore) || CHR(13) || CHR(10) || 'Oorspronkelijke prioriteitscore: ' ||  TO_CHAR(v_prioscore) ;

            IF v_mld_melding_status IN (0,4,7,99) AND v_herberekenen=1
            THEN

               BEGIN
               cnd.process_mjb_score_effects (v_mld_melding_key);
               END;
              COMMIT;

              fac.trackaction ('MLDUPD', v_mld_melding_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, v_aanduiding);
            END IF;

            v_count_import := v_count_import + 1;
            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_aanduiding || v_errormsg,
                                  v_errorhint);
                COMMIT;
        END;
    END LOOP;

    fac.imp_writelog (
        p_import_key,
        'S',
           'UPDATE NEN2767_RESULTS: aantal regels te verwerken: '
        || TO_CHAR (v_count_tot)
        || ' / aantal geldige regels: '
        || TO_CHAR (v_count_import)
        ||  ' / aantal BIJGEWERKTE, BESTAANDE gebreken: '
        || TO_CHAR (v_count_tot_n)
        ,
        '');
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
        v_errormsg :=
               'OTHERS (error '
            || oracle_err_num
            || '/'
            || oracle_err_mes
            || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          v_aanduiding || v_errormsg,
                          v_errorhint);
        COMMIT;
END rwsn_update_ins_gebreken;
/


--
-- MJOB Taken
--
CREATE OR REPLACE PROCEDURE rwsn_import_ins_mjob_taken (p_import_key IN NUMBER)
IS
   c_delim                         VARCHAR2 (2) := fac.import_delimiter(p_import_key);
   v_newline                       fac_imp_file.fac_imp_file_line%TYPE;    -- Input line
   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   v_file_index                     NUMBER;
   v_count                         NUMBER;
   v_dummy                         VARCHAR2 (100);
   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 (400);
   v_gebouw_code                   VARCHAR2 (255);
   v_deel_externnr                 VARCHAR2 (255);
   v_deel_omschrijving             VARCHAR2(200);
   v_srtcontrole_omschrijving      VARCHAR2(200);
   v_srtcontrole_prijs             VARCHAR2(200);
   v_srtcontrole_startjaar         VARCHAR2(200);
   v_srtcontrole_periode           VARCHAR2(200);

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

BEGIN
   -- Eerst opruiming
   DELETE FROM   rwsn_imp_ins_mjob_taken;

   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_file_index := rec1.fac_imp_file_index;
         v_errormsg := 'Fout bij opvragen importregel';
         v_aanduiding := '';
         v_ongeldig := 0;
         -- Lees alle veldwaarden
         fac.imp_getfield (v_newline, c_delim, v_gebouw_code);      -- Objectcode
         fac.imp_getfield (v_newline, c_delim, v_deel_externnr);    -- Element-ID
         fac.imp_getfield (v_newline, c_delim, v_srtcontrole_omschrijving);          -- Taak
         fac.imp_getfield (v_newline, c_delim, v_srtcontrole_prijs);
         fac.imp_getfield (v_newline, c_delim, v_srtcontrole_startjaar);
         fac.imp_getfield (v_newline, c_delim, v_srtcontrole_periode);

         v_gebouw_code := TRIM(v_gebouw_code);
         v_deel_externnr := TRIM(v_deel_externnr);
         v_srtcontrole_omschrijving := TRIM(v_srtcontrole_omschrijving);
         v_srtcontrole_prijs := TRIM(v_srtcontrole_prijs);
         v_srtcontrole_startjaar := TRIM(v_srtcontrole_startjaar);
         v_srtcontrole_periode := TRIM(v_srtcontrole_periode);

         v_aanduiding :=
               '['
            || v_gebouw_code
            || '|'
            || v_deel_externnr
            || '|'
            || v_srtcontrole_startjaar
            || '] ';

         -- 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_gebouw_code) = 'OBJECTCODE'
               AND UPPER(v_deel_externnr) = 'ELEMENT-ID'
               AND UPPER(v_srtcontrole_omschrijving) = 'TAAK OMSCHRIJVING'
               AND UPPER(v_srtcontrole_prijs) = 'TAAK EENHEIDSPRIJS'
               AND UPPER(v_srtcontrole_startjaar) = 'STARTJAAR'
               AND UPPER(v_srtcontrole_periode) = 'TAAK CYCLUS'
            THEN
               header_is_valid := 1;
            ELSE
               IF rec1.fac_imp_file_index = 1
               THEN

                  fac.imp_writelog (p_import_key,
                                    'E',
                                    'Ongeldige header aangetroffen:',
                                    'OBJECTCODE: ' || UPPER (v_gebouw_code) || CHR(10) ||
                                    'ELEMENT-ID: ' || UPPER (v_deel_externnr) || CHR(10) ||
                                    'TAAK OMSCHRIJVING: ' || UPPER (v_srtcontrole_omschrijving) || CHR(10) ||
                                    'TAAK EENHEIDSPRIJS: ' || UPPER (v_srtcontrole_prijs) || CHR(10) ||
                                    'STARTJAAR: ' || UPPER (v_srtcontrole_startjaar) || CHR(10) ||
                                    'TAAK CYCLUS: ' || UPPER (v_srtcontrole_periode));
                END IF;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            v_errormsg := 'Gebouwcode kan niet gevonden worden';

            SELECT alg_gebouw_key
              INTO v_dummy
              FROM alg_gebouw g
             WHERE alg_gebouw_verwijder IS NULL
               AND UPPER(alg_gebouw_code) = v_gebouw_code;

            v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat';
            SELECT d.ins_deel_omschrijving
              INTO v_deel_omschrijving
              FROM ins_v_deel_gegevens dg, ins_deel d
             WHERE dg.ins_deel_key = d.ins_deel_key
               AND dg.alg_gebouw_upper = v_gebouw_code
               AND d.ins_deel_externnr = v_deel_externnr;

            --
            v_errormsg := 'Prijs ongeldig; maximale grootte 999999.99';
            v_srtcontrole_prijs := REPLACE (v_srtcontrole_prijs, ',', '.');

            IF fac.safe_to_number (v_srtcontrole_prijs) IS NULL
            THEN
               v_ongeldig := 1;
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || ' Prijs:' || v_srtcontrole_prijs || '-' || v_errormsg,
                                 'Prijs is niet geldig.');
            END IF;

            --
            v_errormsg := 'Startjaar ongeldig; 9999';

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

            --
            v_errorhint := 'Bepaling cyclus';
            IF fac.safe_to_number (v_srtcontrole_periode) IS NULL
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog (p_import_key,
                                    'W',
                                    v_aanduiding || ' Cyclus:' || v_srtcontrole_periode || '-' || v_errormsg,
                                    'Regel wordt overgeslagen!');
            END IF;

            v_errormsg := 'Bepaal object id - Kijk of het externnr bestaat';
            SELECT d.ins_deel_omschrijving
              INTO v_deel_omschrijving
              FROM ins_v_deel_gegevens dg, ins_deel d
             WHERE dg.ins_deel_key = d.ins_deel_key
               AND dg.alg_gebouw_upper = v_gebouw_code
               AND d.ins_deel_externnr = v_deel_externnr;

             IF (v_ongeldig = 0)
             THEN
                 BEGIN
                     v_errorhint :=
                         'Fout bij toevoegen regel aan importtabel cnd_imp_nen2767_results';

                     INSERT INTO rwsn_imp_ins_mjob_taken (alg_gebouw_code,
                                                          ins_deel_omschrijving,
                                                          ins_srtcontrole_omschrijving,
                                                          ins_srtcontrole_prijs,
                                                          ins_srtcontrole_startjaar,
                                                          ins_srtcontrole_periode,
                                                          ins_deel_externnr)
                          VALUES (v_gebouw_code,
                                  v_deel_omschrijving,
                                  v_srtcontrole_omschrijving || ' (' || v_srtcontrole_periode || 'j) - ' || v_srtcontrole_startjaar,
                                  v_srtcontrole_prijs,
                                  v_srtcontrole_startjaar,
                                  v_srtcontrole_periode,
                                  v_deel_externnr);

                     v_count_import := v_count_import + 1;
                     COMMIT;
                 EXCEPTION
                     WHEN OTHERS
                     THEN
                         oracle_err_num := SQLCODE;
                         oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                         v_errormsg :=
                                v_errorhint
                             || ' ORACLE (error '
                             || oracle_err_num
                             || '/'
                             || oracle_err_mes
                             || ')';
                         fac.imp_writelog (
                             p_import_key,
                             'E',
                             v_aanduiding || v_errormsg,
                             'Ingelezen regel kan niet worden weggeschreven!');
                         COMMIT;
                 END;
             END IF; -- ongeldig
             COMMIT;
         END IF; -- ongeldig

      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;

   IF (header_is_valid = 1)
   THEN
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
         ''
      );
      fac.imp_writelog (
         p_import_key,
         'S',
         'Objecten/aantal ongeldige niet ingelezen importregels: '
         || TO_CHAR (v_count_tot - v_count_import),
         ''
      );
   END IF;

   UPDATE imp_log SET imp_log_hint = 'Element bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Bepaal object id - Kijk of het externnr bestaat ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND fac_import_key = p_import_key;
   UPDATE imp_log SET imp_log_hint = 'Gebouwcode bestaat niet in Facilitor' WHERE imp_log_omschrijving LIKE '%Gebouwcode kan niet gevonden worden ORACLE (error 100/ORA'||'-01403: Geen gegevens gevonden.)%' AND 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 objecten afgebroken! regel:' || v_file_index);
END rwsn_import_ins_mjob_taken;
/


CREATE OR REPLACE PROCEDURE rwsn_update_ins_mjob_taken (
    p_import_key   IN NUMBER)
IS

   v_errormsg                      VARCHAR2 (1000);
   v_errorhint                     VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_ongeldig                      NUMBER (1);
   v_aanduiding                    VARCHAR (400);

   v_ins_discipline_key            NUMBER;
   v_ctr_discipline_key            NUMBER;
   v_srtcontrole_key               NUMBER;
   v_srtcontroledl_xcp_key         NUMBER;
   v_deel_key                      NUMBER;

   -- Overige velden:
   CURSOR c
   IS
        SELECT alg_gebouw_code, ins_deel_omschrijving, ins_srtcontrole_omschrijving, SUM(ins_srtcontrole_prijs) ins_srtcontrole_prijs, ins_srtcontrole_startjaar, ins_srtcontrole_periode, ins_deel_externnr
          FROM rwsn_imp_ins_mjob_taken
      GROUP BY alg_gebouw_code, ins_deel_omschrijving, ins_srtcontrole_omschrijving, ins_srtcontrole_startjaar, ins_srtcontrole_periode, ins_deel_externnr
      ORDER BY alg_gebouw_code, ins_deel_omschrijving;

   CURSOR c_del (c_discipline_key NUMBER)
   IS
        SELECT xcp.*
          FROM ins_v_deel_gegevens dg, ins_srtcontroledl_xcp xcp, ins_srtcontrole sc
         WHERE     dg.ins_deel_key = xcp.ins_deel_key
               AND dg.ins_discipline_key = c_discipline_key
               AND xcp.ins_srtcontrole_key = sc.ins_srtcontrole_key
               AND alg_gebouw_upper IN (SELECT DISTINCT alg_gebouw_code
                                          FROM rwsn_imp_ins_mjob_taken)
               AND NOT EXISTS
                       (SELECT 1
                          FROM rwsn_imp_ins_mjob_taken imt
                         WHERE imt.INS_DEEL_OMSCHRIJVING = dg.ins_deel_omschrijving
                           AND sc.ins_srtcontrole_omschrijving = imt.ins_srtcontrole_omschrijving
                           AND xcp.ins_srtcontroledl_xcp_startdat = TO_DATE ('01-01-' || imt.ins_srtcontrole_startjaar, 'dd-mm-yyyy'));

BEGIN

   v_errorhint := 'Zoek de taakcategorie Vervanging';
   SELECT ins_discipline_key
     INTO v_ctr_discipline_key
     FROM ctr_discipline d, ctr_disc_params dp
    WHERE d.ins_discipline_key = dp.ctr_ins_discipline_key
      AND dp.ctr_disc_params_ismjob = 1
      AND d.ins_discipline_omschrijving = 'Vervanging';

   v_errorhint := 'Zoek de discipline MJOB';
   SELECT ins_discipline_key
     INTO v_ins_discipline_key
     FROM ins_discipline d
    WHERE d.ins_discipline_omschrijving = 'MJOB';

    FOR rec IN c
    LOOP
      BEGIN
         v_errorhint := 'Controleer of de generieke taak voor vervanging (xj) al bestaat';
         SELECT ins_srtcontrole_key
           INTO v_srtcontrole_key
           FROM ins_srtcontrole
          WHERE ins_srtinstallatie_key = v_ins_discipline_key
            AND ctr_discipline_key = v_ctr_discipline_key
            AND ins_srtcontrole_omschrijving = rec.ins_srtcontrole_omschrijving;

      EXCEPTION WHEN NO_DATA_FOUND
      THEN
         v_errorhint := 'Voeg de generieke taak vervanging toe';
         INSERT INTO ins_srtcontrole (
                        ins_srtinstallatie_key,
                        ins_srtcontrole_niveau,
                        ins_srtcontrole_omschrijving,
                        ctr_discipline_key,
                        ins_srtcontrole_mode,
                        ins_srtcontrole_periode,
                        ins_srtcontrole_eenheid,
                        ins_srtcontrole_level,
                        ins_srtcontrole_materiaal,
                        ins_srtcontrole_percentage)
                 VALUES (
                     v_ins_discipline_key,
                     'D',
                     rec.ins_srtcontrole_omschrijving,
                     v_ctr_discipline_key,
                     1,           -- interval
                     0,           -- periode
                     4,           -- eenheid (altijd jaarlijks bij mjob)
                     10,          -- we kennen geen niveaus omdat we alleen maar vervangen
                     0,           -- bedrag is altijd 0 omdat we deze per object gaan overrullen.
                     100)
               RETURNING ins_srtcontrole_key INTO v_srtcontrole_key;
       END;


       BEGIN
          v_aanduiding := rec.ins_deel_omschrijving;
          -- Zoek het object
          v_errorhint := 'Zoek het elemement op';
          SELECT ins_deel_key
            INTO v_deel_key
            FROM ins_deel
           WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving;

          BEGIN
             v_errorhint := 'Bestaat er al een taak voor dit element met hetzelfde startjaar?';
             SELECT ins_srtcontroledl_xcp_key
               INTO v_srtcontroledl_xcp_key
               FROM ins_srtcontroledl_xcp xcp
              WHERE ins_deel_key = v_deel_key
                AND ins_srtcontrole_key = v_srtcontrole_key
                AND xcp.ins_srtcontroledl_xcp_startdat = TO_DATE ('01-01-' || rec.ins_srtcontrole_startjaar, 'dd-mm-yyyy');

            v_errorhint := 'Bijwerken van de taak bij het element';
            UPDATE ins_srtcontroledl_xcp
               SET ins_srtcontroledl_xcp_materia = rec.ins_srtcontrole_prijs,
                   ins_srtcontroledl_xcp_opmerk = rec.ins_srtcontrole_omschrijving
             WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key;

          EXCEPTION WHEN NO_DATA_FOUND
          THEN
             v_errorhint := 'Aanmaken van de taak bij het element';
             INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
                                                ins_srtcontrole_key,
                                                ins_srtcontroledl_xcp_materia,
                                                ins_srtcontroledl_xcp_startdat,
                                                ins_srtcontroledl_xcp_periode,
                                                ins_scenario_key,
                                                ins_srtcontroledl_xcp_opmerk)
                    VALUES (v_deel_key,
                            v_srtcontrole_key,
                            rec.ins_srtcontrole_prijs,
                            TO_DATE ('01-01-' || rec.ins_srtcontrole_startjaar, 'dd-mm-yyyy'),
                            rec.ins_srtcontrole_periode,
                            1,
                            rec.ins_srtcontrole_omschrijving);
          END;

       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,
                            v_errorhint);
       END;
    END LOOP;

    -- taken die niet voorkomen in de import gaan we verwijderen
    v_errorhint := 'Verwijderen van taken';
    FOR rec_del IN c_del (v_ins_discipline_key)
    LOOP
       v_aanduiding := rec_del.ins_srtcontroledl_xcp_key;
       DELETE ins_srtcontroledl_xcp WHERE ins_srtcontroledl_xcp_key = rec_del.ins_srtcontroledl_xcp_key;
    END LOOP;


   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,
                        v_errorhint);


END rwsn_update_ins_mjob_taken;
/


CREATE OR REPLACE PROCEDURE rwsn_daily
AS
BEGIN
   RWSN.cnd_accept_melding;
END;
/

-- RWSN#80431: Gebruikers die dit jaar en het voorgaande jaar zijn aangemaakt
--             via SAML provisioning op basis van tracking, waarin dan staat:
--             Gebruiker '...' aangemaakt met key 12345 voor idp '1'
CREATE OR REPLACE VIEW RWSN_V_RAP_PRS_VIA_SAML
(
   user_key,
   aanmaakdatum,
   naam,
   email,
   laatste_login
)
AS
   SELECT p.prs_perslid_key,
          p.prs_perslid_aanmaak,
          pf.prs_perslid_naam_full,
          p.prs_perslid_email,
          p.prs_perslid_login
     FROM prs_perslid p,
          fac_tracking t,
          prs_v_perslid_fullnames_all pf
    WHERE p.prs_perslid_aanmaak > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy') -- Sinds 1-1 vorig jaar
          AND p.prs_perslid_key = t.fac_tracking_refkey
          AND t.fac_srtnotificatie_key = 210                         -- PRSUPD
          AND INSTR (UPPER (t.fac_tracking_oms), 'VOOR IDP ''1''') > 0 -- Aangemaakt via SAML/IDP=1
          AND p.prs_perslid_key = pf.prs_perslid_key;

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile
