Files
Facilitor/APPL/PDA/wp_add.asp
Jos Groot Lipman b30badcae2 Merge 2025.2 Gold A patches
svn path=/Website/trunk/; revision=69758
2025-07-14 08:13:36 +00:00

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