FCLT#54891 AiAi bij toevoegen catering via API2
svn path=/Website/branches/v2018.1/; revision=39400
This commit is contained in:
@@ -22,36 +22,72 @@ function status_bo(json)
|
||||
return status_bo;
|
||||
}
|
||||
|
||||
model_reservationconsumables =
|
||||
function model_reservationconsumables()
|
||||
{
|
||||
table: "res_rsv_artikel",
|
||||
primary: "res_rsv_artikel_key",
|
||||
records_name: "reservationconsumables",
|
||||
record_name: "reservationconsumable",
|
||||
this.table = "res_rsv_artikel";
|
||||
this.primary = "res_rsv_artikel_key";
|
||||
this.records_name = "reservationconsumables";
|
||||
this.record_name = "reservationconsumable";
|
||||
|
||||
fields: { "id" : { dbs: "res_rsv_artikel_key", typ: "key", filter: "exact" },
|
||||
"reservation": { dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact", foreign: "res_rsv_ruimte" },
|
||||
"consumable" : { dbs: "res_artikel_key", typ: "key", filter: "exact", foreign: "res_artikel" },
|
||||
"amount" : { dbs: "res_rsv_artikel_aantal", typ: "number"},
|
||||
"status" : { dbs: "res_status_bo_key", typ: "key", filter: "exact", foreign: status_bo },
|
||||
"from" : { dbs: "res_rsv_artikel_levering", typ: "time", filter: "exact" },
|
||||
//: "to" { dbs: "res_rsv_artikel_tot", typ: "date" },
|
||||
"price" : { dbs: "res_rsv_artikel_prijs", typ: "float", "iscurrency": true },
|
||||
"processed" : { dbs: "res_rsv_artikel_verwerkt", typ: "datetime" },
|
||||
"closed" : { dbs: "res_rsv_artikel_afgemeld", typ: "datetime" },
|
||||
"changed" : { dbs: "res_rsv_artikel_mutatie", typ: "datetime" },
|
||||
"dirtlevel" : { dbs: "res_rsv_artikel_dirtlevel", typ: "number", filter: "exact" }
|
||||
},
|
||||
list: { columns: [ "id", "from", "amount", "consumable", "price" ] },
|
||||
this.fields = {
|
||||
"id" : { dbs: "res_rsv_artikel_key", typ: "key", filter: "exact" , seq:"res_s_res_rsv_artikel_key"},
|
||||
"reservation": { dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact", foreign: "res_rsv_ruimte" },
|
||||
"consumable" : { dbs: "res_artikel_key", typ: "key", filter: "exact", foreign: "res_artikel" },
|
||||
"amount" : { dbs: "res_rsv_artikel_aantal", typ: "number"},
|
||||
"status" : { dbs: "res_status_bo_key", typ: "key", filter: "exact", foreign: status_bo },
|
||||
"from" : { dbs: "res_rsv_artikel_levering", typ: "datetime",filter: "exact" },
|
||||
//"to" : { dbs: "res_rsv_artikel_tot", typ: "date" },
|
||||
"price" : { dbs: "res_rsv_artikel_prijs", typ: "float", "iscurrency": true },
|
||||
"processed" : { dbs: "res_rsv_artikel_verwerkt", typ: "datetime" },
|
||||
"closed" : { dbs: "res_rsv_artikel_afgemeld", typ: "datetime" },
|
||||
"changed" : { dbs: "res_rsv_artikel_mutatie", typ: "datetime" },
|
||||
"dirtlevel" : { dbs: "res_rsv_artikel_dirtlevel", typ: "number", filter: "exact" }
|
||||
};
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
this.list = {
|
||||
columns: [
|
||||
"id",
|
||||
"from",
|
||||
"amount",
|
||||
"consumable",
|
||||
"price"
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
this._validate_fields = function (dbfields, params, jsondata)
|
||||
{
|
||||
var scope = params.filter.scope || "fe";
|
||||
this.autfunction = { fe : "WEB_RESUSE", fo : "WEB_RESFOF", bo : "WEB_RESBOF", mi : "WEB_RESBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(this.autfunction, null, null, true); // pessimistisch
|
||||
}
|
||||
|
||||
this.REST_GET = function _GET(params)
|
||||
{
|
||||
this._validate_fields({}, params, {});
|
||||
|
||||
var query = api2.sqlfields(params, this);
|
||||
|
||||
if (params.filter.id > 0)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
var this_res = {canReadAny: false};
|
||||
var sql = "SELECT res_rsv_ruimte_key"
|
||||
+ " FROM res_rsv_artikel"
|
||||
+ " WHERE res_rsv_artikel_key = " + params.filter.id;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").Value;
|
||||
var this_res = res.func_enabled(rsv_ruimte_key);
|
||||
}
|
||||
oRs.Close();
|
||||
user.auth_required_or_abort(this_res.canReadAny);
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_reservationconsumables);
|
||||
query.wheres.push("res_rsv_artikel_key = " + params.filter.id);
|
||||
}
|
||||
|
||||
if (params.filter.api2 && params.filter.api2 != this.records_name)
|
||||
{
|
||||
query.wheres.push("res_rsv_artikel_verwijder IS NULL");
|
||||
|
||||
query.tables.push("res_rsv_ruimte");
|
||||
@@ -59,24 +95,35 @@ model_reservationconsumables =
|
||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_reservationconsumables);
|
||||
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 res_rsv_artikel_key";
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_rsv_artikel_key";
|
||||
var json = api2.sql2json (params, sql, model_reservationconsumables);
|
||||
return json;
|
||||
},
|
||||
PUT: function (params) /* update reservable consumables */
|
||||
var json = api2.sql2json (params, sql, this);
|
||||
|
||||
return json;
|
||||
};
|
||||
|
||||
this.REST_POST = function (params, jsondata) /* new reservable consumable */
|
||||
{
|
||||
},
|
||||
POST: function (params) /* new reservable object */
|
||||
this._validate_fields({}, params, jsondata);
|
||||
return generic_REST_POST(this)(params, jsondata);
|
||||
}
|
||||
|
||||
this.REST_PUT = function (params, jsondata, the_key) /* update reservable consumables */
|
||||
{
|
||||
},
|
||||
DELETE: function (params) /* delete reservable object */
|
||||
this._validate_fields({}, params, jsondata);
|
||||
return generic_REST_PUT(this)(params, jsondata, the_key);
|
||||
}
|
||||
|
||||
this.REST_DELETE = function (params, the_key) /* delete reservable consumable */
|
||||
{
|
||||
this._validate_fields({}, params, {});
|
||||
return generic_REST_DELETE(this)(params, the_key);
|
||||
}
|
||||
}
|
||||
%>
|
||||
|
||||
@@ -48,26 +48,26 @@ function model_reservations(rsv_key, params)
|
||||
this.records_name = "reservations";
|
||||
this.record_name = "reservation";
|
||||
|
||||
this.fields =
|
||||
{"id" : { dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact", label: L("lcl_reservation") },
|
||||
"name" : { dbs: "res_reservering_id", sql: "res_reservering_key||'/'||res_rsv_ruimte_volgnr", typ: "varchar", label: L("lcl_reservation")},
|
||||
"from" : { dbs: "res_rsv_ruimte_van", typ: "datetime", filter: "range", label: L("lcl_res_starttime"), track: true}, // TODO: Andere lcl voor catering
|
||||
"to" : { dbs: "res_rsv_ruimte_tot", typ: "datetime", filter: "range", label: L("lcl_res_endtime"), track: true},
|
||||
"description" : { dbs: "res_rsv_ruimte_omschrijving", typ: "varchar", label: L("lcl_descr"), track: true },
|
||||
"activity" : { dbs: "res_activiteit_key", typ: "key", filter: "exact", foreign: "res_activiteit", label: L("lcl_activity"), track: true },
|
||||
"remark" : { dbs: "res_rsv_ruimte_opmerking", typ: "varchar", label: L("lcl_remark"), track: true},
|
||||
"host" : { dbs: "res_rsv_ruimte_host_key", typ: "key", foreign: "prs_perslid", label: L("lcl_host"), track: true},
|
||||
"contact" : { dbs: "res_rsv_ruimte_contact_key", typ: "key", foreign: "prs_perslid", label: L("lcl_name"), track: true},
|
||||
"visitorscount" : { dbs: "res_rsv_ruimte_bezoekers", typ: "number", label: L("lcl_visitors"), track: true },
|
||||
"status" : { dbs: "res_status_fo_key", typ: "key", foreign: res.getfostatustext },
|
||||
"flag" : { dbs: "res_rsv_ruimte_flag", typ: "number", LOV: ""},
|
||||
"resroom" : { dbs: "res_ruimte_opstelling.res_ruimte_key", typ: "key", filter: "exact", label: L("lcl_room"), foreign: "res_ruimte" },
|
||||
"configuration" : { dbs: "res_ruimte_opstelling.res_opstelling_key", typ: "key", foreign: "res_opstelling" },
|
||||
"approved" : { dbs: "res_rsv_ruimte_afgerond", typ: "number", label: L("lcl_res_resappr"), track: true },
|
||||
"warning" : { dbs: "res_rsv_ruimte_dirtlevel", typ: "number", foreign: fndirtwarn, readonly: true },
|
||||
"reservation" : { dbs: "res_reservering_key", typ: "key", label: L("lcl_reservation") },
|
||||
"extern_id" : { dbs: "res_rsv_ruimte_externnr", typ: "varchar", label: L("lcl_extrn_nr") }
|
||||
};
|
||||
this.fields = {
|
||||
"id" : { dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact", label: L("lcl_reservation") },
|
||||
"name" : { dbs: "res_reservering_id", sql: "res_reservering_key||'/'||res_rsv_ruimte_volgnr", typ: "varchar", label: L("lcl_reservation")},
|
||||
"from" : { dbs: "res_rsv_ruimte_van", typ: "datetime", filter: "range", label: L("lcl_res_starttime"), track: true}, // TODO: Andere lcl voor catering
|
||||
"to" : { dbs: "res_rsv_ruimte_tot", typ: "datetime", filter: "range", label: L("lcl_res_endtime"), track: true},
|
||||
"description" : { dbs: "res_rsv_ruimte_omschrijving", typ: "varchar", label: L("lcl_descr"), track: true },
|
||||
"activity" : { dbs: "res_activiteit_key", typ: "key", filter: "exact", foreign: "res_activiteit", label: L("lcl_activity"), track: true },
|
||||
"remark" : { dbs: "res_rsv_ruimte_opmerking", typ: "varchar", label: L("lcl_remark"), track: true},
|
||||
"host" : { dbs: "res_rsv_ruimte_host_key", typ: "key", foreign: "prs_perslid", label: L("lcl_host"), track: true},
|
||||
"contact" : { dbs: "res_rsv_ruimte_contact_key", typ: "key", foreign: "prs_perslid", label: L("lcl_name"), track: true},
|
||||
"visitorscount" : { dbs: "res_rsv_ruimte_bezoekers", typ: "number", label: L("lcl_visitors"), track: true },
|
||||
"status" : { dbs: "res_status_fo_key", typ: "key", foreign: res.getfostatustext },
|
||||
"flag" : { dbs: "res_rsv_ruimte_flag", typ: "number", LOV: ""},
|
||||
"resroom" : { dbs: "res_ruimte_opstelling.res_ruimte_key", typ: "key", filter: "exact", label: L("lcl_room"), foreign: "res_ruimte" },
|
||||
"configuration" : { dbs: "res_ruimte_opstelling.res_opstelling_key", typ: "key", foreign: "res_opstelling" },
|
||||
"approved" : { dbs: "res_rsv_ruimte_afgerond", typ: "number", label: L("lcl_res_resappr"), track: true },
|
||||
"warning" : { dbs: "res_rsv_ruimte_dirtlevel", typ: "number", foreign: fndirtwarn, readonly: true },
|
||||
"reservation" : { dbs: "res_reservering_key", typ: "key", label: L("lcl_reservation") },
|
||||
"extern_id" : { dbs: "res_rsv_ruimte_externnr", typ: "varchar", label: L("lcl_extrn_nr") }
|
||||
};
|
||||
|
||||
// Mogelijke waarden voor res_rsv_ruimte_flag is afhankelijk van het aantal toegestane flags.
|
||||
if (S("res_reservering_flags") > 0)
|
||||
@@ -82,115 +82,126 @@ function model_reservations(rsv_key, params)
|
||||
}
|
||||
|
||||
|
||||
this.list = { columns: ["id", "name", "from", "to"] };
|
||||
this.includes =
|
||||
{"reservationequipment": { model: model_reservationequipment,
|
||||
joinfield: "reservation",
|
||||
enable_update: true
|
||||
},
|
||||
"reservationconsumables": { model: model_reservationconsumables,
|
||||
joinfield: "reservation",
|
||||
enable_update: true
|
||||
},
|
||||
"tracking": {
|
||||
model: new model_tracking(['reservering', 'xreservering']),
|
||||
joinfield: "trackingrefkey"
|
||||
},
|
||||
"custom_fields" : { model: new model_custom_fields(this, new model_res_kenmerk({ internal: true }), { readman: true, readuse: true }),
|
||||
joinfield: "flexparentkey"
|
||||
}
|
||||
};
|
||||
this.list = {
|
||||
columns: [
|
||||
"id",
|
||||
"name",
|
||||
"from",
|
||||
"to"
|
||||
]
|
||||
};
|
||||
|
||||
this.includes = {
|
||||
"reservationequipment": {
|
||||
model: model_reservationequipment,
|
||||
joinfield: "reservation",
|
||||
enable_update: true
|
||||
},
|
||||
"reservationconsumables": {
|
||||
model: new model_reservationconsumables(),
|
||||
joinfield: "reservation",
|
||||
enable_update: true
|
||||
},
|
||||
"tracking": {
|
||||
model: new model_tracking(['reservering', 'xreservering']),
|
||||
joinfield: "trackingrefkey"
|
||||
},
|
||||
"custom_fields" : {
|
||||
model: new model_custom_fields(this, new model_res_kenmerk({ internal: true }), { readman: true, readuse: true }),
|
||||
joinfield: "flexparentkey"
|
||||
}
|
||||
};
|
||||
|
||||
this.impersonate_auth = "WEB_RESFOF";
|
||||
|
||||
this.REST_GET = function _GET(params)
|
||||
{
|
||||
var query = api2.sqlfields(params, this );
|
||||
|
||||
if (params.filter.id > 0)
|
||||
{
|
||||
var query = api2.sqlfields(params, this );
|
||||
var this_res = res.func_enabled(params.filter.id);
|
||||
user.auth_required_or_abort(this_res.canReadAny);
|
||||
}
|
||||
else // lijst
|
||||
{
|
||||
var scope = params.filter.scope || "fe";
|
||||
var autfunction = { fe : "WEB_RESUSE", fo : "WEB_RESFOF", bo : "WEB_RESBOF", mi : "WEB_RESBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
if (params.filter.id > 0)
|
||||
if (scope == "fe")
|
||||
{
|
||||
var this_res = res.func_enabled(params.filter.id);
|
||||
user.auth_required_or_abort(this_res.canReadAny);
|
||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)");
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
}
|
||||
else // lijst
|
||||
else
|
||||
{
|
||||
var scope = params.filter.scope || "fe";
|
||||
var autfunction = { fe : "WEB_RESUSE", fo : "WEB_RESFOF", bo : "WEB_RESBOF", mi : "WEB_RESBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
if (scope == "fe")
|
||||
{
|
||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)");
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!params.filter.start_from && !params.filter.end_from && !params.filter.start_to && !params.filter.end_to)
|
||||
query.wheres.push("res_rsv_ruimte_van >= TRUNC(SYSDATE)"); // reserveringen van vandaag en komende dagen!
|
||||
}
|
||||
if (!params.filter.start_from && !params.filter.end_from && !params.filter.start_to && !params.filter.end_to)
|
||||
query.wheres.push("res_rsv_ruimte_van >= TRUNC(SYSDATE)"); // reserveringen van vandaag en komende dagen!
|
||||
}
|
||||
}
|
||||
|
||||
query.tables.push("res_ruimte_opstelling");
|
||||
query.tables.push("res_ruimte rr");
|
||||
query.tables.push("res_alg_ruimte ra");
|
||||
query.tables.push("alg_v_ruimte_gegevens_all rg");
|
||||
query.tables.push("alg_district di");
|
||||
query.tables.push("prs_perslid p");
|
||||
query.tables.push("res_ruimte_opstelling");
|
||||
query.tables.push("res_ruimte rr");
|
||||
query.tables.push("res_alg_ruimte ra");
|
||||
query.tables.push("alg_v_ruimte_gegevens_all rg");
|
||||
query.tables.push("alg_district di");
|
||||
query.tables.push("prs_perslid p");
|
||||
|
||||
var add_prs_restrict = prshasrestrict(autfunction);
|
||||
if (add_prs_restrict)
|
||||
query.tables.push("prs_v_afdeling_boom boom");
|
||||
var add_prs_restrict = prshasrestrict(autfunction);
|
||||
if (add_prs_restrict)
|
||||
query.tables.push("prs_v_afdeling_boom boom");
|
||||
|
||||
query.wheres.push("res_rsv_ruimte.res_ruimte_opstel_key = res_ruimte_opstelling.res_ruimte_opstel_key(+)");
|
||||
query.wheres.push("rr.res_ruimte_key(+) = ra.res_ruimte_key");
|
||||
query.wheres.push("ra.res_ruimte_key(+) = res_ruimte_opstelling.res_ruimte_key");
|
||||
query.wheres.push("rg.alg_ruimte_key = COALESCE(res_rsv_ruimte.alg_ruimte_key, ra.alg_ruimte_key)");
|
||||
query.wheres.push("rg.alg_district_key = di.alg_district_key");
|
||||
query.wheres.push("res_rsv_ruimte.res_rsv_ruimte_contact_key = p.prs_perslid_key");
|
||||
if (add_prs_restrict)
|
||||
query.wheres.push("boom.prs_afdeling_key = p.prs_afdeling_key");
|
||||
query.wheres.push("res_rsv_ruimte.res_ruimte_opstel_key = res_ruimte_opstelling.res_ruimte_opstel_key(+)");
|
||||
query.wheres.push("rr.res_ruimte_key(+) = ra.res_ruimte_key");
|
||||
query.wheres.push("ra.res_ruimte_key(+) = res_ruimte_opstelling.res_ruimte_key");
|
||||
query.wheres.push("rg.alg_ruimte_key = COALESCE(res_rsv_ruimte.alg_ruimte_key, ra.alg_ruimte_key)");
|
||||
query.wheres.push("rg.alg_district_key = di.alg_district_key");
|
||||
query.wheres.push("res_rsv_ruimte.res_rsv_ruimte_contact_key = p.prs_perslid_key");
|
||||
if (add_prs_restrict)
|
||||
query.wheres.push("boom.prs_afdeling_key = p.prs_afdeling_key");
|
||||
|
||||
var wheres = api2.sqlfilter(params, this);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
var wheres = api2.sqlfilter(params, this);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
query.wheres.push("res_rsv_ruimte_verwijder IS NULL");
|
||||
query.wheres.push("res_rsv_ruimte_verwijder IS NULL");
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " );
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " );
|
||||
|
||||
if (!(params.filter.id > 0))
|
||||
{
|
||||
// Over het resultaat moet nog de 3D rasp, altijd
|
||||
sql = discx3d (sql,
|
||||
"rr.res_discipline_key",
|
||||
"di.alg_regio_key",
|
||||
"rg.alg_district_key",
|
||||
"rg.alg_locatie_key",
|
||||
"rg.alg_gebouw_key",
|
||||
"rg.alg_verdieping_key",
|
||||
"rg.alg_ruimte_key",
|
||||
"boom.prs_bedrijf_key",
|
||||
"boom.prs_afdeling_key",
|
||||
autfunction,
|
||||
"",
|
||||
2,null,3
|
||||
);
|
||||
}
|
||||
if (!(params.filter.id > 0))
|
||||
{
|
||||
// Over het resultaat moet nog de 3D rasp, altijd
|
||||
sql = discx3d (sql,
|
||||
"rr.res_discipline_key",
|
||||
"di.alg_regio_key",
|
||||
"rg.alg_district_key",
|
||||
"rg.alg_locatie_key",
|
||||
"rg.alg_gebouw_key",
|
||||
"rg.alg_verdieping_key",
|
||||
"rg.alg_ruimte_key",
|
||||
"boom.prs_bedrijf_key",
|
||||
"boom.prs_afdeling_key",
|
||||
autfunction,
|
||||
"",
|
||||
2,null,3
|
||||
);
|
||||
}
|
||||
|
||||
sql += " ORDER BY res_rsv_ruimte.res_rsv_ruimte_key"; // Order by nodig voor includes
|
||||
if (query.orderbys.length)
|
||||
sql += ", " + query.orderbys.join(", ");
|
||||
sql += " ORDER BY res_rsv_ruimte.res_rsv_ruimte_key"; // Order by nodig voor includes
|
||||
if (query.orderbys.length)
|
||||
sql += ", " + query.orderbys.join(", ");
|
||||
|
||||
var json = api2.sql2json (params, sql, this );
|
||||
var json = api2.sql2json (params, sql, this );
|
||||
|
||||
return json;
|
||||
};
|
||||
return json;
|
||||
};
|
||||
|
||||
function _analyze_fields(dbfields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
/* res_ruimte+config wordt bijvoorbeeld omgezet in res_ruimte_opstel_key */
|
||||
{
|
||||
if ("resroom" in jsondata)
|
||||
if ("resroom" in jsondata && jsondata.resroom)
|
||||
{
|
||||
var res_ruimte_key = parseInt(jsondata.resroom);
|
||||
var res_opstel_key = -1;
|
||||
@@ -220,8 +231,14 @@ function model_reservations(rsv_key, params)
|
||||
}
|
||||
else // moet er een alg_ruimte zijn
|
||||
{
|
||||
var sql = "SELECT alg_ruimte_key"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_key = " + jsondata.id;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
dbfields["room"] = { dbs: "alg_ruimte_key", typ: "key", val: oRs("alg_ruimte_key").Value };
|
||||
oRs.Close();
|
||||
// TODO
|
||||
api2.error(500, "Missing room in input");
|
||||
//api2.error(500, "Missing room in input");
|
||||
// var res_disc_key = ...
|
||||
// var soort = 1; // algemene ruimtes
|
||||
}
|
||||
@@ -256,178 +273,178 @@ function model_reservations(rsv_key, params)
|
||||
};
|
||||
|
||||
this.REST_PUT = function (params, jsondata, the_key) /* update reservation */
|
||||
{
|
||||
var rsv_ruimte_key = the_key;
|
||||
var this_res = res.func_enabled(rsv_ruimte_key);
|
||||
user.auth_required_or_abort(this_res.canChange);
|
||||
{
|
||||
var rsv_ruimte_key = the_key;
|
||||
var this_res = res.func_enabled(rsv_ruimte_key);
|
||||
user.auth_required_or_abort(this_res.canChange);
|
||||
|
||||
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
|
||||
_analyze_fields(dbfields, params, jsondata);
|
||||
_validate_fields(dbfields, params, jsondata);
|
||||
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
|
||||
_analyze_fields(dbfields, params, jsondata);
|
||||
_validate_fields(dbfields, params, jsondata);
|
||||
|
||||
var wheres = [" res_rsv_ruimte_key = " + rsv_ruimte_key];
|
||||
var wheres = [" res_rsv_ruimte_key = " + rsv_ruimte_key];
|
||||
|
||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||
// Ook even noshow onthouden
|
||||
oRs = Oracle.Execute("SELECT res_reservering_key"
|
||||
+ " , res_rsv_ruimte_van"
|
||||
+ " , res_rsv_ruimte_tot"
|
||||
+ " , res_rsv_ruimte_noshow"
|
||||
+ " , res_rsv_ruimte_volgnr"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key);
|
||||
var reservering_key = oRs("res_reservering_key").Value;
|
||||
var oldvan = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var oldtot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var oldnoshow = oRs("res_rsv_ruimte_noshow").Value == 1;
|
||||
var volgnr = oRs("res_rsv_ruimte_volgnr").Value;
|
||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||
// Ook even noshow onthouden
|
||||
oRs = Oracle.Execute("SELECT res_reservering_key"
|
||||
+ " , res_rsv_ruimte_van"
|
||||
+ " , res_rsv_ruimte_tot"
|
||||
+ " , res_rsv_ruimte_noshow"
|
||||
+ " , res_rsv_ruimte_volgnr"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key);
|
||||
var reservering_key = oRs("res_reservering_key").Value;
|
||||
var oldvan = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var oldtot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var oldnoshow = oRs("res_rsv_ruimte_noshow").Value == 1;
|
||||
var volgnr = oRs("res_rsv_ruimte_volgnr").Value;
|
||||
|
||||
var resUpd = buildTrackingUpdate("res_rsv_ruimte", wheres.join(" AND " ), dbfields, { noValidateToken: true });
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resUpd.sql + ";"
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
+ " res.set_ruimtes_clean (" + oldvan.toSQL() + "); " // Anderen 'clean' geworden
|
||||
+ " res.follow_artikel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // catering mee verplaatsen
|
||||
+ " res.follow_deel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // objecten mee verplaatsen
|
||||
+ " res.follow_afspraak (" + rsv_ruimte_key + ", " + S("res_copy_to_bez") + "); " // bezoekers mee verplaatsen
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var restrack = api2.process_includes(params, this, jsondata, the_key);
|
||||
|
||||
// TODO: Tracking
|
||||
// TODO: Bezoekers
|
||||
// TODO: Flex
|
||||
var flextrack = [];
|
||||
//var result = saveBezoekers(afspr_key, -1, { urole: urole, loctimechanged: changed });
|
||||
//if (result.beztrack && result.beztrack.length > 0)
|
||||
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
||||
res.trackreserveringupdate(rsv_ruimte_key, resUpd.trackarray.length || flextrack.length? L("lcl_res_is_resupdtrack").format(reservering_key + "/" + volgnr) + "\n" + resUpd.trackarray.concat(flextrack).join("\n") : null);
|
||||
|
||||
return { key: rsv_ruimte_key };
|
||||
};
|
||||
|
||||
this.REST_POST = function (params, jsondata) /* new reservation */
|
||||
{
|
||||
params.isNew = true;
|
||||
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
|
||||
_analyze_fields(dbfields, params, jsondata);
|
||||
_validate_fields(dbfields, params, jsondata);
|
||||
|
||||
// Eerst een nieuw res_reservering record aanmaken
|
||||
var resfields = { "id": { dbs: "res_reservering_key", typ: "key", seq: "res_s_res_reservering_key" },
|
||||
"created": { dbs: "res_reservering_aanmaak", typ: "datetime", val: new Date() }
|
||||
};
|
||||
var resIns = buildInsert("res_reservering", resfields, { noValidateToken: true });
|
||||
var reservering_key = resIns.sequences["res_reservering_key"];
|
||||
var volgnr = 1;
|
||||
Oracle.Execute(resIns.sql);
|
||||
|
||||
var host_key = user_key;
|
||||
var contact_key = user_key;
|
||||
if (user.has("WEB_RESFOF"))
|
||||
{
|
||||
if ("host" in jsondata)
|
||||
host_key = jsondata.host;
|
||||
if ("contact" in jsondata)
|
||||
contact_key = jsondata.contact;
|
||||
}
|
||||
|
||||
// Nu aan de slag met een res_rsv_ruimte record
|
||||
dbfields["id"] = { dbs: "res_rsv_ruimte_key", typ: "key", seq: "res_s_res_rsv_ruimte_key" };
|
||||
dbfields["reskey"] = { dbs: "res_reservering_key", typ: "key", val: reservering_key };
|
||||
dbfields["sequence"] = { dbs: "res_rsv_ruimte_volgnr", typ: "number", val: volgnr };
|
||||
dbfields["host"] = { dbs: "res_rsv_ruimte_host_key", typ: "key", val: host_key };
|
||||
dbfields["contact"] = { dbs: "res_rsv_ruimte_contact_key", typ: "key", val: contact_key };
|
||||
if (!jsondata.status)
|
||||
dbfields["status"] = { dbs: "res_status_fo_key", typ: "key", val: S("res_default_fe_status_key") };
|
||||
var resIns = buildInsert("res_rsv_ruimte", dbfields, { noValidateToken: true });
|
||||
var rsv_ruimte_key = resIns.sequences["res_rsv_ruimte_key"];
|
||||
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resIns.sql + ";"
|
||||
//+ deel_sql
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
// set_ruimtes_clean hoeft niet: wij zijn nieuw en kunnen daarmee nooit een ander clean maken
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var restrack = api2.process_includes(params, this, jsondata, rsv_ruimte_key);
|
||||
|
||||
shared.trackaction("RESNEW", rsv_ruimte_key);
|
||||
|
||||
return { key: rsv_ruimte_key };
|
||||
};
|
||||
|
||||
this.REST_DELETE = function (params, the_key) /* delete reservation */
|
||||
{
|
||||
// Sterk afgekeken van res_delete_save.asp. Die moet op termijn deze functie gaan
|
||||
// gebruiken maar dan moet de auth_required_or_abort mogelijk weer iets 'zachter'
|
||||
var cost_recharge = false; // TODO?
|
||||
var rsv_ruimte_key = the_key;
|
||||
|
||||
var this_res = res.func_enabled(rsv_ruimte_key); // Wat mag ik op deze deelreservering
|
||||
user.auth_required_or_abort(this_res.canDelete);
|
||||
|
||||
DeleteResAfspraak(rsv_ruimte_key);
|
||||
// update ruimte
|
||||
// equipment en articles are deleted automatically if the RES_RSV_RUIMTE is deleted
|
||||
// Deze velden altijd opslaan
|
||||
var dbfields = [ { dbs: "res_rsv_ruimte_opmerking", typ: "varchar", frm: "opmerk" },
|
||||
{ dbs: "res_status_fo_key", typ: "key", val: (cost_recharge? 4 : 1) }, // status 1=optie, 4=vervallen
|
||||
{ dbs: "res_rsv_ruimte_verwijder", typ: "sql", val: "SYSDATE" }
|
||||
];
|
||||
|
||||
var sql = buildUpdate("res_rsv_ruimte", dbfields, { noValidateToken: true })
|
||||
+ " res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
|
||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||
var oRs = Oracle.Execute("select res_rsv_ruimte_van,"
|
||||
+ " res_rsv_ruimte_tot"
|
||||
+ " from res_rsv_ruimte"
|
||||
+ " where res_rsv_ruimte_key = " + rsv_ruimte_key);
|
||||
var oldvan = new Date(oRs("res_rsv_ruimte_van").value);
|
||||
var oldtot = new Date(oRs("res_rsv_ruimte_tot").value);
|
||||
oRs.Close();
|
||||
|
||||
// Nu de echte update.
|
||||
// Daarbij ook diverse controles/ updates uitvoeren op 'andere zaken'
|
||||
sql = "BEGIN "
|
||||
+ sql + ";"
|
||||
var resUpd = buildTrackingUpdate("res_rsv_ruimte", wheres.join(" AND " ), dbfields, { noValidateToken: true });
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resUpd.sql + ";"
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
+ " res.set_ruimtes_clean (" + oldvan.toSQL() + "); " // Anderen 'clean' geworden
|
||||
+ " res.follow_artikel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // catering mee verplaatsen
|
||||
+ " res.follow_deel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // objecten mee verplaatsen
|
||||
+ " res.follow_afspraak (" + rsv_ruimte_key + ", " + S("res_copy_to_bez") + "); " // bezoekers mee verplaatsen
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
Oracle.Execute( sql );
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
shared.trackaction("RESDEL", rsv_ruimte_key);
|
||||
var restrack = api2.process_includes(params, this, jsondata, the_key);
|
||||
|
||||
// En tenslotte eventueel de reservering zelf nog
|
||||
sql = "UPDATE res_reservering "
|
||||
+ " SET res_reservering_verwijder=SYSDATE"
|
||||
+ " WHERE res_reservering_key="+this_res.res_reservering_key
|
||||
+ " AND NOT EXISTS (SELECT *"
|
||||
+ " FROM res_v_aanwezigrsv_ruimte"
|
||||
+ " WHERE res_reservering_key=" + this_res.res_reservering_key + ")"
|
||||
// TODO: Tracking
|
||||
// TODO: Bezoekers
|
||||
// TODO: Flex
|
||||
var flextrack = [];
|
||||
//var result = saveBezoekers(afspr_key, -1, { urole: urole, loctimechanged: changed });
|
||||
//if (result.beztrack && result.beztrack.length > 0)
|
||||
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
||||
res.trackreserveringupdate(rsv_ruimte_key, resUpd.trackarray.length || flextrack.length? L("lcl_res_is_resupdtrack").format(reservering_key + "/" + volgnr) + "\n" + resUpd.trackarray.concat(flextrack).join("\n") : null);
|
||||
|
||||
Oracle.Execute( sql );
|
||||
return { key: rsv_ruimte_key };
|
||||
};
|
||||
|
||||
this.REST_POST = function (params, jsondata) /* new reservation */
|
||||
{
|
||||
params.isNew = true;
|
||||
var dbfields = api2.update_fields(params, this, jsondata); // Build updater
|
||||
_analyze_fields(dbfields, params, jsondata);
|
||||
_validate_fields(dbfields, params, jsondata);
|
||||
|
||||
// Eerst een nieuw res_reservering record aanmaken
|
||||
var resfields = { "id": { dbs: "res_reservering_key", typ: "key", seq: "res_s_res_reservering_key" },
|
||||
"created": { dbs: "res_reservering_aanmaak", typ: "datetime", val: new Date() }
|
||||
};
|
||||
var resIns = buildInsert("res_reservering", resfields, { noValidateToken: true });
|
||||
var reservering_key = resIns.sequences["res_reservering_key"];
|
||||
var volgnr = 1;
|
||||
Oracle.Execute(resIns.sql);
|
||||
|
||||
var host_key = user_key;
|
||||
var contact_key = user_key;
|
||||
if (user.has("WEB_RESFOF"))
|
||||
{
|
||||
if ("host" in jsondata)
|
||||
host_key = jsondata.host;
|
||||
if ("contact" in jsondata)
|
||||
contact_key = jsondata.contact;
|
||||
}
|
||||
|
||||
// Nu aan de slag met een res_rsv_ruimte record
|
||||
dbfields["id"] = { dbs: "res_rsv_ruimte_key", typ: "key", seq: "res_s_res_rsv_ruimte_key" };
|
||||
dbfields["reskey"] = { dbs: "res_reservering_key", typ: "key", val: reservering_key };
|
||||
dbfields["sequence"] = { dbs: "res_rsv_ruimte_volgnr", typ: "number", val: volgnr };
|
||||
dbfields["host"] = { dbs: "res_rsv_ruimte_host_key", typ: "key", val: host_key };
|
||||
dbfields["contact"] = { dbs: "res_rsv_ruimte_contact_key", typ: "key", val: contact_key };
|
||||
if (!jsondata.status)
|
||||
dbfields["status"] = { dbs: "res_status_fo_key", typ: "key", val: S("res_default_fe_status_key") };
|
||||
var resIns = buildInsert("res_rsv_ruimte", dbfields, { noValidateToken: true });
|
||||
var rsv_ruimte_key = resIns.sequences["res_rsv_ruimte_key"];
|
||||
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resIns.sql + ";"
|
||||
//+ deel_sql
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
// set_ruimtes_clean hoeft niet: wij zijn nieuw en kunnen daarmee nooit een ander clean maken
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var restrack = api2.process_includes(params, this, jsondata, rsv_ruimte_key);
|
||||
|
||||
shared.trackaction("RESNEW", rsv_ruimte_key);
|
||||
|
||||
return { key: rsv_ruimte_key };
|
||||
};
|
||||
|
||||
this.REST_DELETE = function (params, the_key) /* delete reservation */
|
||||
{
|
||||
// Sterk afgekeken van res_delete_save.asp. Die moet op termijn deze functie gaan
|
||||
// gebruiken maar dan moet de auth_required_or_abort mogelijk weer iets 'zachter'
|
||||
var cost_recharge = false; // TODO?
|
||||
var rsv_ruimte_key = the_key;
|
||||
|
||||
var this_res = res.func_enabled(rsv_ruimte_key); // Wat mag ik op deze deelreservering
|
||||
user.auth_required_or_abort(this_res.canDelete);
|
||||
|
||||
DeleteResAfspraak(rsv_ruimte_key);
|
||||
// update ruimte
|
||||
// equipment en articles are deleted automatically if the RES_RSV_RUIMTE is deleted
|
||||
// Deze velden altijd opslaan
|
||||
var dbfields = [ { dbs: "res_rsv_ruimte_opmerking", typ: "varchar", frm: "opmerk" },
|
||||
{ dbs: "res_status_fo_key", typ: "key", val: (cost_recharge? 4 : 1) }, // status 1=optie, 4=vervallen
|
||||
{ dbs: "res_rsv_ruimte_verwijder", typ: "sql", val: "SYSDATE" }
|
||||
];
|
||||
|
||||
var sql = buildUpdate("res_rsv_ruimte", dbfields, { noValidateToken: true })
|
||||
+ " res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
|
||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||
var oRs = Oracle.Execute("select res_rsv_ruimte_van,"
|
||||
+ " res_rsv_ruimte_tot"
|
||||
+ " from res_rsv_ruimte"
|
||||
+ " where res_rsv_ruimte_key = " + rsv_ruimte_key);
|
||||
var oldvan = new Date(oRs("res_rsv_ruimte_van").value);
|
||||
var oldtot = new Date(oRs("res_rsv_ruimte_tot").value);
|
||||
oRs.Close();
|
||||
|
||||
// Nu de echte update.
|
||||
// Daarbij ook diverse controles/ updates uitvoeren op 'andere zaken'
|
||||
sql = "BEGIN "
|
||||
+ sql + ";"
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
+ " res.set_ruimtes_clean (" + oldvan.toSQL() + "); " // Anderen 'clean' geworden
|
||||
+ " res.follow_artikel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // catering mee verplaatsen
|
||||
+ " res.follow_deel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // objecten mee verplaatsen
|
||||
+ "END;";
|
||||
Oracle.Execute( sql );
|
||||
|
||||
shared.trackaction("RESDEL", rsv_ruimte_key);
|
||||
|
||||
// En tenslotte eventueel de reservering zelf nog
|
||||
sql = "UPDATE res_reservering "
|
||||
+ " SET res_reservering_verwijder=SYSDATE"
|
||||
+ " WHERE res_reservering_key="+this_res.res_reservering_key
|
||||
+ " AND NOT EXISTS (SELECT *"
|
||||
+ " FROM res_v_aanwezigrsv_ruimte"
|
||||
+ " WHERE res_reservering_key=" + this_res.res_reservering_key + ")"
|
||||
|
||||
Oracle.Execute( sql );
|
||||
}
|
||||
|
||||
if (rsv_key > 0)
|
||||
{
|
||||
params.filter = params.filter || {};
|
||||
|
||||
Reference in New Issue
Block a user