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

    File:               res_update_obj.asp
    Description:        update een onderdeel van een object-reservering na wijziging via planbord
    Parameters:
        rsv_deel_key    RES_RSV_DEEL to update
        res_deel_key    Nieuw object
        rsv_van         nieuwe begintijd in uren
        rsv_tot         nieuwe eindtijd in uren
    Context:            Modal dialoog vanuit objecten planbord
    Note:               We ondersteunen drie varianten
                        - CV-reservering (met rsv_ruimte_key==>alg_ruimte_key)
                          Verticaal: We staan toe dat een ander object (res_deel) gekozen wordt
                          Horizontaal: Bij wijzigen tijd waarschuwen we dat andere objecten meegaan
                                       (welbeschouwd wijzigen we res_rsv_ruimte_van en de rest cascadeert)
                        - R-reservering (met rsv_ruimte_key==>res_opstel_key)
                          Verticaal: We staan toe dat een ander object (res_deel) gekozen wordt
                          Horizontaal: Een ander tijdstip staan we niet toe ("Ga maar naar ruimte-planbord)
                        - Parkeerplaats bij afspraak (met bez_bezoekers_key)
                          Verticaal: We staan toe dat een ander object (res_deel) gekozen wordt
                          Horizontaal: Een ander tijdstip staan we niet toe ("Ga maar naar bezoekersscherm")
*/
 %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../shared/iface.inc" -->
<!-- #include file="../shared/save2db.inc" -->
<!-- #include file="res.inc" -->
<%
FCLTHeader.Requires({plugins: ["jQuery"]});

var rsv_deel_key = getQParamInt("rsv_deel_key");
var new_deel_key = getQParamInt("res_deel_key");
var new_van = (new Date).setFloatHours(getQParam("fres_van"), S("res_h"));
var transitParam = buildTransitParam(["rsv_deel_key", "res_deel_key", "fres_van", "frsv_tot"]);

var submitting = getQParamInt("submit", 0) == 1;

sql = "SELECT res_rsv_ruimte_key"
    + "     , bez_bezoekers_key"
    + "     , rrd.res_deel_key"
    + "     , "+ lcl.xsqla('rd.res_deel_omschrijving', 'rd.res_deel_key')
    + "     , res_rsv_deel_van"
    + "     , res_rsv_deel_tot"
    + "  FROM ins_deel d"
    + "     , res_deel rd"
    + "     , res_rsv_deel rrd"
    + " WHERE rrd.res_rsv_deel_key = " + rsv_deel_key
    + "   AND rrd.res_deel_key = rd.res_deel_key"
    + "   AND rd.res_ins_deel_key = d.ins_deel_key" ;
var oRs = Oracle.Execute(sql);
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").value;
var bezoekers_key = oRs("bez_bezoekers_key").value;
var old_van = new Date(oRs("res_rsv_deel_van").value);
var old_tot = new Date(oRs("res_rsv_deel_tot").value);
var old_deel_key = oRs("res_deel_key").value;
var old_deel_oms = oRs("res_deel_omschrijving").value;

if (rsv_ruimte_key) // Bij parkeerplaats is er geen res_rsv_ruimte_key.
  res.res_set_dialect(rsv_ruimte_key);

var new_tot = parseFloat(getQParam("frsv_tot", null));
if (!new_tot)
{
  new_tot = new Date(old_tot);
  new_tot.setTime(new_tot.getTime() + (new_van - old_van))
}

var bTimeChanged = old_van.getHours() != new_van.getHours() || old_van.getMinutes() != new_van.getMinutes();
if (old_deel_key != new_deel_key)
{
  sql = "SELECT "+ lcl.xsqla('rd.res_deel_omschrijving', 'rd.res_deel_key')
      + "  FROM res_deel rd"
      + " WHERE rd.res_deel_key = " + new_deel_key;

  var oRs = Oracle.Execute(sql);
  var new_deel_oms = oRs("res_deel_omschrijving").value;
  old_deel_oms += " > " +  new_deel_oms;
}
%>
<html>
  <head>
<%  FCLTHeader.Generate()
    if (submitting)
    {
      var sqldeel = "UPDATE res_rsv_deel"
                  + "   SET res_deel_key = " + new_deel_key
                  + " WHERE res_rsv_deel_key = " + rsv_deel_key;
      if (!rsv_ruimte_key) // (losse bezoeker met) parkeerplaats. Tijdwijziging hebben we niet toegestaan
      {
        Oracle.Execute( sqldeel );
      }
      else
      {
        var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering
        user.auth_required_or_abort(this_res.canChange);
        check_fail_sql = "";
        if (S("res_fe_allow_dirty") != 1 && this_res.canChangeFEOnly)
        {
          check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
                         + "    raise_application_error (-20000, 'res_m960 "+L("lcl_res_fe_no_dirty")+"');"
                         + " end if;"
        }
        var fields =  [ { dbs: "res_rsv_ruimte_van", typ: "time", val: new_van },
                        { dbs: "res_rsv_ruimte_tot", typ: "time", val: new_tot }
                      ];
        sql = buildUpdate("res_rsv_ruimte", fields) + " res_rsv_ruimte_key = " + rsv_ruimte_key;
        // Nu de echte update.
        // Daarbij ook diverse controles/ updates uitvoeren op 'andere zaken'
        sql = "BEGIN "
            + sql + ";"
            + sqldeel + ";"
            + "  res.set_delen_clean (" + old_deel_key + ", " + old_van.toSQL(true) + ", " + old_tot.toSQL(true) + "); " // als ander object gekozen
            + "  res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
            + "  res.set_ruimtes_clean (" + old_van.toSQL() + "); " // Anderen 'clean' geworden
            + "  res.follow_artikel (" + rsv_ruimte_key + ", " + old_van.toSQL(true) + ", " + old_tot.toSQL(true) + "); " // catering mee verplaatsen
            + "  res.follow_deel (" + rsv_ruimte_key + ", " + old_van.toSQL(true) + ", " + old_tot.toSQL(true) + "); " // objecten mee verplaatsen
            + "  res.follow_afspraak (" + rsv_ruimte_key + ", " + S("res_copy_to_bez") + "); " // bezoekers mee verplaatsen
            + check_fail_sql
            + "END;";
        var err = Oracle.Execute(sql, true);
        if (err.friendlyMsg)
        {
%>        <script>
            alert("<%=safe.jsstring(err.friendlyMsg)%>");
          </script>
<%      }
        else
        {
          shared.trackaction("RESUPD", rsv_ruimte_key,  L("lcl_res_track_cv_shifted_from")
                                               + toDateTimeString(old_van) + "-" + toTimeString(old_tot)
                                               + L("lcl_res_track_cv_shifted_to")
                                               + toTimeString(new_van) + "-" + toTimeString(new_tot)
                                               );
          var sql = "SELECT MAX(res_rsv_deel_dirtlevel) deel_dirtlevel"
                  + "  FROM res_rsv_deel"
                  + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
          oRs = Oracle.Execute(sql);
          if (oRs("deel_dirtlevel") & res.dirtlevel.deel.notavailable)
          {
            var message = L("lcl_res_dirtyobject");
%>        <script>
            alert("<%=safe.jsstring(message)%>");
          </script>
<%
          }
        }
      }

%>    <script>
        FcltMgr.closeDetail(window,  { refresh: true } );
      </script>
<%    Response.End;
    }
%>
  </head>
  <body class="modal" id="mod_resupdateobj">
    <form name="u2"
          action="res_update_obj.asp?submit=1<%=transitParam%>"
          target="hidFrameSubmit"
          method="post">
<%
      var badmsg = "";

      BLOCK_START("", rsv_ruimte_key? L("lcl_res_frame_voorziening") : L("lcl_bez_bezoekers"));
      if (rsv_ruimte_key)
      {
        sql = "SELECT rr.res_rsv_ruimte_key"
         +      ", rr.res_rsv_ruimte_omschrijving"
         +      ", rr.res_rsv_ruimte_van"
         +      ", rr.res_rsv_ruimte_tot"
         +      ", rr.res_reservering_key"
         +      ", rr.res_rsv_ruimte_volgnr"
         +      ", rr.res_ruimte_opstel_key"
         +      ", rr.alg_ruimte_key"
         + " FROM  res_rsv_ruimte rr,"
         +      "  res_deel rd,"
         +      "  res_rsv_deel rrd"
         + " WHERE rrd.res_rsv_deel_key = " + rsv_deel_key
         +      "  AND rrd.res_deel_key = rd.res_deel_key"
         +      "  AND rrd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key";

        var oRs = Oracle.Execute(sql);

        ROFIELDTR("fldresnum", L("lcl_reservation"), oRs("res_reservering_key") + "/" + oRs("res_rsv_ruimte_volgnr"));
        ROFIELDTR("fld", L("lcl_from"), toDateTimeString(oRs("res_rsv_ruimte_van").value) + (bTimeChanged?" > " + toTimeString(new_van):""));
        ROFIELDTR("fld", L("lcl_to"), toDateTimeString(oRs("res_rsv_ruimte_tot").value) + (bTimeChanged?" > " + toTimeString(new_tot):""));
        ROFIELDTR("fldresdesc", L("lcl_descr"), oRs("res_rsv_ruimte_omschrijving").value || "-");
        ROFIELDTR("fld", L("lcl_item"), old_deel_oms);

        if (oRs("res_ruimte_opstel_key").value != null)
        {
            if (bTimeChanged)
            {
                badmsg = L("lcl_res_objplantime"); // "tijd wijzigen mag alleen via reservering of ruimte-planbord";
            }

            sql = "SELECT "+lcl.xsqla('rr.res_ruimte_nr', 'rr.res_ruimte_key')
                + "  FROM res_ruimte rr,"
                + "       res_ruimte_opstelling ro"
                + " WHERE res_ruimte_opstel_key = " + oRs("res_ruimte_opstel_key").value
                + "   AND rr.res_ruimte_key = ro.res_ruimte_key";
            oRs2 = Oracle.Execute(sql);
            ROFIELDTR("fldresroom", L("lcl_room"), oRs2("res_ruimte_nr").value);
            oRs2.Close();
        }
        else // Alg_ruimte_key zal gevuld zijn
        {
            sql = "SELECT alg_ruimte_aanduiding"
                + "  FROM alg_v_ruimte_gegevens_all"
                + " WHERE alg_ruimte_key = " + oRs("alg_ruimte_key").value
            oRs2 = Oracle.Execute(sql);
            ROFIELDTR("fldresroom", L("lcl_room"), oRs2("alg_ruimte_aanduiding").value);
            oRs2.Close();
        }
        oRs.Close();

        var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering
        if (!this_res.canChange)
            badmsg = this_res.readoReason;
        else if (this_res.canChangeFEOnly)
        {  // Bij wijzigen tijdstip ruimte (naar voren) schuiven voorzieningen mogelijk mee.
            if (new_van < this_res.earliest_expire_change)
                badmsg = L("lcl_res_lastmin"); // te laat
        }
      }
      else // parkeerplaats bij een afspraak
      {
        sql = "SELECT  b.bez_afspraak_naam"
             +      ", b.bez_afspraak_bedrijf"
             +      ", p.prs_perslid_naam_friendly naam"
             +      ", COALESCE(a.bez_afspraak_telefoonnr,'-') bez_afspraak_telefoonnr"
             +      ", a.bez_afspraak_key"
             + " FROM prs_v_perslid_fullnames p,"
             +      " bez_bezoekers b,"
             +      " bez_afspraak a"
             + " WHERE p.prs_perslid_key(+) = a.bez_afspraak_host_key"
             + "   AND b.bez_bezoekers_key = " + bezoekers_key
             + "   AND b.bez_afspraak_key = a.bez_afspraak_key";

        var oRs = Oracle.Execute(sql);

        ROFIELDTR("fld", L("lcl_vis_name"), oRs("bez_afspraak_naam").value);
        if (oRs("bez_afspraak_bedrijf").value != null)
            ROFIELDTR("fld", L("lcl_vis_company"), oRs("bez_afspraak_bedrijf").value);
        ROFIELDTR("fld", L("lcl_host"), oRs("naam").value);
        ROFIELDTR("fld", L("lcl_item"), old_deel_oms);

        if (bTimeChanged)
        {
            badmsg = L("lcl_res_bezplantime"); // "Tijd wijzigen mag alleen via afspraak-scherm";
        }
      }
      BLOCK_END();
IFACE.FORM_END();
%>
    </form>
    <iframe src="../Shared/empty.html"
            onload="iface.button.enable('btn_res_submit')";
            name="hidFrameSubmit"
            style="display:none"></iframe>
<%
    if (badmsg != "") { %>
      <br><font color=red><%=badmsg%></font>
<%  }
    else
    {
      if (bTimeChanged)
      { // Let op: gehele reservering wordt verplaatst, andere voorzieningen gaan mee.
%>      <p><%=L("lcl_res_objmove")%></p><%
      }
    }

    var buttons = [];
    if (badmsg == "")
        buttons.push({ title: L("lcl_submit"), action: "document.u2.submit()", singlepress: true, id:"btn_res_submit" });
    buttons.push({ title: L("lcl_cancel"), action: "FcltMgr.closeDetail(window, { cancel: true } )"});
    CreateButtons(buttons);
%>
  </body>
</html>