306 lines
12 KiB
Plaintext
306 lines
12 KiB
Plaintext
<%@language = "javascript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: res_close.asp
|
|
Description: Afmelden reserveringen.
|
|
Parameters: partres_key
|
|
part_type
|
|
group // Dan is partres_key een res_rsv_ruimte_key en moet de hele deelreservering
|
|
|
|
Note: We ondersteunen vier varianten
|
|
part_type group
|
|
"V" 0 partres_key zal een enkele res_rsv_deel_key zijn die we gaan afmelden
|
|
"C" 0 partres_key zal een enkele res_rsv_artikel_key zijn die we gaan afmelden
|
|
"R" 0 partres_key zal een enkele res_rsv_ruimte_key zijn: alleen de ruimte wordt afgemeld.
|
|
"R"/"CV" 1 partres_key zal een enkele res_rsv_ruimte_key zijn: de hele deelreservering wordt afgemeld
|
|
(althans: alle delen waar we rechten op hebben).
|
|
We leveren al success: true op als *iets* afgemeld mocht worden
|
|
*/ %>
|
|
|
|
<%
|
|
var JSON_Result = true;
|
|
%>
|
|
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="./res.inc" -->
|
|
|
|
<%
|
|
protectRequest.validateToken();
|
|
var autfunction = "WEB_RESBOF";
|
|
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
|
|
var authparams = user.checkAutorisation(autfunction);
|
|
|
|
var partres_key_arr = getFParamIntArray("partres_key"); // rsv_ruimte_key, rsv_deel_key of rsv_artikel_key
|
|
var part_type_arr = getFParamArray("part_type"); // reserveringstype ('C', 'V', 'R' of 'CV')
|
|
var group = getFParamInt("group", -1);
|
|
var end_delen = getFParamInt("end_delen", 0) == 1;
|
|
|
|
// Close één ruimte
|
|
function close_ruimte(rsv_ruimte_key)
|
|
{ // Get res_rsv_ruimte_prijs
|
|
var sql = "SELECT res.getruimteprijs(" + rsv_ruimte_key + ") ruimteprijs FROM DUAL";
|
|
var oRs = Oracle.Execute(sql);
|
|
var price = oRs("ruimteprijs").Value;
|
|
oRs.Close();
|
|
|
|
// Change the status of the room
|
|
// And set res_rsv_ruimte_prijs
|
|
sql = "UPDATE res_rsv_ruimte"
|
|
+ " SET res_status_bo_key = 5,"
|
|
+ " res_rsv_ruimte_prijs = " + price
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key
|
|
+ " AND res_status_bo_key <> 6";
|
|
Oracle.Execute(sql);
|
|
shared.trackaction("RESAFM", rsv_ruimte_key);
|
|
}
|
|
|
|
// Close één artikel
|
|
function close_artikel(rsv_ruimte_key, rsv_artikel_key)
|
|
{ // Moet de prijs worden geupdate?
|
|
var sql = "SELECT a.res_artikel_prijs_vast"
|
|
+ " , ra.res_rsv_artikel_prijs"
|
|
+ " , a.res_artikel_key"
|
|
+ " FROM res_rsv_artikel ra,"
|
|
+ " res_artikel a"
|
|
+ " WHERE ra.res_artikel_key = a.res_artikel_key"
|
|
+ " AND ra.res_rsv_artikel_key = " + rsv_artikel_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var must_update = (oRs("res_artikel_prijs_vast").Value == 1 || oRs("res_rsv_artikel_prijs").Value == null);
|
|
var res_artikel_key = oRs("res_artikel_key").Value;
|
|
oRs.Close();
|
|
|
|
sql = " SELECT res.getartikelprijs(" + rsv_artikel_key + ") artikelprijs FROM DUAL";
|
|
oRs = Oracle.Execute(sql);
|
|
var price = oRs("artikelprijs").Value;
|
|
oRs.Close();
|
|
|
|
// Change the status of the object
|
|
sql = "UPDATE res_rsv_artikel"
|
|
+ " SET res_status_bo_key = 5"
|
|
+ (must_update ? ", res_rsv_artikel_prijs = " + price : "")
|
|
+ ", res_rsv_artikel_inkoopprijs = (SELECT res_artikel_inkoopprijs FROM res_artikel WHERE res_artikel_key = " + res_artikel_key + ")"
|
|
+ ", res_rsv_artikel_btw = (SELECT res_artikel_btw FROM res_artikel WHERE res_artikel_key = " + res_artikel_key + ")"
|
|
+ " WHERE res_rsv_artikel_key =" + rsv_artikel_key
|
|
+ " AND res_status_bo_key <> 6";
|
|
Oracle.Execute(sql);
|
|
shared.trackaction("RESAFM", rsv_ruimte_key, L("lcl_res_track_c_is_resupd_afm"));
|
|
}
|
|
|
|
// Close één deel
|
|
function close_deel(rsv_ruimte_key, rsv_deel_key, trackObj)
|
|
{ // get res_rsv_deel_prijs
|
|
if (end_delen) {
|
|
var sql = "UPDATE res_rsv_deel"
|
|
+ " SET res_rsv_deel_tot =" // Pas eindtijd aan als ik al was begonnen
|
|
+ " (CASE"
|
|
+ " WHEN (res_rsv_deel_van < SYSDATE) THEN SYSDATE"
|
|
+ " ELSE res_rsv_deel_tot"
|
|
+ " END),"
|
|
+ " res_rsv_deel_verwijder =" // Pas verwijderdatum aan als ik nog niet was begonnen
|
|
+ " (CASE"
|
|
+ " WHEN (res_rsv_deel_van < SYSDATE) THEN res_rsv_deel_verwijder"
|
|
+ " ELSE SYSDATE"
|
|
+ " END)"
|
|
+ " WHERE res_rsv_deel_key = " + rsv_deel_key;
|
|
Oracle.Execute(sql); // Deze moet eerst omdat het invloed kan hebben op de prijs
|
|
}
|
|
var sql = " SELECT res.getdeelprijs(" + rsv_deel_key + ") deelprijs FROM DUAL";
|
|
var oRs = Oracle.Execute(sql);
|
|
var price = oRs("deelprijs").Value;
|
|
oRs.Close();
|
|
|
|
// Change the status of the object
|
|
sql = "UPDATE res_rsv_deel"
|
|
+ " SET res_status_bo_key = 5"
|
|
+ ", res_rsv_deel_prijs = " + price
|
|
+ " WHERE res_rsv_deel_key =" + rsv_deel_key
|
|
+ " AND res_status_bo_key <> 6";
|
|
Oracle.Execute(sql);
|
|
|
|
if ((typeof trackObj == "string") && trackObj.length > 0)
|
|
shared.trackaction("RESAFM", rsv_ruimte_key, trackObj);
|
|
else if (typeof trackObj == "undefined")
|
|
shared.trackaction("RESAFM", rsv_ruimte_key, L("lcl_res_track_v_is_resupd_afm"));
|
|
}
|
|
|
|
// Bepaal eerst de reserveringen in de selectie die
|
|
// ook echt afgemeld kunnen of mogen worden.
|
|
var tobeclosed = 0;
|
|
var ingesloten = [];
|
|
var negatieftotaal = false;
|
|
for (var i = 0; i < partres_key_arr.length; i++)
|
|
{
|
|
var partreskey = partres_key_arr[i];
|
|
var parttype = part_type_arr[i];
|
|
var sql;
|
|
if (group == 1)
|
|
{ // parttype zal altijd "R" of "CV" zijn
|
|
var rsv_ruimte_key = partreskey;
|
|
var this_res = res.func_enabled(rsv_ruimte_key);
|
|
}
|
|
else
|
|
{ // Geen groepering, uitsluitend enkele ruimte, catering of voorziening regel
|
|
// Bepaal rsv_ruimte_key
|
|
if (parttype == "R")
|
|
{
|
|
sql = "SELECT rrr.res_rsv_ruimte_key"
|
|
+ " , rrr.res_status_bo_key"
|
|
+ " , rr.res_discipline_key"
|
|
+ " FROM res_v_aanwezigrsv_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 = " + partreskey
|
|
+ " AND rrr.res_status_bo_key < 5"
|
|
+ " GROUP BY rrr.res_rsv_ruimte_key"
|
|
+ " , rrr.res_status_bo_key"
|
|
+ " , res_discipline_key";
|
|
}
|
|
if (parttype == "V")
|
|
{
|
|
sql = "SELECT rr.res_rsv_ruimte_key"
|
|
+ " , rd.res_status_bo_key"
|
|
+ " , d.res_discipline_key"
|
|
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
|
+ " , res_v_aanwezigrsv_deel rd"
|
|
+ " , res_deel d"
|
|
+ " WHERE rr.res_rsv_ruimte_key = rd.res_rsv_ruimte_key"
|
|
+ " AND rd.res_deel_key = d.res_deel_key"
|
|
+ " AND rd.res_status_bo_key < 5"
|
|
+ " AND rd.res_rsv_deel_key = " + partreskey;
|
|
}
|
|
if (parttype == "C")
|
|
{
|
|
var sql = "SELECT rr.res_rsv_ruimte_key"
|
|
+ " , ra.res_status_bo_key"
|
|
+ " , a.res_discipline_key"
|
|
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
|
+ " , res_v_aanwezigrsv_artikel ra"
|
|
+ " , res_artikel a"
|
|
+ " WHERE rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key"
|
|
+ " AND ra.res_artikel_key = a.res_artikel_key"
|
|
+ " AND ra.res_status_bo_key < 5"
|
|
+ " AND ra.res_rsv_artikel_key = " + partreskey;
|
|
}
|
|
//
|
|
var oRs = Oracle.Execute(sql);
|
|
if (oRs.Eof)
|
|
{
|
|
oRs.Close();
|
|
continue; // waarschijnlijk net in een ander tabje verwijderd. Niet al te moeilijk over doen.
|
|
}
|
|
|
|
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
|
|
var status_bo = oRs("res_status_bo_key").Value;
|
|
var res_discipline_key = oRs("res_discipline_key").Value;
|
|
oRs.Close();
|
|
var this_res = res.func_enabled(rsv_ruimte_key, res_discipline_key);
|
|
}
|
|
res.res_set_dialect(rsv_ruimte_key);
|
|
|
|
sql = "SELECT res.getdeelresprijs(" + rsv_ruimte_key + ") prijs FROM DUAL"
|
|
oRs = Oracle.Execute(sql)
|
|
var deelres_prijs = oRs("prijs").Value;
|
|
var negatieftotaal = deelres_prijs < 0;
|
|
if (!negatieftotaal && this_res.canClose)
|
|
{
|
|
ingesloten.push({rsv_ruimte_key: rsv_ruimte_key, partkey: partreskey, parttype: parttype});
|
|
tobeclosed++;
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
if (partres_key_arr.length == 1 && negatieftotaal)
|
|
shared.simpel_page(L("lcl_res_costs_negative"));
|
|
|
|
user.anything_todo_or_abort(tobeclosed > 0); // We klagen niet over enkele wel en enkele niet
|
|
|
|
// Nu echt de reserveringen afmelden die ook afgemeld kunnen of mogen worden
|
|
for (var i = 0; i < ingesloten.length; i++)
|
|
{ // Set status on "verwerkt"
|
|
var parttype = ingesloten[i].parttype;
|
|
// ----- Roomreservations : parttype == 'R', partreskey == res_rsv_ruimte_key -----
|
|
if (parttype == 'R' || parttype == 'CV')
|
|
{ // eerst de ruimte eventueel zelf. (bij CV hoeft de ruimte zelf niet)
|
|
close_ruimte(ingesloten[i].rsv_ruimte_key);
|
|
|
|
// Bij groupering doen we ook de C en V waar we rechten op hebben.
|
|
if (group == 1)
|
|
{
|
|
sql_objects = "SELECT rrd.res_rsv_deel_key"
|
|
+ " , id.ins_srtdeel_key"
|
|
+ " , rd.res_deel_bulkreserveerbaar"
|
|
+ " , rd.res_deel_omschrijving"
|
|
+ " , COUNT(res_deel_omschrijving) OVER(PARTITION BY res_deel_omschrijving) aantal"
|
|
+ " FROM res_rsv_deel rrd"
|
|
+ " , res_deel rd"
|
|
+ " , ins_deel id"
|
|
+ " WHERE rrd.res_deel_key = rd.res_deel_key"
|
|
+ " AND id.ins_deel_key = rd.res_ins_deel_key"
|
|
+ " AND rrd.res_status_bo_key <> 5"
|
|
+ " AND rrd.res_rsv_ruimte_key = " + ingesloten[i].rsv_ruimte_key
|
|
+ " ORDER BY id.ins_srtdeel_key"
|
|
+ " , rd.res_deel_omschrijving";
|
|
var cntObjects = 0;
|
|
var last_srtdeel_key = 0;
|
|
var last_resdeel_oms = "";
|
|
oRs = Oracle.Execute(sql_objects);
|
|
while (!oRs.eof)
|
|
{
|
|
if (oRs("res_deel_bulkreserveerbaar").Value == 0)
|
|
{ // Niet bulk reserveerbaar
|
|
close_deel(ingesloten[i].rsv_ruimte_key, oRs("res_rsv_deel_key").Value);
|
|
}
|
|
else
|
|
{
|
|
if (last_srtdeel_key != oRs("ins_srtdeel_key").Value || last_resdeel_oms != oRs("res_deel_omschrijving").Value)
|
|
{
|
|
last_srtdeel_key = oRs("ins_srtdeel_key").Value;
|
|
last_resdeel_oms = oRs("res_deel_omschrijving").Value;
|
|
cntObjects = 0;
|
|
}
|
|
cntObjects ++;
|
|
var trkObj = ( cntObjects < oRs("aantal").Value
|
|
? ""
|
|
: L("lcl_res_track_v_is_resupd_afm_bulk").format(oRs("res_deel_omschrijving").Value, oRs("aantal").Value)
|
|
);
|
|
close_deel(ingesloten[i].rsv_ruimte_key, oRs("res_rsv_deel_key").Value, trkObj);
|
|
}
|
|
oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
|
|
// First find all the consumable articles for this reservationpart not already closed.
|
|
sql_cons_art = "SELECT ra.res_rsv_artikel_key"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE res_status_bo_key <> 5"
|
|
+ " AND ra.res_rsv_ruimte_key = " + ingesloten[i].rsv_ruimte_key;
|
|
oRs = Oracle.Execute(sql_cons_art);
|
|
while (!oRs.eof)
|
|
{
|
|
close_artikel(ingesloten[i].rsv_ruimte_key, oRs("res_rsv_artikel_key").Value);
|
|
oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
}
|
|
}
|
|
else if (parttype == 'V') // ----- Objectreservations: parttype == 'V' -----
|
|
{
|
|
close_deel(ingesloten[i].rsv_ruimte_key, ingesloten[i].partkey);
|
|
}
|
|
// ----- Consumable article reservations : parttype == 'C' -----
|
|
else if (parttype == 'C')
|
|
{
|
|
close_artikel(ingesloten[i].rsv_ruimte_key, ingesloten[i].partkey);
|
|
}
|
|
}
|
|
|
|
var result = { success: true, message: "" };
|
|
|
|
Response.Write(JSON.stringify(result));
|
|
%>
|
|
<% ASPPAGE_END(); %>
|