302 lines
12 KiB
Plaintext
302 lines
12 KiB
Plaintext
<%@ language = "JavaScript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: res_multi_save.asp
|
|
Description: save script van res_multi_deit.asp
|
|
Globalen:
|
|
Context:
|
|
Note:
|
|
*/
|
|
var JSON_Result = true;
|
|
%>
|
|
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../Shared/save2db.inc" -->
|
|
<!-- #include file="./res.inc" -->
|
|
|
|
<%
|
|
|
|
var urole = getQParamSafe("urole");
|
|
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key");
|
|
var this_res = res.func_enabled(rsv_ruimte_key);
|
|
var hasFoBo = this_res.canWrite("WEB_RESFOF") || this_res.canWrite("WEB_RESBOF");
|
|
//
|
|
// Submit code
|
|
//
|
|
/* --flags (0-65535)
|
|
-- 0 Niks
|
|
-- 1 Omschrijving
|
|
-- 2 Opmerkingen
|
|
-- 4 Tijdstip
|
|
-- 8 Aantal personen
|
|
-- 16 Ruimte/opstelling
|
|
-- 32 Gastheer
|
|
-- 64 Kostenplaats
|
|
-- 128 Voorzieningen (delen)
|
|
-- 256 Catering (artikelen)
|
|
-- 512 Bezoekers
|
|
-- 1024 Flexkenmerken
|
|
-- 2048 Tijdstip
|
|
-- 4096 Naam contactpersoon
|
|
-- 8192 Reserveringsstatus
|
|
-- 16384 Afgesproken ruimteprijs
|
|
-- 32768 Korting
|
|
-- 65536 Flags (bolletjes)
|
|
*/
|
|
protectRequest.validateToken();
|
|
var what = (getFParamInt( "c1", 0) == 1 ? 1 : 0)
|
|
+ (getFParamInt( "c2", 0) == 1 ? 2 : 0)
|
|
+ (getFParamInt( "c4", 0) == 1 ? 4 : 0)
|
|
+ (getFParamInt( "c8", 0) == 1 ? 8 : 0)
|
|
+ (getFParamInt( "c16", 0) == 1 ? 16 : 0)
|
|
+ (getFParamInt( "c32", 0) == 1 ? 32 : 0)
|
|
+ (getFParamInt( "c64", 0) == 1 ? 64 : 0)
|
|
+ (getFParamInt( "c128", 0) == 1 ? 128 : 0)
|
|
+ (getFParamInt( "c256", 0) == 1 ? 256 : 0)
|
|
+ (getFParamInt( "c512", 0) == 1 ? 512 : 0)
|
|
+ (getFParamInt( "c1024", 0) == 1 ? 1024 : 0)
|
|
+ (getFParamInt( "c2048", 0) == 1 ? 2048 : 0)
|
|
+ (getFParamInt( "c4096", 0) == 1 ? 4096 : 0)
|
|
+ (getFParamInt( "c8192", 0) == 1 && hasFoBo ? 8192 : 0)
|
|
+ (getFParamInt("c16384", 0) == 1 ? 16384 : 0)
|
|
+ (getFParamInt("c32768", 0) == 1 ? 32768 : 0)
|
|
+ (getFParamInt("c65536", 0) == 1 && hasFoBo ? 65536 : 0);
|
|
|
|
var sql = "SELECT rr.res_reservering_key"
|
|
+ " , rr.res_rsv_ruimte_van"
|
|
+ " , rr.res_rsv_ruimte_volgnr"
|
|
+ " , rr.res_status_fo_key"
|
|
+ " , r.res_ruimte_startdatum"
|
|
+ " , r.res_ruimte_vervaldatum"
|
|
+ " , r.res_ruimte_extern_id"
|
|
+ " FROM res_rsv_ruimte rr"
|
|
+ " , res_ruimte_opstelling ro"
|
|
+ " , res_ruimte r"
|
|
+ " WHERE rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)"
|
|
+ " AND ro.res_ruimte_key = r.res_ruimte_key(+)"
|
|
+ " AND rr.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
oRs = Oracle.Execute(sql);
|
|
var resnum = oRs("res_reservering_key").value + "/" + oRs("res_rsv_ruimte_volgnr").value;
|
|
var date_from = new Date(oRs("res_rsv_ruimte_van").Value);
|
|
var ruimte_startdatum_from = oRs("res_ruimte_startdatum").Value;
|
|
var ruimte_vervaldatum_from = oRs("res_ruimte_vervaldatum").Value;
|
|
var extern_id = oRs("res_ruimte_extern_id").Value;
|
|
if (ruimte_vervaldatum_from != null)
|
|
ruimte_vervaldatum_from = new Date(ruimte_vervaldatum_from);
|
|
var status_fo_from = oRs("res_status_fo_key").Value;
|
|
oRs.Close();
|
|
|
|
var changed = "";
|
|
if (what & 1)
|
|
changed += (changed != ""? ", " : "") + L("lcl_descr")
|
|
if (what & 2)
|
|
changed += (changed != ""? ", " : "") + L("lcl_remark")
|
|
if (what & 4)
|
|
changed += (changed != ""? ", " : "") + L("lcl_date_time")
|
|
if (what & 8)
|
|
changed += (changed != ""? ", " : "") + L("lcl_visitors")
|
|
if (what & 16)
|
|
changed += (changed != ""? ", " : "") + L("lcl_room")
|
|
if (what & 32)
|
|
changed += (changed != ""? ", " : "") + L("lcl_host")
|
|
if (what & 64)
|
|
changed += (changed != ""? ", " : "") + L("lcl_account")
|
|
if (what & 128)
|
|
changed += (changed != ""? ", " : "") + L("lcl_reserved_object")
|
|
if (what & 256)
|
|
changed += (changed != ""? ", " : "") + L("lcl_catering")
|
|
if (what & 512)
|
|
changed += (changed != ""? ", " : "") + (S("bez_sel_internpersoon") == 1? L("lcl_res_frame_visitors") : L("lcl_res_frame_visitors_external"))
|
|
if (what & 1024)
|
|
changed += (changed != ""? ", " : "") + L("lcl_res_flexblok")
|
|
if (what & 2048)
|
|
changed += (changed != ""? ", " : "") + L("lcl_date")
|
|
if (what & 4096)
|
|
changed += (changed != ""? ", " : "") + L("lcl_name");
|
|
if (what & 8192)
|
|
changed += (changed != ""? ", " : "") + L("lcl_status_FO");
|
|
if (what & 16384)
|
|
changed += (changed != ""? ", " : "") + L("lcl_res_ruimtetotaal");
|
|
if (what & 32768)
|
|
changed += (changed != ""? ", " : "") + L("lcl_res_ruimtekorting");
|
|
if (what & 65536)
|
|
changed += (changed != ""? ", " : "") + L("lcl_res_flags");
|
|
|
|
var msg = L("lcl_res_multi_copy").format(resnum) + changed;
|
|
|
|
var keyList = getFParamKeyArray("deelreserveringen", []);
|
|
var res_rsv_ruimte_key_arr = [];
|
|
var anyExtern = extern_id != null;
|
|
var old_extern_ids = {};
|
|
|
|
if (what != "" && keyList.length > 0)
|
|
{
|
|
if (what & 2048) // datum. Controleer dat ze allemaal dezelfde datum hadden
|
|
{
|
|
var xsql = "SELECT TRUNC(res_rsv_ruimte_van), TRUNC(res_rsv_ruimte_tot), COUNT(*) "
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_rsv_ruimte_key IN (" + keyList.join(",") + ")"
|
|
+ " GROUP BY TRUNC(res_rsv_ruimte_van), TRUNC(res_rsv_ruimte_tot)";
|
|
oRs = Oracle.Execute("SELECT COUNT(*) aantal FROM (" + xsql + ")");
|
|
if (oRs("aantal").Value > 1)
|
|
abort_with_warning(L("lcl_res_multi_save_dates")); // "Te veel datumvariatie";
|
|
}
|
|
|
|
// Maak een array met rsv_ruimte_key-s waarvan de status wijzigd.
|
|
if (what & 8192)
|
|
{
|
|
var keyStatusList = [];
|
|
var sql_to = "SELECT res_rsv_ruimte_key"
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_status_fo_key <> " + status_fo_from
|
|
+ " AND res_rsv_ruimte_key IN (" + keyList.join(",") + ")";
|
|
oRs_to = Oracle.Execute(sql_to);
|
|
while (!oRs_to.eof)
|
|
{
|
|
keyStatusList.push( oRs_to("res_rsv_ruimte_key").Value );
|
|
oRs_to.MoveNext();
|
|
}
|
|
oRs_to.Close();
|
|
}
|
|
|
|
// Maak de update voor elke res_rsv_ruimte.
|
|
var sql = "BEGIN"
|
|
var i;
|
|
for (i in keyList)
|
|
{
|
|
var rsv_ruimte_key_to = keyList[i];
|
|
res_rsv_ruimte_key_arr.push(keyList[i]);
|
|
|
|
if ((what & 16) > 0 || (what & 2048) > 0)
|
|
{
|
|
if (what & 2048) // Wordt de datum overgenomen?
|
|
datum_to = date_from; // Datum wordt overgenomen.
|
|
else
|
|
{ // Datum wordt niet overgenomen. Bepaal de datum van de reservering die gewijzigd wordt.
|
|
var sql_to = "SELECT rr.res_rsv_ruimte_van"
|
|
+ " FROM res_rsv_ruimte rr"
|
|
+ " WHERE rr.res_rsv_ruimte_key = " + rsv_ruimte_key_to;
|
|
var oRs_to = Oracle.Execute(sql_to);
|
|
var datum_to = new Date(oRs_to("res_rsv_ruimte_van").Value);
|
|
oRs_to.Close();
|
|
}
|
|
|
|
var sql_restype = "SELECT res_ruimte_opstel_key FROM res_rsv_ruimte WHERE res_rsv_ruimte_key = " + rsv_ruimte_key_to;
|
|
var oRs_restype = Oracle.Execute(sql_restype);
|
|
var restype = oRs_restype("res_ruimte_opstel_key").Value === null ? "CV" : "R";
|
|
oRs_restype.Close();
|
|
|
|
if (restype === "R") {
|
|
if (what & 16) { // Wordt de ruimte overgenomen?
|
|
var ruimte_startdatum_to = ruimte_startdatum_from;
|
|
var ruimte_vervaldatum_to = ruimte_vervaldatum_from; // Ruimte wordt overgenomen.
|
|
var sql_ext = "SELECT 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_to;
|
|
var oRs_ext = Oracle.Execute(sql_ext);
|
|
if (what == 16 && extern_id == oRs_ext("res_ruimte_extern_id").Value) { // We wijzigen alleen de ruimte, en die is al hetzelfde
|
|
res_rsv_ruimte_key_arr = res_rsv_ruimte_key_arr.slice(0, -1); // Dan doen we hier niets mee in de Exchange koppeling
|
|
} else {
|
|
old_extern_ids[rsv_ruimte_key_to] = oRs_ext("res_ruimte_extern_id").Value;
|
|
anyExtern |= old_extern_ids[rsv_ruimte_key_to] != null;
|
|
}
|
|
oRs_ext.Close();
|
|
}
|
|
else
|
|
{ // Ruimte wordt niet overgenomen. Bepaal de vervaldatum van de ruimte van de reservering die gewijzigd wordt.
|
|
var sql_to = "SELECT r.res_ruimte_startdatum"
|
|
+ " , r.res_ruimte_vervaldatum"
|
|
+ " FROM res_rsv_ruimte rr"
|
|
+ " , res_ruimte_opstelling ro"
|
|
+ " , res_ruimte r"
|
|
+ " WHERE rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key"
|
|
+ " AND ro.res_ruimte_key = r.res_ruimte_key"
|
|
+ " AND rr.res_rsv_ruimte_key = " + rsv_ruimte_key_to;
|
|
oRs_to = Oracle.Execute(sql_to);
|
|
var ruimte_startdatum_to = oRs_to("res_ruimte_startdatum").Value;
|
|
var ruimte_vervaldatum_to = oRs_to("res_ruimte_vervaldatum").Value;
|
|
if (ruimte_startdatum_to != null)
|
|
ruimte_startdatum_to = new_Date(ruimte_startdatum_to);
|
|
if (ruimte_vervaldatum_to != null)
|
|
ruimte_vervaldatum_to = new Date(ruimte_vervaldatum_to);
|
|
oRs_to.Close();
|
|
}
|
|
if (ruimte_startdatum_to != null && ruimte_startdatum_to >= datum_to)
|
|
{ // Ruimte heeft een startdatum en de ruimte is na de datum pas aanwezig. Ruimte kan niet gereserveerd worden.
|
|
abort_with_warning(L("lcl_res_room_notavailable").format(toDateString(ruimte_startdatum_to)));
|
|
}
|
|
if (ruimte_vervaldatum_to != null && ruimte_vervaldatum_to < datum_to)
|
|
{ // Ruimte heeft een vervaldatum en de ruimte is voor de datum al vervallen. Ruimte kan niet gereserveerd worden.
|
|
abort_with_warning(L("lcl_res_room_expired").format(toDateString(ruimte_vervaldatum_to)));
|
|
}
|
|
}
|
|
}
|
|
|
|
sql += " res.res_sync_deelres(" + rsv_ruimte_key + "," + rsv_ruimte_key_to + "," + what + ", " + S("res_copy_to_bez") + ");"
|
|
// Er moet aangegeven worden of de artikelregels gefiatteerd dienen te worden of direct goedgekeurd kunnen worden.
|
|
+ " res.set_catalogus_approve(" + rsv_ruimte_key_to + ", " + user_key + ");";
|
|
sql += " fac.trackaction ('#RESUPD'," + rsv_ruimte_key_to + ", " + user_key + ", NULL, " + safe.quoted_sql(msg) + ");" // het hekje voorkomt notificaties
|
|
|
|
if (S("res_fe_allow_dirty") != 1 && urole == 'fe')
|
|
{
|
|
sql += " IF res.dirty_level_all(" + rsv_ruimte_key_to + ") <> 0 THEN"
|
|
+ " raise_application_error (-20001, " + safe.quoted_sql(L("lcl_res_fe_no_dirty")) + ");"
|
|
+ " END IF;"
|
|
}
|
|
}
|
|
sql += " END;"
|
|
|
|
var err = Oracle.Execute(sql, true);
|
|
if (err.friendlyMsg)
|
|
abort_with_warning(err.friendlyMsg);
|
|
|
|
// Alle status_fo zijn succesvol gewijzigd.
|
|
if (what & 8192)
|
|
{
|
|
var noti = { 1: "RESOPT",
|
|
2: "RESBEV",
|
|
3: "RESBLK",
|
|
4: "RESDEL"
|
|
}[status_fo_from];
|
|
if (noti)
|
|
{
|
|
for (i in keyStatusList)
|
|
shared.trackaction(noti, keyStatusList[i]);
|
|
}
|
|
}
|
|
|
|
if (anyExtern && res_rsv_ruimte_key_arr.length && (S("msgraph_sync_level") & 6)
|
|
&& (what & 2111)) { // 1+2+4+8+16+32+2048; voor Outlook relevante velden, sommigen alvast voor future reference
|
|
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)
|
|
});
|
|
var params = { "res_rsv_ruimte_key_arr": res_rsv_ruimte_key_arr };
|
|
if (what & 16) {
|
|
params.old_extern_ids = old_extern_ids;
|
|
}
|
|
var result = hook.batchToGraph("U", params);
|
|
hook = null;
|
|
}
|
|
}
|
|
|
|
// Only track if anything changed
|
|
if (what & 131071)
|
|
shared.trackaction("RESMLT", rsv_ruimte_key);
|
|
|
|
result = { success : true, refresh: true };
|
|
|
|
Response.Write(JSON.stringify(result));
|
|
|
|
ASPPAGE_END();
|
|
%>
|