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

     File:        CAD/rap_alg.asp
     Description: Inhoud van het ALG-tabblad van FG
     Parameters:  floorKey (required)
                  highlight (optional list of room-keys to filter)
     Context:     -
*/%>

<!-- #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 outputmode = getQParam("outputmode", 0);
var showall    = getQParam("showall", 0) == 1;

var sql = "";
if (floorKey != -1)
{
  sql = "WITH current_ruimteafdeling AS"
      + "     (SELECT prs_ruimteafdeling_key"
          + "       , alg_ruimte_key"
          + "       , prs_afdeling_key"
          + "       , prs_ruimteafdeling_bezetting"
          + "       , prs_ruimteafdeling_ingangsdatum"
          + "       , prs_ruimteafdeling_einddatum"
          + "    FROM prs_ruimteafdeling ra"
          + "   WHERE ra.prs_ruimteafdeling_verwijder IS NULL"
          + "     AND ra.prs_ruimteafdeling_ingangsdatum < SYSDATE"
          + "     AND (ra.prs_ruimteafdeling_einddatum > SYSDATE OR ra.prs_ruimteafdeling_einddatum IS NULL)"
          + " )"
      + "   , ruimte_perc_som AS"
      + "    (SELECT alg_ruimte_key"
          + "      , COALESCE(SUM(prs_ruimteafdeling_bezetting), 1) som_bezetting"
          + "   FROM current_ruimteafdeling"
          + "  GROUP BY alg_ruimte_key"
          + ")"
      + "   , ruimte AS"
      + "	    (SELECT alg_r.alg_ruimte_key              alg_ruimte_key"
          + "       , alg_r.alg_ruimte_omschrijving     alg_ruimte_omschrijving"
          + "       , " + lcl.xsqla("alg_s.alg_srtruimte_omschrijving", "alg_s.alg_srtruimte_key")
          + "       , alg_r.alg_ruimte_bruto_vloeropp"
          + "       , alg_r.alg_ruimte_opp_alt1"
          + "       , alg_r.alg_ruimte_opp_alt2"
          + "       , alg_g.alg_gebouw_code"
          + "         || '-'"
          + "         || TO_CHAR (alg_v.alg_verdieping_code)"
          + "         || '-'"
          + "         || alg_r.alg_ruimte_nr            alg_ruimte_aanduiding"
          + "    FROM alg_gebouw           alg_g"
          + "       , alg_verdieping       alg_v"
          + "       , alg_v_aanwezigruimte alg_r"
          + "       , alg_srtruimte        alg_s"
          + "   WHERE alg_v.alg_verdieping_key = " + floorKey
          + "     AND alg_v.alg_verdieping_key = alg_r.alg_verdieping_key"
          + "     AND alg_g.alg_gebouw_key = alg_v.alg_gebouw_key"
          + "     AND alg_r.alg_ruimte_nr NOT LIKE '\\_%' ESCAPE '\\' "   // suppress virtual rooms
          + "     AND alg_r.alg_srtruimte_key = alg_s.alg_srtruimte_key(+)"
          + " )"
      + "SELECT cr.prs_ruimteafdeling_key"
      + "     , r.alg_ruimte_key"
      + "     , r.alg_ruimte_aanduiding"
      + "     , r.alg_srtruimte_omschrijving"
      + "     , r.alg_ruimte_bruto_vloeropp"
      + "     , r.alg_ruimte_omschrijving"
      + "     , r.alg_ruimte_opp_alt1"
      + "     , r.alg_ruimte_opp_alt2"
      + "     , (100 * cr.prs_ruimteafdeling_bezetting / rp.som_bezetting) bezet_perc"
      + "     , r.alg_ruimte_bruto_vloeropp * (cr.prs_ruimteafdeling_bezetting / rp.som_bezetting) bezet_vloeropp"
      + "     , (SELECT " + S("prs_dep_string")
            + "   FROM prs_v_afdeling d"
            + "  WHERE d.prs_afdeling_key = cr.prs_afdeling_key"
            + " ) afdeling"
      + "  FROM current_ruimteafdeling cr"
      + "     , ruimte r"
      + "     , ruimte_perc_som rp"
      + " WHERE cr.alg_ruimte_key = rp.alg_ruimte_key(+)"
      + "   AND cr.alg_ruimte_key(+) = r.alg_ruimte_key"
      + (highlight_arr.length > 0 && highlight_arr.join(",").indexOf("-1") == -1
        ? " AND r.alg_ruimte_key IN (" + highlight_arr.join(",") + ")"
        : "")
      + " ORDER BY r.alg_ruimte_aanduiding, afdeling";
}
else
{ // Er is (nog) geen verdieping bekend
  sql = "SELECT * FROM DUAL WHERE 1 = 0";
}
%>
<html>
  <head>
<%  FCLTHeader.Generate({outputmode: outputmode}); %>
    <script type="text/javascript">
      function onClickRuimte(row)
      {
        FcltMgr.openDetail("appl/alg/alg_ruimte.asp?key=" + row.getAttribute("ROWKEY"));
      }
    </script>
  </head>

  <body class="tabpage">
<%
    var summaryParams = {selectedopp: 0, selectedoppAlt1: 0, selectedoppAlt2: 0}

    function fnsummaryCalc(oRs)
    {
      with (summaryParams)
      {
        // oRs("bezetting").value is null of heeft een waarde van 0 t/m 100
        if (oRs("bezet_perc").value || oRs("bezet_perc").value == 0)
        { // Voor de ruimte is er ten minste 1 bezetting gedefinineerd (prs_ruimteafdeling)
          // Totale bezetting per ruimte opgeteld is 100%
          // Bezetting is in procenten.
          var bezetting = oRs("bezet_perc").value / 100;
        }
        else
        { // Voor de ruimte is er geen bezetting gedefinineerd (prs_ruimteafdeling)
          // Dan telt deze voor 100% mee voor de berekening van het totale oppervlak.
          var bezetting = 1;
        }

        selectedopp = selectedopp + (oRs("alg_ruimte_bruto_vloeropp").value != null? oRs("alg_ruimte_bruto_vloeropp").value * bezetting: 0);
        selectedoppAlt1 = selectedoppAlt1 + (oRs("alg_ruimte_opp_alt1").value != null? oRs("alg_ruimte_opp_alt1").value * bezetting: 0);
        selectedoppAlt2 = selectedoppAlt2 + (oRs("alg_ruimte_opp_alt2").value != null? oRs("alg_ruimte_opp_alt2").value * bezetting: 0);
      }
      return;
    }

    function fnsummaryShow()
    {
      var status_row = "<span class='algsumm'>" + L("lcl_estate_totaal_opp") + " "
                     + L("lcl_estate_ruimte_bruto_vloeropp") + ": " + safe.showFloat(summaryParams.selectedopp) + " " + L("lcl_estate_ruimte_opp_m2");
      if (S("fg_contourlayers_alt1") != "" && S("fg_labellayers_alt1") != "")
          status_row += ", " + L("lcl_estate_ruimte_opp_alt1") + ": " + safe.showFloat(summaryParams.selectedoppAlt1) + " " + L("lcl_estate_ruimte_opp_m2");
      if (S("fg_contourlayers_alt2") != "" && S("fg_labellayers_alt2") != "")
          status_row += ", " + L("lcl_estate_ruimte_opp_alt2") + ": " + safe.showFloat(summaryParams.selectedoppAlt2) + " " + L("lcl_estate_ruimte_opp_m2");
      status_row += "</span>";
      return status_row;
    }

    var lastValue = null;
    function showRoomDesc(oRs)
    { // leek leuk om herhalingen te onderdrukken, maar sorteren maakt het waardeloos
      if (false && outputmode == 0 && safe.htmlattr(oRs("alg_ruimte_aanduiding").value) == lastValue)
      var result = null;
      else
        var result = safe.htmlattr(oRs("alg_ruimte_aanduiding").value);
      lastValue = result;
      return result;
    }

    function fnOpp(oRs)
    {
      return (oRs("alg_ruimte_bruto_vloeropp").value != null? safe.displayfloat(oRs("alg_ruimte_bruto_vloeropp").value, 2) : "-");
    }

    function fnOppAlt1(oRs)
    {
      return (oRs("alg_ruimte_opp_alt1").value != null? safe.displayfloat(oRs("alg_ruimte_opp_alt1").value, 2) : "-");
    }

    function fnOppAlt2(oRs)
    {
      return (oRs("alg_ruimte_opp_alt2").value != null? safe.displayfloat(oRs("alg_ruimte_opp_alt2").value, 2) : "-");
    }

    var rst = new ResultsetTable({ ID : "cadalgtable",
                                   keyColumn: "alg_ruimte_key",
                                   title: L("lcl_space_manage_h"),
                                   sql: sql,
                                   outputmode: outputmode,
                                   showAll: showall,
                                   summaryCalc: fnsummaryCalc,
                                   summaryShow: fnsummaryShow
                                 });

    rst.addColumn(new Column({caption: L("lcl_obj_inf_room"), content: showRoomDesc}));
    rst.addColumn(new Column({caption: L("lcl_fg_func_names"), content: "alg_srtruimte_omschrijving"}));
    rst.addColumn(new Column({caption: L("lcl_descr"), content: "alg_ruimte_omschrijving"}));
    rst.addColumn(new Column({caption: L("lcl_department"), content: "afdeling"}));
    rst.addColumn(new Column({caption: L("lcl_procent"), content: "bezet_perc", datatype: "float"}));
    rst.addColumn(new Column({caption: L("lcl_estate_ruimte_bruto_vloeropp"), content: fnOpp, datatype: "float"}));
    rst.addColumn(new Column({caption: L("lcl_estate_ruimte_opp_alt1"), content: fnOppAlt1, datatype: "float"}));
    rst.addColumn(new Column({caption: L("lcl_estate_ruimte_opp_alt2"), content: fnOppAlt2, datatype: "float"}));

    rst.addAction({ action: "onClickRuimte", caption: L("lcl_edit"), isDefault: true } );

    var cnt = rst.processResultset();
%>
  </body>
</html>

<% ASPPAGE_END(); %>
