290 lines
10 KiB
PHP
290 lines
10 KiB
PHP
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: model_persons.inc
|
|
|
|
Description: Perslid model.
|
|
Parameters:
|
|
Context:
|
|
|
|
- Notes: - Standaard voegen we de gegevens van de hoofdwerkplek toe
|
|
- Ooit doen we er nog een include bij van alle werkplekken.
|
|
|
|
TODO: autorisatie op met name de GET
|
|
*/
|
|
|
|
%>
|
|
<!-- #include file="../Shared/discxalg3d.inc"-->
|
|
<!-- #include file="../api2/model_custom_fields.inc"-->
|
|
<!-- #include file="../api2/model_fac_tracking.inc"-->
|
|
<!-- #include file="../api2/model_fac_gebruikersgroep.inc" -->
|
|
<%
|
|
|
|
function fnApiToken(oRs, field, model)
|
|
{
|
|
var hmac = protectHMAC.create(oRs("prs_perslid_oslogin").Value, { sleutel: oRs("prs_perslid_apikey").Value });
|
|
return hmac;
|
|
}
|
|
|
|
function genderLOV()
|
|
{
|
|
var s = ";" + L("lcl_prs_person_geslachtO")
|
|
+ ";0;" + L("lcl_prs_person_geslachtV")
|
|
+ ";1;" + L("lcl_prs_person_geslachtM");
|
|
return s;
|
|
}
|
|
|
|
function model_prs_perslid(params)
|
|
{
|
|
params = params || {};
|
|
this.records_name = "persons";
|
|
this.record_name = "person";
|
|
this.table = "prs_perslid";
|
|
this.audit = { // Parameters voor fac_audit.
|
|
"childtable": "fac_gebruikersgroep",
|
|
"childaudit": {"sql": "SELECT fac_audit_tabelkey"
|
|
+ " FROM fac_audit"
|
|
+ " WHERE fac_audit_tabelnaam = 'fac_gebruikersgroep'"
|
|
+ " AND fac_audit_waarde_oud IN ({0})",
|
|
"key": "fac_audit_tabelkey",
|
|
"sqlget": "SELECT TO_NUMBER (x.fac_audit_waarde_oud)"
|
|
+ " FROM fac_audit x"
|
|
+ " WHERE x.fac_audit_veldnaam = 'prs_perslid_key'"
|
|
+ " AND fac_audit_tabelnaam = 'fac_gebruikersgroep'"
|
|
+ " AND x.fac_audit_tabelkey = {0}"
|
|
}
|
|
};
|
|
this.softdelete = true;
|
|
this.primary = "prs_perslid_key";
|
|
this.record_title = L("prs_perslid");
|
|
this.records_title = L("prs_perslid_m");
|
|
this.autfunction = false; // we controleren zelf
|
|
|
|
this.fields = {
|
|
"id": {
|
|
"dbs": "prs_perslid_key",
|
|
"label": L("lcl_key"),
|
|
"typ": "key",
|
|
"seq": "prs_s_prs_alluitvoerende_keys"
|
|
},
|
|
"name": {
|
|
"dbs": "pf.prs_perslid_naam_friendly",
|
|
"dbsa": "(SELECT pf.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = x.prs_perslid_key)",
|
|
"label": L("lcl_prs_person_name"),
|
|
" typ": "varchar"
|
|
},
|
|
"lastname": {
|
|
"dbs": "prs_perslid_naam",
|
|
"label": L("lcl_prs_person_achternaam"),
|
|
"typ": "varchar",
|
|
"filter": "like"
|
|
},
|
|
"firstname": {
|
|
"dbs": "prs_perslid_voornaam",
|
|
"label": L("lcl_prs_person_voornaam"),
|
|
"typ": "varchar",
|
|
"filter": "like"
|
|
},
|
|
"title": {
|
|
"dbs": "prs_perslid_titel",
|
|
"label": L("lcl_prs_person_title"),
|
|
"typ": "varchar"
|
|
},
|
|
"initials": {
|
|
"dbs": "prs_perslid_voorletters",
|
|
"label": L("lcl_prs_person_initials"),
|
|
"typ": "varchar"
|
|
},
|
|
"prefix": {
|
|
"dbs": "prs_perslid_tussenvoegsel",
|
|
"label": L("lcl_prs_person_tussen"),
|
|
"typ": "varchar"
|
|
},
|
|
"gender": {
|
|
"dbs": "prs_perslid_geslacht",
|
|
"label": L("lcl_prs_person_geslacht"),
|
|
"typ": "varchar",
|
|
"LOV": genderLOV()
|
|
},
|
|
"language": {
|
|
"dbs": "prs_perslid_lang",
|
|
"label": L("lcl_lcl_taal"),
|
|
"typ": "varchar"
|
|
},
|
|
"phone": {
|
|
"dbs": "prs_perslid_telefoonnr",
|
|
"label": L("lcl_prs_person_phone"),
|
|
"typ": "varchar"
|
|
},
|
|
"mobile": {
|
|
"dbs": "prs_perslid_mobiel",
|
|
"label": L("lcl_prs_person_mobile"),
|
|
"typ": "varchar"
|
|
},
|
|
"email": {
|
|
"dbs": "prs_perslid_email",
|
|
"label": L("lcl_prs_person_email"),
|
|
"typ": "varchar",
|
|
"filter": "exact"
|
|
},
|
|
"login": {
|
|
"dbs": "prs_perslid_oslogin",
|
|
"label": L("lcl_prs_person_login"),
|
|
"typ": "varchar",
|
|
"filter": "like"
|
|
},
|
|
"employment": {
|
|
"dbs": "prs_perslid_dienstverband",
|
|
"label": L("lcl_prs_person_dienstverband"),
|
|
"typ": "float"
|
|
},
|
|
"startdate": {
|
|
"dbs": "prs_perslid_ingangsdatum",
|
|
"label": L("lcl_prs_person_ingangsdatum"),
|
|
"typ": "date"
|
|
},
|
|
"enddate": {
|
|
"dbs": "prs_perslid_einddatum",
|
|
"label": L("lcl_prs_person_einddatum"),
|
|
"typ": "date"
|
|
},
|
|
"function": {
|
|
"dbs": "prs_srtperslid_key",
|
|
"label": L("lcl_prs_person_function"),
|
|
"typ": "key",
|
|
"foreign": {
|
|
"tbl": "prs_srtperslid",
|
|
"key": "prs_srtperslid_key",
|
|
"desc": "prs_srtperslid_omschrijving",
|
|
"desc_is_unique": true
|
|
}
|
|
},
|
|
"department": {
|
|
"dbs": "prs_afdeling_key",
|
|
"label": L("lcl_prs_organisatie"),
|
|
"typ": "key",
|
|
"foreign": "prs_afdeling"
|
|
},
|
|
"company": {
|
|
"dbs": "pa.prs_bedrijf_key",
|
|
"label": L("lcl_prs_company"),
|
|
"typ": "key",
|
|
"foreign": "prs_bedrijf"
|
|
},
|
|
"location": {
|
|
"dbs": "wg.alg_locatie_key",
|
|
"label": L("lcl_location"),
|
|
"typ": "key",
|
|
"foreign": "alg_locatie",
|
|
"filter": "exact"
|
|
},
|
|
"building": {
|
|
"dbs": "wg.alg_gebouw_key",
|
|
"label": L("lcl_building"),
|
|
"typ": "key",
|
|
"foreign": "alg_gebouw"
|
|
},
|
|
"floor": {
|
|
"dbs": "wg.alg_verdieping_key",
|
|
"label": L("lcl_floor"),
|
|
"typ": "key",
|
|
"foreign": "alg_verdieping"
|
|
},
|
|
"room": {
|
|
"dbs": "wg.alg_ruimte_key",
|
|
"label": L("lcl_room"),
|
|
"typ": "key",
|
|
"foreign": "alg_ruimte"
|
|
}
|
|
};
|
|
|
|
this.includes = {
|
|
"authorization": {
|
|
"model": new model_fac_gebruikersgroep(),
|
|
"joinfield": "person",
|
|
"multiadd": "authorizationgroup"
|
|
},
|
|
"customfields" : {
|
|
"model": new model_custom_fields(this, "PRS", { readman: true, readuse: true, pNiveau: "P" }),
|
|
"joinfield": "flexparentkey"
|
|
},
|
|
"trackings": {
|
|
"model": new model_tracking(["perslid"]),
|
|
"joinfield": "trackingrefkey"
|
|
}
|
|
};
|
|
|
|
this.REST_GET = function _GET(params)
|
|
{
|
|
if (app_user_key > 0) // Alleen App's mogen dit opvragen. TODO: Ook echt authorisatie controleren?
|
|
{
|
|
if (user.prs_perslid_apikey() && user.oslogin())
|
|
{
|
|
this.fields["authtoken"] = { dbs: "prs_perslid_apikey", typ: "varchar", val: fnApiToken };
|
|
}
|
|
}
|
|
|
|
var query = api2.sqlfields(params, this);
|
|
query.tables.push("prs_v_perslid_fullnames_all pf");
|
|
query.wheres.push("pf.prs_perslid_key(+) = prs_perslid.prs_perslid_key");
|
|
query.tables.push("prs_v_werkplek_gegevens wg");
|
|
query.tables.push("prs_v_afdeling pa");
|
|
query.wheres.push("pa.prs_afdeling_key = prs_perslid.prs_afdeling_key");
|
|
query.tables.push("prs_v_hoofdperslidwerkplek2 pw");
|
|
query.wheres.push("pw.prs_perslid_key(+) = prs_perslid.prs_perslid_key");
|
|
query.wheres.push("pw.prs_werkplek_key = wg.prs_werkplek_key(+)");
|
|
|
|
var hasPRSSYS = user.has("WEB_PRSSYS");
|
|
query.wheres.push("prs_perslid.prs_perslid_verwijder IS NULL");
|
|
var authparamsUSE = user.checkAutorisation("WEB_PRSUSE", true);
|
|
if (hasPRSSYS)
|
|
{
|
|
/* zijn we verder klaar */
|
|
}
|
|
else if (!authparamsUSE) // PAS OP: Dit verwacht AAFM-API niet!!!
|
|
query.wheres.push("prs_perslid.prs_perslid_key = " + user_key);
|
|
else
|
|
{
|
|
// TODO: Ook nog ALG autorisatie?
|
|
if (authparamsUSE.PRSreadlevel == 0) // prs_bedrijf
|
|
{
|
|
query.wheres.push("pa.prs_bedrijf_key = " + user.afdeling().prs_bedrijf_key());
|
|
}
|
|
else if (authparamsUSE.PRSreadlevel > 0)
|
|
{
|
|
query.wheres.push(
|
|
"prs_perslid.prs_afdeling_key IN "
|
|
+ " (SELECT prs_afdeling_key"
|
|
+ " FROM prs_v_afdeling_familie a"
|
|
+ " WHERE a.prs_afdeling_elder_key IN"
|
|
+ " (SELECT aa.prs_afdeling_elder_key"
|
|
+ " FROM prs_v_afdeling_familie aa"
|
|
+ " WHERE aa.prs_afdeling_key = " + user.prs_afdeling_key()
|
|
+ " AND aa.niveau = " + authparamsUSE.PRSreadlevel + "))");
|
|
}
|
|
}
|
|
|
|
var wheres = api2.sqlfilter(params, this);
|
|
query.wheres = query.wheres.concat(wheres);
|
|
|
|
var sql = "SELECT " + query.selects.join(", ")
|
|
+ " FROM " + query.tables.join(", ")
|
|
+ " WHERE " + query.wheres.join(" AND " )
|
|
+ " ORDER BY prs_perslid.prs_perslid_naam, prs_perslid.prs_perslid_voornaam, prs_perslid_key";
|
|
if (query.orderbys.length)
|
|
sql += ", " + query.orderbys.join(", ");
|
|
|
|
var json = api2.sql2json (params, sql, this);
|
|
|
|
return json;
|
|
};
|
|
|
|
if (params.internal) // bijvoorbeeld idp die personen kan aanmaken
|
|
{
|
|
this.REST_POST = generic_REST_POST(this);
|
|
this.REST_PUT = generic_REST_PUT(this);
|
|
this.REST_DELETE = generic_REST_DELETE(this);
|
|
}
|
|
}
|
|
%> |