Files
Facilitor/APPL/RES/res_close.asp

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(); %>