#ifdef  RES // 07-12-99 BIV
/*
 * $Revision$
 * $Id$
 */


CREATE_VIEW(RES_DISCIPLINE, 0) AS
  SELECT * FROM INS_TAB_DISCIPLINE
   WHERE INS_DISCIPLINE_MODULE = 'RES';

CREATE_VIEW(RES_V_AANWEZIGDISCIPLINE, 0) AS
  SELECT * FROM RES_DISCIPLINE
   WHERE INS_DISCIPLINE_VERWIJDER IS NULL;

/* LET OP (FSN#21553)
 * Deze view lijkt qua naam een tabel, maar is het technisch niet
 * Hij levert de statustekst in de juiste taal op, van een specifieke statuscode
 * Voorheen was dit een tabel met deze naam, en werd deze initieel gevuld. Dit is
 * hiermee dus vanwege de i18n veranderd.
 */
CREATE_VIEW(res_status_bo, 0)
AS
SELECT   fac_code2label_code res_status_bo_key,
         COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst) res_status_bo_omschrijving
  FROM   fac_locale_xsl fl, fac_code2label fs
 WHERE       fl.fac_locale_xsl_label = fac_code2label_label
         AND fac_code2label_domein = 'reservering'
         AND fac_locale_xsl_lang = lcl.getuserlanguage ();

CREATE_VIEW(res_status_fo, 0)
AS
SELECT   fac_code2label_code res_status_fo_key,
         COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst) res_status_fo_omschrijving
  FROM   fac_locale_xsl fl, fac_code2label fs
 WHERE       fl.fac_locale_xsl_label = fac_code2label_label
         AND fac_code2label_domein = 'resfostatus'
         AND fac_locale_xsl_lang = lcl.getuserlanguage ();


DEFINIEER_VIEW_AANWEZIG(res_reservering, res_reservering_verwijder,
    res_v_aanwezigreservering,0);

DEFINIEER_VIEW_AANWEZIG(res_rsv_ruimte, res_rsv_ruimte_verwijder,
    res_v_aanwezigrsv_ruimte,0);

DEFINIEER_VIEW_AANWEZIG(res_opstelling, res_opstelling_verwijder,
    res_v_aanwezigopstelling,0);

DEFINIEER_VIEW_AANWEZIG(res_ruimte, res_ruimte_verwijder,
    res_v_aanwezigruimte,0);

DEFINIEER_VIEW_AANWEZIG(res_artikel, res_artikel_verwijder,
    res_v_aanwezigartikel, 0);

DEFINIEER_VIEW_AANWEZIG(res_deel, res_deel_verwijder,
    res_v_aanwezigdeel, 0);

DEFINIEER_VIEW_AANWEZIG(res_rsv_artikel, res_rsv_artikel_verwijder,
    res_v_aanwezigrsv_artikel, 0);

DEFINIEER_VIEW_AANWEZIG(res_rsv_deel, res_rsv_deel_verwijder,
    res_v_aanwezigrsv_deel, 0);

DEFINIEER_VIEW_AANWEZIG(res_alg_ruimte, res_alg_ruimte_verwijder,
    res_v_aanwezigalg_ruimte, 0);

CREATE_VIEW(res_v_aanwezigins_deel, 0)
        (res_deel_key,
         ins_deel_key) AS
  SELECT res_deel_key,
         res_ins_deel_key
    FROM res_deel
   WHERE res_deel_verwijder IS NULL;

CREATE_VIEW(res_v_res_ruimte_gegevens_all, 0)
     ( alg_regio_key,
       alg_district_key,
       alg_locatie_key,
       alg_gebouw_key,
       alg_verdieping_key,
       res_ruimte_key,
       res_ruimte_nr,
       res_ruimte_volgnummer,
       res_ruimte_prijs,
       bez_actie_key,
       res_discipline_key,
       res_ruimte_extern_id,
       alg_ruimte_verwijder,
       res_ruimte_verwijder,
       res_alg_ruimte_verwijder
 ) AS
SELECT DISTINCT
       ALG_D.alg_regio_key
,      ALG_D.alg_district_key
,      ALG_L.alg_locatie_key
,      ALG_G.alg_gebouw_key
,      ALG_V.alg_verdieping_key
,      RES_R.res_ruimte_key
,      RES_R.res_ruimte_nr
,      RES_R.res_ruimte_volgnummer
,      RES_R.res_ruimte_prijs
,      RES_R.bez_actie_key
,      RES_R.res_discipline_key
,      RES_R.res_ruimte_extern_id
,      alg_ruimte_verwijder
,      res_ruimte_verwijder
,      res_alg_ruimte_verwijder
FROM   ALG_DISTRICT         ALG_D
,      ALG_LOCATIE          ALG_L
,      ALG_GEBOUW           ALG_G
,      ALG_VERDIEPING       ALG_V
,      alg_ruimte           ALG_R
,      res_ruimte           RES_R
,      RES_ALG_RUIMTE       RES_RA
WHERE  RES_R.res_ruimte_key     = RES_RA.res_ruimte_key
AND    ALG_R.alg_ruimte_key     = RES_RA.alg_ruimte_key
AND    ALG_R.alg_verdieping_key = ALG_V.alg_verdieping_key
AND    ALG_V.alg_gebouw_key     = ALG_G.alg_gebouw_key
AND    ALG_G.alg_locatie_key    = ALG_L.alg_locatie_key
AND    ALG_L.alg_district_key   = ALG_D.alg_district_key;
/

CREATE_VIEW(res_v_res_ruimte_gegevens,0) AS
SELECT * FROM res_v_res_ruimte_gegevens_all
  WHERE alg_ruimte_verwijder IS NULL
    AND res_ruimte_verwijder IS NULL
    AND res_alg_ruimte_verwijder IS NULL;
/


CREATE_VIEW(res_v_alg_ruimte_gegevens,0)
        (alg_locatie_key,
         alg_gebouw_key,
         alg_verdieping_key,
         alg_ruimte_key,
         alg_ruimte_aanduiding,
         res_ruimte_key,
         res_ruimte_nr,
         res_alg_ruimte_key) AS
  SELECT ALG_L.alg_locatie_key,
         ALG_G.alg_gebouw_key,
         ALG_V.alg_verdieping_key,
         ALG_R.alg_ruimte_key,
         ALG_L.alg_locatie_code           ||' - '||
         ALG_G.alg_gebouw_code            ||' - '||
         ALG_V.alg_verdieping_code        ||' - '||
         ALG_R.alg_ruimte_nr,
         RES_R.res_ruimte_key,
         RES_R.res_ruimte_nr,
         RES_RA.res_alg_ruimte_key
    FROM alg_locatie ALG_L, alg_gebouw ALG_G, alg_verdieping ALG_V, alg_v_aanwezigruimte ALG_R,
         res_v_aanwezigruimte RES_R, res_v_aanwezigalg_ruimte RES_RA
   WHERE RES_R.res_ruimte_key = RES_RA.res_ruimte_key
     AND ALG_R.alg_ruimte_key = RES_RA.alg_ruimte_key
     AND ALG_R.alg_verdieping_key = ALG_V.alg_verdieping_key
     AND ALG_V.alg_gebouw_key = ALG_G.alg_gebouw_key
     AND ALG_G.alg_locatie_key = ALG_L.alg_locatie_key
UNION
  SELECT ALG_L.alg_locatie_key,
         ALG_G.alg_gebouw_key,
         ALG_V.alg_verdieping_key,
         ALG_R.alg_ruimte_key,
         ALG_L.alg_locatie_code                || ' - ' ||
         ALG_G.alg_gebouw_code                 || ' - ' ||
         ALG_V.alg_verdieping_code             || ' - ' ||
         ALG_R.alg_ruimte_nr,
         TO_NUMBER(NULL),
         NULL,
         TO_NUMBER(NULL)
    FROM alg_locatie ALG_L, alg_gebouw ALG_G, alg_verdieping ALG_V,
         alg_v_aanwezigruimte ALG_R
   WHERE ALG_R.alg_verdieping_key = ALG_V.alg_verdieping_key
     AND ALG_V.alg_gebouw_key = ALG_G.alg_gebouw_key
     AND ALG_G.alg_locatie_key = ALG_L.alg_locatie_key
-- When excluded catering ordered on ALG_RUIMTE which happened to be part of RES_RUIMTE
-- would not show on BO-list
--     AND ALG_R.alg_ruimte_key NOT IN
--        (SELECT alg_ruimte_key
--           FROM res_v_aanwezigalg_ruimte RES_RA)
/

CREATE_VIEW(res_v_rsv_ruimte_2_alg_ruimte,0) AS
SELECT
  r.res_reservering_key,
  r.res_rsv_ruimte_key,
  r.res_ruimte_opstel_key,
  ro.res_ruimte_opstel_tijd,
  ro.res_ruimte_key,
  ra.alg_ruimte_key,
  r.res_rsv_ruimte_van,
  r.res_rsv_ruimte_tot,
  r.res_status_fo_key,
  rac.res_activiteit_posttime,
  ra.res_alg_ruimte_verwijder,
  r.res_rsv_ruimte_dirtlevel,
  rr.res_discipline_key
FROM
  res_rsv_ruimte r,
  res_ruimte_opstelling ro,
  res_ruimte rr,
  res_alg_ruimte ra,
  res_activiteit rac
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
  rr.res_ruimte_key = ra.res_ruimte_key AND
  r.res_activiteit_key = rac.res_activiteit_key;
/

CREATE_VIEW(res_v_reserveringruimte_geg, 0) AS
   SELECT rr.res_reservering_key,
          rr2.res_rsv_ruimte_opmerking,
          rr2.res_rsv_ruimte_omschrijving,
          k.prs_kostenplaats_nr res_rsv_ruimte_ordernr,
          rr2.res_rsv_ruimte_telefoon,
          rr2.res_rsv_ruimte_aanmaak,
          rr2.res_rsv_ruimte_verwijder,
          rr2.res_rsv_ruimte_contact_key,
          rr2.res_rsv_ruimte_host_key,
          rr.res_ruimte_key,
          rr.alg_ruimte_key,
          k.prs_kostenplaats_nr
     FROM res_v_rsv_ruimte_2_alg_ruimte rr,
          prs_kostenplaats k,
          res_rsv_ruimte rr2
    WHERE k.prs_kostenplaats_key(+) = rr2.prs_kostenplaats_key
      AND rr2.res_rsv_ruimte_key = rr.res_rsv_ruimte_key;

CREATE_VIEW(res_v_ruimte_opstel_gegevens,0) AS
  SELECT RES_RO.res_ruimte_opstel_key,
         RES_R.res_ruimte_key,
         RES_R.res_ruimte_nr,
         RES_R.res_ruimte_upper,
         RES_O.res_opstelling_key,
         RES_O.res_opstelling_omschrijving,
         RES_RO.res_ruimte_opstel_bezoekers
    FROM res_v_aanwezigruimte RES_R, res_v_aanwezigopstelling RES_O,
         res_ruimte_opstelling RES_RO
   WHERE RES_R.res_ruimte_key = RES_RO.res_ruimte_key
     AND RES_O.res_opstelling_key = RES_RO.res_opstelling_key;



CREATE_VIEW(res_v_ins_deel,0)
   (      ins_discipline_key
   ,      ins_srtgroep_key
   ,      ins_srtdeel_key
   ,      ins_srtdeel_omschrijving
   ,      alg_locatie_key
   ,      alg_gebouw_key
   ,      alg_verdieping_key
   ,      alg_ruimte_key
   ,      prs_werkplek_key
   ,      alg_terreinsector_key
   ,      alg_plaatsaanduiding
   ,      ins_deel_key
   ,      res_deel_omschrijving
   ,      res_deel_key
   ,      res_deel_eenheid
   ,      res_deel_prijs
   ,      res_deel_reserveerbaar
   )
AS SELECT INS_DI.ins_discipline_key
   ,      INS_SG.ins_srtgroep_key
   ,      INS_SD.ins_srtdeel_key
   ,      INS_SD.ins_srtdeel_code||' - '||INS_SD.ins_srtdeel_omschrijving
   ,      INS_DE.ins_alg_locatie_key
   ,      INS_AO.alg_gebouw_key
   ,      INS_AO.alg_verdieping_key
   ,      INS_AO.alg_ruimte_key
   ,      INS_AO.prs_werkplek_key
   ,      INS_AO.alg_terreinsector_key
   ,      INS_AO.alg_plaatsaanduiding
   ,      INS_DE.ins_deel_key
   ,      RES_DE.res_deel_omschrijving
   ,      RES_DE.res_deel_key
   ,      RES_DE.res_deel_eenheid
   ,      RES_DE.res_deel_prijs
   ,      decode(RES_DE.res_deel_key,null,0,1)
   FROM   ins_v_aanwezigdeel  INS_DE
   ,      ins_tab_discipline  INS_DI
   ,      ins_v_alg_overzicht INS_AO
   ,      ins_srtdeel         INS_SD
   ,      ins_srtgroep        INS_SG
   ,      res_v_aanwezigdeel  RES_DE
   WHERE  INS_DE.ins_deel_key           = RES_DE.res_ins_deel_key (+)
   AND    INS_DE.ins_deel_module        = 'INS'
   AND    INS_DE.ins_deel_parent_key   IS NULL
   AND    INS_AO.alg_onroerendgoed_keys = INS_DE.ins_alg_ruimte_key
   AND    INS_AO.alg_onroerendgoed_type = INS_DE.ins_alg_ruimte_type
   AND    INS_AO.alg_locatie_key        = INS_DE.ins_alg_locatie_key
   AND    INS_SD.ins_srtdeel_key        = INS_DE.ins_srtdeel_key
   AND    INS_SG.ins_srtgroep_key       = INS_SD.ins_srtgroep_key
   AND    INS_DI.ins_discipline_key     = INS_DE.ins_discipline_key
   AND    INS_DE.ins_discipline_key IN (SELECT ins_discipline_key FROM ins_discipline);
/

CREATE_VIEW(res_v_aanwezig_deel_artikel, 0)
   (      res_deel_key
   ,      res_artikel_key
   ,      res_deel_artikel_prijs
   ,      res_deel_artikel_naam
   ,      res_deel_artikel_eenheid)
AS SELECT R.res_deel_key
   ,      to_number(null)
   ,      R.res_deel_prijs
   ,      substr((S.ins_srtdeel_omschrijving ||' '|| R.res_deel_omschrijving),1,50)
   ,      R.res_deel_eenheid
   FROM   res_v_aanwezigdeel R
   ,      ins_deel           D
   ,      ins_srtdeel        S
   WHERE  R.res_ins_deel_key = D.ins_deel_key
   AND    D.ins_srtdeel_key  = S.ins_srtdeel_key
   UNION
   SELECT to_number(null)
   ,      res_artikel_key
   ,      res_artikel_prijs
   ,      res_artikel_omschrijving
   ,      res_artikel_eenheid
   FROM   res_v_aanwezigartikel;

CREATE_VIEW(res_v_aanwezig_rsv_deelartikel, 0)
 (res_rsv_deel_key,
  res_rsv_artikel_key,
  res_reservering_key,
  res_deel_key,
  res_artikel_key,
  res_deel_artikel_omschrijving,
  res_deel_artikel_eenheid,
  res_deel_artikel_prijs,
  res_deel_artikel_aantal,
  res_deel_artikel_levering
 )
AS
   SELECT r.res_rsv_deel_key, TO_NUMBER (NULL), rr.res_reservering_key, r.res_deel_key, TO_NUMBER (NULL),
          SUBSTR ((s.ins_srtdeel_omschrijving || ' ' || d.res_deel_omschrijving), 1, 50), d.res_deel_eenheid,
          d.res_deel_prijs, r.res_rsv_deel_aantal, to_date(NULL)
     FROM res_rsv_deel r, res_v_aanwezigdeel d, ins_v_aanwezigdeel i, ins_srtdeel s, res_rsv_ruimte rr
    WHERE d.res_deel_key = r.res_deel_key
      AND d.res_ins_deel_key = i.ins_deel_key
      AND i.ins_srtdeel_key = s.ins_srtdeel_key
      AND r.res_rsv_deel_verwijder IS NULL
      AND rr.res_rsv_ruimte_key = r.res_rsv_ruimte_key
   UNION
   SELECT TO_NUMBER (NULL), r.res_rsv_artikel_key, rr.res_reservering_key, TO_NUMBER (NULL), r.res_artikel_key,
          a.res_artikel_omschrijving, a.res_artikel_eenheid, a.res_artikel_prijs, r.res_rsv_artikel_aantal,
          r.res_rsv_artikel_levering
     FROM res_rsv_artikel r, res_v_aanwezigartikel a, res_rsv_ruimte rr
    WHERE a.res_artikel_key = r.res_artikel_key
      AND r.res_rsv_artikel_verwijder IS NULL
      AND rr.res_rsv_ruimte_key = r.res_rsv_ruimte_key;

DEFINIEER_VIEW_AANWEZIG(res_kenmerkwaarde, res_kenmerkwaarde_verwijder,
res_v_aanwezigkenmerkwaarde, 0);

DEFINIEER_VIEW_AANWEZIG(res_kenmerkartikel, res_kenmerkartikel_verwijder,
res_v_aanwezigkenmerkartikel, 0);

CREATE_VIEW(res_v_res_catalogus, 0)
AS SELECT *
FROM   INS_TAB_DISCIPLINE
WHERE  ins_discipline_module = 'RES'
AND    ins_discipline_min_level IN (1,2,3,4);


-- View levert op in welke alg_ruimtes uit een bepaalde catalogus besteld mag worden
CREATE_VIEW(res_v_srtartikel_onrgoed, 0)
     ( alg_ruimte_key,
       res_discipline_key,
       alg_onrgoed_niveau,
       alg_onrgoed_ingangsdatum,
       alg_onrgoed_vervaldatum
     ) AS
   SELECT ra.alg_ruimte_key, og.res_discipline_key, og.alg_onrgoed_niveau
        , og.res_srtartikel_og_ingangsdatum, og.res_srtartikel_og_vervaldatum
     FROM res_srtartikel_onrgoed og,
          alg_ruimte ra,
          alg_verdieping rv,
          alg_gebouw rg
    WHERE og.alg_onrgoed_key = rg.alg_locatie_key
      AND ra.alg_verdieping_key = rv.alg_verdieping_key
      AND rv.alg_gebouw_key = rg.alg_gebouw_key
      AND og.alg_onrgoed_niveau = 'L'
      AND og.res_srtartikel_og_verwijder IS NULL
      AND ra.alg_ruimte_key IS NOT NULL
   UNION
   SELECT ra.alg_ruimte_key, og.res_discipline_key, og.alg_onrgoed_niveau
        , og.res_srtartikel_og_ingangsdatum, og.res_srtartikel_og_vervaldatum
     FROM res_srtartikel_onrgoed og, alg_ruimte ra, alg_verdieping rv
    WHERE og.alg_onrgoed_key = rv.alg_gebouw_key
      AND ra.alg_verdieping_key = rv.alg_verdieping_key
      AND og.alg_onrgoed_niveau = 'G'
      AND og.res_srtartikel_og_verwijder IS NULL
      AND ra.alg_ruimte_key IS NOT NULL
   UNION
   SELECT ra.alg_ruimte_key, og.res_discipline_key, og.alg_onrgoed_niveau
        , og.res_srtartikel_og_ingangsdatum, og.res_srtartikel_og_vervaldatum
     FROM res_srtartikel_onrgoed og, alg_ruimte ra
    WHERE og.alg_onrgoed_key = ra.alg_ruimte_key
      AND og.alg_onrgoed_niveau = 'R'
      AND og.res_srtartikel_og_verwijder IS NULL
      AND ra.alg_ruimte_key IS NOT NULL;

CREATE_VIEW(res_v_srtartikel_onrgoed_scope, 0)
AS
  WITH onrgoed AS
       (SELECT alg_onroerendgoed_keys
             , alg_ruimte_key
             , alg_verdieping_key
             , alg_gebouw_key
             , alg_locatie_key
          FROM alg_v_allonroerendgoed
         WHERE alg_type = 'R'
       )
     , scope AS
       (SELECT ar.alg_onroerendgoed_keys
             , so.res_discipline_key
             , 'R' alg_onrgoed_niveau
             , ar.alg_ruimte_key AS alg_onrgoed_key
             , so.res_srtartikel_og_ingangsdatum
             , so.res_srtartikel_og_vervaldatum
             , so.res_srtartikel_og_verwijder
          FROM onrgoed ar
             , res_srtartikel_onrgoed so
         WHERE so.alg_onrgoed_niveau = 'R'
           AND so.alg_onrgoed_key = ar.alg_ruimte_key
        UNION ALL
        SELECT ar.alg_onroerendgoed_keys
             , so.res_discipline_key
             , 'V'
             , ar.alg_verdieping_key
             , so.res_srtartikel_og_ingangsdatum
             , so.res_srtartikel_og_vervaldatum
             , so.res_srtartikel_og_verwijder
          FROM onrgoed ar
             , res_srtartikel_onrgoed so
         WHERE so.alg_onrgoed_niveau = 'V'
           AND so.alg_onrgoed_key = ar.alg_verdieping_key
        UNION ALL
        SELECT ar.alg_onroerendgoed_keys
             , so.res_discipline_key
             , 'G'
             , ar.alg_gebouw_key
             , so.res_srtartikel_og_ingangsdatum
             , so.res_srtartikel_og_vervaldatum
             , so.res_srtartikel_og_verwijder
          FROM onrgoed ar
             , res_srtartikel_onrgoed so
         WHERE so.alg_onrgoed_niveau = 'G'
           AND so.alg_onrgoed_key = ar.alg_gebouw_key
        UNION ALL
        SELECT ar.alg_onroerendgoed_keys
             , so.res_discipline_key
             , 'L'
             , ar.alg_locatie_key
             , so.res_srtartikel_og_ingangsdatum
             , so.res_srtartikel_og_vervaldatum
             , so.res_srtartikel_og_verwijder
          FROM onrgoed ar
             , res_srtartikel_onrgoed so
         WHERE so.alg_onrgoed_niveau = 'L'
           AND so.alg_onrgoed_key = ar.alg_locatie_key
       )
     , ranked AS
       (SELECT scope.*
             , ROW_NUMBER() OVER
               (PARTITION BY scope.alg_onroerendgoed_keys
                           , scope.res_discipline_key
                    ORDER BY CASE scope.alg_onrgoed_niveau
                             WHEN 'R' THEN 1
                             WHEN 'V' THEN 2
                             WHEN 'G' THEN 3
                             WHEN 'L' THEN 4
                             END
               ) AS rank_nr
          FROM scope
       )
  SELECT alg_onroerendgoed_keys
       , res_discipline_key
       , alg_onrgoed_niveau
       , alg_onrgoed_key
       , res_srtartikel_og_ingangsdatum
       , res_srtartikel_og_vervaldatum
       , res_srtartikel_og_verwijder
    FROM ranked
  WHERE rank_nr = 1;


CREATE_VIEW(fac_v_my_res_rooms, 0) AS
 SELECT res_ruimte_key,
    prs_perslid_key,
    niveau
   FROM fac_v_my_rooms fr, res_alg_ruimte ar
  WHERE fr.alg_ruimte_key = ar.alg_ruimte_key
    AND ar.res_alg_ruimte_verwijder IS NULL
UNION
 SELECT res_ruimte_key, prs_perslid_key, -1
   FROM res_v_aanwezigruimte, prs_v_aanwezigperslid;

CREATE_VIEW(res_v_deelscope, 0)
    (res_deel_key,
     res_deel_alg_level,
     alg_regio_key,
     alg_district_key,
     alg_locatie_key,
     alg_gebouw_key,
     alg_verdieping_key,
     alg_ruimte_key
    )
AS
   SELECT res_deel_key, res_deel_alg_level, to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL)
     FROM res_deel rd, ins_deel id
    WHERE rd.res_ins_deel_key = id.ins_deel_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) IN ('R', 'T')
      AND rd.res_deel_alg_level = -1
   UNION ALL
   SELECT res_deel_key, res_deel_alg_level, alg_regio_key, to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL)
     FROM res_deel rd, ins_deel ID, alg_locatie l, alg_district d
    WHERE rd.res_ins_deel_key = ID.ins_deel_key
      AND l.alg_district_key = d.alg_district_key
      AND alg_locatie_key = ins_alg_locatie_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) IN ('R', 'T')
      AND rd.res_deel_alg_level = 0
   UNION ALL
   SELECT res_deel_key, res_deel_alg_level, to_number(NULL), alg_district_key, to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL)
     FROM res_deel rd, ins_deel ID, alg_locatie l
    WHERE rd.res_ins_deel_key = ID.ins_deel_key
      AND alg_locatie_key = ins_alg_locatie_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) IN ('R', 'T')
      AND rd.res_deel_alg_level = 1
   UNION ALL
   SELECT res_deel_key, res_deel_alg_level, to_number(NULL), to_number(NULL), ins_alg_locatie_key, to_number(NULL), to_number(NULL), to_number(NULL)
     FROM res_deel rd, ins_deel ID
    WHERE rd.res_ins_deel_key = ID.ins_deel_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) IN ('R', 'T')
      AND rd.res_deel_alg_level = 2
   UNION ALL
   SELECT res_deel_key, res_deel_alg_level, to_number(NULL), to_number(NULL), to_number(NULL), alg_gebouw_key, to_number(NULL), to_number(NULL)
     FROM res_deel rd, ins_deel ID, alg_ruimte r, alg_verdieping v
    WHERE rd.res_ins_deel_key = ID.ins_deel_key
      AND COALESCE(ID.ins_alg_ruimte_key_org, ID.ins_alg_ruimte_key) = r.alg_ruimte_key
      AND r.alg_verdieping_key = v.alg_verdieping_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) = 'R'
      AND rd.res_deel_alg_level = 3
   UNION ALL
   SELECT res_deel_key, res_deel_alg_level, to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL), alg_verdieping_key, to_number(NULL)
     FROM res_deel rd, ins_deel ID, alg_ruimte r
    WHERE rd.res_ins_deel_key = ID.ins_deel_key
      AND COALESCE(ID.ins_alg_ruimte_key_org, ID.ins_alg_ruimte_key) = r.alg_ruimte_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) = 'R'
      AND rd.res_deel_alg_level = 4
   UNION ALL
   SELECT res_deel_key, res_deel_alg_level, to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL), to_number(NULL), COALESCE(ins_alg_ruimte_key_org, ins_alg_ruimte_key)
     FROM res_deel rd, ins_deel id
    WHERE rd.res_ins_deel_key = id.ins_deel_key
      AND COALESCE(id.ins_alg_ruimte_type_org, ID.ins_alg_ruimte_type) = 'R'
      AND rd.res_deel_alg_level = 5;

// Oracle 11g kent pas een PIVOT dus nog even behelpen
CREATE OR REPLACE FORCE VIEW RES_V_RES_DAG_BEZETTING AS
select res_rsv_ruimte_van,
       res_rsv_ruimte_tot,
       res_ruimte_opstel_key,
       res_rsv_ruimte_dirtlevel,
       res_rsv_ruimte_verwijder,
       res_rsv_ruimte_key,
       res_status_fo_key,
       sum(decode(uurnum, 0,n_uur)) n0,
       sum(decode(uurnum, 1,n_uur)) n1,
       sum(decode(uurnum, 2,n_uur)) n2,
       sum(decode(uurnum, 3,n_uur)) n3,
       sum(decode(uurnum, 4,n_uur)) n4,
       sum(decode(uurnum, 5,n_uur)) n5,
       sum(decode(uurnum, 6,n_uur)) n6,
       sum(decode(uurnum, 7,n_uur)) n7,
       sum(decode(uurnum, 8,n_uur)) n8,
       sum(decode(uurnum, 9,n_uur)) n9,
       sum(decode(uurnum,10,n_uur)) n10,
       sum(decode(uurnum,11,n_uur)) n11,
       sum(decode(uurnum,12,n_uur)) n12,
       sum(decode(uurnum,13,n_uur)) n13,
       sum(decode(uurnum,14,n_uur)) n14,
       sum(decode(uurnum,15,n_uur)) n15,
       sum(decode(uurnum,16,n_uur)) n16,
       sum(decode(uurnum,17,n_uur)) n17,
       sum(decode(uurnum,18,n_uur)) n18,
       sum(decode(uurnum,19,n_uur)) n19,
       sum(decode(uurnum,20,n_uur)) n20,
       sum(decode(uurnum,21,n_uur)) n21,
       sum(decode(uurnum,22,n_uur)) n22,
       sum(decode(uurnum,23,n_uur)) n23
FROM (
SELECT res_rsv_ruimte_van,
       res_rsv_ruimte_tot,
       res_ruimte_opstel_key,
       res_rsv_ruimte_dirtlevel,
       res_rsv_ruimte_verwijder,
       res_rsv_ruimte_key,
       res_status_fo_key,
       uurnum,
       case when res.van <= uurnum + 0.00 AND res.tot >= uurnum + 0.25 then 1/4 else 0 end +
       case when res.van <= uurnum + 0.25 AND res.tot >= uurnum + 0.50 then 1/4 else 0 end +
       case when res.van <= uurnum + 0.50 AND res.tot >= uurnum + 0.75 then 1/4 else 0 end +
       case when res.van <= uurnum + 0.75 AND res.tot >= uurnum + 1.00 then 1/4 else 0 end n_uur
  FROM (SELECT (res_rsv_ruimte_van - TRUNC (res_rsv_ruimte_van)) * 24 van,
               (res_rsv_ruimte_tot - TRUNC (res_rsv_ruimte_tot)) * 24 tot,
               res_rsv_ruimte_van,
               res_rsv_ruimte_tot,
               res_ruimte_opstel_key,
               res_rsv_ruimte_dirtlevel,
               res_rsv_ruimte_verwijder,
               res_rsv_ruimte_key,
               res_status_fo_key
          FROM res_rsv_ruimte) res, (    SELECT LEVEL-1 uurnum
                                           FROM DUAL
                                     CONNECT BY LEVEL <= 24) uren)
GROUP BY res_rsv_ruimte_van,
         res_rsv_ruimte_tot,
         res_ruimte_opstel_key,
         res_rsv_ruimte_dirtlevel,
         res_rsv_ruimte_verwijder,
         res_rsv_ruimte_key,
         res_status_fo_key;

-- Algemeen bruikbare bronview voor infoborden
CREATE_VIEW (res_v_rap_infobord, 0)
(
   aktief,
   offset,
   dag,
   tijd_van,
   tijd_tot,
   ruimte,
   catalogus,
   aanvrager,
   gastheer,
   omschrijving,
   status,
   locatie_code,
   gebouw_code,
   verdieping_code,
   locatie_omschrijving,
   gebouw_omschrijving,
   verdieping_omschrijving,
   alg_locatie_key,
   alg_gebouw_key,
   alg_verdieping_key
)
AS
   SELECT (CASE WHEN res_rsv_ruimte_van > SYSDATE THEN 'expected'
                WHEN res_rsv_ruimte_tot < SYSDATE THEN 'passed'
                ELSE 'active'
           END) aktief,
            TRUNC ( (SYSDATE - res_rsv_ruimte_van) * 24 * 60) offset,
            TO_CHAR (res_rsv_ruimte_van, 'dd-mm-yyyy') dag,
            TO_CHAR (res_rsv_ruimte_van, 'hh24:mi') tijd_van,
            TO_CHAR (res_rsv_ruimte_tot, 'hh24:mi') tijd_tot,
            res_ruimte_nr ruimte,
            ins_discipline_omschrijving catalogus,
            aanvrager.prs_perslid_naam_full aanvrager,
            gastheer.prs_perslid_naam_full gastheer,
            res_rsv_ruimte_omschrijving omschrijving,
            sf.res_status_fo_omschrijving status,
            alg_locatie_code locatie_code,
            alg_gebouw_code gebouw_code,
            alg_verdieping_code verdieping_code,
            alg_locatie_omschrijving locatie_omschrijving,
            alg_gebouw_omschrijving gebouw_omschrijving,
            alg_verdieping_omschrijving verdieping_omschrijving,
            l.alg_locatie_key,
            g.alg_gebouw_key,
            v.alg_verdieping_key
     FROM   res_v_aanwezigrsv_ruimte rrr,
            res_ruimte_opstelling rro,
            prs_v_perslid_fullnames aanvrager,
            prs_v_perslid_fullnames gastheer,
            res_v_res_ruimte_gegevens rrg,
            alg_locatie l,
            alg_gebouw g,
            alg_verdieping v,
            res_status_fo sf,
            res_discipline rd
    WHERE       rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
            AND rro.res_ruimte_key = rrg.res_ruimte_key
            AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key
            AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key
            AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE)
            AND rrg.alg_locatie_key = l.alg_locatie_key
            AND rrg.alg_gebouw_key = g.alg_gebouw_key
            AND rrg.alg_verdieping_key = v.alg_verdieping_key
            AND rrr.res_status_fo_key = sf.res_status_fo_key
            AND rrg.res_discipline_key = rd.ins_discipline_key;

-- DE DEFAULTVIEW GEBRUIKT VOOR HET INFOBORD (FAC_USRRAP MET KEY 12)
CREATE_VIEW (res_v_rap_infobordframe, 0)
(
    tijd,
    kamer,
    omschrijving,
    voorzitter,
    hide_f_alg_locatie_key,
    hide_f_alg_gebouw_key,
    hide_f_alg_verdieping_key
)
AS
    SELECT tijd_van || '-' || tijd_tot,
           ruimte,
           omschrijving,
           gastheer,
           alg_locatie_key,
           alg_gebouw_key,
           alg_verdieping_key
      FROM res_v_rap_infobord
     WHERE (status = lcl.l('lcl_def') OR status = lcl.l('lcl_optie')) AND aktief <> 'passed' AND offset > -60;


/* ROOT VIEWS for User defined Reports (UDR) */
CREATE_VIEW(res_v_udr_reservering, 1)
(
   key,
   nummer,
   res_omschrijving,
   invoerdatum,
   datum,
   gastheer,
   contact,
   gastheer_email,
   contact_email,
   invoerder,
   kostensoortgroep,
   kostensoort,
   kpn,
   kpn_omschrijving,
   kpn_extern,
   fclt_3d_divisie_key,
   divisie_naam,
   divisie_omschrijving,
   fclt_3d_afdeling_key,
   afdeling_code,
   afdeling_omschrijving,
   regio_omschrijving,
   district_omschijving,
   fclt_3d_locatie_key,
   locatie,
   locatie_omschrijving,
   locatie_plaats,
   gebouw,
   gebouw_key,
   verdieping,
   ruimte,
   opstelling,
   capaciteit,
   no_show,
   actual_shown,
   mandaat,
   personeelsnr,
   fclt_3d_discipline_key,
   catalogus_key,
   catalogus,
   reserveerbare_ruimte,
   bezoekers,
   van,
   tot,
   localized_van,
   localized_tot,
   duur,
   status,
   bostatus,
   activiteit,
   srtactiviteit_key,
   activiteitsoort,
   opmerking,
   visibility,
   ruimte_prijs,
   ruimte_korting
)
AS
   SELECT rrr.res_rsv_ruimte_key,
          res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_omschrijving,
          rrr.res_rsv_ruimte_aanmaak,
          rrr.res_rsv_ruimte_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 ph.prs_perslid_email
             FROM prs_perslid ph
            WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT pc.prs_perslid_email
             FROM prs_perslid pc
            WHERE pc.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 =
                                   (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 =
                                (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,
          k.prs_kostenplaats_extern,
          an.prs_afdeling_key,
          an.prs_afdeling_naam,
          an.prs_afdeling_omschrijving,
          a.prs_afdeling_key,
          a.prs_afdeling_naam,
          a.prs_afdeling_omschrijving,
          rg.alg_regio_omschrijving,
          d.alg_district_omschrijving,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          l.alg_locatie_plaats,
          g.alg_gebouw_code,
          g.alg_gebouw_key,
          v.alg_verdieping_code,
          r2a.ruimte_nr,
          r2a.opstelling,
          r2a.capaciteit,
          rrr.res_rsv_ruimte_noshow,
          rrr.res_rsv_ruimte_bezoekers_shown,
          NVL ( (SELECT pr.fac_profiel_limiet
                   FROM fac_profiel pr
                  WHERE p.fac_profiel_key = pr.fac_profiel_key), 0),
          prs_perslid_nr,
          (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,
          (SELECT CAST (
                      FROM_TZ (CAST (rrr.res_rsv_ruimte_van AS TIMESTAMP),
                               fac.getsetting ('fac_server_timezone'))
                          AT TIME ZONE COALESCE (l.alg_locatie_timezone,
                                                 fac.getsetting ('fac_server_timezone'))
                          AS DATE)
             FROM DUAL),
          (SELECT CAST (
                      FROM_TZ (CAST (rrr.res_rsv_ruimte_tot AS TIMESTAMP),
                               fac.getsetting ('fac_server_timezone'))
                          AT TIME ZONE COALESCE (l.alg_locatie_timezone,
                                                 fac.getsetting ('fac_server_timezone'))
                          AS DATE)
             FROM DUAL),
          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),
          (SELECT res_status_bo_omschrijving
             FROM res_status_bo rs
            WHERE rs.res_status_bo_key = rrr.res_status_bo_key),
          ra.res_activiteit_omschrijving,
          rsa.res_srtactiviteit_key,
          rsa.res_srtactiviteit_omschrijving,
          rrr.res_rsv_ruimte_opmerking,
          rrr.res_rsv_ruimte_visibility,
          res.getruimteprijs(rrr.res_rsv_ruimte_key),
          rrr.res_rsv_ruimte_korting
     FROM res_v_aanwezigrsv_ruimte rrr,
          res_activiteit ra,
          res_srtactiviteit rsa,
          res_reservering res,
          prs_kostenplaats k,
          prs_perslid p,
          prs_afdeling a,
          prs_afdeling an,
          prs_v_afdeling_boom ab,
          (  SELECT res_rsv_ruimte_key,
                    MAX (o.res_opstelling_omschrijving) opstelling,
                    MAX (ro.res_ruimte_opstel_bezoekers) capaciteit,
                    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,
                  NULL capaciteit,
                  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,
          alg_ruimte       r,
          alg_verdieping   v,
          alg_gebouw       g,
          alg_locatie      l,
          alg_district     d,
          alg_regio        rg
    WHERE     rrr.res_reservering_key = res.res_reservering_key
          AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
          AND r2a.alg_ruimte_key   = r.alg_ruimte_key(+)
          AND r.alg_verdieping_key = v.alg_verdieping_key(+)
          AND v.alg_gebouw_key     = g.alg_gebouw_key(+)
          AND g.alg_locatie_key    = l.alg_locatie_key(+)
          AND l.alg_district_key   = d.alg_district_key(+)
          AND d.alg_regio_key      = rg.alg_regio_key(+)
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_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 ab.prs_afdeling_key1 = an.prs_afdeling_key
          AND ab.prs_afdeling_key = p.prs_afdeling_key
          AND rrr.res_rsv_ruimte_van >= TO_DATE ('01-01-2010', 'DD-MM-YYYY');

CREATE_VIEW(res_v_udr_reserveringincl, 1)
(
   key,
   nummer,
   res_omschrijving,
   invoerdatum,
   datum,
   gastheer,
   zichtbare_gastheer,
   contact,
   gastheer_email,
   contact_email,
   invoerder,
   kostensoortgroep,
   kostensoort,
   kpn,
   kpn_omschrijving,
   kpn_extern,
   fclt_3d_divisie_key,
   divisie_naam,
   divisie_omschrijving,
   fclt_3d_afdeling_key,
   afdeling_code,
   afdeling_omschrijving,
   regio_omschrijving,
   district_omschijving,
   fclt_3d_locatie_key,
   locatie,
   locatie_omschrijving,
   locatie_plaats,
   gebouw,
   verdieping,
   ruimte,
   opstelling,
   capaciteit,
   no_show,
   actual_shown,
   mandaat,
   personeelsnr,
   fclt_3d_discipline_key,
   catalogus_key,
   catalogus,
   reserveerbare_ruimte,
   bezoekers,
   van,
   tot,
   localized_van,
   localized_tot,
   duur,
   status,
   bostatus,
   activiteit,
   srtactiviteit_key,
   activiteitsoort,
   opmerking,
   visibility,
   bezorgmode,
   voorziening_discipline_key,
   voorziening_type,
   voorziening_catalogus,
   leverancier,
   voorziening_product_key,
   voorziening_product,
   voorziening_totaalprijs,
   voorziening_van,
   voorziening_tot,
   voorziening_aantal,
   voorziening_prijs
)
AS
   SELECT rrr.res_rsv_ruimte_key,
          res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
          rrr.res_rsv_ruimte_omschrijving,
          COALESCE (rrr.res_rsv_ruimte_aanmaak, voorz.van),
          rrr.res_rsv_ruimte_van,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          DECODE (p.prs_perslid_visibility,
                   1, (SELECT prs_perslid_naam_friendly
                         FROM prs_v_perslid_fullnames_all pf
                        WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
                   a.prs_afdeling_omschrijving) zichtbare_gastheer,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all pf
            WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
          (SELECT ph.prs_perslid_email
             FROM prs_perslid ph
            WHERE ph.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
          (SELECT pc.prs_perslid_email
             FROM prs_perslid pc
            WHERE pc.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,
          k.prs_kostenplaats_extern,
          an.prs_afdeling_key,
          an.prs_afdeling_naam,
          an.prs_afdeling_omschrijving,
          a.prs_afdeling_key,
          a.prs_afdeling_naam,
          a.prs_afdeling_omschrijving,
          rg.alg_regio_omschrijving,
          d.alg_district_omschrijving,
          l.alg_locatie_key,
          l.alg_locatie_code,
          l.alg_locatie_omschrijving,
          l.alg_locatie_plaats,
          g.alg_gebouw_code,
          v.alg_verdieping_code,
          r2a.ruimte_nr,
          r2a.opstelling,
          r2a.capaciteit,
          rrr.res_rsv_ruimte_noshow,
          rrr.res_rsv_ruimte_bezoekers_shown,
          NVL ( (SELECT pr.fac_profiel_limiet
                   FROM fac_profiel pr
                  WHERE p.fac_profiel_key = pr.fac_profiel_key), 0),
          prs_perslid_nr,
          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,
          (SELECT CAST (
                      FROM_TZ (CAST (rrr.res_rsv_ruimte_van AS TIMESTAMP),
                               fac.getsetting ('fac_server_timezone'))
                          AT TIME ZONE COALESCE (l.alg_locatie_timezone,
                                                 fac.getsetting ('fac_server_timezone'))
                          AS DATE)
             FROM DUAL),
          (SELECT CAST (
                      FROM_TZ (CAST (rrr.res_rsv_ruimte_tot AS TIMESTAMP),
                               fac.getsetting ('fac_server_timezone'))
                          AT TIME ZONE COALESCE (l.alg_locatie_timezone,
                                                 fac.getsetting ('fac_server_timezone'))
                          AS DATE)
             FROM DUAL),
          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),
          (SELECT res_status_bo_omschrijving
             FROM res_status_bo rs
            WHERE rs.res_status_bo_key = rrr.res_status_bo_key),
          ra.res_activiteit_omschrijving,
          rsa.res_srtactiviteit_key,
          rsa.res_srtactiviteit_omschrijving,
          rrr.res_rsv_ruimte_opmerking,
          rrr.res_rsv_ruimte_visibility,
          DECODE(rrr.res_rsv_ruimte_cvab_mode, 0, lcl.l('lcl_res_afhalen'), 1, lcl.l('lcl_res_bezorgen'), ''),
          voorz.ins_discipline_key,
          voorz.vtype,
          voorz.catalogus,
          (SELECT prs_bedrijf_naam
             FROM res_disc_params rdp, prs_bedrijf b
            WHERE     rdp.prs_bedrijf_key = b.prs_bedrijf_key
                  AND rdp.res_ins_discipline_key = voorz.ins_discipline_key),
          voorz.product_key,
          voorz.product,
          voorz.totaalprijs,
          TO_CHAR (voorz.van, 'hh24:mi'),
          TO_CHAR (voorz.tot, 'hh24:mi'),
          voorz.aantal,
          voorz.prijs
     FROM res_v_aanwezigrsv_ruimte rrr,
          res_activiteit ra,
          res_srtactiviteit rsa,
          res_reservering res,
          prs_kostenplaats k,
          prs_perslid p,
          prs_afdeling a,
          prs_afdeling an,
          prs_v_afdeling_boom ab,
          (  SELECT res_rsv_ruimte_key,
                    MAX (o.res_opstelling_omschrijving) opstelling,
                    MAX (ro.res_ruimte_opstel_bezoekers) capaciteit,
                    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,
                  NULL capaciteit,
                  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,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  'object' vtype
             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,
                  c.ins_discipline_key ins_discipline_key,
                  c.ins_discipline_omschrijving catalogus,
                  'consumable' vtype
             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,
          alg_ruimte     r,
          alg_verdieping v,
          alg_gebouw     g,
          alg_locatie    l,
          alg_district   d,
          alg_regio      rg
    WHERE     rrr.res_reservering_key = res.res_reservering_key
          AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
          AND r2a.alg_ruimte_key = r.alg_ruimte_key(+)
          AND r.alg_verdieping_key = v.alg_verdieping_key(+)
          AND v.alg_gebouw_key = g.alg_gebouw_key(+)
          AND g.alg_locatie_key = l.alg_locatie_key(+)
          AND l.alg_district_key = d.alg_district_key(+)
          AND d.alg_regio_key = rg.alg_regio_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 p.prs_afdeling_key = ab.prs_afdeling_key
          AND ab.prs_afdeling_key1 = an.prs_afdeling_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-2010', 'DD-MM-YYYY');

-- Om een goede bezettingsgraad te kunnen leveren zijn onderstaande views gegenereerd
-- Deze houdt rekening met werkplekreserveringen in een ruimte, en telt dan het aantal bezettingen
-- Alles op basis van reserveringen. BIj INS gebeurt iets vergelijkbaars obv sensorinfo.
-- De performance is een risico omdat er per ruimte/werkplek (max, als 24x7) 13.000 halfuurbuckets
-- worden bepaald. We moeten dus nog gaan zien of we deze standaard gaan tonen, wellicht na een vinkje.
-- Maar dan zijn ze als voorbeeld (en toets/beloning op inrichting cf. richtlijnen) beschikbaar.
/*
-- Desk-reserveringen (werkplekken) via 30-minuut-buckets:
-- 1) res_v_desk_reservation_buckets:
--    Genereer alle 30-min-buckets voor sysdate-90 tot sysdate binnen kantoortijden
--    (ma-vr, geen feestdagen). Breek alle werkplekreserveringen op in deze buckets.
--    OUTPUT: alg_ruimte_key, bucket_start, reserved_count (aantal werkplekken gereserveerd).
--
-- 2) res_v_desk_reservation_stats:
--    Toon per bucket en ruimte het aantal werkplekreserveringen.
--
-- 3) res_v_desk_reservation_kpis:
--    KPI’s per ruimte:
--      total_reserved_hours_desk  = som(reserved_count × 0.5u)
--      avg_reserved_count         = gem. aantal gelijktijdige desk-reserveringen
--      peak_reserved_count        = max gelijktijdige desk-reserveringen
*/

CREATE_VIEW(res_v_desk_reservation_buckets, 0)
AS
    WITH
        intervals
        AS
            (    SELECT TRUNC (SYSDATE - 90) + NUMTODSINTERVAL ((ROWNUM - 1) * 30, 'MINUTE') AS bucket_start
                   FROM DUAL
             CONNECT BY ROWNUM <= ((SYSDATE - (SYSDATE - 90)) * 24 * 60 / 30)),
        valid_buckets
        AS
            (SELECT bucket_start
               FROM intervals
              WHERE     (TO_NUMBER (TO_CHAR (bucket_start, 'HH24')) + TO_NUMBER (TO_CHAR (bucket_start, 'MI')) / 60) BETWEEN fac.getsetting ('fac_t_startofworkday')
                                                                                                                         AND fac.getsetting ('fac_t_endofworkday')
                    AND TO_CHAR (bucket_start, 'DY', 'NLS_DATE_LANGUAGE=ENGLISH') NOT IN ('SAT', 'SUN')
                    AND TRUNC (bucket_start) NOT IN (SELECT mld_vrije_dagen_datum FROM mld_vrije_dagen)),
        desk_res
        AS
            (SELECT r.alg_ruimte_key AS alg_ruimte_key, rd.res_rsv_deel_van AS start_dt, rd.res_rsv_deel_tot AS end_dt
               FROM res_rsv_ruimte  r
                    JOIN res_rsv_deel rd ON rd.res_rsv_ruimte_key = r.res_rsv_ruimte_key
                    JOIN res_deel d ON d.res_deel_key = rd.res_deel_key
                    JOIN res_discipline dis ON dis.ins_discipline_key = d.res_discipline_key
              WHERE     r.res_rsv_ruimte_dirtlevel = 0
                    AND r.res_status_fo_key IN (1, 2)
                    AND r.res_ruimte_opstel_key IS NULL
                    AND r.res_rsv_ruimte_verwijder IS NULL
                    AND dis.ins_discipline_min_level = 5
                    AND rd.res_rsv_deel_van < SYSDATE
                    AND rd.res_rsv_deel_tot > SYSDATE - 90),
        bucket_assign
        AS
            (SELECT vb.bucket_start, dr.alg_ruimte_key
               FROM valid_buckets vb JOIN desk_res dr ON dr.start_dt < vb.bucket_start + INTERVAL '30' MINUTE AND dr.end_dt > vb.bucket_start)
      SELECT alg_ruimte_key, bucket_start, COUNT (*) AS reserved_count
        FROM bucket_assign
    GROUP BY alg_ruimte_key, bucket_start;

CREATE_VIEW(res_v_desk_reservation_stats, 0)
AS
    SELECT rdb.alg_ruimte_key, rdb.bucket_start, rdb.reserved_count
      FROM res_v_desk_reservation_buckets rdb;

CREATE_VIEW(res_v_desk_reservation_kpis, 0)
AS
      SELECT alg_ruimte_key
           , SUM (reserved_count * 0.5)    AS total_reserved_hours_desk
           , ROUND (AVG (reserved_count), 1) AS avg_reserved_count_desk
           , MAX (reserved_count)          AS peak_reserved_count_desk
        FROM res_v_desk_reservation_stats
    GROUP BY alg_ruimte_key;

/*
-- Kamerreserveringen (ruimtes) via eenvoudige KPI-berekening:
-- 4) res_v_room_simple_kpis:
--    Direct berekening per ruimte:<br>--      total_reserved_hours_room = som uren binnen kantoortijden</br>
--      avg_reservation_duration_hours (uren, 1 decimaal)
--      max_reservation_duration_hours
--    Hierbij worden reserveringstijden per record afgeknipt met GREATEST/LEAST
*/

CREATE_VIEW(res_v_room_simple_kpis, 0)
AS
      SELECT rar.alg_ruimte_key
                 AS alg_ruimte_key
           ,   SUM (
                     LEAST (r.res_rsv_ruimte_tot, TRUNC (r.res_rsv_ruimte_van) + NUMTODSINTERVAL (fac.getsetting ('fac_t_endofworkday'), 'HOUR'))
                   - GREATEST (r.res_rsv_ruimte_van, TRUNC (r.res_rsv_ruimte_van) + NUMTODSINTERVAL (fac.getsetting ('fac_t_startofworkday'), 'HOUR')))
             * 24
                 AS total_reserved_hours_room
           ,                                                                                                                     -- gemiddelde reserveringsduur in uren (1 decimaal)
             ROUND (
                 AVG (
                       (  LEAST (r.res_rsv_ruimte_tot, TRUNC (r.res_rsv_ruimte_van) + NUMTODSINTERVAL (fac.getsetting ('fac_t_endofworkday'), 'HOUR'))
                        - GREATEST (r.res_rsv_ruimte_van, TRUNC (r.res_rsv_ruimte_van) + NUMTODSINTERVAL (fac.getsetting ('fac_t_startofworkday'), 'HOUR')))
                     * 24)
               , 1)
                 AS avg_reservation_duration_hours
           ,                                                                                                                           -- gemiddelde aantal personen per reservering
             ROUND (AVG (COALESCE (r.res_rsv_ruimte_bezoekers_shown, r.res_rsv_ruimte_bezoekers)), 1)
                 AS avg_persons_per_reservation
        FROM res_rsv_ruimte r
             JOIN res_ruimte_opstelling ro ON ro.res_ruimte_opstel_key = r.res_ruimte_opstel_key
             JOIN res_ruimte ru ON ru.res_ruimte_key = ro.res_ruimte_key
             JOIN res_alg_ruimte rar ON rar.res_ruimte_key = ru.res_ruimte_key
       WHERE     r.res_rsv_ruimte_dirtlevel = 0
             AND r.res_status_fo_key IN (1, 2)
             AND r.res_rsv_ruimte_verwijder IS NULL
             AND r.res_rsv_ruimte_van < SYSDATE
             AND r.res_rsv_ruimte_tot > SYSDATE - 90
    GROUP BY rar.alg_ruimte_key;


REGISTERRUN('$Id$')
#endif  // RES
