<%@ language = "JavaScript" %>
<% /*
    $Revision$
    $Id$
    Description:        List of objects (Mobile version)
    Parameters:         ins_key (bv via QRC, JGL: Echt waar?????) en nog meer optionele keys om te kunnen filteren binnen een context
                        Resultaat wordt standaard beperkt tot CurrentPosition
                        maar om flexibel te zijn is dat te overrulen (bv voor een QRC met objecten in Harderwijk?)
                        Je kunt clauses onderdrukken als je weet dat dat kan tbv performance door a|p|t|w = 0 te zetten

    Note:
    - ins_srtdeel_image erbij tonen if gevuld?
*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/discx3d.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="../ins/ins.inc" -->
<%
var eigen_obj = getQParamInt("self", 0) == 1;
var plaatsfilter = getQParamInt("plaatsfilter", 0);
var return_from = getQParam("return_from", ""); // Dit moet het vorige scherm worden als men weer in ins_list komt na de plaatsselector
                                                // te hebben gebruikt. Nodig om te voorkomen dat de plaatsselector telkens opnieuw aangeroepen wordt.
var urole   = getQParamSafe("urole", "bo");
var fronto  = (urole == "fo");
var autfunction = "";
switch(urole) {
  case "fo": autfunction = "WEB_INSFOF";
           break;
  default:   autfunction = (eigen_obj ? ["WEB_INSUSE","WEB_INSMIN"] : "WEB_INSUSE");
          break;
}
var authparams  = user.checkAutorisation(autfunction);
var outputmode  = getQParamInt("outputmode", 0); //  0 = screen, 1 = print, 2 = excel etc
var showall     = getQParamInt("showall", 0) == 1;

// Voor velden die de user in kan typen valideren we zodanig dat we er tegen kunnen
var locatie_key   = getQParamInt("locatie_key", getQParamInt("loc_key", -1)); // Locatie (de plaatsselector geeft loc_key terug)
var gebouw_key    = getQParamInt("gebouw_key",  getQParamInt("bld_key", -1)); // Gebouw (de plaatsselector geeft bld_key terug)
var terrein_key   = getQParamInt("terrein_key", -1);
var verdieping_key= getQParamInt("verdieping_key", -1);
var room_key_arr  = getQParamKeyArray("rooms", []); // Ruimten
var ruimte_key    = getQParamInt("ruimte_key", -1);

// Werklocatie is de default, maar meegegeven/gekozen plaatsen zijn leidend,
// dus alleen vullen met de Werklocatie als alles nog leeg is, anders mogelijke mismatch
if (!(locatie_key > 0 || gebouw_key > 0 || terrein_key > 0 || verdieping_key > 0 || ruimte_key > 0)) {
  locatie_key     = user.alg_locatie_key({ withcurrent: true });
  gebouw_key      = user.alg_gebouw_key({ withcurrent: true });
  verdieping_key  = user.alg_verdieping_key({ withcurrent: true });
}

var wpl_key       = getQParamInt("werkplekkey", -1); // Werkplek
var deel          = getQParam("deel", ""); // Identieficatie
var disc_key      = getQParamInt("disc", -1); // Discipline
var insgroup_key  = getQParamInt("srtgroup", -1); // Groep
var objsrt_key    = getQParamInt("srtdeel", -1); // Objectsoort
var dep_key       = getQParamInt("sDept_key", -1); // Organisatie key
var persoon_key   = getQParamInt("sName_key", -1); // Persoon key
var cpersoon_key  = getQParamInt("cps_key", -1); // Contactpersoon key
var mld_key       = getQParamInt("mld_key", -1); // Melding key (voor daaraan gekoppelde objecten)
var checkout      = getQParamInt("checkout", 0) == 1; // Tijdens uitchecken bezoeker.

var insObjIncl    = getQParamInt("insObjIncl", 0) == 1; // Ook onderdelen
var expObjIncl    = getQParamInt("expObjIncl", 0) == 1; // Ook vervallen objecten
var insLentOut    = getQParamInt("insLentOut", 1) == 1; // Uitgegeven
var insAvail      = getQParamInt("insAvail", 1) == 1; // Beschikbaar
var inacObjIncl   = getQParamInt("inacObjIncl", 0) == 1; // Ook inactieve objecten
var insPhotoIncl  = getQParamInt("insPhotoIncl", 0) == 1; // Ook afbeeldingen

// FGII parameters
var fgraph = getQParamInt("fgraph", 0) == 1;
//var ins_key_arr = getQParamIntArray("ins_key", []); // Was obj_key
var parent_key  = getQParamInt("parent_key", -1);
var koppel_key  = getQParamInt("koppel_key", -1);
var comp_key    = getQParamInt("company", -1);
var embedded    = getQParamInt("embedded", -1);
var tiny        = getQParamInt("tiny", -1);
/***** End get webform parameters *****/

if (disc_key > -1)
  lcl.set_dialect(disc_key, "INS_DISCIPLINE_KEY");

var ins_key = getQParamInt("ins_key", -1);
var mld_key = getQParamInt("mld_key", -1);
var afd_key = getQParamInt("afd_key", -1);
var prs_key = getQParamInt("prs_key", eigen_obj ? user_key : -1);
var ins_parent_key = getQParamInt("ins_parent_key", -1);
var grp_sel = getQParamUTF8("grp", "");
var all_grp = getQParam("cnd", (S("cnd_gebreken_srtdisc_key") > -1 ? "1" : "0")) == "1";
var qrc = getQParamInt("qrc", 0) != 0;

var ins_score_enabled = S("ins_score_enabled") == 1;

// optionele sturingsparameters als je met voorkennis
// bepaalde categoriën uit kunt sluiten. Kan helpen voor performance
// Ruimtegebonden kun je niet uitsluiten
var metWerkplekgebonden  = getQParamInt("w", 1) == 1;
var metAfdelingsgebonden = getQParamInt("a", 1) == 1;
var metPersoonsgebonden  = getQParamInt("p", 1) == 1;
var metTerreingebonden   = getQParamInt("t", 1) == 1;

// om nog even compatibel te blijven; als vervolgframe van ruimte wil ik niet *alle* A en P objecten in de scope
// als we de plaats-scope ook bij afdeling geimplementeerd hebben kan dit weg.
if (ruimte_key >-1 ) metTerreingebonden = metAfdelingsgebonden = false;

if (disc_key > -1)
{
    tsql = "SELECT " + lcl.xsql('disc.ins_discipline_omschrijving', 'disc.ins_discipline_key') + " ins_disc_oms"
         + " FROM ins_discipline disc WHERE ins_discipline_key = " + disc_key;
    toRs = Oracle.Execute (tsql);
    var subject = toRs("ins_disc_oms").Value;
    toRs.close();
}
else
{
    var subject = L("lcl_mobile_objecten");
}

// Probeer nog wat context aan de header toe te voegen (kan nog completer as needed)
if (ruimte_key > -1)
{
  var sql = "SELECT aog.alg_gebouw_code || '-' || aog.alg_verdieping_code || '-' || aog.alg_ruimte_nr plaats"
          + "  FROM alg_v_onroerendgoed_gegevens aog"
          + " WHERE aog.alg_ruimte_key = " + ruimte_key;
  var oRs = Oracle.Execute(sql);
  subject += " " + oRs("plaats").Value;
  oRs.Close();
}
else if (mld_key > -1)
{
  subject += " " + L("lcl_mobile_objbijmelding");
}
else if (ins_parent_key > -1 || koppel_key > -1)
{
  var sql = "SELECT id.ins_deel_omschrijving"
          + ", " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
          + "  FROM ins_deel id"
          + "     , ins_srtdeel sd"
          + " WHERE id.ins_srtdeel_key = sd.ins_srtdeel_key"
          + "   AND id.ins_deel_key = " + (ins_parent_key > -1? ins_parent_key : koppel_key);
  var oRs = Oracle.Execute(sql);
  subject = (ins_parent_key > -1
            ? L("lcl_subobjects")
            : L("lcl_mobile_objecten"))
          + " " + L("lcl_mobile_ondbijobject")
          + " " + oRs("ins_srtdeel_omschrijving").Value
          + " " + oRs("ins_deel_omschrijving").Value;
  oRs.Close();
}
else if (locatie_key > 0 || gebouw_key > 0)
{   // Toon locatie of gebouw waarvoor de objecten gefilterd zijn.
    var sql = "SELECT alg_{0}_omschrijving omschr"
            + "  FROM alg_{0}"
            + " WHERE alg_{0}_key = " + (gebouw_key > 0 ? gebouw_key : locatie_key);
    sql = sql.format(gebouw_key > 0 ? "gebouw" : "locatie");
    var oRs = Oracle.Execute(sql);
    if (oRs("omschr").Value) {
      subject += " " + oRs("omschr").Value;
    }
    oRs.Close();
}

if (plaatsfilter == 1) {
    var object_params = "?x=b"
                      + "&urole=" + urole
                      + "&startlevel=2" // is default in plaatsselector
                      + "&eindlevel=3"  // filter alleen op locatie en gebouw
                      + "&autlevel=-1"
                      + "&autoopen=2"
                      + "&dis_key=-1"  // Alle locaties kunnen selecteren; niet alleen binnen het district van de gebruiker.
                      + "&return_to=" + safe.url("ins_list.asp?urole="+urole)
                      + "&return_from=" + safe.url("facilitor.asp");  // Vanuit menu aangeroepen.
    var url = "plaatsselector.asp" + object_params;

    Response.Redirect(url);
}

var canAdd = authparams.PRSwritelevel < 9 && authparams.ALGwritelevel < 9;
%>
<html>
<head>
<% FCLTMHeader.Generate({}); %>
</head>
<body>
<%
  PAGE_START();
    HEADER({title: subject, go: return_from, back: false, home: !qrc, addaction: (canAdd && koppel_key == -1 && ins_parent_key == -1 ? (rooturl + "/appl/pda/ins_deel.asp?ins_key=-1") : false) });
      CONTENT_START();

  function fncolLink(oRs)
  {
    var url = "";
    if (ins_parent_key == -1 && koppel_key == -1 && mld_key == -1 && grp_sel == "" && !all_grp)
    {
      url = "../pda/ins_list.asp?urole=" + urole
          + (eigen_obj ? "&self=1" : "")
          + "&locatie_key=" + locatie_key
          + "&gebouw_key="  + gebouw_key
          + "&grp=" + safe.urlUTF8(oRs(fronto || ins_parent_key > 0 || koppel_key > 0 || mld_key > 0? "ins_groep_oms" : "ins_srtgroep_omschrijving").Value)
          + (ruimte_key>-1 ? "&ruimte_key="+ ruimte_key : "")
          + (disc_key>-1 ? "&disc="+ disc_key : "")
          + (prs_key>-1 ? "&prs_key="+ prs_key : "")
          + (return_from.length ? "&return_from="+safe.url(return_from) : "");
    }
    else
    {
      var grp_omschr = oRs("ins_disc_oms").Value +" "+ oRs("ins_groep_oms").Value;
      url = "../pda/ins_deel.asp?urole=" + urole + "&ins_key=" + oRs("ins_deel_key").Value;
      url += (eigen_obj ? "&self=1" : "");
      url += ((ins_parent_key > -1) ? "&ins_parent_key=" + ins_parent_key : "");
      url += ((koppel_key > -1)? "&koppel_key=" + koppel_key : "");
      url += "&return_from=" + safe.url("ins_list.asp?urole=" + urole + (eigen_obj ? "&self=1" : "") + "&grp=" + safe.urlUTF8(grp_omschr));
    }
    return url;
  };
  function fncolGroup(oRs)
  {
    if (grp_sel || all_grp)
    {
      return safe.html(oRs("ins_srtdeel_omschrijving").Value);
    }
    return safe.html(oRs(fronto || ins_parent_key > 0 || koppel_key > 0 || mld_key > 0? "ins_groep_oms" : "ins_srtgroep_omschrijving").Value);
  };
  function fncolDetail(oRs)
  {
    return safe.html(oRs("ins_srtdeel_omschrijving").Value)
    + (!fronto && oRs("hoeveelheid").Value != "1" ? "&nbsp;<span class='c1'>" + safe.html(oRs("hoeveelheid").Value) + "</span>" : "");
  };

  function fncolsubHeader(oRs)
  {
    if (fronto)
    {
      var place = "";
      if (oRs("ins_alg_ruimte_type_org").value != null)
      {
        if (oRs("ins_alg_ruimte_type").value == 'P' || oRs("ins_alg_ruimte_type").value == 'A')
        {
          place = "" + I("fa-user") + "&nbsp;" + safe.html(oRs("uitgeleend_aan").value) + "<br>";
        }
        place += "" + I("fa-map-marker") + "&nbsp;" + safe.html(oRs("uitgegeven_vanuit").Value);
      }
      else
      {
        if (oRs("ins_alg_ruimte_type").value == 'P' || oRs("ins_alg_ruimte_type").value == 'A')
          // Object niet uitgeleend. Uitgeleend aan is eigenlijk de plaats.
          place = safe.html(oRs("uitgeleend_aan").value);
        else
          place = safe.html(oRs("plaats").value);
      }
      return "<div class='listbodykop'>"+ place + "</div>";
    }
    else
    {
      var remark =""
      remark += "" + I("fa-tag") + "&nbsp;"+safe.html(oRs("ins_disc_oms").Value) + " / ";
      remark += safe.html(oRs("ins_groep_oms").Value) + "<br>";
      if (oRs("ins_deel_opmerking").value != null)
      {
        remark += safe.html(oRs("ins_deel_opmerking").Value) + "<br>";
      }
      if (oRs("ins_deel_mjb_score1").value != null)
      {
        var gebrekdatum = oRs("gebrekdatum").Value != null? new Date(oRs("gebrekdatum").Value) : null;
        var vorigjaar = new Date (new Date().setFullYear(new Date().getFullYear() - 1));
        // Bij elk object wordt van alle bijbehorende gebrekmeldingen (srtdicipline = S("cnd_gebreken_srtdisc_key")) de datum (gebrekdatum)
        // van de laatste melding-tracking bepaald. Indien deze datum minder dan een jaar geleden is,
        // wordt het "fa-calendar-check" symbool weergegeven na het thermometer symbool.
        // Bij een object kan geen datum worden gevonden als het object geen gebrekmelding heeft. Het "fa-calendar-check" symbool wordt dan niet weergegeven.
        remark += "<span class=''>" + I("fa-thermometer-quarter") + (gebrekdatum && gebrekdatum > vorigjaar? "&nbsp;" + I("fa-calendar-check") : "") + "</span>"
                + "&nbsp;" + safe.html(L("lcl_ins_deel_mjb_score1") + ": " + oRs("ins_deel_mjb_score1").Value) + "<br>";
      }
      var plaats_eigenaar_icon = "";
      switch (oRs("ins_alg_ruimte_type").Value)
      {
        case "R" : plaats_eigenaar_icon = I("fa-dot-circle") + "&nbsp;"; break;
        case "T" : plaats_eigenaar_icon = I("fa-road") + "&nbsp;"; break;
        case "W" : plaats_eigenaar_icon = I("fa-user-circle") + "&nbsp;"; break;
        case "A" : plaats_eigenaar_icon = I("fa-users") + "&nbsp;"; break;
        case "P" : plaats_eigenaar_icon = I("fa-user") + "&nbsp;"; break;
      }
      var flexkenmerken = LIST_KENMERK_COL(oRs, {kmcol: "insflex"});

      return "<div class='listbodykop'>" + remark + plaats_eigenaar_icon + safe.html(oRs("plaats_eigenaar").Value) + flexkenmerken + "</div>";
    }
  };

  function fnAside(oRs)
  {
    return fronto ? (oRs("res_rsv_deel_key").Value ? "R" : null) : safe.html(oRs("reserveerbaar").Value);
  }

  function fnrowClass(oRs)
  {
    var lclass="";
    if (grp_sel != "" || all_grp || ins_key > -1)
    {
      var recent = new Date();
        recent.setMinutes(recent.getMinutes() - S("mld_melding_recent"));
        var oRs2 = Oracle.Execute(
          "SELECT MAX(t.fac_tracking_datum) recentdatum"
          + " FROM fac_tracking t"
          + ", fac_srtnotificatie sn"
          + " WHERE sn.fac_srtnotificatie_xmlnode = 'melding'"
          + " AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
          + " AND t.fac_tracking_refkey IN "
          +   "(SELECT mld_melding_key"
          +   " FROM mld_melding_object"
          +   " WHERE ins_deel_key = " + oRs("ins_deel_key").Value + ")"
        );
        if (!oRs2.eof)
        {
          var mld_recent = new Date(oRs2("recentdatum").Value);
          if (mld_recent > recent)
          {
            lclass = (lclass ? lclass += " recentlychangedmld" : " recentlychangedmld");
          }
        }
        oRs2.Close();
    }
    return lclass;
  }
  function fnrowClassGrp(oRs)
  {
    if (ins_score_enabled && oRs("ins_deel_mjb_score1").Value != null)
    {
      return safe.htmlattr("dcscore" + (oRs("ins_deel_mjb_score1").Value).toString().replace(".", "_"));
    }
    return "";
  }
  function fnGereserveerdVanTot(oRs)
  {
      var res_van_str = fncolsubHeader(oRs);
      if (oRs("res_rsv_deel_key").Value)
      {
          res_van = new Date(oRs("res_rsv_deel_van").Value);
          res_tot = new Date(oRs("res_rsv_deel_tot").Value);
          res_van_str += "<div class='listbodykop'>" + L("lcl_res_reservation") + " " + toDateTimeString(res_van, true) + " " + L("lcl_mjb_through") + " " + toDateTimeString(res_tot, true) + "</div>";
      }
      return res_van_str;
  }
  function fnAsideCalls(oRs) {
        var returnval = 0;
        var tsql = "SELECT m.mld_melding_key"
              + "  FROM mld_melding_object mo"
              + "     , mld_melding m"
              + " WHERE mo.mld_melding_object_verwijder IS NULL"
              + "   AND mo.mld_melding_key = m.mld_melding_key"
              + "   AND m.mld_melding_status IN (0, 2, 4, 7)"  // lopende meldingen
              + "   AND mo.ins_deel_key = " + oRs("ins_deel_key").value;
        if (S("cnd_gebreken_srtdisc_key") != -1)
        {
            tsql += " UNION "
                  + "SELECT m.mld_melding_key"
                  + "  FROM mld_melding_object mo"
                  + "     , mld_melding m"
                  + "     , mld_stdmelding s"
                  + "     , mld_discipline d"
                  + " WHERE mo.mld_melding_key = m.mld_melding_key"
                  + "   AND mo.mld_melding_object_verwijder IS NULL"
                  + "   AND m.mld_stdmelding_key = s.mld_stdmelding_key"
                  + "   AND s.mld_ins_discipline_key = d.ins_discipline_key"
                  + "   AND m.mld_melding_status = 5" // afgemelde melding
                  + "   AND mo.ins_deel_key = "  + oRs("ins_deel_key").value
                  + "   AND d.ins_srtdiscipline_key = " + S("cnd_gebreken_srtdisc_key");
        }
        tsql = "SELECT COUNT(*) aantal FROM (" + tsql + ")";
        tsql_oRs = Oracle.Execute(tsql);
        if (!tsql_oRs.Eof)
        {
          returnval = tsql_oRs("aantal").Value;
        }
        tsql_oRs.Close();
        return returnval;
  }

  if (fronto) //uitleenregistratie
  {
    // Start building the query to fetch all objects satisfying
    var sql = ins.getobjectinspect_sql(autfunction,
               { urole : urole,
                 outputmode: outputmode,
                 showall: showall,
                 loc_key_arr: (locatie_key != -1 ?    [locatie_key]    : []),
                 bld_key_arr: (gebouw_key != -1 ?     [gebouw_key]     : []),
                 terr_key_arr: (terrein_key != -1 ?   [terrein_key]    : []),
                 flr_key_arr: (verdieping_key != -1 ? [verdieping_key] : []),
                 room_key_arr: room_key_arr,
                 wpl_key: (wpl_key != -1 ? wpl_key : null),
                 deel: (deel != ""? deel : null),
                 disc_key_arr: (disc_key != -1 ? [disc_key] : []),
                 insgroup_key_arr: (insgroup_key != -1 ? [insgroup_key] : []),
                 objsrt_key_arr: (objsrt_key != -1 ? [objsrt_key] : []),
                 dep_key: (dep_key != -1 ? dep_key : null),
                 persoon_key: (persoon_key != -1 ? persoon_key : null),
                 cpersoon_key: (cpersoon_key != -1 ? cpersoon_key : null),
                 mld_key: (mld_key != -1 ? mld_key : null),
                 fgraph: fgraph,
                 ins_key: (ins_key != -1 ? ins_key : null),
                 parent_key: (parent_key != -1 ? parent_key : null),
                 koppel_key: (koppel_key != -1 ? koppel_key : null),
                 comp_key: (comp_key != -1 ? comp_key : null),
                 checkout: checkout,
                 mobile: true,
                 insObjIncl: insObjIncl,
                 expObjIncl: expObjIncl,
                 insLentOut: insLentOut,
                 insAvail: insAvail,
                 inacObjIncl: inacObjIncl,
                 insPhotoIncl: insPhotoIncl,
                 embedded: (embedded != -1? embedded : null),
                 tiny: (tiny != -1? tiny : null)
               }
             );
    if (all_grp)
    {
     sql = "SELECT *"
         + " FROM (" + sql + ")"
         + " ORDER BY 3, 2, 1";
    }
    else if (grp_sel)
    {
     sql = "SELECT *"
         + " FROM (" + sql + ")"
         + " WHERE ins_disc_oms || ' ' || ins_groep_oms = " + safe.quoted_sql(grp_sel)
         + " ORDER BY 3, 2, 1";
    }
    else
    {
     sql = "SELECT COUNT(*) numberInGroup"
         + "     , ins_disc_oms || ' ' || ins_groep_oms ins_groep_oms"
         + " FROM (" + sql + ")"
         + " GROUP BY ins_disc_oms, ins_groep_oms"
         + " ORDER BY ins_disc_oms, ins_groep_oms";
    }
  }
  else
  {
    // Let op: sortering (en groepering) op eerste 3 kolomen
    // Ruimtegebonden objecten
    var sqlR = " SELECT ins_deel_omschrijving"
             + "      , ins_srtdeel_key"
             + "      , ins_deel_opmerking"
             + "      , DECODE (SUBSTR(aog.alg_gebouw_code,    1,1),'_','',     aog.alg_gebouw_code)"
             + "     || DECODE (SUBSTR(aog.alg_verdieping_code,1,1),'_','','-'||aog.alg_verdieping_code)"
             + "     || DECODE (SUBSTR(aog.alg_ruimte_nr,      1,1),'_','','-'||aog.alg_ruimte_nr) plaats_eigenaar"
             + "      , id.ins_deel_key"
             + "      , (SELECT MAX('R') FROM res_deel rd, res_activiteitdiscipline rad WHERE  rd.res_deel_verwijder IS NULL AND rd.res_discipline_key = rad.res_discipline_key AND rd.res_ins_deel_key = id.ins_deel_key AND rad.res_discipline_key != " + S("vis_parking_key") + ") reserveerbaar"
             + "      , id.ins_alg_ruimte_type"
             + "      , id.ins_deel_aantal"
             + "      , id.ins_deel_mjb_score1"
             + "      , id.ins_deel_mjb_score2"
             + "   FROM alg_v_onroerendgoed_gegevens aog"
             + "      , ins_v_deelenonderdeel id"
             + "      , alg_locatie l"
             + "      , alg_district di"
             + (koppel_key > -1
               ? ", (SELECT *"
               + "     FROM ins_deelkoppeling"
               + "    WHERE     ins_deelkoppeling_van_key = " + koppel_key
               + "           OR ins_deelkoppeling_naar_key = " + koppel_key + ") idk"
               : "")
             + "  WHERE id.ins_alg_ruimte_key = aog.alg_ruimte_key"
             + "    AND aog.alg_locatie_key = l.alg_locatie_key"
             + "    AND l.alg_district_key = di.alg_district_key"
             + "    AND id.ins_alg_ruimte_type = 'R'"
             + (mld_key == -1
               ? "    AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
               : "") // Onderdelen bij een melding wel tonen.
             + "    AND id.ins_deel_verwijder IS NULL"
             + "    AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
             + (koppel_key > -1
               ? "  AND idk.ins_deelkoppeling_verwijder IS NULL"
                 + " AND ((     id.ins_deel_key = idk.ins_deelkoppeling_naar_key"
                 + "        AND idk.ins_deelkoppeling_van_key=" + koppel_key
                 + "      )"
                 + "   OR (     id.ins_deel_key = idk.ins_deelkoppeling_van_key"
                 + "        AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))"
               : "")
             + ((locatie_key > -1)    ? " AND aog.alg_locatie_key = " + locatie_key : "")
             + ((gebouw_key > -1)     ? " AND aog.alg_gebouw_key = " + gebouw_key : "")
             + ((verdieping_key > -1) ? " AND aog.alg_verdieping_key = " + verdieping_key : "")
             + ((ruimte_key > -1)     ? " AND aog.alg_ruimte_key = " + ruimte_key : "");
    sqlR = discx3d (sqlR,
                    "id.ins_discipline_key",
                    "di.alg_regio_key",
                    "l.alg_district_key",
                    "aog.alg_locatie_key",
                    "aog.alg_gebouw_key",
                    "aog.alg_verdieping_key",
                    "aog.alg_ruimte_key",
                    "", // b.prs_bedrijf_key:
                    "", // d.prs_afdeling_key:
                    autfunction,
                    (disc_key != -1 ? [disc_key] : []),
                    0);

  	// Terreingebonden objecten
    var sqlT = " SELECT ins_deel_omschrijving"
             + "      , ins_srtdeel_key"
             + "      , ins_deel_opmerking"
             + "      , aog.alg_terreinsector_code || '-' || aog.alg_terreinsector_naam plaats_eigenaar"
             + "      , id.ins_deel_key"
             + "      , (SELECT MAX('R') FROM res_deel rd WHERE  rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
             + "      , id.ins_alg_ruimte_type"
             + "      , id.ins_deel_aantal"
             + "      , id.ins_deel_mjb_score1"
             + "      , id.ins_deel_mjb_score2"
             + "   FROM alg_v_onroerendgoed_gegevens aog"
             + "      , ins_v_deelenonderdeel id"
             + "      , alg_locatie l"
             + "      , alg_district di"
             + (koppel_key > -1
               ? ", (SELECT *"
               + "     FROM ins_deelkoppeling"
               + "    WHERE     ins_deelkoppeling_van_key = " + koppel_key
               + "           OR ins_deelkoppeling_naar_key = " + koppel_key + ") idk"
               : "")
             + "  WHERE id.ins_alg_ruimte_key = aog.alg_terreinsector_key"
             + "    AND aog.alg_locatie_key = l.alg_locatie_key"
             + "    AND l.alg_district_key = di.alg_district_key"
             + "    AND id.ins_alg_ruimte_type = 'T'"
             + (mld_key == -1
               ? "    AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
               : "") // Onderdelen bij een melding wel tonen.
             + "    AND id.ins_deel_verwijder IS NULL"
             + "    AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
             + (koppel_key > -1
               ? "  AND idk.ins_deelkoppeling_verwijder IS NULL"
                 + " AND ((     id.ins_deel_key = idk.ins_deelkoppeling_naar_key"
                 + "        AND idk.ins_deelkoppeling_van_key=" + koppel_key
                 + "      )"
                 + "   OR (     id.ins_deel_key = idk.ins_deelkoppeling_van_key"
                 + "        AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))"
               : "")
             + ((locatie_key > -1)    ? " AND aog.alg_locatie_key = " + locatie_key : "")
             + ((terrein_key > -1)    ? " AND aog.alg_terreinsector_key = " + terrein_key : "");
    sqlT = discx3d (sqlT,
                    "id.ins_discipline_key",
                    "di.alg_regio_key",
                    "l.alg_district_key",
                    "aog.alg_locatie_key",
                    "aog.alg_terreinsector_key",
                    "", //aog.alg_verdieping_key,
                    "", //aog.alg_ruimte_key,
                    "", // b.prs_bedrijf_key:
                    "", // d.prs_afdeling_key:
                    autfunction,
                    (disc_key != -1 ? [disc_key] : []),
                    0);

    // Werkplekgebonden objecten
    var sqlW = " SELECT ins_deel_omschrijving"
             + "      , ins_srtdeel_key"
             + "      , ins_deel_opmerking"
             + "      , aog.alg_gebouw_code || '-' || aog.alg_verdieping_code || '-' || aog.alg_ruimte_nr || '/' || w.prs_werkplek_volgnr plaats_eigenaar"
             + "      , id.ins_deel_key"
             + "      , (SELECT MAX('R') FROM res_deel rd WHERE  rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
             + "      , id.ins_alg_ruimte_type"
             + "      , id.ins_deel_aantal"
             + "      , id.ins_deel_mjb_score1"
             + "      , id.ins_deel_mjb_score2"
             + "   FROM alg_v_onroerendgoed_gegevens aog"
             + "      , prs_werkplek w"
             + "      , ins_v_deelenonderdeel id"
             + "      , alg_locatie l"
             + "      , alg_district di"
             + (koppel_key > -1
               ? ", (SELECT *"
               + "     FROM ins_deelkoppeling"
               + "    WHERE     ins_deelkoppeling_van_key = " + koppel_key
               + "           OR ins_deelkoppeling_naar_key = " + koppel_key + ") idk"
               : "")
             + "  WHERE id.ins_alg_ruimte_key = w.prs_werkplek_key"
             + "    AND w.prs_alg_ruimte_key = aog.alg_ruimte_key"
             + "    AND aog.alg_locatie_key = l.alg_locatie_key"
             + "    AND l.alg_district_key = di.alg_district_key"
             + "    AND id.ins_alg_ruimte_type = 'W'"
             + (mld_key == -1
               ? "    AND id.ins_deel_parent_key " + ((ins_parent_key > -1) ? "="+ins_parent_key : "IS NULL")
               : "") // Onderdelen bij een melding wel tonen.
             + "    AND id.ins_deel_verwijder IS NULL"
             + (koppel_key > -1
               ? "  AND idk.ins_deelkoppeling_verwijder IS NULL"
                 + " AND ((     id.ins_deel_key = idk.ins_deelkoppeling_naar_key"
                 + "        AND idk.ins_deelkoppeling_van_key=" + koppel_key
                 + "      )"
                 + "   OR (     id.ins_deel_key = idk.ins_deelkoppeling_van_key"
                 + "        AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))"
               : "")
             + ((locatie_key > -1)    ? " AND aog.alg_locatie_key = " + locatie_key : "")
             + ((gebouw_key > -1)     ? " AND aog.alg_gebouw_key = " + gebouw_key : "")
             + ((verdieping_key > -1) ? " AND aog.alg_verdieping_key = " + verdieping_key : "")
             + ((ruimte_key > -1)     ? " AND aog.alg_ruimte_key = " + ruimte_key : "");

    sqlW = discx3d (sqlW,
                    "id.ins_discipline_key",
                    "di.alg_regio_key",
                    "l.alg_district_key",
                    "aog.alg_locatie_key",
                    "aog.alg_gebouw_key",
                    "aog.alg_verdieping_key",
                    "aog.alg_ruimte_key",
                    "", // b.prs_bedrijf_key:
                    "", // d.prs_afdeling_key:
                    autfunction,
                    (disc_key != -1 ? [disc_key] : []),
                    0);


    // Afdelingsgebonden objecten, niet in alle gevallen meenemen
    // TODO (ooit): beperken tot afdelingen met personen met werkplekken binnen de scope.
    var sqlA = " SELECT ins_deel_omschrijving"
             + "      , ins_srtdeel_key"
             + "      , ins_deel_opmerking"
             + "      , a.prs_afdeling_omschrijving plaats_eigenaar"
             + "      , id.ins_deel_key"
             + "      , (SELECT MAX('R') FROM res_deel rd WHERE  rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
             + "      , id.ins_alg_ruimte_type"
             + "      , id.ins_deel_aantal"
             + "      , id.ins_deel_mjb_score1"
             + "      , id.ins_deel_mjb_score2"
             + "   FROM ins_v_deelenonderdeel id"
             + "      , prs_v_afdeling a"
             + "      , prs_v_afdeling_boom boom"
             + "      , prs_bedrijf b"
             + (koppel_key > -1
               ? ", (SELECT *"
               + "     FROM ins_deelkoppeling"
               + "    WHERE     ins_deelkoppeling_van_key = " + koppel_key
               + "           OR ins_deelkoppeling_naar_key = " + koppel_key + ") idk"
               : "")
             + "  WHERE id.ins_alg_ruimte_key = a.prs_afdeling_key"
             + "    AND a.prs_bedrijf_key = b.prs_bedrijf_key"
             + "    AND a.prs_afdeling_key = boom.prs_afdeling_key"
             + "    AND id.ins_alg_ruimte_type = 'A'"
             + (mld_key == -1
               ? "    AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
               : "") // Onderdelen bij een melding wel tonen.
             + "    AND id.ins_deel_verwijder IS NULL"
             + "    AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
             + (koppel_key > -1
               ? "  AND idk.ins_deelkoppeling_verwijder IS NULL"
                 + " AND ((     id.ins_deel_key = idk.ins_deelkoppeling_naar_key"
                 + "        AND idk.ins_deelkoppeling_van_key=" + koppel_key
                 + "      )"
                 + "   OR (     id.ins_deel_key = idk.ins_deelkoppeling_van_key"
                 + "        AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))"
               : "")
             + ((afd_key > -1)        ? " AND id.ins_alg_ruimte_key = " + afd_key : "");
    sqlA = discx3d (sqlA,
                    "id.ins_discipline_key",
                    "", //"di.alg_regio_key",
                    "", //"l.alg_district_key",
                    "", //"aog.alg_locatie_key",
                    "", //"aog.alg_gebouw_key",
                    "", //"aog.alg_verdieping_key",
                    "", //"aog.alg_ruimte_key",
                    "b.prs_bedrijf_key",
                    "boom.prs_afdeling_key",
                    autfunction,
                    (disc_key != -1 ? [disc_key] : []),
                    1);


    // Persoonsgebonden objecten
    // Neemt de ORG-scope mee, maar ook de plaatscope via de werkplekken:
    // als de persoon binnen de scope een wp heeft, dan wordt die getoond
    var sqlP = " SELECT id.ins_deel_omschrijving"
             + "      , id.ins_srtdeel_key"
             + "      , id.ins_deel_opmerking"
             + "      , pf.prs_perslid_naam_friendly plaats_eigenaar"
             + "      , id.ins_deel_key"
             + "      , (SELECT MAX('R') FROM res_deel rd WHERE  rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
             + "      , id.ins_alg_ruimte_type"
             + "      , id.ins_deel_aantal"
             + "      , id.ins_deel_mjb_score1"
             + "      , id.ins_deel_mjb_score2"
             + "   FROM ins_v_deelenonderdeel id"
             + "      , prs_v_perslid_fullnames_all pf"
             + (koppel_key > -1
               ? ", (SELECT *"
               + "     FROM ins_deelkoppeling"
               + "    WHERE     ins_deelkoppeling_van_key = " + koppel_key
               + "           OR ins_deelkoppeling_naar_key = " + koppel_key + ") idk"
               : "")
             + "  WHERE id.ins_alg_ruimte_key = pf.prs_perslid_key"
             + "    AND id.ins_alg_ruimte_type = 'P'"
             + "    AND id.ins_deel_verwijder IS NULL"
             + "    AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
             + (koppel_key > -1
               ? "  AND idk.ins_deelkoppeling_verwijder IS NULL"
                 + " AND ((     id.ins_deel_key = idk.ins_deelkoppeling_naar_key"
                 + "        AND idk.ins_deelkoppeling_van_key=" + koppel_key
                 + "      )"
                 + "   OR (     id.ins_deel_key = idk.ins_deelkoppeling_van_key"
                 + "        AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))"
               : "")
             + (mld_key == -1
               ? "    AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
               : "") // Onderdelen bij een melding wel tonen.
             + (prs_key > -1
               ? "    AND id.ins_alg_ruimte_key = " + prs_key
               : "")
             + (eigen_obj
               ? "    AND id.ins_discipline_key IN (SELECT w.ins_discipline_key"
                 + "                                  FROM fac_v_webgebruiker w"
                 + "                                     , fac_functie f"
                 + "                                 WHERE w.fac_functie_key = f.fac_functie_key"
                 + "                                   AND f.fac_functie_code = 'WEB_INSMIN'"
                 + "                                   AND w.prs_perslid_key = " + prs_key
                 + "                               )"
                : "");

      var v_flexparams = { inspect: 0
                         , multiflex: true
                         , ins_deel: "recs"
                         }
      var insFlexParams = ins.ins_deel_flex_params(1, v_flexparams);

    sql = "SELECT recs.* "
        + "     , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
        + "     , " + lcl.xsql('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')         + " ins_groep_oms"
        + "     , " + lcl.xsql('disc.ins_discipline_omschrijving', 'disc.ins_discipline_key') + " ins_disc_oms"
        + "     , sg.ins_discipline_key"
        + "     , recs.ins_deel_aantal"
        + "    || CASE"
        + "       WHEN sd.ins_srtdeel_eenheid IS NOT NULL"
        + "       THEN ' ' || sd.ins_srtdeel_eenheid"
        + "       ELSE ''"
        + "       END hoeveelheid"
        + "     , (SELECT MAX(mld_melding_datum)"
        + "          FROM mld_melding m"
        + "             , mld_stdmelding std"
        + "             , mld_discipline md"
        + "         WHERE m.mld_stdmelding_key = std.mld_stdmelding_key"
        + "           AND std.mld_ins_discipline_key = md.ins_discipline_key"
        + "           AND m.mld_melding_key IN (SELECT mld_melding_key"
        + "                                       FROM mld_melding_object"
        + "                                      WHERE ins_deel_key = recs.ins_deel_key)"
        + "           AND m.mld_melding_parentkey IS NULL"
        + "           AND md.ins_srtdiscipline_key = " + S("cnd_gebreken_srtdisc_key") + ")" // gebrekmelding
        + "           gebrekdatum"
        + ( insFlexParams.anyflex
          ? insFlexParams.sql
          : ", NULL insflex"
          )
        + " FROM ("
                  + sqlR
                  + (metWerkplekgebonden  ? " UNION " + sqlW : "")
                  + (metPersoonsgebonden  ? " UNION " + sqlP : "")
                  + (metAfdelingsgebonden ? " UNION " + sqlA : "")
                  + (metTerreingebonden   ? " UNION " + sqlT : "")
        + "      ) recs"
        + "      , ins_srtdeel sd"
        + "      , ins_srtgroep sg"
          + "    , ins_discipline disc"
        + " WHERE sd.ins_srtdeel_key = recs.ins_srtdeel_key"
        + "   AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
        + "   AND sg.ins_discipline_key = disc.ins_discipline_key"
        + ((prs_key > -1)        ? " AND recs.ins_alg_ruimte_type = 'P'" : "")
        + ((mld_key > -1)        ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key + ")" : "")
        + ((ins_key > -1)        ? " AND id.ins_deel_key = " + ins_key : "")
    if (ins_parent_key > 0 || koppel_key > 0 || mld_key > 0 || (all_grp && !grp_sel))
    {
      sql += " ORDER BY ins_deel_omschrijving, ins_srtdeel_omschrijving, ins_deel_opmerking";
    }
    else if (grp_sel)
    {
      sql += "   AND ins_discipline_omschrijving || ' ' || ins_srtgroep_omschrijving = " + safe.quoted_sql(grp_sel)
          +  " ORDER BY ins_deel_omschrijving, ins_srtdeel_omschrijving, ins_deel_opmerking";
    }
    else
    {
      sql = "SELECT COUNT(*) numberInGroup"
          + "     , ins_disc_oms || ' ' || ins_groep_oms ins_srtgroep_omschrijving"
          + "  FROM (" + sql + ")"
          + " GROUP BY ins_disc_oms, ins_groep_oms"
          + " ORDER BY ins_disc_oms, ins_groep_oms";
    }
  }
  var rst = new ResultsetTable({sql: sql,
                                keyColumn: "ins_deel_key",
                                linkColumn: fncolLink,
                                rowClass: ((grp_sel || all_grp) && !fronto ? fnrowClassGrp : fnrowClass),
                                singleLink: true,
                                groupColumn: ((ins_parent_key == -1 && koppel_key == -1 && mld_key == -1 && !grp_sel && !all_grp)? fncolGroup : ""),
                                groupSelect:     "",
                                numberInGroup:   (grp_sel || all_grp ? null:"numberInGroup"),
                                detailColumn:    ins_parent_key > 0 || koppel_key > 0 || mld_key > 0 || grp_sel || all_grp ?fncolDetail:null,
                                headerColumn:    ins_parent_key > 0 || koppel_key > 0 || mld_key > 0 || grp_sel || all_grp ?"ins_deel_omschrijving":"",
                                asideColumn:     grp_sel ? fnAside: ( all_grp ? fnAsideCalls:null),
                                subheaderColumn: ins_parent_key > 0 || koppel_key > 0 || mld_key > 0 || grp_sel || all_grp ?(fronto?fnGereserveerdVanTot:fncolsubHeader):"",
                                ID: "deelstable",
                                showAll: true
                                });

  var cnt = rst.processResultset();

      CONTENT_END();
    FOOTER();
  PAGE_END();
PDA_PAGE_END(); %>
	</body>
</html>
<% ASPPAGE_END(); %>
