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

     File:               CAD/any_search.asp
     Description:        Zoek ruimte via code ingevoerd voor huidige label thema
     Parameters:         zoektekst: de door de gebruiker ingevoerde zoekcode
                         loc_key: standaard zoeken we *met* loc_key omdat dat sneller is
                         floor_key: de context van de huidige tekening
                         label: key in CAD_LABEL, thema dat aan staat
     Context:            Modal vanuit zoekknopje op hoofdscherm Graphics
     Result:             Als de gebruiker op een regel klikt wordt via closeModal
                         allerlei keys van object opgeleverd
     Note:               Alleen de binnensituatie wordt (vooralsnog) ondersteund
                         VOORALSNOG GEEN AUTORISATIE?
                         We zoeken in eigenlijk alle teksten die in beeld kunnen zijn:
                         * eventueel actief Ruimtelabel thema
                         * eventueel actief Objectlabel thema incl. tooltip
                         * Reguliere object code (ins_deel_upper)
                         * TODO: Ruimtenummer
*/ %>

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

<%
var oRs;
var sql = "";
var i = 0;

var zoektekst = getQParam("zoektekst", "");
var loc_key = getQParamInt("loc_key", -1);
var floor_key = getQParamInt("floor_key", -1);
var pLabelR_key = getQParamInt("labelR", -1);
var pLabelI_key = getQParamInt("labelI", -1);
var disc_key_arr  = getQParamIntArray("discs", []);
var datumfilter = getQParamDate("datumfilter", null);
%>

<html>
  <head>
<%  FCLTHeader.Generate(); %>
    <script type="text/javascript">
      function lblView(row)
      {
          var lblData = JSON.parse(row.getAttribute("ROWDATA"));
          lblData.success = true;
          FcltMgr.closeDetail(window, lblData);
      }
      $(function () { $("#zoektekst").focus(); } );
    </script>
  </head>

  <body class="fclt-modal" id="mod_lbl_search" style="min-width: 600px" >
  <% MODAL_START();
%>
    <form name="u2" method="get" action="any_search.asp">
        <input type="hidden" name="loc_key"value="<%=loc_key%>">
        <input type="hidden" name="floor_key"value="<%=floor_key%>">
        <input type="hidden" name="labelR" value="<%=pLabelR_key%>">
        <input type="hidden" name="labelI" value="<%=pLabelI_key%>">
        <input type="hidden" name="discs"  value="<%=disc_key_arr.join(",")%>">
<%
    MODAL_BLOCK_START("lblsearch", L("lcl_fg_search_label"), { icon: "fa-search-location fa-flip-horizontal" });
        if (loc_key > 0)
        {
%>      <tr>
          <td class="label"><label for="fg_waar"><%=L("lcl_fg_searcharea")%></label></td>
          <td>
            <label for="waar_l">
              <input type="radio" name="fg_waar" id="waar_l" value="1" <%=getQParamInt("fg_waar", 1) == 1?"checked":""%>><%=L("lcl_fg_search_thisfloor")%>
            </label>
            <label for="waar_f">
              <input type="radio" name="fg_waar" id="waar_f" value="0" <%=getQParamInt("fg_waar", 1) == 0?"checked":""%>><%=L("lcl_fg_search_thislocation")%>
            </label>
          </td>
        </tr>
<%      }
        if (pLabelR_key > 0)
        {
            sql = "SELECT " + lcl.xsqla('cad_label_omschrijving', 'cad_label_key') + ","
                + "       cad_label_view "
                + "  FROM cad_label"
                + " WHERE cad_label_key = " + pLabelR_key
            oRs = Oracle.Execute(sql)
            var labelviewNameR = oRs("cad_label_view").value;
            RWCHECKBOXTR("slabelR", "fldcheck", oRs("cad_label_omschrijving").Value, getQParamSafe("slabelR", "on") == "on");
            oRs.Close();
        }
        if (pLabelI_key > 0)
        {
            sql = "SELECT " + lcl.xsqla('cad_label_omschrijving', 'cad_label_key') + ","
                + "       cad_label_view "
                + "  FROM cad_label"
                + " WHERE cad_label_key = " + pLabelI_key
            oRs = Oracle.Execute(sql)
            var labelviewNameI = oRs("cad_label_view").value;
            RWCHECKBOXTR("slabelI", "fldcheck", oRs("cad_label_omschrijving").Value, getQParamSafe("slabelI", "on") == "on");
            oRs.Close();
        }
        if (disc_key_arr.length) // TODO: 'Plan' zit hier ook in maar heeft geen ins_srtgroep onder zich, dus niet meetellen?
        {                        // TODO2: als er maar één discipline overblijft dan de naam daarvan overnemen?
            RWCHECKBOXTR("sobject", "fldcheck", L("lcl_ins_objects"), getQParamSafe("sobject", "on") == "on");
        }
        // TODO: we zouden hier ook een checkboxje kunnen bieden om in ruimtenummers te zoeken. Lijkt me overkill vooralsnog
        RWFIELDTR("zoektekst", "fld search", L("lcl_search_diff_fields"), zoektekst, {});
    MODAL_BLOCK_END();

    var buttons = [{title: L("lcl_search"), icon: "fa-fclt-save", action: "document.forms.u2.submit()", importance: 1},
                   {title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "FcltMgr.closeDetail(window, { cancel: true })", importance: 3}];
    SIMPLE_BLOCK_START();
      CreateButtons(buttons);
    SIMPLE_BLOCK_END();
%>
</form>
<%
    function fnrowData(oRs)
    {
      var data = {loc_key: oRs("alg_locatie_key").value,
                  loc_oms: oRs("alg_locatie_omschrijving").value,
                  bld_key: oRs("alg_gebouw_key").value,
                  bld_oms: oRs("alg_gebouw_naam").value,
                  flr_key: oRs("alg_verdieping_key").value,
                  flr_oms: oRs("alg_verdieping_omschrijving").value,
                  rui_key: oRs("alg_ruimte_key").value
                 };

      return JSON.stringify(data);
    }

    function fncolPos(oRs)
    {
      return safe.html(oRs("alg_locatie_code").Value + "-" +
                       oRs("alg_gebouw_code").Value + "-" +
                       oRs("alg_verdieping_code").Value + "-" +
                       oRs("alg_ruimte_nr").Value);
    }

    if (zoektekst && pLabelR_key > 0 && getQParamSafe("slabelR", "") == "on")
    {
        sql = "SELECT alg_locatie_code, alg_gebouw_code, alg_verdieping_code, ar.alg_ruimte_nr, ar.alg_ruimte_omschrijving"
            + "     , al.alg_locatie_key"
            + "     , al.alg_locatie_omschrijving"
            + "     , ag.alg_gebouw_key"
            + "     , ag.alg_gebouw_naam"
            + "     , av.alg_verdieping_key"
            + "     , av.alg_verdieping_key"
            + "     , av.alg_verdieping_omschrijving"
            + "     , ar.alg_ruimte_key"
            + "     , al.alg_district_key"
            + "     , th.waarde"
            + "  FROM " + labelviewNameR + " th, alg_ruimte ar,"
            + "      alg_locatie al,alg_gebouw ag, alg_verdieping av"
            + " WHERE th.alg_ruimte_key = ar.alg_ruimte_key"
            + "   AND th.waarde IS NOT NULL"      // prevent null labels safety
            + "   AND al.alg_locatie_key = ag.alg_locatie_key"
            + "   AND ag.alg_gebouw_key = av.alg_gebouw_key"
            + "   AND av.alg_verdieping_key = ar.alg_verdieping_key"
            + "   AND (UPPER(th.waarde) LIKE " + safe.quoted_sql_wild("%" + zoektekst + "%")
            +  (hasColumn(labelviewNameR, 'fclt_f_3d_user_key', 'NUMBER') ? " AND th.fclt_f_3d_user_key = " + user_key:"");
        if (hasColumn(labelviewNameR, 'tooltip', 'varchar2'))
            sql += "   OR UPPER(th.tooltip) LIKE " + safe.quoted_sql_wild("%" + zoektekst + "%");
        sql += ")"
        if (datumfilter && hasColumn(labelviewNameR, 'fclt_f_datum', 'DATE'))
            sql += " AND th.fclt_f_datum = " + datumfilter.toSQL();

        if (floor_key > 0 && getQParamInt("fg_waar", 0) == 1)
            sql = sql + " AND av.alg_verdieping_key = " + floor_key;
        else
            sql = sql + " AND al.alg_locatie_key = " + loc_key;

        sql = sql + " ORDER BY waarde";

        var rst = new ResultsetTable({keyColumn: "alg_ruimte_key",
                                          ID: "lbllist",
                                          sql: sql,
                                          rowData: fnrowData,
                                          noPrint: true
                                         });

        rst.addColumn(new Column({caption: L("lcl_obj_identification"), content: "waarde"}));
        rst.addColumn(new Column({caption: L("lcl_obj_position"), content: fncolPos}));
        rst.addColumn(new Column({caption: L("lcl_descr"), content: "alg_ruimte_omschrijving"}));

        rst.addAction({ action: "lblView", isDefault: true});

        SIMPLE_BLOCK_START();
            var cnt = rst.processResultset();
        SIMPLE_BLOCK_END();
    }

    if (zoektekst && pLabelI_key > 0 && getQParamSafe("slabelI", "") == "on")
    {
        sql = "SELECT alg_locatie_code, alg_gebouw_code, alg_verdieping_code, ar.alg_ruimte_nr, ar.alg_ruimte_omschrijving"
            + "     , al.alg_locatie_key"
            + "     , al.alg_locatie_omschrijving"
            + "     , ag.alg_gebouw_key"
            + "     , ag.alg_gebouw_naam"
            + "     , av.alg_verdieping_key"
            + "     , av.alg_verdieping_key"
            + "     , av.alg_verdieping_omschrijving"
            + "     , ar.alg_ruimte_key"
            + "     , al.alg_district_key"
            + "     , th.waarde"
            + "  FROM " + labelviewNameI + " th, ins_deel d, alg_ruimte ar,"
            + "       alg_locatie al,alg_gebouw ag, alg_verdieping av"
            + " WHERE th.ins_deel_key = d.ins_deel_key"
            + "   AND d.ins_alg_ruimte_key = ar.alg_ruimte_key"
            + "   AND d.ins_alg_ruimte_type = 'R'"
            + "   AND th.waarde IS NOT NULL"      // prevent null labels safety
            + "   AND al.alg_locatie_key = ag.alg_locatie_key"
            + "   AND ag.alg_gebouw_key = av.alg_gebouw_key"
            + "   AND av.alg_verdieping_key = ar.alg_verdieping_key"
            + "   AND (UPPER(th.waarde) LIKE " + safe.quoted_sql_wild("%" + zoektekst + "%")
            +  (hasColumn(labelviewNameI, 'fclt_f_3d_user_key', 'NUMBER') ? " AND th.fclt_f_3d_user_key = " + user_key:"");
        if (hasColumn(labelviewNameI, 'tooltip', 'varchar2'))
            sql += "   OR UPPER(th.tooltip) LIKE " + safe.quoted_sql_wild("%" + zoektekst + "%");
        sql += ")"

        if (datumfilter && hasColumn(labelviewNameI, 'fclt_f_datum', 'DATE'))
            sql += " AND th.fclt_f_datum = " + datumfilter.toSQL();

        if (floor_key > 0 && getQParamInt("fg_waar", 0) == 1)
            sql = sql + " AND av.alg_verdieping_key = " + floor_key;
        else
            sql = sql + " AND al.alg_locatie_key = " + loc_key;

        sql = sql + " ORDER BY waarde";

        var rst = new ResultsetTable({keyColumn: "alg_ruimte_key",
                                          ID: "lbllist",
                                          sql: sql,
                                          rowData: fnrowData,
                                          noPrint: true
                                         });

        rst.addColumn(new Column({caption: L("lcl_obj_identification"), content: "waarde"}));
        rst.addColumn(new Column({caption: L("lcl_obj_position"), content: fncolPos}));
        rst.addColumn(new Column({caption: L("lcl_descr"), content: "alg_ruimte_omschrijving"}));

        rst.addAction({ action: "lblView", isDefault: true});

        SIMPLE_BLOCK_START();
            var cnt = rst.processResultset();
        SIMPLE_BLOCK_END();
    }

    if (zoektekst && disc_key_arr.length && getQParamSafe("sobject", "") == "on")
    {
        sql = "SELECT o.alg_plaatsaanduiding plaats, alg_ruimte_omschrijving"
            + "     , s.ins_srtdeel_code || '-' ||" + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " soort"
            + "     , g.ins_deel_omschrijving"
            + "     , g.ins_deel_key"
            + "     , s.ins_srtdeel_key"
            + "     , g.ins_discipline_key"
            + "     , l.alg_locatie_key"
            + "     , l.alg_locatie_omschrijving"
            + "     , o.alg_gebouw_key"
            + "     , o.alg_gebouw_naam"
            + "     , o.alg_verdieping_key"
            + "     , o.alg_verdieping_omschrijving"
            + "     , o.alg_ruimte_key"
            + "     , l.alg_district_key"
            + "  FROM ins_deel g, alg_ruimte ar,"
            + "       ins_v_alg_overzicht o,"
            + "       ins_srtdeel s, alg_locatie l, alg_district di "   // I added this for alg_district_key (FSN#1082)
            + " WHERE g.ins_deel_verwijder IS NULL"
            + "   AND (g.ins_deel_vervaldatum IS NULL OR g.ins_deel_vervaldatum > TRUNC(SYSDATE))"
            + "   AND g.ins_deel_module = 'INS'"
            + "   AND g.ins_deel_parent_key IS NULL"
            + "   AND o.alg_ruimte_key = ar.alg_ruimte_key"
            + "   AND o.alg_onroerendgoed_keys = g.ins_alg_ruimte_key"
            + "   AND o.alg_onroerendgoed_type = g.ins_alg_ruimte_type"
            + "   AND g.ins_alg_ruimte_type IN ('R', 'W')"
            + "   AND o.alg_locatie_key = g.ins_alg_locatie_key"
            + "   AND o.alg_locatie_key = l.alg_locatie_key"
            + "   AND l.alg_district_key = di.alg_district_key"
            + "   AND s.ins_srtdeel_key = g.ins_srtdeel_key"
            + "   AND g.ins_deel_upper LIKE " + safe.quoted_sql_wild("%" + zoektekst + "%");

        if (floor_key > 0 && getQParamInt("fg_waar", 0) == 1)
            sql = sql + " AND o.alg_verdieping_key = " + floor_key;
        else
            sql = sql + " AND l.alg_locatie_key = " + loc_key;

        if(disc_key_arr.length > 0 && disc_key_arr.join(",").indexOf("-1") == -1)
        {
          sql = sql + " and ins_discipline_key IN (" + disc_key_arr.join(",") + ")";
          // Veronderstel dat autorisatie dan wel goed zit
        }
        else
        {
          var autfunction = "WEB_INSUSE";
          sql = discx3d (sql, "g.ins_discipline_key", "di.alg_district_key",  "l.alg_district_key",
                         "l.alg_locatie_key", "o.alg_gebouw_key", "o.alg_verdieping_key",
                         "o.alg_ruimte_key", "b.prs_bedrijf_key", "b.prs_afdeling_key",
                         autfunction, disc_key_arr, 0);
        }

        sql = sql + " order by ins_deel_omschrijving";

        var rst = new ResultsetTable({keyColumn: "alg_ruimte_key",
                                      ID: "objlist",
                                      sql: sql,
                                      rowData: fnrowData,
                                      noPrint: true
                                     });

        rst.addColumn(new Column({caption: L("lcl_obj_identification"), content: "ins_deel_omschrijving"}));
        rst.addColumn(new Column({caption: L("lcl_obj_sort"), content: "soort"}));
        rst.addColumn(new Column({caption: L("lcl_obj_position"), content: "plaats"}));
        rst.addColumn(new Column({caption: L("lcl_descr"), content: "alg_ruimte_omschrijving"}));

        rst.addAction({ action: "lblView", isDefault: true});

        SIMPLE_BLOCK_START();
          var cnt = rst.processResultset();
        SIMPLE_BLOCK_END();
    }

    MODAL_END();
%>
  </body>
</html>

<% ASPPAGE_END(); %>
