179 lines
8.5 KiB
C++
179 lines
8.5 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: model_appointments.inc
|
|
|
|
Description: Afspraken model.
|
|
Parameters:
|
|
Context:
|
|
|
|
Notes:
|
|
*/
|
|
|
|
%>
|
|
<!-- #include file="../Shared/discxalg3d.inc"-->
|
|
<!-- #include file="../bez/bez.inc" -->
|
|
<!-- #include file="./model_visitors.inc" -->
|
|
<!-- #include file="./model_tracking.inc"-->
|
|
<%
|
|
function afs_alg_onrgoed_keys(jsondata)
|
|
{
|
|
// TODO: key-check, auth check
|
|
if (jsondata.room > 0)
|
|
return jsondata.room;
|
|
if (jsondata.floor > 0)
|
|
return jsondata.floor;
|
|
if (jsondata.building > 0)
|
|
return jsondata.building;
|
|
return null;
|
|
};
|
|
|
|
model_appointments =
|
|
{
|
|
module: "BEZ",
|
|
table: "bez_afspraak",
|
|
primary: "bez_afspraak_key",
|
|
records_name: "appointments",
|
|
record_name: "appointment",
|
|
fields: {"id" : { dbs: "bez_afspraak_key", typ: "key", label: L("lcl_vis_appointment"), filter: "exact" },
|
|
"from" : { dbs: "bez_afspraak_datum", typ: "datetime", label: L("lcl_vis_start_date"), track: true},
|
|
"to" : { dbs: "bez_afspraak_eind", typ: "datetime", label: L("lcl_vis_end_date"), track: true },
|
|
"description": { dbs: "bez_afspraak_opmerking", typ: "varchar", label: L("lcl_remark")},
|
|
"action" : { dbs: "bez_actie_key", typ: "key", foreign: "bez_actie", label: L("lcl_action"), track: true},
|
|
"location" : { dbs: "alg_locatie_key", typ: "key", foreign: "alg_locatie"},
|
|
"building" : { dbs: "alg_v_allonroerendgoed.alg_gebouw_key", typ: "key", foreign: "alg_gebouw" },
|
|
"floor" : { dbs: "alg_v_allonroerendgoed.alg_verdieping_key", typ: "key", foreign: "alg_verdieping" },
|
|
"room" : { dbs: "alg_v_allonroerendgoed.alg_ruimte_key", typ: "key", foreign: "alg_ruimte" },
|
|
"_alg_keys" : { dbs: "alg_onrgoed_keys", typ: "key", fnval: afs_alg_onrgoed_keys },
|
|
"contact" : { dbs: "bez_afspraak_contact_key", typ: "key", foreign: "prs_perslid", label: L("lcl_vis_contactperson"), track: true}
|
|
},
|
|
list: { columns: ["id", "from", "to"] },
|
|
includes: {"visitors": { model: model_visitors,
|
|
joinfield: "bez_afspraak_key",
|
|
enable_update: true
|
|
},
|
|
"tracking": {
|
|
model: new model_tracking(['afspraak']),
|
|
joinfield: "fac_tracking_refkey"
|
|
}
|
|
},
|
|
impersonate_auth: "WEB_BEZFOF",
|
|
REST_GET: function _GET(params)
|
|
{
|
|
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
|
var autfunction = urole == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN";
|
|
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
|
|
|
// TODO: Add authorization hoewel je eigen afspraken zien natuurlijk niet echt spannend is
|
|
var query = api2.sqlfields(params, model_appointments );
|
|
query.wheres.push("(bez_afspraak_contact_key = " + user_key // Altijd fe vooralnog
|
|
+ " OR bez_afspraak_host_key = " + user_key + ")");
|
|
if (!params.filter.id)
|
|
query.wheres.push("bez_afspraak_datum BETWEEN SYSDATE - " + S("facilitiespast_bez") + " AND SYSDATE + " + S("facilitiesfuture_bez"));
|
|
|
|
query.tables.push("alg_v_allonroerendgoed");
|
|
query.wheres.push("alg_v_allonroerendgoed.alg_onroerendgoed_keys(+) = bez_afspraak.alg_onrgoed_keys");
|
|
|
|
var wheres = api2.sqlfilter(params, model_appointments);
|
|
query.wheres = query.wheres.concat(wheres);
|
|
|
|
var sql = "SELECT " + query.selects.join(", ")
|
|
+ " FROM " + query.tables.join(", ")
|
|
+ " WHERE " + query.wheres.join(" AND " )
|
|
+ " ORDER BY bez_afspraak.bez_afspraak_key";
|
|
if (query.orderbys.length)
|
|
sql += ", " + query.orderbys.join(", ");
|
|
|
|
var json = api2.sql2json (params, sql, model_appointments );
|
|
|
|
return json;
|
|
},
|
|
|
|
_validate_fields: function (dbfields, params, jsondata) /* valideer dbfields, alle constraints die niet door de database worden afgevangen */
|
|
{
|
|
// TODO: vis_fe_afspraak_limiet en vis_afspraak_limiet controleren
|
|
if (jsondata.appointment.from < new Date().midnight())
|
|
abort_with_warning(L("lcl_vis_error_date"));
|
|
if (jsondata.appointment.from >= jsondata.appointment.to)
|
|
abort_with_warning(L("lcl_vis_error_date"));
|
|
|
|
if ("action" in jsondata.appointment)
|
|
{
|
|
// TODO: mag hij? Of controleren we dat in _validate_fields
|
|
}
|
|
else
|
|
{
|
|
if (!params.isNew)
|
|
{
|
|
// Pak de default actie of de alfabetisch eerste
|
|
var sqla = "SELECT bsez_actie_key"
|
|
+ " , bez_actie_omschrijving"
|
|
+ " FROM bez_actie"
|
|
+ " ORDER BY bez_actie_default DESC NULLS LAST, bez_actie_omschrijving";
|
|
|
|
var oRs = Oracle.Execute(sqla);
|
|
dbfields["action"] = { dbs: "bez_actie_key", typ: "key", val: oRs("bez_actie_key").Value };
|
|
oRs.Close()
|
|
}
|
|
}
|
|
},
|
|
|
|
REST_PUT: function (params, jsondata, the_key) /* update appointment */
|
|
{
|
|
var dbfields = api2.update_fields(params, model_appointments, jsondata); // Build updater
|
|
model_appointments._validate_fields(dbfields, params, jsondata);
|
|
|
|
// bezUpd heeft na afloop eventueel oldjsvals
|
|
var wheres = [" bez_afspraak_key = " + the_key];
|
|
wheres.push("(bez_afspraak_contact_key = " + user_key // Altijd fe vooralnog
|
|
+ " OR bez_afspraak_host_key = " + user_key + ")");
|
|
var bezUpd = buildTrackingUpdate("bez_afspraak", wheres.join(" AND " ), dbfields, { noValidateToken: true });
|
|
Oracle.Execute(bezUpd.sql);
|
|
|
|
var beztrack = api2.process_includes(params, model_appointments, jsondata, the_key);
|
|
|
|
// TODO: Tracking
|
|
//var result = saveBezoekers(afspr_key, -1, { urole: urole, loctimechanged: changed });
|
|
//if (result.beztrack && result.beztrack.length > 0)
|
|
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
|
if (bezUpd && bezUpd.trackarray && (bezUpd.trackarray.length)) {
|
|
bez.trackafspraakupdate(the_key, L("lcl_bez_is_bezupdtrack").format(the_key) + "\n" + bezUpd.trackarray.join("\n"));
|
|
}
|
|
|
|
return { key: the_key };
|
|
},
|
|
REST_POST: function (params, jsondata) /* new appointment */
|
|
{
|
|
params.isNew = true; // negeer eventuele bestaande keys
|
|
|
|
var dbfields = api2.update_fields(params, model_appointments, jsondata); // Build updater
|
|
model_appointments._validate_fields(dbfields, params, jsondata);
|
|
|
|
dbfields["id"] = { dbs: "bez_afspraak_key", typ: "key", seq: "bez_s_bez_afspraak_key" };
|
|
dbfields["host"] = { dbs: "bez_afspraak_host_key", typ: "key", val: user_key };
|
|
dbfields["contact"] = { dbs: "bez_afspraak_contact_key", typ: "key", val: user_key };
|
|
|
|
var bezIns = buildInsert("bez_afspraak", dbfields, { noValidateToken: true });
|
|
var afs_key = bezIns.sequences["bez_afspraak_key"];
|
|
Oracle.Execute(bezIns.sql);
|
|
|
|
var beztrack = api2.process_includes(params, model_appointments, jsondata, afs_key);
|
|
|
|
shared.trackaction("BEZMUT", afs_key); // Er bestaat geen echte BEZNEW tracking
|
|
|
|
return { key: afs_key };
|
|
},
|
|
REST_DELETE: function (params, the_key) /* delete appointment */
|
|
{
|
|
var wheres = [" bez_afspraak_key = " + the_key];
|
|
wheres.push("(bez_afspraak_contact_key = " + user_key // Altijd fe vooralnog
|
|
+ " OR bez_afspraak_host_key = " + user_key + ")");
|
|
var sql = "DELETE FROM bez_afspraak"
|
|
+ " WHERE " + wheres.join(" AND " );
|
|
|
|
Oracle.Execute(sql);
|
|
// Geen tracking (mogelijk) omdat het record echt is verwijderd
|
|
}
|
|
}
|
|
%> |