413 lines
18 KiB
Plaintext
413 lines
18 KiB
Plaintext
<%@language = "javascript" %>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: wp_add.asp
|
|
Description: Voeg deelreserveringen voor werkplekken toe. Vermeld hierbij eventueel de personen waarvoor deze gereserveerd worden.
|
|
Parameters: rsv_copy_key de oorsprinkelijke reservering
|
|
urole
|
|
Note:
|
|
*/ %>
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../pda/mobile.inc" -->
|
|
<!-- #include file="../pda/iface.inc" -->
|
|
<!-- #include file="../Shared/persoonselector.inc" -->
|
|
<!-- #include file="../Shared/selector.inc" -->
|
|
<!-- #include file="../res/res.inc" -->
|
|
<%
|
|
FCLTHeader.Requires({plugins: ["jQuery"], css: [rooturl+"/appl/res/res.css"]});
|
|
|
|
var urole = getQParamSafe("urole");
|
|
var modal = getQParamInt("modal", 0) == 1;
|
|
var qrc = getQParamInt("qrc", 0) != 0;
|
|
var isMobile = getQParamInt("ismobile", 0);
|
|
var submitting = getQParamInt("submit", 0) == 1;
|
|
var rsv_ruimte_key = getQParamInt("rsv_copy_key");
|
|
var transitParam = buildTransitParam(["urole", "modal", "rsv_copy_key"]);
|
|
|
|
var this_disc_key = -1;
|
|
var sql = "SELECT MIN(d.res_discipline_key) res_discipline_key"
|
|
+ " FROM (SELECT rd.res_discipline_key"
|
|
+ " FROM res_rsv_deel rsd"
|
|
+ " , res_deel rd"
|
|
+ " WHERE rsd.res_deel_key = rd.res_deel_key"
|
|
+ " AND rsd.res_rsv_ruimte_key = " + rsv_ruimte_key
|
|
+ " ) d"
|
|
+ " , res_disc_params p"
|
|
+ " , fac_v_webgebruiker w"
|
|
+ " WHERE d.res_discipline_key = p.res_ins_discipline_key"
|
|
+ " AND d.res_discipline_key = w.ins_discipline_key"
|
|
+ " AND p.res_disc_params_intervals IS NOT NULL"
|
|
+ " AND w.prs_perslid_key = " + user_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
{
|
|
this_disc_key = oRs("res_discipline_key").Value;
|
|
}
|
|
oRs.Close();
|
|
|
|
var authRES = user.func_enabled2("RES", { ins_discipline_key: this_disc_key });
|
|
user.auth_required_or_abort(authRES.canWrite("WEB_RESUSE"));
|
|
|
|
if (submitting)
|
|
{
|
|
protectRequest.validateToken();
|
|
|
|
var host_key = getFParamInt("colx", -1);
|
|
var werkplek_key = getFParamInt("wplx", -1);
|
|
|
|
if (werkplek_key > 0)
|
|
{ // Nieuwe res_rsv_ruimte_key ophalen
|
|
var sql = "SELECT res_s_res_rsv_ruimte_key.nextval FROM DUAL";
|
|
var oRs = Oracle.Execute(sql);
|
|
var nextkey = oRs(0).Value;
|
|
oRs.Close();
|
|
// Eerst de deelreservering aanmaken...
|
|
var sql = "INSERT INTO res_rsv_ruimte"
|
|
+ "( res_rsv_ruimte_key"
|
|
+ ", res_reservering_key"
|
|
+ ", res_rsv_ruimte_volgnr"
|
|
+ ", res_rsv_ruimte_omschrijving"
|
|
+ ", res_rsv_ruimte_opmerking"
|
|
+ ", alg_ruimte_key"
|
|
+ ", res_ruimte_opstel_key"
|
|
+ ", mld_opdr_key"
|
|
+ ", res_rsv_ruimte_van"
|
|
+ ", res_rsv_ruimte_tot"
|
|
+ ", prs_kostenplaats_key"
|
|
+ ", res_rsv_ruimte_host_key"
|
|
+ ", res_activiteit_key"
|
|
+ ", res_status_fo_key"
|
|
+ ", res_status_bo_key"
|
|
+ ", res_rsv_ruimte_kosten_klant"
|
|
+ ", res_rsv_ruimte_contact_key"
|
|
+ ", res_rsv_ruimte_cvab_mode"
|
|
+ ", res_rsv_ruimte_telefoon"
|
|
+ ", res_rsv_ruimte_extern_meeting"
|
|
+ ")"
|
|
+ " SELECT " + nextkey
|
|
+ " , r.res_reservering_key"
|
|
+ " , (SELECT MAX(COALESCE(a.res_rsv_ruimte_volgnr, 0)) + 1"
|
|
+ " FROM res_rsv_ruimte a"
|
|
+ " WHERE a.res_reservering_key = r.res_reservering_key"
|
|
+ ")"
|
|
+ " , r.res_rsv_ruimte_omschrijving"
|
|
+ " , r.res_rsv_ruimte_opmerking"
|
|
+ " , (SELECT ins_alg_ruimte_key" // Ruimte van extra werkplek ophalen
|
|
+ " FROM res_deel r" // (hoeft niet hetzelfde te zijn als
|
|
+ " , ins_deel i" // de ruimte van oorspronkelijke werkplek).
|
|
+ " WHERE r.res_ins_deel_key = i.ins_deel_key"
|
|
+ " AND r.res_deel_key = " + werkplek_key
|
|
+ ")"
|
|
+ " , r.res_ruimte_opstel_key"
|
|
+ " , r.mld_opdr_key"
|
|
+ " , r.res_rsv_ruimte_van"
|
|
+ " , r.res_rsv_ruimte_tot"
|
|
+ " , r.prs_kostenplaats_key"
|
|
+ " , " + (host_key > 0 ? host_key : "r.res_rsv_ruimte_host_key")
|
|
+ " , r.res_activiteit_key"
|
|
+ " , r.res_status_fo_key"
|
|
+ " , r.res_status_bo_key"
|
|
+ " , r.res_rsv_ruimte_kosten_klant"
|
|
+ " , r.res_rsv_ruimte_contact_key"
|
|
+ " , r.res_rsv_ruimte_cvab_mode"
|
|
+ " , r.res_rsv_ruimte_telefoon"
|
|
+ " , r.res_rsv_ruimte_extern_meeting"
|
|
+ " FROM res_rsv_ruimte r"
|
|
+ " WHERE r.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var err = Oracle.Execute(sql, true);
|
|
if (err.friendlyMsg)
|
|
abort_with_warning(err.friendlyMsg + "\n\n\n");
|
|
// ...en dan de werkplek zelf reserveren.
|
|
var sql_wpl = "INSERT INTO res_rsv_deel"
|
|
+ "( res_deel_key"
|
|
+ ", res_rsv_deel_aantal"
|
|
+ ", res_status_bo_key"
|
|
+ ", res_rsv_ruimte_key"
|
|
+ ", res_rsv_deel_van"
|
|
+ ", res_rsv_deel_tot"
|
|
+ ") "
|
|
+ " SELECT " + werkplek_key
|
|
+ " , 1"
|
|
+ " , res_status_bo_key"
|
|
+ " , " + nextkey
|
|
+ " , res_rsv_deel_van"
|
|
+ " , res_rsv_deel_tot"
|
|
+ " FROM res_rsv_deel"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var err = Oracle.Execute(sql_wpl, true);
|
|
if (err.friendlyMsg)
|
|
abort_with_warning(err.friendlyMsg + "\n\n\n");
|
|
//
|
|
shared.trackaction("RESNEW", nextkey);
|
|
}
|
|
|
|
var sql_upd = "UPDATE res_rsv_ruimte"
|
|
+ " SET res_rsv_ruimte_bezoekers ="
|
|
+ " (SELECT COUNT(*)"
|
|
+ " FROM res_rsv_ruimte rsv_r"
|
|
+ " , res_rsv_deel rsv_d"
|
|
+ " WHERE rsv_r.res_rsv_ruimte_key = rsv_d.res_rsv_ruimte_key"
|
|
+ " AND res_reservering_key = (SELECT res_reservering_key"
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key
|
|
+ ")"
|
|
+ " )"
|
|
+ " WHERE res_reservering_key ="
|
|
+ " (SELECT res_reservering_key"
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key
|
|
+ " )";
|
|
var err = Oracle.Execute(sql_upd, true);
|
|
if (err.friendlyMsg)
|
|
abort_with_warning(err.friendlyMsg + "\n\n\n");
|
|
|
|
submitting = 0; // Ga door naar het overzicht gekozen werkplekken om eventueel nog een extra werkplek te reserveren.
|
|
} // end submitting
|
|
|
|
|
|
// Gegevens van hoofdreservering
|
|
// De ruimte-coordinaat wordt berekend aan de hand van het zwaartepunt van de (nog) reserveerbare werkplekken.
|
|
// Indien een x- en/of y-coordinaat van een werkplek niet bekend is wordt de hele werkplek niet meegenomen in de berekening.
|
|
// Als er geen werplekken met coordinaten zijn dan heeft de ruimte ook geen coordinaten (=NULL).
|
|
// Om werkplekken te sorteren op basis van nabijheid wordt de afstand tussen de gekozen werkplek en de andere ruimten bepaald
|
|
// en binnen dezelfde ruimte de afstand tussen de reeds gekozen werkplek en de overige werkplekken.
|
|
var rrr = {};
|
|
var sql = "SELECT rsv_r.res_reservering_key"
|
|
+ " , rsv_r.res_rsv_ruimte_volgnr"
|
|
+ " , ar.alg_ruimte_key"
|
|
+ " , ar.alg_verdieping_key"
|
|
+ " , rsv_r.res_rsv_ruimte_van"
|
|
+ " , rsv_r.res_rsv_ruimte_tot"
|
|
+ " , disc.ins_discipline_omschrijving"
|
|
+ " , rd.res_discipline_key"
|
|
+ " , rd.res_deel_omschrijving"
|
|
+ " , act.res_srtactiviteit_key"
|
|
+ " , insd.ins_deel_DWGX"
|
|
+ " , insd.ins_deel_DWGY"
|
|
+ " , z.ins_ruimte_x"
|
|
+ " , z.ins_ruimte_y"
|
|
+ " FROM res_rsv_ruimte rsv_r"
|
|
+ " , res_rsv_deel rsv_d"
|
|
+ " , res_v_aanwezigdeel rd"
|
|
+ " , res_disc_params rdp"
|
|
+ " , alg_v_aanwezigruimte ar"
|
|
+ " , res_activiteit act"
|
|
+ " , res_deel resd"
|
|
+ " , ins_deel insd"
|
|
+ " , res_discipline disc"
|
|
+ " , (" + res.getRuimteXY_sql() + ") z"
|
|
+ " WHERE rsv_r.res_rsv_ruimte_key = rsv_d.res_rsv_ruimte_key"
|
|
+ " AND rsv_r.alg_ruimte_key = ar.alg_ruimte_key"
|
|
+ " AND rsv_d.res_deel_key = rd.res_deel_key"
|
|
+ " AND rd.res_discipline_key = rdp.res_ins_discipline_key"
|
|
+ " AND rsv_r.res_activiteit_key = act.res_activiteit_key"
|
|
+ " AND rsv_d.res_deel_key = resd.res_deel_key"
|
|
+ " AND resd.res_ins_deel_key = insd.ins_deel_key"
|
|
+ " AND rd.res_discipline_key = disc.ins_discipline_key"
|
|
+ " AND insd.ins_alg_ruimte_key = z.ins_alg_ruimte_key"
|
|
+ " AND rdp.res_ins_discipline_key = z.res_discipline_key"
|
|
+ " AND rsv_r.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
{
|
|
lcl.set_dialect(oRs("res_srtactiviteit_key").Value, "RES_SRTACTIVITEIT_KEY");
|
|
var rrr = { rsv: { reservering_key: oRs("res_reservering_key").Value
|
|
, reservering_volgnr: oRs("res_rsv_ruimte_volgnr").Value
|
|
, rsv_ruimte_key: rsv_ruimte_key
|
|
, disc_oms: oRs("ins_discipline_omschrijving").Value
|
|
, discipline_key: oRs("res_discipline_key").Value
|
|
, verdieping_key: oRs("alg_verdieping_key").Value
|
|
, ruimte_key: oRs("alg_ruimte_key").Value
|
|
, van: new Date(oRs("res_rsv_ruimte_van").Value)
|
|
, tot: new Date(oRs("res_rsv_ruimte_tot").Value)
|
|
, x: oRs("ins_ruimte_x").Value
|
|
, y: oRs("ins_ruimte_y").Value
|
|
}
|
|
, wp: { deel_oms: oRs("res_deel_omschrijving").Value
|
|
, x: oRs("ins_deel_DWGX").Value
|
|
, y: oRs("ins_deel_DWGY").Value
|
|
}
|
|
}
|
|
}
|
|
oRs.Close();
|
|
|
|
// Aantal werplekken nog beschikbaar.
|
|
var sql = "SELECT COUNT(*) aantal"
|
|
+ " FROM ("+ res.getNearestWP_sql(rsv_ruimte_key, rrr) + ")";
|
|
var oRs = Oracle.Execute(sql);
|
|
var aantal_wp_beschikbaar = oRs("aantal").Value;
|
|
oRs.Close();
|
|
%>
|
|
|
|
<html>
|
|
<head>
|
|
<% FCLTMHeader.Generate({title: L("lcl_mobile_reserveringen")}); %>
|
|
<style>
|
|
<% if (modal)
|
|
{ // Voorkom te groot scherm als modal popup
|
|
%>
|
|
.ui-mobile,.ui-mobile .ui-page {min-height:100px}
|
|
<% } %>
|
|
</style>
|
|
|
|
<script type='text/javascript'>
|
|
var modal = <%=modal ? 1 : 0%>;
|
|
|
|
async function wpl_submit()
|
|
{
|
|
document.activeElement.blur(); // trigger laatste onChanges
|
|
|
|
if (!await validateForm("u2"))
|
|
return false;
|
|
|
|
document.forms.wp_add.submit();
|
|
}
|
|
|
|
function btn_ready()
|
|
{
|
|
if (modal == 1)
|
|
{
|
|
FcltMgr.closeDetail(window, { cancel: true });
|
|
}
|
|
else
|
|
{
|
|
window.location.href = "Facilitor.asp";
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
|
|
<body class="resruimte" id="res_copy_wpbody">
|
|
<%
|
|
|
|
if (!submitting)
|
|
{
|
|
// Scherm met informatie over de werkplekreservering van de gebruiker
|
|
// en de eventuele overige werkplekken die erbij gereserveerd zijn.
|
|
// Van hieruit kan men naar het extra werkplek toegevoegen, en komt daarna ook weer hier terug.
|
|
PAGE_START({id: "page-1-" + rsv_ruimte_key});
|
|
HEADER ({title: L('lcl_res_my_reservation'), back:!qrc, home: !qrc});
|
|
CONTENT_START({ pclass: "breathe dont-break-out" });
|
|
// Gegevens eigen reservering.
|
|
CONTAINER_START();
|
|
var res_nr = rrr.rsv.reservering_key + "/" + rrr.rsv.reservering_volgnr;
|
|
if (isMobile) {
|
|
var res_url = rooturl + "/appl/pda/reservering.asp?urole=" + urole + "&rsv_ruimte_key=" + rsv_ruimte_key;
|
|
var result = '<a href="' + res_url + '">' + res_nr + '</a>';
|
|
} else {
|
|
var res_url = rooturl + "/?u=reservering&k=" + rsv_ruimte_key;
|
|
var result = '<a href="' + res_url + '" target="_blank" rel="noopener noreferrer">' + res_nr + '</a>';
|
|
}
|
|
%> <label><%=L("lcl_res_number")%></label>
|
|
<div><%=result%></div>
|
|
<label><%=L("lcl_date")%></label>
|
|
<div><%=toDateString(rrr.rsv.van, true)%></div>
|
|
<label><%=L("lcl_time")%></label>
|
|
<div><%=(toTimeString(rrr.rsv.van) + " - " + toTimeString(rrr.rsv.tot))%></div>
|
|
<%
|
|
CONTAINER_END();
|
|
|
|
CONTAINER_START();
|
|
// werkplek en naam persoon van extra reservering
|
|
Response.Write('<label>' + L("lcl_res_reserved_workplace") + '</label>');
|
|
var sql = "SELECT (SELECT prs_perslid_naam_friendly"
|
|
+ " FROM prs_v_perslid_fullnames pf"
|
|
+ " WHERE pf.prs_perslid_key = rsv_r.res_rsv_ruimte_host_key"
|
|
+ ") host"
|
|
+ " , rd.res_deel_omschrijving werkplek"
|
|
+ " FROM res_rsv_ruimte rsv_r"
|
|
+ " , res_rsv_deel rsv_d"
|
|
+ " , res_deel rd"
|
|
+ " , ins_deel id"
|
|
+ " WHERE rsv_r.res_rsv_ruimte_key = rsv_d.res_rsv_ruimte_key"
|
|
+ " AND rsv_d.res_deel_key = rd.res_deel_key"
|
|
+ " AND rd.res_ins_deel_key = id.ins_deel_key"
|
|
+ " AND rsv_r.res_reservering_key = (SELECT res_reservering_key"
|
|
+ " FROM res_rsv_ruimte"
|
|
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key
|
|
+ ")"
|
|
+ " ORDER BY rsv_r.res_rsv_ruimte_volgnr";
|
|
var oRs = Oracle.Execute(sql);
|
|
var itsme = true;
|
|
|
|
%> <table class="w-100"><%
|
|
while (!oRs.eof) {
|
|
%> <tr<%=itsme ? ' class="italic bold"' : ''%>>
|
|
<td><%=safe.html(oRs("werkplek").Value)%></td>
|
|
<td><%=safe.html(oRs("host").Value)%></td>
|
|
</tr><%
|
|
itsme = false;
|
|
oRs.MoveNext();
|
|
}
|
|
%> </table><%
|
|
|
|
oRs.CLose();
|
|
CONTAINER_END();
|
|
|
|
CONTROLGROUP_START({ horizontal: false });
|
|
if (aantal_wp_beschikbaar > 0)
|
|
{
|
|
BUTTON( L("lcl_res_werkplek_add").format(rrr.rsv.disc_oms)
|
|
, { id: "uitnodiging"
|
|
, linkid: "#page-2-"+rsv_ruimte_key
|
|
, icon: "fa-plus"
|
|
, singlepress: true
|
|
});
|
|
}
|
|
BUTTON( L("lcl_pda_ready")
|
|
, { click: "btn_ready()"
|
|
, icon: "fa-check"
|
|
, singlepress: true
|
|
});
|
|
CONTROLGROUP_END();
|
|
CONTENT_END();
|
|
FOOTER();
|
|
PAGE_END();
|
|
|
|
|
|
// Scherm voor het selecteren van de extra werkplek en persoon waarvoor bestemd.
|
|
PAGE_START({id: "page-2-" + rsv_ruimte_key});
|
|
HEADER ({title: L('lcl_res_my_reservation'), back:!qrc, home: !qrc});
|
|
CONTENT_START();
|
|
FORM_START("wp_add", {action: "wp_add.asp?submit=1" + transitParam, method: "post"});
|
|
var similarWP_sql = res.getNearestWP_sql(rsv_ruimte_key, rrr);
|
|
FCLTselector( "wplx"
|
|
, similarWP_sql
|
|
, { label: L("lcl_workplace")
|
|
, emptyOption: L("lcl_select_werkplek")
|
|
, required: true
|
|
, mobile: true
|
|
}
|
|
);
|
|
var autlevel = urole == "fe" ? (("WEB_RESUSE" in authRES._funcodes) ? authRES._funcodes["WEB_RESUSE"].PRSwritelevel : 9)
|
|
: (("WEB_RESFOF" in authRES._funcodes) ? authRES._funcodes["WEB_RESFOF"].PRSwritelevel : 9);
|
|
FCLTpersoonselector( "colx"
|
|
, "sgPerson"
|
|
, { label: L("lcl_res_reserve_for")
|
|
, autlevel: autlevel
|
|
, mobile: true
|
|
, embedded: true
|
|
}
|
|
);
|
|
|
|
CONTROLGROUP_START({ horizontal: false });
|
|
BUTTON( L("lcl_submit")
|
|
, { click: "wpl_submit()"
|
|
, icon: "fa-fclt-save"
|
|
, singlepress: true
|
|
});
|
|
|
|
CONTROLGROUP_END();
|
|
IFACE.FORM_END();
|
|
FORM_END();
|
|
CONTENT_END();
|
|
FOOTER();
|
|
PAGE_END();
|
|
} // end !submitting
|
|
PDA_PAGE_END();
|
|
%>
|
|
</body>
|
|
</html>
|
|
<% ASPPAGE_END(); %> |