319 lines
14 KiB
C++
319 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": "fac_functie"
|
|
},
|
|
"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);
|
|
}
|
|
%> |