Files
Facilitor/APPL/RES/res_flexkenmerk.inc
Koen Reefman 92b241d717 FCLT#84467 Syntax
svn path=/Website/trunk/; revision=69084
2025-05-21 10:16:09 +00:00

244 lines
13 KiB
C++

<% /*
$Revision$
$Id$
File: RES/res_flexkenmerk.inc
Description: Functie die html code genereert voor de presentatie van de flexvelden
Parameters: urole Rol van de gebruiker (frontend, frontoffice, backoffice, management info)
act_key Activiteit
act_change Activiteit is gewijzigd
reado Readonly
advanced Geadvanceerd
reqId Perslid key
defaults { bsn: "12345678", plaats: "Enschede", postcode:"1234AB" } altijd lowercase namen
Context: Functie wordt aangeroepen door
1) res/load_kenmerk.asp
2) res/res_edit_rsv_ruimte.asp die initieel serverside deze html code invoegd.
Note:
*/ %>
<!-- #include file="../Shared/kenmerk_common.inc" -->
<%
function generateFlexKenmerkBlock(params)
{
var urole = params.urole;
var fronto = (urole == "fo");
var backo = (urole == "bo");
var minfo = (urole == "mi");
var frontend = (urole == "fe" || (!fronto && !backo && !minfo));
var disc_key = params.disc_key; // Res discipline key
//var act_key_arr = params.act_key_arr; // Activiteit keys
var act_key_arr = (params.act_key_arr) || []; // Activiteit keys
var act_change = params.act_change; // Activiteit is gewijzigd
var rsv_ruimte_key = params.rsv_ruimte_key; // Rsv ruimte key
var serie = params.serie; // Serie reservering
var reado = params.reado; // Readonly
var readofe = params.readofe;
var advanced = params.advanced; // Geavanceerd
var reqId = params.reqId; // Perslid key (!search && multiMode)
var hasfilter = params.hasfilter? params.hasfilter : null;
var autfunction = "";
switch(urole)
{
case "fe": autfunction = "WEB_RESUSE";
break;
case "fo": autfunction = "WEB_RESFOF";
break;
case "bo": autfunction = "WEB_RESBOF";
break;
case "mi": autfunction = "WEB_RESBAC";
break;
}
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
var authparams = user.checkAutorisation(autfunction);
var disc_key_arr = [];
if (disc_key > 0)
disc_key_arr.push(disc_key);
else
{
var sql = "SELECT DISTINCT ra.res_discipline_key"
+ " FROM res_rsv_artikel rra"
+ " , res_artikel ra"
+ " WHERE rra.res_artikel_key = ra.res_artikel_key"
+ " AND rra.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " UNION " // geen dubbelen nodig
+ "SELECT rd.res_discipline_key"
+ " FROM res_deel rd"
+ " , res_rsv_deel rrd"
+ " WHERE rd.res_deel_key = rrd.res_deel_key"
+ " AND rd.res_discipline_key <> " + S("vis_parking_key") // Een gereserveerde parkeerplaats moet ik niet toevoegen.
+ " AND rrd.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " UNION " // geen dubbelen nodig
+ "SELECT rr.res_discipline_key"
+ " FROM res_ruimte rr"
+ " , res_ruimte_opstelling ro"
+ " , res_rsv_ruimte rrr"
+ " WHERE rr.res_ruimte_key = ro.res_ruimte_key"
+ " AND ro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key"
+ " AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
var oRs = Oracle.Execute(sql);
while (!oRs.eof)
{
// Dicipline toevoegen
disc_key_arr.push(oRs("res_discipline_key").Value);
oRs.MoveNext();
}
oRs.Close();
}
var my_resrechten = user.func_enabled2("RES", {ins_discipline_key: disc_key_arr.join(",")}); // res.func_enabled(rsv_ruimte_key) is overkill?
// Mag ik de kenmerken *niet* wijzigen?
function isReadonly (oRs)
{
// Als meegegeven dan altijd readonly
if (reado) return true;
var rolcode = oRs("kenmerk_rolcode").value;
var canWrite = ( ((rolcode&1) && !readofe)
|| ((rolcode&2) && my_resrechten.canWrite("WEB_RESFOF"))
|| ((rolcode&4) && my_resrechten.canWrite("WEB_RESBOF")));
return !canWrite; // readonly
}
if (act_change)
sql_waarde = " (SELECT MAX(CASE WHEN t.res_srtkenmerk_kenmerktype = 'M'"
+ " THEN NULL"
+ " ELSE v.res_kenmerkreservering_waarde"
+ " END)"
+ " FROM res_kenmerkwaarde v"
+ " , res_kenmerk vk"
+ " WHERE v.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " AND v.res_kenmerk_key = vk.res_kenmerk_key"
+ " AND vk.res_srtkenmerk_key = k.res_srtkenmerk_key"
// Ik kan een flexkenmerk twee keer aanmaken onder een ander groep. Dan is res_srtkenmerk_key niet meer uniek. Daarom goep ook meenemen.
+ " AND vk.res_kenmerk_groep = k.res_kenmerk_groep"
+ " AND vk.res_kenmerk_key = v.res_kenmerk_key"
+ " AND v.res_kenmerkwaarde_verwijder IS NULL)";
else
sql_waarde = " (SELECT MAX(CASE WHEN t.res_srtkenmerk_kenmerktype = 'M'"
+ " THEN NULL"
+ " ELSE v.res_kenmerkreservering_waarde"
+ " END)"
+ " FROM res_kenmerkwaarde v"
+ " WHERE v.res_rsv_ruimte_key = " + rsv_ruimte_key
+ " AND v.res_kenmerk_key = k.res_kenmerk_key" // res_kenmerk_key is uniek
+ " AND v.res_kenmerkwaarde_verwijder IS NULL)";
var myreadrolcode = 0;
// Wat mag ik op basis van mijn autorisatie (potentieel) zien, bepaal mijn rolcode-masker
// Met WEB_RESBAC mag ik alles zien
if (my_resrechten.canRead("WEB_RESBAC")) {
myreadrolcode = 7;
} else {
myreadrolcode = 0 + (my_resrechten.canRead("WEB_RESUSE") ? 1 : 0)
+ (my_resrechten.canRead("WEB_RESFOF") ? 2 : 0)
+ (my_resrechten.canRead("WEB_RESBOF") ? 4 : 0);
}
// Voor *nieuwe* reserveringen negeren we RESBOF nog even.
// Omdat we (meestal) nog geen catalogus/discipline hebben op dit moment zie je anders
// als je maar *ergens* RESBOF voor hebt al te veel kenmerken
if (rsv_ruimte_key < 0 && !params.advanced) // kennelijk niet bij zoeken
myreadrolcode = myreadrolcode - 4;
sql = "SELECT k.res_kenmerk_key kenmerk_key"
+ " , 1 kenmerk_key_count"
+ " , t.res_srtkenmerk_key srtkenmerk_key"
+ " , COALESCE (" + lcl.xsql("k.res_kenmerk_omschrijving", "k.res_kenmerk_key")
+ " , " + lcl.xsql("t.res_srtkenmerk_omschrijving", "t.res_srtkenmerk_key") + ") kenmerk_omschrijving"
+ " , t.res_srtkenmerk_kenmerktype kenmerk_kenmerktype"
+ " , t.fac_kenmerkdomein_key kenmerkdomein_key"
+ " , t.res_srtkenmerk_lengte kenmerk_lengte"
+ " , t.res_srtkenmerk_dec kenmerk_dec"
+ " , t.res_srtkenmerk_nmin kenmerk_nmin"
+ " , t.res_srtkenmerk_nmax kenmerk_nmax"
+ " , t.res_srtkenmerk_systeem kenmerk_systeem"
+ (rsv_ruimte_key > 0 && !serie
? " , " + sql_waarde
: " , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key")
) + " kenmerk_waarde"
+ " , k.res_kenmerk_volgnummer kenmerk_volgnr"
+ " , k.res_kenmerk_rolcode kenmerk_rolcode"
+ " , " + lcl.xsql("t.res_srtkenmerk_dimensie", "t.res_srtkenmerk_key") + " kenmerk_dimensie"
+ " , " + lcl.xsql("k.res_kenmerk_hint", "k.res_kenmerk_key") + " kenmerk_hint"
+ " , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key") + " kenmerk_default"
+ " , k.res_kenmerk_show_expr kenmerk_show_expr"
+ " , k.res_kenmerk_verplicht kenmerk_verplicht"
+ " , k.res_kenmerk_groep kenmerk_groep"
+ " , NULL otherpath"
+ " , k.res_kenmerk_toonbaar kenmerk_toonbaar"
+ " , k.res_kenmerk_uniek kenmerk_uniek"
+ " , k.res_kenmerk_regexp kenmerk_regexp"
+ " , k.fac_functie_key"
+ " FROM res_srtkenmerk t"
+ " , res_kenmerk k"
+ " , res_activiteit s"
+ " WHERE ( k.res_activiteit_key = s.res_activiteit_key"
+ " AND k.res_kenmerk_niveau = 'A')"
+ (act_key_arr.length
? " AND s.res_activiteit_key IN (" + act_key_arr.join(',') + ")"
: "")
+ " AND k.res_kenmerk_verwijder IS NULL"
+ " AND k.res_srtkenmerk_key = t.res_srtkenmerk_key"
+ " AND t.res_srtkenmerk_verwijder IS NULL"
+ " AND BITAND(k.res_kenmerk_rolcode, " + myreadrolcode + ") > 0 "
+ " ORDER BY k.res_kenmerk_volgnummer"
+ " , UPPER( COALESCE (" + lcl.xsql("k.res_kenmerk_omschrijving", "k.res_kenmerk_key")
+ " , " + lcl.xsql("t.res_srtkenmerk_omschrijving", "t.res_srtkenmerk_key") + "))";
if (advanced) // Nog harder de dubbelen er uit filteren. Een kenmerk kan bijvoorbeeld bij verschillende
{ // objectsoorten een ander volgnummer hebben en dat interesseert ons echt niet.
// Kenmerken van dezelfde kenmerksoort kunnen afwijkende labels (benamingen) hebben (FCLT#57667). Daarom niet het MIN nemen van kenmerk_omschrijving.
sql = "SELECT MIN(kenmerk_key) kenmerk_key"
+ " , count(kenmerk_key) kenmerk_key_count"
+ " , srtkenmerk_key"
// + " , MIN(mld_kenmerk_niveau) mld_kenmerk_niveau"
+ " , kenmerk_omschrijving kenmerk_omschrijving"
+ " , MIN(kenmerk_kenmerktype ) kenmerk_kenmerktype"
+ " , MIN(kenmerkdomein_key ) kenmerkdomein_key"
+ " , MIN(kenmerk_lengte ) kenmerk_lengte"
+ " , MIN(kenmerk_dec ) kenmerk_dec"
+ " , MIN(kenmerk_nmin ) kenmerk_nmin"
+ " , MIN(kenmerk_nmax ) kenmerk_nmax"
+ " , MIN(kenmerk_systeem ) kenmerk_systeem"
+ " , MIN(kenmerk_waarde ) kenmerk_waarde"
+ " , MIN(kenmerk_volgnr ) kenmerk_volgnr"
+ " , MIN(kenmerk_rolcode ) kenmerk_rolcode"
+ " , MIN(kenmerk_groep ) kenmerk_groep"
+ " , MIN(kenmerk_dimensie ) kenmerk_dimensie"
+ " , MIN(kenmerk_hint ) kenmerk_hint"
+ " , MIN(kenmerk_default ) kenmerk_default"
+ " , MIN(otherpath ) otherpath"
+ " , MIN(kenmerk_verplicht ) kenmerk_verplicht"
+ " , MIN(kenmerk_toonbaar ) kenmerk_toonbaar"
+ " , MIN(kenmerk_uniek ) kenmerk_uniek"
+ " , MIN(kenmerk_regexp ) kenmerk_regexp"
+ " , MIN(kenmerk_show_expr ) kenmerk_show_expr"
+ " , MIN(fac_functie_key ) fac_functie_key"
+ " FROM (" + sql + ")"
+ " GROUP BY srtkenmerk_key"
+ " , kenmerk_omschrijving";
}
listKenmerk(sql,
"RES",
rsv_ruimte_key,
{
kenmerk_search: advanced,
defaults: params.defaults,
fnIsReadonly: isReadonly,
prs_key: reqId, // reqId is the old prs_key
reado: reado,
mobile: params.mobile,
hideVervallen: rsv_ruimte_key<0,
parentKey: rsv_ruimte_key,
hasfilter: hasfilter
}
);
} %>