Files
Facilitor/APPL/FAC/fac_list.asp
Erik Groener f395f12f71 AADS#61082 Reservering komt meerdere malen terug in overzicht
svn path=/Website/branches/v2019.2/; revision=45583
2020-01-27 08:51:16 +00:00

881 lines
47 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: fac_list.asp
Description: Toont verplichtingen (lopende zaken) etc van user
Parameters: prs_key optioneel (anders user_key)
Context:
Note: De urole (voor vervolgacties) wordt impliciet bepaald door
de prs_key: is het de lijst van mezelf, dan ga ik met fe verder,
is het de lijst van een ander, dan ga ik met fo verder.
Note: mld.inc en res.inc wordt geinclude tbv single source. Afgewogen.
tussen: includen, getmldstatustext hierin kopieren, getmldstatustext naar shared.inc moven.
Gekozen voor de eerste, de derde zou beter zijn (later) TODO
Note: Naar wens kan met de dates parameter de zichtbaarheid van datumkolommen worden beinvloed (voor widgetportal)
Note: Alleen als het je eigen (user_key) zaken zijn worden meldingen waar je behandelaar van bent toegevoegd.
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/data_recordset.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../shared/rater.inc" -->
<!-- #include file="../mld/mld.inc" -->
<!-- #include file="../res/res.inc" -->
<!-- #include file="fac.inc" -->
<%
var pkey = getQParamInt("prs_key", user_key);
var outputmode = getQParamInt("outputmode", 0); // 0 = screen, 1 = print, 2 = excel etc
var showall = getQParamInt("showall", 0) == 1;
var faclist_mode = getQParamInt("dates", 1);
// 0 = do not show datecolumns
// &1 = show expected end date (default)
// &2 = show last modification date
// &4 = show first (registration) date
var urole = "?";
if (pkey == user_key)
urole = "fe";
else
urole = "fo";
// TODO: Moet dit niet met behulp van bes.getbesbestellingstatustext
function bes_getstatustext (p)
{
var statustekst = "??";
var s = parseInt(p, 10);
switch (s) {
case 1: { statustekst = L("lcl_bes_afgewezen"); break; }
case 2: { statustekst = L("lcl_bes_new"); break; }
case 3: { statustekst = L("lcl_bes_gefiatteerd"); break; }
case 4: { statustekst = L("lcl_bes_geaccepteerd"); break; }
case 5: { statustekst = L("lcl_bes_besteld"); break; }
case 6: { statustekst = L("lcl_bes_geleverd"); break; }
case 7: { statustekst = L("lcl_bes_verwerkt"); break; }
case 8: { statustekst = L("lcl_bes_mixed"); break; }
}
return statustekst;
}
function fnstatus(oRs)
{ // Soms is deze statustekst een lcl, soms moet je de status_key gebruiken voor vertaling
switch (oRs.Fields("xmlnode").Value)
{
case "melding": statusstr = (oRs.Fields("status").Value && (oRs.Fields("status_key").Value == 4 || oRs.Fields("status_key").Value == 7)) ? L("lcl_at_team").format(oRs.Fields("status").Value) : mld.getmldstatustext(oRs.Fields("status_key").Value); break
case "reservering": statusstr = (oRs.Fields("bo_status_key").Value == 5 || oRs.Fields("bo_status_key").Value == 6)? res.getbostatustext(oRs.Fields("bo_status_key").Value) : res.getfostatustext(oRs.Fields("status_key").Value); break;
case "afspraak": statusstr = fac.localstring("" + oRs.Fields("status").Value); break; // als lcl beschikbaar
case "bestelling": statusstr = bes_getstatustext(oRs.Fields("status_key").Value); break;
case "deel": statusstr = L("lcl_geleend_object"); break; // nvt
}
return safe.html(statusstr);
}
function fntime(oRs)
{
var timestr = "";
switch (oRs.Fields("xmlnode").Value)
{
case "bestelling":
case "melding": var dt = new Date(oRs.Fields("datum").Value);
if (dt.getTime() != dt.midnight().getTime())
timestr = toTimeString(dt);
break;
case "reservering":
case "afspraak": timestr = toTimeString(oRs.Fields("datum").Value);
break;
case "deel": timestr = "";
break;
}
return timestr;
}
function fncolType(oRs)
{
var txt= "??";
switch (oRs.Fields("xmlnode").Value) {
case "melding": txt = L("lcl_complain"); break;
case "reservering": txt = L("lcl_reservation"); break;
case "bestelling": txt = L("lcl_bes_bestelling"); break;
case "afspraak": txt = L("lcl_vis_appointment"); break;
case "deel": txt = ""; break; // status vertelt L("lcl_geleend_object")
}
return txt + " " + oRs.Fields("item").Value;
}
function isGereed(pxmlnode, pstatuskey)
{
var isgereed = false;
switch (pxmlnode)
{
case "bestelling" : var isgereed = (pstatuskey == 1 || pstatuskey == 6 || pstatuskey == 7 || pstatuskey == 8)
break;
case "melding" : var isgereed = (pstatuskey == 1 || pstatuskey == 5 || pstatuskey == 6)
break;
case "reservering": var isgereed = (pstatuskey == 5 || pstatuskey == 6)
break;
}
return isgereed;
}
function fnLike(oRs, processParams)
{
var isRemote = (processParams && processParams.disc_key);
var likesymbol = "";
var xmlnode = oRs.Fields("xmlnode").Value;
var statuskey = oRs.Fields("status_key").Value;
var bostatuskey = oRs.Fields("bo_status_key").Value;
// Als xmlmode niet "reservering" is, dan is het zetten van het likesybol alleen afhankelijk van isGereed().
// Voor xmlmode "reservering" moet het likesymbol worden gezet als (isGereed || v_like).
var v_like = false;
if (xmlnode == "reservering")
{
// Alleen voor reserveringen extra controle.
var vandaag = new Date();
var dteinde = new Date(oRs.Fields("datum_eind").value);
var flike_days = vandaag.getTime() - dteinde.getTime();
var flike_past = S("facilities_flike_past") * 1000 * 60 * 60 * 24;
flike_days = (flike_days < 0 ? flike_past+1 : flike_days); // Als flike_days < 0 dan is de reservering nog niet afgelopen, dus mag nog niet worden beoordeeld
v_like = (flike_days < flike_past);
}
// Wat al beoordeeld is in ieder geval tonen.
if (oRs.Fields("satisfaction").Value)
likesymbol = rating.stars(oRs.Fields("satisfaction").Value, {shownone: true, rating: {note: oRs.Fields("satisfaction_op").Value}});
if ((isGereed(xmlnode, (xmlnode == "reservering"? bostatuskey : statuskey)) || v_like) && oRs.Fields("soort").Value != "2")
{
if (pkey == user_key)
{
likesymbol = rating.stars(oRs.Fields("satisfaction").Value, {shownone: true, rating: {note: oRs.Fields("satisfaction_op").Value}});
likesymbol = "<div class='flikelist' onclick='fLike(event, \"" + oRs.Fields("item_key").Value + "\", \"" + oRs.Fields("xmlnode").Value +"\", "+(isRemote?1:0)+")'>" + likesymbol + "</div>";
}
}
return likesymbol;
}
function fnMark(oRs)
{
// aanduiding of de bal bij jou ligt
var actiecode = oRs.Fields("mark").Value;
var txt= "";
switch (oRs.Fields("xmlnode").Value) {
case "melding":
if (oRs.Fields("soort").Value == "2") // je bent FOBO-behandelaar
{
if (outputmode == 0)
txt = "<span class='ac2' title='"+L("lcl_mld_behandelaarYou")+"'><i class='fa fa-arrow-right fa-lg fa-fw'/></span>";
else
txt = L("lcl_mld_behandelaarYou");
}
// echter: als de bal bij de melder ligt is dat belangrijker (ligt even niet bij jou als FOBO), dus gewoon daaroverheen:
if (actiecode & 2)
{
if (outputmode == 0)
txt = "<span class='ac2' title='"+L("lcl_mld_actiecodeYou")+"'><i class='fa fa-comments-o fa-lg fa-fw'/></span>";
else
txt = L("lcl_mld_actiecodeFE");
}
break;
}
return txt;
}
function fnExtra1(oRs)
{
var txt= "";
switch (oRs.Fields("xmlnode").Value) {
case "melding": txt = (oRs.Fields("extra1").Value ? "<i class='fa fa-circle mldflag"+oRs.Fields("extra1").Value+"'></i>&nbsp;"+L("lcl_mld_flag"+oRs.Fields("extra1").Value) : ""); break;
case "reservering": txt = (oRs.Fields("extra1").Value ? "<i class='fa fa-circle resflag"+oRs.Fields("extra1").Value+"'></i>&nbsp;"+L("lcl_res_flag"+oRs.Fields("extra1").Value) : ""); break;
case "afspraak": txt = (oRs.Fields("extra1").Value ? "<i class='fa fa-circle bezflag"+oRs.Fields("extra1").Value+"'></i>&nbsp;"+L("lcl_bez_flag"+oRs.Fields("extra1").Value) : ""); break;
case "bestelling":
case "deel": txt = ""; break;
}
return txt;
}
function fnrowData(oRs, processParams)
{
var data = {module:oRs.Fields("xmlnode").Value, item: oRs.Fields("item").Value};
if (processParams && processParams.disc_key)
{
data.disc_key = processParams.disc_key;
data.deepurl = oRs.Fields("deepurl").Value;
}
return JSON.stringify(data);
}
var recent = new Date();
function fnrowClass(oRs)
{
var lclass = "";
var lnow = new Date();
var lthisdate = new Date(oRs.Fields("datum").Value);
var xmlnode = oRs.Fields("xmlnode").Value;
var statuskey = oRs.Fields("status_key").Value;
var bostatuskey = oRs.Fields("bo_status_key").Value;
if (lthisdate.toDateString() == lnow.toDateString())
lclass += " today";
else if (lthisdate < lnow)
lclass += " past";
else
lclass += " future";
if (isGereed(xmlnode, (xmlnode == "reservering"? bostatuskey : statuskey)))
lclass += " isready";
if (oRs.Fields("status_key").Value == -1)
lclass = " listfatal"; // ja, deze overruled de vorige classes
// Tracking: hoe lang geleden voor het laatst gewijzigd?
if (oRs.Fields("recentdatum").Value != null)
{
var ltrackdate1 = new Date();
var ltrackdate10 = new Date();
var ltrackdate100 = new Date();
var module = oRs.Fields("xmlnode").Value;
var soort = oRs.Fields("soort").Value;
if (soort) lclass += " lzsoort"+soort; // je weet nooit waar het goed voor is
switch (module)
{
case "melding": ltrackdate1.setMinutes(recent.getMinutes() - S("mld_melding_recent"));
ltrackdate10.setMinutes(recent.getMinutes() - S("mld_melding_recent")*12);
ltrackdate100.setMinutes(recent.getMinutes() - S("mld_melding_recent")*12*2);
break;
case "reservering": ltrackdate1.setMinutes(recent.getMinutes() - S("res_reservering_recent"));
ltrackdate10.setMinutes(recent.getMinutes() - S("res_reservering_recent")*12);
ltrackdate100.setMinutes(recent.getMinutes() - S("res_reservering_recent")*12*2);
break;
case "bestelling": break;
case "afspraak": ltrackdate1.setMinutes(recent.getMinutes() - S("mld_melding_recent"));
ltrackdate10.setMinutes(recent.getMinutes() - S("mld_melding_recent")*12);
ltrackdate100.setMinutes(recent.getMinutes() - S("mld_melding_recent")*12*2);
break;
case "deel": break;
}
var fac_recent = new Date(oRs.Fields("recentdatum").Value);
if (fac_recent > ltrackdate1)
{
lclass += " updated";
}
else if (fac_recent > ltrackdate10)
{
lclass += " updated10";
}
else if (fac_recent > ltrackdate100)
{
lclass += " updated100";
}
}
return lclass;
}
function sqlTracking(refkey, node)
{ // Voeg laatste tracking datum toe
// Die tracking voor in tekst of tooltip ook selecteren = lastig
// En kan toch ook best voor BES? Dan ws de bestelopdr meenemen. en wellicht nog meer?
if (node == 'melding' || node == 'reservering'|| node == 'afspraak')
{
sqltrack = ", (SELECT MAX(t.fac_tracking_datum)"
+ " FROM fac_tracking t"
+ " , fac_srtnotificatie sn"
+ " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
+ " AND t.fac_tracking_refkey = " + refkey
+ " AND sn.fac_srtnotificatie_xmlnode = " + safe.quoted_sql(node)
+ " ) recentdatum";
}
else
{
sqltrack = ", null recentdatum"
}
return sqltrack;
}
%>
<html>
<head>
<% FCLTHeader.Generate({outputmode: outputmode}) %>
<script type='text/javascript'>
function facDetail(row, autolike)
{
var facData = eval('(' + row.getAttribute("ROWDATA") + ')');
var item_key = row.getAttribute("ROWKEY");
var module = facData.module;
switch (module)
{
case "melding":
FcltMgr.openDetail("appl/mld/mld_melding.asp?urole=xx&mld_key=" + item_key, { reuse: true });
break;
case "reservering":
if (facData.disc_key)
{
var deepurl = facData.deepurl;
if (autolike)
deepurl += "&autolike=1";
url = "appl/res/res_goto_extern.asp?res_disc_key=" + facData.disc_key + "&deepurl=" + escape(deepurl);
FcltMgr.openDetail(url, { reuse: true, is_extern: true, titel: L("lcl_reservation_extern") + " " + facData.item });
}
else // Gewoon intern
FcltMgr.openDetail("appl/res/res_reservering.asp?urole=<%=urole%>&rsv_ruimte_key=" + item_key, { reuse: true });
break;
case "bestelling":
FcltMgr.openDetail("appl/bes/bes_bestelling.asp?urole=<%=urole%>&bes_key=" + item_key, { reuse: true });
break;
case "afspraak":
FcltMgr.openDetail("appl/bez/bez_afspraak.asp?urole=<%=urole%>&afspr_key=" + item_key, { reuse: true });
break;
case "deel":
FcltMgr.openDetail("appl/ins/ins_deel.asp?urole=<%=urole%>&ins_key=" + item_key, { reuse: true });
break;
}
}
function fLike (event, itemkey, node, isRemote)
{
FcltMgr.stopPropagation(event);
if (!isRemote)
{
FcltMgr.openModalDetail("fac_like.asp?key=" + itemkey + "&node=" + node, L("lcl_fac_like"), {callback: FcltCallbackRefresh});
}
else
{
var deze = event.srcElement || event.target;
facDetail($(deze).closest("tr")[0], true);
}
}
</script>
</head>
<body id="listbody">
<%
var xfunc = user.func_enabled("*", null, null, pkey);
var modules = [];
if (xfunc.canRead("WEB_MLDFOF") || xfunc.canRead("WEB_MLDBOF"))
modules.push("melding");
if (xfunc.canRead("WEB_RESFOF") || xfunc.canRead("WEB_RESBOF"))
modules.push("reservering");
if (xfunc.canRead("WEB_BESFOF") || xfunc.canRead("WEB_BESBOF"))
modules.push("bestelling");
if (xfunc.canRead("WEB_BEZFOF") || xfunc.canRead("WEB_BEZBOF"))
modules.push("afspraak");
if (xfunc.canRead("WEB_INSMAN"))
modules.push("deel");
var module_filter;
if (pkey == user_key)
module_filter = "";
else if (modules.length == 0)
module_filter = " AND 0 = 1";
else
module_filter = " AND xmlnode IN (" + safe.quoted_sql_join(modules) + ")";
// Bij MLD hebben we de discipline_key toch al en kunnen we strenger controleren
// Merk op dat het nog wel een beetje grof is: we betrekken ALG en PRS-scope er verder niet
// bij
function lees_rechten_op(discipline_veld, autfunctions)
{
var sql = " AND {0} IN ".format(discipline_veld)
+ " (SELECT ins_discipline_key"
+ " FROM fac_v_webgebruiker w, "
+ " fac_functie"
+ " WHERE fac_functie_code IN ({0})".format(safe.quoted_sql_join(autfunctions))
+ " AND w.prs_perslid_key = {0}".format(user_key)
+ " AND fac_gebruiker_prs_level_read < 9)";
return sql;
}
if (pkey == user_key) // dan altijd goed hoewel we res_use rechten zouden kunnen controleren
{
lees_rechten_op = function () { return "" };
}
var sqln = "SELECT COALESCE(m.prs_perslid_key_voor, m.prs_perslid_key) prs_perslid_key" // melding voor jou
+ " , isd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) item"
+ " , m.mld_melding_key item_key"
+ " , 'melding' xmlnode"
+ " , '1' soort"
+ " , CASE WHEN (m.mld_melding_status = 0 OR m.mld_melding_status = 2 or m.mld_melding_status = 4 OR m.mld_melding_status = 7)" // m.mld_melding_status IN (0, 2, 4, 7)
+ " THEN CASE WHEN sm.mld_stdmelding_planbaar = 2 THEN m.mld_melding_datum ELSE m.mld_melding_einddatum END"
+ " ELSE tr.fac_tracking_datum"
+ " END datum"
+ " , NULL datum_eind"
+ (S("mld_selector_mode") == 0
? " , " + lcl.xsql('id.ins_discipline_omschrijving', 'id.ins_discipline_key')
: " , " + lcl.xsql('sm.mld_stdmelding_omschrijving', 'sm.mld_stdmelding_key'))
+ "||DECODE(mld_melding_onderwerp, NULL, '' , ': '||mld_melding_onderwerp) detail"
+ " , " + lcl.xsql('id2.ins_discipline_omschrijving', 'id2.ins_discipline_key') + " status"
+ " , m.mld_melding_satisfaction satisfaction"
+ " , m.mld_melding_satisfaction_op satisfaction_op"
+ " , m.mld_melding_status status_key"
+ " , NULL bo_status_key"
+ " , m.mld_melding_flag extra1"
+ " , m.mld_melding_actiecode mark"
+ " , m.mld_melding_datum startdatum"
+ sqlTracking('m.mld_melding_key', 'melding')
+ " FROM mld_melding m"
+ " , ins_srtdiscipline isd"
+ " , ins_tab_discipline id"
+ " , ins_tab_discipline id2"
+ " , mld_stdmelding sm"
+ " , fac_tracking tr"
+ " , fac_srtnotificatie str"
+ " WHERE id.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
+ " AND sm.mld_ins_discipline_key = id.ins_discipline_key"
+ " AND m.mld_ins_discipline_key = id2.ins_discipline_key(+)"
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND (COALESCE(m.prs_perslid_key_voor, m.prs_perslid_key) <> DECODE(m.mld_ins_discipline_key, NULL, mld_melding_behandelaar_key, mld_melding_behandelaar2_key)"
+ " OR (DECODE(m.mld_ins_discipline_key, NULL, mld_melding_behandelaar_key, mld_melding_behandelaar2_key) IS NULL))" // die komen straks
+ " AND m.fac_activiteit_key IS NULL"
+ " AND m.mld_melding_key = tr.fac_tracking_refkey(+)"
+ " AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key(+)"
+ " AND (m.mld_workflowstep_key IS NULL OR mld_melding_start_key = mld_melding_key)"
+ " AND (m.mld_melding_status IN (0, 2, 4, 7)"
+ " OR (m.mld_melding_status IN (1, 5, 6)"
+ " AND tr.fac_tracking_datum > SYSDATE - " + S("facilities_flike_past")
+ " AND str.fac_srtnotificatie_code = 'MLDAFM'))"
+ " AND (CASE WHEN sm.mld_stdmelding_planbaar = 2 THEN m.mld_melding_datum ELSE m.mld_melding_einddatum END BETWEEN SYSDATE - " + S("facilitiespast_mld") + " AND SYSDATE + " + S("facilitiesfuture_mld") + " OR m.mld_melding_einddatum IS NULL)"
+ lees_rechten_op("sm.mld_ins_discipline_key", ["WEB_MLDBOF", "WEB_MLDFOF"])
+ (urole == "fe" // alleen van jezelf voegen we de behandelmeldingen toe
? " UNION ALL "
+ "SELECT DECODE(m.mld_ins_discipline_key, NULL, mld_melding_behandelaar_key, mld_melding_behandelaar2_key) prs_perslid_key" // melding behandeld door jou
+ " , isd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key) item"
+ " , m.mld_melding_key item_key"
+ " , 'melding' xmlnode"
+ " , '2' soort"
+ " , CASE WHEN (m.mld_melding_status = 0 OR m.mld_melding_status = 2 OR m.mld_melding_status = 4 OR m.mld_melding_status = 7)" // m.mld_melding_status IN (0, 2, 4, 7)
+ " THEN CASE WHEN sm.mld_stdmelding_planbaar = 2 THEN m.mld_melding_datum ELSE m.mld_melding_einddatum END"
+ " ELSE tr.fac_tracking_datum"
+ " END datum"
+ " , NULL datum_eind"
+ (S("mld_selector_mode") == 0
? " , " + lcl.xsql('id.ins_discipline_omschrijving', 'id.ins_discipline_key')
: " , " + lcl.xsql('sm.mld_stdmelding_omschrijving', 'sm.mld_stdmelding_key'))
+ "||DECODE(mld_melding_onderwerp, NULL, '' , ': '||mld_melding_onderwerp) detail"
+ " , " + lcl.xsql('id2.ins_discipline_omschrijving', 'id2.ins_discipline_key') + " status"
+ " , m.mld_melding_satisfaction satisfaction"
+ " , m.mld_melding_satisfaction_op satisfaction_op"
+ " , m.mld_melding_status status_key"
+ " , NULL bo_status_key"
+ " , m.mld_melding_flag extra1"
+ " , m.mld_melding_actiecode mark"
+ " , m.mld_melding_datum startdatum"
+ sqlTracking('m.mld_melding_key', 'melding')
+ " FROM mld_melding m"
+ " , ins_srtdiscipline isd"
+ " , ins_tab_discipline id"
+ " , ins_tab_discipline id2"
+ " , mld_stdmelding sm"
+ " , fac_tracking tr"
+ " , fac_srtnotificatie str"
+ " WHERE id.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
+ " AND sm.mld_ins_discipline_key = id.ins_discipline_key"
+ " AND m.mld_ins_discipline_key = id2.ins_discipline_key(+)"
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND m.fac_activiteit_key IS NULL"
+ " AND m.mld_melding_key = tr.fac_tracking_refkey(+)"
+ " AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key(+)"
+ " AND (m.mld_workflowstep_key IS NULL OR mld_melding_start_key = mld_melding_key)"
+ " AND (m.mld_melding_status IN (0, 2, 4, 7)"
+ " OR (m.mld_melding_status IN (1, 5, 6)"
+ " AND tr.fac_tracking_datum > SYSDATE - " + S("facilities_flike_past")
+ " AND str.fac_srtnotificatie_code = 'MLDAFM'))"
+ " AND (CASE WHEN sm.mld_stdmelding_planbaar = 2 THEN m.mld_melding_datum ELSE m.mld_melding_einddatum END BETWEEN SYSDATE - " + S("facilitiespast_mld") + " AND SYSDATE + " + S("facilitiesfuture_mld") + " OR m.mld_melding_einddatum IS NULL)"
+ lees_rechten_op("sm.mld_ins_discipline_key", ["WEB_MLDBOF", "WEB_MLDFOF"])
: "")
+ " UNION ALL "
+ "SELECT COALESCE(b.prs_perslid_key_voor, b.prs_perslid_key) prs_perslid_key" // Bestelling voor jou
+ " , TO_CHAR (bes_bestelling_key)"
+ " , bes_bestelling_key"
+ " , 'bestelling'"
+ " , '3' soort"
+ " , CASE WHEN b.bes_bestelling_status >= 2 AND b.bes_bestelling_status <= 5" // b.bes_bestelling_status IN (5, 4, 3, 2)
+ " THEN b.bes_bestelling_leverdatum"
+ " ELSE tr.fac_tracking_datum"
+ " END datum"
+ " , bes_bestelling_leverdatum datum_eind"
+ " , (SELECT MIN (" + lcl.xsql('ins_discipline_omschrijving', 'ins_discipline_key') + ") "
+ " FROM bes_discipline "
+ " WHERE ins_discipline_key IN (SELECT ins_discipline_key "
+ " FROM bes_srtgroep sg, bes_srtdeel sd, bes_bestelling_item bi "
+ " WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key "
+ " AND bi.bes_srtdeel_key = sd.bes_srtdeel_key "
+ " AND bi.bes_bestelling_key = b.bes_bestelling_key)) oms"
+ " , ' ' status"
+ " , b.bes_bestelling_satisfaction satisfaction"
+ " , b.bes_bestelling_satisfaction_op satisfaction_op"
+ " , b.bes_bestelling_status status_key"
+ " , NULL bo_status_key"
+ " , NULL extra1"
+ " , NULL mark"
+ " , b.bes_bestelling_datum startdatum"
+ sqlTracking('bes_bestelling_key', 'bestelling')
+ " FROM bes_bestelling b"
+ " , fac_tracking tr"
+ " , fac_srtnotificatie str"
+ " WHERE (b.bes_bestelling_status IN (5, 4, 3, 2)"
+ " OR (b.bes_bestelling_status IN (1, 6, 7, 8)"
+ " AND tr.fac_tracking_datum > SYSDATE - " + S("facilities_flike_past")
+ " AND str.fac_srtnotificatie_code = 'BESOTV'))"
+ " AND b.fac_activiteit_key IS NULL"
+ " AND b.bes_bestelling_key = tr.fac_tracking_refkey(+)"
+ " AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key(+)"
+ " AND (b.bes_bestelling_leverdatum BETWEEN SYSDATE - " + S("facilitiespast_bes") + " AND SYSDATE + " + S("facilitiesfuture_bes") + " OR b.bes_bestelling_leverdatum IS NULL)"
+ " UNION ALL "
+ "SELECT ins_alg_ruimte_key prs_perslid_key"
+ " , ins_deel_omschrijving"
+ " , ins_deel_key"
+ " , 'deel'"
+ " , '4' soort"
+ " , NULL datum"
+ " , NULL datum_tot"
+ " , " + lcl.xsql('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key') //tt
+ " , ' ' status"
+ " , to_number(null) satisfaction"
+ " , NULL satisfaction_op"
+ " , NULL status_key"
+ " , NULL bo_status_key"
+ " , NULL extra1"
+ " , NULL mark"
+ " , NULL startdatum"
+ sqlTracking('ins_deel_key', 'deel')
+ " FROM ins_v_aanwezigdeel d"
+ " , ins_srtdeel sd"
+ " WHERE d.ins_alg_ruimte_type = 'P' AND sd.ins_srtdeel_key = d.ins_srtdeel_key AND ins_alg_ruimte_key_org IS NOT NULL" // geleend
+ " UNION ALL " // 1 Host ruimtereservering
+ "SELECT rr.res_rsv_ruimte_host_key prs_perslid_key"
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
+ " , rr.res_rsv_ruimte_key"
+ " , 'reservering' xmlnode"
+ " , '5' soort"
+ " , rr.res_rsv_ruimte_van datum"
+ " , rr.res_rsv_ruimte_tot datum_tot"
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT " + lcl.xsql('ra.res_activiteit_omschrijving', 'res_activiteit_key')
+ " FROM res_activiteit ra "
+ " WHERE res_activiteit_key = rr.res_activiteit_key)) oms"
+ " , ' ' status"
+ " , res_rsv_ruimte_satisfaction satisfaction"
+ " , res_rsv_ruimte_satisfaction_op satisfaction_op"
+ " , DECODE (res_rsv_ruimte_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
+ " , rr.res_status_bo_key bo_status_key"
+ " , rr.res_rsv_ruimte_flag extra1"
+ " , NULL mark"
+ " , rr.res_rsv_ruimte_aanmaak startdatum" // aanmaakdatum niet relevant
+ sqlTracking("rr.res_rsv_ruimte_key","reservering")
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " , fac_tracking tr"
+ " , fac_srtnotificatie str"
+ " WHERE ( ( rr.res_status_bo_key IN (4, 3, 2, 7))"
+ " OR ( rr.res_status_bo_key IN (5, 6)"
+ " AND tr.fac_tracking_datum > SYSDATE - " + S("facilities_flike_past")
+ " AND str.fac_srtnotificatie_code = 'RESAFM')"
+ " OR ( rr.res_status_bo_key NOT IN (5, 6) "
+ " AND rr.res_rsv_ruimte_tot > SYSDATE - " + S("facilities_flike_past") + ")"
+ " )"
+ " AND rr.res_rsv_ruimte_key = tr.fac_tracking_refkey(+)"
+ " AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key(+)"
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " AND NOT EXISTS (SELECT 1"
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " WHERE rr.res_status_bo_key IN (4, 3, 2, 7)"
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " )"
+ " UNION " // 2 Contact ruimtereservering
+ "SELECT rr.res_rsv_ruimte_contact_key prs_perslid_key"
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
+ " , rr.res_rsv_ruimte_key"
+ " , 'reservering' xmlnode"
+ " , '6' soort"
+ " , rr.res_rsv_ruimte_van datum"
+ " , rr.res_rsv_ruimte_tot datum_tot"
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT " + lcl.xsql('ra.res_activiteit_omschrijving', 'res_activiteit_key')
+ " FROM res_activiteit ra "
+ " WHERE res_activiteit_key = rr.res_activiteit_key)) oms"
+ " , ' ' status"
+ " , res_rsv_ruimte_satisfaction satisfaction"
+ " , res_rsv_ruimte_satisfaction_op satisfaction_op"
+ " , DECODE (res_rsv_ruimte_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
+ " , rr.res_status_bo_key bo_status_key"
+ " , rr.res_rsv_ruimte_flag extra1"
+ " , NULL mark"
+ " , rr.res_rsv_ruimte_aanmaak startdatum" // aanmaakdatum niet helemaal relevant maar vooruit
+ sqlTracking("rr.res_rsv_ruimte_key","reservering")
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " WHERE rr.res_status_bo_key IN (4, 3, 2, 7)"
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " UNION ALL " // 3 Host voorzieningreservering, dirtlevel van de onderliggenden bepalen?
+ "SELECT rr.res_rsv_ruimte_host_key prs_perslid_key"
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
+ " , rr.res_rsv_ruimte_key"
+ " , 'reservering'"
+ " , '7' soort"
+ " , rr.res_rsv_ruimte_van datum"
+ " , rr.res_rsv_ruimte_tot datum_tot"
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT " + lcl.xsql('ra.res_activiteit_omschrijving', 'res_activiteit_key')
+ " FROM res_activiteit ra"
+ " WHERE res_activiteit_key = rr.res_activiteit_key)) oms"
+ " , ' ' status"
+ " , res_rsv_ruimte_satisfaction satisfaction"
+ " , res_rsv_ruimte_satisfaction_op satisfaction_op"
+ " , DECODE (res_rsv_ruimte_dirtlevel + res_rsv_deel_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
+ " , rr.res_status_bo_key bo_status_key"
+ " , rr.res_rsv_ruimte_flag extra1"
+ " , NULL mark"
+ " , rr.res_rsv_ruimte_aanmaak startdatum" // aanmaakdatum niet helemaal relevant maar vooruit
+ sqlTracking("rr.res_rsv_ruimte_key","reservering")
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " , res_v_aanwezigrsv_deel dd"
+ " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " UNION " // 4 Contact voorzieningreservering dirtlevel van de onderliggenden bepalen?
+ "SELECT rr.res_rsv_ruimte_contact_key prs_perslid_key"
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
+ " , rr.res_rsv_ruimte_key"
+ " , 'reservering'"
+ " , '8' soort"
+ " , rr.res_rsv_ruimte_van datum"
+ " , rr.res_rsv_ruimte_tot datum_tot"
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT " + lcl.xsql('ra.res_activiteit_omschrijving', 'res_activiteit_key')
+ " FROM res_activiteit ra"
+ " WHERE res_activiteit_key = rr.res_activiteit_key)) oms"
+ " , ' ' status"
+ " , res_rsv_ruimte_satisfaction satisfaction"
+ " , res_rsv_ruimte_satisfaction_op satisfaction_op"
+ " , DECODE (res_rsv_ruimte_dirtlevel + res_rsv_deel_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
+ " , rr.res_status_bo_key bo_status_key"
+ " , rr.res_rsv_ruimte_flag extra1"
+ " , NULL mark"
+ " , rr.res_rsv_ruimte_aanmaak startdatum" // aanmaakdatum niet helemaal relevant maar vooruit
+ sqlTracking("rr.res_rsv_ruimte_key","reservering")
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " , res_v_aanwezigrsv_deel dd"
+ " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " AND rr.res_rsv_ruimte_host_key <> rr.res_rsv_ruimte_contact_key"
+ " UNION ALL " // 5 Host cateringreservering dirtlevel van de onderliggenden bepalen?
+ "SELECT rr.res_rsv_ruimte_host_key prs_perslid_key"
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
+ " , rr.res_rsv_ruimte_key"
+ " , 'reservering'"
+ " , '9' soort"
+ " , rr.res_rsv_ruimte_van datum"
+ " , rr.res_rsv_ruimte_tot datum_tot"
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT " + lcl.xsql('ra.res_activiteit_omschrijving', 'res_activiteit_key')
+ " FROM res_activiteit ra"
+ " WHERE res_activiteit_key = rr.res_activiteit_key)) oms"
+ " , ' ' status"
+ " , res_rsv_ruimte_satisfaction satisfaction"
+ " , res_rsv_ruimte_satisfaction_op satisfaction_op"
+ " , DECODE (res_rsv_ruimte_dirtlevel + res_rsv_artikel_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
+ " , rr.res_status_bo_key bo_status_key"
+ " , rr.res_rsv_ruimte_flag extra1"
+ " , NULL mark"
+ " , rr.res_rsv_ruimte_aanmaak startdatum" // aanmaakdatum niet helemaal relevant maar vooruit
+ sqlTracking("rr.res_rsv_ruimte_key","reservering")
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " , res_v_aanwezigrsv_artikel dd"
+ " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key "
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " AND rr.res_rsv_ruimte_host_key <> rr.res_rsv_ruimte_contact_key"
+ " UNION " // 6 Contact cateringreservering dirtlevel van de onderliggenden bepalen?
+ "SELECT rr.res_rsv_ruimte_contact_key prs_perslid_key"
+ " , TO_CHAR (rr.res_reservering_key) || '/' || rr.res_rsv_ruimte_volgnr"
+ " , rr.res_rsv_ruimte_key"
+ " , 'reservering'"
+ " , '10' soort"
+ " , rr.res_rsv_ruimte_van datum"
+ " , rr.res_rsv_ruimte_tot datum_tot"
+ " , COALESCE (rr.res_rsv_ruimte_omschrijving, (SELECT "+ lcl.xsql('ra.res_activiteit_omschrijving', 'res_activiteit_key')
+ " FROM res_activiteit ra "
+ " WHERE res_activiteit_key = rr.res_activiteit_key)) oms"
+ " , ' ' status"
+ " , res_rsv_ruimte_satisfaction satisfaction"
+ " , res_rsv_ruimte_satisfaction_op satisfaction_op"
+ " , DECODE (res_rsv_ruimte_dirtlevel + res_rsv_artikel_dirtlevel, 0, rr.res_status_fo_key, -1) status_key"
+ " , rr.res_status_bo_key bo_status_key"
+ " , rr.res_rsv_ruimte_flag extra1"
+ " , NULL mark"
+ " , rr.res_rsv_ruimte_aanmaak startdatum" // aanmaakdatum niet helemaal relevant maar vooruit
+ sqlTracking("rr.res_rsv_ruimte_key","reservering")
+ " FROM res_v_aanwezigrsv_ruimte rr"
+ " , res_v_aanwezigrsv_artikel dd"
+ " WHERE rr.res_status_bo_key IS NULL AND dd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
+ " AND (rr.res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res") + " OR rr.res_rsv_ruimte_van IS NULL)"
+ " AND (rr.res_rsv_ruimte_host_key <> rr.res_rsv_ruimte_contact_key)"
+ " UNION ALL "
+ "SELECT a.bez_afspraak_contact_key prs_perslid_key"
+ " , TO_CHAR (b.bez_afspraak_key)"
+ " , b.bez_afspraak_key"
+ " , 'afspraak'"
+ " , '11' soort"
+ " , a.bez_afspraak_datum datum"
+ " , a.bez_afspraak_eind datum_tot"
+ " , b.bez_afspraak_naam || (CASE WHEN bez_afspraak_bedrijf IS NOT NULL THEN ' (' || bez_afspraak_bedrijf || ')' END) oms"
+ " , (CASE WHEN bez_bezoekers_done IS NOT NULL THEN 'lcl_vis_inside_st' ELSE 'lcl_vis_expected_st' END) status"
+ " , NULL satisfaction"
+ " , NULL satisfaction_op"
+ " , NULL status_key"
+ " , NULL bo_status_key"
+ " , b.bez_bezoekers_flag extra1"
+ " , NULL mark"
+ " , NULL startdatum" // aanmaakdatum hebben we niet
+ sqlTracking('b.bez_afspraak_key', 'afspraak')
+ " FROM bez_bezoekers b"
+ " , bez_afspraak a"
+ " WHERE b.bez_afspraak_key = a.bez_afspraak_key AND bez_bezoekers_out IS NULL"
+ " AND (a.bez_afspraak_datum BETWEEN SYSDATE - " + S("facilitiespast_bez") + " AND SYSDATE + " + S("facilitiesfuture_bez") + " OR a.bez_afspraak_datum IS NULL)"
+ " UNION "
+ "SELECT a.bez_afspraak_host_key prs_perslid_key"
+ " , TO_CHAR (b.bez_afspraak_key)"
+ " , b.bez_afspraak_key"
+ " , 'afspraak'"
+ " , '12' soort"
+ " , a.bez_afspraak_datum datum"
+ " , a.bez_afspraak_eind datum_tot"
+ " , b.bez_afspraak_naam || (CASE WHEN bez_afspraak_bedrijf IS NOT NULL THEN ' (' || bez_afspraak_bedrijf || ')' END) oms"
+ " , (CASE WHEN bez_bezoekers_done IS NOT NULL THEN 'lcl_vis_inside_st' ELSE 'lcl_vis_expected_st' END) status"
+ " , NULL satisfaction"
+ " , NULL satisfaction_op"
+ " , NULL status_key"
+ " , NULL bo_status_key"
+ " , b.bez_bezoekers_flag extra1"
+ " , NULL mark"
+ " , NULL startdatum" // aanmaakdatum hebben we niet
+ sqlTracking('b.bez_afspraak_key', 'afspraak')
+ " FROM bez_bezoekers b"
+ " , bez_afspraak a"
+ " WHERE b.bez_afspraak_key = a.bez_afspraak_key AND bez_bezoekers_out IS NULL"
+ " AND (a.bez_afspraak_datum BETWEEN SYSDATE - " + S("facilitiespast_bez") + " AND SYSDATE + " + S("facilitiesfuture_bez") + " OR a.bez_afspraak_datum IS NULL)"
+ " AND a.bez_afspraak_host_key <> a.bez_afspraak_contact_key";
sqln = "SELECT prs_perslid_key"
+ " , item"
+ " , item_key"
+ " , xmlnode"
+ " , soort"
+ " , datum"
+ " , datum_eind"
+ " , detail"
+ " , status"
+ " , satisfaction"
+ " , satisfaction_op"
+ " , status_key"
+ " , recentdatum"
+ " , bo_status_key"
+ " , extra1"
+ " , mark"
+ " , startdatum"
+ " FROM (" + sqln + ")"
+ " WHERE prs_perslid_key = " + pkey
+ " AND xmlnode IS NOT NULL"
+ module_filter
+ " ORDER by datum, xmlnode";
var buttons = [];
var calendarurl = 'appl/shared/fullcalendar.asp?worker=faclist';
buttons = [{ icon: "calendar_1.png", title: L("lcl_calendar"), action: "FcltMgr.openDetail('" + calendarurl + "', '" + L("lcl_prs_frame_facilities") + "')" }];
var rst = new ResultsetTable({ sql: sqln,
keyColumn: "item_key",
ID: "factable",
rowData: fnrowData,
rowClass: fnrowClass,
title: L("lcl_prs_frame_facilities"),
showAll: showall,
outputmode: outputmode,
buttons: buttons,
summaryShow: function(){},
emptySetString: L("lcl_geenfaciliteiten")
});
if (S("mld_melding_actiecode") == 1)
rst.addColumn(new Column({caption: (outputmode == 0 ? I("fa-bell-o") : L("lcl_mld_actiecode")), content: fnMark, align: "center"}));
if ((faclist_mode & 1) == 1)
rst.addColumn(new Column({caption: L("lcl_myfacilities_date"), content: "datum", datatype: "datetime", prettydate: true }));
rst.addColumn(new Column({caption: L("lcl_faciliteit"), content: fncolType}));
if ((faclist_mode & 4) == 4)
rst.addColumn(new Column({caption: L("lcl_mld_date_time"), content: "startdatum", datatype: "datetime", prettydate: true }));
rst.addColumn(new Column({caption: L("lcl_descr"), content: "detail"}));
rst.addColumn(new Column({caption: L("lcl_status_at"), content: fnstatus}));
if ((faclist_mode & 2) == 2)
rst.addColumn(new Column({caption: L("lcl_fac_laatste_actie"), content: "recentdatum", datatype: "datetime", prettydate: true})); // experiment
if (urole == "fo" || (urole == "fe" && S("fac_flags_visible_for_fe") == 1))
rst.addColumn(new Column({caption: L("lcl_fac_extra1"), content: fnExtra1}));
if (S("facilities_flike_past") >= 0)
rst.addColumn(new Column({caption: L("lcl_fac_oordeel"), content: fnLike}));
rst.addAction({ action: "facDetail", caption:L("lcl_edit"), isDefault: true });
var cnt = rst.processResultset();
// Overzicht externe ruimtes
var mayberemote = Session("has_no_remote_res") != 1;
if (mayberemote)
{
var cnt_remote = 0;
autfunction = "WEB_RESUSE";
var sql = res.getremotes_sql(autfunction);
var oRs = Oracle.Execute(sql);
// Als je hier weet dat er intern niks was zou je deze externe opties initieel opengeklapt willen?
while( !oRs.eof )
{
var url = oRs("res_disc_params_remoteurl").Value + "&API=RESINFO";
var disc_key = oRs("ins_discipline_key").Value;
var xparams = { request: "user_lopend_info",
prs_externId: customerId + "_" + String(user_key)
}
var json = HTTP.getJSON(url, { data: xparams });
if (!json)
{
__DoLog("user_lopend_info {0} is onverwacht geen Array bij opvragen van:".format(oRs("ins_discipline_omschrijving").Value), "#FF0000");
__DoLog(xparams);
}
else
{
if (!json.succes)
{
__DoLog("user_lopend_info success false.\nmessage: {0}\nremote: {1}".format(json.message,oRs("ins_discipline_omschrijving").Value), "#FF0000");
}
else if (json.user_lopend_info.length)
{
cnt_remote += json.user_lopend_info.length;
%>
<div class="resexternlist">
<span class="resexterntitle">
<%= L("lcl_res_extern_prefix") + safe.html(oRs("ins_discipline_omschrijving").Value)%>
</span>
<div class="resexterndiv">
<%
rst.buttons = [];
rst.sql = null;
rst.ID = "factable2";
rst.dataset = json.user_lopend_info;
var cnt = rst.processResultset({ disc_key: disc_key });
%>
</div>
</div>
<%
}
}
oRs.MoveNext();
}
oRs.close();
if (!cnt_remote)
{
__Log("No remotes found. Setting Session('has_no_remote_res')");
Session("has_no_remote_res") = 1; // Wordt eventueel in res_goto_extern.asp gereset
}
}
else
__Log("Session('has_no_remote_res') is set. Skipping remotes check.");
%>
</body>
</html>