--
-- $Id$
--
-- Script containing customer specific db-configuration for HSLE: HogeSchool LEiden
DEFINE thisfile = 'HSLE.SQL'
DEFINE dbuser   = '^HSLE'

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

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

--
-- Personen import
--
CREATE OR REPLACE PROCEDURE hsle_post_import_perslid (p_import_key IN NUMBER)
AS
BEGIN
  UPDATE fac_imp_perslid SET prs_perslid_dienstverband = 100 * fac.safe_to_number(prs_kenmerk2)
  WHERE fac_import_key = p_import_key;

  UPDATE fac_imp_perslid
  SET prs_afdeling_naam = SUBSTR(prs_afdeling_naam, 1, INSTR(prs_afdeling_naam,'#') - 1 )
    WHERE instr(prs_afdeling_naam,'#') > 0
    AND UPPER(prs_perslid_email) LIKE '%STUDENT.HSLEIDEN.NL%'
    AND fac_import_key = p_import_key;

  COMMIT;
END;
/

CREATE OR REPLACE PROCEDURE hsle_import_perslid (p_import_key IN NUMBER)
AS
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_errormsg                VARCHAR2 (400);
   v_errorhint               VARCHAR2 (400);

   v_aantal_in_FCLT          NUMBER;
   v_aantal_uit_UMRA         NUMBER;
BEGIN
        v_errorhint := 'Generieke update';
        -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
        prs.import_perslid (p_import_key,
                           '0;0;0;0;0;0;6;4;3;1;' ||
                           '2;0;0;0;0;10;9;8;0;5;' ||
                           '7;11;0;0;0;0;12;13;14;15;'||
                           '0;0;0;0;0;0;0;0;0;0;'||
                           '0;0;0;0;0;0',
                           'Roepnaam;Voorletters;Tussenvoegsel;Achternaam;Persnr.;Afdnr.;Functie;Email;Mobile;Telefoon;Loginnaam;IID;Fte;Indienst;Uitdienst%'
                           );
        COMMIT;
        hsle_post_import_perslid(p_import_key);
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END hsle_import_perslid;
/

CREATE OR REPLACE PROCEDURE hsle_post_update_perslid (p_import_key IN NUMBER)
AS
    CURSOR c_perslid_kenmerk_iid
    IS
        SELECT prs_perslid_key, prs_kenmerk1, prs_perslid_email
        FROM fac_imp_perslid
        WHERE fac_import_key = p_import_key
        AND prs_kenmerk1 IS NOT NULL;

    CURSOR c_perslid_kenmerk_overig
    IS
        SELECT prs_perslid_key, prs_kenmerk3 AS prs_perslid_ingangsdatum, prs_kenmerk4 AS prs_perslid_einddatum, prs_perslid_email
        FROM fac_imp_perslid
        WHERE fac_import_key = p_import_key;

    -- De medewerkers, dus de niet-studenten, krijgen een extra autorisatiegroep (key 302): "FE - Medewerker", als ze deze autogroep (key 302) nog niet hebben.
    CURSOR c_perslid_niet_studenten
    IS
        SELECT ip.prs_perslid_key, ip.prs_perslid_email
        FROM fac_imp_perslid ip
        WHERE fac_import_key = p_import_key
        AND UPPER(ip.prs_perslid_email) NOT LIKE '%STUDENT.HSLEIDEN.NL%'
        AND NOT EXISTS (SELECT 'x' FROM  fac_gebruikersgroep gg
                                    WHERE gg.prs_perslid_key = ip.prs_perslid_key
                                    AND gg.fac_groep_key = 302);

    CURSOR c_perslid_studenten
    IS
        SELECT ip.prs_perslid_key, ip.prs_perslid_email
        FROM fac_imp_perslid ip
        WHERE fac_import_key = p_import_key
        AND UPPER(ip.prs_perslid_email) LIKE '%STUDENT.HSLEIDEN.NL%'
        AND NOT EXISTS (SELECT 'x' FROM  fac_gebruikersgroep gg
                                    WHERE gg.prs_perslid_key = ip.prs_perslid_key
                                    AND gg.fac_groep_key = 621);
BEGIN
   FOR rc IN c_perslid_kenmerk_iid
   LOOP
        BEGIN
                -- IID heeft vaste kenmerk-key 1000
                prs.upsertkenmerk(1000, rc.prs_perslid_key, rc.prs_kenmerk1);
        EXCEPTION
            WHEN OTHERS
                THEN
                fac.imp_writelog (p_import_key,
                                'W',
                                'Post update 1 (IID) bij persoon' || rc.prs_perslid_key || ' is NIET volledig uitgevoerd )',
                                'Email:' || rc.prs_perslid_email
                                );
        END;
   END LOOP;

   FOR rc IN c_perslid_kenmerk_overig
   LOOP
        BEGIN
                UPDATE prs_perslid p
                SET p.prs_perslid_ingangsdatum = COALESCE(to_date(rc.prs_perslid_ingangsdatum, 'dd-mm-yyyy'), p.prs_perslid_ingangsdatum),
                        p.prs_perslid_einddatum = to_date(rc.prs_perslid_einddatum,'dd-mm-yyyy')
                WHERE p.prs_perslid_key = rc.prs_perslid_key;
        EXCEPTION
            WHEN OTHERS
                THEN
                fac.imp_writelog (p_import_key,
                                'W',
                                'Post update 2 (KENMERK_OVERIG) bij persoon' || rc.prs_perslid_key || ' is NIET volledig uitgevoerd )',
                                'Email:' || rc.prs_perslid_email
                                );
        END;
   END LOOP;

   FOR rc IN c_perslid_niet_studenten
   LOOP
        BEGIN
                INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) VALUES (rc.prs_perslid_key, 302);
        EXCEPTION
            WHEN OTHERS
                THEN
                fac.imp_writelog (p_import_key,
                                'W',
                                'Post update 3 (AUTORISATIE GROEP medewerker) bij persoon' || rc.prs_perslid_key || ' is NIET volledig uitgevoerd )',
                                'Email:' || rc.prs_perslid_email
                                );
        END;
   END LOOP;

   FOR rc IN c_perslid_studenten
   LOOP
        BEGIN
                INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) VALUES (rc.prs_perslid_key, 621);
        EXCEPTION
            WHEN OTHERS
                THEN
                fac.imp_writelog (p_import_key,
                                'W',
                                'Post update 4 (AUTORISATIE GROEP student) bij persoon' || rc.prs_perslid_key || ' is NIET volledig uitgevoerd )',
                                'Email:' || rc.prs_perslid_email
                                );
        END;
   END LOOP;
END;
/

CREATE OR REPLACE PROCEDURE hsle_update_perslid (p_import_key IN NUMBER)
IS
    -- Alle personen verwijderen die niet meer in import bestand voorkomen.
    --CURSOR c_del
    --IS
    --    SELECT p.prs_perslid_key, p.prs_perslid_oslogin, pf.prs_perslid_naam_full
    --      FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
    --     WHERE p.prs_perslid_oslogin = UPPER (i.prs_perslid_oslogin(+))
    --       AND p.prs_perslid_verwijder IS NULL
    --       AND SUBSTR (p.prs_perslid_oslogin, 1, 1) <> '_'
    --       AND pf.prs_perslid_key = p.prs_perslid_key
    --       AND i.prs_perslid_oslogin IS NULL
    --    ORDER BY 2;

    -- Actiepunt 50 uit besluitenlijst: Alleen studenten verwijderen, medewerkers laten staan
    -- Studenten zijn de personen met '@student.hsleiden.nl' in hun email.
    CURSOR c_del
    IS
        SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
          FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
         WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
           AND p.prs_perslid_verwijder IS NULL
           AND SUBSTR (p.prs_perslid_oslogin, 1, 1) <> '_'
           AND pf.prs_perslid_key = p.prs_perslid_key
           AND p.prs_perslid_nr IS NOT NULL
           AND i.prs_perslid_nr IS NULL
           --AND p.prs_perslid_email like '%@student.hsleiden.nl%' --HSLE#52416
        ORDER BY 2;

    v_count   NUMBER;
BEGIN
    -- generic update
    SELECT count(*)
      INTO v_count
      FROM fac_imp_perslid;

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

    -- 'LOGIN' betekent dat op basis van Login wordt gematched.
    -- 'NR' betekent dat op basis van Personeelsnummer wordt gematched.
    -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
    prs.update_perslid (p_import_key, 'NR', NULL);

    -- Verwijder personen die niet meer in de import voorkomen.
    FOR rec IN c_del
    LOOP
       BEGIN
          prs.delete_perslid (p_import_key, rec.prs_perslid_key);
       END;
    END LOOP;

    hsle_post_update_perslid(p_import_key);
END hsle_update_perslid;
/




-- View voor referentie naar RES_RSV_RUIMTE
CREATE OR REPLACE VIEW HSLE_V_RES_REF
(
    res_rsv_ruimte_key,
    res_rsv_ruimte_omschr,
    res_rsv_ruimte_verwijder
)
AS
    SELECT res_rsv_ruimte_key,
              res_reservering_key
           || '/'
           || res_rsv_ruimte_volgnr
           || res_rsv_ruimte_omschrijving,
           res_rsv_ruimte_verwijder
      FROM res_rsv_ruimte;
-- VIEW om kenmerken toe te voegen aan UDR_DEELMELDING
CREATE OR REPLACE VIEW HSLE_V_INS_DEELMELDING
(
    DEEL_KEY,
    DISCIPLINE,
    SOORT,
    GROEP,
    SOORTCODE,
    OMSCHRIJVING,
    PLAATSEIGENAAR,
    PLAATSEIGENAARTYPE,
    PLAATSAANDUIDING,
    EIGENAAR,
    EIGENAAR_KEY,
    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,
    MELDING_KEY,
    MELDINGNUMMER,
    MELDING_START_KEY,
    EXTERNNUMMER,
    MELDING_DISTRICT,
    MELDING_LOCATIECODE,
    MELDING_LOCATIE,
    MELDING_LOCATIEPLAATS,
    MELDING_GEBOUWCODE,
    MELDING_GEBOUW,
    MELDING_VERDIEPING,
    MELDING_RUIMTENR,
    MELDING_RUIMTE,
    MELDING_ORDERNR,
    KOSTENSOORTGROEP,
    KOSTENSOORT,
    KOSTENPLAATS,
    KOSTENPLAATS_OMS,
    MELDER,
    MELDER_KEY,
    AFDELING,
    AFDELING_OMSCHRIJVING,
    BEDRIJF_KEY,
    INVOERDER,
    MELDBRON,
    SOORTMELDING,
    PRODUCTGROEP,
    SUBPRODUCTGROEP,
    BEHANDELGROEP,
    BEHANDELAAR,
    BEHANDELAAR_KEY,
    SUBPRODUCTGROEPGROEP,
    MELDING_STATUS,
    SLA_NVT,
    SLA_WERKDGN,
    SLA_WERKUREN,
    SLA_RESPIJTDGN,
    SLA_RESPIJTUREN,
    SLA_ACCPTDGN,
    SLA_ACCPTUREN,
    PLAN_UITVOERTIJD_SLA,
    MELDING_DATUM,
    MELDING_EINDDATUM,
    MELDING_ACCEPTDATUM,
    MELDING_AFGEMELD,
    MELDING_ACCEPTED,
    DOORLOOPTIJD_WERKDGN,
    DOORLOOPTIJD_WERKUREN,
    ONDERWERP,
    VOMSCHRIJVING,
    MELDING_OPMERKING,
    PRIORITEIT,
    PRIORITEITTXT,
    RATING,
    RATING_OPMERKING,
    BOLLETJE,
    ACCEPT_SLA_DAGEN,
    ACCEPT_SLA_UREN,
    UITVOERING_SLA_DAGEN,
    UITVOERING_SLA_UREN,
    AFSPRAAK_SLA_DAGEN,
    AFSPRAAK_SLA_UREN,
    ACCEPT_SLA_OPTIJD,
    UITVOERING_SLA_OPTIJD,
    AFSPRAAK_SLA_OPTIJD,
    SELFSERVICE,
    MELDING_KOFFIE
)
AS
    SELECT d.deel_key,
           d.discipline,
           d.soort,
           d.groep,
           d.soortcode,
           d.omschrijving,
           d.plaatseigenaar,
           d.plaatseigenaartype,
           d.plaatsaanduiding,
           d.eigenaar,
           d.eigenaar_key,
           d.opmerking,
           d.regio,
           d.district,
           d.locatie_code,
           d.locatie_omschrijving,
           d.locatie_plaats,
           d.gebouwcode,
           d.gebouw,
           d.terreinsectorcode,
           d.terreinsector,
           d.verdiepingcode,
           d.ruimtenr,
           d.werkplekvolgnr,
           d.werkplek,
           d.uitleenbaar,
           d.uitgeleend,
           d.res_opmerking,
           d.beheerder,
           d.vervaldatum,
           d.actief,
           d.aantal,
           d.state,
           d.statedate,
           d.fclt_3d_discipline_key,
           d.fclt_3d_afdeling_key,
           d.fclt_3d_locatie_key,
           m.melding_key,
           m.meldingnummer,
           m.melding_start_key,
           m.externnummer,
           m.melding_district,
           m.melding_locatiecode,
           m.melding_locatie,
           m.melding_locatieplaats,
           --m.fclt_3d_locatie_key,
           m.melding_gebouwcode,
           m.melding_gebouw,
           m.melding_verdieping,
           m.melding_ruimtenr,
           m.melding_ruimte,
           m.melding_ordernr,
           m.kostensoortgroep,
           m.kostensoort,
           m.kostenplaats,
           m.kostenplaats_oms,
           m.melder,
           m.melder_key,
           m.afdeling,
           m.afdeling_omschrijving,
           --m.fclt_3d_afdeling_key,
           m.bedrijf_key,
           m.invoerder,
           m.meldbron,
           m.soortmelding,
           --m.fclt_3d_discipline_key,
           m.productgroep,
           m.subproductgroep,
           m.behandelgroep,
           m.behandelaar,
           m.behandelaar_key,
           m.subproductgroepgroep,
           m.melding_status,
           m.sla_nvt,
           m.sla_werkdgn,
           m.sla_werkuren,
           m.sla_respijtdgn,
           m.sla_respijturen,
           m.sla_accptdgn,
           m.sla_accpturen,
           m.plan_uitvoertijd_sla,
           m.melding_datum,
           m.melding_einddatum,
           m.melding_acceptdatum,
           m.melding_afgemeld,
           m.melding_accepted,
           m.doorlooptijd_werkdgn,
           m.doorlooptijd_werkuren,
           m.onderwerp,
           m.vomschrijving,
           m.melding_opmerking,
           m.prioriteit,
           m.prioriteittxt,
           m.rating,
           m.rating_opmerking,
           m.bolletje,
           m.accept_sla_dagen,
           m.accept_sla_uren,
           m.uitvoering_sla_dagen,
           m.uitvoering_sla_uren,
           m.afspraak_sla_dagen,
           m.afspraak_sla_uren,
           m.accept_sla_optijd,
           m.uitvoering_sla_optijd,
           m.afspraak_sla_optijd,
           m.selfservice,
           (SELECT ud.fac_usrdata_omschr
              FROM mld_kenmerkmelding km, fac_usrdata ud
             WHERE     km.mld_kenmerk_key = 248
                   AND km.mld_melding_key = m.melding_key
                   AND TO_CHAR (ud.FAC_USRDATA_KEY) =
                       mld_kenmerkmelding_waarde)
               waarde
      FROM ins_v_udr_deel d, mld_v_udr_melding m, mld_melding_object mo
     WHERE     mo.mld_melding_key = m.melding_key
           AND mo.ins_deel_key = d.deel_key;      


/*
CREATE OR REPLACE VIEW hsle_v_hv_actual
(
   ruimte_key,
   ruimte_nr,
   verdieping_code,
   gebouw_code,
   locatie_code,
   omschrijving,
   ruimtefunctie,
   bvo,
   omtrek,
   inhoud,
   opmerking,
   aantal_wp,
   afdeling_code,
   afdeling_oms,
   afdeling_bez,
   vloerafwerking,
   status,
   werkplekken,
   toelichting,
   inrichting,
   opleiding
)
AS
   SELECT x.alg_ruimte_key,
          x.alg_ruimte_nr,
          x.alg_verdieping_code,
          x.alg_gebouw_code,
          x.alg_locatie_code,
          x.alg_ruimte_omschrijving,
          sr.alg_srtruimte_omschrijving,
          x.alg_ruimte_bruto_vloeropp,
          x.alg_ruimte_omtrek,
          x.alg_ruimte_inhoud,
          x.alg_ruimte_opmerking,
          pwp.aantal,
          afd.prs_afdeling_naam,
          afd.prs_afdeling_omschrijving,
          ra.prs_ruimteafdeling_bezetting,
          ud1.fac_usrdata_omschr vloerafwerking,
          ud2.fac_usrdata_omschr status,
          ok3.alg_onrgoedkenmerk_waarde werkplekken,
          ok4.alg_onrgoedkenmerk_waarde toelichting,
          ok5.alg_onrgoedkenmerk_waarde inrichting,
          ud6.fac_usrdata_omschr opleiding
     FROM (SELECT r.alg_ruimte_key,
                  r.alg_ruimte_nr,
                  v.alg_verdieping_code,
                  g.alg_gebouw_code,
                  l.alg_locatie_code,
                  r.alg_ruimte_omschrijving,
                  r.alg_srtruimte_key,
                  r.alg_ruimte_bruto_vloeropp,
                  r.alg_ruimte_omtrek,
                  r.alg_ruimte_inhoud,
                  r.alg_ruimte_opmerking
             FROM alg_v_aanwezigruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
            WHERE r.alg_verdieping_key = v.alg_verdieping_key
                  AND v.alg_gebouw_key = g.alg_gebouw_key
                  AND g.alg_locatie_key = l.alg_locatie_key) x
          LEFT JOIN alg_v_aanwezigsrtruimte sr
             ON x.alg_srtruimte_key = sr.alg_srtruimte_key
          LEFT JOIN (  SELECT wp.prs_alg_ruimte_key, COUNT ( * ) aantal
                         FROM prs_perslidwerkplek pw, prs_werkplek wp
                        WHERE pw.prs_werkplek_key = wp.prs_werkplek_key
                     GROUP BY wp.prs_alg_ruimte_key) pwp
             ON x.alg_ruimte_key = pwp.prs_alg_ruimte_key
          LEFT JOIN prs_v_aanwezigruimteafdeling ra  -- Afdeling(en) op ruimte
             ON x.alg_ruimte_key = ra.alg_ruimte_key
          LEFT JOIN prs_afdeling afd                               -- Afdeling
             ON ra.prs_afdeling_key = afd.prs_afdeling_key
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk ok1
             ON x.alg_ruimte_key = ok1.alg_onrgoed_key
                AND ok1.alg_kenmerk_key = 1003               -- Vloerafwerking
          LEFT JOIN fac_v_aanwezigusrdata ud1
             ON fac.safe_to_number (ok1.alg_onrgoedkenmerk_waarde) = ud1.fac_usrdata_key
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk ok2
             ON x.alg_ruimte_key = ok2.alg_onrgoed_key
                AND ok2.alg_kenmerk_key = 1004                       -- Status
          LEFT JOIN fac_v_aanwezigusrdata ud2
             ON fac.safe_to_number (ok2.alg_onrgoedkenmerk_waarde) = ud2.fac_usrdata_key
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk ok3
             ON x.alg_ruimte_key = ok3.alg_onrgoed_key
                AND ok3.alg_kenmerk_key = 1005                  -- Werkplekken
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk ok4
             ON x.alg_ruimte_key = ok4.alg_onrgoed_key
                AND ok4.alg_kenmerk_key = 1006           -- Toelichting/beheer
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk ok5
             ON x.alg_ruimte_key = ok5.alg_onrgoed_key
                AND ok5.alg_kenmerk_key = 1040                   -- Inrichting
          LEFT JOIN alg_v_aanwezigonrgoedkenmerk ok6
             ON x.alg_ruimte_key = ok6.alg_onrgoed_key
                AND ok6.alg_kenmerk_key = 1060                    -- Opleiding
          LEFT JOIN fac_v_aanwezigusrdata ud6
             ON fac.safe_to_number (ok6.alg_onrgoedkenmerk_waarde) = ud6.fac_usrdata_key
;

-- Dummy export NACHTWERK!
-- HSLE#56067: Maandelijks freeze van alle ruimtegegevens (incl. afdeling).
CREATE OR REPLACE PROCEDURE hsle_select_nachtwerk (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2)
AS
   -- Cursor over alle ruimteregels!
   CURSOR c1
   IS
        SELECT hv.*
          FROM hsle_v_hv_actual hv
      ORDER BY hv.ruimte_key,
               hv.afdeling_code,
               hv.afdeling_oms;

   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count_tot      NUMBER (10);
   freeze_date      DATE;
BEGIN
   v_count_tot := 0;
   freeze_date := SYSDATE;

   FOR rec IN c1
   LOOP
      INSERT INTO hsle_hv_freeze
                  (dis_oms, loc_code, geb_code, ver_code,
                   ruimte_nr, ruimtesoort, wp_cap,
                   teken_opp, sp_nummer, sp_naam, bezetting,
                   m2_wpnorm, m2_tarief, freeze_datum, freeze_state
                  )
           VALUES (rec.dis_oms, rec.loc_code, rec.geb_code, rec.ver_code,
                   rec.ruimte_nr, rec.ruimtesoort, rec.wp_cap,
                   rec.teken_opp, rec.sp_nummer, rec.sp_naam, rec.bezetting,
                   rec.m2_wpnorm, rec.m2_tarief, freeze_date, 'F'
                  );

      v_count_tot := v_count_tot + 1;
   END LOOP;

   fac.writelog (p_applname, 'S', 'Ruimtegegevens/#bevroren: ' || TO_CHAR (v_count_tot), '');
   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 NACHTWERK afgebroken!', v_errormsg);
END hsle_select_nachtwerk;
/
*/
CREATE OR REPLACE PROCEDURE hsle_processemail (
   pfrom        IN VARCHAR2,
   pto          IN VARCHAR2,
   psubject     IN VARCHAR2,
   pbody        IN VARCHAR2,
   psessionid   IN VARCHAR2,
   puserkey     IN NUMBER DEFAULT NULL)
AS
   v_errormsg                VARCHAR2 (1000);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);

   sender                    prs_perslid.prs_perslid_key%TYPE;
   kostenplaats              prs_afdeling.prs_kostenplaats_key%TYPE;
   v_mld_key_uit_subject     mld_melding.mld_melding_key%TYPE;
   v_mldkey                  mld_melding.mld_melding_key%TYPE;
   defaultstdmelding         fac_setting.fac_setting_default%TYPE;
   kkey                      mld_kenmerk.mld_kenmerk_key%TYPE;
   v_mailadres_kenmerk_key   mld_kenmerk.mld_kenmerk_key%TYPE;
   v_meldbron_kenmerk_key    mld_kenmerk.mld_kenmerk_key%TYPE;

   v_from                    VARCHAR2 (1000) := '';
   v_voor_at                 VARCHAR2 (1000) := '';
   v_na_at                   VARCHAR2 (1000) := '';

   subject_regexp            fac_setting.fac_setting_default%TYPE;
   v_behandelaar_key         mld_melding.mld_melding_behandelaar_key%TYPE;
   v_mldnum                  VARCHAR2 (4000);
   v_srtdisc                 VARCHAR2 (4000);
   v_mldprefix               VARCHAR2 (10);
   --v_flag_on_fenote          NUMBER (10);
   v_flag_on_bonote          NUMBER (10);
   v_mld_meldbron_key        NUMBER (10);
   l_body                    VARCHAR2 (4000);
   l_vantekst                VARCHAR2 (100);
   l_van_pos                 NUMBER (10);
   v_count                   NUMBER (10);

   -- HSLE#35572: Resultaat is het linkerdeel van een string p_str tot en met waar de zoekstring p_search_str bestaat, zo niet, dan levert dan de NULL value op.
   -- Let op: als de zoekstring niet in de eerste 4000 tekens wordt gevonden, dan wordt ook de NULL-value opgeleverd.
   -- Dus:
   -- hsle_leftstr('marcel', 'rc') -> 'ma'
   -- hsle_leftstr('marcel', 'xx') -> ''
   FUNCTION hsle_leftstr (p_str IN VARCHAR2, p_search_str IN VARCHAR2)
      RETURN VARCHAR2
   IS
      p_result_str   VARCHAR2 (4000);
      l_van_pos      NUMBER (10);
   BEGIN
      l_van_pos := INSTR (p_str, p_search_str);

      IF l_van_pos > 0 AND l_van_pos < 4000
      THEN
         p_result_str := SUBSTR (p_str, 1, l_van_pos - 1);
      ELSE
         p_result_str := NULL;
      END IF;

      RETURN (p_result_str);
   END;
BEGIN
   -- We beschouwen dit als een nieuwe melding
   v_errormsg := 'Fout bepalen soortmelding ' || COALESCE (pto, '???');
   IF (UPPER (pto) = UPPER ('uMdbnym@hsle.facilitor.nl'))
   THEN
      -- HSLE#33581: Social Media 'Userlike' berichten naar mld_stdmelding_key=191 (stdmelding 'Social Media' onder vakgroep 'Social Media')
      defaultstdmelding := '191';
      v_mld_meldbron_key := 8; -- Vanaf 2015.3 zijn meldbronnen 8 (Chat) en 9 (Social Media) ook mogelijk
   ELSE
      IF (UPPER (pto) = UPPER ('TdDpVge@hsle.facilitor.nl'))
      THEN
         -- HSLE#37091: Mail naar studentzaken@hsleiden.nl automatisch verwerken in FCL tot stdmelding 'Mailmelding' (key=1241) onder de vakgroep 'Studentzaken' (key=98)
         defaultstdmelding := '1241';
         v_mld_meldbron_key := 4;
      ELSE
         IF (UPPER (pto) = UPPER ('CJXaYlt@hsle.facilitor.nl'))
         THEN
            -- HSLE#38876: Toevoegen Receptie@hsleiden.nl (vervolg op HSLE#37339)
            defaultstdmelding := '1701';
            v_mld_meldbron_key := 4;
         ELSE
            -- Mailmelding (onder vakgroep 'Mailmelding') met mld_stdmelding_key=161, deze staat komt uit 'defaultmelding'-setting
            defaultstdmelding := fac.getsetting ('defaultstdmelding');
            v_mld_meldbron_key := 4;
         END IF;
      END IF;
   END IF;

   -- HSLE#57042: Als er 'SRS=' voorkomt in pfrom, dan:
   -- voor_at = tekst tussen laatste '=' en laatste '@' (vanaf links)
   --   na_at = tekst tussen een-na-laatste '=' en laatste '=' (vanaf links)
   -- Anders 1-op-1 overnemen.
   IF INSTR (pfrom, 'SRS=') > 0
   THEN
      v_voor_at := SUBSTR (pfrom, INSTR (pfrom, '=', -1) + 1, INSTR (pfrom, '@', -1) - INSTR (pfrom, '=', -1) - 1);
      v_na_at := SUBSTR (pfrom, INSTR (pfrom, '=', -1, 2) + 1, INSTR (pfrom, '=', -1) - INSTR (pfrom, '=', -1, 2) - 1);
      v_from := v_voor_at || '@' || v_na_at;
   ELSE
      v_from := pfrom;
   END IF;
   v_from := SUBSTR (v_from, 1, 50);

   -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom?
   v_errormsg := 'Fout bepalen melder ' || COALESCE (v_from, '???');
   SELECT COUNT ( * )
     INTO v_count
     FROM prs_v_aanwezigperslid
    WHERE (INSTR (UPPER (v_from), '@STUDENT.HSLEIDEN.NL') > 0 OR INSTR (UPPER (v_from), '@HSLEIDEN.NL') > 0)
          AND UPPER (prs_perslid_email) LIKE '%' || UPPER (v_from) || '%';

   IF v_count = 1
   THEN
      SELECT p.prs_perslid_key, d.prs_kostenplaats_key
        INTO sender, kostenplaats
        FROM prs_v_aanwezigperslid p, prs_afdeling d
       WHERE p.prs_afdeling_key = d.prs_afdeling_key
             AND UPPER (p.prs_perslid_email) LIKE '%' || UPPER (v_from) || '%';
   ELSE -- Melder kan niet 1-duidig worden bepaald, dan selecteer prs_perslid_key = 15621 = system-user 'SYSTEM API Mail2Melding'!
      SELECT p.prs_perslid_key, d.prs_kostenplaats_key
        INTO sender, kostenplaats
        FROM prs_v_aanwezigperslid p, prs_afdeling d
       WHERE p.prs_afdeling_key = d.prs_afdeling_key
             AND p.prs_perslid_key = 15621;
   END IF;

   -- Bepaal kenmerk-key van kenmerksoort 'E-mail' (key 26) op vakgroeptype niveau van vakgroeptype-key 1 die niet verwijderd is
   v_errormsg := 'Fout bepalen kenmerksoort=E-mail';
   SELECT MAX (mld_kenmerk_key)
     INTO v_mailadres_kenmerk_key
     FROM mld_kenmerk
    WHERE mld_srtkenmerk_key = 26
          AND mld_kenmerk_verwijder IS NULL
          AND mld_kenmerk_niveau = 'T'
          AND mld_stdmelding_key = 1;

   -- Bepaal kenmerk-key van kenmerksoort 'Meldbron' (key 2401) bij 'defaultstdmelding' die niet verwijderd is
   v_errormsg := 'Fout bepalen kenmerksoort=Meldbron';
   SELECT MAX (mld_kenmerk_key)
     INTO v_meldbron_kenmerk_key
     FROM mld_kenmerk k, mld_stdmelding sm, ins_tab_discipline td
    WHERE k.mld_srtkenmerk_key = 2401
          AND k.mld_kenmerk_verwijder IS NULL
          AND sm.mld_stdmelding_key = defaultstdmelding
          AND sm.mld_ins_discipline_key = td.ins_discipline_key
          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'));

   -- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd.
   v_errormsg := 'Fout bepalen bestaande melding';

   -- Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp 'M123' kan worden opgevist, waarbij het deel achter M minimaal uit 1 cijfer bestaat.
   -- HSLE#35572: extra spatie erbij hieronder (= verbetering), zodat een M12X34 niet als M12 wordt gezien, want anders wordt bij M12 een notitie geplaatst en dat is onterecht.
   -- HSLE#35572: ook extra spatie aan het einde van het onderwerp erbij, zie info in call bij [Netten, Michelle van; 20-5-2016]
   subject_regexp := '[[:alpha:]]*M[[:digit:]]{1,} ';
   v_mldnum :=
      REGEXP_SUBSTR (psubject || ' ',
                     subject_regexp,
                     1,
                     1,
                     'i');                   -- M123, of M12345, of M12, of M1
   v_srtdisc :=
      REGEXP_SUBSTR (v_mldnum,
                     '[[:alpha:]]',
                     1,
                     1,
                     'i');                                                -- M
   v_mld_key_uit_subject := fac.safe_to_number (SUBSTR (v_mldnum, LENGTH (v_srtdisc) + 1)); -- 123, of 12345, of 12, of 1

   -- Uit onderwerp is de vermoedelijke juiste v_mld_key_uit_subject geparsed.
   -- HSLE#35572: Puntje 1 - er wordt niet langer meer gecheckt op wie de mail stuurt, als in het onderwerp het meldingnummer wordt gevonden,
   --             dan wordt die aan die melding als notitie erbij toegevoegd (ongeacht de mailer).
   SELECT MAX (mld_melding_key)
     INTO v_mldkey
     FROM mld_melding
    WHERE mld_melding_key = v_mld_key_uit_subject;

   IF v_mldkey IS NOT NULL
   THEN
      -- Gotcha: van deze afzender is een eerdere melding geregistreerd, dus we voegen de subject en body nu als notitie toe.
      v_errormsg := 'Fout toevoegen notitie';

      -- HSLE#35572
      l_vantekst := 'Van: ';
      l_body := hsle_leftstr (pbody, l_vantekst);

      IF l_body IS NULL
      THEN
         -- Er is geen 'Van: ' gevonden, misschien nog 'From: '
         l_vantekst := 'From: ';
         l_body := hsle_leftstr (pbody, l_vantekst);

         IF l_body IS NULL
         THEN
            -- Er is ook geen 'From: ' gevonden, dan doen we de hele tekst
            l_body := SUBSTR (pbody, 1, 4000);
         END IF;
      END IF;

      INSERT INTO mld_melding_note (mld_melding_key,
                                    mld_melding_note_omschrijving,
                                    prs_perslid_key,
                                    mld_melding_note_flag)
          VALUES (v_mldkey,
                  SUBSTR (psubject || CHR (13) || CHR (10)
                          || REPLACE (SUBSTR (l_body, 1, 4000 - (LENGTH (psubject) + 2)), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels
                  sender,
                  0); -- 0 is NIET zichtbaar FE (want is system-user, zinloos).

      -- Default tracking is even goed genoeg
      fac.trackaction ('MLDNOT', v_mldkey, sender, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie

      INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
          VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || v_mldkey);

      -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet
      BEGIN
         IF fac.getdbversion () >= 'DB36'           -- DB36 forward compatible
         THEN
            IF fac.getsetting ('mld_melding_actiecode') = 1
            THEN
               UPDATE mld_melding
                  SET mld_melding_actiecode = 1 + 128 -- Backoffice + Attentie
                WHERE mld_melding_key = v_mldkey;
            END IF;
         ELSE
            --v_flag_on_fenote := fac.getsetting ('mld_flag_on_fenote');
            v_flag_on_bonote := fac.getsetting ('mld_flag_on_bonote');

            IF v_flag_on_bonote <> 0 AND v_flag_on_bonote IS NOT NULL
            THEN
               -- HSLE#56827: Proberen precieze melder te bepalen en altijd BO-vlaggetje zetten!
               --UPDATE mld_melding
               --   SET mld_melding_flag = v_flag_on_bonote
               -- WHERE mld_melding_key = v_mldkey
               --       AND ((mld_melding_flag = v_flag_on_fenote)
               --            OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL));
               UPDATE mld_melding
                  SET mld_melding_flag = v_flag_on_bonote
                WHERE mld_melding_key = v_mldkey;
            END IF;
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            DBMS_OUTPUT.put_line ('Niet gelukt om flag ' || v_flag_on_bonote || ' te zetten.');
      END;

      -- Bepalen van de behandelaar van deze melding
      v_errormsg := 'Fout bepalen behandelaar';
      BEGIN
         SELECT mld_melding_behandelaar_key
           INTO v_behandelaar_key
           FROM mld_melding m, prs_perslid p
          WHERE mld_melding_key = v_mldkey
                AND mld_melding_behandelaar_key = p.prs_perslid_key
                AND p.prs_perslid_email IS NOT NULL
                AND p.prs_perslid_verwijder IS NULL;
      EXCEPTION
         WHEN OTHERS
         THEN
            v_behandelaar_key := NULL;
      END;

      IF v_behandelaar_key IS NOT NULL
      THEN
         -- Bestaande melding en behandelaar is bekend.

         -- bepalen vakgroeptype prefix
         SELECT srt.ins_srtdiscipline_prefix
           INTO v_mldprefix
           FROM mld_melding m, mld_stdmelding std, mld_discipline d, ins_srtdiscipline srt
          WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
                AND std.mld_ins_discipline_key = d.ins_discipline_key
                AND d.ins_srtdiscipline_key = srt.ins_srtdiscipline_key
                AND m.mld_melding_key = v_mldkey;

         -- Notificatie naar behandelaar
         fac.putnotificationsrtprio (
            NULL,
            v_behandelaar_key,
            'MLDNOB',
            v_mldkey,
            'Melding ' || v_mldprefix || v_mldkey || ' is door de klant aangepast.',
            2,
            NULL,
            NULL,
            NULL,
            2,
            NULL);
      END IF;
   ELSE
      -- suggested extensions:
      -- check for MLDUSE-write autorisations
      -- parse the subject to find an 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';
      BEGIN
         INSERT INTO mld_melding (mld_melding_module,
                                  mld_meldbron_key,
                                  mld_melding_datum,
                                  mld_alg_locatie_key,
                                  mld_alg_onroerendgoed_keys,
                                  mld_melding_onderwerp,
                                  mld_melding_omschrijving,
                                  mld_melding_status,
                                  mld_stdmelding_key,
                                  prs_perslid_key,
                                  prs_perslid_key_voor,
                                  prs_kostenplaats_key,
                                  mld_melding_spoed)
             VALUES ('MLD',
                     v_mld_meldbron_key,              -- email (4) of chat (8)
                     SYSDATE,
                     1, -- HSLE#33348: CAMPUS hier kiezen (alg_locatie_key = 1)
                     393, -- HLSE#55591: Ruimte F0.024 hier kiezen (alg_ruimte_key = 393)
                     SUBSTR (psubject, 1, 80), --HSLE#52534: onderwerp apart en niet meer bij omschrijving
                     SUBSTR (REPLACE (SUBSTR (pbody, 1, 4000), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (13) || CHR (10)), 1, 4000), -- verwijder onnodige witregels
                     NULL,
                     defaultstdmelding,
                     sender,
                     sender,
                     kostenplaats,
                     3)
          RETURNING mld_melding_key
               INTO v_mldkey;

         -- Vullen van kenmerkwaarde voor "E-mail"
         IF v_from IS NOT NULL AND v_mailadres_kenmerk_key IS NOT NULL
         THEN
            -- v_from is gevuld, en kenmerk mailadres bestaat, zet v_from met maximaal 50 tekens als kenmerk bij de zojuist aangemaakte melding.
            INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                VALUES (v_mldkey, v_mailadres_kenmerk_key, v_from);
         END IF;

         -- HSLE#56362: Vullen van kenmerkwaarde voor "Meldbron" met 2703 = Chat of 2721 = Mail
         IF v_meldbron_kenmerk_key IS NOT NULL
         THEN
            INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
                VALUES (v_mldkey, v_meldbron_kenmerk_key, DECODE (v_mld_meldbron_key, 8, 2703, 2721));
         END IF;

         mld.setmeldingstatus (v_mldkey, 2, sender);

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

   -- find the lowest volgnummer of the flexfield of type folder.
   v_errormsg := 'Fout toevoegen bijlage(n)';
   SELECT MIN (mld_kenmerk_key)
     INTO kkey
     FROM mld_kenmerk k, mld_srtkenmerk sk, mld_stdmelding std, ins_tab_discipline d
    WHERE sk.mld_srtkenmerk_kenmerktype = 'M'
          AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
          AND std.mld_stdmelding_key = defaultstdmelding
          AND std.mld_ins_discipline_key = d.ins_discipline_key
          AND ((k.mld_stdmelding_key = std.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S')
               OR (k.mld_stdmelding_key = d.ins_discipline_key AND k.mld_kenmerk_niveau = 'D')
               OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T'))
          AND k.mld_kenmerk_verwijder IS NULL
          AND NOT EXISTS
                (SELECT 1
                   FROM mld_kenmerk k1, mld_srtkenmerk sk1, mld_stdmelding std1, ins_tab_discipline d1
                  WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
                        AND sk1.mld_srtkenmerk_key = k1.mld_srtkenmerk_key
                        AND std1.mld_stdmelding_key = defaultstdmelding
                        AND std1.mld_ins_discipline_key = d1.ins_discipline_key
                        AND ((k1.mld_stdmelding_key = std1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S')
                             OR (k1.mld_stdmelding_key = d1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D')
                             OR (k1.mld_stdmelding_key = d1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T'))
                        AND k1.mld_kenmerk_verwijder IS NULL
                        AND k1.mld_kenmerk_volgnummer < k.mld_kenmerk_volgnummer);

   IF 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_mldkey / 1000), 'FM0000') || '___\M' || v_mldkey || '\' || kkey || '\');
   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.writelog ('PROCESSEMAIL', 'W', 'HSLE_processemail afgebroken!', '[' || COALESCE (v_from, 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 hsle_v_rap_reservering
(
   key,
   nummer,
   res_omschrijving,
   invoerdatum,
   datum,
   gastheer,
   contact,
   invoerder,
   kostensoortgroep,
   kostensoort,
   kpn,
   kpn_omschrijving,
   afdeling_code,
   afdeling_omschrijving,
   district_omschijving,
   alg_locatie_key,
   locatie,
   locatie_omschrijving,
   gebouw,
   verdieping,
   ruimte,
   opstelling,
   no_show,
   mandaat,
   personeelsnr,
   werkplek,
   discipline_key,
   catalogus_key,
   catalogus,
   reserveerbare_ruimte,
   bezoekers,
   van,
   tot,
   duur,
   status,
   activiteit_key,
   activiteit,
   srtactiviteit_key,
   activiteitsoort,
   voorziening_discipline_key,
   voorziening_catalogus,
   voorziening_catalogussoort,
   voorziening_product_key,
   voorziening_product,
   voorziening_totaalprijs,
   voorziening_btw,
   voorziening_van,
   voorziening_tot,
   voorziening_aantal,
   voorziening_prijs,
   grootboekrekeningnr,
   grootboekomschrijving,
   grootboekaanwezig
)
AS
   SELECT res.res_reservering_key,
          res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_omschrijving,
          COALESCE (rrr.res_rsv_ruimte_aanmaak, voorz.van),
          COALESCE (rrr.res_rsv_ruimte_van, voorz.van),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT pf.prs_perslid_naam_full
             FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf
            WHERE     tr.prs_perslid_key = pf.prs_perslid_key
                  AND str.fac_srtnotificatie_code = 'RESNEW'
                  AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
                  AND tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key),
          (SELECT ksg.prs_kostensoortgrp_oms
             FROM prs_kostensoortgrp ksg, prs_kostensoort ks
            WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
                  AND ks.prs_kostensoort_key =
                        (SELECT disc.prs_kostensoort_key
                           FROM res_discipline disc
                          WHERE disc.ins_discipline_key =
                                   COALESCE (
                                      voorz.ins_discipline_key,
                                      (SELECT ins_discipline_key
                                         FROM ins_tab_discipline d,
                                              res_ruimte_opstelling ro,
                                              res_ruimte rr
                                        WHERE 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))))
             kostensoortgroep,
          (SELECT ks.prs_kostensoort_oms
             FROM prs_kostensoort ks
            WHERE ks.prs_kostensoort_key =
                     (SELECT disc.prs_kostensoort_key
                        FROM res_discipline disc
                       WHERE disc.ins_discipline_key =
                                COALESCE (
                                   voorz.ins_discipline_key,
                                   (SELECT ins_discipline_key
                                      FROM ins_tab_discipline d,
                                           res_ruimte_opstelling ro,
                                           res_ruimte rr
                                     WHERE     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))))
             kostensoort,
          k.prs_kostenplaats_nr,
          k.prs_kostenplaats_omschrijving,
          a.prs_afdeling_naam,
          a.prs_afdeling_omschrijving,
          (SELECT d.alg_district_omschrijving
             FROM alg_district d,
                  alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     d.alg_district_key = l.alg_district_key
                  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 r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT l.alg_locatie_key
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_code
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_locatie_omschrijving
             FROM alg_locatie l,
                  alg_gebouw g,
                  alg_verdieping v,
                  alg_ruimte r
            WHERE     l.alg_locatie_key = g.alg_locatie_key
                  AND g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_gebouw_code
             FROM alg_gebouw g, alg_verdieping v, alg_ruimte r
            WHERE     g.alg_gebouw_key = v.alg_gebouw_key
                  AND v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          (SELECT alg_verdieping_code
             FROM alg_verdieping v, alg_ruimte r
            WHERE v.alg_verdieping_key = r.alg_verdieping_key
                  AND r.alg_ruimte_key = r2a.alg_ruimte_key),
          r2a.ruimte_nr,
          r2a.opstelling,
          rrr.res_rsv_ruimte_noshow,
          NVL ( (SELECT pr.fac_profiel_limiet
                   FROM fac_profiel pr
                  WHERE p.fac_profiel_key = pr.fac_profiel_key), 0),
          prs_perslid_nr,
          wp2.prs_werkplek_aanduiding,
          COALESCE (
             voorz.ins_discipline_key,
             (SELECT ins_discipline_key
                FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
               WHERE     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)),
          (SELECT ins_discipline_key
             FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
            WHERE     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),
          (SELECT ins_discipline_omschrijving
             FROM ins_tab_discipline d, res_ruimte_opstelling ro, res_ruimte rr
            WHERE     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),
          DECODE (rrr.alg_ruimte_key, NULL, 'Ja', 'Nee'),
          rrr.res_rsv_ruimte_bezoekers,
          rrr.res_rsv_ruimte_van,
          rrr.res_rsv_ruimte_tot,
          COALESCE ( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24, 0),
          (SELECT res_status_fo_omschrijving
             FROM res_status_fo rs
            WHERE rs.res_status_fo_key = rrr.res_status_fo_key),
          ra.res_activiteit_key,
          ra.res_activiteit_omschrijving,
          rsa.res_srtactiviteit_key,
          rsa.res_srtactiviteit_omschrijving,
          voorz.ins_discipline_key,
          voorz.catalogus,
          DECODE(voorz.catalogussoort,1,'Reserveerbaar object', 2, 'Catering', 3, 'Ruimte', ''),
          voorz.product_key,
          voorz.product,
          voorz.totaalprijs,
          voorz.btw,
          TO_CHAR (voorz.van, 'hh24:mi'),
          TO_CHAR (voorz.tot, 'hh24:mi'),
          voorz.aantal,
          voorz.prijs,
          (SELECT ud.fac_usrdata_code  from res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
						WHERE w.res_kenmerk_key = k.res_kenmerk_key
						AND k.res_srtkenmerk_key = 1
						and w.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
						AND ud.fac_usrtab_key = 41
						AND ud.fac_usrdata_key = fac.safe_to_number(W.RES_KENMERKRESERVERING_WAARDE)
						AND w.res_kenmerkwaarde_verwijder IS NULL) grootboekrekeningnr,
					(SELECT ud.fac_usrdata_omschr  from res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
						WHERE w.res_kenmerk_key = k.res_kenmerk_key
						AND k.res_srtkenmerk_key = 1
						and w.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
						AND ud.fac_usrtab_key = 41
						AND ud.fac_usrdata_key = fac.safe_to_number(W.RES_KENMERKRESERVERING_WAARDE)
						AND w.res_kenmerkwaarde_verwijder IS NULL) grootboekomschrijving,
					(SELECT 'X'  from res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
						WHERE w.res_kenmerk_key = k.res_kenmerk_key
						AND k.res_srtkenmerk_key = 1
						and w.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
						AND ud.fac_usrtab_key = 41
						AND ud.fac_usrdata_key = fac.safe_to_number(W.RES_KENMERKRESERVERING_WAARDE)
						AND w.res_kenmerkwaarde_verwijder IS NULL) grootboekaanwezig
     FROM res_v_aanwezigrsv_ruimte rrr,
          res_activiteit ra,
          res_srtactiviteit rsa,
          res_reservering res,
          prs_kostenplaats k,
          prs_perslid p,
          prs_afdeling a,
          (  SELECT res_rsv_ruimte_key,
                    MAX (o.res_opstelling_omschrijving) opstelling,
                    MAX (ra.alg_ruimte_key) alg_ruimte_key,
                    MAX (rr.res_ruimte_nr) ruimte_nr
               FROM res_rsv_ruimte r,
                    res_ruimte_opstelling ro,
                    res_opstelling o,
                    res_ruimte rr,
                    res_alg_ruimte ra
              WHERE     r.res_rsv_ruimte_verwijder IS NULL
                    AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
                    AND ro.res_ruimte_key = rr.res_ruimte_key
                    AND ro.res_opstelling_key = o.res_opstelling_key
                    AND rr.res_ruimte_key = ra.res_ruimte_key
           GROUP BY res_rsv_ruimte_key
           UNION ALL
           SELECT res_rsv_ruimte_key,
                  '' opstelling,
                  rrr.alg_ruimte_key,
                  r.alg_ruimte_nr
             FROM res_rsv_ruimte rrr, alg_ruimte r
            WHERE rrr.alg_ruimte_key IS NOT NULL AND r.alg_ruimte_key = rrr.alg_ruimte_key) r2a,
          (SELECT rrd.res_rsv_ruimte_key res_rsv_ruimte_key,
                  -rd.res_deel_key product_key,
                  rd.res_deel_omschrijving product,
                  DECODE (
                     rd.res_deel_prijs_vast,
                     1,
                     NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs),
                       (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van)
                     * 24
                     * NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs))
                     totaalprijs,
                  rrd.res_rsv_deel_van van,
                  rrd.res_rsv_deel_tot tot,
                  (rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal,
                  NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs) prijs,
                  NULL btw,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  c.ins_discipline_min_level catalogussoort
             FROM res_v_aanwezigrsv_deel rrd,
                  res_deel rd,
                  ins_deel d,
                  ins_tab_discipline c
            WHERE     rrd.res_deel_key = rd.res_deel_key
                  AND d.ins_deel_key = rd.res_ins_deel_key
                  AND rrd.res_rsv_ruimte_key IS NOT NULL
                  AND c.ins_discipline_key = rd.res_discipline_key
           UNION ALL
           SELECT rra.res_rsv_ruimte_key res_rsv_ruimte_key,
                  ra.res_artikel_key product_key,
                  ra.res_artikel_omschrijving product,
                  NVL (rra.res_rsv_artikel_prijs, rra.res_rsv_artikel_aantal * res_artikel_prijs)
                     totaalprijs,
                  rra.res_rsv_artikel_levering van,
                  NULL tot,
                  rra.res_rsv_artikel_aantal aantal,
                  NVL (rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal, res_artikel_prijs)
                     prijs,
                  NVL (rra.res_rsv_artikel_btw, ra.res_artikel_btw) btw,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  c.ins_discipline_min_level catalogussoort
             FROM res_v_aanwezigrsv_artikel rra, res_artikel ra, ins_tab_discipline c
            WHERE rra.res_artikel_key = ra.res_artikel_key
                  AND ra.res_discipline_key = c.ins_discipline_key) voorz,
          (  SELECT pw.prs_perslid_key,
                    MIN (prs_werkplek_aanduiding) || DECODE (COUNT ( * ), 1, '', '...')
                       prs_werkplek_aanduiding
               FROM prs_v_werkplek_gegevens wp, prs_perslidwerkplek pw
              WHERE wp.prs_werkplek_key = pw.prs_werkplek_key
           GROUP BY pw.prs_perslid_key) wp2
    WHERE     rrr.res_reservering_key = res.res_reservering_key
          AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
          AND rrr.res_rsv_ruimte_key = voorz.res_rsv_ruimte_key(+)
          AND rrr.res_activiteit_key = ra.res_activiteit_key
          AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key
          AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
          AND p.prs_afdeling_key = a.prs_afdeling_key
          AND wp2.prs_perslid_key(+) = p.prs_perslid_key
          AND (rrr.res_ruimte_opstel_key IS NOT NULL OR voorz.res_rsv_ruimte_key IS NOT NULL)
          AND rrr.res_rsv_ruimte_van >= TO_DATE ('01-01-2009', 'DD-MM-YYYY');

-- Copied from ROOT VIEWS for User defined Reports (UDR): ins_v_udr_deel
CREATE OR REPLACE VIEW hsle_v_rap_deel_verwijderd
(
   key,
   deel_omschrijving,
   plaats,
   srtdeel_code,
   soort,
   groep,
   deel_opmerking,
   discipline_key,
   plaats_type,
   district,
   uitleenbaar,
   res_opmerking,
   deel_vervaldatum,
   eigenaar,
   ins_deel_verwijder
)
AS
   SELECT i.ins_deel_key,
          i.ins_deel_omschrijving,
          TO_CHAR (NULL) plaats,
          s.ins_srtdeel_code,
          s.ins_srtdeel_omschrijving soort,
          g.ins_srtgroep_omschrijving groep,
          i.ins_deel_opmerking,
          i.ins_discipline_key,
          i.ins_alg_ruimte_type,
          -1 district,
          s.ins_srtdeel_uitleenbaar,
          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,
          i.ins_deel_verwijder
     FROM ins_deel i,
          ins_srtdeel s,
          ins_srtgroep g,
          (SELECT res_deel_key, res_ins_deel_key, res_deel_opmerking res_deel_opmerking
             FROM res_deel
            WHERE res_deel_verwijder IS NULL) rd,
          prs_v_afdeling_boom d,
          prs_bedrijf b
    WHERE     s.ins_srtdeel_key = i.ins_srtdeel_key
    			AND g.ins_srtgroep_key = s.ins_srtgroep_key
          AND i.ins_deel_verwijder IS NOT 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,
          TO_CHAR (NULL) plaats,
          s.ins_srtdeel_code,
          s.ins_srtdeel_omschrijving soort,
          g.ins_srtgroep_omschrijving groep,
          i.ins_deel_opmerking,
          i.ins_discipline_key,
          i.ins_alg_ruimte_type,
          -1 district,
          s.ins_srtdeel_uitleenbaar,
          rd.res_deel_opmerking,
          i.ins_deel_vervaldatum,
             p.prs_perslid_naam
          || NVL2 (p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')
          || NVL2 (p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')
          || NVL2 (p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', '')
             eigenaar,
          i.ins_deel_verwijder
     FROM ins_deel i,
          ins_srtdeel s,
          ins_srtgroep g,
          (SELECT res_deel_key, res_ins_deel_key, res_deel_opmerking res_deel_opmerking
             FROM res_deel
            WHERE res_deel_verwijder IS NULL) rd,
          prs_perslid p,
          prs_v_afdeling_boom d
    WHERE     s.ins_srtdeel_key = i.ins_srtdeel_key
    			AND g.ins_srtgroep_key = s.ins_srtgroep_key
          AND i.ins_deel_verwijder IS NOT 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_afdeling_key = d.prs_afdeling_key
          AND i.ins_alg_ruimte_type = 'P'
   UNION
   SELECT i.ins_deel_key,
          i.ins_deel_omschrijving,
          TO_CHAR (NULL) plaats,
          s.ins_srtdeel_code,
          s.ins_srtdeel_omschrijving soort,
          g.ins_srtgroep_omschrijving groep,
          i.ins_deel_opmerking,
          i.ins_discipline_key,
          i.ins_alg_ruimte_type,
          -1 district,
          s.ins_srtdeel_uitleenbaar,
          rd.res_deel_opmerking,
          i.ins_deel_vervaldatum,
          c.prs_contactpersoon_naam eigenaar,
          i.ins_deel_verwijder
     FROM ins_deel i,
          ins_srtdeel s,
          ins_srtgroep g,
          (SELECT res_deel_key, res_ins_deel_key, res_deel_opmerking res_deel_opmerking
             FROM res_deel
            WHERE res_deel_verwijder IS NULL) rd,
          prs_contactpersoon c
    WHERE     s.ins_srtdeel_key = i.ins_srtdeel_key
    			AND g.ins_srtgroep_key = s.ins_srtgroep_key
          AND i.ins_deel_verwijder IS NOT 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 ALL
   SELECT i.ins_deel_key,
          i.ins_deel_omschrijving,
          o.alg_plaatsaanduiding || ' ('
          || DECODE (
                o.alg_onroerendgoed_type,
                'R',
                (SELECT r.alg_ruimte_omschrijving
                   FROM alg_ruimte r
                  WHERE r.alg_ruimte_key = i.ins_alg_ruimte_key),
                'T',
                (SELECT t.alg_terreinsector_naam
                   FROM alg_terreinsector t
                  WHERE t.alg_terreinsector_key = i.ins_alg_ruimte_key),
                'W',
                (SELECT r.alg_ruimte_omschrijving
                   FROM alg_ruimte r, prs_werkplek w
                  WHERE r.alg_ruimte_key = w.prs_alg_ruimte_key
                        AND w.prs_werkplek_key = i.ins_alg_ruimte_key))
          || ')'
             plaats,
          s.ins_srtdeel_code,
          s.ins_srtdeel_omschrijving soort,
          g.ins_srtgroep_omschrijving groep,
          i.ins_deel_opmerking,
          i.ins_discipline_key,
          i.ins_alg_ruimte_type,
          l.alg_district_key,
          s.ins_srtdeel_uitleenbaar,
          rd.res_deel_opmerking,
          i.ins_deel_vervaldatum,
          NULL eigenaar,
          i.ins_deel_verwijder
     FROM ins_deel i,
          ins_v_alg_overzicht o,
          ins_srtdeel s,
          ins_srtgroep g,
          alg_locatie l,
          alg_district di,
          (SELECT res_deel_key, res_ins_deel_key, res_deel_opmerking res_deel_opmerking
             FROM res_deel
            WHERE res_deel_verwijder IS NULL) rd
    WHERE     i.ins_deel_verwijder IS NOT 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 s.ins_srtdeel_key = i.ins_srtdeel_key
          AND g.ins_srtgroep_key = s.ins_srtgroep_key;

CREATE OR REPLACE VIEW hsle_v_oppervlak_afdeling
(
   alg_ruimte_key,
   prs_kostenplaats_nr,
   prs_afdeling_omschrijving,
   alg_gebouw_omschrijving,
   alg_verdieping_volgnr,
   alg_verdieping_code,
   alg_ruimte_nr,
   alg_ruimte_omschrijving,
   alg_srtruimte_omschrijving,
   alg_ruimte_opmerking,
   alg_ruimte_vloerafwerking,
   alg_ruimte_status,
   alg_ruimte_inrichting,
   alg_ruimte_toelichting,
   alg_ruimte_aantal_werkplekken,
   alg_gebouw_key,
   prs_afdeling_key,
   alg_ruimte_bruto_vloeropp,
   prs_ruimteafdeling_bezetting,
   product,
   verhuurbaar,
   bevat_werkplek
)
AS
   SELECT rg.alg_ruimte_key,
          COALESCE (ra.prs_kostenplaats_nr, 'Geen') prs_kostenplaats_nr,
          COALESCE (ra.prs_afdeling_omschrijving, 'Geen')
             prs_afdeling_omschrijving,
          rg.alg_gebouw_omschrijving,
          rg.alg_verdieping_volgnr,
          rg.alg_verdieping_code,
          rg.alg_ruimte_nr,
          rg.alg_ruimte_omschrijving,
          sr.alg_srtruimte_omschrijving,
          rg.alg_ruimte_opmerking,
          (SELECT fac_usrdata_code
             FROM alg_onrgoedkenmerk aok,
                  alg_kenmerk ak,
                  fac_kenmerkdomein kd,
                  fac_usrdata ud
            WHERE alg_onrgoed_key = rg.alg_ruimte_key
              AND alg_onrgoed_niveau = 'R'
              AND aok.alg_kenmerk_key = 1003
              AND aok.alg_kenmerk_key = ak.alg_kenmerk_key
              AND ak.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
              AND ud.fac_usrtab_key = kd.fac_usrtab_key
              AND fac.safe_to_number (aok.alg_onrgoedkenmerk_waarde) =
                     ud.fac_usrdata_key)
             vloerafwerking,
          (SELECT fac_usrdata_code
             FROM alg_onrgoedkenmerk aok,
                  alg_kenmerk ak,
                  fac_kenmerkdomein kd,
                  fac_usrdata ud
            WHERE alg_onrgoed_key = rg.alg_ruimte_key
              AND alg_onrgoed_niveau = 'R'
              AND aok.alg_kenmerk_key = 1004
              AND aok.alg_kenmerk_key = ak.alg_kenmerk_key
              AND ak.fac_kenmerkdomein_key = kd.fac_kenmerkdomein_key
              AND ud.fac_usrtab_key = kd.fac_usrtab_key
              AND fac.safe_to_number (aok.alg_onrgoedkenmerk_waarde) =
                     ud.fac_usrdata_key)
             Status,
          (SELECT alg_onrgoedkenmerk_waarde
             FROM alg_onrgoedkenmerk
            WHERE alg_onrgoed_key = rg.alg_ruimte_key
              AND alg_onrgoed_niveau = 'R'
              AND alg_kenmerk_key = 1040)
             alg_ruimte_inrichting,
          (SELECT alg_onrgoedkenmerk_waarde
             FROM alg_onrgoedkenmerk
            WHERE alg_onrgoed_key = rg.alg_ruimte_key
              AND alg_onrgoed_niveau = 'R'
              AND alg_kenmerk_key = 1006)
             alg_ruimte_toelichting,
          (SELECT alg_onrgoedkenmerk_waarde
             FROM alg_onrgoedkenmerk
            WHERE alg_onrgoed_key = rg.alg_ruimte_key
              AND alg_onrgoed_niveau = 'R'
              AND alg_kenmerk_key = 1005)
             alg_ruimte_aantal_werkplekken,
          rg.alg_gebouw_key,
          ra.prs_afdeling_key,
          rg.alg_ruimte_bruto_vloeropp,
          ra.prs_ruimteafdeling_bezetting,
            COALESCE (rg.alg_ruimte_bruto_vloeropp, 0)
          * ra.prs_ruimteafdeling_bezetting
          / 100
             product,
          DECODE (sr.prs_verhuurbaar, 1, 'Ja', 'Nee') prs_verhuurbaar,
          DECODE (prs_bevat_werkplek, 1, 'Ja', 'Nee') prs_bevat_werkplek
     FROM alg_v_ruimte_gegevens rg,
          alg_srtruimte sr,
          (SELECT a.prs_afdeling_key,
                  ra.alg_ruimte_key,
                  ra.prs_ruimteafdeling_bezetting,
                  a.prs_afdeling_omschrijving,
                  kp.prs_kostenplaats_nr
             FROM prs_v_aanwezigafdeling a,
                  prs_v_aanwezigruimteafdeling ra,
                  prs_kostenplaats kp
            WHERE ra.prs_afdeling_key = a.prs_afdeling_key
              AND kp.prs_kostenplaats_key = a.prs_kostenplaats_key) ra
    WHERE rg.alg_ruimte_key = ra.alg_ruimte_key(+)
      AND sr.alg_srtruimte_key = rg.alg_srtruimte_key;

-- HSLE#37030 object x ruimte rapportage
CREATE OR REPLACE VIEW HSLE_V_UDR_RUIMTExOBJECT
AS
SELECT ins_deel_key,
       ins_deel_omschrijving identificatie,
       ins_deel_opmerking beschrijving,
       dsc.ins_discipline_omschrijving discipline,
       sg.ins_srtgroep_omschrijving groep,
       sd.ins_srtdeel_omschrijving objectsoort,
       ins_alg_ruimte_key alg_ruimte_key,
       ins_deel_vervaldatum vervaldatum,
       prs_perslid_naam_full beheerder,
       prs_kostenplaats_nr
       prs_afdeling_omschrijving,
       alg_gebouw_omschrijving,
       alg_verdieping_volgnr,
       alg_verdieping_code,
       alg_ruimte_nr,
       alg_ruimte_omschrijving,
       alg_srtruimte_omschrijving,
       alg_ruimte_opmerking,
       alg_ruimte_vloerafwerking,
       alg_ruimte_status,
       alg_ruimte_toelichting,
       alg_ruimte_aantal_werkplekken,
       alg_ruimte_bruto_vloeropp,
       prs_ruimteafdeling_bezetting,
       product,
       verhuurbaar,
       bevat_werkplek
  FROM ins_deel d,
       ins_srtdeel sd,
       ins_srtgroep sg,
       ins_discipline dsc,
       prs_v_perslid_fullnames_all p,
       hsle_v_oppervlak_afdeling ra
 WHERE ins_deel_verwijder IS NULL
   AND ins_alg_ruimte_type = 'R'
   AND d.ins_srtdeel_key = sd.ins_srtdeel_key
   AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
   AND dsc.ins_discipline_key = sg.ins_discipline_key
   AND p.prs_perslid_key(+) = d.prs_perslid_key_beh
   AND ra.alg_ruimte_key = ins_alg_ruimte_key;

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

CREATE OR REPLACE VIEW HSLE_V_EVENEMENT_BES
(
   BES_BESTELLING_KEY,
   BES_BESTELLING_OMSCHR
)
AS
     SELECT b.BES_BESTELLING_KEY,
               TO_CHAR (b.bes_bestelling_key)
            || ' - '
            || MAX (ins_discipline_omschrijving)
               ins_discipline_omschrijving
       FROM bes_bestelling b, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg, bes_discipline d
      WHERE b.bes_bestelling_key = bi.bes_bestelling_key
      AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
      AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
      AND sg.ins_discipline_key = d.ins_discipline_key
   GROUP BY b.bes_bestelling_key;

-- view tbv kenmerkdomein. Alle AV objecten
-- KEY 42 = discipline AV
CREATE OR REPLACE VIEW hsle_v_deel_av
(
   ins_deel_key,
   ins_deel_omschrijving,
   ins_deel_opmerking,
   ins_deel_oms2,
   ins_deel_vervaldatum
)
AS
   SELECT ins_deel_key,
          ins_deel_omschrijving,
          ins_deel_opmerking,
          ins_deel_omschrijving || ' - ' || ins_deel_opmerking ins_deel_oms2,
          ins_deel_vervaldatum
     FROM ins_v_aanwezigdeel d, ins_v_srtdeel_gegevens srt
    WHERE d.ins_srtdeel_key = srt.ins_srtdeel_key
      AND srt.ins_discipline_key = 42;

CREATE OR REPLACE VIEW hsle_v_ict_rfc_kenmerken
AS
   SELECT *
     FROM mld_kenmerk
    WHERE mld_kenmerk_verwijder IS NULL
          AND mld_kenmerk_niveau = 'D'
          AND mld_stdmelding_key IN (642, 644)                   -- RFC/Change
;

CREATE OR REPLACE VIEW hsle_v_rap_ict_rfc
(
 mld_melding_key,
 mld_stdmelding_key,
 mld_discipline_key,
 mld_stdmelding_omschrijving,
 mld_datum_create,
 mld_datum_deadline_akkoord,
 mld_melding_prioriteit,
 mld_melding_status,
 mld_melding_impact,
 mld_melding_onderwerp,
 fclt_mld_melding_parentkey,
 --html_mld_melding_parentkey,
 ins_deel_ci,
 mld_melding_aanvrager,
 mld_melding_eigenaar,
 mld_melding_startdatum,
 mld_melding_einddatum,
 mld_melding_aanwezig_cab_i,
 mld_melding_aanwezig_cab_a,
 mld_melding_aanwezig_cab_t,
 mld_melding_aanwezig_cab_s,
 mld_melding_aanwezig_cab_v,
 mld_melding_aanwezig_cab_n,
 mld_melding_aanwezig_cab_w,
 mld_melding_aanwezig_cab_f,
 mld_melding_aanwezig_cab_c,
 mld_melding_akkoord_i,
 mld_melding_akkoord_a,
 mld_melding_akkoord_t,
 mld_melding_akkoord_s,
 mld_melding_akkoord_v,
 mld_melding_akkoord_n,
 mld_melding_akkoord_w,
 mld_melding_akkoord_f,
 mld_melding_akkoord_c,
 mld_opdr_deelnemer_key,
 mld_opdr_deelnemer,
 mld_opdr_omschrijving,
 mld_opdr_startdatum,
 mld_opdr_einddatum,
 mld_opdr_plandatum,
 mld_opdr_uren
)
AS
 SELECT m.mld_melding_key,
        sm.mld_stdmelding_key,
        sm.mld_ins_discipline_key,
        sm.mld_stdmelding_omschrijving,
        --to_date(to_char(fac.gettrackingdate('MLDNEW',m.mld_melding_key),'dd-mm-yyyy'),'dd-mm-yyyy'),
        TRUNC (fac.gettrackingdate ('MLDNEW', m.mld_melding_key)),
        (SELECT fac.safe_to_date (km.mld_kenmerkmelding_waarde, 'dd-mm-yyyy')
           FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k
          WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                AND k.mld_srtkenmerk_key = 382             -- Deadline akkoord
                AND km.mld_melding_key = m.mld_melding_key),
        (SELECT ud.fac_usrdata_code
           FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
          WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                AND k.mld_srtkenmerk_key = 395 -- Prioriteit (Laag, Middel, Hoog)
                AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)
                AND km.mld_melding_key = m.mld_melding_key),
        CASE
           -- Onderstaande WHEN-THEN volgorde is cruciaal voor tonen juiste status...
           WHEN m.mld_melding_status IN (1)                   -- Afgewezen (1)
               THEN 'Afgewezen'
           WHEN m.mld_melding_status IN (5, 6)   -- Gesloten (5), Historie (6)
               THEN 'Afgerond'
           WHEN -- Als NIET alle 4 vakgebieden I, A, T en S hebben goedgekeurd, maar WEL de Voorzitter heeft goedgekeurd, dan GOEDGEKEURD (ongeacht de melding-status)
               (SELECT DECODE (UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
                  FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
                 WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
                       AND k.mld_srtkenmerk_key = 377  -- Akkoord [Voorzitter]
                       AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)
                       AND km.mld_melding_key = m.mld_melding_key) = 'V'
               THEN 'Goedgekeurd'      -- Akkoord door Voorzitter (HSLE#56209)
           WHEN m.mld_melding_status IN (0)             -- Bij Frontoffice (0)
               THEN 'Concept'
           WHEN m.mld_melding_status IN (2, 3) -- Nieuw (2), Te accepteren (3)
               THEN 'Ingediend'
           WHEN m.mld_melding_status IN (4, 7) -- Geaccepteerd (4), Uitgegeven (7)
               THEN 'In behandeling'
        END status,
        (SELECT TO_CHAR (fac.safe_to_number (km1.mld_kenmerkmelding_waarde) * fac.safe_to_number (km2.mld_kenmerkmelding_waarde))
           FROM mld_kenmerkmelding km1, hsle_v_ict_rfc_kenmerken k1, mld_kenmerkmelding km2, hsle_v_ict_rfc_kenmerken k2
          WHERE km1.mld_kenmerk_key = k1.mld_kenmerk_key
                AND k1.mld_srtkenmerk_key = 399               -- Risico impact
                AND km1.mld_melding_key = m.mld_melding_key
                AND km2.mld_kenmerk_key = k2.mld_kenmerk_key
                AND k2.mld_srtkenmerk_key = 389             -- Kans op storing
                AND km2.mld_melding_key = m.mld_melding_key),
        m.mld_melding_omschrijving,
        CASE
           WHEN m.mld_melding_kto_type = 'M'
               THEN TO_CHAR (m.mld_melding_kto_key)
        END,
        --CASE
        --   WHEN m.mld_melding_kto_type = 'M'
        --       THEN    '<a class="details" onclick=''FcltMgr.openDetail("appl/fac/fac_report.asp?usrrap_key=161&mode=list&fclt_mld_melding_parentkey='
        --            || TO_CHAR (m.mld_melding_kto_key)
        --            || '")''>'
        --            || TO_CHAR (m.mld_melding_kto_key)
        --            || '</a>'
        --END,
        (SELECT LISTAGG (d.ins_deel_omschrijving, ', ') WITHIN GROUP (ORDER BY d.ins_deel_omschrijving)
           FROM mld_melding_object mo, ins_deel d
          WHERE mo.mld_melding_object_verwijder IS NULL
                AND mo.ins_deel_key = d.ins_deel_key
                AND mo.mld_melding_key = m.mld_melding_key)
           ci,
        (SELECT prs_perslid_naam_full  FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = m.prs_perslid_key_voor),
        (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = m.mld_melding_behandelaar_key),
        --to_date(to_char(m.mld_melding_datum,'dd-mm-yyyy'),'dd-mm-yyyy'),
        --to_date(to_char(m.mld_melding_einddatum,'dd-mm-yyyy'),'dd-mm-yyyy'),
        TRUNC (m.mld_melding_datum),
        TRUNC (m.mld_melding_einddatum),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 366   -- Aanwezig [Systeembeheer]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 361       -- Aanwezig [Architect]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 367             -- Aanwezig [TAB]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 365     -- Aanwezig [Servicedesk]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 368      -- Aanwezig [Voorzitter]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 364   -- Aanwezig [Netwerkbeheer]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 369  -- Aanwezig [Werkplekbeheer]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 363             -- Aanwezig [FAB]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT ud.fac_usrdata_code
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 362     -- Aanwezig [Coördinator]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 375    -- Akkoord [Systeembeheer]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 370        -- Akkoord [Architect]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 376              -- Akkoord [TAB]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 374      -- Akkoord [Servicedesk]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 377       -- Akkoord [Voorzitter]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 373    -- Akkoord [Netwerkbeheer]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 378   -- Akkoord [Werkplekbeheer]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 372              -- Akkoord [FAB]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        (SELECT DECODE(UPPER(ud.fac_usrdata_code),'JA','V','NEE','X','')
             FROM mld_kenmerkmelding km, hsle_v_ict_rfc_kenmerken k, fac_usrdata ud
             WHERE m.mld_melding_key = km.mld_melding_key(+)
                  AND km.mld_kenmerk_key = k.mld_kenmerk_key(+)
                  AND k.mld_srtkenmerk_key = 371      -- Akkoord [Coördinator]
                  AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = ud.fac_usrdata_key(+)),
        u.mld_uitvoerende_key,
        CASE
           WHEN u.type = 'P'
           THEN (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = u.mld_uitvoerende_key)
           WHEN u.type = 'B'
           THEN (SELECT prs_bedrijf_naam FROM prs_bedrijf WHERE prs_bedrijf_key = u.mld_uitvoerende_key)
        END,
        o.mld_opdr_omschrijving,
        --to_date(to_char(o.mld_opdr_datumbegin, 'dd-mm-yyyy'),'dd-mm-yyyy'),
        --to_date(to_char(o.mld_opdr_einddatum, 'dd-mm-yyyy'),'dd-mm-yyyy'),
        --COALESCE(to_date(to_char(o.mld_opdr_plandatum, 'dd-mm-yyyy'),'dd-mm-yyyy'), to_date(to_char(o.mld_opdr_einddatum - (o.mld_opdr_einddatum - o.mld_opdr_datumbegin)/2, 'dd-mm-yyyy'),'dd-mm-yyyy')) plandatum,
        TRUNC (o.mld_opdr_datumbegin),
        TRUNC (o.mld_opdr_einddatum),
        COALESCE (TRUNC (o.mld_opdr_plandatum), TRUNC (o.mld_opdr_einddatum - (o.mld_opdr_einddatum - o.mld_opdr_datumbegin) / 2)) plandatum,
        o.mld_opdr_uren
   FROM mld_melding m, mld_stdmelding sm, mld_opdr o, mld_v_uitvoerende u
  WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
        AND sm.mld_ins_discipline_key IN (642, 644)              -- RFC/Change
        AND m.mld_melding_key = o.mld_melding_key(+)
        AND o.mld_uitvoerende_keys = u.mld_uitvoerende_key(+);

CREATE OR REPLACE VIEW hsle_v_ins_qrc
(fclt_3d_discipline_key, fclt_3d_locatie_key, fclt_f_locatie, fclt_f_gebouw, plaats, soortruimte, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_deel_omschrijving, ins_deel_key, ins_srtdeel_key,
 fclt_f_objectsoort, ins_alg_ruimte_type, alg_district_key, ins_deel_upper, alg_ruimte_key, fclt_f_fac_bookmark_naam, hide_f_bookmark_id
)
AS
         SELECT  i.ins_discipline_key,
                 l.alg_locatie_key,
                 l.alg_locatie_omschrijving,
                 o.alg_gebouw_omschrijving,
                 o.alg_plaatsaanduiding plaats,
                 (SELECT r.alg_ruimte_omschrijving
                  FROM alg_ruimte r
                  WHERE r.alg_ruimte_key = i.ins_alg_ruimte_key) soortruimte,
                 s.ins_srtdeel_code,
                 s.ins_srtdeel_omschrijving,
                 i.ins_deel_omschrijving,
                 i.ins_deel_key,
                 s.ins_srtdeel_key,
                 s.ins_srtdeel_upper,
                 i.ins_alg_ruimte_type,
                 l.alg_district_key,
                 ins_deel_upper,
                 i.ins_alg_ruimte_key,
                 b.fac_bookmark_naam,
                 b.fac_bookmark_id
            FROM ins_deel i,
                 ins_v_alg_overzicht o,
                 ins_srtdeel s,
                 alg_locatie l,
                 alg_district di,
                 fac_bookmark b
           WHERE b.fac_bookmark_naam like '%QRC%'
                 AND  ins_deel_verwijder IS NULL
                 AND i.ins_deel_module = 'INS'
                 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 s.ins_srtdeel_key = i.ins_srtdeel_key;

-- Notificatie-job die 2 weken (=14 dagen) VOOR de uiterlijke inleverdatum (PRODUCTIE: kenmerk-key 201, TEST: kenmerk-key 281) van het object parkeerpas (ins_srtdeel_key = 301) een mail verstuurd naar de lener.
CREATE OR REPLACE VIEW hsle_v_noti_pp1
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT 'CUST01',
          '',
          d.ins_alg_ruimte_key,
          'Reminder parkeerpas - Uiterlijke inleverdatum: '
          || kd.ins_kenmerkdeel_waarde,
          d.ins_deel_key,
          NULL
     FROM ins_deel d, ins_kenmerkdeel kd, fac_notificatie_job nj
    WHERE ins_srtdeel_key = 301
      AND ins_alg_ruimte_key_org IS NOT NULL
      AND ins_alg_ruimte_type_org IS NOT NULL
      AND ins_alg_ruimte_type = 'P'
      AND ins_deel_verwijder IS NULL
      AND kd.ins_deel_key = d.ins_deel_key
      AND kd.ins_kenmerk_key = 201
      AND KD.INS_KENMERKDEEL_VERWIJDER IS NULL
      AND TO_DATE (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') - 14 <=
             TRUNC (SYSDATE)
      AND nj.fac_notificatie_job_view = 'HSLE_V_NOTI_PP1'
      AND TO_DATE (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') - 14 >=
             TRUNC (nj.fac_notificatie_job_nextrun);

-- Notificatie-job die 1 week (=7 dagen) NA de uiterlijke inleverdatum (PRODUCTIE: kenmerk-key 201, TEST: kenmerk-key 281) van het object parkeerpas (ins_srtdeel_key = 301) een mail verstuurd naar de lener.
CREATE OR REPLACE VIEW hsle_v_noti_pp2
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT 'CUST02',
          '',
          d.ins_alg_ruimte_key,
          'Reminder parkeerpas - Geblokkeerd',
          d.ins_deel_key,
          NULL
     FROM ins_deel d, ins_kenmerkdeel kd, fac_notificatie_job nj
    WHERE ins_srtdeel_key = 301
      AND ins_alg_ruimte_key_org IS NOT NULL
      AND ins_alg_ruimte_type_org IS NOT NULL
      AND ins_alg_ruimte_type = 'P'
      AND ins_deel_verwijder IS NULL
      AND kd.ins_deel_key = d.ins_deel_key
      AND kd.ins_kenmerk_key = 201
      AND KD.INS_KENMERKDEEL_VERWIJDER IS NULL
      AND TO_DATE (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') + 7 <=
             TRUNC (SYSDATE)
      AND nj.fac_notificatie_job_view = 'HSLE_V_NOTI_PP2'
      AND TO_DATE (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') + 7 >=
             TRUNC (nj.fac_notificatie_job_nextrun);

-- Notificatie-job die 4 weken (=28 dagen) VOOR de uiterlijke inleverdatum (PRODUCTIE: kenmerk-key 201, TEST: kenmerk-key 281) van het object parkeerpas (ins_srtdeel_key = 301) een mail verstuurd naar de lener.
CREATE OR REPLACE VIEW hsle_v_noti_pp3
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
   SELECT 'CUST03',
          '',
          d.ins_alg_ruimte_key,
          'Reminder parkeerpas - Uiterlijke inleverdatum: '
          || kd.ins_kenmerkdeel_waarde,
          d.ins_deel_key,
          NULL
     FROM ins_deel d, ins_kenmerkdeel kd, fac_notificatie_job nj
    WHERE ins_srtdeel_key = 301
      AND ins_alg_ruimte_key_org IS NOT NULL
      AND ins_alg_ruimte_type_org IS NOT NULL
      AND ins_alg_ruimte_type = 'P'
      AND ins_deel_verwijder IS NULL
      AND kd.ins_deel_key = d.ins_deel_key
      AND kd.ins_kenmerk_key = 201
      AND KD.INS_KENMERKDEEL_VERWIJDER IS NULL
      AND TO_DATE (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') - 28 <=
             TRUNC (SYSDATE)
      AND nj.fac_notificatie_job_view = 'HSLE_V_NOTI_PP3'
      AND TO_DATE (kd.ins_kenmerkdeel_waarde, 'dd-mm-yyyy') - 28 >=
             TRUNC (nj.fac_notificatie_job_nextrun);

--- HSLE#38447 maatwerk rapportage voor draaiboek reserveringen
CREATE OR REPLACE VIEW hsle_v_rap_res_draaiboek
(
   key,
   res_nummer,
   duur,
   dag_van,
   datum_van,
   tijd_van,
   dag_tot,
   datum_tot,
   tijd_tot,
   aant_pers,
   ruimte,
   omschrijving,
   voorziening,
   gastheer,
   aanvrager,
   opmerking,
   activiteit
)
AS
   SELECT u.key,
          nummer,
          CASE WHEN TRUNC (van) = TRUNC (tot) THEN '-' ELSE 'meerdaags' END
             AS duur,
          TO_CHAR (van, 'DAY') AS dag_van,
          van datum_van,
          TO_CHAR (van, 'HH24:Mi') tijd_van,
          TO_CHAR (tot, 'DAY') AS dag_tot,
          tot datum_tot,
          TO_CHAR (tot, 'HH24:Mi') tijd_tot,
          bezoekers,
          locatie || '-' || gebouw || '-' || verdieping || '- ' || ruimte
             AS ruimte,
          res_omschrijving,
          voorziening_product,
          gastheer,
          contact,
          r.res_rsv_ruimte_opmerking,
          activiteit
     FROM res_v_udr_reserveringincl u, res_rsv_ruimte r
    WHERE u.key = r.res_rsv_ruimte_key;

--- HSLE#38543 maatwerk rapportage aantallen meldingen
CREATE OR REPLACE VIEW HSLE_V_MLD_MLDLIST
(
   MELDINGNR,
   DATUM,
   STDMLDKEY,
   MELDING,
   VAKGROEP,
   AANTAL
)
AS
     SELECT m.mld_melding_key,
            m.mld_melding_datum,
            sm.mld_stdmelding_key,
            sm.mld_stdmelding_omschrijving,
            d.ins_discipline_omschrijving,
            COUNT (m.mld_stdmelding_key) AS COUNT
       FROM mld_melding m, mld_stdmelding sm, ins_tab_discipline d
      WHERE sm.mld_stdmelding_key = m.mld_stdmelding_key(+)
            AND d.ins_discipline_key = sm.mld_ins_discipline_key
   GROUP BY sm.mld_stdmelding_key,
            m.mld_melding_key,
            mld_melding_datum,
            sm.mld_stdmelding_omschrijving,
            d.ins_discipline_omschrijving
   ORDER BY mld_stdmelding_key;

--- HSLE#38543 maatwerk rapportage aantallen meldingen
CREATE OR REPLACE VIEW HSLE_V_MLD_MLDLIST2
(
   MELDINGNR,
   DATUM,
   STDMLDKEY,
   MELDING,
   VAKGROEP,
   AANTAL
)
AS
     SELECT v.meldingnr,
            v.datum,
            v.stdmldkey,
            v.melding,
            v.vakgroep,
            SUM (aantal)
       FROM hsle_v_mld_mldlist v
   GROUP BY v.stdmldkey,
            v.vakgroep,
            v.melding,
            v.datum,
            v.meldingnr
   ORDER BY v.stdmldkey;

--- HSLE#51829 maatwerk rapportage wijzigingen objectbeheer met tracking
CREATE OR REPLACE VIEW HSLE_V_RAP_INS_TRACKING
(
    Discipline,
    Deel_key,
    Deel_omschrijving,
    Deel_opmerking,
    Srtdeel,
    Srtdeel_omschrijving,
    Tracking_key,
    Tracking_datum,
    Tracking_omschrijving,
    Uitgegeven_Aan
)
AS
select
    disc.ins_discipline_omschrijving as Discipline,
    d.ins_deel_key as Deel_key,
    d.ins_deel_omschrijving as Deel_omschrijving,
    d.ins_deel_opmerking as Deel_opmerking,
    sd.ins_srtdeel_code as Srtdeel,
    sd.ins_srtdeel_omschrijving Srtdeel_omschrijving,
    t.fac_tracking_key as Tracking_key,
    t.fac_tracking_datum as Tracking_datum,
    t.fac_tracking_oms as Tracking_omschrijving,
   CASE
   WHEN t.fac_tracking_oms LIKE '%uitgegeven aan Extern%'
   THEN
      'Extern'
   ELSE
    CASE WHEN t.fac_tracking_oms LIKE '%uitgegeven aan%'
    then
      SUBSTR (
         t.fac_tracking_oms,
         INSTR (t.fac_tracking_oms, 'uitgegeven aan') + 15,
           INSTR (t.fac_tracking_oms, ')')
         - INSTR (t.fac_tracking_oms, 'uitgegeven aan')
         - 14)
         else '' End
   END AS Uitgegeven_Aan
from
    ins_tab_discipline disc,
    ins_deel d,
    ins_srtdeel sd,
    fac_tracking t,
    fac_srtnotificatie n
where
    t.fac_tracking_refkey = d.ins_deel_key
    and n.fac_srtnotificatie_xmlnode = 'deel'
    and t.fac_tracking_oms is not null
    and t.fac_srtnotificatie_key = n.fac_srtnotificatie_key
    and disc.ins_discipline_key = d.ins_discipline_key
    and sd.ins_srtdeel_key = d.ins_srtdeel_key
    order by sd.ins_srtdeel_omschrijving, ins_deel_key
;

CREATE OR REPLACE VIEW HSLE_V_BEZOEKERSAFSPRAAK
(
   BEZ_AFSPRAAK_KEY,
   BEZ_AFSPRAAK_DATUM,
   BEZ_AFSPRAAK_EIND,
   BEZ_RUIMTE,
   BEZ_AFSPRAAK_OPMERKING,
   BEZ_AFSPRAAK_GASTHEER,
   BEZ_AFSPRAAK_TELEFOONNR,
   OMSCHRIJVING
)
AS
SELECT
    a.bez_afspraak_key,
    a.bez_afspraak_datum,
    a.bez_afspraak_eind,
    a.bez_afspraak_ruimte,
    a.bez_afspraak_opmerking,
    a.bez_afspraak_gastheer,
    a.bez_afspraak_telefoonnr,
    a.bez_afspraak_key || ' - ' || TO_CHAR(a.bez_afspraak_datum, 'YYYY-MM-DD') || ' ' || TO_CHAR(a.bez_afspraak_datum, 'HH24:MI') || '/' || TO_CHAR(a.bez_afspraak_eind, 'HH24:MI') || ' - ' || a.bez_afspraak_gastheer || ' - ' || a.bez_afspraak_ruimte as Omschrijving
FROM bez_afspraak a
WHERE TRUNC(a.bez_afspraak_datum) >= TRUNC(SYSDATE-31)
;

--- HSLE#40151 Rapportage doorlooptijden mld obv gewijzigde vakgroepen
--- Later toegevoegd: behandelgroep_oud en behandelgroep_nieuw
CREATE OR REPLACE VIEW hsle_v_rap_mldstat
(
   track_datum,
   srtnotificatie_code,
   discipline_omschrijving,
   stdmelding_omschrijving,
   melding_key,
   melding_datum,
   tracking_omschrijving,
   vakgroep_oud,
   vakgroep_nieuw,
   behandelgroep_oud,
   behandelgroep_nieuw,
   melder,
   behandelaar,
   melding_datum_afgemeld
)
AS
     SELECT t.fac_tracking_datum,
            DECODE (t.fac_srtnotificatie_key,
                    38, 'MLDAFM',
                    43, 'MLDNEW',
                    44, 'MLDREJ',
                    45, 'MLDUPD'),
            d.ins_discipline_omschrijving,
            sm.mld_stdmelding_omschrijving,
            m.mld_melding_key,
            m.mld_melding_datum,
            t.fac_tracking_oms,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Vakgroep:%'
               THEN
                  SUBSTR (
                     t.fac_tracking_oms,
                     INSTR (t.fac_tracking_oms, 'Vakgroep:') + 10,
                     INSTR (
                        SUBSTR (t.fac_tracking_oms,
                                INSTR (t.fac_tracking_oms, 'Vakgroep:') + 10,
                                100),
                        ' --> '))
               ELSE
                  ''
            END
               AS vakgr_oud,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Vakgroep:%'
               THEN
                  SUBSTR (
                     SUBSTR (t.fac_tracking_oms,
                             INSTR (t.fac_tracking_oms, 'Vakgroep:') + 10,
                             999),
                     INSTR (
                        SUBSTR (t.fac_tracking_oms,
                                INSTR (t.fac_tracking_oms, 'Vakgroep:') + 10,
                                999),
                        ' --> ')
                     + 5,
                     INSTR (
                        SUBSTR (
                           SUBSTR (
                              t.fac_tracking_oms,
                              INSTR (t.fac_tracking_oms, 'Vakgroep:') + 14
                              + INSTR (
                                   SUBSTR (
                                      t.fac_tracking_oms,
                                      INSTR (t.fac_tracking_oms, 'Vakgroep:')
                                      + 10,
                                      999),
                                   ' --> ')),
                           0),
                        CHR (10)))
               ELSE
                  ''
            END
               AS vakgr_nieuw,
            CASE
               WHEN (CASE
                        WHEN t.fac_tracking_oms LIKE '%Behandelgroep:%'
                        THEN
                           SUBSTR (
                              t.fac_tracking_oms,
                              INSTR (t.fac_tracking_oms, 'Behandelgroep:') + 15,
                              INSTR (
                                 SUBSTR (
                                    t.fac_tracking_oms,
                                    INSTR (t.fac_tracking_oms,
                                           'Behandelgroep:')
                                    + 15,
                                    100),
                                 ' --> '))
                        ELSE
                           ''
                     END) = '(leeg) '
               THEN
                  ''
               ELSE
                  CASE
                     WHEN t.fac_tracking_oms LIKE '%Behandelgroep:%'
                     THEN
                        SUBSTR (
                           t.fac_tracking_oms,
                           INSTR (t.fac_tracking_oms, 'Behandelgroep:') + 15,
                           INSTR (
                              SUBSTR (
                                 t.fac_tracking_oms,
                                 INSTR (t.fac_tracking_oms, 'Behandelgroep:')
                                 + 15,
                                 100),
                              ' --> '))
                     ELSE
                        ''
                  END
            END
               AS behandelgr_oud,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Behandelgroep:%'
               THEN
                  CASE
                     WHEN SUBSTR (
                             t.fac_tracking_oms,
                             INSTR (t.fac_tracking_oms, 'Behandelgroep:') + 19
                             + INSTR (
                                  SUBSTR (
                                     t.fac_tracking_oms,
                                     INSTR (t.fac_tracking_oms,
                                            'Behandelgroep:')
                                     + 15,
                                     999),
                                  ' --> '),
                             999) = '(gewist)'
                     THEN
                        ''
                     ELSE
                        SUBSTR (
                           SUBSTR (
                              t.fac_tracking_oms,
                              INSTR (t.fac_tracking_oms, 'Behandelgroep:') + 19
                              + INSTR (
                                   SUBSTR (
                                      t.fac_tracking_oms,
                                      INSTR (t.fac_tracking_oms,
                                             'Behandelgroep:')
                                      + 15,
                                      999),
                                   ' --> '),
                              999),
                           1,
                           (CASE
                               WHEN (INSTR (
                                        SUBSTR (
                                           t.fac_tracking_oms,
                                           INSTR (t.fac_tracking_oms,
                                                  'Behandelgroep:')
                                           + 19
                                           + INSTR (
                                                SUBSTR (
                                                   t.fac_tracking_oms,
                                                   INSTR (t.fac_tracking_oms,
                                                          'Behandelgroep:')
                                                   + 15,
                                                   999),
                                                ' --> '),
                                           999),
                                        CHR (10))) = 0
                               THEN
                                  999
                               ELSE
                                  INSTR (
                                     SUBSTR (
                                        t.fac_tracking_oms,
                                        INSTR (t.fac_tracking_oms,
                                               'Behandelgroep:')
                                        + 19
                                        + INSTR (
                                             SUBSTR (
                                                t.fac_tracking_oms,
                                                INSTR (t.fac_tracking_oms,
                                                       'Behandelgroep:')
                                                + 15,
                                                999),
                                             ' --> '),
                                        999),
                                     CHR (10))
                            END))
                  END
               ELSE
                  ''
            END
               AS grpnew,
            (SELECT prs_perslid_naam
               FROM prs_perslid p
              WHERE p.prs_perslid_key = m.prs_perslid_key_voor)
               AS melder,
            (SELECT prs_perslid_naam
               FROM prs_perslid p
              WHERE p.prs_perslid_key = m.mld_melding_behandelaar_key)
               AS behandelaar,
            COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key),
                      fac.gettrackingdate ('MLDREJ', m.mld_melding_key))
       FROM mld_melding m,
            mld_stdmelding sm,
            ins_tab_discipline d,
            fac_tracking t
      WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
            AND sm.mld_ins_discipline_key = d.ins_discipline_key
            AND TRUNC (m.mld_melding_datum) >=
                  TRUNC (TO_DATE ('2018-01-01', 'yyyy-mm-dd'))
            AND t.fac_srtnotificatie_key IN (38, 43, 44, 45) -- MLDAFM, MLDNEW, MLDREJ, MLDUPD
            AND m.mld_melding_key = t.fac_tracking_refkey
   ORDER BY m.mld_melding_key, t.fac_tracking_datum DESC
;

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