Files
Facilitor/APPL/API2/model_regions.inc
Erik Groener cfddeb8830 YAXX#86411 Kenmerken op regio niveau ondersteunen
svn path=/Website/trunk/; revision=67617
2025-01-16 10:11:14 +00:00

174 lines
6.8 KiB
PHP

<% /*
$Revision$
$Id$
File: model_regions.inc
Description: Regio model.
Parameters:
Context:
Notes:
*/
%>
<!-- #include file="../Shared/discxalg3d.inc" -->
<!-- #include file="../ALG/alg.inc" -->
<!-- #include file="./model_districts.inc" -->
<!-- #include file="./model_alg_kenmerk.inc" -->
<%
function model_regions(regio_key, params)
{
this.table = "alg_regio";
this.primary = "alg_regio_key";
this.records_name = "regions";
this.record_name = "region";
this.fields = {
"id": { dbs: "alg_regio_key", typ: "key" },
"name": { dbs: "alg_regio_omschrijving", typ: "varchar", label: L("lcl_estate_regio_descr"), track: true},
"externnr": { dbs: "alg_regio_externnr", typ: "varchar", label: L("extern_nr"), readonly: !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR"))},
"externsyncdate": { dbs: "alg_regio_externsyncdate", typ: "datetime", label: L("extern_syncdate"), readonly: !(user.has("WEB_FACTAB") || user.has("WEB_FACXNR"))},
"deleted": { dbs: "alg_regio_verwijder", typ: "datetime", label: L("lcl_deleted")}
};
this.includes = {
"districts": {
model: new model_districts(this),
joinfield: "region"
},
"custom_fields" : {
"model": new model_custom_fields(this, new model_alg_kenmerk("E", { internal: true }), { readman: true, readuse: true }),
"joinfield": "flexparentkey",
"enable_update": true
}
};
_check_authorization = function(params, method)
{
var scope = params.filter.scope || "fe";
var autfunction = (scope == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN");
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
var onrgoedlvl = "E";
if (method == "GET")
{
if (params.filter.id)
{
var reg_key = params.filter.id;
var this_alg = alg.func_enabled(reg_key, onrgoedlvl);
user.auth_required_or_abort(this_alg.readman || this_alg.readuse);
}
}
if (method == "PUT" || method == "DELETE")
{
var reg_key = params.filter.id;
var this_alg = alg.func_enabled(reg_key, onrgoedlvl);
user.auth_required_or_abort(this_alg.writeman || (this_alg.writeuse));
}
if (method == "POST")
{
var reg_key = -1
var this_alg = alg.func_enabled(reg_key, onrgoedlvl);
user.auth_required_or_abort(this_alg.writeman);
}
params.func_enabled = this_alg || {};
};
_pre_analyze_fields = function (params, jsondata) /* analyseer inkomende jsondata voor PUT en POST */
{
};
this.REST_GET = function _GET(params, jsondata)
{
_check_authorization(params, "GET");
var query = api2.sqlfields(params, this);
if (params.flexparams && params.flexparams.anyflex)
{
this.fields.algflex = params.flexparams.algflex;
query.selects.push(params.flexparams.sql);
}
if (!params.filter.show_deleted)
query.wheres.push("alg_regio_verwijder IS NULL");
if (params.authparams.ALGreadlevel > -1)
{ // Er is een scope-beperking van kracht
query.wheres.push("alg_regio_key IN"
+ " (SELECT alg_regio_key FROM fac_v_my_regions"
+ " WHERE prs_perslid_key=" + user_key
+ " AND niveau=" + params.authparams.ALGreadlevel + ")"
)
}
if (params.filter.isNew)
query.wheres.push("alg_regio_key = -1"); // Forceer leeg record.
if (params.filter.kenmerk_sql)
query.wheres.push(params.filter.kenmerk_sql);
var wheres = api2.sqlfilter(params, this);
query.wheres = query.wheres.concat(wheres);
var sql = "SELECT " + query.selects.join(", ")
+ " FROM " + query.tables.join(", ")
+ (query.wheres.length ? " WHERE " + query.wheres.join(" AND " ) : "")
+ " ORDER BY alg_regio_key, alg_regio_omschrijving";
var json = api2.sql2json (params, sql, this);
return json;
};
this.REST_PUT = function (params, jsondata, the_key) /* update region */
{
_check_authorization(params, "PUT");
if (!jsondata.id) jsondata.id = the_key;
var reg_key = the_key;
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
var wheres = [" alg_regio_key = " + reg_key];
var regUpd = buildTrackingUpdate("alg_regio", wheres.join(" AND " ), dbfields, { noValidateToken: true });
var warning = "";
var err = Oracle.Execute(regUpd.sql, true);
if (err.friendlyMsg)
warning = err.friendlyMsg;
if (regUpd.trackarray.length)
{
shared.trackaction("ALGCUP", the_key, regUpd.trackarray.join("\n"));
}
return { key: reg_key, warning: warning };
};
this.REST_POST = function (params, jsondata) /* new region */
{
params.isNew = true;
_check_authorization(params, "POST");
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
dbfields["id"] = {dbs: "alg_regio_key", typ: "key", seq: "alg_s_alg_regio_key" };
var regIns = buildInsert("alg_regio", dbfields, { noValidateToken: true });
var reg_key = regIns.sequences["alg_regio_key"];
var warning = "";
var err = Oracle.Execute(regIns.sql, true);
if (err.friendlyMsg)
warning = err.friendlyMsg;
return { key: reg_key, warning: warning };
};
this.REST_DELETE = function (params, the_key) /* delete region */
{
_check_authorization(params, "DELETE");
var regio_key = params.filter.id;
var sql = "UPDATE alg_regio"
+ " SET alg_regio_verwijder = SYSDATE"
+ " WHERE alg_regio_key = " + regio_key;
var err = Oracle.Execute(sql, true);
if (err.friendlyMsg)
params.warning = err.friendlyMsg;
return { key: regio_key, warning: warning };
};
}
%>