321 lines
14 KiB
Plaintext
321 lines
14 KiB
Plaintext
<%@ language = "JavaScript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: res_update_room_drop.asp
|
|
Description: update een deel-reservering na drag en drop wijziging via planbord
|
|
Parameters:
|
|
rsv_ruimte_key RES_RSV_RUIMTE to update
|
|
res_ruimte_key Nieuwe ruimte
|
|
rsv_van nieuwe begintijd in uren
|
|
rsv_tot nieuwe eindtijd in uren
|
|
Context: Modal dialoog vanuit ruimten planbord
|
|
Note: We zien alleen ruimte reserveringen
|
|
- R-reservering (met rsv_ruimte_key==>res_opstel_key)
|
|
Verticaal: We staan toe dat een andere ruimte (res_ruimte) gekozen wordt
|
|
Horizontaal: Een ander tijdstip staan we niet toe
|
|
De begin en eindtijd aanpassen in het planbord kan met de resizable functionaliteit (met <-> aan eind van de balkjes slepen)
|
|
*/
|
|
%>
|
|
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../Shared/json2.js" -->
|
|
<!-- #include file="../shared/iface.inc" -->
|
|
<!-- #include file="../shared/save2db.inc" -->
|
|
<!-- #include file="../Shared/selector.inc" -->
|
|
<!-- #include file="res.inc" -->
|
|
<%
|
|
FCLTHeader.Requires({plugins: ["jQuery"],
|
|
js: []})
|
|
|
|
var rsv_ruimte_key = getQParamInt("rsv_ruimte_key");
|
|
var new_ruimte_key = getQParamInt("res_ruimte_key");
|
|
var transitParam = buildTransitParam(["rsv_ruimte_key", "res_ruimte_key", "fres_van", "frsv_tot"]);
|
|
|
|
var submitting = getQParamInt("submit", 0) == 1;
|
|
|
|
var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering
|
|
|
|
res.res_set_dialect(rsv_ruimte_key);
|
|
|
|
sql = "SELECT rrr.res_rsv_ruimte_van"
|
|
+ " , rrr.res_rsv_ruimte_tot"
|
|
+ " , rrr.res_rsv_ruimte_volgnr"
|
|
+ " , rrr.res_reservering_key"
|
|
+ " , rr.res_ruimte_key"
|
|
+ " , " + lcl.xsqla('rr.res_ruimte_nr', 'rr.res_ruimte_key')
|
|
+ " , rrr.res_activiteit_key"
|
|
+ " , rdp.res_disc_params_preposttime"
|
|
+ " FROM res_rsv_ruimte rrr"
|
|
+ " , res_ruimte_opstelling rro"
|
|
+ " , res_ruimte rr"
|
|
+ " , res_disc_params rdp"
|
|
+ " WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
|
|
+ " AND rro.res_ruimte_key = rr.res_ruimte_key"
|
|
+ " AND rr.res_discipline_key = rdp.res_ins_discipline_key"
|
|
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var old_van = new Date(oRs("res_rsv_ruimte_van").value);
|
|
var old_tot = new Date(oRs("res_rsv_ruimte_tot").value);
|
|
var restxt = oRs("res_reservering_key").value + "/" + oRs("res_rsv_ruimte_volgnr").value;
|
|
var old_ruimte_key = oRs("res_ruimte_key").value;
|
|
var old_ruimte_oms = oRs("res_ruimte_nr").value;
|
|
var act_key = oRs("res_activiteit_key").value;
|
|
var prepost_time = oRs("res_disc_params_preposttime").value;
|
|
// LET OP: De begintijd van het verschoven blokje is met of zonder schoonmaaktijd. En schoonmaaktijd wordt in het planbord niet goed bepaald en is altijd 1 blokje
|
|
if (prepost_time > 0)
|
|
{
|
|
// De begintijd van het verschoven blokje (fres_van) is met schoonmaaktijd. Nu tijd van 1 blokje er bij op tellen
|
|
var new_van = old_van.setFloatHours(parseFloat(getQParam("fres_van")) + S("res_h"), S("res_h"));
|
|
}
|
|
else
|
|
{
|
|
// De begintijd van het verschoven blokje (fres_van) is zonder schoonmaaktijd. Geen tijd bij optellen
|
|
var new_van = old_van.setFloatHours(parseFloat(getQParam("fres_van")), S("res_h"));
|
|
}
|
|
var hours_new_van = new_van.getHours() + new_van.getMinutes()/60 + new_van.getSeconds()/60/60
|
|
var hours_new_tot = old_tot.getHours() + old_tot.getMinutes()/60 + old_tot.getSeconds()/60/60 + (new_van.getTime() - old_van.getTime())/1000/60/60
|
|
var new_tot = (old_tot).setFloatHours(parseFloat(hours_new_tot), S("res_h"));
|
|
|
|
sql = "SELECT " + lcl.xsqla('rr.res_ruimte_nr', 'rr.res_ruimte_key')
|
|
+ " , rdp.res_disc_params_maxduur"
|
|
+ " FROM res_ruimte rr"
|
|
+ " , res_disc_params rdp"
|
|
+ " WHERE rr.res_discipline_key = rdp.res_ins_discipline_key"
|
|
+ " AND rr.res_ruimte_key = " + new_ruimte_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var new_ruimte_oms = oRs("res_ruimte_nr").value;
|
|
var max_hours = oRs("res_disc_params_maxduur").value;
|
|
|
|
sql = "SELECT f.fac_functie_key"
|
|
+ " FROM fac_functie f "
|
|
+ " WHERE f.fac_functie_code IN ('WEB_RESFOF', 'WEB_RESBOF')";
|
|
var oRs = Oracle.Execute(sql);
|
|
var fac_functie_key_arr = [];
|
|
while (!oRs.eof)
|
|
{
|
|
fac_functie_key_arr.push(oRs("fac_functie_key").value);
|
|
oRs.moveNext();
|
|
}
|
|
|
|
// Ik kan deze nieuwe ruimte reserveren als aan de volgende voorwaarden zijn voldaan:
|
|
// 1) Ik heb enige schrijfrechten voor 'WEB_RESUSE', 'WEB_RESFOF', 'WEB_RESBOF' of 'WEB_RESBAC'
|
|
// 2) De ruimte kan voor de gekozen activiteit gekozen worden
|
|
// 3) Er moet een ruimte opstelling gedefinieerd zijn voor de ruimte.
|
|
sql = "SELECT DISTINCT rr.res_ruimte_key"
|
|
+ " FROM (SELECT res_ruimte_key"
|
|
+ " FROM res_ruimte_opstelling"
|
|
+ " GROUP BY res_ruimte_key) opstel_bez"
|
|
+ " , res_ruimte rr"
|
|
+ " , fac_v_webgebruiker md"
|
|
+ " WHERE rr.res_ruimte_key = opstel_bez.res_ruimte_key"
|
|
+ " AND rr.res_discipline_key = md.ins_discipline_key"
|
|
+ " AND md.prs_perslid_key = " + user_key
|
|
+ " AND md.fac_functie_key IN (" + fac_functie_key_arr.join(",") + ")"
|
|
+ " AND md.fac_gebruiker_alg_level_write < 9"
|
|
+ " AND md.fac_gebruiker_prs_level_write < 9"
|
|
+ " AND rr.res_ruimte_key = " + new_ruimte_key
|
|
+ " AND EXISTS (SELECT res_activiteit_key"
|
|
+ " FROM res_activiteitdiscipline rad"
|
|
+ " WHERE rad.res_discipline_key = rr.res_discipline_key"
|
|
+ " AND rad.res_activiteit_key = " + act_key + ")";
|
|
//ORDER BY rg.res_ruimte_nr
|
|
var oRs = Oracle.Execute(sql);
|
|
var can_reserve_newroom = !oRs.eof;
|
|
|
|
var badmsg = "";
|
|
if (old_ruimte_key != new_ruimte_key)
|
|
{ // Kon onbedoeld nog gebeuren als de reservering niet exact op de S("res_h") blokjes viel
|
|
var bTimeChanged = false;
|
|
}
|
|
else
|
|
{
|
|
var bTimeChanged = old_van.getHours() != new_van.getHours() || old_van.getMinutes() != new_van.getMinutes();
|
|
}
|
|
if (!this_res.canChange)
|
|
badmsg = L("lcl_res_no_auth_change"); // "Geen autorisatie voor het wijzigen van de ruimte";
|
|
else if (!can_reserve_newroom)
|
|
badmsg = L("lcl_res_select_diff_room"); // "Er moet wel een andere ruimte gekozen worden dan de huidige waarde";
|
|
else if (hours_new_van < S("res_t1") || hours_new_tot > S("res_t2"))
|
|
badmsg = L("lcl_res_time_out_limit"); // "De gekozen tijd valt buiten de grenzen";
|
|
else if (!bTimeChanged && old_ruimte_key == new_ruimte_key)
|
|
badmsg = L("lcl_res_no_changes"); // "Geen aanpassingen";
|
|
|
|
var duration_hours = (new_tot - new_van) / 1000/60/60;
|
|
if (!badmsg)
|
|
{
|
|
// Controle op maximale tijdsduur reservering.
|
|
if ((max_hours > 0) && (max_hours < duration_hours))
|
|
{
|
|
badmsg = L("lcl_res_bad_maxperiod").format(max_hours);
|
|
}
|
|
}
|
|
if (!badmsg)
|
|
{
|
|
// "CV" ook altijd controleren
|
|
var max_duration_err = res.max_duration_cv(rsv_ruimte_key, duration_hours);
|
|
if (max_duration_err.err)
|
|
badmsg = max_duration_err.message;
|
|
}
|
|
|
|
//user.auth_required_or_abort(this_res.canChange && can_reserve_newroom); // Je krijgt al de melding lcl_res_no_auth_change via badmsg en je mag de gegevens gewoon zien (leesrechten heb je al). Met deze regel hier krijg je een lelijke niet leesbare foutmelding in modal scherm.
|
|
%>
|
|
|
|
<html>
|
|
<head>
|
|
<% FCLTHeader.Generate()
|
|
if (submitting)
|
|
{
|
|
var opstel = getFParamInt("opstel");
|
|
user.auth_required_or_abort(this_res.canChange && can_reserve_newroom);
|
|
|
|
if (badmsg == "")
|
|
{
|
|
var fields = [ {dbs: "res_ruimte_opstel_key", typ: "key", frm: "opstel"} ];
|
|
if (bTimeChanged)
|
|
{ // Gewijzigde tijd ook opslaan
|
|
fields.push( {dbs: "res_rsv_ruimte_van", typ: "datetime", val: new_van} );
|
|
fields.push( {dbs: "res_rsv_ruimte_tot", typ: "datetime", val: new_tot} );
|
|
}
|
|
sql = buildUpdate("res_rsv_ruimte", fields) + " res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var check_fail_sql = "";
|
|
if (S("res_fe_allow_dirty") != 1 && this_res.canChangeFEOnly)
|
|
{
|
|
check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
|
+ " raise_application_error (-20000, 'res_m999 "+L("lcl_res_fe_no_dirty")+"');"
|
|
+ " end if;"
|
|
}
|
|
// Nu de echte update.
|
|
// Daarbij ook diverse controles/ updates uitvoeren op 'andere zaken'
|
|
sql = "BEGIN "
|
|
+ sql + ";"
|
|
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
|
+ " res.set_ruimtes_clean (" + old_van.toSQL() + "); " // Anderen 'clean' geworden
|
|
+ " res.follow_artikel (" + rsv_ruimte_key + ", " + old_van.toSQL(true) + ", " + old_tot.toSQL(true) + "); " // catering mee verplaatsen
|
|
+ " res.follow_deel (" + rsv_ruimte_key + ", " + old_van.toSQL(true) + ", " + old_tot.toSQL(true) + "); " // objecten mee verplaatsen
|
|
+ " res.follow_afspraak (" + rsv_ruimte_key + ", " + S("res_copy_to_bez") + "); " // bezoekers mee verplaatsen
|
|
+ check_fail_sql
|
|
+ "END;";
|
|
var err = Oracle.Execute(sql, true);
|
|
}
|
|
else
|
|
err = { friendlyMsg: badmsg }
|
|
|
|
if (err.friendlyMsg)
|
|
{
|
|
%> <script>
|
|
alert("<%=safe.jsstring(err.friendlyMsg)%>");
|
|
</script>
|
|
<% }
|
|
else
|
|
{
|
|
shared.trackaction("RESUPD", rsv_ruimte_key, L("lcl_res_track_room_shifted_from")
|
|
+ old_ruimte_oms
|
|
+ L("lcl_res_track_room_shifted_to")
|
|
+ new_ruimte_oms
|
|
);
|
|
var sql = "SELECT res_rsv_ruimte_dirtlevel"
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
oRs = Oracle.Execute(sql);
|
|
var message = "";
|
|
if (oRs("res_rsv_ruimte_dirtlevel") & res.dirtlevel.ruimte.notavailable)
|
|
{
|
|
message = L("lcl_res_dirtyroom");
|
|
}
|
|
else
|
|
{ // Als ruimte al dirty is hoeft deel niet meer gecontroleerd te worden.
|
|
var sql = "SELECT MAX(res_rsv_deel_dirtlevel) deel_dirtlevel"
|
|
+ " FROM res_rsv_deel"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
oRs = Oracle.Execute(sql);
|
|
if (oRs("deel_dirtlevel") & res.dirtlevel.deel.notavailable)
|
|
{
|
|
message = L("lcl_res_dirtyobject");
|
|
}
|
|
}
|
|
if (message)
|
|
{
|
|
%> <script>
|
|
alert("<%=safe.jsstring(message)%>");
|
|
</script>
|
|
<% }
|
|
}
|
|
%> <script type="text/javascript">
|
|
FcltMgr.closeDetail(window, { refresh: true });
|
|
</script>
|
|
<% Response.End;
|
|
}
|
|
%>
|
|
<script type="text/javascript">
|
|
function res_submit()
|
|
{
|
|
if (!validateForm("u2"))
|
|
return false;
|
|
|
|
document.u2.submit();
|
|
}
|
|
</script>
|
|
|
|
</head>
|
|
<body class="modal" id="mod_resupdateroom">
|
|
<form name="u2"
|
|
action="res_update_room_drag.asp?submit=1<%=transitParam%>"
|
|
target="hidFrameSubmit"
|
|
method="post">
|
|
|
|
<% BLOCK_START("", L("lcl_res_frame_ruimte"));
|
|
sql = "SELECT rr.res_rsv_ruimte_key"
|
|
+ " , rr.res_rsv_ruimte_omschrijving"
|
|
+ " , rr.res_rsv_ruimte_van"
|
|
+ " , rr.res_rsv_ruimte_tot"
|
|
+ " , rr.res_reservering_key"
|
|
+ " , rr.res_rsv_ruimte_volgnr"
|
|
+ " , rr.res_ruimte_opstel_key"
|
|
+ " FROM res_rsv_ruimte rr"
|
|
+ " WHERE rr.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
|
|
ROFIELDTR("fldresnum", L("lcl_reservation"), oRs("res_reservering_key") + "/" + oRs("res_rsv_ruimte_volgnr"));
|
|
ROFIELDTR("flddatechange", L("lcl_from"), toDateTimeString(oRs("res_rsv_ruimte_van").value) + (bTimeChanged? " ==> " + toDateTimeString(new_van) : ""));
|
|
ROFIELDTR("flddatechange", L("lcl_to"), toDateTimeString(oRs("res_rsv_ruimte_tot").value) + (bTimeChanged? " ==> " + toDateTimeString(new_tot) : ""));
|
|
ROFIELDTR("fldresdesc", L("lcl_descr"), oRs("res_rsv_ruimte_omschrijving").value || "-");
|
|
ROFIELDTR("fldresroomchange", L("lcl_room"), old_ruimte_oms + (old_ruimte_key != new_ruimte_key? " ==> " + new_ruimte_oms : ""));
|
|
oRs.Close();
|
|
|
|
sql = "SELECT rro.res_ruimte_opstel_key"
|
|
+ " , ro.res_opstelling_omschrijving"
|
|
+ " , COALESCE (rro.res_ruimte_opstel_default, 0)"
|
|
+ " , ro.res_opstelling_volgnr"
|
|
+ " FROM res_ruimte_opstelling rro"
|
|
+ " , res_opstelling ro"
|
|
+ " WHERE rro.res_opstelling_key = ro.res_opstelling_key"
|
|
+ " AND rro.res_ruimte_key = " + new_ruimte_key
|
|
+ " ORDER BY COALESCE (rro.res_ruimte_opstel_default, 0)"
|
|
+ " , res_opstelling_volgnr";
|
|
oRs = Oracle.Execute(sql);
|
|
ROFIELDTR("fldopstel", L("lcl_config"), oRs("res_opstelling_omschrijving").value);
|
|
%> <input type="hidden" id="opstel" name="opstel" value="<%=oRs('res_ruimte_opstel_key').value%>"> <%
|
|
|
|
BLOCK_END();
|
|
IFACE.FORM_END();
|
|
%>
|
|
</form>
|
|
<iframe src="../Shared/empty.html"
|
|
onload="iface.button.enable('btn_res_submit')";
|
|
name="hidFrameSubmit"
|
|
style="display:none"></iframe>
|
|
<%
|
|
if (badmsg != "") { %>
|
|
<br><font color=red><%=badmsg%></font>
|
|
<% }
|
|
|
|
var buttons = [];
|
|
if (badmsg == "")
|
|
buttons.push({ title: L("lcl_submit"), action: "res_submit()", singlepress: true, id:"btn_res_submit" });
|
|
buttons.push({ title: L("lcl_cancel"), action: "FcltMgr.closeDetail(window, { cancel: true } )"});
|
|
CreateButtons(buttons);
|
|
%>
|
|
</body>
|
|
</html> |