<%@ language="javascript"%>
<% /*
     $Revision$
     $Id$

     File:        CAD/rap_thema.asp
     Description: Inhoud van de thema/label-tabbladen van FG. Toont een lijst met de waarden zoals die ook gekleurd of getoond zijn in de tekening
                  Werkt voor de verschillende type themas, binnen en buiten wat mij betreft
                  // 00 = contouren (ruimte(01) of terrein(02))
                  // &01 = binnen
                  // &02 = buiten
                  // &04 = scenario
                  // &08 = werkplek
                  // &16 = object
                  // &128 = sleepbaar
     Parameters:  floorKey (required)
                  thema of label
                  highlight (optional list of room-keys/ins-keys/wp-keys/terrein-keys to filter)
                  dolabels=1 voor de labelversie.

     Note:        UIT TE BREIDEN. BEPERKINGEN NU:
                  - werkplekthemas (op prs_werkplek) niet ondersteund
                  - de buitensituatie voor terreinen moet nog worden toegevoegd
                  - de ruwe waarde uit de view wordt getoond, niet de vertaling volgens de legenda. Vooralsnog ook ok
                  - voor prj is deze nog niet goed genoeg, dus daarvoor gebruiken we hem ook (nog) niet.
*/%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->

<%
var floorKey      = getQParamInt("vKey", -1);
var highlight_arr = getQParamIntArray("highlight", []); // Comma-separated room_key_list (terrains). Optional
var datumfilter   = getQParamDate("datumfilter", null);
var disc_arr      = getQParamIntArray("discs", []);

var thema_key  = getQParamInt("thema", -1);
var label_key  = getQParamInt("label", -1);
var dolabels   =  getQParamInt("listlabels", 0) == 1;  // aanduiding of labelthema of kleurthema te tonen (beide keys zijn gegeven), default is kleur
var lthema_key = (dolabels ? label_key : thema_key);  // intern gaan we hiermee uniform verder

var outputmode = getQParam("outputmode", 0);
var showall    = getQParam("showall", 0) == 1;

var sql = "";

if (floorKey > 0 && lthema_key > 0)
{
  if (dolabels)
  {
      sql = "SELECT "
          + lcl.xsql('cad_label_omschrijving', 'cad_label_key') + " omschrijving, "
          + lcl.xsql('cad_label_opmerking', 'cad_label_key') + " opmerking, "
          + "       cad_label_view tview,"
          + "       cad_label_type ttype,"
          + "       fac_functie_key"
          + "  FROM cad_label"
          + " WHERE cad_label_key = " + label_key;
  }
  else
  {
      sql = "SELECT "
          + lcl.xsql('cad_thema_omschrijving', 'cad_thema_key') + " omschrijving, "
          + lcl.xsql('cad_thema_opmerking', 'cad_thema_key') + " opmerking, "
          + "       cad_thema_view tview,"
          + "       cad_thema_type ttype,"
          + "       fac_functie_key"
          + "  FROM cad_thema"
          + " WHERE cad_thema_key = " + thema_key;
  }
  oRs = Oracle.Execute(sql);
  var thema_omschrijving = oRs("omschrijving").value;
  var thema_view         = oRs("tview").value;
  var thema_type         = oRs("ttype").value;
  var thema_opmerking    = oRs("opmerking").value;
  var functie_key        = oRs("fac_functie_key").value;
  oRs.close();
  sql="";

  if (functie_key) user.checkAutorisation(functie_key);  // als een autorisatie gedefinieerd is, controleren we die

  // sleepbaar of scenario niet maakt niet uit
  var isruimtethema  = (thema_type&25)==1;
  var isterreinthema = (thema_type&25)==2;
  var isobjectthema  = (thema_type&17)==17;
  var iswpthema      = (thema_type&9)==9;
  var isprjthema     = (thema_type&4)==4;

  var withdatefilter = datumfilter && hasColumn(thema_view, 'fclt_f_datum', 'DATE');

  if (isruimtethema)  // ruimte-binnen
  {
        sql = " SELECT   r.alg_ruimte_key, r.alg_ruimte_nr,"
            +            lcl.xsqla("sr.alg_srtruimte_omschrijving", "sr.alg_srtruimte_key")+","
            + "          r.alg_ruimte_bruto_vloeropp, r.alg_ruimte_omschrijving,"
            + "          r.alg_ruimte_opp_alt1, r.alg_ruimte_opp_alt2, th.waarde"
            + "     FROM alg_v_aanwezigruimte r,"
            + "          alg_srtruimte sr,"
            +            thema_view + " th"
            + "    WHERE r.alg_verdieping_key = " + floorKey
            + "      AND r.alg_ruimte_nr NOT LIKE '\\_%' ESCAPE '\\' "   // suppress virtual rooms
            + "      AND r.alg_srtruimte_key = sr.alg_srtruimte_key(+)"
            + "      AND r.alg_ruimte_key = "+(isprjthema ? "th.prj_ruimte_key" : "th.alg_ruimte_key")  // niet genoeg; moet dan denk ik ook prj_ruimte enzo
            +  (hasColumn(thema_view, 'fclt_f_3d_user_key', 'NUMBER') ? " AND th.fclt_f_3d_user_key = " + user_key:"")
            + (withdatefilter
              ? " AND th.fclt_f_datum = " + datumfilter.toSQL()
              : ""
              )
            + (highlight_arr.length > 0 && highlight_arr.join(",").indexOf("-1") == -1
              ? " AND r.alg_ruimte_key IN (" + highlight_arr.join(",") + ")"
              : ""
              )
            + " ORDER BY r.alg_ruimte_nr";
    }
    else if (isobjectthema) // objecten binnen
    {
        sql = "SELECT id.ins_deel_key, ins_deel_omschrijving, waarde,"
            + "       r.alg_ruimte_nr, " + lcl.xsqla('isd.ins_srtdeel_omschrijving', 'isd.ins_srtdeel_key')
            + "  FROM ins_deel id, alg_ruimte r, ins_srtdeel isd,"
            +        thema_view + " th"
            + " WHERE id.ins_srtdeel_key = isd.ins_srtdeel_key"
            + "   AND ins_deel_verwijder IS NULL"
            + "   AND id.ins_alg_ruimte_key = r.alg_ruimte_key"  // zijn zo dus alleen ruimtegebonden objecten. Voorstelbaar dat wp-gebonden objecten erbij mogen
            + "   AND r.alg_verdieping_key = " + floorKey
            + "   AND id.ins_deel_key = " + (isprjthema ? "th.prj_deel_key" : "th.ins_deel_key")  // niet genoeg; moet dan denk ik ook prj_deel enzo
            +  (hasColumn(thema_view, 'fclt_f_3d_user_key', 'NUMBER') ? " AND th.fclt_f_3d_user_key = " + user_key:"")
            + (withdatefilter
              ? " AND th.fclt_f_datum = " + datumfilter.toSQL()
              : ""
              )
            + (disc_arr.length > 0 && disc_arr.join(",").indexOf("-1") == -1
              ? " AND ins_discipline_key in (" + disc_arr.join(",") + ")"
              : ""
              )
            + (highlight_arr.length > 0 && highlight_arr.join(",").indexOf("-1") == -1
              ? " AND r.alg_ruimte_key IN (" + highlight_arr.join(",") + ")"
              : ""
              )
            + " ORDER BY r.alg_ruimte_nr, ins_deel_omschrijving";
    }
    else if (iswpthema) // werkplekken binnen
    {
        sql = "SELECT pw.prs_werkplek_key, ar.alg_ruimte_nr, prs_werkplek_volgnr, pw.prs_werkplek_omschrijving, prs_werkplek_type, waarde"
            + "  FROM " + thema_view + " th, prs_werkplek pw, alg_ruimte ar "
            + " WHERE th.prs_werkplek_key = pw.prs_werkplek_key"
            + "   AND pw.prs_alg_ruimte_key = ar.alg_ruimte_key"
            + "   AND pw.prs_werkplek_virtueel = 0"
            + "   AND alg_verdieping_key = " + floorKey
            + (highlight_arr.length > 0 && highlight_arr.join(",").indexOf("-1") == -1
              ? " AND ar.alg_ruimte_key IN (" + highlight_arr.join(",") + ")"
              : ""
              )
            +  (hasColumn(thema_view, 'fclt_f_3d_user_key', 'NUMBER') ? " AND th.fclt_f_3d_user_key = " + user_key:"")
            + (withdatefilter
              ? " AND th.fclt_f_datum = " + datumfilter.toSQL()
              : ""
              )
            + " ORDER BY 2,3";
    }
    else if (isterreinthema) // TODO
    {
        sql = "SELECT * FROM DUAL WHERE 1 = 0";
    }
}
else
{
    // Er is (nog) geen verdieping (of thema) bekend: no result
    sql = "SELECT * FROM DUAL WHERE 1 = 0";
}
%>
<html>
  <head>
<%  FCLTHeader.Generate({outputmode: outputmode}); %>
    <script type="text/javascript">
      function onClickRow(row)
      {
<%    if (isruimtethema) { %>
        FcltMgr.openDetail("appl/alg/alg_ruimte.asp?key=" + row.getAttribute("ROWKEY"));
<%    } else if (isobjectthema) { %>
        FcltMgr.openDetail("appl/ins/ins_deel.asp?urole=bo&ins_key=" + row.getAttribute("ROWKEY"));
<%    } else if (iswpthema) {
            if (S("prs_werkplek_implicit") == 1) { %>
        FcltMgr.openModalDetail("../prs/prs_edit_perslidwerkplek.asp?wp_key=" + row.getAttribute("ROWKEY"));
<%          } else { %>
        FcltMgr.openDetail("appl/alg/alg_wp.asp?mode=viewUpdate&key=" + row.getAttribute("ROWKEY"));
<%          }
      } %>
      }
    </script>
  </head>

  <body class="tabpage">
<%
    var rst = new ResultsetTable({ ID : "cadthematable",
                                   keyColumn: (isruimtethema ? "alg_ruimte_key" : (isobjectthema ? "ins_deel_key" : (iswpthema ? "prs_werkplek_key" : (isterreinthema ? "alg_terreinsector_key" : "")))),
                                   title: thema_omschrijving ? thema_omschrijving + (withdatefilter ? " " + toDateString(datumfilter, true, true) : "") : "",
                                   sql: sql,
                                   outputmode: outputmode,
                                   showAll: showall
                                 });

    if (isruimtethema)
    {
      rst.addColumn(new Column({caption: L("lcl_obj_inf_room"), content: "alg_ruimte_nr"}));
      rst.addColumn(new Column({caption: L("lcl_descr"), content: "alg_ruimte_omschrijving"}));
      rst.addColumn(new Column({caption: L("alg_srtruimte"), content: "alg_srtruimte_omschrijving"})); // ook een beetje voor de vulling
    }
    else if (isobjectthema)
    {
      rst.addColumn(new Column({caption: L("lcl_obj_inf_room"), content: "alg_ruimte_nr"}));
      rst.addColumn(new Column({caption: L("lcl_ins_object"), content: "ins_deel_omschrijving"}));
      rst.addColumn(new Column({caption: L("lcl_descr"), content: "ins_srtdeel_omschrijving"}));
    }
    else if (iswpthema)
    {
      rst.addColumn(new Column({caption: L("lcl_obj_inf_room"), content: "alg_ruimte_nr"}));
      rst.addColumn(new Column({caption: L("lcl_estate_wp_seq"), content: "prs_werkplek_volgnr"}));
      rst.addColumn(new Column({caption: L("lcl_workplace"), content: "prs_werkplek_omschrijving"}));
    }
    // TODO terrein

    rst.addColumn(new Column({caption: thema_omschrijving, content: "waarde"}));

    rst.addAction({ action: "onClickRow", caption: L("lcl_edit"), isDefault: true } );
    var cnt = rst.processResultset();
%>
  </body>
</html>
<% ASPPAGE_END(); %>
