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

    File:               res_edit_objcat.asp
    Remark:             allow adding of res_deel and res_artikel

    Parameters:
        rsv_ruimte_key  required, existing rsv_ruimte_key. Al het andere zoeken we er zelf bij
        urole           required
    Context:            iframe van res_reservering.asp

*/
 %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="res.inc" -->
<!-- #include file="../shared/iface.inc" -->
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../shared/kpl_ksrt_validate.inc" -->
<!-- #include file="res_plan_obj.inc" -->
<!-- #include file="res_cat.inc" -->

<%
FCLTHeader.Requires({ plugins: ["jQuery"],
                      js: ["date.js", "jquery-ui.js", "num2curr.js", "./res_plan.js"]})

var urole = getQParamSafe("urole");
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key");
var res_artikel_key = getQParamInt("res_artikel_key", -1);
var verynew = getQParamInt("verynew", 0);
res.res_set_dialect(rsv_ruimte_key);

var res_deel_key = getQParamInt("res_deel_key", -1); // Default
var disc_key = getQParamInt("disc_key", -1);  // Auto openklappen
if (res_deel_key > 0)
{
  sql = "SELECT res_discipline_key"
      + "  FROM res_deel"
      + " WHERE res_deel_key = " + res_deel_key;
  oRs = Oracle.Execute(sql);
  disc_key = oRs("res_discipline_key").value;
}

// Zo snel mogelijk relevante basisinformatie opzoeken
sql = "SELECT res_reservering_key"
    + "     , res_rsv_ruimte_verwijder"
    + "     , alg_ruimte_key, res_ruimte_opstel_key"
    + "     , res_rsv_ruimte_van, res_rsv_ruimte_tot"
    + "     , trunc(res_rsv_ruimte_tot) - trunc(res_rsv_ruimte_van) meerdaags"
    + "     , prs_kostenplaats_key"
    + "     , res_activiteit_key"
    + "  FROM res_rsv_ruimte"
    + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
oRs = Oracle.Execute(sql);
var resdeleted = (oRs("res_rsv_ruimte_verwijder").value != null);
var res_van = new Date(oRs("res_rsv_ruimte_van").value);
var res_tot = new Date(oRs("res_rsv_ruimte_tot").value);
var res_meerdaags = oRs("meerdaags").value!=0;
var activiteit_key = oRs("res_activiteit_key").value;

if (oRs("alg_ruimte_key").value != null)
  restype = "CV"
else if (oRs("res_ruimte_opstel_key").value != null)
  restype = "R"

alg_ruimte_key = oRs("alg_ruimte_key").value || -1;
var has_kostenplaats_key = oRs("prs_kostenplaats_key").value != null;
oRs.Close()

var fronto = (urole == "fo");
var backo = (urole == "bo");
var frontend = (urole == "fe");

var portal_alg_ruimte_key = getQParamInt("portal_alg_ruimte_key", -1);

if (urole == "fo")
  var autfunction = "WEB_RESFOF";
else if (urole == "bo")
  var autfunction = "WEB_RESBOF";
else // fe
  var autfunction = "WEB_RESUSE";

var authparams = user.checkAutorisation(autfunction)

%>

<html>
  <head>
<%  FCLTHeader.Generate() %>
<%
    // Bereken dynamisch breedte blokjes
    var width_px = getQParamInt("width_px", 1024);
    var nr_days = Math.round(1 + (res_tot.midnight() - res_van.midnight()) / 24 / 60 / 60 / 1000);

    var hour_px = res.hour_px(width_px - 250, nr_days);

%>
    <script type="text/javascript">
      var hour_px = <%=hour_px%>;
      var res_cat_t1 = <%=safe.jsfloat(S("res_cat_t1"))%>;
      var res_cat_t2 = <%=safe.jsfloat(S("res_cat_t2"))%>;

      // Worden in res_plan.js gebruikt:
      var res_van = new Date(<%=res_van.getTime()%>);
      var res_tot = new Date(<%=res_tot.getTime()%>);
    </script>

<%
    var starttime_room = S("res_t1");
    var endtime_room = S("res_t2");
    sql = "SELECT COALESCE(ru.res_ruimte_begintijd, " + S("res_t1") + ") begintijd"
        + ",      COALESCE(ru.res_ruimte_eindtijd, " + S("res_t2") + ") eindtijd"
        + ",      ro.res_ruimte_key"
        + " FROM res_ruimte ru"
        + ",     res_rsv_ruimte rr"
        + ",     res_ruimte_opstelling ro"
        + " WHERE ru.res_ruimte_key = ro.res_ruimte_key"
        + " AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key"
        + " AND rr.res_rsv_ruimte_key = " + rsv_ruimte_key;
    oRs = Oracle.Execute(sql);
    if (!oRs.eof)
    { // Found, blijkbaar type=='R'
      var starttime_room = oRs("begintijd").value;
      var endtime_room = oRs("eindtijd").value;
      if (starttime_room < S("res_t1")) starttime_room = S("res_t1");
      if (endtime_room > S("res_t2")) endtime_room = S("res_t2");
      if (starttime_room > endtime_room) starttime_room = endtime_room;
      res_ruimte_key = oRs("res_ruimte_key").value;
    }
    else
    {
      res_ruimte_key = -1;
    }
%>

    <script type="text/javascript">
      var rsv_ruimte_key = <%=rsv_ruimte_key%>;
      var urole = "<%=urole%>";
      var backo = <%=backo? 1 : 0%>;
      var fronto = <%=fronto? 1 : 0%>;
      var frontend = (1 == <%=frontend? 1 : 0%>);

      function res_submit_callback(json)
      {
        if (json.success)
          FcltMgr.closeDetail(window, json);
        else
          iface.button.enable("btn_objcat_submit");
      }

      function res_submit()
      {
        if (checkArtikelen(<%=safe.jsfloat(starttime_room)%>, <%=safe.jsfloat(endtime_room)%>))
        {
          $.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackAndThenAlways(res_submit_callback), "json");
          return true;
        }
        else
          return false;
      }

      function res_cancel()
      {
        FcltMgr.closeDetail(window, { cancel: true } );
      }

var new_item_key = 0;  // Globaal
      function res_addcat(elm)
      {
        new_item_key = new_item_key -1;
        var $tr    = $(elm).closest("tr");
        var $clone = $tr.clone();
        var artkey = $tr.attr("id").substring(3);
        var res_rsv = artkey +"_"+ new_item_key;
        // De clone bijwerken..
        $clone.find(':button').parent().remove();  // De toevoeg knop eraf halen.
        $("[id^='inpbh1_c_']",$clone).val("");     // Urenveld leeg maken.
        // Nieuwe unieke id's aan de velden toekennen.
        $("[id^='inpb_c_']",  $clone).attr({id: "inpb_c_"  +res_rsv, name: "inpb_c_"  +res_rsv});
        $("[id^='inpbp_c_']", $clone).attr({id: "inpbp_c_" +res_rsv, name: "inpbp_c_" +res_rsv});
        $("[id^='inpbtp_c_']",$clone).attr({id: "inpbtp_c_"+res_rsv, name: "inpbtp_c_"+res_rsv});
        $("[id^='inpbh1_c_']",$clone).attr({id: "inpbh1_c_"+res_rsv, name: "inpbh1_c_"+res_rsv});
        $("[id^='inpbm1_c_']",$clone).attr({id: "inpbm1_c_"+res_rsv, name: "inpbm1_c_"+res_rsv});
        // Voeg clone onder de huidige regel toe.
        $tr.after($clone);
        $("[id^='inpbh1_c_']",$clone).focus(); // Zet cursor in urenveld.

        FcltMgr.resized();
      }

      function showTotPriceArt_ex(elm)
      {
        var $tr     = $(elm).closest("tr");
        var inpb_c  = $("[id^='inpb_c_']",  $tr).attr("id");
        var res_rsv = inpb_c.substr(7);
        showTotPriceArt(res_rsv);
      }

      function checkResTime(elm, art_str)
      {
        if (parseFloat($("#inpb_c_" + art_str).val()) > 0)
        {
          var lbeginart = parseFloat($("#inpbb1_c_" + art_str).val());
          var leindart = parseFloat($("#inpbe1_c_" + art_str).val());

          var lhour = parseInt($("#inpbh1_c_" + art_str).val(), 10);
          var lmin = parseInt($("#inpbm1_c_" + art_str).val(), 10);
          var lrestime = lhour + lmin/60;
          var hourhasfocus = $("#inpbh1_c_" + art_str).is(":focus");
          var minhasfocus = $("#inpbm1_c_" + art_str).is(":focus");
          var articlehasfocus = hourhasfocus || minhasfocus;
          if (!articlehasfocus && (lrestime < lbeginart || lrestime > leindart))
          {
            elm.select();
            // begintijd en eindtijd van float naar (HH:MM - HH:MM)
            var lhours = Math.floor(lbeginart).toString();
            var lminutes = ((lbeginart - Math.floor(lbeginart)) * 60);
            var lbegin = lhours.toString() + ":" + (lminutes < 10 ? "0" + lminutes : lminutes).toString();
            lhours = Math.floor(leindart).toString();
            lminutes = ((leindart - Math.floor(leindart)) * 60);
            var leind = Math.floor(leindart).toString() + ":" + (lminutes < 10 ? "0" + lminutes : lminutes).toString();
            alert(L("lcl_res_between_startend").format(lbegin, leind));
          }
        }
      }
    </script>
  </head>

  <body id="editbody">
<%  var buttons =  [ {title: L("lcl_submit"), icon: "opslaan.png", action:"res_submit()", singlepress: true, id:"btn_objcat_submit" },
                     {title: L("lcl_cancel"), icon: "undo.png", action:"res_cancel()" } ];
    IFRAMER_HEADER(L("lcl_res_frame_voorziening"), buttons);
%>
    <div id="edit">
      <form name="u2" method="post" action="res_edit_objcat_save.asp?urole=<%=urole%>&rsv_ruimte_key=<%=rsv_ruimte_key%>&verynew=<%=verynew%>">
<%

        //    ==========================================================================
        //    Description:        Bouwen van het voorzieningen edit blok voor een reservering

        // Tel in elke catalogus hoeveel objecten in de gekozen ruimte echt gereservererd kunnen worden.
        // Als dat er nul zijn dan tonen we de discipline namelijk niet.
        var params = {  alg_ruimte_key : alg_ruimte_key,
                        res_ruimte_key : res_ruimte_key,
                        select_fields  : " count(*) ",
                        sdisc          : "dis.ins_discipline_key",
                        autfunction    : autfunction,
                        res_tot        : res_tot
                    };
        var sql_aantal = " ( " + get_res_deel_sql(params) + ") aantal ";
        sql= "SELECT dis.ins_discipline_key,"
           + "       "+ lcl.xsqla('dis.ins_discipline_omschrijving','dis.ins_discipline_key') +","
           + "       DIS.ins_discipline_kpnverplicht,"
           +         sql_aantal
           + "  FROM res_v_aanwezigdiscipline dis"
           + "  WHERE ins_discipline_min_level = 1"
           + "   AND dis.ins_discipline_key IN("
           + "        SELECT g.ins_discipline_key FROM fac_v_webgebruiker g, fac_functie f "
           + "         WHERE g.fac_functie_key = f.fac_functie_key "
           + "           AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
           + "           AND g.fac_gebruiker_alg_level_write < 9"
           + "           AND g.fac_gebruiker_prs_level_write < 9"
           + "           AND g.prs_perslid_key = " + user_key
           + "        )"
           + "   AND dis.ins_discipline_key IN"
           + "        (SELECT res_discipline_key" /* DISTINCT */
           + "           FROM res_deel R, ins_deel D"
           + "          WHERE r.res_deel_verwijder IS NULL"
           + "            AND r.res_ins_deel_key = d.ins_deel_key)"
           + "   AND EXISTS (SELECT res_activiteit_key FROM res_activiteitdiscipline rad"
           + "          WHERE rad.res_discipline_key = dis.ins_discipline_key"
           + "          AND rad.res_activiteit_key = " + activiteit_key
           + "        )";

        if (disc_key > 0 && res_deel_key < 0) sql = sql  + " AND dis.ins_discipline_key = " + disc_key;

        if (S("vis_parking_key") != -1) sql = sql + " AND dis.ins_discipline_key != " + S("vis_parking_key");

        if (S("res_fe_discs_only_in_res") != -1 && !fronto && !backo && restype == 'CV')
          sql = sql  + " AND dis.ins_discipline_key NOT IN (" + S("res_fe_discs_only_in_res") + ") ";

        sql = sql  + " ORDER BY ins_discipline_volgnr, 2";
        oRs1 = Oracle.Execute(sql);

        first = true;
        while(!oRs1.eof)
        {
          var curr_disc_key = oRs1("ins_discipline_key").value;
          var existing = false; // zodadelijk highlighten
          sql = "SELECT COUNT(res_rsv_deel_key) aantal"
              + "  FROM res_rsv_deel rrd"
              + "     , res_deel rd"
              + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key
              + "   AND res_rsv_deel_verwijder IS NULL"
              + "   AND rrd.res_deel_key = rd.res_deel_key"
              + "   AND res_discipline_key = " + curr_disc_key

          var oRs2 = Oracle.Execute(sql);
          existing = (oRs2("aantal").value > 0);
          if (oRs1("aantal").value != 0)
          {
            if (first)
            {
              BLOCK_START("resObj",L("lcl_res_objects") + " <a href='javascript:openLegenda()'><img class='details' src='../Pictures/legenda.png' title='"+L("lcl_res_legenda")+"'></a>");
%>
              <tr>
                <td>
<%                if (res_van.midnight().getTime() != res_tot.midnight().getTime())
                  {
                      Response.Write(toDateString(res_van.midnight()));
                      Response.Write(" " + L("lcl_res_totenmet") + " " + toDateString(res_tot.midnight()));
                  }
%>              </td>
              </tr>
<%            first = false;
            }
%>
            <tr>
              <td>
<%              if (!has_kostenplaats_key && oRs1("ins_discipline_kpnverplicht").value == 1)
                {
                    var loading_txt = L("lcl_select_account_disc");
%>
                  <div class="objcatline notavailable">
                    <%=safe.html(oRs1("ins_discipline_omschrijving").value)%>
                    <%=(existing? " (" + oRs2("aantal").value + ")" : "")%>
<%              }
                else
                {
                    var loading_txt = L("lcl_shared_loading");

%>
                  <div class="objcatline <%=(existing? " existing" : "")%>
                                         <%=disc_key != curr_disc_key? " closed" : ""%>"
                       onClick="ItemChoosed_obj(this, 'div_dis<%=curr_disc_key%>',<%=curr_disc_key%>, <%=hour_px%>)">
                    <a>
                      <%=safe.html(oRs1("ins_discipline_omschrijving").value)%>
                      <%=(existing? " (" + oRs2("aantal").value + ")" : "")%>
                    </a>
<%              } %>
                    <div class="objcatdiv" id="div_dis<%=curr_disc_key%>" onClick="FcltMgr.stopPropagation(event)">
<%                    // Hier wordt met Ajax obj_schedule.asp code tussen geplakt bij openklappen
                      if (disc_key == curr_disc_key)
                        make_plan_obj(curr_disc_key, res_van, res_tot,
                                        { hour_px: hour_px,
                                          rsv_ruimte_key: rsv_ruimte_key,
                                          res_deel_key: res_deel_key,
                                          autfunction: autfunction
                                        });
                      else
                        Response.Write(loading_txt);
%>
                    </div>
                  </div>
              </td>
            </tr>
<%        }
          oRs1.MoveNext();
        }
        oRs1.close();
        if (!first)
          BLOCK_END();
%>
        <script>
          function openLegenda()
          {
              params = { width: 125,
                         resizable: false,
                         position: ['right','top'],
                         title: '<%=L("lcl_res_legenda")%>'
                       }
              $('div#legenda').dialog(params).dialog('open');
          }
        </script>
        <div id="legenda" style="display:none";>
          <table width="100%" border="0">
            <tr>
              <td align="right"><img src="../Pictures/room_free.gif"></td>
              <td><% = L("lcl_free") %></td>
            </tr>
            <tr>
              <td align="right"><img src="../Pictures/room_opt.gif"></td>
              <td><% = L("lcl_optie") %></td>
            </tr>
            <tr>
              <td align="right"><img src="../Pictures/room_def.gif"></td>
              <td><% = L("lcl_def") %></td>
            </tr>
            <tr>
              <td align="right"><img src="../Pictures/room_blk.gif"></td>
              <td><% = L("lcl_blokkade") %></td>
            </tr>
            <tr>
              <td align="right"><img src="../Pictures/room_vvl.gif"></td>
              <td><% = L("lcl_vervallen") %></td>
            </tr>
          </table>
        </div>

<%      //    ==========================================================================
        //    Description:        Bouwen van het catering edit blok voor een reservering

        BLOCK_START("resCat",L("lcl_consumable_objects"));

        if (res_meerdaags && !S("res_allow_multi_cat"))
        {
%>			<div class="warning"><%=L("lcl_res_allow_multi_cat")%></div><%
        }
        else
        { // begin: Toon catering

        // Bepaal de catalogie waar wij rechten op hebben en die mogelijk zijn in 'onze' ruimte
        fixed_room = (portal_alg_ruimte_key > 0);

        sql = "SELECT d.ins_discipline_key"
            + "     , "+ lcl.xsqla('d.ins_discipline_omschrijving','d.ins_discipline_key')
            + "     , d.ins_discipline_kpnverplicht"
            + "  FROM RES_v_aanwezigDISCIPLINE d"
            + " WHERE ins_discipline_min_level = 2"
            + "   AND d.ins_discipline_key IN ("
            + "         SELECT ins_discipline_key"
            + "           FROM fac_v_webgebruiker g,"
            + "                fac_functie f "
            + "          WHERE g.fac_functie_key = f.fac_functie_key "
            + "            AND f.fac_functie_code = " + safe.quoted_sql(autfunction) + " "
            + "            AND g.prs_perslid_key = " + user_key
            + "            AND fac_gebruiker_prs_level_write < 9"
            + "            AND fac_gebruiker_alg_level_write < 9"
            + "            AND d.ins_discipline_key IN"
            // RES_V_SRTARTIKEL_ONRGOED i.p.v. res_v_srtartikel_ruimte:
            // niet alleen kijken naar max(prio) 'R' (ruimte) maar ook naar onderliggende prio's 'L' (locatie) en 'G' (gebouw)
            // In de view res_v_srtartikel_ruimte wordt alleen naar de maximale prio gekeken van een bepaalde alg_ruimte_key
            + " (SELECT res_discipline_key"
            + "    FROM res_v_srtartikel_onrgoed "
            + "   WHERE 1 = 1 "
        if (fixed_room) sql += " AND alg_onrgoed_niveau = 'R'";
        if (alg_ruimte_key > 0)
             sql += " AND alg_ruimte_key = " + alg_ruimte_key + ")) ";
        else
        {
          if (rsv_ruimte_key > 0)
            sql += " AND alg_ruimte_key IN"
                + " (SELECT alg_ruimte_key"
                + "    FROM res_v_rsv_ruimte_2_alg_ruimte "
                + "   WHERE res_alg_ruimte_verwijder IS NULL "
                + "     AND res_rsv_ruimte_key = " + rsv_ruimte_key + ")))"
        }
        sql += "   AND EXISTS (select res_activiteit_key from res_activiteitdiscipline rad"
             + "          WHERE rad.res_discipline_key = d.ins_discipline_key"
             + "          AND rad.res_activiteit_key = " + activiteit_key
             + "        )"
             + " ORDER BY ins_discipline_volgnr, 2";
        oRs = Oracle.Execute(sql);

        while (!oRs.eof)
        {
          var curr_disc_key = oRs("ins_discipline_key").value;
          var existing = false; // zodadelijk highlighten
          // Bepaal aantal artikelen bij een reservering inclusief eventueel meegegeven artikel via res_artikel_key parameter
          if (rsv_ruimte_key > 0)
          { // Hoeveel gereserveerde artikelen zijn er voor deze reservering.
            sql = "SELECT COUNT(*) aantal"
                + "  FROM res_rsv_artikel rra,"
                + "       res_artikel ra"
                + " WHERE rra.res_rsv_ruimte_key = " + rsv_ruimte_key
                + "   AND res_rsv_artikel_verwijder IS NULL"
                + "   AND rra.res_artikel_key = ra.res_artikel_key"
                + "   AND res_discipline_key = " + curr_disc_key
            var oRs2 = Oracle.Execute(sql);
            var aantal = oRs2("aantal").value;
            if (res_artikel_key > 0)
            { // Zit het meegegeven artikel in deze discipline, dan 1 bij het aantal optellen.
              sql = "SELECT COUNT(*) aantal"
                  + "  FROM res_artikel ra"
                  + " WHERE res_discipline_key = " + curr_disc_key
                  + "   AND ra.res_artikel_key = " + res_artikel_key;
              var oRs2 = Oracle.Execute(sql);
              aantal += oRs2("aantal").value;
            }
            existing = (aantal > 0);
          }
%>
          <tr>
            <td>
<%            if (!has_kostenplaats_key && oRs("INS_DISCIPLINE_KPNVERPLICHT").value == 1)
              {
                var loading_txt = L("lcl_select_account_disc");
%>
                <div class="objcatline notavailable">
                  <%=safe.html(oRs("ins_discipline_omschrijving").Value)%>
<%            }
              else
              {
                var loading_txt = L("lcl_shared_loading");
%>
                <div class="objcatline <%=(existing?" existing ":" closed")%> "
                     onClick="ItemChoosed_cat(this, $('#div_dis'+<%=curr_disc_key%>),<%=curr_disc_key%>, <%=(existing?"true":"false")%>)">
                  <a>
                    <%=safe.html(oRs("ins_discipline_omschrijving").Value)%>
                  </a>
<%            }%>
                  <div class="objcatdiv" id="div_dis<%=curr_disc_key%>" onClick="FcltMgr.stopPropagation(event)">
                    <% // Hier wordt met Ajax res_load_cat.asp code tussen geplakt bij openklappen
                    if (existing)
                         make_cat(curr_disc_key, rsv_ruimte_key, true, res_artikel_key);
                    else
                        Response.Write(loading_txt)
                        %>
                  </div>
                </div>
            </td>
          </tr>
<%        oRs.MoveNext();
        }
        oRs.Close();

        } // einde: Toon catering
        BLOCK_END();
IFACE.FORM_END();
%>
      </form>
    </div>
  </body>
</html>
