Files
Facilitor/APPL/API2/model_fac_groeprechten.inc
Erik Groener 0dc77db18e FSN#35338 Bevindingen beheerschermen 2016.1
svn path=/Website/trunk/; revision=29075
2016-04-20 12:24:45 +00:00

323 lines
14 KiB
C++

<% /*
$Revision$
$Id$
File: model_fac_groeprechten.inc
Description: Vanuit CodeCharge gegenereerd model voor fac_groeprechten
Context:
Notes: fac-groeprechten heeft drie 1-op-n relaties: fac_groep,
fac_functie en ins_discipline
We *eisen* dat je altijd minstens 1 van de drie bij een
instantiatie van het model moet meegeven
*/
/* params kan bevatten een groep_key, een disc_key en een functie_key
We ondersteunen de volgende combinatiees:
groep_key functie_key disc_key
- - - Niet ondersteund, te complex
- - X Ja
- X - Ja
- X X Ja
X - - Ja
X - X Niet ondersteund. Als je een groep of disc hebt moet je eerst functie kiezen
X X - Ja
X X X Niet ondersteund (dan krijg je een detail popupje)
*/
function model_fac_groeprechten (params)
{
if (params && (params.groep_key > 0 || params.disc_key > 0 || params.functie_key > 0))
{ /* Oke */ }
else
INTERNAL_ERROR_GROEPRECHTEN; // minstens 1 van de drie moet er zijn
this.table = "fac_groeprechten";
this.primary = "fac_groeprechten_key";
this.records_name = "fac_groeprecht";
this.record_name = "fac_groeprechten";
this.autfunction = "WEB_FACMSU";
this.record_title = L("fac_groeprechten");
this.records_title = L("fac_groeprechten_m");
this.fields = {
"id": {
"dbs": "fac_groeprechten_key",
"label": "Key",
"typ": "key",
"hidden_fld": true,
"required": true,
"filter": "exact",
"seq": "fac_s_fac_groeprechten_key"
},
"fac_groep": {
"dbs": "fac_groep_key",
"label": L("fac_groep"),
"typ": "key",
"hidden_fld": true,
"foreign": {
"tbl": "fac_groep",
"key": "fac_groep_KEY",
"desc": "fac_groep_omschrijving"
}
},
"fac_functie": {
"dbs": "fac_functie_key",
"label": L("fac_functie_key"),
"typ": "key",
"hidden_fld": true,
"foreign": {
"tbl": "fac_functie",
"key": "fac_functie_key",
"desc": "fac_functie_omschrijving"
}
},
"ins_discipline": {
"dbs": "ins_discipline_key",
"label": L("mgt_discipline"),
"typ": "key",
"hidden_fld": true,
"foreign": {
"tbl": "ins_tab_discipline",
"key": "ins_discipline_key",
"desc": "ins_discipline_omschrijving",
"where": "ins_discipline_verwijder IS NULL"
}
},
"prs_level_read": {
"dbs": "fac_gebruiker_prs_level_read",
"label": L("fac_gebruiker_prs_level_read"),
"typ": "number",
"foreign": foreignPRSRechten
},
"prs_level_write": {
"dbs": "fac_gebruiker_prs_level_write",
"label": L("fac_gebruiker_prs_level_write"),
"typ": "number",
"foreign": foreignPRSRechten
},
"alg_level_read": {
"dbs": "fac_gebruiker_alg_level_read",
"label": L("fac_gebruiker_alg_level_read"),
"typ": "number",
"foreign": foreignALGRechten
},
"alg_level_write": {
"dbs": "fac_gebruiker_alg_level_write",
"label": L("fac_gebruiker_alg_level_write"),
"typ": "number",
"foreign": foreignALGRechten
}
};
function fnFunctieDisc(oRs, field, model, sqlfieldname)
{
if (!model.hasdisc)
return "n/a"; // is nooit zichtbaar
var nn_disc = oRs(sqlfieldname).Value;
return model.module + " " + nn_disc + "/" + model.total_disc;
};
function fnGroep(oRs, field, model, sqlfieldname)
{
var nn_grp = oRs(sqlfieldname).Value;
if (nn_grp > 0)
return nn_grp;
return "";
};
function foreignALGRechten(val)
{
switch (val)
{
case -3: return "";
case -2: return L("fac_gebruiker_level_variabel");
default: return api2.splitLOV(buildAlgLevelLOV())[val]
}
}
function foreignPRSRechten(val)
{
switch (val)
{
case -3: return "";
case -2: return L("fac_gebruiker_level_variabel");
default: return api2.splitLOV(buildPrsLevelLOV())[val]
}
}
// Levert -3 op als rechten niet van toepassing zijn op een veld
function fnRechten(oRs, field, model, sqlfieldname)
{
if ("min_level" in model)
var min_level = model.min_level
else
var min_level = oRs("fac_functie_min_level").Value;
if (!(min_level & 2) // Geen schrijfrechten
&& (field.dbs == "fac_gebruiker_prs_level_write" || field.dbs == "fac_gebruiker_alg_level_write")
)
return -3; // N.v.t.
if (!(min_level & 4) && (min_level & 8) // Geen PRS, wel ALG
&& (field.dbs == "fac_gebruiker_prs_level_read" || field.dbs == "fac_gebruiker_prs_level_write")
)
return -3;
if (!(min_level & 8) // Geen ALG rechten
&& (field.dbs == "fac_gebruiker_alg_level_read" || field.dbs == "fac_gebruiker_alg_level_write")
)
return -3;
return oRs(sqlfieldname).Value;
};
if (params.functie_key > 0) // Wat handige info ophalen
{
var sql = "SELECT fac_functie_module"
+ " , fac_functie_discipline"
+ " , fac_functie_min_level"
+ " , (SELECT COUNT(*)"
+ " FROM ins_tab_discipline"
+ " WHERE ins_discipline_verwijder IS NULL"
+ " AND ins_discipline_module = fac_functie_module) nn_disc"
+ " FROM fac_functie"
+ " WHERE fac_functie_key = " + params.functie_key;
var oRs = Oracle.Execute(sql);
this.module = oRs("fac_functie_module").Value;
this.hasdisc = oRs("fac_functie_discipline").Value == 1;
this.min_level = oRs("fac_functie_min_level").Value;
this.total_disc = oRs("nn_disc").Value;
oRs.Close();
if (!(this.min_level & (4 | 8)))
{
this.fields["prs_level_read"].label = L("fac_gebruiker_lezen"); // Generiekere labels
this.fields["prs_level_write"].label = L("fac_gebruiker_schrijven");
}
}
if (params.functie_key > 0 && params.groep_key > 0)
{
this.tablesql = "(SELECT *"
+ " FROM fac_groeprechten"
+ " WHERE fac_functie_key = " + params.functie_key
+ " AND fac_groep_key = " + params.groep_key
+ ") fac_groeprechten";
}
else if (params.functie_key > 0 && params.disc_key > 0)
{
this.tablesql = "(SELECT *"
+ " FROM fac_groeprechten"
+ " WHERE fac_functie_key = " + params.functie_key
+ " AND ins_discipline_key = " + params.disc_key
+ ") fac_groeprechten";
}
else if (params.functie_key > 0)
{
this.tablesql = "(SELECT MIN(fac_groeprechten_key) fac_groeprechten_key,"
+ " fac_groep_key,"
+ " fac_functie_key,"
+ " COUNT(ins_discipline_key) nn_disc,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_read) END fac_gebruiker_prs_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_write) END fac_gebruiker_prs_level_write,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_read) END fac_gebruiker_alg_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_write) END fac_gebruiker_alg_level_write"
+ " FROM fac_groeprechten"
+ " WHERE fac_functie_key = " + params.functie_key
+ " GROUP BY fac_groep_key, fac_functie_key) fac_groeprechten";
this.record_title += " TODO Functie: " + params.functie_key;
this.fields["prs_level_read"].val = fnRechten;
this.fields["prs_level_write"].val = fnRechten;
this.fields["alg_level_read"].val = fnRechten;
this.fields["alg_level_write"].val = fnRechten;
this.fields["ins_discipline"] =
{
"dbs": "nn_disc",
"label": L("mgt_discipline"),
"typ": "varchar",
val: fnFunctieDisc,
"hidden_fld": true
};
}
else if (params.groep_key > 0)
{
this.tablesql = "(SELECT MIN(fac_groeprechten_key) fac_groeprechten_key,"
+ " fac_groep_key,"
+ " g.fac_functie_key,"
+ " f.fac_functie_min_level,"
+ " CASE"
+ " WHEN fac_functie_discipline = 1"
+ " THEN fac_functie_module || ' ' || "
+ " COUNT (g.ins_discipline_key) || '/'"
+ " || (SELECT COUNT ( * )"
+ " FROM ins_tab_discipline ia"
+ " WHERE ins_discipline_verwijder IS NULL"
+ " AND ia.ins_discipline_module = fac_functie_module)"
+ " END nn_disc,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_read) END fac_gebruiker_prs_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_write) END fac_gebruiker_prs_level_write,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_read) END fac_gebruiker_alg_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_write) END fac_gebruiker_alg_level_write"
+ " FROM fac_groeprechten g, fac_functie f"
+ " WHERE fac_groep_key = " + params.groep_key
+ " AND g.fac_functie_key = f.fac_functie_key"
+ " GROUP BY fac_groep_key, g.fac_functie_key, fac_functie_discipline, fac_functie_min_level, fac_functie_module) fac_groeprechten";
this.record_title += " TODO Groep: " + params.groep_key;
this.fields["prs_level_read"].val = fnRechten;
this.fields["prs_level_write"].val = fnRechten;
this.fields["alg_level_read"].val = fnRechten;
this.fields["alg_level_write"].val = fnRechten;
this.fields["ins_discipline"] =
{
"dbs": "nn_disc",
"label": L("mgt_discipline"),
"typ": "varchar",
"hidden_fld": true
};
}
else // moet disc_key wel gevuld zijn
{
this.tablesql = "(SELECT MIN(fac_groeprechten_key) fac_groeprechten_key,"
+ " COUNT(fac_groep_key) nn_groep,"
+ " fac_functie_key,"
+ " ins_discipline_key,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_read) END fac_gebruiker_prs_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_prs_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_prs_level_write) END fac_gebruiker_prs_level_write,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_read) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_read) END fac_gebruiker_alg_level_read,"
+ " CASE WHEN COUNT(DISTINCT fac_gebruiker_alg_level_write) > 1 THEN -2 ELSE MIN(fac_gebruiker_alg_level_write) END fac_gebruiker_alg_level_write"
+ " FROM fac_groeprechten"
+ " WHERE ins_discipline_key = " + params.disc_key
+ " GROUP BY ins_discipline_key, fac_functie_key) fac_groeprechten";
this.record_title += " TODO Disc: " + params.groep_key;
this.fields["prs_level_read"].val = fnRechten;
this.fields["prs_level_write"].val = fnRechten;
this.fields["alg_level_read"].val = fnRechten;
this.fields["alg_level_write"].val = fnRechten;
this.fields["fac_groep"] =
{
"dbs": "nn_groep",
"label": L("fac_groep_m"),
"typ": "number",
val: fnGroep,
"hidden_fld": true
};
}
this.list = {
"columns": [
"id",
"fac_functie",
"fac_groep",
"ins_discipline",
"prs_level_read",
"prs_level_write",
"alg_level_read",
"alg_level_write"
]
};
this.REST_GET = generic_REST_GET(this);
// this.REST_POST = generic_REST_POST(this);
// this.REST_PUT = generic_REST_PUT(this);
// this.REST_DELETE = generic_REST_DELETE(this);
}
%>