Files
Facilitor/APPL/RES/res_delete_save.asp
Erik Groener 4b3bd20590 NYBU#29712 Annuleringshorizon (variabele doorbelastingspercentages)
svn path=/Website/trunk/; revision=30002
2016-07-11 07:46:29 +00:00

159 lines
6.6 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/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;
var perc_recharge = getFParamFloat("perc_recharge", 100);
// 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" }
];
if (cost_recharge)
{
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 + ";"
+ " 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));
%>