Files
Facilitor/APPL/API2/model_rooms.inc
Jos Groot Lipman 8decd00522 Alle API's via nieuwe stijl fields
svn path=/Website/trunk/; revision=24435
2015-03-13 13:34:37 +00:00

255 lines
13 KiB
PHP

<% /*
$Revision$
$Id$
File: model_rooms.inc
Description: room model.
Parameters:
Context:
Notes:
*/
%>
<!-- #include file="../Shared/kenmerk_common.inc"-->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../ALG/alg.inc" -->
<!-- #include file="./model_cadcontours.inc" -->
<%
model_rooms =
{
table: "alg_ruimte",
primary: "alg_ruimte_key",
records_name: "rooms",
record_name: "room",
fields: {"id" : { dbs: "alg_ruimte_key", typ: "key", filter: "exact" },
"name" : { dbs: "alg_ruimte_nr", typ: "varchar", filter: "like", track: true, label: L("lcl_estate_ruimte_man_nr") },
"floor" : { dbs: "alg_verdieping_key", typ: "key", foreign: "alg_verdieping", filter: "exact" },
"roomtype" : { dbs: "alg_srtruimte_key", typ: "key", foreign: "alg_srtruimte", track: true, label: L("lcl_estate_ruimte_man_sort") },
"servicelevel": { dbs: "mld_dienstniveau_key", typ: "key", foreign: "mld_dienstniveau", track: true, label: L("lcl_mld_dienst_niveau") },
"description" : { dbs: "alg_ruimte_omschrijving", typ: "varchar", filter: "like", track: true, label: L("lcl_estate_ruimte_man_descr") },
"grossarea" : { dbs: "alg_ruimte_bruto_vloeropp", typ: "float", track: true, label: L("lcl_estate_ruimte_bruto_vloeropp") },
"area1" : { dbs: "alg_ruimte_opp_alt1", typ: "float", track: true, label: L("lcl_estate_ruimte_opp_alt1") },
"area2" : { dbs: "alg_ruimte_opp_alt2", typ: "float", track: true, label: L("lcl_estate_ruimte_opp_alt2") },
"perimeter" : { dbs: "alg_ruimte_omtrek", typ: "float", track: true, label: L("lcl_estate_ruimte_man_omtrek") },
"volume" : { dbs: "alg_ruimte_inhoud", typ: "float", track: true, label: L("lcl_estate_ruimte_man_inhoud") },
"remark" : { dbs: "alg_ruimte_opmerking", typ: "varchar", track: true, label: L("lcl_estate_ruimte_man_opmerk") },
"openfrom" : { dbs: "alg_ruimte_beginuur", typ: "float", track: true, label: L("lcl_estate_gebouw_beginuur") },
"opento" : { dbs: "alg_ruimte_einduur", typ: "float", track: true, label: L("lcl_estate_gebouw_einduur") },
"workdays" : { dbs: "alg_ruimte_werkdagen", typ: "number" },
"deleted" : { dbs: "alg_ruimte_verwijder", typ: "datetime" }
/* niet gebruikt:
{ dbs: "_ALG_RUIMTE_VLOER_OMSCHRIJVING", typ: "varchar", frm: "room_flrom" },
{ dbs: "_ALG_RUIMTE_OPP_GEVELGLAS", typ: "float", frm: "room_gegl" },
{ dbs: "_ALG_RUIMTE_OPP_SEPARATIEGLAS", typ: "float", frm: "room_segl" },
{ dbs: "_ALG_RUIMTE_OPP_GEVELBEKLEDING", typ: "float", frm: "room_gebe" },
{ dbs: "_ALG_RUIMTE_ACADKEY", typ: "varchar", frm: "room_ackey" },
{ dbs: "_ALG_RUIMTE_GETEKEND", typ: "date", frm: "room_tek" },
*/
},
controls: [ {name: "scope", type: "varchar" },
{name: "show_deleted", type: "boolean" }
],
defaults: { onrgoedlvl: "R"
},
includes: {"cadcontours": { model: model_cadcontours,
joinfunction: function ()
{
var sqlSync = "SELECT y.alg_ruimte_key cad_ruimte_key"
+ " , y.cadlabel"
+ " , t.cad_tekening_key"
+ " FROM " + S("fg_syncruimteview") + " y"
+ " , cad_tekening t"
+ " , alg_ruimte r "
+ " WHERE t.alg_verdieping_key = y.alg_verdieping_key"
+ " AND y.alg_ruimte_key = r.alg_ruimte_key";
return { tables: ["("+sqlSync+") sync"],
where: "alg_ruimte.alg_ruimte_key = sync.cad_ruimte_key(+)"
+ " AND sync.cadlabel = cad_imp_contour.cad_imp_contour_nr(+)"
+ " AND sync.cad_tekening_key = cad_imp_contour.cad_tekening_key(+)"
}
}
}
},
_check_authorization: function(params, method)
{
params.message = "";
var autfunction = (params.filter.scope == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN");
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
switch (method)
{
case "GET":
if (params.filter.id)
{
var room_key = params.filter.id;
var this_alg = alg.func_enabled(room_key, model_rooms.defaults.onrgoedlvl);
user.auth_required_or_abort(this_alg.readman || this_alg.readuse);
}
break;
case "DELETE":
var autfunction = "WEB_RUIMAN";
var authParams = user.checkAutorisation(autfunction);
// en verder met de autorisatie van PUT...
case "PUT":
var room_key = params.filter.id;
var this_alg = alg.func_enabled(room_key, model_rooms.defaults.onrgoedlvl);
user.auth_required_or_abort(this_alg.writeman || this_alg.writeuse);
params.isNew = false;
break;
case "POST":
var room_key = -1;
var this_alg = alg.func_enabled(room_key, model_rooms.defaults.onrgoedlvl);
user.auth_required_or_abort(this_alg.writeman);
params.isNew = true;
break;
}
params.func_enabled = this_alg || {};
},
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
{
var beginuur = "openfrom" in fields? fields["openfrom"] : -2;
if (beginuur == -1)
beginuur = "";
if (beginuur != -2)
api2.field_alter(fields, "openfrom", beginuur, model_rooms)
var einduur = "opento" in fields? fields["opento"] : -2;
if (einduur == -1)
einduur = "";
if (einduur != -2)
api2.field_alter(fields, "opento", einduur, model_rooms)
},
_save_flexproperties: function(room_key, params, jsondata)
{
var flextrack = [];
var flexdata = jsondata.room.properties;
currentKenmerkenSQL = " SELECT k.alg_kenmerk_key"
+ " , ok.alg_onrgoedkenmerk_waarde"
+ " FROM alg_onrgoedkenmerk ok"
+ " , alg_kenmerk k"
+ " WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key"
+ " AND alg_onrgoedkenmerk_verwijder IS NULL"
+ " AND alg_onrgoed_niveau = " + safe.quoted_sql(model_rooms.defaults.onrgoedlvl)
+ " AND alg_onrgoed_key = " + room_key;
allKenmerkenSQL = " SELECT "+lcl.xsql("k.alg_kenmerk_omschrijving","k.alg_kenmerk_key")+" kenmerk_omschrijving"
+ " , alg_kenmerk_key srtkenmerk_key"
+ " , fac_kenmerkdomein_key"
+ " FROM alg_kenmerk k"
+ " WHERE k.alg_kenmerk_verwijder IS NULL"
+ " AND k.alg_kenmerk_niveau = " + safe.quoted_sql(model_rooms.defaults.onrgoedlvl)
+ " AND k.alg_kenmerk_key = "; /* wordt in saveFlexkenmerken uitgebreid */
flextrack = saveFlexKenmerken( room_key,
{ kenmerkTable: "alg_onrgoedkenmerk",
kenmerkParentKey : "alg_onrgoed_key",
kenmerkWaarde: "alg_onrgoedkenmerk_waarde",
kenmerkKey: "alg_kenmerk_key",
currentKenmerkenSQL: currentKenmerkenSQL,
allKenmerkenSQL: allKenmerkenSQL,
kenmerkOmschrijving: "alg_kenmerk_omschrijving",
kenmerkSoortKey: "alg_kenmerk_key",
requestQF: Request.Form,
flexdata: flexdata,
isNew: params.isNew,
flexPath: "ALG/R",
tracking: true,
moduleName: "ALG_ONRGOED_NIVEAU",
moduleVal: "R",
module: "ALG"
}
);
return flextrack;
},
REST_GET: function _GET(params, jsondata)
{
model_rooms._check_authorization(params, "GET");
var query = api2.sqlfields(params, model_rooms);
if (!params.filter.show_deleted)
query.wheres.push("alg_ruimte_verwijder IS NULL");
var wheres = api2.sqlfilter(params, model_rooms);
query.wheres = query.wheres.concat(wheres);
var sql = "SELECT " + query.selects.join(", ")
+ " FROM " + query.tables.join(", ")
+ (query.wheres.length ? " WHERE " + query.wheres.join(" AND " ) : "")
if (params.authparams.ALGreadlevel > -1)
{ // Er is een scope-beperking van kracht
sql += " AND r.alg_ruimte_key IN"
+ " (SELECT alg_ruimte_key FROM fac_v_my_rooms"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + params.authparams.ALGreadlevel + ")";
}
var json = api2.sql2json (params, sql, model_rooms);
return json;
},
REST_PUT: function (params, jsondata, the_key) /* update room */
{
model_rooms._check_authorization(params, "PUT");
if (!jsondata.room.id) jsondata.room.id = the_key;
var room_key = the_key;
var fields = api2.update_fields(params, model_rooms, jsondata); // Build updater
model_rooms._analyze_fields(fields, params, jsondata);
var wheres = [" alg_ruimte_key = " + room_key];
var roomUpd = buildTrackingUpdate("alg_ruimte", wheres.join(" AND " ), fields, { noValidateToken: true });
var err = Oracle.Execute(roomUpd.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
var flextrack = model_rooms._save_flexproperties(room_key, params, jsondata);
if (roomUpd.trackarray.length || flextrack.length)
shared.trackaction("ALGRUP", room_key, roomUpd.trackarray.concat(flextrack).join("\n"));
return { key: room_key, warning: "" };
},
REST_POST: function (params, jsondata) /* new room */
{
model_rooms._check_authorization(params, "POST");
var fields = api2.update_fields(params, model_rooms, jsondata); // Build updater
model_rooms._analyze_fields(fields, params, jsondata);
fields["id"] = {dbs: "alg_ruimte_key", typ: "key", seq: "alg_s_alg_onroerendgoed_keys" };
var roomIns = buildInsert("alg_ruimte", fields, { noValidateToken: true });
var room_key = roomIns.sequences["alg_ruimte_key"];
var err = Oracle.Execute(roomIns.sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
var flextrack = model_rooms._save_flexproperties(room_key, params, jsondata);
return { key: room_key, warning: "" };
},
REST_DELETE: function (params, the_key) /* delete room */
{
model_rooms._check_authorization(params, "DELETE");
var room_key = params.filter.id;
var sql = "UPDATE alg_ruimte"
+ " SET alg_ruimte_verwijder = SYSDATE"
+ " WHERE alg_ruimte_key = " + room_key;
var err = Oracle.Execute(sql, true);
if (err.friendlyMsg)
abort_with_warning(err.friendlyMsg);
return { key: room_key, warning: "" };
}
}
%>