2664 lines
135 KiB
PHP
2664 lines
135 KiB
PHP
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: res_list.inc
|
|
Description: Show an overview of reservations in list-form,
|
|
which meets with the given requirements
|
|
Parameters:
|
|
urole user role (fe, fo, bo, mi)
|
|
outputmode behave in an output mode, print to 0 = screen, 1 = printer, 2 = excel, etc.
|
|
showall show all orders which meets with the given requirements
|
|
compact leaner presentation, as used in subframes (1)
|
|
mld_key search for reservations belonging to the given mld_key
|
|
datefrom search for reservations at the selected date-month-year
|
|
dateto search for reservations at the selected date-month-year
|
|
res_key search for reservation with the given reservation key
|
|
reg_key_arr search for contracts with the given regios
|
|
dist_key_arr search for contracts with the given districts
|
|
loc_key_arr search for reservations for the selected locations
|
|
bld_key_arr search for reservations for the selected buildings
|
|
floor_key_arr search for reservations for the selected floors
|
|
act_key search for reservations witch the selected activity
|
|
srtact search for reservations witch the selected srt activity
|
|
searchtext search for reservations with the searchtext in description or remark
|
|
kp search for reservations with the given account text in account description
|
|
requestor_key search for reservations for selected requestor
|
|
host_key search for reservations for selected host
|
|
dep_key search for reservations for the selected department
|
|
roomcatalogue_key_arr search for reservations with the selected room categories/types
|
|
obj_key_arr search for reservations with the selected objects categories/types
|
|
art_key_arr search for reservations with the selected articles categories/types
|
|
article_arr search for reservations with the selected articles
|
|
artgroup search for reservations with the selected article group
|
|
resstatus search for reservations with the selected reservation FO status
|
|
roomcat search for room reservations
|
|
objcat search for object reservations
|
|
artcat search for article reservations
|
|
res_actual search for actual reservations
|
|
res_deleted search for res_deleted reservations
|
|
res_open search for reservations which are open
|
|
res_closed search for reservations which are closed
|
|
res_approved search for reservations which are approved
|
|
res_notapproved search for reservations which are not approved
|
|
res_tobeapproved search for reservations which heave to be approved
|
|
res_noshowonly show noshow's only
|
|
sortout sort out the reservations by
|
|
groupres groupres the reservations by
|
|
Context: Search action from res_fefo_search.asp or res_bomi_search form
|
|
Note:
|
|
TODO:
|
|
de afhankelijkheden van urole moeten er uit! Deze functie levert een lijst op die voldoet aan de criteria
|
|
en gegeven de user en de autorisatie. Punt!
|
|
|
|
*/
|
|
%>
|
|
|
|
<!-- #include file="../Shared/discx3d.inc" -->
|
|
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
|
<!-- #include file="../Shared/rater.inc" -->
|
|
<!-- #include file="./res.inc" -->
|
|
<!-- #include file="../Shared/getkenmerksql.inc" -->
|
|
|
|
<%
|
|
FCLTHeader.Requires({ plugins:["jQuery"],
|
|
js: ["../res/res_list.js", "jquery-ui.js"]
|
|
});
|
|
|
|
function res_list (pautfunction, params)
|
|
{ // VALIDATE AND PREPARE
|
|
// Als een parameter niet gedefinieerd of null is, dan doet-ie niks
|
|
// anders wordt die verondersteld een zinvolle waarde te hebben
|
|
// NB: -1 is vaak geen zinvolle waarde; null had het dan moeten zijn!
|
|
|
|
// Valid and supported parameters are:
|
|
// params.urole : the usuals two-letter lowercase string
|
|
// params.outputmode : print to 0 = screen, 1 = printer, 2 = excel, etc.
|
|
// params.showall : boolean (true | false)
|
|
// params.datefrom : date
|
|
// params.dateto : date
|
|
// params.res_key : key
|
|
// params.reg_key_arr : Array met keys
|
|
// params.dist_key_arr : Array met keys
|
|
// params.loc_key_arr : Array met keys
|
|
// params.bld_key_arr : Array met keys
|
|
// params.floor_key_arr : Array met keys
|
|
// params.room_key_arr : Array met keys
|
|
// params.act_key : key
|
|
// params.suppress_cont : boolean (true | false)
|
|
// params.searchtxt : wildcard string
|
|
// params.dep_key : key
|
|
// params.kp : wildcard string
|
|
// params.requestor_key : key
|
|
// params.host_key : key
|
|
// params.dep_key : key
|
|
// params.room_key_arr : Array met keys
|
|
// params.roomcatalogue_key_arr : Array met keys
|
|
// params.obj_key_arr : Array met keys
|
|
// params.art_key_arr : Array met keys
|
|
// params.article_arr : Array met keys
|
|
// params.artgroup : string met keys
|
|
// params.resstatus : key
|
|
// params.roomcat : boolean (true | false)
|
|
// params.objcat : boolean (true | false)
|
|
// params.artcat : boolean (true | false)
|
|
// params.res_actual : boolean (true | false)
|
|
// params.res_deleted : boolean (true | false)
|
|
// params.res_open : boolean (true | false)
|
|
// params.res_closed : boolean (true | false)
|
|
// params.res_closed : boolean (true | false)
|
|
// params.res_approved : boolean (true | false)
|
|
// params.res_notapproved : boolean (true | false)
|
|
// params.sortout : key
|
|
// params.groupres : key
|
|
|
|
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
|
|
var authparams = user.checkAutorisation(pautfunction);
|
|
var authparamsRESNOS = user.checkAutorisation("WEB_RESNOS", true);
|
|
|
|
var urole = params.urole;
|
|
var fronto = (urole == "fo");
|
|
var backo = (urole == "bo");
|
|
var minfo = (urole == "mi"); // NOT APPLICABLE?
|
|
var frontend = (urole == "fe" || (!fronto && !backo && !minfo));
|
|
|
|
// Voor resulttable de globalen zetten; zou nog anders moeten.
|
|
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
|
|
var print = (outputmode == 1 || outputmode == 5);
|
|
var excel = (outputmode == 2 || outputmode == 6);
|
|
var compact = params.compact || 0;
|
|
var formString = params.formString;
|
|
var showall = params.showall;
|
|
|
|
var mld_key = params.mld_key || -1;
|
|
var datefrom = params.datefrom;
|
|
var dateto = params.dateto;
|
|
var res_key = params.res_key;
|
|
var reg_key_arr = params.reg_key_arr || [];
|
|
var dist_key_arr = params.dist_key_arr || [];
|
|
var loc_key_arr = params.loc_key_arr || [];
|
|
var bld_key_arr = params.bld_key_arr || [];
|
|
var floor_key_arr = params.floor_key_arr || [];
|
|
var room_key_arr = params.room_key_arr || [];
|
|
var act_key = params.act_key;
|
|
var suppress_cont = params.suppress_cont;
|
|
var srtact = params.srtact;
|
|
var searchtext = params.searchtext;
|
|
var dep_key = params.dep_key;
|
|
var kp = params.kp;
|
|
var requestor_key = params.requestor_key;
|
|
var host_key = params.host_key;
|
|
var roomcatalogue_key_arr = params.roomcatalogue_key_arr || [];
|
|
var obj_key_arr = params.obj_key_arr || [];
|
|
var art_key_arr = params.art_key_arr || [];
|
|
var article_arr = params.article_arr || [];
|
|
var artgroup = params.artgroup;
|
|
var resstatus = params.resstatus;
|
|
var roomcat = params.roomcat || res_key > 0;
|
|
var objcat = params.objcat || res_key > 0;
|
|
var artcat = params.artcat || res_key > 0 || params.groupres == 7 || params.groupres == 8 || params.groupres == 15;
|
|
var res_actual = "res_actual" in params ? params.res_actual : true;
|
|
var res_deleted = "res_deleted" in params ? params.res_deleted : false;
|
|
var res_open = params.res_open;
|
|
var res_closed = params.res_closed;
|
|
var res_approved = params.res_approved;
|
|
var res_notapproved = params.res_notapproved;
|
|
var res_tobeapproved = params.res_tobeapproved;
|
|
var sortout = params.sortout;
|
|
var groupres = params.groupres;
|
|
var flags = params.flags || [];
|
|
var opdr_key = params.opdr_key || -1;
|
|
|
|
|
|
// PF: ik heb het vermoeden dat deze inmiddels overbodig is (en params.resourcetypes bestaat niet gegarandeerd ook)
|
|
//if (inArray(4, params.resourcetypes)) // Personen. Vooralsnog alleen onder opdrachten zonder alg-scope
|
|
// params.restype = "O";
|
|
var restype = params.restype;
|
|
|
|
// Als er wel artikelen zijn geselecteerd maar geen verbruiksartikel catalogus, dan de catalogussen erbij zoeken zodat we daar ook op kunnen filteren.
|
|
// Anders komen ook nog alle ruimte en object reserveringen in de lijst.
|
|
var article_disc_arr = [];
|
|
article_disc_arr = article_disc_arr.concat(art_key_arr);
|
|
if (art_key_arr.length == 0 && article_arr.length > 0)
|
|
{
|
|
var sql = "SELECT ra.res_discipline_key"
|
|
+ " FROM res_artikel ra"
|
|
+ " WHERE ra.res_artikel_key IN (" + article_arr.join(",") + ")";
|
|
oRs = Oracle.Execute(sql);
|
|
while (!oRs.eof)
|
|
{
|
|
article_disc_arr.push(oRs("res_discipline_key").Value);
|
|
oRs.MoveNext();
|
|
}
|
|
}
|
|
|
|
// Berekenen is duur en niet altijd nodig
|
|
var withprices = (groupres == 4
|
|
|| groupres == 5
|
|
|| groupres == 6
|
|
|| groupres == 7
|
|
|| groupres == 8
|
|
|| groupres == 9
|
|
|| groupres == 10
|
|
|| groupres == 11
|
|
|| groupres == 12
|
|
|| groupres == 13
|
|
|| groupres == 14
|
|
|| groupres == 15);
|
|
|
|
|
|
// Fast check to see if we remarks are used. To show/hide the colums
|
|
var sql= "SELECT 1 FROM res_srtactiviteit WHERE res_srtactiviteit_metopmerk = 1";
|
|
oRs = Oracle.Execute(sql);
|
|
var hasAnyOpmerkingen = !oRs.eof;
|
|
oRs.close();
|
|
|
|
%>
|
|
|
|
<html>
|
|
<head>
|
|
<%
|
|
FCLTHeader.Generate({ outputmode: outputmode });
|
|
%>
|
|
<script type="text/javascript">
|
|
|
|
$(function() {
|
|
$(".clickParent").parent().on("click", function(e) { e.stopPropagation(); $(this).find("> .clickParent").trigger("click"); });
|
|
});
|
|
|
|
var urole = "<%=urole%>";
|
|
var groupres = "<%=groupres%>";
|
|
var user_naam = "<%=safe.jsstring(user.naam())%>";
|
|
var todayString = "<%=toDateString(new Date())%>";
|
|
var customerId = "<%=customerId%>";
|
|
var user_key = "<%=user_key%>";
|
|
// For BO/MI functions
|
|
var res_closed = (<%=res_closed? 1 : 0%> == 1)
|
|
</script>
|
|
|
|
</head>
|
|
<body id="listbody">
|
|
|
|
<%
|
|
|
|
// Functie fncolFlags kan in alle overzichten worden gebruikt.
|
|
function fncolFlags(oRs)
|
|
{
|
|
var reskey = oRs("rsv_ruimte_key").Value; // rsv_ruimte_key
|
|
var flagkey = oRs("res_rsv_ruimte_flag").Value || 0;
|
|
var ttl = L("lcl_res_flag" + flagkey);
|
|
var displ = flagkey||"";
|
|
|
|
if (print)
|
|
{
|
|
if (flagkey != 0) displ = safe.html(ttl); // else blijft-ie gewoon leeg
|
|
}
|
|
else if (excel) // dan gewoon maar de code, handig groeperen
|
|
{
|
|
displ = flagkey||"";
|
|
}
|
|
else // maak er dan nog leuke plaatjes van
|
|
{
|
|
var flagIcon = "<span id='resflagimg"+reskey+"' flagkey='"+flagkey+"' class='resflag"+flagkey+"'>" + I("fa-fclt-flag" + (flagkey == 0? "0" : "")) + "</span>";
|
|
// Met hidden flagkey voor sortering. 999 zorgt dat bij 1 keer sorteren de gevlagde direct bovenaan staan
|
|
displ = "<div class='clickParent' " + ((backo || fronto) ? "onclick='toggleResFlag(event, " + reskey +");'":"")
|
|
+ " title='"+safe.htmlattr(ttl)+"'>"
|
|
+ flagIcon
|
|
+ "<span style='display:none'>"+(flagkey||999)+"</span></div>";
|
|
}
|
|
return displ;
|
|
}
|
|
|
|
function fncolOordeel(oRs)
|
|
{
|
|
var result = null;
|
|
var displ_val = oRs("oordeel").Value;
|
|
var displ_txt = oRs("oordeel_opm").Value;
|
|
if (displ_val && displ_val != 0)
|
|
{
|
|
if (excel || print)
|
|
result = "<span id='oordeel' title='" + safe.htmlattr(displ_txt)+"'>" + displ_val + "</span>";
|
|
else
|
|
result = rating.stars(displ_val, {rating: {id: "oordeel", note: displ_txt}});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function fncolOordeelAvg(oRs)
|
|
{
|
|
var result = null;
|
|
var displ_val = oRs("oordeel").Value;
|
|
if (displ_val && displ_val != 0)
|
|
{
|
|
if (excel || print)
|
|
result = "<span id='oordeel'>" + safe.displayfloat(displ_val, 1) + "</span>";
|
|
else
|
|
result = rater(displ_val, {readonly: true});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function fncustomSort(oRs)
|
|
{
|
|
var a = "0000000000"+oRs("res_reservering_key").Value;
|
|
var b = "00000"+oRs("res_rsv_ruimte_volgnr").Value;
|
|
return a.slice(-10) +"_"+ b.slice(-5);
|
|
}
|
|
|
|
/***** Build sql *****/
|
|
|
|
function getAnyFlex()
|
|
{ // Fast check to see if we have any listable flex at all, to prevent superfluous column
|
|
var anyflex_result = {anyflex: false};
|
|
var sql = "SELECT DISTINCT"
|
|
+ " COALESCE (" + lcl.xsql("k.res_kenmerk_omschrijving", "k.res_kenmerk_key")
|
|
+ " , " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "sk.res_srtkenmerk_key") + ") res_kenmerk_omschrijving"
|
|
+ " , sk.res_srtkenmerk_kenmerktype"
|
|
+ " FROM res_srtkenmerk sk, res_kenmerk k"
|
|
+ " WHERE BITAND (res_srtkenmerk_systeem, 2) = 2"
|
|
+ " AND sk.res_srtkenmerk_key = k.res_srtkenmerk_key"
|
|
+ " AND k.res_kenmerk_niveau NOT IN ('P', 'O')"
|
|
+ " AND k.res_kenmerk_verwijder IS NULL"
|
|
+ " AND sk.res_srtkenmerk_verwijder IS NULL";
|
|
var oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
{
|
|
var multiflex = false;
|
|
var bijlageflex = (oRs("res_srtkenmerk_kenmerktype").Value == "M");
|
|
var flexlabel = oRs("res_kenmerk_omschrijving").Value;
|
|
oRs.MoveNext();
|
|
if (!oRs.Eof)
|
|
{
|
|
multiflex = true;
|
|
flexlabel = L("lcl_flexlist");
|
|
|
|
while (!oRs.eof)
|
|
{
|
|
if (oRs("res_srtkenmerk_kenmerktype").Value == "M")
|
|
bijlageflex = true;
|
|
oRs.MoveNext();
|
|
}
|
|
}
|
|
|
|
var sql_flex = ", (SELECT LISTAGG("
|
|
+ (multiflex
|
|
? "COALESCE (" + lcl.xsql("k.res_kenmerk_omschrijving", "k.res_kenmerk_key")
|
|
+ " , " + lcl.xsql("skr.res_srtkenmerk_omschrijving", "skr.res_srtkenmerk_key") + ")"
|
|
+ " || ':'|| CHR(160) ||"
|
|
: "")
|
|
+ " CASE"
|
|
+ " WHEN skr.res_srtkenmerk_kenmerktype = 'R' OR skr.res_srtkenmerk_kenmerktype = 'S'"
|
|
+ " THEN flx.getdomeinwaarde (skr.fac_kenmerkdomein_key, km.res_kenmerkreservering_waarde)"
|
|
+ " WHEN (skr.res_srtkenmerk_kenmerktype = 'N' OR skr.res_srtkenmerk_kenmerktype = 'B') "
|
|
+ " AND skr.res_srtkenmerk_lengte = 1 "
|
|
+ " AND skr.res_srtkenmerk_nmin = 0 "
|
|
+ " AND skr.res_srtkenmerk_nmax = 1 "
|
|
+ " AND (skr.res_srtkenmerk_dec = 0 OR skr.res_srtkenmerk_dec IS NULL) "
|
|
+ " THEN DECODE (km.res_kenmerkreservering_waarde, "
|
|
+ " 0, " + safe.qL("lcl_check_0") + ", "
|
|
+ " 1, " + safe.qL("lcl_check_1") + ", "
|
|
+ " km.res_kenmerkreservering_waarde)"
|
|
+ " ELSE km.res_kenmerkreservering_waarde"
|
|
+ " END, CHR(13)) "
|
|
+ " WITHIN GROUP (ORDER BY res_kenmerk_volgnummer)"
|
|
+ " FROM res_srtkenmerk skr, res_kenmerk k, res_kenmerkwaarde km, res_rsv_ruimte rr"
|
|
+ " WHERE rr.res_reservering_key = rec2.res_reservering_key"
|
|
+ " AND rr.res_rsv_ruimte_key = rec2.res_rsv_ruimte_key"
|
|
+ " AND km.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
|
|
+ " AND k.res_kenmerk_key = km.res_kenmerk_key"
|
|
+ " AND BITAND(skr.res_srtkenmerk_systeem,2) = 2"
|
|
+ " AND skr.res_srtkenmerk_key = k.res_srtkenmerk_key"
|
|
+ " AND skr.res_srtkenmerk_verwijder IS NULL"
|
|
+ " AND k.res_kenmerk_verwijder IS NULL"
|
|
+ " AND km.res_kenmerkwaarde_verwijder IS NULL) flex";
|
|
anyflex_result.anyflex = true;
|
|
anyflex_result.multiflex = multiflex;
|
|
anyflex_result.bijlageflex = bijlageflex;
|
|
anyflex_result.flexlabel = flexlabel;
|
|
anyflex_result.sql_flex = sql_flex;
|
|
}
|
|
oRs.close();
|
|
return anyflex_result;
|
|
}
|
|
|
|
// WITH-aliassen eerst
|
|
thePerslid = " thePerslid AS"
|
|
+ " (SELECT prs_perslid_key"
|
|
+ ", prs_perslid_telefoonnr"
|
|
+ ", prs_perslid_mobiel"
|
|
+ ", prs_afdeling_key"
|
|
+ ", " + S("prs_pers_string") + " naam FROM prs_perslid p)";
|
|
|
|
theResrsv = " theResrsv AS"
|
|
+ " (SELECT xrr.*"
|
|
+ " FROM res_rsv_ruimte xrr, res_reservering xr"
|
|
+ " WHERE xrr.res_reservering_key = xr.res_reservering_key";
|
|
if (opdr_key > 0)
|
|
theResrsv += " AND xrr.mld_opdr_key = " + opdr_key;
|
|
if (mld_key > 0)
|
|
theResrsv += " AND xr.mld_melding_key = " + mld_key;
|
|
|
|
if (res_key)
|
|
theResrsv += " AND xrr.res_reservering_key = " + res_key;
|
|
else
|
|
{ // If there is no res_key then determine sql_date
|
|
// If from and to are given both are used
|
|
// If only one of from and to are give, this is used as a (1) day, not an half open interval
|
|
// 20-10-2009 9:46:28/PF
|
|
datefrom = datefrom || dateto;
|
|
dateto = dateto || datefrom;
|
|
if (datefrom && dateto)
|
|
{
|
|
var ora_date1 = datefrom.beginToSQL();
|
|
var ora_date2 = dateto.endToSQL();
|
|
// Er staan indexen op TRUNC(res_rsv_ruimte_van,'DD') en TRUNC(res_rsv_ruimte_tot,'DD')
|
|
// waardoor onderstaande met de redundante 'TRUNC's een stuk sneller is
|
|
// Hmm, bij nader inzien lijken de indexen niet veel verschil te maken. Haal echter
|
|
// hieronder een (redundante) vergelijking weg en het wordt langzamer
|
|
theResrsv += " AND xrr.res_rsv_ruimte_van < " + ora_date2
|
|
+ " AND xrr.res_rsv_ruimte_tot > " + ora_date1
|
|
+ " AND TRUNC(xrr.res_rsv_ruimte_van, 'DD') <= " + dateto.endToSQL(true)
|
|
+ " AND TRUNC(xrr.res_rsv_ruimte_tot, 'DD') >= " + datefrom.beginToSQL(true)
|
|
+ (suppress_cont
|
|
? " AND (TRUNC(xrr.res_rsv_ruimte_van, 'DD') >= " + datefrom.beginToSQL(true) + " OR TRUNC(xrr.res_rsv_ruimte_tot, 'DD') <= " + dateto.endToSQL(true) + ")"
|
|
: "");
|
|
}
|
|
if (resstatus)
|
|
theResrsv += " AND xrr.res_status_fo_key = " + resstatus;
|
|
|
|
// Aanvrager
|
|
if (requestor_key)
|
|
theResrsv += " AND xrr.res_rsv_ruimte_contact_key = " + requestor_key;
|
|
|
|
if (searchtext) // search text in description and remark
|
|
theResrsv += " AND (UPPER(xrr.res_rsv_ruimte_omschrijving) LIKE "+safe.quoted_sql_wild("%" + searchtext + "%")
|
|
+ " OR UPPER(xrr.res_rsv_ruimte_opmerking) LIKE "+safe.quoted_sql_wild("%" + searchtext + "%") + ")";
|
|
|
|
if (host_key)
|
|
theResrsv += " AND xrr.res_rsv_ruimte_host_key = " + host_key;
|
|
|
|
// Flags
|
|
if (params.flags && params.flags.length > 0 && params.flags.length < S("res_reservering_flags"))
|
|
{
|
|
theResrsv += " AND xrr.res_rsv_ruimte_flag IN (" + params.flags.join(",") + ")";
|
|
}
|
|
}
|
|
|
|
if (frontend) // Altijd de FE-autorisatie erop
|
|
{
|
|
var prsKeys = user.collegakeylist();
|
|
|
|
theResrsv += " AND (xrr.res_rsv_ruimte_contact_key IN (" + prsKeys + ")"
|
|
+ " OR xrr.res_rsv_ruimte_host_key IN (" + prsKeys + "))";
|
|
}
|
|
|
|
theResrsv += ")";
|
|
|
|
// Make ResultsetTable for bo or mi
|
|
/***** Build sql *****/
|
|
//var res_key = 0;
|
|
var sql_reg = "";
|
|
var sql_dist = "";
|
|
var sql_loc = "";
|
|
var sql_bld = "";
|
|
var sql_floor = "";
|
|
var sql_room = "";
|
|
var sql_act = "";
|
|
var sql_dept = "";
|
|
var sql_account = "";
|
|
var sql_name = "";
|
|
var sql_room_key = "";
|
|
var sql_obj_key = "";
|
|
var sql_art_key = "";
|
|
var sql_article = "";
|
|
var status_sql = "";
|
|
|
|
var r_anyflex = getAnyFlex();
|
|
if (r_anyflex.anyflex)
|
|
{
|
|
var anyflex = r_anyflex.anyflex;
|
|
var multiflex = r_anyflex.multiflex;
|
|
var bijlageflex = r_anyflex.bijlageflex;
|
|
var flexlabel = r_anyflex.flexlabel;
|
|
}
|
|
|
|
if (!res_key && (!(opdr_key > 0) || (frontend || fronto)))
|
|
{
|
|
if (dep_key)
|
|
{
|
|
sqln = "SELECT ab.niveau"
|
|
+ " FROM prs_v_afdeling_boom ab"
|
|
+ " WHERE ab.prs_afdeling_key = " + dep_key;
|
|
oRsn = Oracle.Execute(sqln);
|
|
var niveau = oRsn("niveau").Value;
|
|
|
|
sql_dept += " AND phost.prs_afdeling_key IN (SELECT ab.prs_afdeling_key"
|
|
+ " FROM prs_v_afdeling_boom ab"
|
|
+ (frontend || fronto
|
|
? " , prs_v_afdeling d"
|
|
: "")
|
|
+ " WHERE ab.prs_afdeling_key" + niveau + " = " + dep_key
|
|
+ (frontend || fronto
|
|
? " AND d.prs_afdeling_key = ab.prs_afdeling_key"
|
|
: "")
|
|
+ " )";
|
|
}
|
|
|
|
if (kp)
|
|
sql_dept = " AND k.prs_kostenplaats_upper LIKE " + safe.quoted_sql_wild(kp);
|
|
|
|
if (reg_key_arr.length)
|
|
sql_reg = " AND di.alg_regio_key IN (" + reg_key_arr.join(",") + ")";
|
|
|
|
if (dist_key_arr.length)
|
|
sql_dist = " AND ruimte_geg.alg_district_key IN (" + dist_key_arr.join(",") + ")";
|
|
|
|
if (loc_key_arr.length)
|
|
sql_loc = " AND ruimte_geg.alg_locatie_key IN (" + loc_key_arr.join(",") + ")";
|
|
|
|
if (!frontend)
|
|
{
|
|
if (bld_key_arr.length)
|
|
sql_bld = " AND ruimte_geg.alg_gebouw_key IN (" + bld_key_arr.join(",") + ")";
|
|
|
|
if (floor_key_arr.length)
|
|
sql_floor = " AND ruimte_geg.alg_verdieping_key IN (" + floor_key_arr.join(",") + ")";
|
|
|
|
if (room_key_arr.length) {
|
|
sql_room = " AND ruimte_geg.alg_ruimte_key IN (" + room_key_arr.join(",") + ")";
|
|
}
|
|
}
|
|
|
|
// Activiteit
|
|
if (act_key)
|
|
sql_act = " AND ract.res_activiteit_key = " + act_key;
|
|
else if (srtact)
|
|
sql_act = " AND ract.res_srtactiviteit_key = " + srtact;
|
|
|
|
// Flags
|
|
if (params.flags && params.flags.length > 0 && params.flags.length < S("res_reservering_flags"))
|
|
{
|
|
sql_flag = " AND rrr.res_rsv_ruimte_flag IN (" + params.flags.join(",") + ")";
|
|
}
|
|
|
|
if (roomcatalogue_key_arr.length)
|
|
sql_room_key = " AND res_discipline_key IN (" + roomcatalogue_key_arr.join(",") + ")";
|
|
|
|
if (obj_key_arr.length)
|
|
sql_obj_key = " AND rd.res_discipline_key IN (" + obj_key_arr.join(",") + ")";
|
|
|
|
if (art_key_arr.length)
|
|
sql_art_key = " AND ra.res_discipline_key IN (" + art_key_arr.join(",") + ")";
|
|
|
|
if (article_arr.length)
|
|
sql_article = " AND rra.res_artikel_key IN (" + article_arr.join(",") + ")";
|
|
|
|
if (!(frontend || fronto))
|
|
{
|
|
if (res_open)
|
|
{
|
|
if (!res_closed)
|
|
status_sql += " AND res_geg.res_status_bo_key < " + S("res_bo_status_key");
|
|
}
|
|
else
|
|
status_sql += " AND res_geg.res_status_bo_key >= " + S("res_bo_status_key");
|
|
}
|
|
|
|
var approve_sql = [];
|
|
if (res_approved)
|
|
{
|
|
approve_sql.push("rrr.res_rsv_ruimte_afgerond = 1");
|
|
}
|
|
if (res_notapproved)
|
|
{
|
|
approve_sql.push("rrr.res_rsv_ruimte_afgerond = 0");
|
|
}
|
|
if ((frontend || fronto) && res_tobeapproved)
|
|
{
|
|
switch (S("res_approval"))
|
|
{
|
|
case 0: // geen approval
|
|
break;
|
|
case 1: // goedkeuren na reserveringdatum
|
|
approve_sql.push("rrr.res_rsv_ruimte_afgerond = 0"
|
|
+" AND (res_geg.res_reservering_tot < TRUNC(SYSDATE, 'DD'))");
|
|
break;
|
|
case 2: // goedkeuren na afmelden
|
|
approve_sql.push("rrr.res_rsv_ruimte_afgerond = 0"
|
|
+" AND ( (rrr.res_rsv_ruimte_prijs IS NOT NULL AND res_geg.res_status_bo_key = 5)"
|
|
+ " OR (rrr.res_rsv_ruimte_prijs IS NULL AND res_geg.res_status_bo_key IS NULL))");
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Artikel groep. Ook uitvoeren als resnum is meegegeven
|
|
var sql_art_group = "";
|
|
if (artgroup)
|
|
sql_art_group = " AND UPPER(ra.res_artikel_groep) IN (" + safe.quoted_sql_join(artgroup, true) + ")";
|
|
|
|
var sql = "";
|
|
// New res structure
|
|
// Volgens mij willen we 1 regel per reservering hier; wat doen we dan met de mogelijk varierende kolommen?
|
|
var sql_select = "SELECT rrr.res_reservering_key"
|
|
+ " , res_geg.res_voorziening"
|
|
+ " , opstelalg.res_ruimte_opstel_default"
|
|
+ " , res_geg.res_reservering_van datumvan"
|
|
+ " , res_geg.res_reservering_tot datumtot"
|
|
+ " , pcontact.naam aanvrager"
|
|
+ " , res_geg.res_ins_discipline_key"
|
|
+ " , res_rsv_ruimte_omschrijving omschrijving"
|
|
+ " , res_rsv_ruimte_opmerking opmerking"
|
|
+ " , res_geg.res_rsv_ruimte_key rsv_ruimte_key"
|
|
+ " , res_geg.res_item_key"
|
|
+ (groupres == -1 || groupres == 4
|
|
? " , res_geg.aantal_art_kenm"
|
|
: "")
|
|
+ ((groupres == 1) // Bij groupering op deelreservering is het afmelden afhankelijk van de laagste bo status
|
|
? " , (SELECT MIN(res_status_bo_key)"
|
|
+ " FROM (SELECT rrr.res_rsv_ruimte_key"
|
|
+ " , rrr.res_status_bo_key"
|
|
+ " FROM res_v_aanwezigrsv_ruimte rrr"
|
|
+ " UNION ALL"
|
|
+ " SELECT rrd.res_rsv_ruimte_key"
|
|
+ " , rrd.res_status_bo_key"
|
|
+ " FROM res_v_aanwezigrsv_deel rrd"
|
|
+ " UNION ALL"
|
|
+ " SELECT rra.res_rsv_ruimte_key"
|
|
+ " , rra.res_status_bo_key"
|
|
+ " FROM res_v_aanwezigrsv_artikel rra) bostatus"
|
|
+ " WHERE bostatus.res_rsv_ruimte_key = res_geg.res_rsv_ruimte_key)"
|
|
: " , res_geg.res_status_bo_key")
|
|
+ " res_status_bo_key"
|
|
+ " , res_rsv_ruimte_flag"
|
|
+ " , rrr.res_rsv_ruimte_bezoekers bezoekers"
|
|
+ " , phost.naam gastheer"
|
|
+ " , pcontact.prs_perslid_telefoonnr"
|
|
+ " , pcontact.prs_perslid_mobiel"
|
|
+ " , COALESCE((SELECT k.prs_kostenplaats_nr "
|
|
+ " FROM prs_kostenplaats k"
|
|
+ " WHERE rrr.prs_kostenplaats_key = k.prs_kostenplaats_key), '') kostenplaats"
|
|
+ " , res_geg.aantal aantal"
|
|
+ " , res_geg.rsv_ruimte_aantal" // 29 Hogere nummers worden alleen op naam gebruikt, zoals het hoort :-)
|
|
+ " , res_geg.prijs verwerkt_prijs"
|
|
+ " , rrr.res_activiteit_key"
|
|
+ " , " + lcl.xsqla("ract.res_activiteit_omschrijving", "ract.res_activiteit_key")
|
|
+ " , ract.res_activiteit_meteindtijd"
|
|
+ " , ract.res_activiteit_upper" // for sorting
|
|
+ " , res_geg.stuks_prijs stuks_prijs"
|
|
+ " , res_geg.btwtarief btwtarief"
|
|
+ " , phost.prs_afdeling_key"
|
|
+ " , (SELECT " + S("prs_dep_string")
|
|
+ " FROM prs_v_afdeling d"
|
|
+ " WHERE phost.prs_afdeling_key = d.prs_afdeling_key ) organisatie"
|
|
+ " , artikelnummer"
|
|
+ " , CASE WHEN COALESCE (res_rsv_ruimte_bezoekers_shown, res_rsv_ruimte_bezoekers) < res_rsv_ruimte_bezoekers"
|
|
+ " THEN 1"
|
|
+ " ELSE rrr.res_rsv_ruimte_noshow "
|
|
+ " END noshow"
|
|
+ " , artikel_groep"
|
|
+ " , res_geg.rcv_type rcv_type"
|
|
+ " , res_geg.res_type res_type"
|
|
+ " , res_geg.keycolumn keycolumn"
|
|
+ " , (SELECT COUNT('1')"
|
|
+ " FROM res_rsv_deel rrd"
|
|
+ " WHERE rrd.res_rsv_ruimte_key = res_geg.res_rsv_ruimte_key"
|
|
+ " AND bez_bezoekers_key IS NULL"
|
|
+ " ) + "
|
|
+ " (SELECT COUNT('2')"
|
|
+ " FROM res_rsv_artikel"
|
|
+ " WHERE res_rsv_ruimte_key = res_geg.res_rsv_ruimte_key) nrObjects"
|
|
+ ((groupres == 7) || (groupres == 8)
|
|
? " , res_artikel_key artikel_key"
|
|
: "")
|
|
+ ((groupres == 9 || groupres == 14)
|
|
? " , rrr.prs_kostenplaats_key kostenplaats_key"
|
|
: "")
|
|
+ ((groupres == 12)
|
|
? " , (SELECT ks.prs_kostensoort_oms"
|
|
+ " FROM prs_kostensoort ks, ins_tab_discipline d"
|
|
+ " WHERE d.ins_discipline_key = res_ins_discipline_key"
|
|
+ " AND d.prs_kostensoort_key = ks.prs_kostensoort_key) prs_kostensoort_oms "
|
|
+ " , (SELECT d.prs_kostensoort_key"
|
|
+ " FROM ins_tab_discipline d"
|
|
+ " WHERE d.ins_discipline_key = res_ins_discipline_key) prs_kostensoort_key"
|
|
: "")
|
|
+ ((groupres == 13)
|
|
? " , (SELECT " + lcl.xsql("ksg.prs_kostensoortgrp_oms", "ksg.prs_kostensoortgrp_key")
|
|
+ " FROM prs_kostensoortgrp ksg"
|
|
+ " , prs_kostensoort ks"
|
|
+ " , ins_tab_discipline d"
|
|
+ " WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key"
|
|
+ " AND d.ins_discipline_key = res_ins_discipline_key"
|
|
+ " AND d.prs_kostensoort_key = ks.prs_kostensoort_key) prs_kostensoortgrp_oms"
|
|
+ " , (SELECT ks.prs_kostensoortgrp_key"
|
|
+ " FROM prs_kostensoort ks"
|
|
+ " , ins_tab_discipline d"
|
|
+ " WHERE d.ins_discipline_key = res_ins_discipline_key"
|
|
+ " AND d.prs_kostensoort_key = ks.prs_kostensoort_key) prs_kostensoortgrp_key"
|
|
: "")
|
|
+ " , rrr.res_rsv_ruimte_volgnr"
|
|
+ " , rrr.res_rsv_ruimte_key"
|
|
+ " , rrr.res_rsv_ruimte_ordernr"
|
|
+ " , res_geg.res_ruimte_key"
|
|
+ " , sa.res_srtactiviteit_prefix"
|
|
+ " , COALESCE(rrr.res_rsv_ruimte_bezoekers_shown, -1) bezoekers_shown"
|
|
+ " , res_geg.ingang"
|
|
+ " , res_geg.verval"
|
|
+ " , res_geg.ins_alg_ruimte_key_org"
|
|
+ " , res_geg.res_rsv_ruimte_satisfaction"
|
|
+ " , res_geg.res_rsv_ruimte_satisfaction_op"
|
|
+ " , rrr.res_rsv_ruimte_afgerond"
|
|
+ " , CASE"
|
|
+ " WHEN res_rsv_ruimte_afgerond = 0"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END approval"
|
|
+ " , rrr.res_rsv_ruimte_cat_appr"
|
|
+ (frontend || fronto
|
|
? " , rrr.res_rsv_ruimte_verwijder"
|
|
+ " , res_geg.dirtlevel"
|
|
+ " , res_geg.res_reservering_ispool"
|
|
+ " , res_geg.res_status_fo_key"
|
|
|
|
: "");
|
|
if (!(frontend || fronto))
|
|
sql_select += (opdr_key > 0
|
|
? " , 0 ins_srtdeel_uitleenbaar"
|
|
+ ", NULL ins_discipline_key"
|
|
: " , res_geg.ins_srtdeel_uitleenbaar"
|
|
+ ", res_geg.ins_discipline_key");
|
|
|
|
var sql_select_obj_restype_O = sql_select
|
|
+ ", NULL alg_district_key"
|
|
+ ", NULL alg_locatie_key"
|
|
+ ", '' locatie"
|
|
+ ", '' alg_locatie_adres"
|
|
+ ", '' alg_gebouw_omschrijving"
|
|
+ ", NULL alg_gebouw_key"
|
|
+ ", NULL alg_verdieping_key"
|
|
+ ", NULL alg_ruimte_key"
|
|
+ ", '' res_ruimte_nr"
|
|
+ ", '' alg_ruimte_aanduiding"
|
|
+ ", 'O' categorie"
|
|
+ (frontend || fronto
|
|
? ", 2 approved_status"
|
|
: ""); // dummy
|
|
|
|
sql_select += ", ruimte_geg.alg_locatie_key"
|
|
+ ", l.alg_district_key"
|
|
+ ", l.alg_locatie_code locatie"
|
|
+ ", ruimte_geg.alg_locatie_adres"
|
|
+ ", ruimte_geg.alg_gebouw_omschrijving"
|
|
+ ", ruimte_geg.alg_gebouw_key"
|
|
+ ", ruimte_geg.alg_verdieping_key"
|
|
+ ", ruimte_geg.alg_ruimte_key"
|
|
+ ", COALESCE(opstelalg.res_ruimte_nr, ruimte_geg.alg_ruimte_aanduiding)"
|
|
+ " || CASE WHEN res_geg.res_ruimte_key IS NULL"
|
|
+ " THEN DECODE( ruimte_geg.alg_ruimte_omschrijving"
|
|
+ " , NULL, ''"
|
|
+ " , ' (' || ruimte_geg.alg_ruimte_omschrijving || ')'"
|
|
+ " )"
|
|
+ " ELSE ''"
|
|
+ " END res_ruimte_nr" //res_ruimte_nr is al vertaald
|
|
+ ", " + ( minfo
|
|
? "COALESCE(opstelalg.res_ruimte_nr, ruimte_geg.alg_ruimte_omschrijving)"
|
|
: "ruimte_geg.alg_ruimte_aanduiding"
|
|
) + " alg_ruimte_aanduiding"
|
|
+ ", res_geg.res_type categorie"
|
|
+ (frontend || fronto
|
|
? ", res_geg.approved_status"
|
|
: "");
|
|
|
|
var sql_from = " FROM res_rsv_ruimte rrr"
|
|
+ " , res_activiteit ract"
|
|
+ " , res_srtactiviteit sa"
|
|
+ " , thePerslid phost"
|
|
+ " , thePerslid pcontact"
|
|
+ " , (SELECT res_ruimte_opstel_key"
|
|
+ " , " + lcl.xsqla("rr.res_ruimte_nr", "rr.res_ruimte_key")
|
|
+ " , MIN (alg_ruimte_key) alg_ruimte_key"
|
|
+ " , res_ruimte_opstel_default"
|
|
+ " FROM res_ruimte_opstelling rro, res_alg_ruimte rar, res_ruimte rr"
|
|
+ " WHERE rro.res_ruimte_key = rar.res_ruimte_key"
|
|
+ " AND rr.res_ruimte_key = rar.res_ruimte_key"
|
|
+ " AND rar.res_alg_ruimte_verwijder is null"
|
|
+ (roomcatalogue_key_arr.length // Als er ruimten (ruimte catalogi) zijn geselecteerd dan wil ik alleen daarvan de objecten en artikelen zien (AAXX#69681).
|
|
? " AND res_discipline_key IN (" + roomcatalogue_key_arr.join(",") + ")"
|
|
: "")
|
|
+ " GROUP BY res_ruimte_opstel_key"
|
|
+ " , " + lcl.xsql("rr.res_ruimte_nr", "rr.res_ruimte_key")
|
|
+ " , res_ruimte_opstel_default) opstelalg"
|
|
+ " , prs_kostenplaats k"
|
|
+ " , prs_v_afdeling_boom boom";
|
|
|
|
var sql_from_obj_restype_O = sql_from
|
|
+ ", mld_opdr o";
|
|
|
|
sql_from += ", alg_v_ruimte_gegevens_all ruimte_geg" // DB12
|
|
+ ", alg_locatie l"
|
|
+ ", alg_district di";
|
|
|
|
var sql_where = " WHERE res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND rrr.res_activiteit_key = ract.res_activiteit_key"
|
|
+ " AND ract.res_srtactiviteit_key = sa.res_srtactiviteit_key"
|
|
+ " AND res_rsv_ruimte_host_key = phost.prs_perslid_key"
|
|
+ " AND res_rsv_ruimte_contact_key = pcontact.prs_perslid_key"
|
|
+ " AND rrr.res_ruimte_opstel_key = opstelalg.res_ruimte_opstel_key(+)"
|
|
+ " AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)"
|
|
+ " AND pcontact.prs_afdeling_key = boom.prs_afdeling_key"
|
|
+ (!res_key && !(opdr_key > 0)
|
|
? sql_act
|
|
+ sql_name
|
|
+ status_sql
|
|
+ (approve_sql.length > 0? " AND (" + approve_sql.join(" OR ") + ")" : "")
|
|
+ sql_dept
|
|
+ sql_account
|
|
: "");
|
|
|
|
if ((frontend || fronto) && !res_key)
|
|
{
|
|
if (!res_actual && !res_deleted) // Ongeldige actuele reserveringen
|
|
sql_where += " AND rrr.res_rsv_ruimte_dirtlevel > 0"
|
|
+ " AND rrr.res_rsv_ruimte_verwijder IS NULL";
|
|
else if (!res_deleted)
|
|
sql_where += " AND rrr.res_rsv_ruimte_verwijder IS NULL";
|
|
else if (!res_actual)
|
|
sql_where += " AND rrr.res_rsv_ruimte_verwijder IS NOT NULL";
|
|
}
|
|
else if (!res_key)
|
|
sql_where += " AND rrr.res_rsv_ruimte_verwijder IS NULL";
|
|
|
|
if (params.res_noshowonly)
|
|
{
|
|
sql_where += " AND (rrr.res_rsv_ruimte_noshow = 1";
|
|
sql_where += " OR COALESCE(res_rsv_ruimte_bezoekers_shown, res_rsv_ruimte_bezoekers) < res_rsv_ruimte_bezoekers)";
|
|
}
|
|
|
|
if (!groupres || groupres == 1)
|
|
sql_where += getKenmerkSql("RES", "rrr.res_rsv_ruimte_key", true);
|
|
|
|
var sql_where_obj_restype_O = sql_where
|
|
+ " AND rrr.mld_opdr_key = o.mld_opdr_key";
|
|
|
|
sql_where += (!res_key && !(opdr_key > 0)
|
|
? sql_reg
|
|
+ sql_dist
|
|
+ sql_loc
|
|
+ sql_bld
|
|
+ sql_floor
|
|
+ sql_room
|
|
: "")
|
|
+ " AND ruimte_geg.alg_ruimte_key = COALESCE(rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)"
|
|
+ " AND l.alg_locatie_key = ruimte_geg.alg_locatie_key"
|
|
+ " AND l.alg_district_key = di.alg_district_key";
|
|
|
|
var sql_from_art_part = "SELECT " + (groupres == 1? "'CV'" : "'C'") + " AS res_type"
|
|
+ " , 'CV' AS rcv_type"
|
|
+ " , rra.res_rsv_ruimte_key"
|
|
+ " , (SELECT rro.res_ruimte_key"
|
|
+ " FROM res_ruimte_opstelling rro"
|
|
+ " WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key) AS res_ruimte_key"
|
|
+ " , rra.res_rsv_artikel_key AS res_item_key"
|
|
+ (groupres == -1 || groupres == 4
|
|
? " , (SELECT COUNT(ka.res_kenmerkartikel_key)"
|
|
+ " FROM res_kenmerkartikel ka"
|
|
+ " WHERE ka.res_rsv_artikel_key = rra.res_rsv_artikel_key) aantal_art_kenm"
|
|
: "")
|
|
+ (groupres == 1
|
|
? " , rrr.res_rsv_ruimte_van AS res_reservering_van"
|
|
: " , rra.res_rsv_artikel_levering AS res_reservering_van")
|
|
+ " , res_rsv_ruimte_tot AS res_reservering_tot"
|
|
+ " , rra.res_rsv_artikel_aantal AS aantal"
|
|
+ (groupres == 15
|
|
? " , LTRIM(" + lcl.xsql("rd.ins_discipline_omschrijving", "ra.res_discipline_key") + ")"
|
|
: " , LTRIM(" + lcl.xsql("ra.res_artikel_omschrijving", "ra.res_artikel_key")
|
|
+ ") || CASE WHEN " + lcl.xsql("ra.res_artikel_eenheid", "ra.res_artikel_key") + " IS NULL"
|
|
+ " THEN ''"
|
|
+ " ELSE ' ('|| " + lcl.xsql("ra.res_artikel_eenheid", "ra.res_artikel_key") + " || ')'"
|
|
+ " END"
|
|
) + " AS res_voorziening"
|
|
+ " , NULL"
|
|
+ " , ra.res_discipline_key AS res_ins_discipline_key"
|
|
+ " , rra.res_status_bo_key"
|
|
+ " , ra.res_artikel_key AS res_artikel_key"
|
|
+ " , "+ (withprices ? "res.getartikelprijs(rra.res_rsv_artikel_key)" : "NULL") + " AS prijs"
|
|
+ " , ra.res_artikel_prijs AS stuks_prijs"
|
|
+ " , ra.res_artikel_btw AS btwtarief"
|
|
+ " , to_number(null) AS rsv_ruimte_aantal"
|
|
+ " , ra.res_artikel_nr AS artikelnummer"
|
|
+ " , ra.res_artikel_groep AS artikel_groep"
|
|
+ " , rra.res_rsv_artikel_key keycolumn"
|
|
+ " , CASE"
|
|
+ " WHEN (ra.res_artikel_ingangsdatum IS NULL OR ra.res_artikel_ingangsdatum <= rrr.res_rsv_ruimte_van)"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END ingang"
|
|
+ " , CASE"
|
|
+ " WHEN (ra.res_artikel_vervaldatum IS NULL OR ra.res_artikel_vervaldatum > rrr.res_rsv_ruimte_tot)"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END verval"
|
|
+ " , NULL ins_alg_ruimte_key_org"
|
|
+ " , rrr.res_rsv_ruimte_satisfaction"
|
|
+ " , rrr.res_rsv_ruimte_satisfaction_op"
|
|
+ " , rra.res_rsv_artikel_approved"
|
|
+ (frontend || fronto
|
|
? " , rra.res_rsv_artikel_dirtlevel dirtlevel"
|
|
+ " , 0 res_reservering_ispool"
|
|
+ " , rrr.res_status_fo_key"
|
|
+ " , CASE"
|
|
+ " WHEN (SELECT COUNT(ra.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE ra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND ra.res_rsv_artikel_approved = 0) > 0"
|
|
+ " THEN 0"
|
|
+ " WHEN (SELECT COUNT(ra.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE ra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND ra.res_rsv_artikel_approved = 1) > 0"
|
|
+ " THEN 1"
|
|
+ " ELSE 2"
|
|
+ " END approved_status"
|
|
: " , 0 ins_srtdeel_uitleenbaar"
|
|
+ " , NULL ins_discipline_key")
|
|
+ " FROM " + (res_deleted || res_key > 0 ? "res_rsv_artikel" : "res_v_aanwezigrsv_artikel") + " rra"
|
|
+ " , theResrsv rrr"
|
|
+ " , res_artikel ra"
|
|
+ " , res_discipline rd"
|
|
+ " WHERE rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND rra.res_rsv_artikel_dirtlevel = 0" // Geen dirty ruimtes voor de BO! TODO: voor mi wel? En hoe dan?
|
|
+ " AND rra.res_artikel_key = ra.res_artikel_key"
|
|
+ " AND ra.res_discipline_key = rd.ins_discipline_key"
|
|
+ " AND rra.res_rsv_artikel_approved < 2"
|
|
+ (groupres == 1 && (roomcat || frontend || fronto)
|
|
? " AND rrr.alg_ruimte_key IS NOT NULL"
|
|
: "")
|
|
+ sql_art_key
|
|
+ sql_article
|
|
+ sql_art_group;
|
|
|
|
var sql_from_obj_part = "SELECT " + (groupres == 1? "'CV'" : "'V'") + " AS res_type"
|
|
+ " , 'CV' AS rcv_type"
|
|
+ " , rrd.res_rsv_ruimte_key"
|
|
+ " , (SELECT rro.res_ruimte_key"
|
|
+ " FROM res_ruimte_opstelling rro"
|
|
+ " WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key) AS res_ruimte_key"
|
|
+ " , rrd.res_rsv_deel_key AS res_item_key"
|
|
+ (groupres == -1 || groupres == 4
|
|
? " , 0 aantal_art_kenm"
|
|
: "")
|
|
+ (groupres == 1
|
|
? " , rrr.res_rsv_ruimte_van AS res_reservering_van"
|
|
: " , rrd.res_rsv_deel_van AS res_reservering_van")
|
|
+ (groupres == 1
|
|
? " , rrr.res_rsv_ruimte_tot AS res_reservering_tot"
|
|
: " , rrd.res_rsv_deel_tot AS res_reservering_tot")
|
|
+ " , to_number(null) AS aantal"
|
|
+ " , " + lcl.xsql("rd.res_deel_omschrijving", "rd.res_deel_key")
|
|
+ " || CASE WHEN " + lcl.xsql("rd.res_deel_eenheid", "rd.res_deel_key") + " IS NULL"
|
|
+ " THEN ''"
|
|
+ " ELSE ' ('|| " + lcl.xsql("rd.res_deel_eenheid", "rd.res_deel_key") + " || ')'"
|
|
+ " END AS res_voorziening"
|
|
+ " , NULL"
|
|
+ " , rd.res_discipline_key AS res_ins_discipline_key"
|
|
+ " , rrd.res_status_bo_key"
|
|
+ " , TO_NUMBER(null) AS res_artikel_key"
|
|
+ " , " + (withprices? "res.getdeelprijs(rrd.res_rsv_deel_key)" : "NULL") + " AS prijs"
|
|
+ " , rd.res_deel_prijs AS stuks_prijs"
|
|
+ " , to_number(null) AS btwtarief"
|
|
+ " , to_number(null) AS rsv_ruimte_aantal"
|
|
+ " , null AS artikelnummer"
|
|
+ " , '' AS artikel_groep"
|
|
+ " , rrd.res_rsv_deel_key keycolumn"
|
|
+ " , 1 ingang"
|
|
+ " , CASE"
|
|
+ " WHEN (rd.res_deel_vervaldatum IS NULL OR rd.res_deel_vervaldatum > rrr.res_rsv_ruimte_tot)"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END verval"
|
|
+ (opdr_key > 0
|
|
? " , -1 ins_alg_ruimte_key_org"
|
|
: " , id.ins_alg_ruimte_key_org")
|
|
+ " , rrr.res_rsv_ruimte_satisfaction"
|
|
+ " , rrr.res_rsv_ruimte_satisfaction_op"
|
|
+ (frontend || fronto
|
|
? " , rrd.res_rsv_deel_dirtlevel dirtlevel"
|
|
+ ", 0 res_reservering_ispool"
|
|
+ ", rrr.res_status_fo_key"
|
|
+ " , CASE"
|
|
+ " WHEN (SELECT COUNT(ra.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE ra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND ra.res_rsv_artikel_approved = 0) > 0"
|
|
+ " THEN 0"
|
|
+ " WHEN (SELECT COUNT(ra.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE ra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND ra.res_rsv_artikel_approved = 1) > 0"
|
|
+ " THEN 1"
|
|
+ " ELSE 2"
|
|
+ " END approved_status"
|
|
: "")
|
|
+ (frontend || fronto || opdr_key > 0
|
|
? ""
|
|
: " , isd.ins_srtdeel_uitleenbaar"
|
|
+ ", id.ins_discipline_key")
|
|
+ " FROM " + (res_deleted || res_key > 0 ? "res_rsv_deel" : "res_v_aanwezigrsv_deel") + " rrd"
|
|
+ " , theResrsv rrr"
|
|
+ " , res_deel rd"
|
|
+ (opdr_key > 0
|
|
? ""
|
|
: " , ins_deel id"
|
|
+ " , ins_srtdeel isd")
|
|
+ " WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key "
|
|
+ " AND rrd.res_deel_key = rd.res_deel_key "
|
|
+ (S("vis_parking_key") != -1
|
|
? " AND rd.res_discipline_key != " + S("vis_parking_key")
|
|
: "")
|
|
+ " AND rrd.res_rsv_deel_dirtlevel = 0"; // Geen dirty ruimtes voor de BO! TODO: voor mi wel? En hoe dan?
|
|
if (opdr_key <= 0)
|
|
sql_from_obj_part += " AND rd.res_ins_deel_key = id.ins_deel_key"
|
|
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
|
|
+ (groupres == 1 && (roomcat || frontend || fronto)
|
|
? " AND rrr.alg_ruimte_key IS NOT NULL"
|
|
: "");
|
|
sql_from_obj_part += sql_obj_key;
|
|
|
|
var sql_from_room_part = "SELECT 'R' AS res_type"
|
|
+ " , 'R' AS rcv_type"
|
|
+ " , rrr.res_rsv_ruimte_key"
|
|
+ " , rro.res_ruimte_key"
|
|
+ " , rrr.res_rsv_ruimte_key AS res_item_key"
|
|
+ (groupres == -1 || groupres == 4
|
|
? " , 0 aantal_art_kenm"
|
|
: "")
|
|
+ " , rrr.res_rsv_ruimte_van AS res_reservering_van"
|
|
+ " , rrr.res_rsv_ruimte_tot AS res_reservering_tot"
|
|
+ " , TO_NUMBER(null) AS aantal"
|
|
+ " , " + lcl.xsql("ro.res_opstelling_omschrijving", "ro.res_opstelling_key") + " AS res_voorziening"
|
|
+ " , rro.res_ruimte_opstel_default AS res_ruimte_opstel_default"
|
|
+ " , rr.res_discipline_key AS res_ins_discipline_key"
|
|
+ " , rrr.res_status_bo_key"
|
|
+ " , to_number(null) AS res_artikel_key"
|
|
+ " , "+ (withprices ? "res.getruimteprijs(rrr.res_rsv_ruimte_key) - COALESCE(rrr.res_rsv_ruimte_korting, 0)" : "NULL") + " AS prijs"
|
|
+ " , to_number(null) AS stuks_prijs"
|
|
+ " , to_number(null) AS btwtarief"
|
|
+ " , 1 AS rsv_ruimte_aantal"
|
|
+ " , null AS artikelnummer"
|
|
+ " , '' AS artikel_groep"
|
|
+ " , rrr.res_rsv_ruimte_key keycolumn"
|
|
+ " , 1 ingang"
|
|
+ " , CASE"
|
|
+ " WHEN (rr.res_ruimte_vervaldatum IS NULL OR rr.res_ruimte_vervaldatum > rrr.res_rsv_ruimte_tot)"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END verval"
|
|
+ " , NULL ins_alg_ruimte_key_org"
|
|
+ " , rrr.res_rsv_ruimte_satisfaction"
|
|
+ " , rrr.res_rsv_ruimte_satisfaction_op"
|
|
+ " , rrr.res_rsv_ruimte_dirtlevel dirtlevel"
|
|
+ (frontend || fronto
|
|
? " , rr.res_ruimte_nr"
|
|
+ " , r.res_reservering_ispool"
|
|
+ " , rrr.res_status_fo_key"
|
|
+ " , CASE"
|
|
+ " WHEN (SELECT COUNT(ra.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE ra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND ra.res_rsv_artikel_approved = 0) > 0"
|
|
+ " THEN 0"
|
|
+ " WHEN (SELECT COUNT(ra.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra"
|
|
+ " WHERE ra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key"
|
|
+ " AND ra.res_rsv_artikel_approved = 1) > 0"
|
|
+ " THEN 1"
|
|
+ " ELSE 2"
|
|
+ " END approved_status"
|
|
: " , 0 ins_srtdeel_uitleenbaar"
|
|
+ " , NULL ins_discipline_key")
|
|
+ " FROM theResrsv rrr"
|
|
+ " , res_reservering r"
|
|
+ " , res_ruimte_opstelling rro"
|
|
+ " , res_ruimte rr"
|
|
+ " , res_opstelling ro"
|
|
+ " WHERE rrr.res_reservering_key = r.res_reservering_key"
|
|
+ " AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
|
|
+ " AND rro.res_ruimte_key = rr.res_ruimte_key"
|
|
+ (backo || minfo
|
|
? " AND rrr.res_rsv_ruimte_dirtlevel = 0" // Geen dirty ruimtes voor de BO en MI
|
|
: "")
|
|
+ " AND rro.res_opstelling_key = ro.res_opstelling_key "
|
|
+ sql_room_key;
|
|
|
|
//===================================================
|
|
|
|
var art_waar = (groupres == 1
|
|
? ", ruimte_geg.alg_ruimte_aanduiding"
|
|
+ " || DECODE(ruimte_geg.alg_ruimte_omschrijving"
|
|
+ " , NULL, ''"
|
|
+ " , ' (' || ruimte_geg.alg_ruimte_omschrijving || ')'"
|
|
+ " )" // Per reservering, zichtbaar voor losse voorziening reservering.
|
|
: ", COALESCE(" + lcl.xsql("opstelalg.res_ruimte_nr", "res_geg.res_ruimte_key") + ", ruimte_geg.alg_ruimte_aanduiding)") // Niet gegroepeerd.
|
|
art_waar += " waar"
|
|
|
|
sql_from_art_part = sql_select
|
|
+ " , res_geg.res_rsv_artikel_approved"
|
|
+ (frontend || fronto
|
|
? art_waar
|
|
: "")
|
|
+ sql_from
|
|
+ " , (" + sql_from_art_part + ") res_geg"
|
|
+ sql_where;
|
|
|
|
// apply 3D authorization to the locations and to the organisations (both ALG and PRS)
|
|
if (!frontend)
|
|
{
|
|
var disc_art_arr = [];
|
|
if (!res_key)
|
|
{
|
|
if (fronto && roomcatalogue_key_arr.length)
|
|
disc_art_arr = disc_art_arr.concat(roomcatalogue_key_arr);
|
|
else if ((backo || minfo) && opdr_key <= 0 && article_disc_arr.length)
|
|
disc_art_arr = disc_art_arr.concat(article_disc_arr);
|
|
}
|
|
sql_from_art_part = discx3d(sql_from_art_part,
|
|
"res_geg.res_ins_discipline_key",
|
|
"di.alg_regio_key",
|
|
"l.alg_district_key",
|
|
"(ruimte_geg.alg_locatie_key+0)", // Voorkom slechte performance voor CRO033
|
|
"ruimte_geg.alg_gebouw_key",
|
|
"ruimte_geg.alg_verdieping_key",
|
|
"ruimte_geg.alg_ruimte_key",
|
|
"boom.prs_bedrijf_key",
|
|
"boom.prs_afdeling_key",
|
|
pautfunction,
|
|
disc_art_arr,
|
|
2,
|
|
null,
|
|
[2]); // artikelen
|
|
}
|
|
|
|
if (restype == "O")
|
|
var obj_waar = ", mld_opdr_id";
|
|
else
|
|
var obj_waar = (groupres == 1
|
|
? ", ruimte_geg.alg_ruimte_aanduiding"
|
|
+ " || DECODE(ruimte_geg.alg_ruimte_omschrijving"
|
|
+ " , NULL, ''"
|
|
+ " , ' (' || ruimte_geg.alg_ruimte_omschrijving || ')'"
|
|
+ " )" // Per reservering, zichtbaar voor losse voorziening reservering.
|
|
: ", COALESCE(" + lcl.xsql("opstelalg.res_ruimte_nr", "res_geg.res_ruimte_key") + ", ruimte_geg.alg_ruimte_aanduiding)") // Niet gegroepeerd.
|
|
obj_waar += " waar"
|
|
|
|
sql_from_obj_part = ((frontend || fronto) && restype == "O"
|
|
? sql_select_obj_restype_O
|
|
: sql_select)
|
|
+ " , (SELECT MIN(ra1.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra1"
|
|
+ " WHERE ra1.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) res_rsv_artikel_approved"
|
|
+ (frontend || fronto
|
|
? obj_waar
|
|
: "")
|
|
+ ((frontend || fronto) && restype == "O"
|
|
? sql_from_obj_restype_O
|
|
: sql_from)
|
|
+ " , (" + sql_from_obj_part + ") res_geg"
|
|
+ ((frontend || fronto) && restype == "O"
|
|
? sql_where_obj_restype_O
|
|
: sql_where);
|
|
|
|
if (!frontend)
|
|
{
|
|
var disc_obj_arr = [];
|
|
if (!res_key)
|
|
{
|
|
if (fronto && roomcatalogue_key_arr.length)
|
|
disc_obj_arr = disc_obj_arr.concat(roomcatalogue_key_arr);
|
|
else if ((backo || minfo) && opdr_key <= 0 && obj_key_arr.length)
|
|
disc_obj_arr = disc_obj_arr.concat(article_disc_arr);
|
|
}
|
|
sql_from_obj_part = discx3d(sql_from_obj_part,
|
|
"res_geg.res_ins_discipline_key",
|
|
"di.alg_regio_key",
|
|
"l.alg_district_key",
|
|
"(ruimte_geg.alg_locatie_key+0)", // Voorkom slechte performance voor CRO033
|
|
"ruimte_geg.alg_gebouw_key",
|
|
"ruimte_geg.alg_verdieping_key",
|
|
"ruimte_geg.alg_ruimte_key",
|
|
"boom.prs_bedrijf_key",
|
|
"boom.prs_afdeling_key",
|
|
pautfunction,
|
|
disc_obj_arr,
|
|
2,
|
|
null,
|
|
[1, 4, 5]); // objecten/personen/werkplekken
|
|
}
|
|
|
|
sql_from_room_part = sql_select
|
|
+ " , (SELECT MIN(ra1.res_rsv_artikel_approved)"
|
|
+ " FROM res_rsv_artikel ra1"
|
|
+ " WHERE ra1.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) res_rsv_artikel_approved"
|
|
+ (frontend || fronto
|
|
? ", COALESCE(" + lcl.xsql("res_geg.res_ruimte_nr", "res_geg.res_ruimte_key") + ", ruimte_geg.alg_ruimte_aanduiding) waar"
|
|
: "")
|
|
+ sql_from
|
|
+ " , (" + sql_from_room_part + ") res_geg"
|
|
+ sql_where;
|
|
|
|
if (!frontend)
|
|
{
|
|
var disc_room_arr = [];
|
|
if (!res_key)
|
|
{
|
|
if ((fronto || ((backo || minfo) && opdr_key <= 0)) && roomcatalogue_key_arr.length)
|
|
disc_room_arr = disc_obj_arr.concat(roomcatalogue_key_arr);
|
|
}
|
|
sql_from_room_part = discx3d(sql_from_room_part,
|
|
"res_geg.res_ins_discipline_key",
|
|
"di.alg_regio_key",
|
|
"l.alg_district_key",
|
|
"(ruimte_geg.alg_locatie_key+0)", // Voorkom slechte performance voor CRO033
|
|
"ruimte_geg.alg_gebouw_key",
|
|
"ruimte_geg.alg_verdieping_key",
|
|
"ruimte_geg.alg_ruimte_key",
|
|
"boom.prs_bedrijf_key",
|
|
"boom.prs_afdeling_key",
|
|
pautfunction,
|
|
disc_room_arr,
|
|
2,
|
|
null,
|
|
[3]); // ruimtes
|
|
}
|
|
|
|
var sql_from_total = "";
|
|
if (res_key || (opdr_key > 0 || (frontend || fronto || compact)) || (roomcat && groupres != 7 && groupres != 8 && groupres != 15)) // Niet als je groepeert op artikel
|
|
{
|
|
sql_from_total += "/* Ruimtes */ " + sql_from_room_part;
|
|
if (res_key || (opdr_key > 0 || (frontend || fronto || compact)) || objcat || artcat)
|
|
sql_from_total += " \nUNION ALL\n "
|
|
}
|
|
|
|
if (res_key || (opdr_key > 0 || (frontend || fronto || compact)) || (objcat && groupres != 7 && groupres != 8 && groupres != 15)) // Niet als je groepeert op artikel
|
|
{
|
|
sql_from_total += "/* Objecten */ " + sql_from_obj_part
|
|
+ (roomcatalogue_key_arr.length
|
|
? " AND res_geg.res_ruimte_key IS NOT NULL" // Niet als er ruimten (ruimte catalogi) zijn geselecteerd. Dan wil ik geen losse objecten zien (AAXX#69681).
|
|
: "");
|
|
if (res_key || (opdr_key > 0 || (frontend || fronto || compact)) || artcat)
|
|
sql_from_total += " \nUNION ALL\n "
|
|
}
|
|
|
|
if (res_key || (opdr_key > 0 || (frontend || fronto || compact)) || artcat)
|
|
sql_from_total += "/* Artikelen */ " + sql_from_art_part
|
|
+ (roomcatalogue_key_arr.length
|
|
? " AND res_geg.res_ruimte_key IS NOT NULL" // Niet als er ruimten (ruimte catalogi) zijn geselecteerd. Dan wil ik geen losse artikelen zien (AAXX#69681).
|
|
: "");
|
|
|
|
sql = "WITH " + thePerslid + "," + theResrsv + sql_from_total;
|
|
|
|
var sql_order = "";
|
|
if (groupres == 1)
|
|
{ // Alleen backoffice reserveringen, group by deelreservering (rsv_ruimte_key and rcv_type DESC)
|
|
if (sortout == 1) // locatie, tijd
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " locatie, " + (datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime()? " datumvan" : " TO_CHAR(datumvan, 'HH24:MI:SS')") + ", rsv_ruimte_key, rcv_type DESC, res_reservering_key, categorie DESC";
|
|
else if (sortout == 2) // plaats
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " locatie, rsv_ruimte_key, rcv_type DESC, datumvan";
|
|
else if (sortout == 3) // reservering
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " res_reservering_key, rsv_ruimte_key, rcv_type DESC, datumvan";
|
|
else if (sortout == 4) // gastheer
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " gastheer, rsv_ruimte_key, rcv_type DESC, datumvan";
|
|
else if (sortout == 5) // tijd
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ (datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime()? " datumvan" : " TO_CHAR(datumvan, 'HH24:MI:SS')") + ", rsv_ruimte_key, rcv_type DESC, locatie, categorie DESC, bezoekers DESC";
|
|
else
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " res_reservering_key DESC, rsv_ruimte_key, rcv_type DESC, locatie, categorie DESC, datumvan, res_ruimte_nr, bezoekers DESC";
|
|
}
|
|
else
|
|
{
|
|
if (frontend || fronto)
|
|
sql_order = " ORDER BY " + (datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime()? " datumvan" : " TO_CHAR(datumvan, 'HH24:MI:SS')") + " desc, waar, datumvan desc, res_type DESC, res_voorziening";
|
|
else if (sortout == 1) // locatie, tijd
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " locatie, " + (datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime()? " datumvan" : " TO_CHAR(datumvan, 'HH24:MI:SS')") + ", res_ruimte_nr, rcv_type DESC, res_reservering_key, categorie DESC";
|
|
else if (sortout == 2) // plaats
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " locatie, res_ruimte_nr, datumvan, res_reservering_key, categorie DESC";
|
|
else if (sortout == 3) // reservering
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " res_reservering_key, datumvan, res_ruimte_nr, categorie DESC";
|
|
else if (sortout == 4) // gastheer
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ " gastheer, datumvan, res_ruimte_nr, res_reservering_key, categorie DESC";
|
|
else if (sortout == 5) // tijd
|
|
sql_order = " ORDER BY" + (excel? " res_activiteit_upper," : "")
|
|
+ (datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime()? " datumvan" : " TO_CHAR(datumvan, 'HH24:MI:SS')") + ", locatie, res_ruimte_nr, res_reservering_key, categorie DESC";
|
|
}
|
|
|
|
// Voor groeperingen het resultaat nu eerst filteren zodat je maar 1 regel per deelreservering overhoud.
|
|
// Reserveringen met meerdere objecten (res_item_key) samen nemen in 1 regel
|
|
if (groupres == 1)
|
|
{
|
|
// Voor groepering nog verder filteren
|
|
sql = " SELECT DISTINCT res_reservering_key"
|
|
+ " , locatie"
|
|
+ " , alg_locatie_adres"
|
|
+ " , alg_gebouw_key"
|
|
+ " , alg_gebouw_omschrijving"
|
|
+ " , alg_verdieping_key"
|
|
+ " , alg_ruimte_key"
|
|
+ " ," + lcl.xsqla("res_ruimte_nr", "res_ruimte_key") // PF: weet zo niet of deze niet hierboven al vertaald is?!
|
|
+ " , alg_ruimte_aanduiding"
|
|
+ " , datumvan"
|
|
+ " , datumtot"
|
|
+ " , aanvrager"
|
|
+ " , omschrijving"
|
|
+ " , opmerking"
|
|
+ " , rsv_ruimte_key"
|
|
+ " , NULL res_item_key"
|
|
+ " , res_status_bo_key"
|
|
+ " , res_rsv_ruimte_flag"
|
|
+ " , CASE categorie"
|
|
+ " WHEN 'V' THEN 'CV'"
|
|
+ " WHEN 'C' THEN 'CV'"
|
|
+ " WHEN 'CV' THEN 'CV'"
|
|
+ " ELSE 'R'"
|
|
+ " END categorie"
|
|
+ " , bezoekers"
|
|
+ " , gastheer"
|
|
+ " , prs_perslid_telefoonnr"
|
|
+ " , prs_perslid_mobiel"
|
|
+ " , kostenplaats"
|
|
+ " , rsv_ruimte_aantal"
|
|
+ " , verwerkt_prijs"
|
|
+ " , rcv_type"
|
|
+ " , res_type"
|
|
+ " , rsv_ruimte_key keycolumn"
|
|
+ " , nrobjects"
|
|
+ " , res_rsv_ruimte_volgnr"
|
|
+ " , res_rsv_ruimte_key"
|
|
+ " , res_rsv_ruimte_ordernr"
|
|
+ " , res_ruimte_key"
|
|
+ " , res_activiteit_key"
|
|
+ " , res_activiteit_upper"
|
|
+ " , res_srtactiviteit_prefix"
|
|
+ " , bezoekers_shown"
|
|
+ " , ingang"
|
|
+ " , verval"
|
|
+ " , ins_alg_ruimte_key_org"
|
|
+ " , res_ruimte_opstel_default"
|
|
+ " , resgroup.res_activiteit_omschrijving"
|
|
+ " , resgroup.res_activiteit_meteindtijd"
|
|
+ " , res_rsv_ruimte_afgerond"
|
|
+ " , res_rsv_ruimte_cat_appr"
|
|
+ " , res_rsv_artikel_approved"
|
|
+ " , CASE categorie"
|
|
+ " WHEN 'V' THEN " + safe.quoted_sql(L("lcl_reserved_object"))
|
|
+ " WHEN 'C' THEN " + safe.quoted_sql(L("lcl_reserved_object"))
|
|
+ " WHEN 'CV' THEN " + safe.quoted_sql(L("lcl_reserved_object"))
|
|
+ " ELSE res_voorziening"
|
|
+ " END res_voorziening"
|
|
+ (frontend || fronto
|
|
? " , approval"
|
|
+ " , approved_status"
|
|
+ " , res_rsv_ruimte_verwijder"
|
|
+ " , waar"
|
|
+ " , dirtlevel"
|
|
+ " , res_reservering_ispool"
|
|
+ " , res_status_fo_key"
|
|
: "")
|
|
+ " FROM ("
|
|
+ sql
|
|
+ " ) resgroup"
|
|
}
|
|
|
|
var res_keyColumn = ""
|
|
var res_columns = new Array();
|
|
|
|
// Deprecated: overal waar verderop 'new columnData' wordt gebruikt kan ook/beter de
|
|
// 'new Column' gebruikt worden. Dan heb je namelijk alle properties tot
|
|
// je beschikking. Voor het gemak even backwards compatible.
|
|
function columnData(caption, content, datatype, total, decimals)
|
|
{
|
|
return new Column({caption: caption, content: content, datatype: datatype, total: total, decimals: decimals});
|
|
}
|
|
|
|
select_oordeel = ", SUM(res.res_rsv_ruimte_satisfaction) sum_satisfaction"
|
|
+ ", COUNT(res.res_rsv_ruimte_satisfaction) cnt_satisfaction"
|
|
+ ", AVG(res.res_rsv_ruimte_satisfaction) oordeel"
|
|
+ ", MAX(res_rsv_ruimte_satisfaction_op) oordeel_opm";
|
|
|
|
if (groupres == 6)
|
|
{ // locatie
|
|
res_keyColumn = "alg_locatie_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_location"), "locatie")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = "SELECT l.alg_locatie_key " + res_keyColumn
|
|
+ " , l.alg_locatie_omschrijving locatie"
|
|
+ " , COUNT(distinct res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " , alg_locatie l "
|
|
+ " WHERE res.alg_locatie_key = l.alg_locatie_key"
|
|
+ " GROUP BY l.alg_locatie_key"
|
|
+ " , l.alg_locatie_omschrijving";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 10)
|
|
{ // gebouw
|
|
res_keyColumn = "alg_gebouw_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_building"), "gebouw")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = " SELECT g.alg_gebouw_key " + res_keyColumn
|
|
+ " , l.alg_locatie_code || '-' || g.alg_gebouw_naam gebouw"
|
|
+ " , COUNT(distinct res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " , alg_locatie l"
|
|
+ " , alg_gebouw g"
|
|
+ " WHERE res.alg_gebouw_key = g.alg_gebouw_key"
|
|
+ " AND g.alg_locatie_key = l.alg_locatie_key"
|
|
+ " GROUP BY g.alg_gebouw_key"
|
|
+ " , l.alg_locatie_code || '-' || g.alg_gebouw_naam";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 11)
|
|
{ // activiteit
|
|
res_keyColumn = "res_activiteit_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_activity"), "activiteit")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = " SELECT a.res_activiteit_key " + res_keyColumn
|
|
+ " , " + lcl.xsql('a.res_activiteit_omschrijving', 'a.res_activiteit_key') + " activiteit"
|
|
+ " , COUNT(distinct res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " , res_activiteit a"
|
|
+ " WHERE res.res_activiteit_key = a.res_activiteit_key"
|
|
+ " GROUP BY a.res_activiteit_key"
|
|
+ " , " + lcl.xsql('a.res_activiteit_omschrijving', 'a.res_activiteit_key');
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 12)
|
|
{ // kostensoort
|
|
res_keyColumn = "prs_kostensoort_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_charge_type"), "kostensoort")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = " SELECT COALESCE(res.prs_kostensoort_key, 0) " + res_keyColumn
|
|
+ " , res.prs_kostensoort_oms kostensoort"
|
|
+ " , COUNT(distinct res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " GROUP BY res.prs_kostensoort_key"
|
|
+ " , res.prs_kostensoort_oms";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 13)
|
|
{ // kostensoortgrp
|
|
res_keyColumn = "prs_kostensoortgrp_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_charge_type_group"), "kostensoortgrp")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = " SELECT COALESCE(res.prs_kostensoortgrp_key, 0) " + res_keyColumn
|
|
+ " , " + lcl.xsql('res.prs_kostensoortgrp_oms','res.prs_kostensoortgrp_key') + " kostensoortgrp"
|
|
+ " , COUNT(distinct res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " GROUP BY res.prs_kostensoortgrp_key"
|
|
+ " , res.prs_kostensoortgrp_oms";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 7)
|
|
{ // artikelen
|
|
res_keyColumn = "artikel_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_art_desc"), "artikelomschrijving")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_item_price"), "artikelprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_btw_percentage"), "artikelbtw", "float", false)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_art_nr"), "artikelaantal", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
sql = " SELECT res.artikel_key " + res_keyColumn
|
|
+ " , res.res_voorziening artikelomschrijving"
|
|
+ " , res.stuks_prijs artikelprijs"
|
|
+ " , res.btwtarief artikelbtw"
|
|
+ " , SUM(res.aantal) artikelaantal"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ " FROM (" + sql + ") res"
|
|
+ " WHERE categorie = 'C'"
|
|
+ " GROUP BY artikel_key"
|
|
+ " , res_voorziening"
|
|
+ " , stuks_prijs"
|
|
+ " , btwtarief";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 8)
|
|
{ // artikelnummer
|
|
res_keyColumn = "artikel_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_art_number"), "artikel")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_art_nr"), "artikelaantal", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
sql = " SELECT res.artikel_key " + res_keyColumn
|
|
+ " , res.artikelnummer || ' - ' ||"
|
|
+ " (SELECT MIN(" + lcl.xsql("res_artikel_omschrijving", "res_artikel_key") + ")"
|
|
+ " FROM res_v_aanwezigartikel"
|
|
+ " WHERE res_artikel_nr = res.artikelnummer)"
|
|
+ " || ' ' ||"
|
|
+ " CASE (SELECT COUNT(" + lcl.xsql("res_artikel_omschrijving", "res_artikel_key") + ") FROM res_v_aanwezigartikel WHERE res_artikel_nr = res.artikelnummer)"
|
|
+ " WHEN 1"
|
|
+ " THEN ''"
|
|
+ " ELSE '...'"
|
|
+ " END artikel"
|
|
+ " , SUM(res.aantal) artikelaantal"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ " FROM (" + sql + ") res"
|
|
+ " WHERE categorie = 'C'"
|
|
+ " GROUP BY artikel_key"
|
|
+ " , artikelnummer";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 15)
|
|
{ // catalogus
|
|
res_keyColumn = "discipline_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_catalogus"), "catalogusomschrijving")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_art_nr"), "artikelaantal", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
sql = " SELECT res.res_ins_discipline_key " + res_keyColumn
|
|
+ " , res.res_voorziening catalogusomschrijving"
|
|
+ " , SUM(res.aantal) artikelaantal"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ " FROM (" + sql + ") res"
|
|
+ " WHERE categorie = 'C'"
|
|
+ " GROUP BY res_ins_discipline_key"
|
|
+ " , res_voorziening";
|
|
sql_order = " ORDER BY 1";
|
|
}
|
|
else if (groupres == 9 || groupres == 14)
|
|
{ // kostenplaats
|
|
if (groupres == 9)
|
|
{
|
|
res_keyColumn = "kostenplaats_key";
|
|
}
|
|
else
|
|
{
|
|
res_keyColumn = "prs_afdeling_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_department"), "organisatie")
|
|
}
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_account"), "kostenplaats")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = " SELECT COALESCE(res.kostenplaats_key, 0) kostenplaats_key"
|
|
+ " , res.kostenplaats"
|
|
+ " , res.prs_afdeling_key"
|
|
+ " , res.organisatie"
|
|
+ " , COUNT(DISTINCT res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " GROUP BY kostenplaats_key"
|
|
+ " , kostenplaats"
|
|
+ " , prs_afdeling_key"
|
|
+ " , organisatie";
|
|
sql_order = " ORDER BY organisatie, kostenplaats";
|
|
}
|
|
else if (groupres == 5)
|
|
{ // district
|
|
res_keyColumn = "alg_district_key";
|
|
res_columns[res_columns.length] = new columnData(L("lcl_district"), "district")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_res_nr"), "aantalres", "number", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_total"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_oordeel"), fncolOordeelAvg, "float", true, 1)
|
|
sql = "SELECT d.alg_district_key " + res_keyColumn
|
|
+ " , d.alg_district_omschrijving district"
|
|
+ " , COUNT(distinct res.res_rsv_ruimte_key) aantalres"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ select_oordeel
|
|
+ " FROM (" + sql + ") res"
|
|
+ " , alg_district d"
|
|
+ " WHERE res.alg_district_key = d.alg_district_key"
|
|
+ " GROUP BY d.alg_district_key"
|
|
+ " , d.alg_district_omschrijving";
|
|
sql_order = " ORDER BY 2";
|
|
}
|
|
else if (groupres == 4)
|
|
{ // De default als groepering als niets gekozen
|
|
// minfo reserveringen
|
|
res_keyColumn = "res_reservering_key";
|
|
if (S("res_reservering_flags") > 0)
|
|
res_columns[res_columns.length] = new Column({caption: (outputmode == 0 ? I("fa-fclt-flag0") : L("lcl_res_flags")), content: fncolFlags, align: "center"})
|
|
res_columns[res_columns.length] = new Column( {caption: L("lcl_resnr"), content: "rkey", customSort: fncustomSort})
|
|
res_columns[res_columns.length] = new columnData(L("lcl_location"), "locatie")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_room_n"), "ruimte_aanduiding")
|
|
res_columns[res_columns.length] = new Column( {caption: L("lcl_date"), content: fncolDatum, customSort: fncolDatumSort, datatype: "date", nowrap: true});
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_starttime"), fncolVan, "time")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_endtime"), fncolTot, "time")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_prs_organisatie"), "organisatie")
|
|
if (S("res_allow_for_others"))
|
|
res_columns[res_columns.length] = new columnData(L("lcl_host"), "gastheer")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_account"), "kostenplaats")
|
|
res_columns[res_columns.length] = new columnData(L("lcl_descr"), "omschrijving")
|
|
res_columns.push (new Column({caption: L("lcl_config_instance"), content: fnrowConfiguration, keepKeyRepeat: true}));
|
|
res_columns[res_columns.length] = new columnData(L("lcl_remark"), "opmerking")
|
|
res_columns.push (new Column({caption: L("lcl_res_pers_n"), content: fnrowVisitorsF, datatype: "number", total: true}));
|
|
res_columns.push (new Column({caption: L("lcl_res_no_show"), content: "noshow", datatype: "number"}));
|
|
res_columns[res_columns.length] = new columnData(L("lcl_res_rsv_kosten"), "totaalprijs", "currency", true)
|
|
res_columns[res_columns.length] = new Column( {caption: L("lcl_res_oordeel"), content: fncolOordeel, total: true})
|
|
if (anyflex)
|
|
res_columns[res_columns.length] = new Column( {caption: flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen" });
|
|
if (excel || print)
|
|
res_columns[res_columns.length] = new Column( {caption: L("lcl_fac_like_remark"), content: "oordeel_opm"})
|
|
|
|
sql = "SELECT res_srtactiviteit_prefix || res.res_reservering_key || '/' || res.res_rsv_ruimte_volgnr rkey"
|
|
+ " , res.res_reservering_key " + res_keyColumn
|
|
+ " , res.res_rsv_ruimte_volgnr"
|
|
+ " , res.locatie locatie"
|
|
+ " , res.alg_ruimte_aanduiding ruimte_aanduiding"
|
|
+ " , MIN(res.datumvan) datumvan"
|
|
+ " , MAX(res.datumtot) datumtot"
|
|
+ " , res.organisatie organisatie"
|
|
+ (S("res_allow_for_others")
|
|
? " , res.gastheer gastheer"
|
|
: "")
|
|
+ " , res.kostenplaats kostenplaats"
|
|
+ " , res.omschrijving omschrijving"
|
|
+ " , res.opmerking opmerking"
|
|
+ " , res.res_rsv_ruimte_satisfaction oordeel"
|
|
+ " , res.res_rsv_ruimte_satisfaction_op oordeel_opm"
|
|
+ " , res.res_rsv_ruimte_flag"
|
|
+ " , bezoekers"
|
|
+ " , res.verval"
|
|
+ " , res.res_ruimte_opstel_default"
|
|
+ " , SUM(res.aantal) aantal"
|
|
+ " , res.res_voorziening"
|
|
+ " , MAX(res.noshow) noshow"
|
|
+ " , SUM(res.verwerkt_prijs) totaalprijs"
|
|
+ " , MAX(res.rsv_ruimte_key) rsv_ruimte_key"
|
|
+ " , MAX(res.rsv_ruimte_key) res_rsv_ruimte_key"
|
|
+ " , MAX(res.alg_ruimte_key) alg_ruimte_key"
|
|
+ " , MAX(res.categorie) categorie"
|
|
+ " , MAX(res.res_item_key) res_item_key"
|
|
+ " , MAX(res.res_ruimte_key) res_ruimte_key"
|
|
+ " , res.res_activiteit_meteindtijd"
|
|
+ " , aantal_art_kenm"
|
|
+ " FROM (" + sql + ") res"
|
|
+ " GROUP BY res_srtactiviteit_prefix || res_reservering_key || '/' || res.res_rsv_ruimte_volgnr"
|
|
+ " , res.res_reservering_key"
|
|
+ " , res.res_reservering_key || '/' || res.res_rsv_ruimte_volgnr"
|
|
+ " , res_rsv_ruimte_volgnr"
|
|
+ " , locatie"
|
|
+ " , alg_ruimte_aanduiding"
|
|
+ " , datumvan"
|
|
+ " , organisatie"
|
|
+ (S("res_allow_for_others")
|
|
? " , gastheer"
|
|
: "")
|
|
+ " , kostenplaats"
|
|
+ " , omschrijving"
|
|
+ " , opmerking"
|
|
+ " , res.res_rsv_ruimte_satisfaction"
|
|
+ " , res.res_rsv_ruimte_satisfaction_op"
|
|
+ " , noshow"
|
|
+ " , res_ruimte_key"
|
|
+ " , res_rsv_ruimte_flag"
|
|
+ " , bezoekers"
|
|
+ " , verval"
|
|
+ " , res_ruimte_opstel_default"
|
|
+ " , aantal"
|
|
+ " , res_voorziening"
|
|
+ " , res_activiteit_meteindtijd"
|
|
+ " , aantal_art_kenm";
|
|
sql_order = " ORDER BY res_reservering_key"
|
|
+ " , res_rsv_ruimte_volgnr";
|
|
}
|
|
|
|
// Extra wrapper omdat ADO anders komt met 'Operation not allowed when object is closed'
|
|
// Blijkbaar snapt die de WITH constructie vooraan niet zo
|
|
if ((groupres > 1) && (groupres != 4))
|
|
{
|
|
sql = "SELECT * FROM (" + sql + ") " + sql_order;
|
|
}
|
|
else
|
|
{
|
|
sqltrack = (minfo
|
|
? ", TO_DATE('01-01-1970', 'DD-MM-YYYY')"
|
|
: ", (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 = rsv_ruimte_key" // rsv_ruimte_key voor groupres=4 en <=1
|
|
+ " AND sn.fac_srtnotificatie_xmlnode = 'reservering')")
|
|
+ " recentdatum";
|
|
sqltrack = ", TO_DATE('01-01-1970', 'DD-MM-YYYY') recentdatum";
|
|
|
|
Oracle.Execute("ALTER SESSION SET optimizer_features_enable = '11.2.0.4'"); // FCLT#70539 anders te traag
|
|
Oracle.Execute("ALTER SESSION SET \"_optimizer_use_feedback\" = false"); // FCLT#70539 anders te traag
|
|
sql = "SELECT /*+ CURSOR_SHARING_EXACT */ rec2.*"
|
|
+ (anyflex ? r_anyflex.sql_flex : "")
|
|
+ sqltrack
|
|
+ " FROM (" + sql + ") rec2 " + sql_order;
|
|
}
|
|
|
|
/***** End build sql *****/
|
|
|
|
var count = 0;
|
|
var descr = "";
|
|
var remark = "";
|
|
var total = new Array;
|
|
|
|
|
|
/*****************************************************************
|
|
* Callback functies ResultsetTable for FE, FO, BO and MI
|
|
****************************************************************/
|
|
function isMeerdaags(oRs)
|
|
{
|
|
var datefrom = new Date(oRs("datumvan").value);
|
|
var dateto = new Date(oRs("datumtot").value);
|
|
return (dateto.midnight().getTime() != datefrom.midnight().getTime());
|
|
}
|
|
|
|
function fncolDatum(oRs)
|
|
{
|
|
if (isMeerdaags(oRs))
|
|
return L("lcl_res_multidays");
|
|
else
|
|
return toDateString(new Date(oRs("datumvan").value), excel); // excel-->noDay
|
|
}
|
|
|
|
function fncolDatumSort(oRs)
|
|
{
|
|
if (isMeerdaags(oRs))
|
|
return toDateString(new Date(oRs("datumvan").value), excel); // excel-->noDay
|
|
else
|
|
return null
|
|
}
|
|
|
|
function fncolVan(oRs)
|
|
{
|
|
var datefrom = new Date(oRs("datumvan").value);
|
|
var dt = toTimeString(datefrom);
|
|
if (isMeerdaags(oRs))
|
|
dt += "<br>" + toDateString(datefrom, excel); // excel-->noDay
|
|
return dt;
|
|
}
|
|
|
|
function fncolTot(oRs)
|
|
{
|
|
var met_eindtijd = oRs("res_activiteit_meteindtijd").Value == 1;
|
|
var dateto = new Date(oRs("datumtot").value);
|
|
var dt = toTimeString(dateto);
|
|
if (met_eindtijd)
|
|
{
|
|
if (isMeerdaags(oRs))
|
|
dt += "<br>" + toDateString(dateto, excel); // excel-->noDay
|
|
}
|
|
else
|
|
dt = "";
|
|
return dt;
|
|
}
|
|
|
|
if (frontend || fronto)
|
|
{ // fe or fo without grouping
|
|
/*****************************************************
|
|
* Callback functies ResultsetTable for FE and FO only
|
|
****************************************************/
|
|
|
|
var recent = new Date();
|
|
recent.setMinutes(recent.getMinutes() - S("res_reservering_recent"));
|
|
function fnrowClassF(oRs) // tr-class
|
|
{
|
|
var rowclass = "";
|
|
if (oRs("res_rsv_ruimte_verwijder").Value != null)
|
|
{ // verwijderd
|
|
rowclass = "deleted";
|
|
}
|
|
|
|
if (oRs("verval").Value == 0 || oRs("dirtlevel").Value != 0)
|
|
{ // dirty!
|
|
if (frontend)
|
|
{
|
|
rowclass += " listfatal";
|
|
}
|
|
else
|
|
{
|
|
rowclass += " res_fatal";
|
|
}
|
|
}
|
|
|
|
//var res_recent = new Date(oRs("recentdatum").Value);
|
|
// Ik zou dit liever in de hoofdquery meenemen maar Oracle12 komt daar slecht uit
|
|
// Hier per regel ophalen is netto veel sneller
|
|
var sql = "SELECT MAX(t.fac_tracking_datum) recentdatum"
|
|
+ " FROM fac_tracking t"
|
|
+ " , fac_srtnotificatie sn"
|
|
+ " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
|
|
+ " AND t.fac_tracking_refkey = " + oRs("rsv_ruimte_key").Value
|
|
+ " AND sn.fac_srtnotificatie_xmlnode = 'reservering'";
|
|
var roRs = Oracle.Execute(sql);
|
|
var res_recent = new Date(roRs("recentdatum").Value);
|
|
roRs.Close();
|
|
|
|
if (res_recent > recent)
|
|
{
|
|
rowclass += " updated";
|
|
}
|
|
|
|
|
|
return rowclass;
|
|
}
|
|
|
|
var fsql = "SELECT COUNT(dp.res_ins_discipline_key) aantal"
|
|
+ " FROM res_disc_params dp"
|
|
+ " WHERE dp.res_disc_params_threshold < 9999999";
|
|
var oRs = Oracle.Execute(fsql);
|
|
var hasFiat = oRs("aantal").Value > 0; // Zijn er disciplines waarbij een fiaterings treshold is ingesteld?
|
|
oRs.Close();
|
|
|
|
function fncolFiat(oRs)
|
|
{ // Moet er een hokje met een kleur erin getoond worden? Alleen als er met een drempelwaarde wordt gewerkt voor een discipline en het bedrag boven de drempelwaarde ligt.
|
|
var res_type = oRs("res_type").Value;
|
|
var res_rsv_ruimte_cat_appr = oRs("res_rsv_ruimte_cat_appr").Value;
|
|
if (res_type == "V" ||
|
|
res_rsv_ruimte_cat_appr == 0)
|
|
return "";
|
|
|
|
var ttl;
|
|
var icon;
|
|
var displ = "";
|
|
var resRsvRuimteKey = oRs("rsv_ruimte_key").value; // rsv_ruimte_key
|
|
var approved_status = oRs("approved_status").Value;
|
|
switch (approved_status)
|
|
{
|
|
case 0: ttl = L("lcl_res_ter_fiat");
|
|
icon = "fa-exclamation-circle";
|
|
break;
|
|
case 1: ttl = L("lcl_res_goedgekeurd");
|
|
icon = "fa-check-circle";
|
|
break;
|
|
case 2: ttl = L("lcl_res_afgewezen"); // Deze zal niet voorkomen in de query.
|
|
icon = "fa-times-circle";
|
|
break;
|
|
}
|
|
var fiatimg = "<span id='resfiatimg" + resRsvRuimteKey + "' class='resfiat" + approved_status + "' title='" + safe.htmlattr(ttl) + "'>" + I(icon+" fa-lg", {"fastyle":"fas"}) + "</span>";
|
|
displ = "<div class='resfiatdiv' title='" + safe.htmlattr(ttl) + "'>" + fiatimg + "</div>";
|
|
return displ;
|
|
}
|
|
|
|
function fnrowDataF(oRs)
|
|
{
|
|
var resKey = oRs("res_reservering_key").value; // Reservering key
|
|
var resVolgnr = oRs("res_rsv_ruimte_volgnr").value; // Reservering volgnummer
|
|
var resRsvRuimteKey = oRs("rsv_ruimte_key").value; // rsv_ruimte_key
|
|
|
|
var data = {resKey: resKey, resVolgnr: resVolgnr, resRsvRuimteKey: resRsvRuimteKey};
|
|
|
|
return JSON.stringify(data);
|
|
}
|
|
|
|
function fncolStatus(oRs)
|
|
{
|
|
var foStatKey = oRs("res_status_fo_key").value;
|
|
|
|
if (oRs("dirtlevel").Value != 0 && frontend)
|
|
foStatKey = -1;
|
|
|
|
return res.getfostatustext(foStatKey);
|
|
}
|
|
|
|
function fnHasVZ(oRs)
|
|
{
|
|
if (oRs("nrObjects").value > 0)
|
|
return oRs("nrObjects").value + " " + L("lcl_res_reserved_objects");
|
|
else
|
|
return null;
|
|
}
|
|
|
|
function fncolResNr(oRs)
|
|
{
|
|
var content = (oRs("res_srtactiviteit_prefix").value? oRs("res_srtactiviteit_prefix").value : "") + String(oRs("res_reservering_key").value)
|
|
if (oRs("res_reservering_ispool").Value == 1)
|
|
content = L("lcl_respool_prefix") + content;
|
|
else
|
|
content = content + "/" + oRs("res_rsv_ruimte_volgnr").value;
|
|
return safe.html(content);
|
|
}
|
|
|
|
function fnrowVisitorsF(oRs)
|
|
{
|
|
return (oRs("bezoekers").value != 0? oRs("bezoekers").value : "");
|
|
}
|
|
|
|
function fncolHostRequestor(oRs)
|
|
{
|
|
var requestor = oRs("aanvrager").value
|
|
if (S("res_allow_for_others") && !excel && oRs("gastheer").value == requestor)
|
|
requestor = "";
|
|
return safe.html(requestor);
|
|
}
|
|
|
|
/*********************************************************
|
|
* End callback functies ResultsetTable for FE and FO only
|
|
********************************************************/
|
|
var rsParms = {keyColumn: "rsv_ruimte_key",
|
|
ID: "restable",
|
|
rowClass: fnrowClassF,
|
|
rowData: fnrowDataF,
|
|
sql: sql,
|
|
filterParams: params,
|
|
outputmode: outputmode,
|
|
title: L("lcl_reservation_title"),
|
|
inlineDetails: (groupres == 1? "inlineVoorzieningUrl" : null),
|
|
hasInlineDetails: (groupres == 1? fnHasVZ : null),
|
|
multiActionEnabler: true,
|
|
showAll: showall
|
|
};
|
|
if (fronto)
|
|
{
|
|
rsParms.tabs_code = "res_list-" + urole;
|
|
var buttons2 = [];
|
|
if (mld_key > 0) // zijn de RESFOF-rechten hier al zeker? De add zelf controleert sowieso ook nog.
|
|
buttons2.push({ icon: "fa-plus", title: L("lcl_add"), action: "resAdd("+mld_key+")" });
|
|
if (!compact)
|
|
{
|
|
buttons2.push({ icon: "fa-list-ul", title: L("lcl_mld_legenda"), action: "openLegenda()" });
|
|
buttons2.push({ icon: "fa-columns", title: L("lcl_scf_columns"), action: "openColumns()"});
|
|
}
|
|
if (params.fnStep)
|
|
buttons2.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: params.fnStep + "(0, 0)" });
|
|
|
|
rsParms.buttons = buttons2;
|
|
}
|
|
|
|
var rst = new ResultsetTable(rsParms);
|
|
|
|
// Kolommen
|
|
if (!frontend && S("res_reservering_flags") > 0)
|
|
rst.addColumn(new Column({caption: (outputmode == 0 ? I("fa-fclt-flag0") : L("lcl_res_flags")), content: fncolFlags, colName: "fncolFlags", colText: L("lcl_res_flags"), align: "center"}));
|
|
if (fronto && hasFiat)
|
|
rst.addColumn(new Column({caption: I("fa-circle"), content: fncolFiat, colName: "fncolFlags", colText: L("lcl_res_fiatstatus"), align: "center"}));
|
|
rst.addColumn(new Column({caption: L("lcl_resnr"), content: fncolResNr, colName: "fncolResNr", customSort: fncustomSort }));
|
|
if (frontend || fronto)
|
|
rst.addColumn(new Column({caption: L("lcl_activity"), content: "res_activiteit_omschrijving"}));
|
|
if (restype == "O") // personen altijd onder opdracht
|
|
rst.addColumn(new Column({caption: L("lcl_mld_opdr_number"), content: "waar", hasActions: true}));
|
|
else
|
|
rst.addColumn(new Column({caption: L("lcl_room_n"), content: "waar", hasActions: true}));
|
|
|
|
if (S("mld_print_loc_address") >= 1)
|
|
rst.addColumn(new Column({caption: L("lcl_location_address"), content: "alg_locatie_adres", purpose: PRINTING_ONLY}));
|
|
if (S("mld_print_loc_address") == 2)
|
|
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_descr"), content: "alg_gebouw_omschrijving", purpose: PRINTING_ONLY})); // cannot combine & PRINTING_ONLY
|
|
|
|
// Compacter op scherm als datefrom==dateto
|
|
if (res_key || outputmode != 0 || outputmode == 0 && datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime())
|
|
{
|
|
rst.addColumn(new Column({caption: L("lcl_date"), content: fncolDatum, colName: "fncolDatum", customSort: fncolDatumSort, datatype: "date", nowrap: true}));
|
|
}
|
|
rst.addColumn(new Column({caption: L("lcl_from"), content: fncolVan, colName: "fncolVan", datatype: "time", nowrap: true}));
|
|
rst.addColumn(new Column({caption: L("lcl_to"), content: fncolTot, colName: "fncolTot", datatype: "time"}));
|
|
if (excel)
|
|
{ // Aparte kolommen voor aantal/config en aantal/voorzieningen
|
|
rst.addColumn(new Column({caption: L("lcl_res_opstelling"), content: fnrowOpstelling, colName: "fnrowOpstelling"}));
|
|
if (groupres != 1)
|
|
rst.addColumn(new Column({caption: L("lcl_res_aantalvoorziening"), content: "aantal", datatype: "number"}));
|
|
rst.addColumn(new Column({caption: L("lcl_reserved_object"), content: fnrowObject, colName: "fnrowObject"}));
|
|
}
|
|
else
|
|
rst.addColumn(new Column({caption: L("lcl_config_instance"), content: fnrowConfiguration, colName: "fnrowConfiguration", colText: L("lcl_res_opstelling"), keepKeyRepeat: true}));
|
|
rst.addColumn(new Column({caption: L("lcl_room_status"), content: fncolStatus, colName: "fncolStatus"}));
|
|
if (restype != "O") // personen altijd onder opdracht
|
|
{
|
|
rst.addColumn(new Column({caption: L("lcl_res_pers_n"), content: fnrowVisitorsF, colName: "fnrowVisitorsF", datatype: "number"}));
|
|
if (S("res_allow_for_others"))
|
|
{
|
|
rst.addColumn(new Column({caption: L("lcl_host"), content: "gastheer"}));
|
|
}
|
|
rst.addColumn(new Column({caption: L("lcl_res_requestor"), content: fncolHostRequestor, colName: "fncolHostRequestor", combine: (S("res_allow_for_others")?true:false)}));
|
|
}
|
|
rst.addColumn(new Column({caption: L("lcl_descr"), content: "omschrijving"}));
|
|
if (S("res_approval") > 0)
|
|
rst.addColumn(new Column({caption: L("lcl_res_approval"), content: fncolResApproved, colName: "fncolResApproved"}));
|
|
if (anyflex)
|
|
rst.addColumn(new Column({caption: flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen" }));
|
|
|
|
// Acties
|
|
rst.addAction({ action: "resEdit", caption: L("lcl_edit"), isDefault: true});
|
|
rst.addAction({ action: "resMultiDelete", caption: L("lcl_delete"), single: false, multi: true, multiOnce: true});
|
|
if (frontend && S("res_approval") != 0)
|
|
rst.addAction({ action: "resMultiApprove", caption: L("lcl_res_catgoedkeur"), single: false, multi: true, multiOnce: true});
|
|
|
|
var count = rst.processResultset();
|
|
}
|
|
else if (groupres > 1)
|
|
{ // minfo with grouping
|
|
/*****************************************************************
|
|
* Callback functies ResultsetTable for only MI with grouping
|
|
****************************************************************/
|
|
var recent = new Date();
|
|
recent.setMinutes(recent.getMinutes() - S("res_reservering_recent"));
|
|
function fnrowClassM(oRs) // tr-class
|
|
{
|
|
var class1 = "";
|
|
if (groupres == 4 && !minfo)
|
|
{
|
|
var cnt_recent = new Date(oRs("recentdatum").value);
|
|
// Ik zou dit liever in de hoofdquery meenemen maar Oracle12 komt daar slecht uit
|
|
// Hier per regel ophalen is netto veel sneller
|
|
var sql = "SELECT MAX(t.fac_tracking_datum) recentdatum"
|
|
+ " FROM fac_tracking t"
|
|
+ " , fac_srtnotificatie sn"
|
|
+ " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
|
|
+ " AND t.fac_tracking_refkey = " + oRs("rsv_ruimte_key").Value
|
|
+ " AND sn.fac_srtnotificatie_xmlnode = 'reservering'";
|
|
var roRs = Oracle.Execute(sql);
|
|
var cnt_recent = new Date(roRs("recentdatum").Value);
|
|
|
|
if (cnt_recent > recent)
|
|
{
|
|
class1 += " updated ";
|
|
}
|
|
}
|
|
return class1;
|
|
}
|
|
function fnrowDataM(oRs)
|
|
{
|
|
var data = { resKey : oRs(res_keyColumn).value }; // Reservering key
|
|
if (res_keyColumn == "res_reservering_key")
|
|
{
|
|
data.resVolgnr = oRs("res_rsv_ruimte_volgnr").value; // Reservering volgnummer
|
|
data.resRsvRuimteKey = oRs("rsv_ruimte_key").value; // rsv_ruimte_key
|
|
}
|
|
|
|
return JSON.stringify(data);
|
|
}
|
|
|
|
function fncolDistrict(oRs)
|
|
{
|
|
var content = oRs("locatie").Value;
|
|
return content;
|
|
}
|
|
|
|
var tot_aantal_art = 0;
|
|
var tot_aantal_res = 0;
|
|
var tot_artikelprijs = 0;
|
|
var tot_totaalprijs = 0;
|
|
var sum_satisfaction = 0;
|
|
var cnt_satisfaction = 0;
|
|
var aantal_oordeel = 0;
|
|
function fntotalCalc(oRs)
|
|
{
|
|
if (groupres == 4 && (oRs("oordeel").Value))
|
|
{ // Totaal oordeel is alle cijfers opgeteld gedeeld door het aantal beoordelingen.
|
|
sum_satisfaction += oRs("oordeel").Value;
|
|
aantal_oordeel++;
|
|
}
|
|
if (groupres != 4 && groupres != 7 && groupres != 8 && groupres != 15)
|
|
{
|
|
tot_aantal_res += parseInt(oRs("aantalres").Value, 10);
|
|
|
|
// Totaal oordeel is alle cijfers opgeteld gedeeld door het aantal beoordelingen.
|
|
sum_satisfaction += oRs("sum_satisfaction").Value;
|
|
cnt_satisfaction += oRs("cnt_satisfaction").Value;
|
|
}
|
|
if (groupres == 7 || groupres == 8 || groupres == 15)
|
|
{
|
|
tot_aantal_art += parseInt(oRs("artikelaantal").Value, 10);
|
|
if (groupres == 7)
|
|
{
|
|
tot_artikelprijs += parseFloat((oRs("artikelprijs").Value? oRs("artikelprijs").Value : 0), 10);
|
|
}
|
|
}
|
|
tot_totaalprijs += oRs("totaalprijs").Value;
|
|
}
|
|
|
|
function fntotalShow(column, nrlines)
|
|
{
|
|
function doOordeel(cnt_satisfaction, sum_satisfaction)
|
|
{
|
|
var result = cnt_satisfaction > 0? sum_satisfaction/cnt_satisfaction : 0;
|
|
if (excel || print)
|
|
result = (result!=0? safe.displayfloat(sum_satisfaction/cnt_satisfaction, 1) : "");
|
|
else
|
|
result = rater(result, {readonly: true});
|
|
return result;
|
|
}
|
|
|
|
var result = "";
|
|
switch (column.caption)
|
|
{
|
|
case L("lcl_res_art_nr") : result = tot_aantal_art; break;
|
|
case L("lcl_res_res_nr") : result = tot_aantal_res; break;
|
|
case L("lcl_res_oordeel") : if (groupres == 4)
|
|
result = aantal_oordeel > 0? doOordeel(aantal_oordeel, sum_satisfaction) : "";
|
|
else
|
|
result = cnt_satisfaction > 0? doOordeel(cnt_satisfaction, sum_satisfaction) : "";
|
|
break;
|
|
case L("lcl_res_item_price"): result = safe.curr(tot_artikelprijs); break;
|
|
case L("lcl_res_rsv_kosten"):
|
|
case L("lcl_total") : result = safe.curr(tot_totaalprijs); break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/*********************************************************************
|
|
* End callback functies ResultsetTable for only MI with grouping
|
|
********************************************************************/
|
|
var rsParms = { keyColumn: res_keyColumn,
|
|
ID: "restable",
|
|
rowClass: fnrowClassM,
|
|
rowData: fnrowDataM,
|
|
sql: sql,
|
|
filterParams: params,
|
|
outputmode: outputmode,
|
|
title: L("lcl_reservation_title"),
|
|
showAll: showall,
|
|
totalCalc: fntotalCalc,
|
|
totalShow: fntotalShow
|
|
};
|
|
|
|
// with no grouping or group "reservation", ask for additional characteristics when output is to excel
|
|
if (groupres == 4 || groupres == 1)
|
|
{
|
|
rsParms.flexModule = "RES";
|
|
rsParms.flexId = "rsv_ruimte_key";
|
|
}
|
|
var rst = new ResultsetTable(rsParms);
|
|
|
|
// Kolommen
|
|
for (var i = 0; i < res_columns.length; i++)
|
|
{
|
|
rst.addColumn(res_columns[i]);
|
|
}
|
|
|
|
// Acties
|
|
if (groupres == 4) {
|
|
rst.addAction({action: "resEdit", caption: L("lcl_edit"), isDefault: true});
|
|
}
|
|
|
|
var count = rst.processResultset();
|
|
|
|
}
|
|
else
|
|
{ // (BO: grouping and no grouping)
|
|
/***********************************************************************
|
|
* Callback functies ResultsetTable for only BO grouping and no grouping
|
|
**********************************************************************/
|
|
var recent = new Date();
|
|
recent.setMinutes(recent.getMinutes() - S("res_reservering_recent"));
|
|
|
|
function fnrowClassB(oRs) // tr-class
|
|
{
|
|
// resR of resC of resV
|
|
var class1 = "res" + oRs("res_type").value + (oRs("ingang").value == 0 || oRs("verval").value == 0? " res_fatal " : "");
|
|
|
|
//var cnt_recent = new Date(oRs("recentdatum").value);
|
|
// Ik zou dit liever in de hoofdquery meenemen maar Oracle12 komt daar slecht uit
|
|
// Hier per regel ophalen is netto veel sneller
|
|
var sql = "SELECT MAX(t.fac_tracking_datum) recentdatum"
|
|
+ " FROM fac_tracking t"
|
|
+ " , fac_srtnotificatie sn"
|
|
+ " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
|
|
+ " AND t.fac_tracking_refkey = " + oRs("rsv_ruimte_key").Value
|
|
+ " AND sn.fac_srtnotificatie_xmlnode = 'reservering'";
|
|
var roRs = Oracle.Execute(sql);
|
|
var cnt_recent = new Date(roRs("recentdatum").Value);
|
|
roRs.Close();
|
|
|
|
if (cnt_recent > recent)
|
|
{
|
|
class1 += " updated ";
|
|
}
|
|
|
|
var datenow = new Date();
|
|
var datefrom = new Date(oRs("datumvan").Value);
|
|
var dateto = new Date(oRs("datumtot").Value);
|
|
if (datenow < datefrom)
|
|
class1 += " resfuture ";
|
|
else if (datenow > dateto)
|
|
class1 += " respast ";
|
|
else
|
|
class1 += " resactive ";
|
|
|
|
class1 += (oRs("res_status_bo_key").Value >= 5 ? " resafgemeld " : " resnietafgemeld ");
|
|
return class1;
|
|
}
|
|
|
|
function fnrowData(oRs)
|
|
{
|
|
var resKey = oRs("res_reservering_key").value; // Reservering key
|
|
var resVolgnr = oRs("res_rsv_ruimte_volgnr").value; // Reservering volgnummer
|
|
var resRsvRuimteKey = oRs("rsv_ruimte_key").value; // rsv_ruimte_key
|
|
var resPartkey = oRs("res_item_key").value; // rsv_ruimte_key, rsv_deel_key of rsv_artikel_key
|
|
var resPartType = oRs("categorie").value; // reserveringstype ('C', 'V', 'R')
|
|
|
|
var resVanDatumMidnight = new Date(oRs("datumvan").value).midnight(); // rsv_ruimte_van datum om middernacht
|
|
var now = new Date();
|
|
var resFuture = (resVanDatumMidnight > now? 1 : 0)
|
|
|
|
var data = {resKey: resKey, resVolgnr: resVolgnr, resRsvRuimteKey: resRsvRuimteKey,
|
|
resPartkey: resPartkey, resPartType: resPartType, resFuture: resFuture,
|
|
res_rsv_deel_key: resPartkey};
|
|
|
|
return JSON.stringify(data);
|
|
}
|
|
|
|
function fnrowActionEnabler(oRs)
|
|
{
|
|
var data = { eEdit : true, // Altijd aanwezig
|
|
eClose : false,
|
|
eNoShow : false,
|
|
eLendOut: false,
|
|
eReceive: false,
|
|
eAdapt: false
|
|
}
|
|
|
|
var besStatusBO = oRs("res_status_bo_key").value;
|
|
if (oRs("res_status_bo_key").value < S("res_bo_status_key"))
|
|
{ // Als de catering nog niet is goedgekeurd of afgewezen kan de reservering nog niet worden afgemeld.
|
|
var res_type = oRs("categorie").Value;
|
|
var res_rsv_ruimte_cat_appr = oRs("res_rsv_ruimte_cat_appr").Value;
|
|
var approved_status = oRs("res_rsv_artikel_approved").Value;
|
|
var firstFiat = res_rsv_ruimte_cat_appr == 1 && approved_status == 0;
|
|
|
|
data.eClose = !firstFiat;
|
|
// Voor noshow-optie wordt ivm performance globaal gekeken of het mag. De feitelijke
|
|
// actie controleert definitief en verfijnder
|
|
data.eNoShow = true;
|
|
}
|
|
if (groupres != 1 && oRs("ins_srtdeel_uitleenbaar").Value == 1)
|
|
{
|
|
// TODO: We negeren de 3D scope vooralsnog. Veel te ingewikkeld met org-velden en dergelijke
|
|
// Eerst maar even parktijkgeluiden afwachten
|
|
// user.checkAutorisation cache't per discipline dus dat is te overzien.
|
|
// LET OP: Hier dus de ins_discipline_key, niet de res_ins_discipline_key
|
|
var authparams = user.checkAutorisation("WEB_INSFOF", true, oRs("ins_discipline_key").Value);
|
|
if (authparams && authparams.PRSwritelevel < 9)
|
|
{
|
|
data.eLendOut = oRs("ins_alg_ruimte_key_org").value == null;
|
|
data.eReceive = !data.eLendOut;
|
|
data.eAdapt = data.eReceive;
|
|
}
|
|
}
|
|
return data;
|
|
}
|
|
|
|
function fncolCompleteRes(oRs)
|
|
{
|
|
var content = "<div id='afm" + oRs("keycolumn").value + "'></div>";
|
|
if (oRs("res_status_bo_key").Value >= 5)
|
|
{
|
|
if (!excel)
|
|
content = I("fa-check-square") + "<div style='display:none'>"+oRs("res_status_bo_key").Value+"</div>";
|
|
else
|
|
content = L("lcl_Yes");
|
|
}
|
|
return content;
|
|
}
|
|
|
|
function fnrowResNr(oRs)
|
|
{
|
|
return safe.html(oRs("res_srtactiviteit_prefix").value? oRs("res_srtactiviteit_prefix").value : "") + String(oRs("res_reservering_key").value) + "/" + oRs("res_rsv_ruimte_volgnr").value;
|
|
}
|
|
|
|
function fnrowVisitors(oRs)
|
|
{
|
|
var bezoekers_shown = oRs("bezoekers_shown").value;
|
|
return (oRs("bezoekers").value && oRs("bezoekers").value != 0? (bezoekers_shown >= 0? bezoekers_shown + "/" : "") + oRs("bezoekers").value : "");
|
|
}
|
|
|
|
function fnrowOpstelling(oRs)
|
|
{
|
|
return ((oRs('categorie').value == 'R')? safe.html(oRs("res_voorziening").value) : "");
|
|
}
|
|
|
|
function getFlexArticle(poRs)
|
|
{ // Artikel kenmerk ophalen.
|
|
var sqlFlex = "";
|
|
var flexData = [];
|
|
var flex = "";
|
|
if ((groupres == -1 || groupres == 4) && poRs("aantal_art_kenm").Value > 0)
|
|
{
|
|
sqlFlex = getSqlFlex("RESA", poRs("res_item_key").Value, true);
|
|
flexData = getFlexData(sqlFlex, poRs("res_item_key").Value, { showProperties: true, onlyWithValue: true }); // Alleen flexkenmerken met een waarde ophalen.
|
|
if (flexData.length && !excel)
|
|
flex = "<div class='resartflexlist'>";
|
|
for (var i = 0; i < flexData.length; i++)
|
|
{
|
|
flex += (i || excel? "<br>" : "") // Met <br> krijg je een nieuwe rij in excel.
|
|
+ (!excel? "<span>" : "")
|
|
+ safe.html(flexData[i].header)
|
|
+ ": " + safe.html(flexData[i].value) + (!excel? "</span>" : "");
|
|
}
|
|
if (flexData.length && !excel)
|
|
flex += "</div>";
|
|
}
|
|
|
|
return flex;
|
|
}
|
|
|
|
function fnrowObject(oRs)
|
|
{ // Excel.
|
|
var c_flex = getFlexArticle(oRs);
|
|
return ((oRs("categorie").value != "R")? safe.html(oRs("res_voorziening").value) + c_flex : "");
|
|
}
|
|
|
|
function fnrowConfiguration(oRs)
|
|
{ // Print.
|
|
var isDefault = true;
|
|
if (oRs("categorie").Value == 'R')
|
|
{
|
|
isDefault = (oRs("res_ruimte_opstel_default").Value == "1");
|
|
}
|
|
if (groupres == 1)
|
|
{
|
|
if (oRs("categorie").Value == 'R')
|
|
{
|
|
// TODO: ik wil hier een span class toevoegen om afwijking van de
|
|
// defaultopstelling te markeren. Ik vind het echter nu nogal ondoorzichtig
|
|
// waar die kolomwaarde vandaan zou moeten komen.
|
|
c_inst = oRs("res_voorziening").Value;
|
|
}
|
|
else
|
|
{
|
|
c_inst = L("lcl_reserved_object");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (oRs("aantal").Value == null)
|
|
{
|
|
c_inst = oRs("res_voorziening").Value;
|
|
}
|
|
else
|
|
{
|
|
c_inst = oRs("aantal").Value + " * " + oRs("res_voorziening").Value;
|
|
}
|
|
}
|
|
|
|
var c_flex = getFlexArticle(oRs);
|
|
|
|
if (!isDefault)
|
|
{
|
|
return "<span class='afwijkopstel'>" + safe.html(c_inst) + c_flex + "</span>";
|
|
}
|
|
else
|
|
{
|
|
return safe.html(c_inst) + c_flex;
|
|
}
|
|
}
|
|
|
|
function fncolResApproved(oRs)
|
|
{
|
|
var approved_txt = "";
|
|
if (oRs("res_rsv_ruimte_afgerond").Value == 1)
|
|
{
|
|
approved_txt = L("lcl_res_resappr");
|
|
}
|
|
else
|
|
{
|
|
if (frontend)
|
|
{
|
|
if (oRs("approval").Value == 1)
|
|
approved_txt = L("lcl_res_tobeapproved");
|
|
//else 'nog niet goed te keuren'
|
|
}
|
|
else
|
|
approved_txt = L("lcl_res_notapproved");
|
|
}
|
|
return approved_txt;
|
|
}
|
|
|
|
function fncolFlexBijlagen(oRs)
|
|
{
|
|
var flexval = oRs("flex").Value;
|
|
var bijlagen_aantal = 0;
|
|
if (bijlageflex)
|
|
{
|
|
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
|
|
var bijlagen_oms = "";
|
|
var bijlagen_lijst = [];
|
|
|
|
var sql = "SELECT k.res_kenmerk_key"
|
|
+ " , skr.res_srtkenmerk_omschrijving" // suspect
|
|
+ " , CASE"
|
|
+ " WHEN BITAND(skr.res_srtkenmerk_systeem,2) = 2"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END in_overzicht_tonen"
|
|
+ " FROM res_rsv_ruimte rrr"
|
|
+ " , res_srtkenmerk skr"
|
|
+ " , res_kenmerk k"
|
|
+ " WHERE rrr.res_activiteit_key = k.res_activiteit_key"
|
|
+ " AND k.res_srtkenmerk_key = skr.res_srtkenmerk_key"
|
|
+ " AND skr.res_srtkenmerk_kenmerktype = 'M'"
|
|
+ " AND k.res_kenmerk_verwijder IS NULL"
|
|
+ " AND skr.res_srtkenmerk_verwijder IS NULL"
|
|
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
|
|
var oRs_k = Oracle.Execute(sql);
|
|
|
|
while (!oRs_k.eof)
|
|
{
|
|
if (oRs_k("in_overzicht_tonen").Value == 1)
|
|
{
|
|
var kenmerk_key = oRs_k("res_kenmerk_key").Value;
|
|
var bijlagen_oms = oRs_k("res_srtkenmerk_omschrijving").Value; // suspect
|
|
var bestanden = flexProps("RES", rsv_ruimte_key, kenmerk_key, "M", {getFiles: true});
|
|
var km_aantal = bestanden.files.length;
|
|
for (i=0; i<km_aantal; i++)
|
|
{
|
|
bijlagen_lijst.push(bestanden.files[i].name);
|
|
}
|
|
bijlagen_aantal += km_aantal;
|
|
}
|
|
oRs_k.MoveNext();
|
|
}
|
|
|
|
oRs_k.Close();
|
|
}
|
|
return (flexval ? safe.html(flexval.replace(/\r/g, "\n")+ "\n") : "")
|
|
+ (bijlagen_aantal > 0
|
|
? "<span title='" + safe.htmlattr(bijlagen_lijst.join("\n")) + "'>"
|
|
+ safe.html(bijlagen_oms) + ": " + bijlagen_aantal
|
|
+ "</span>"
|
|
: "");
|
|
}
|
|
|
|
var fsql = "SELECT COUNT(dp.res_ins_discipline_key) aantal"
|
|
+ " FROM res_disc_params dp"
|
|
+ " WHERE dp.res_disc_params_threshold < 9999999";
|
|
var oRs = Oracle.Execute(fsql);
|
|
var hasFiat = oRs("aantal").Value > 0; // Zijn er disciplines waarbij een fiaterings treshold is ingesteld?
|
|
oRs.Close();
|
|
|
|
function fncolFiatBO(oRs)
|
|
{ // Moet er een hokje met een kleur erin getoond worden? Alleen als er met een drempelwaarde wordt gewerkt voor een discipline en het bedrag boven de drempelwaarde ligt.
|
|
// Als er nog catering gefiatteerd moet worden, dan wordt ook voor de ruimte en objecten regels een orange blokje getoond.
|
|
var res_rsv_ruimte_cat_appr = oRs("res_rsv_ruimte_cat_appr").Value;
|
|
if (res_rsv_ruimte_cat_appr == 0)
|
|
return "";
|
|
|
|
var ttl;
|
|
var icon;
|
|
var displ = "";
|
|
var resRsvRuimteKey = oRs("rsv_ruimte_key").value; // rsv_ruimte_key
|
|
var approved_status = oRs("res_rsv_artikel_approved").Value;
|
|
switch (approved_status)
|
|
{
|
|
case 0: ttl = L("lcl_res_ter_fiat");
|
|
icon = "fa-exclamation-circle";
|
|
break;
|
|
case 1: ttl = L("lcl_res_goedgekeurd");
|
|
icon = "fa-check-circle";
|
|
break;
|
|
case 2: ttl = L("lcl_res_afgewezen"); // Deze zal niet voorkomen in de query.
|
|
icon = "fa-times-circle";
|
|
break;
|
|
}
|
|
var fiatimg = "<span id='resfiatimg" + resRsvRuimteKey + "' class='resfiat" + approved_status + "' title='" + safe.htmlattr(ttl) + "'>" + I(icon + " fa-lg", {"fastyle" : "fas"}) + "</span>";
|
|
displ = "<div class='resfiatdiv' title='" + safe.htmlattr(ttl) + "'>" + fiatimg + "</div>";
|
|
return displ;
|
|
}
|
|
|
|
/***************************************************************************
|
|
* End callback functies ResultsetTable for only BO grouping and no grouping
|
|
**************************************************************************/
|
|
var buttons = [];
|
|
buttons.push({ icon: "fa-columns", title: L("lcl_scf_columns"), action: "openColumns()"});
|
|
buttons.push({ icon: "fa-list-ul", title: L("lcl_mld_legenda"), action: "openLegenda()" });
|
|
if (params.fnStep)
|
|
buttons.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: params.fnStep + "(0, 0)" });
|
|
|
|
var rst = new ResultsetTable({keyColumn: "keycolumn",
|
|
ID: "restable",
|
|
tabs_code: "res_list-" + urole,
|
|
buttons: buttons,
|
|
rowClass: fnrowClassB,
|
|
rowData: fnrowData,
|
|
rowActionEnabler: fnrowActionEnabler,
|
|
sql: sql,
|
|
flexModule: "RES",
|
|
flexId: "rsv_ruimte_key", // keycolumn is soms res_rsv_deel_key
|
|
flexGroupId: "res_activiteit_key",
|
|
filterParams: params,
|
|
outputmode: outputmode,
|
|
title: L("lcl_reservation_title"),
|
|
inlineDetails: ((backo || minfo) && groupres == 1)? "inlineVoorzieningUrl" : null,
|
|
hasInlineDetails: ((backo || minfo) && groupres == 1)? fnHasVZ : null,
|
|
showAll: showall,
|
|
suppressKeyRepeat: print?"rsv_ruimte_key":null // suppress fields when no key-change
|
|
});
|
|
// Kolommen
|
|
// AAFM#14872/PF: Deze locatiekolom is wat dubbelop. We spreken af dat we die
|
|
// eerst maar eens niet meer tonen. Als er gefundeerde klachten komen is
|
|
// deze snel genoeg combined terug te halen
|
|
//rst.addColumn(new Column({caption: L("lcl_location"), content: "locatie"}));
|
|
rst.addColumn(new Column({caption: (excel?L("lcl_res_resafm"):I("fa-check-square")),
|
|
content: fncolCompleteRes, colName: "fncolCompleteRes", colText: L("lcl_res_resafm") }));
|
|
if (S("res_reservering_flags") > 0)
|
|
rst.addColumn(new Column({caption: "o", content: fncolFlags, colName: "fncolFlags", align: "center"}));
|
|
|
|
if (hasFiat)
|
|
rst.addColumn(new Column({caption: I("fa-circle"), content: fncolFiatBO, colName: "fncolFlags", colText: L("lcl_res_fiatstatus"), align: "center"}));
|
|
|
|
if (S("mld_print_loc_address") >= 1)
|
|
rst.addColumn(new Column({caption: L("lcl_location_address"), content: "alg_locatie_adres", purpose: PRINTING_ONLY}));
|
|
if (S("mld_print_loc_address") == 2)
|
|
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_descr"), content: "alg_gebouw_omschrijving", purpose: PRINTING_ONLY})); // cannot combine & PRINTING_ONLY
|
|
|
|
rst.addColumn(new Column({caption: L("lcl_room_n"), content: "res_ruimte_nr", combine: false, hasActions: true}));
|
|
// Compacter op scherm als datefrom==dateto
|
|
if (res_key || opdr_key > 0 || outputmode != 0 || (outputmode == 0 && datefrom && dateto && datefrom.midnight().getTime() != dateto.midnight().getTime()))
|
|
{ // Compact als begin==eind
|
|
rst.addColumn(new Column({caption: L("lcl_date"), content: fncolDatum, colName: "fncolDatum", customSort: fncolDatumSort, datatype: "date", nowrap: true}));
|
|
}
|
|
rst.addColumn(new Column({caption: L("lcl_res_starttime"), content: fncolVan, colName: "fncolVan", datatype: "time", keepKeyRepeat: true}));
|
|
rst.addColumn(new Column({caption: L("lcl_res_endtime"), content: fncolTot, colName: "fncolTot", datatype: "time"}));
|
|
|
|
rst.addColumn(new Column({caption: L("lcl_resnr"), content: fnrowResNr, colName: "fnrowResNr", customSort: fncustomSort}));
|
|
rst.addColumn(new Column({caption: L("lcl_res_pers_n"), content: fnrowVisitors, colName: "fnrowVisitors"}));
|
|
if (excel)
|
|
{ // Aparte kolommen voor aantal/config en aantal/voorzieningen
|
|
rst.addColumn(new Column({caption: L("lcl_res_opstelling"), content: fnrowOpstelling, colName: "fnrowOpstelling"}));
|
|
if (groupres != 1)
|
|
rst.addColumn(new Column({caption: L("lcl_res_aantalvoorziening"), content: "aantal", datatype: "number"}));
|
|
rst.addColumn(new Column({caption: L("lcl_reserved_object"), content: fnrowObject, colName: "fnrowObject"}));
|
|
}
|
|
else
|
|
rst.addColumn(new Column({caption: L("lcl_config_instance"), content: fnrowConfiguration, colName: "fnrowConfiguration", colText: L("lcl_res_opstelling"), keepKeyRepeat: true}));
|
|
if (S("res_allow_for_others") && S("res_bo_show_host") == 1)
|
|
rst.addColumn(new Column({caption: L("lcl_host"), content: "gastheer"}));
|
|
rst.addColumn(new Column({caption: L("lcl_res_requestor"), content: "aanvrager"}));
|
|
if (S("res_bo_show_telnr") == 1)
|
|
{
|
|
rst.addColumn(new Column({caption: L("lcl_res_requestor_phone"), content: "prs_perslid_telefoonnr"}));
|
|
rst.addColumn(new Column({caption: L("lcl_prs_person_mobile"), content: "prs_perslid_mobiel", combine: true}));
|
|
}
|
|
if (S("res_bo_show_kpn") == 1)
|
|
{
|
|
rst.addColumn(new Column({caption: L("lcl_res_account"), content: "kostenplaats"}));
|
|
}
|
|
if (S('show_ordernr') == 3 && outputmode != 0)
|
|
rst.addColumn(new Column({caption: L("lcl_mld_inf_Ordernr"), content: "res_rsv_ruimte_ordernr" }));
|
|
rst.addColumn(new Column({caption: L("lcl_descr"), content: "omschrijving"}));
|
|
if (hasAnyOpmerkingen)
|
|
rst.addColumn(new Column({caption: L("lcl_remark"), content: "opmerking"}));
|
|
|
|
if (outputmode != 0)
|
|
rst.addColumn(new Column({caption: L("lcl_activity"), content: "res_activiteit_omschrijving"}));
|
|
if (S("res_approval") > 0)
|
|
rst.addColumn(new Column({caption: L("lcl_res_approval"), content: fncolResApproved, colName: "fncolResApproved"}));
|
|
if (anyflex)
|
|
rst.addColumn(new Column({caption: flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen" }));
|
|
|
|
// Acties
|
|
rst.addAction({action: "resEdit", caption: L("lcl_edit"), isDefault: true});
|
|
if (authparams.PRSwritelevel < 9 && authparams.ALGwritelevel < 9) // grove controle
|
|
rst.addAction({action: "resClose", caption: L("lcl_close"), enabler: "eClose", multi: true, multiOnce: true});
|
|
|
|
rst.addAction({ action: "resMultiPrint", caption: L("lcl_print"), single: false, multi: true, multiOnce: true});
|
|
|
|
if (S("res_noshow_detailed") == 1 &&
|
|
authparamsRESNOS &&
|
|
authparamsRESNOS.PRSwritelevel < 9 &&
|
|
authparamsRESNOS.ALGwritelevel < 9)
|
|
{
|
|
rst.addAction({action: "resNoShow", caption: L("lcl_res_no_show"), enabler: "eNoShow"});
|
|
}
|
|
|
|
rst.addAction({ action: "insCheckOut", caption: L("lcl_obj_lend_out"), enabler: "eLendOut"});
|
|
rst.addAction({ action: "insCheckIn", caption: L("lcl_obj_receive"), enabler: "eReceive"});
|
|
// te druk rst.addAction({ action: "insAdapt", caption: L("lcl_ins_adapt"), enabler: "eAdapt"});
|
|
|
|
var count = rst.processResultset();
|
|
}
|
|
|
|
if (!excel && !print)
|
|
{
|
|
%>
|
|
<script type="text/javascript">
|
|
|
|
$(function()
|
|
{
|
|
$(".clickParent").parent().on("click", function(e)
|
|
{
|
|
e.stopPropagation();
|
|
$(this).find("> .clickParent").trigger("click");
|
|
});
|
|
});
|
|
<!-- LEGENDA -->
|
|
function openLegenda()
|
|
{
|
|
var myPosition = "right top+30";
|
|
if (elems.$originalHeaderRow && elems.$originalHeaderRow.length)
|
|
myPosition = "right-15 top+"+(parseInt(elems.$fcltFrameHeader.css("top"))+30);
|
|
params = { width: 250,
|
|
minWidth: 250,
|
|
minHeight: 10,
|
|
resizable: false,
|
|
position: {my: "right top", at: myPosition},
|
|
title: "<%=L("lcl_ins_controle_legenda")%>",
|
|
create: FcltMgr.fnCreateCloseButton("div#legenda")
|
|
};
|
|
$('div#legenda').dialog(params).dialog('open');
|
|
FcltMgr.resized();
|
|
}
|
|
</script>
|
|
<div id="legenda" style="display:none; line-height: 30px;">
|
|
<table id="meldinglegenda">
|
|
<tr class="resR">
|
|
<td title="<%= L("lcl_res_legenda_resr_tt") %>"><%= L("lcl_res_legenda_resr") %></td>
|
|
</tr>
|
|
<tr class="resC">
|
|
<td title="<%= L("lcl_res_legenda_resc_tt") %>"><%= L("lcl_res_legenda_resc") %></td>
|
|
</tr>
|
|
<tr class="resV">
|
|
<td title="<%= L("lcl_res_legenda_resv_tt") %>"><%= L("lcl_res_legenda_resv") %></td>
|
|
</tr>
|
|
<tr class="updated">
|
|
<td title="<%= L("lcl_res_legenda_updated_tt") %>"><%= L("lcl_res_legenda_updated") %></td>
|
|
</tr>
|
|
<tr class="res_fatal">
|
|
<td title="<%= L("lcl_res_legenda_fatal_tt") %>"><%= L("lcl_res_legenda_fatal") %></td>
|
|
</tr>
|
|
<tr class="resactive">
|
|
<td title="<%= L("lcl_res_legenda_active_tt") %>"><%= L("lcl_res_legenda_active") %></td>
|
|
</tr>
|
|
<tr class="respast">
|
|
<td title="<%= L("lcl_res_legenda_past_tt") %>"><%= L("lcl_res_legenda_past") %></td>
|
|
</tr>
|
|
<% // Vlag 0 tonen we niet
|
|
for (var flagkey=1; flagkey < S('res_reservering_flags'); flagkey++)
|
|
{
|
|
%><tr><td>
|
|
<span class="resflag<%=flagkey%>"><%=I("fa-fclt-flag")%></span>
|
|
<%=L("lcl_res_flag"+flagkey)%>
|
|
</td></tr><%
|
|
}
|
|
%>
|
|
</table>
|
|
</div>
|
|
<%
|
|
} // !print && !excel
|
|
%>
|
|
</body>
|
|
</html>
|
|
<%
|
|
}
|
|
%>
|