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

    File:               res_delete_save.asp
    Description:        Het echte verwijderen van een (deel)reservering
    Parameters:
        rsv_ruimte_key
    Context:            Vanuit res_delete popup of pda/reservering.asp
    Note:
*/
var JSON_Result = true;
 %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="res.inc" -->
<%
protectRequest.validateToken();

var rsv_ruimte_key = getQParamInt("rsv_ruimte_key");
res.res_set_dialect(rsv_ruimte_key);
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.canDelete);

// Altijd handig
var sql = "SELECT res_reservering_key"
        + "     , rrr.res_rsv_ruimte_van"
        + "  FROM res_rsv_ruimte rrr"
        + " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key

oRs = Oracle.Execute(sql);
var rrr = { rsv_ruimte_key       : rsv_ruimte_key,
            reservering_key      : oRs("res_reservering_key").value,
            rsv_ruimte_van       : new Date(oRs("res_rsv_ruimte_van").value)
          }

oRs.Close();

var cost_recharge = getFParam("cost_recharge", "off") == "on";
var deletefull = getFParamInt("deletefull", 0) == 1;
var deletefuture = getFParamInt("deletefuture", 0) == 1;

// Alle niet-admin ruimtes die geen admin- voorzieningen hebben
var to_do_rsv_ruimte_key = "    res_rsv_ruimte_key IN ("
                       + " SELECT rs.res_rsv_ruimte_key"
                       + "   FROM res_v_aanwezigrsv_ruimte rs"
                       + "  WHERE rs.res_reservering_key = " + this_res.res_reservering_key
                       + "    AND (rs.res_status_bo_key != 6 OR rs.res_status_bo_key IS NULL)" // NULL bij CV
                       + " MINUS"
                       + "     (SELECT rd.res_rsv_ruimte_key"
                       + "       FROM res_v_aanwezigrsv_deel rd"
                       + "          , res_v_aanwezigrsv_ruimte rr"
                       + "      WHERE rd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
                       + "        AND rr.res_reservering_key = " + this_res.res_reservering_key
                       + "        AND rd.res_status_bo_key = 6"
                       + "     UNION"
                       + "     SELECT ra.res_rsv_ruimte_key"
                       + "       FROM res_v_aanwezigrsv_artikel ra"
                       + "          , res_v_aanwezigrsv_ruimte rr"
                       + "      WHERE ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
                       + "        AND rr.res_reservering_key = " + this_res.res_reservering_key
                       + "        AND ra.res_status_bo_key = 6))";
if (deletefuture)
  to_do_rsv_ruimte_key += " AND res_rsv_ruimte_van >= "+rrr.rsv_ruimte_van.toSQL();
else
  if (!deletefull)
    to_do_rsv_ruimte_key += " AND res_rsv_ruimte_key = " + rsv_ruimte_key;

// vind de te verwijderen rsv_ruimte_keys
sql = "SELECT res_rsv_ruimte_key"
    + "  FROM res_rsv_ruimte"
    + " WHERE res_reservering_key=" + this_res.res_reservering_key
    + "   AND res_rsv_ruimte_verwijder IS NULL"
    + "   AND " + to_do_rsv_ruimte_key;

oRs2 = Oracle.Execute(sql);
while (!oRs2.eof)
{
  var one_rsv_ruimte_key = oRs2("res_rsv_ruimte_key");
  var this_res2 = res.func_enabled(one_rsv_ruimte_key); // Wat mag ik op deze deelreservering
  if (!this_res2.canDelete)
  {
    oRs2.MoveNext()
    continue; // Niet al te veel zeuren
  }

  DeleteResAfspraak(one_rsv_ruimte_key);
  // update ruimte
  // objects en articles are deleted automatically if the RES_RSV_RUIMTE is deleted
  // Deze velden altijd opslaan
  var fields =  [ { dbs: "res_rsv_ruimte_opmerking",    typ: "varchar",  frm: "opmerk" },
                  { dbs: "res_status_fo_key",           typ: "key",      val: (cost_recharge? 4 : 1) }, // status 1=optie, 4=vervallen
                  { dbs: "res_rsv_ruimte_verwijder",    typ: "sql",      val: "SYSDATE" }
                ];

  sql = buildUpdate("res_rsv_ruimte", fields)
      + "     res_rsv_ruimte_key = " + one_rsv_ruimte_key;

  // ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
  // clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
  oRs = Oracle.Execute("select res_rsv_ruimte_van,"
                     + "       res_rsv_ruimte_tot"
                     + "  from res_rsv_ruimte"
                     + " where res_rsv_ruimte_key = " + one_rsv_ruimte_key);
  var oldvan = new Date(oRs("res_rsv_ruimte_van").value);
  var oldtot = new Date(oRs("res_rsv_ruimte_tot").value);
  oRs.Close();

  // Nu de echte update.
  // Daarbij ook diverse controles/ updates uitvoeren op 'andere zaken'
  sql = "BEGIN "
      + sql + ";"
      + "  res.set_ruimte_dirty (" + one_rsv_ruimte_key + "); " // Zelf dirty geworden?
      + "  res.set_ruimtes_clean (" + oldvan.toSQL() + "); " // Anderen 'clean' geworden
      + "  res.follow_artikel (" + one_rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // catering mee verplaatsen
      + "  res.follow_deel (" + one_rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // objecten mee verplaatsen
      + "END;";
  Oracle.Execute( sql );

  shared.trackaction("RESDEL", one_rsv_ruimte_key);
  oRs2.MoveNext();
}
oRs2.Close();

// En tenslotte eventueel de reservering zelf nog
sql = "UPDATE res_reservering "
    + "   SET res_reservering_verwijder=SYSDATE"
    + " WHERE res_reservering_key="+this_res.res_reservering_key
    + "   AND NOT EXISTS (SELECT *"
    + "                     FROM res_v_aanwezigrsv_ruimte"
    + "                    WHERE res_reservering_key=" + this_res.res_reservering_key + ")"

Oracle.Execute( sql );

message = ""; /* message: "Deelreservering is verwijderd" */

var result = { message: message, success: true, refresh: true };
Response.Write(JSON.stringify(result));
%>