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

    File:               SuggestRuimte.asp
    Description:        Suggereer ruimten
    Parameters:         k             De eerste paar letters
                        n             De key van de te tonen ruimte
                        filtcode beperk de lijst met getoonde ruimtes

                        autlevel    : optioneel: schrijfrechten op dit niveau nodig
    Globals:
    Context:
    Note:               Merk op dat de alg_ruimte_nr altijd als extra wordt opgehaald
*/ %>

<%
JSON_Result = true;
%>

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

<%
var chars = getQParam("k", "");
var autlevel = getQParamInt("autlevel", -1);
var bAll = getQParamInt("SuggestAll", 0) == 1;
var bCAD = getQParamInt("cad", 0) == 1 && user.has("WEB_CADUSE");
var multiselect = getQParamInt("multiselect", 0) == 1;
var regkey = getQParamInt("regkey", -1);
var diskey = getQParamInt("diskey", -1);
var lockey = getQParamInt("lockey", -1);
var gebkey = getQParamInt("gebkey", -1);
var verkey = getQParamInt("verkey", -1);
var filtcode = getQParam("filtcode", "");
var act_key = getQParamInt("act_key", -1);
var stdm_key = getQParamInt("stdm_key", -1);
var person_key = getQParamInt("personfor_key", -1);
if (person_key == -1) person_key = getQParamInt("person_key", -1);
var issuer_search = getQParamInt("issuer_search", 0);
var search_person = (person_key > 0 && issuer_search == 1);
if (person_key > 0 && issuer_search == 1) { autlevel = new Perslid(person_key).checkAutorisation("WEB_MLDUSE").ALGwritelevel; }
var scope = getQParamInt("scope", 0);
var checkExist = getQParamInt("checkExist", 0) == 1;
if (checkExist && filtcode == "FAC") // bij objecten gekozen bij een melding
    filtcode = "INCVR";

var params = { act_key: act_key, stdm_key: stdm_key, scope: scope };

chars = chars.replace(/\*/g,"%");

var filtClause = getFiltClauseRuimte(filtcode, params);

if (verkey > 0)
{ // Verdieping (parent) gegeven
  filtClause.where += " AND r.alg_verdieping_key = " + verkey;
}
else if (gebkey > 0)
{ // Gebouw gegeven
  filtClause.where += " AND r.alg_verdieping_key IN"
                    + " (SELECT v.alg_verdieping_key"
                    + " FROM alg_v_aanwezigverdieping v"
                    + " WHERE v.alg_gebouw_key = " + gebkey +") ";
}
else if (lockey > 0)
{ // Locatie gegeven
  filtClause.where += " AND r.alg_verdieping_key IN"
                    + " (SELECT v.alg_verdieping_key"
                    + " FROM alg_v_aanwezigverdieping v"
                    + ", alg_v_aanweziggebouw g"
                    + " WHERE v.alg_gebouw_key = g.alg_gebouw_key"
                    + " AND g.alg_locatie_key = " + lockey + ")";
}
else if (diskey > 0)
{ // District gegeven
  filtClause.where += " AND r.alg_verdieping_key IN"
                    + " (SELECT v.alg_verdieping_key"
                    + " FROM alg_v_aanwezigverdieping v"
                    + ", alg_v_aanweziggebouw g"
                    + ", alg_v_aanweziglocatie l"
                    + " WHERE v.alg_gebouw_key = g.alg_gebouw_key"
                    + " AND g.alg_locatie_key = l.alg_locatie_key"
                    + " AND l.alg_district_key = " + diskey + ")";
}
else if (regkey > 0)
{ // Regio gegeven
  filtClause.where += " AND r.alg_verdieping_key IN"
                    + " (SELECT v.alg_verdieping_key"
                    + " FROM alg_v_aanwezigverdieping v"
                    + ", alg_v_aanweziggebouw g"
                    + ", alg_v_aanweziglocatie l"
                    + ", alg_v_aanwezigdistrict d"
                    + " WHERE 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 = " + regkey + ")";
}

if (autlevel > -1)
{
      filtClause.where +=" AND r.alg_ruimte_key IN "
                        + "(SELECT alg_ruimte_key FROM fac_v_my_rooms "
                        + "  WHERE prs_perslid_key = " + (search_person ? person_key : user_key)
                        + "    AND niveau = " + autlevel + ") ";
}

// Als verdieping bekend is kies je uit de ruimtenummers, maar anders prefixen met de onbekende velden zodat je met voorkennis
// direct een ruimte kunt vinden door de codes van gebouw en verdieping te gebruiken.
var zoeksqlstring = (verkey > 0
                    ? S("alg_rui_string")
                    : (gebkey > 0
                      ? " v.alg_verdieping_code || '-' || " + S("alg_rui_string")
                      : " g.alg_gebouw_code || '-' || v.alg_verdieping_code || '-' || " + S("alg_rui_string")
                      )
                    );

sql = "SELECT r.alg_ruimte_key"
    + "     , " + zoeksqlstring + " naam"
    + "     , r.alg_ruimte_nr"
    + "     , " + lcl.xsqla("sr.alg_srtruimte_omschrijving", "sr.alg_srtruimte_key")
    + "  FROM alg_v_aanwezigruimte r"
    + "     , alg_srtruimte sr"
    + "     , alg_verdieping v"
    + "     , alg_gebouw g"
    + filtClause.from
    + " WHERE r.alg_verdieping_key = v.alg_verdieping_key"
    + "   AND sr.alg_srtruimte_key(+) = r.alg_srtruimte_key"
    + "   AND v.alg_gebouw_key = g.alg_gebouw_key"
if (chars != "%")
  sql += " AND (UPPER("+zoeksqlstring+") LIKE " + safe.quoted_sql_wild2(chars)
       + "      OR UPPER(" + lcl.xsql("sr.alg_srtruimte_omschrijving", "sr.alg_srtruimte_key") + ") LIKE " + safe.quoted_sql_wild2(chars) + ")";
sql += filtClause.where
     + " ORDER BY g.alg_gebouw_code, v.alg_verdieping_volgnr, 2";

var firstOption = null;
if (!multiselect && bCAD && verkey > 0)
{
    var sqlv = "SELECT 1"
             + "  FROM cad_tekening ct"
             + " WHERE ct.alg_verdieping_key = " + verkey;
    var oRs = Oracle.Execute(sqlv);
    if (!oRs.Eof)
    {
        firstOption = { txt: "<i class='fal fa-2x fa-hand-pointer'></i>&nbsp;" + L('lcl_room_cad'),
                        key: -2,
                        desc: L('lcl_room_choose_cad'),
                        isHTML: true
                      };
    }
    oRs.Close();
}
WriteResult2(sql, { bAll: bAll,
                    fldName: "naam",
                    fldKey: "alg_ruimte_key",
                    fldDesc: "alg_srtruimte_omschrijving",
                    fldExtraParam: "alg_ruimte_nr",
                    firstOption: firstOption
                   });
%>
<% ASPPAGE_END(); %>
