214 lines
9.0 KiB
Plaintext
214 lines
9.0 KiB
Plaintext
<%@ 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/save2db.inc" -->
|
|
<!-- #include file="res.inc" -->
|
|
<%
|
|
protectRequest.validateToken();
|
|
|
|
var rsv_ruimte_key_arr = getQParamIntArray("rsv_ruimte_key");
|
|
var doCharge = getQParamIntArray("doCharge", [1]);
|
|
var amount = rsv_ruimte_key_arr.length;
|
|
var isMulti = amount > 1;
|
|
var this_res = new Array(amount);
|
|
var rrr = new Array(amount);
|
|
var canDeleteAny = false;
|
|
|
|
for(var i = 0; i < amount; i++)
|
|
{
|
|
res.res_set_dialect(rsv_ruimte_key_arr[i]);
|
|
this_res[i] = res.func_enabled(rsv_ruimte_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke reservering
|
|
canDeleteAny |= this_res[i].canDelete;
|
|
|
|
// Altijd handig
|
|
var sql = "SELECT res_reservering_key"
|
|
+ " , rrr.res_rsv_ruimte_van"
|
|
+ " , rr.res_ruimte_extern_id"
|
|
+ " FROM res_rsv_ruimte rrr"
|
|
+ " , res_ruimte_opstelling rro"
|
|
+ " , res_ruimte rr"
|
|
+ " WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)"
|
|
+ " AND rro.res_ruimte_key = rr.res_ruimte_key(+)"
|
|
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key_arr[i];
|
|
|
|
oRs = Oracle.Execute(sql);
|
|
|
|
rrr[i] = { rsv_ruimte_key : rsv_ruimte_key_arr[i],
|
|
reservering_key : oRs("res_reservering_key").Value,
|
|
rsv_ruimte_van : new Date(oRs("res_rsv_ruimte_van").Value),
|
|
res_ruimte_extern_id : oRs("res_ruimte_extern_id").Value
|
|
}
|
|
|
|
oRs.Close();
|
|
|
|
}
|
|
|
|
user.auth_required_or_abort(canDeleteAny);
|
|
|
|
var cost_recharge = getFParam("cost_recharge", "off") == "on";
|
|
var deletefull = getFParamInt("deletefull", 0) == 1;
|
|
var deletefuture = getFParamInt("deletefuture", 0) == 1;
|
|
var perc_recharge = getFParamFloat("perc_recharge", 100);
|
|
|
|
var del_key_arr = [];
|
|
|
|
for(var i = 0; i < amount; i++)
|
|
{
|
|
// 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[i].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[i].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[i].res_reservering_key
|
|
+ " AND ra.res_status_bo_key = 6))";
|
|
if (deletefuture)
|
|
to_do_rsv_ruimte_key += " AND res_rsv_ruimte_van >= "+rrr[i].rsv_ruimte_van.toSQL();
|
|
else
|
|
if (!deletefull)
|
|
to_do_rsv_ruimte_key += " AND res_rsv_ruimte_key = " + rsv_ruimte_key_arr[i];
|
|
|
|
// vind de te verwijderen rsv_ruimte_keys
|
|
sql = "SELECT res_rsv_ruimte_key"
|
|
+ " , res_ruimte_extern_id"
|
|
+ " FROM res_rsv_ruimte rrr"
|
|
+ " , res_ruimte_opstelling rro"
|
|
+ " , res_ruimte rr"
|
|
+ " WHERE res_reservering_key = " + this_res[i].res_reservering_key
|
|
+ " AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key(+)"
|
|
+ " AND rro.res_ruimte_key = rr.res_ruimte_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").Value;
|
|
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
|
|
}
|
|
|
|
if (oRs2("res_ruimte_extern_id").Value) {
|
|
del_key_arr.push(one_rsv_ruimte_key);
|
|
}
|
|
|
|
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" }
|
|
];
|
|
|
|
if ((!isMulti && cost_recharge) || (isMulti && doCharge[i] == 1))
|
|
{
|
|
if (!deletefull && !deletefuture && hasFParam("recharge"))
|
|
{
|
|
fields.push( {dbs: "res_rsv_ruimte_totaal", typ: "float", frm: "recharge"} );
|
|
}
|
|
else
|
|
{
|
|
var sql = "SELECT res.getruimteprijs (" + one_rsv_ruimte_key + ", 1) org_ruimteprijs"
|
|
+ " FROM DUAL";
|
|
var oRs = Oracle.Execute(sql);
|
|
var ruimteprijs = oRs("org_ruimteprijs").Value * (perc_recharge / 100);
|
|
oRs.Close();
|
|
fields.push( {dbs: "res_rsv_ruimte_totaal", typ: "float", val: ruimteprijs} );
|
|
}
|
|
}
|
|
|
|
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 + ";"
|
|
// set_ruimte_dirty hoeft niet: wij zijn verwijderd en kunnen daarmee nooit dirty zijn 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);
|
|
|
|
// Klantspecifieke check functie (hookfunction) voor de delete
|
|
var pResult = new HookResult();
|
|
if (!custfunc.res_postdelete(one_rsv_ruimte_key, pResult))
|
|
{
|
|
abort_with_warning(pResult.errmsg);
|
|
}
|
|
|
|
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[i].res_reservering_key
|
|
+ " AND NOT EXISTS (SELECT *"
|
|
+ " FROM res_v_aanwezigrsv_ruimte"
|
|
+ " WHERE res_reservering_key=" + this_res[i].res_reservering_key + ")"
|
|
|
|
Oracle.Execute( sql );
|
|
}
|
|
|
|
/* Verwijder ook een evt. Exchange event (via MS Graph) */
|
|
if (del_key_arr.length && (S("msgraph_sync_level") & 6)) { // Er is een Write Exchange-koppeling voor deze ruimtes
|
|
Server.ScriptTimeout = 1200; // 20m, dit kan (potentieel) even duren
|
|
var DEZE = this;
|
|
var hook = hookfunc.gethook("utils/exchange/res_to_graph.wsc");
|
|
hook.initialize({
|
|
DEZE: DEZE,
|
|
custabspath: Server.MapPath(custpath)
|
|
});
|
|
hook.batchToGraph("D", { "res_rsv_ruimte_key_arr": del_key_arr });
|
|
hook = null;
|
|
}
|
|
|
|
message = ""; /* message: "Deelreservering is verwijderd" */
|
|
|
|
var result = { message: message, success: true, refresh: true };
|
|
Response.Write(JSON.stringify(result));
|
|
%><% ASPPAGE_END(); %>
|