#ifdef PRJ
/*  PRJ_VIE.SRC
 *
 * $Revision$
 * $Id$
 */

-- selecteer alle verdiepingen van een bepaald project
CREATE_VIEW(prj_v_alg_verdiepingen,0)
AS
SELECT DISTINCT alg_verdieping_key, prj_scenario_key
       FROM prj_ruimte
       WHERE alg_verdieping_key IS NOT NULL;

--  aanduiding ruimten van ALG
CREATE_VIEW(prj_v_alg_ruimte_aanduiding,0)
AS SELECT  ALG_R.alg_ruimte_key
   ,       to_number(NULL)                     prj_scenario_key
   ,       ALG_G.alg_gebouw_code                ||' - '
        || ALG_V.alg_verdieping_code 		||' - '
        || ALG_R.alg_ruimte_nr                 plaatsaanduiding
   FROM    alg_ruimte               ALG_R
   ,       alg_verdieping           ALG_V
   ,       alg_gebouw               ALG_G
   WHERE   ALG_R.alg_verdieping_key  = ALG_V.alg_verdieping_key
   AND     ALG_V.alg_gebouw_key      = ALG_G.alg_gebouw_key;


-- wat suggesties:(gebruiken we ..1 en..2 of alg vs prj?)

CREATE_VIEW(prj_v_ruimte_voor_en_na, 0) (alg_verdieping_key,
                                                alg_ruimte_key1,
                                                alg_ruimte_nr1,
                                                alg_srtruimte_key1,
                                                alg_srtruimte_omschrijving1,
                                                alg_ruimte_bruto_vloeropp1,
                                                alg_ruimte_nr2,
                                                alg_srtruimte_key2,
                                                alg_srtruimte_omschrijving2,
                                                alg_ruimte_bruto_vloeropp2
                                               )
AS
   SELECT rx.alg_verdieping_key, rx.alg_ruimte_key, r.alg_ruimte_nr, r.alg_srtruimte_key,
          sr1.alg_srtruimte_omschrijving, r.alg_ruimte_bruto_vloeropp, rx.prj_ruimte_nr, rx.alg_srtruimte_key,
          sr2.alg_srtruimte_omschrijving, rx.prj_ruimte_bruto_vloeropp
     FROM prj_ruimte rx, alg_ruimte r, alg_srtruimte sr1, alg_srtruimte sr2
    WHERE rx.alg_ruimte_key = r.alg_ruimte_key(+) AND r.alg_srtruimte_key = sr1.alg_srtruimte_key(+)
          AND rx.alg_srtruimte_key = sr2.alg_srtruimte_key;


-- GRAFISCHE VIEWS

CREATE_VIEW (cad_v_sync_prj_ruimte,0)
(prj_scenario_key, prj_ruimte_key, alg_verdieping_key, cadlabel)
AS
   SELECT r.prj_scenario_key, r.prj_ruimte_key, r.alg_verdieping_key, r.prj_ruimte_nr
     FROM prj_ruimte r;

-- GRAFISCHE THEMAS
-- GRAFISCHE THEMAS
-- GRAFISCHE THEMAS
-- GRAFISCHE THEMAS
CREATE_VIEW (prj_v_cad_thema_aantalwp,0) (prj_ruimte_key, waarde)
AS
   SELECT   wp.prj_ruimte_key, COUNT (*)
       FROM prj_werkplek wp
      WHERE wp.prj_werkplek_verwijder IS NULL
   GROUP BY prj_ruimte_key;

CREATE_VIEW (prj_v_cad_thema_afdeling,0) (prj_ruimte_key, waarde, waarde_key)
AS
   SELECT x.prj_ruimte_key,
          DECODE (x.aantal,
             1, SUBSTR (x.sp, 1, 60),
             'Meerdere!'),
          DECODE (x.aantal, 1, x.sp_key, NULL)
   FROM (SELECT ra.prj_ruimte_key,
                MIN (d.prs_afdeling_naam) sp,
                MIN (d.prs_afdeling_key) sp_key,
                COUNT (ra.prs_afdeling_key) aantal
         FROM prj_ruimteafdeling ra, prs_v_aanwezigafdeling d
         WHERE ra.prj_ruimteafdeling_verwijder IS NULL
               AND ra.prs_afdeling_key = d.prs_afdeling_key
         GROUP BY ra.prj_ruimte_key) x;

-- Update is: oude situatie weg, nieuwe wordt gedefinieerd.
-- Insert is: toevoegen aan oude situatie
CREATE_TRIGGER(prj_t_cad_thema_afdeling_i_iu)
   INSTEAD OF INSERT OR UPDATE
   ON prj_v_cad_thema_afdeling
BEGIN
   IF UPDATING  -- oude weggooien
   THEN
      DELETE FROM   prj_ruimteafdeling
            WHERE   prj_ruimte_key = :new.prj_ruimte_key
                AND prs_afdeling_key <> :new.waarde_key;
   END IF;
   BEGIN
      INSERT INTO prj_ruimteafdeling (prj_ruimte_key, prs_afdeling_key)
        VALUES   (:new.prj_ruimte_key, :new.waarde_key);
   EXCEPTION
      WHEN DUP_VAL_ON_INDEX -- Hij was al aanwezig
      THEN
         NULL;
   END;
END;
/

// De afdelingsbezetting maar dan gebaseerd op de afdelingen
// van de de personen die op de werkplekken zitten
CREATE_VIEW (prj_v_cad_thema_prsafdeling,0) (prj_ruimte_key, waarde)
AS
   SELECT wx.prj_ruimte_key, d.prs_afdeling_naam
     FROM prs_afdeling d, prj_perslidwerkplek pwx, prj_werkplek wx, prs_perslid p
    WHERE pwx.prj_werkplek_key = wx.prj_werkplek_key
      AND pwx.prs_perslid_key = p.prs_perslid_key
      AND p.prs_afdeling_key=d.prs_afdeling_key
      AND pwx.prj_perslidwerkplek_verwijder IS NULL
      AND wx.prj_werkplek_verwijder IS NULL
      AND pwx.prs_perslid_key IS NOT NULL;

CREATE_VIEW (prj_v_cad_thema_srtruimte,0) (prj_ruimte_key, waarde, waarde_key)
AS
   SELECT r.prj_ruimte_key, sr.alg_srtruimte_omschrijving, sr.alg_srtruimte_key
     FROM prj_ruimte r, alg_srtruimte sr
    WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key;

CREATE_TRIGGER(prj_t_cad_thema_srtruimte_i_iu)
INSTEAD OF INSERT OR UPDATE ON prj_v_cad_thema_srtruimte
FOR EACH ROW
BEGIN
   UPDATE prj_ruimte
   SET alg_srtruimte_key = :new.waarde_key
   WHERE prj_ruimte_key = :new.prj_ruimte_key;
END;
/


// De gemiddelde oppervlakte per werkplek (GEEN rekening houdend met vaste werkplekoppervlaktes)
CREATE_VIEW (prj_v_cad_thema_wpopp,0) (prj_ruimte_key, waarde)
AS
   SELECT wp.prj_ruimte_key, r.prj_ruimte_bruto_vloeropp / COUNT (prj_werkplek_key)
     FROM prj_werkplek wp, prj_ruimte r
    WHERE wp.prj_werkplek_verwijder IS NULL AND wp.prj_ruimte_key = r.prj_ruimte_key
 GROUP BY wp.prj_ruimte_key, r.prj_ruimte_bruto_vloeropp;

// De hoeveelheid beschikbare oppervlakte (indien de werkplekken een vaste oppervlakte hebben, anders past het altijd)
CREATE_VIEW (prj_v_cad_thema_restopp,0) (prj_ruimte_key, waarde)
AS
   SELECT   wp.prj_ruimte_key, SUM (r.prj_ruimte_bruto_vloeropp - NVL (prj_werkplek_opp, 0))
       FROM prj_werkplek wp, prj_ruimte r
      WHERE wp.prj_werkplek_verwijder IS NULL
        AND wp.prj_ruimte_key = r.prj_ruimte_key
        AND wp.prj_werkplek_vastopp IS NOT NULL
   GROUP BY wp.prj_ruimte_key;

// Hulpview voor de daaropvolgende
CREATE_VIEW (prj_v_cad_thema_onderhanden0, 0) (prj_ruimte_key1, prj_ruimte_key2)
AS
   SELECT prj_rkey1, prj_rkey2
     FROM (SELECT algprs.prs_werkplek_key oud_wpkey, prj_w.prs_werkplek_key new_wpkey, algprs.alg_ruimte_key oud_rkey,
                  prj_r.alg_ruimte_key new_rkey, prj_zoek.prj_ruimte_key prj_rkey1, prj_r.prj_ruimte_key prj_rkey2
             FROM prj_ruimte prj_r,
                  prj_werkplek prj_w,
                  prj_perslidwerkplek prj_wp,
                  prj_ruimte prj_zoek,
                  (SELECT prs_w.prs_werkplek_key, prs_w.prs_werkplek_volgnr, prs_pw.prs_perslidwerkplek_key,
                          prs_w.prs_alg_ruimte_key alg_ruimte_key, prs_p.prs_afdeling_key, prs_pw.prs_perslid_key
                     FROM prs_werkplek prs_w, prs_perslidwerkplek prs_pw, prs_perslid prs_p
                    WHERE prs_w.prs_werkplek_key = prs_pw.prs_werkplek_key
                      AND prs_pw.prs_perslid_key IS NOT NULL
                      AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
                      AND prs_w.prs_werkplek_virtueel = 0
                   UNION ALL
                   SELECT prs_w.prs_werkplek_key, prs_w.prs_werkplek_volgnr, TO_NUMBER (NULL), prs_w.prs_alg_ruimte_key,
                          TO_NUMBER (NULL), TO_NUMBER (NULL)
                     FROM prs_werkplek prs_w, prs_v_werkplek_bezetting prs_wb
                    WHERE prs_w.prs_werkplek_key = prs_wb.prs_werkplek_key
                      AND prs_w.prs_werkplek_virtueel = 0
                      AND prs_wb.prs_werkplek_bezetting < 100) algprs
            WHERE prj_wp.prs_perslidwerkplek_key = algprs.prs_perslidwerkplek_key
              AND prj_wp.prj_werkplek_key = prj_w.prj_werkplek_key
              AND prj_w.prj_ruimte_key = prj_r.prj_ruimte_key
              AND algprs.alg_ruimte_key = prj_zoek.alg_ruimte_key)
    WHERE oud_wpkey <> new_wpkey OR oud_rkey <> new_rkey;

// Boolean view die aangeeft waar iets gewijzigd is, de 1 en 2 maken het verschil tussen van en naar..
CREATE_VIEW (prj_v_cad_thema_onderhanden,0) (prj_ruimte_key, waarde)
AS
   SELECT prj_ruimte_key1, '1'
     FROM prj_v_cad_thema_onderhanden0
   UNION ALL
   SELECT prj_ruimte_key2, '2'
     FROM prj_v_cad_thema_onderhanden0;

-- GRAFISCHE LABELS
-- GRAFISCHE LABELS
-- GRAFISCHE LABELS
-- GRAFISCHE LABELS
-- GRAFISCHE LABELS

CREATE_VIEW (prj_v_cad_label_bewoner,0) (prj_ruimte_key, waarde, highlight)
AS
   SELECT DISTINCT prj_ruimte_key, waarde,
                   DECODE (prj_selectie_key, NULL, 0, 1) highlight
              FROM (SELECT prj_r.prj_scenario_key, prs_w.prj_ruimte_key,
                              prs_p.prs_perslid_naam
                           || DECODE (prs_p.prs_perslid_voorletters,
                                      NULL, '',
                                      ', ' || prs_p.prs_perslid_voorletters
                                     )
                           || DECODE (prs_p.prs_perslid_voornaam,
                                      NULL, '',
                                      ' (' || prs_p.prs_perslid_voornaam
                                      || ')'
                                     ) waarde,
                           'PRJ_WERKPLEK' label_soort, prs_pw.prj_werkplek_key label_key
                      FROM PRJ_RUIMTE prj_r,
                           PRJ_WERKPLEK prs_w,
                           PRJ_PERSLIDWERKPLEK prs_pw,
                           PRS_PERSLID prs_p
                     WHERE prs_w.prj_werkplek_key = prs_pw.prj_werkplek_key
                       AND prs_pw.prs_perslid_key IS NOT NULL
                       AND prs_w.prj_werkplek_verwijder IS NULL
                       AND prs_pw.prj_perslidwerkplek_verwijder IS NULL
                       AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
                       AND prs_w.prj_ruimte_key = prj_r.prj_ruimte_key) vdata,
                   PRJ_SELECTIE ps
             WHERE ps.prj_scenario_key(+) = vdata.prj_scenario_key
               AND ps.prj_selectie_tabelnaam(+) = label_soort
               AND ps.prj_selectie_tabelkey(+) = label_key;

// Note: the subselect in the FROM is *necessary* to force these record to be retrieved by outer join
// else deleted prj_perslidwerkplek records are retrieved by inner join, and do not show up if
// the _verwijder IS NULL is then applied.
CREATE_VIEW (prj_v_cad_label_bewonerwp, 0) (prj_ruimte_key, waarde, highlight)
AS
   SELECT DISTINCT prj_ruimte_key, waarde,
                   DECODE (prj_selectie_key, NULL, 0, 1)
              FROM (SELECT prj_r.prj_scenario_key, prs_w.prj_ruimte_key,
                              CHR (1)
                           || prs_w.prj_werkplek_volgnr
                           || ' '
                           || prs_p.prs_perslid_naam
                           || DECODE (prs_p.prs_perslid_voorletters,
                                      NULL, '',
                                      ', ' || prs_p.prs_perslid_voorletters
                                     )
                           || DECODE (prs_p.prs_perslid_voornaam,
                                      NULL, '',
                                      ' (' || prs_p.prs_perslid_voornaam
                                      || ')'
                                     )
                           || ': '
                           || TO_CHAR
                                   (NVL (prs_pw.prj_perslidwerkplek_bezetting,
                                         0
                                        )
                                   )
                           || '%' waarde,
                           'PRJ_WERKPLEK' label_soort, prs_pw.prj_werkplek_key label_key
                      FROM PRJ_RUIMTE prj_r,
                           PRJ_WERKPLEK prs_w,
                           (SELECT *
                              FROM PRJ_PERSLIDWERKPLEK
                             WHERE prj_perslidwerkplek_verwijder IS NULL) prs_pw,
                           PRS_PERSLID prs_p
                     WHERE prs_w.prj_werkplek_key = prs_pw.prj_werkplek_key
                       AND prs_pw.prs_perslid_key IS NOT NULL
                       AND prs_pw.prs_perslid_key = prs_p.prs_perslid_key
                       AND prs_w.prj_ruimte_key = prj_r.prj_ruimte_key
                    UNION
                    SELECT   -1, prs_w.prj_ruimte_key,
                                CHR (1)
                             || prs_w.prj_werkplek_volgnr
                             || ' Vrij: '
                             || TO_CHAR
                                   (  100
                                    - NVL
                                         (SUM
                                             (prs_wb.prj_perslidwerkplek_bezetting
                                             ),
                                          0
                                         )
                                   )
                             || '%',
                             'PRJ_WERKPLEK', prs_w.prj_werkplek_key
                        FROM PRJ_WERKPLEK prs_w,
                             (SELECT *
                                FROM PRJ_PERSLIDWERKPLEK
                               WHERE prj_perslidwerkplek_verwijder IS NULL) prs_wb
                       WHERE prs_w.prj_werkplek_key = prs_wb.prj_werkplek_key(+)
                         AND prj_werkplek_verwijder IS NULL
                    GROUP BY prs_w.prj_ruimte_key,
                             prs_w.prj_werkplek_key,
                             prs_w.prj_werkplek_volgnr
                      HAVING SUM (NVL (prs_wb.prj_perslidwerkplek_bezetting,
                                       0)
                                 ) < 100) DATA,
                   PRJ_SELECTIE ps
             WHERE ps.prj_scenario_key(+) = DATA.prj_scenario_key
               AND ps.prj_selectie_tabelnaam(+) = label_soort
               AND ps.prj_selectie_tabelkey(+) = label_key;

CREATE_VIEW(prj_v_werkplek_oppervlakte, 0) (prj_werkplek_key, wpopp)
AS
  SELECT prj_werkplek_key,
       DECODE (prj_werkplek_vastopp,1,
               prj_werkplek_opp, (prj_ruimte_bruto_vloeropp - totvastopp)
                / vrijwp
              ) wpopp
  FROM (SELECT   prj_ruimte_key, COUNT (*),
                 COUNT (*) - COUNT (prj_werkplek_vastopp) vrijwp,
                 COUNT (prj_werkplek_vastopp) vastwp,
                 SUM (DECODE (prj_werkplek_vastopp,1,
                              prj_werkplek_opp, 0
                             )
                     ) totvastopp
            FROM prj_werkplek
           WHERE prj_werkplek_verwijder is null
        GROUP BY prj_ruimte_key) selopp,
       prj_ruimte prj_r,
       prj_werkplek prj_w
 WHERE prj_r.prj_ruimte_key = prj_w.prj_ruimte_key
   AND selopp.prj_ruimte_key = prj_r.prj_ruimte_key
   AND prj_werkplek_verwijder is null
ORDER BY prj_werkplek_key;

CREATE_VIEW (prj_v_cad_label_werkplekken,0) (prj_ruimte_key, waarde, highlight)
AS
   SELECT prj_ruimte_key,
             CHR (1)
          || prj_werkplek_volgnr
          || ' ('
          || TO_CHAR (wpopp, 'FM9999.0')
          || 'm2 '
          || TO_CHAR (bez)
          || '%)' waarde,
          DECODE (SIGN (bez - 100),
                  1, 2,
                  DECODE (prj_selectie_key, NULL, 0, 1)
                 ) highlight
     FROM (SELECT   prj_scenario_key, prs_w.prj_ruimte_key,
                    prs_w.prj_werkplek_volgnr,
                    SUM (NVL (prs_pw.prj_perslidwerkplek_bezetting, 0)) bez,
                    'PRJ_WERKPLEK' label_soort,
                    prs_w.prj_werkplek_key label_key, wpopp
               FROM PRJ_RUIMTE prj_r,
                    PRJ_WERKPLEK prs_w,
                    prj_v_werkplek_oppervlakte pwo,
                    (SELECT *
                       FROM PRJ_PERSLIDWERKPLEK
                      WHERE prj_perslidwerkplek_verwijder IS NULL) prs_pw
              WHERE prs_w.prj_werkplek_key = prs_pw.prj_werkplek_key(+)
                AND pwo.prj_werkplek_key(+) = prs_w.prj_werkplek_key
                AND prs_w.prj_ruimte_key = prj_r.prj_ruimte_key
                AND prs_w.prj_werkplek_verwijder IS NULL
           GROUP BY prj_scenario_key,
                    prs_w.prj_ruimte_key,
                    prs_w.prj_werkplek_volgnr,
                    'PRJ_WERKPLEK',
                    prs_w.prj_werkplek_key,
                    wpopp) vdata,
          PRJ_SELECTIE ps
    WHERE ps.prj_scenario_key(+) = vdata.prj_scenario_key
          AND ps.prj_selectie_tabelnaam(+) = label_soort AND ps.prj_selectie_tabelkey(+) =
                                                                     label_key;

CREATE_VIEW(prj_v_cad_v_label_srtruimteopp, 0)
     (prj_ruimte_key, waarde)
AS
   SELECT r.prj_ruimte_key,
             sr.alg_srtruimte_omschrijving
          || ' ('
          || r.prj_ruimte_bruto_vloeropp
          || ' m2)'
     FROM PRJ_RUIMTE r, ALG_SRTRUIMTE sr
    WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key
      AND prj_ruimte_verwijder IS NULL;
/

//De objecten in een ruimte (de soort-keys kunnen worden gebruikt om onroerende objecten uit te sluiten)
CREATE_VIEW (prj_v_cad_label_object,0) (prj_ruimte_key,
                                               waarde,
                                               label_soort,
                                               label_key,
                                               fclt_ins_discipline_key,
                                               ins_srtgroep_key,
                                               ins_srtdeel_key
                                              )
AS
   SELECT prj_ruimte_key, s.ins_srtdeel_omschrijving || ' ' || prj_deel_omschrijving, 'PRJ_DEEL', prj_deel_key,
          ins_discipline_key, g.ins_srtgroep_key, d.ins_srtdeel_key
     FROM prj_deel d, ins_srtdeel s, ins_srtgroep g
    WHERE d.ins_srtdeel_key = s.ins_srtdeel_key
    AND d.prj_deel_verwijder IS NULL
    AND g.ins_srtgroep_key = s.ins_srtgroep_key;


//----------------
// Personen met van en naar
CREATE_VIEW (prj_v_prs_verhuizing, 0)
   (prj_scenario_key,
    prs_perslid_key,
    prs_afdeling_key,
    alg_ruimte_key,
    prs_werkplek_key,
    alg_ruimte_key2,
    prj_ruimte_key2,
    prs_werkplek_key2,
    prj_werkplek_key2
   )
AS
   SELECT rx.prj_scenario_key, p.prs_perslid_key, d.prs_afdeling_key, w.prs_alg_ruimte_key, w.prs_werkplek_key,
          rx.alg_ruimte_key, rx.prj_ruimte_key, wx.prs_werkplek_key, wx.prj_werkplek_key
     FROM prs_v_aanwezigperslid p,
          prs_v_afdeling d,
          prs_werkplek w,
          prs_perslidwerkplek pwp,
          prj_werkplek wx,
          prj_perslidwerkplek pwpx,
          prj_ruimte rx
    WHERE d.prs_afdeling_key = p.prs_afdeling_key
      AND pwp.prs_perslid_key = p.prs_perslid_key
      AND w.prs_werkplek_key = pwp.prs_werkplek_key
      AND pwpx.prs_perslid_key(+) = p.prs_perslid_key
      AND wx.prj_werkplek_key(+) = pwpx.prj_werkplek_key
      AND rx.prj_ruimte_key(+) = wx.prj_ruimte_key
      AND pwp.prs_perslid_key IS NOT NULL;

// afdelingen met van en naar
CREATE_VIEW (prj_v_afd_verhuizing, 0)
    (prj_scenario_key,
     prs_afdeling_key,
     alg_ruimte_key,
     alg_ruimte_key2,
     prj_ruimte_key2
    )
AS
   SELECT rx.prj_scenario_key, d.prs_afdeling_key, ra.alg_ruimte_key, rx.alg_ruimte_key, rx.prj_ruimte_key
     FROM prs_v_afdeling d, prs_ruimteafdeling ra, prj_ruimteafdeling rax, prj_ruimte rx
    WHERE ra.prs_afdeling_key = d.prs_afdeling_key
      AND rax.prs_afdeling_key(+) = d.prs_afdeling_key
      AND rx.prj_ruimte_key(+) = rax.prj_ruimte_key
      AND ra.prs_ruimteafdeling_verwijder IS NULL;

REGISTERRUN('$Id$')

#endif // PRJ
