FSN#30010 API2: Meldingen api / webservice voor meldingen
svn path=/Website/trunk/; revision=23289
This commit is contained in:
118
APPL/API2/model_issueobjects.inc
Normal file
118
APPL/API2/model_issueobjects.inc
Normal file
@@ -0,0 +1,118 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_issueobjects.inc
|
||||
|
||||
Description: Meldingobjecten model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<%
|
||||
model_issueobjects =
|
||||
{
|
||||
table: "mld_melding_object",
|
||||
primary: "mld_melding_object_key",
|
||||
records_name: "issueobjects",
|
||||
record_name: "issueobject",
|
||||
fields: [{ name: "id", dbs: "mld_melding_object_key", typ: "key", filter: "exact" },
|
||||
//{ name: "issue", dbs: "mld_melding_key", typ: "key", xforeign: "mld_melding" }, // niet teruglinken // mld_melding zit niet in save2db.foreignKeyTable()
|
||||
{ name: "object", dbs: "ins_deel_key", typ: "key", foreign: "ins_deel" }
|
||||
],
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
if (jsondata.id)
|
||||
{
|
||||
// Bestaande mld_melding_object: PUT
|
||||
}
|
||||
else
|
||||
{ // Nieuwe mld_melding_object: POST
|
||||
// Controleer of de combinatie melding_key/object_key al bestaat. Zo ja, dan niet toevoegen.
|
||||
var mld_obj_key = -1;
|
||||
var sql = "SELECT mld_melding_object_key"
|
||||
+ " FROM mld_melding_object"
|
||||
+ " WHERE mld_melding_object_verwijder IS NULL"
|
||||
+ " AND mld_melding_key = " + params.filter.id
|
||||
+ " AND ins_deel_key = " + fields[0].val;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
mld_obj_key = oRs("mld_melding_object_key").Value;
|
||||
params.isNew = false;
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
var query = api2.sqlfields(params, model_issueobjects );
|
||||
|
||||
query.wheres.push("mld_melding_object_verwijder IS NULL");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_issueobjects);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " );
|
||||
|
||||
var json = api2.sql2json (params, sql, model_issueobjects );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update object */
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
var fields = api2.update_fields(params, model_issueobjects, jsondata); // Build updater
|
||||
model_issueobjects._analyze_fields(fields, params, jsondata);
|
||||
|
||||
var mldUpd = buildTrackingUpdate("mld_melding_object", " mld_melding_object_key = " + the_key, fields, { noValidateToken: true });
|
||||
Oracle.Execute(mldUpd.sql);
|
||||
|
||||
// Nu geen api2.process_includes() meer aanroepen, anders ga je de objecten zelf ook nog aanpassen.
|
||||
|
||||
return { key: the_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata, parent_key) /* new object */
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
params.isNew = true; // negeer eventuele bestaande keys
|
||||
var fields = api2.update_fields(params, model_issueobjects, jsondata); // Build updater
|
||||
model_issueobjects._analyze_fields(fields, params, jsondata);
|
||||
|
||||
var new_key = null;
|
||||
if (params.isNew)
|
||||
{
|
||||
fields.push({ dbs: "mld_melding_key", typ: "key", val: parent_key });
|
||||
fields.push({ dbs: "mld_melding_object_key", typ: "key", seq: "mld_s_mld_object_key" });
|
||||
|
||||
var mldIns = buildInsert("mld_melding_object", fields, { noValidateToken: true });
|
||||
new_key = mldIns.sequences["mld_melding_object_key"];
|
||||
Oracle.Execute(mldIns.sql);
|
||||
}
|
||||
|
||||
return { key: new_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete object */
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
var sql = "DELETE FROM mld_melding_object WHERE mld_melding_object_key = " + the_key;
|
||||
Oracle.Execute(sql);
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -16,7 +16,9 @@
|
||||
%>
|
||||
<!-- #include file="../Shared/discx3d.inc" -->
|
||||
<!-- #include file="../mld/mld.inc" -->
|
||||
<!-- #include file="model_objects.inc"-->
|
||||
<!-- #include file="model_issueobjects.inc"-->
|
||||
<!-- #include file="model_notes.inc"-->
|
||||
<!-- #include file="model_orders.inc"-->
|
||||
<%
|
||||
|
||||
model_issues =
|
||||
@@ -27,12 +29,12 @@ model_issues =
|
||||
records_name: "issues",
|
||||
record_name: "issue",
|
||||
fields: [{ name: "id", dbs: "mld_melding_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "mld_melding_id", typ: "varchar", sql: "ins_srtdiscipline.ins_srtdiscipline_prefix||mld_melding_key", filter: "exact" },
|
||||
{ name: "name", dbs: "mld_melding_id", typ: "varchar", sql: "ins_srtdiscipline.ins_srtdiscipline_prefix||mld_melding.mld_melding_key", filter: "exact" },
|
||||
{ name: "contact", dbs: "prs_perslid_key", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_name"), filter: "exact" },
|
||||
{ name: "requestor", dbs: "prs_perslid_key_voor", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_call_for"), filter: "exact" },
|
||||
{ name: "issuedate", dbs: "mld_melding_datum", typ: "datetime", track: L("lcl_mld_date_time")},
|
||||
{ name: "enddate", dbs: "mld_melding_einddatum", typ: "datetime", track: L("lcl_mld_enddate")},
|
||||
{ name: "issuetype", dbs: "mld_stdmelding_key", typ: "varchar", foreign: "mld_stdmelding", track: L("lcl_complain"), filter: "exact" },
|
||||
{ name: "issuetype", dbs: "mld_stdmelding_key", typ: "key", foreign: "mld_stdmelding", track: L("lcl_complain"), filter: "exact" },
|
||||
{ name: "description", dbs: "mld_melding_omschrijving", typ: "varchar", track: L("lcl_descr"), filter: "like" },
|
||||
{ name: "remark", dbs: "mld_melding_opmerking", typ: "varchar", track: L("lcl_remark")},
|
||||
{ name: "status", dbs: "mld_melding_status", typ: "key", foreign: mld.getmldstatustext, track: L("lcl_status"), filter: "exact" },
|
||||
@@ -45,25 +47,21 @@ model_issues =
|
||||
{ name: "terrain", dbs: "alg_v_allonroerendgoed.alg_terreinsector_key", typ: "key", foreign: "alg_terreinsector", track: L("lcl_room"), filter: "exact" }
|
||||
],
|
||||
includes: {
|
||||
"objects": {
|
||||
model: model_objects,
|
||||
joinfield: "ins_deel_key",
|
||||
single_only: false,
|
||||
joinfunction: function (params)
|
||||
{
|
||||
return "ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object.mld_melding_key = mld_melding.mld_melding_key AND mld_melding_object_verwijder IS NULL)";
|
||||
}
|
||||
},
|
||||
"notes": { // TODO later
|
||||
//model: model_notes,
|
||||
joinfield: "ins_deel_key",
|
||||
single_only: false,
|
||||
joinfunction: function (params)
|
||||
{
|
||||
/* gaat uit dat die wordt geimplementeerd met een view fac_v_notes (module, key, columns....) */
|
||||
return "module='MLD' AND fac_v_notes.key = mld_melding.mld_melding_key";
|
||||
}
|
||||
}
|
||||
"issueobjects": {
|
||||
model: model_issueobjects,
|
||||
joinfield: "mld_melding_key",
|
||||
single_only: false
|
||||
},
|
||||
"notes": {
|
||||
model: model_notes,
|
||||
joinfield: "parent_key",
|
||||
single_only: false,
|
||||
joinfunction: function (params)
|
||||
{
|
||||
/* gaat uit dat die wordt geimplementeerd met een view fac_v_notes (module, key, columns....) */
|
||||
return "(module='MLD' OR module IS NULL) AND fac_v_notes.parent_key(+) = mld_melding.mld_melding_key";
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
@@ -159,22 +157,348 @@ model_issues =
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
_pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata voor POST */
|
||||
{
|
||||
params.data = {};
|
||||
if (params.isNew)
|
||||
{ // analyseer inkomende jsondata voor POST
|
||||
var msgError = "";
|
||||
var hasError = true;
|
||||
//
|
||||
// Voor een nieuwe melding moet er een geldige stdmelding zijn.
|
||||
msgError = "Missing issuetype";
|
||||
if (jsondata.issue.issuetype)
|
||||
{
|
||||
msgError = "Invalid issuetype";
|
||||
var sql_stdm = "SELECT sm.mld_stdmelding_omschrijving"
|
||||
+ " , sm.mld_ins_discipline_key"
|
||||
+ " , md.ins_srtdiscipline_key"
|
||||
+ " , COALESCE(sm.mld_stdmelding_directklaar, dp.mld_disc_params_directklaar, 0) mld_directklaar"
|
||||
+ " FROM mld_stdmelding sm"
|
||||
+ " , mld_discipline md"
|
||||
+ " , mld_disc_params dp"
|
||||
+ " WHERE sm.mld_ins_discipline_key = md.ins_discipline_key"
|
||||
+ " AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key";
|
||||
+ " AND sm.mld_stdmelding_key = " + jsondata.issue.issuetype;
|
||||
var oRs_stdm = Oracle.Execute(sql_stdm);
|
||||
if (!oRs_stdm.eof)
|
||||
{
|
||||
params.data.mld_ins_discipline_key = oRs_stdm("mld_ins_discipline_key").Value;
|
||||
params.data.ins_srtdiscipline_key = oRs_stdm("ins_srtdiscipline_key").Value;
|
||||
params.data.mld_directklaar = oRs_stdm("mld_directklaar").Value;
|
||||
hasError = false;
|
||||
}
|
||||
oRs_stdm.Close();
|
||||
}
|
||||
if (hasError) api2.error(500, msgError);
|
||||
//
|
||||
|
||||
// Bepaal de kostenplaats, indien verplicht.
|
||||
var stdm_info = mld.mld_stdmeldinginfo(jsondata.issue.issuetype);
|
||||
var kpkey = (jsondata.issue.account ? jsondata.issue.account : -1);
|
||||
if (stdm_info.kpnverplicht && kpkey < 0)
|
||||
{ // Kostenplaats is verplicht, maar is niet meegegeven. Bepaal default kostenplaats.
|
||||
kpkey = (user.afdeling().prs_kostenplaats_key() || -1); // User kostenplaats key
|
||||
}
|
||||
if (stdm_info.kpnverplicht && kpkey < 0)
|
||||
{ // Kon ook geen default kostenplaats vinden.
|
||||
msgError = "Account could not be validated";
|
||||
api2.error(500, msgError);
|
||||
}
|
||||
jsondata.issue.account = kpkey;
|
||||
params.data.is_kto_antwoord = stdm_info.is_kto_antwoord;
|
||||
//
|
||||
|
||||
//
|
||||
if (!jsondata.issue.contact) jsondata.issue.contact = user_key; // Als er geen aanvrager opgegeven is, dan de huidige gebruiker invullen.
|
||||
// Als de setting niet is gezet is "Melding voor" gelijk aan contactpersoon.
|
||||
if (S("mld_allow_for_others") == 0)
|
||||
{
|
||||
jsondata.issue.requestor = jsondata.issue.contact;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bestaande melding: Haal de gegevens op.
|
||||
var sql = "SELECT mld_stdmelding_key"
|
||||
+ " FROM mld_melding"
|
||||
+ " WHERE mld_melding_key = " + jsondata.issue.id;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
jsondata.issue.issuetype = oRs("mld_stdmelding_key").Value;
|
||||
oRs.Close();
|
||||
|
||||
}
|
||||
//
|
||||
//
|
||||
var stdm_info = mld.mld_stdmeldinginfo(jsondata.issue.issuetype);
|
||||
// Startdatum: indien niet meegegeven, neem dan sysdate
|
||||
var startdate = (jsondata.issue.issuedate ? jsondata.issue.issuedate : new Date);
|
||||
var startwerkdag = parseFloat(S("fac_t_startofworkday"));
|
||||
var startwerkdag_uur = Math.floor(startwerkdag);
|
||||
var startwerkdag_min = (startwerkdag - Math.floor(startwerkdag)) * 60;
|
||||
var startdatebegin = new Date(startdate.getFullYear(), startdate.getMonth(), startdate.getDate(), startwerkdag_uur, startwerkdag_min);
|
||||
var sysdate = new Date();
|
||||
//
|
||||
if (stdm_info.startdatum)
|
||||
{ // Situatie 1: Einddatum = TRUNC(startdatum) + 8:00 uur + SLA
|
||||
// LET OP!!!: Als setting "mld_disc_params_startdatum" is gezet dan wordt eigenlijk verondersteld dat de SLA in dagen is en niet in uren.
|
||||
// Echter als de startdatum de registratiedatum (bij nieuwe melding dus sysdate) is moet wel voor de begintijd de registratietijd (registratiedatum) genomen worden tijdens het opslaan.
|
||||
// Anders geldt de acceptatietijd (in uren) onterecht al vanaf het begin van de dag.
|
||||
if (params.isNew)
|
||||
{ // Nieuwe melding.
|
||||
// Startdatum is vandaag: starttijd is huidige tijd.
|
||||
// Startdatum is niet vandaag: starttijd is begin werkdag.
|
||||
var startdate_is_today = (startdate.midnight().getTime() == sysdate.midnight().getTime());
|
||||
startdate = (startdate_is_today? sysdate : startdatebegin);
|
||||
}
|
||||
else
|
||||
{ // Bestaande melding
|
||||
var mld_key = jsondata.issue.id;
|
||||
sql = "SELECT mld_melding_datum"
|
||||
+ " FROM mld_melding"
|
||||
+ " WHERE mld_melding_key = " + mld_key;
|
||||
oRs = Oracle.Execute(sql);
|
||||
var oldstartdate = new Date(oRs("mld_melding_datum").Value);
|
||||
|
||||
// Alleen als datum veranderd is moet de starttijd worden aangepast.
|
||||
if (startdate.midnight().getTime() != oldstartdate.midnight().getTime())
|
||||
{ // Startdatum is aangepast.
|
||||
// Als de startdatum is aangepast in registratiedatum, dan wel weer de registratietijd (registratiedatum) pakken.
|
||||
// In alle andere gevallen begin van de werkdag pakken.
|
||||
sql = "SELECT fac.gettrackingdate('MLDNEW', " + mld_key + ") registratiedatum FROM DUAL"
|
||||
oRs_1 = Oracle.Execute(sql);
|
||||
var registratiedatum = new Date(oRs_1("registratiedatum").Value);
|
||||
oRs_1.Close();
|
||||
|
||||
var startdatum_is_registratiedatum = (startdate.midnight().getTime() == registratiedatum.midnight().getTime());
|
||||
startdate = (startdatum_is_registratiedatum? registratiedatum : startdatebegin);
|
||||
}
|
||||
else
|
||||
{ // else startdatum niet aanpassen.
|
||||
startdate = oldstartdate;
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // Situatie 2: Einddatum = COALESCE(huidige waarde, sysdate) + SLA
|
||||
if (params.isNew)
|
||||
{
|
||||
startdate = new Date();
|
||||
}
|
||||
else
|
||||
{
|
||||
startdate = jsondata.issue.issuedate;
|
||||
}
|
||||
}
|
||||
jsondata.issue.issuedate = startdate;
|
||||
// De einddatum is de meegegeven einddatum, maar als die niet wordt meegegeven regelt de trigger dat wel, dus DAN MOET IK HEM NIET MEEGEVEN
|
||||
//
|
||||
|
||||
// Onroerendgoed_keys wordt de verfijnste van de opgegeven plaats
|
||||
var locatiekey = (jsondata.issue.location ? jsondata.issue.location : -1);
|
||||
var gebouwkey = (jsondata.issue.building ? jsondata.issue.building : -1);
|
||||
var verdiepingkey = (jsondata.issue.floor ? jsondata.issue.floor : -1);
|
||||
var ruimtekey = (jsondata.issue.room ? jsondata.issue.room : -1);
|
||||
var alg_onroerendgoed_keys = -1;
|
||||
|
||||
if (!S("mld_plaats_is_locatie_only"))
|
||||
{ // die specifiekere plaats moet dan leegblijven
|
||||
if (ruimtekey != -1)
|
||||
alg_onroerendgoed_keys = ruimtekey;
|
||||
else if (verdiepingkey != -1)
|
||||
alg_onroerendgoed_keys = verdiepingkey;
|
||||
else if (gebouwkey != -1)
|
||||
alg_onroerendgoed_keys = gebouwkey;
|
||||
}
|
||||
params.data.alg_onroerendgoed_keys = alg_onroerendgoed_keys;
|
||||
|
||||
if (!params.isNew)
|
||||
{ // Verwijder voor PUT wat niet gewijzigd mag worden.
|
||||
delete jsondata.issue.name;
|
||||
delete jsondata.issue.contact;
|
||||
delete jsondata.issue.requestor;
|
||||
delete jsondata.issue.issuetype;
|
||||
delete jsondata.issue.location;
|
||||
}
|
||||
},
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
// als einddatum ingevuld is moet deze groter/gelijk zijn aan de begindatum
|
||||
},
|
||||
|
||||
_validate_close: function (params, jsondata, the_key) /* uit: mld_close_save.asp */
|
||||
{
|
||||
var mld_key = the_key;
|
||||
var this_mld = mld.func_enabled_melding(mld_key);
|
||||
user.auth_required_or_abort(this_mld.canClose); // Als je mag accepteren mag je ook rejecten
|
||||
|
||||
params.data = {};
|
||||
params.data.tobeclosed = false;
|
||||
params.data.canCloseOpdrOfMld = [];
|
||||
var canCloseOpdr = [];
|
||||
var reqStatusEmpty = [];
|
||||
var noOpdrCloseAtAll = false;
|
||||
var futureOpdr = false;
|
||||
|
||||
// Zijn er nog kenmerken die nu wel verplicht zijn?
|
||||
var kvsAfwezig = mld.hasRequiredStatusEmpty(mld_key, 5);
|
||||
if (kvsAfwezig.length)
|
||||
{
|
||||
var mldnr = mld.mld_prefix(mld_key) + mld_key;
|
||||
reqStatusEmpty.push(L("lcl_mld_req_status_empty").format(kvsAfwezig.join(", "), mldnr) );
|
||||
}
|
||||
// Zijn er nog lopende opdrachten?
|
||||
var sql = "SELECT o.mld_opdr_key"
|
||||
+ " FROM mld_opdr o"
|
||||
+ " WHERE o.mld_melding_key = " + mld_key
|
||||
+ " AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
|
||||
var oRsOM = Oracle.Execute(sql);
|
||||
while (!oRsOM.eof)
|
||||
{ // Voor elke opdracht van een melding controleren of deze afgemeld mag worden
|
||||
var mld_opdr_key = oRsOM("mld_opdr_key").Value;
|
||||
sql = "SELECT mld_opdr_einddatum"
|
||||
+ " FROM mld_opdr o"
|
||||
+ " WHERE o.mld_opdr_key = " + mld_opdr_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
// Als Setting S("mld_ord_afmeld_future") niet is gezet (0): Opdrachten waarvan de einddatum in de toekomst ligt mogen niet worden afgemeld.
|
||||
var this_opdr = mld.func_enabled_opdracht(mld_opdr_key);
|
||||
if (!this_opdr.canClose || (S("mld_ord_afmeld_future") != 1 && (oRs("mld_opdr_einddatum").value > new Date())))
|
||||
{ // Geen autorisatie om alle opdrachten van een melding af te melden of opdrachten in de toekomst
|
||||
// met setting S("mld_ord_afmeld_future") niet gezet-->dan geen enkele van die melding
|
||||
noOpdrCloseAtAll = true;
|
||||
if (S("mld_ord_afmeld_future") != 1 && (oRs("mld_opdr_einddatum").value > new Date()))
|
||||
futureOpdr = true; // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
|
||||
}
|
||||
oRs.Close();
|
||||
params.data.canCloseOpdrOfMld.push(mld_opdr_key);
|
||||
oRsOM.MoveNext();
|
||||
}
|
||||
oRsOM.Close();
|
||||
|
||||
if (!futureOpdr && !noOpdrCloseAtAll)
|
||||
{ // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
|
||||
// EN geen opdrachten of alle opdrachten mogen gesloten worden, dan kan de melding afgemeld worden
|
||||
params.data.tobeclosed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
msgError = "Issue can not be closed";
|
||||
api2.error(500, msgError);
|
||||
}
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update call */
|
||||
{
|
||||
if (!jsondata.issue.id) jsondata.issue.id = the_key;
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
|
||||
var mld_key = the_key;
|
||||
var this_mld = mld.func_enabled_melding(mld_key);
|
||||
user.auth_required_or_abort(this_mld.canChange); // Geen wijzigingen toestaan bij onvoldoende rechten.
|
||||
|
||||
model_issues._pre_analyze_fields(params, jsondata);
|
||||
var fields = api2.update_fields(params, model_issues, jsondata); // Build updater
|
||||
model_issues._analyze_fields(fields, params, jsondata);
|
||||
model_issues._validate_fields(fields, params, jsondata);
|
||||
|
||||
var wheres = [" mld_melding_key = " + mld_key];
|
||||
var mldUpd = buildTrackingUpdate("mld_melding", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
|
||||
// Alle gegevens bijwerken.
|
||||
var sql = "BEGIN "
|
||||
+ mldUpd.sql + ";"
|
||||
+ " END;";
|
||||
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
params.data.module = "MLD"; // model_notes moet weten bij wekle module de notes horen.
|
||||
var mldtrack = api2.process_includes(params, model_issues, jsondata, mld_key);
|
||||
|
||||
// update nog tracken
|
||||
if (mld_key > 0)
|
||||
{
|
||||
shared.trackaction("MLDUPD",
|
||||
mld_key,
|
||||
L("lcl_mld_is_mldupdtrack").format(mld_key) + (mldUpd.trackarray.length > 0? "\n" : "") + mldUpd.trackarray.join("\n"));
|
||||
};
|
||||
|
||||
return { key: mld_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata) /* new call */
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
params.isNew = true;
|
||||
model_issues._pre_analyze_fields(params, jsondata);
|
||||
|
||||
var this_mld = mld.func_enabled_mld(params.data.mld_ins_discipline_key, "D");
|
||||
user.auth_required_or_abort(this_mld.canFEwrite || this_mld.canFOwrite);
|
||||
//
|
||||
var fields = api2.update_fields(params, model_issues, jsondata); // Build updater
|
||||
model_issues._analyze_fields(fields, params, jsondata);
|
||||
model_issues._validate_fields(fields, params, jsondata);
|
||||
|
||||
fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: (params.data.alg_onroerendgoed_keys==-1 ? null : params.data.alg_onroerendgoed_keys) });
|
||||
fields.push({ dbs: "mld_meldbron_key", typ: "key", val: S("mld_meldbron_key") });
|
||||
fields.push({ dbs: "mld_melding_module", typ: "varchar", val: "MLD" });
|
||||
fields.push({ dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" });
|
||||
|
||||
var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true });
|
||||
var new_key = mldIns.sequences["mld_melding_key"];
|
||||
var sql = "BEGIN "
|
||||
+ mldIns.sql + ";"
|
||||
+ "END;";
|
||||
Oracle.Execute(mldIns.sql);
|
||||
|
||||
mld.setmeldingstatus(new_key, (params.data.mld_directklaar? 0 : 2)); // Zorgt ook voor tracking & daarmee notificatie
|
||||
|
||||
if (params.data.is_kto_antwoord) // die direct afmelden
|
||||
mld.setmeldingstatus(new_key, 5);
|
||||
|
||||
params.data.module = "MLD"; // model_notes moet weten bij wekle module de notes horen.
|
||||
|
||||
return { key: new_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete call */
|
||||
{
|
||||
// Een melding wordt niet verwijderd maar wordt afgesloten.
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
|
||||
model_issues._validate_close(params, jsondata, the_key);
|
||||
// De melding en eventuele opdrachten mogen afgemeld worden.
|
||||
|
||||
// Ik had nog graag een L("lcl_mld_final_remark") toe willen voegen aan de melding, maar er is geen jsondata bij DELETE.
|
||||
|
||||
// Eventuele opdrachten afmelden.
|
||||
for (opdr_i in params.data.canCloseOpdrOfMld)
|
||||
{
|
||||
mld.setopdrachtstatus(canCloseOpdrOfMld[opdr_i], 6); // Technisch voltooid (TV) (Afgemeld)
|
||||
}
|
||||
|
||||
// De melding zelf afmelden.
|
||||
mld.setmeldingstatus(the_key, 5);
|
||||
}
|
||||
}
|
||||
%>
|
||||
195
APPL/API2/model_notes.inc
Normal file
195
APPL/API2/model_notes.inc
Normal file
@@ -0,0 +1,195 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_notes.inc
|
||||
|
||||
Description: notes model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Dummy placeholder
|
||||
*/
|
||||
|
||||
/*
|
||||
alle notes in 1 view
|
||||
CREATE OR REPLACE VIEW fac_v_notes
|
||||
( module, key, parent_key, writer_key, aanmaak, omschrijving)
|
||||
AS
|
||||
SELECT 'MLD'
|
||||
, mld_melding_note_key
|
||||
, mld_melding_key
|
||||
, prs_perslid_key
|
||||
, mld_melding_note_aanmaak
|
||||
, mld_melding_note_omschrijving
|
||||
FROM mld_melding_note
|
||||
UNION
|
||||
SELECT 'ORD'
|
||||
, mld_opdr_note_key
|
||||
, mld_opdr_key
|
||||
, prs_perslid_key
|
||||
, mld_opdr_note_aanmaak
|
||||
, mld_opdr_note_omschrijving
|
||||
FROM mld_opdr_note
|
||||
UNION
|
||||
SELECT 'FIN'
|
||||
, fin_factuur_note_key
|
||||
, fin_factuur_key
|
||||
, prs_perslid_key
|
||||
, fin_factuur_note_aanmaak
|
||||
, fin_factuur_note_omschrijving
|
||||
FROM fin_factuur_note
|
||||
UNION
|
||||
SELECT 'CNT'
|
||||
, cnt_contract_note_key
|
||||
, cnt_contract_key
|
||||
, prs_perslid_key
|
||||
, cnt_contract_note_aanmaak
|
||||
, cnt_contract_note_omschrijving
|
||||
FROM cnt_contract_note
|
||||
UNION
|
||||
SELECT 'PRJ'
|
||||
, prj_scenario_note_key
|
||||
, prj_scenario_key
|
||||
, prs_perslid_key
|
||||
, prj_scenario_note_aanmaak
|
||||
, prj_scenario_note_omschrijving
|
||||
FROM prj_scenario_note
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../mld/mld.inc" -->
|
||||
<!-- #include file="model_objects.inc"-->
|
||||
<%
|
||||
|
||||
model_notes =
|
||||
{
|
||||
module: "FAC",
|
||||
table: "fac_v_notes",
|
||||
primary: "key",
|
||||
records_name: "notes",
|
||||
record_name: "note",
|
||||
fields: [{ name: "id", dbs: "key", typ: "key", filter: "exact" },
|
||||
{ name: "writer", dbs: "writer_key", typ: "key", foreign: "prs_perslid", filter: "exact" },
|
||||
{ name: "description", dbs: "omschrijving", typ: "varchar", filter: "like" },
|
||||
{ name: "createdate", dbs: "aanmaak", typ: "datetime" }
|
||||
// { name: "module", dbs: "module", typ: "varchar", filter: "exact" }
|
||||
// { name: "parent", dbs: "parent_key", typ: "key", filter: "exact" } //niet terug linken
|
||||
],
|
||||
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
_getNoteTable: function (module)
|
||||
{
|
||||
var tabel = {}; // De tabel met notes die aangepast moet worden.
|
||||
switch (module)
|
||||
{
|
||||
case "MLD":
|
||||
{ tabel.naam = "mld_melding_note";
|
||||
tabel.seq = "mld_s_mld_melding_note_key";
|
||||
tabel.parent = "mld_melding";
|
||||
break;
|
||||
}
|
||||
case "ORD":
|
||||
{ tabel.naam = "mld_opdr_note";
|
||||
tabel.seq = "mld_s_mld_opdr_note_key";
|
||||
tabel.parent = "mld_opdr";
|
||||
break;
|
||||
}
|
||||
case "FIN":
|
||||
{ tabel.naam = "fin_factuur_note";
|
||||
tabel.seq = "fin_s_fin_factuur_note_key";
|
||||
tabel.parent = "fin_factuur";
|
||||
break;
|
||||
}
|
||||
case "CNT":
|
||||
{ tabel.naam = "cnt_contract_note";
|
||||
tabel.seq = "cnt_s_cnt_contract_note_key";
|
||||
tabel.parent = "cnt_contract";
|
||||
break;
|
||||
}
|
||||
case "PRJ":
|
||||
{ tabel.naam = "prj_scenario_note";
|
||||
tabel.seq = "prj_s_prj_scenario_note_key";
|
||||
tabel.parent = "prj_scenario";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return tabel;
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var query = api2.sqlfields(params, model_notes );
|
||||
var wheres = api2.sqlfilter(params, model_notes);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ (params.filter.id || params.filter.parent ? " WHERE " + query.wheres.join(" AND " ) : "");
|
||||
|
||||
var json = api2.sql2json (params, sql, model_notes );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update note */
|
||||
{
|
||||
// Een note kan alleen worden aangepast door de persoon die hem geschreven heeft.
|
||||
// Alleen van de meest recente note bij een (melding/opdrachte/...) kan de omschrijving worden aangepast.
|
||||
//
|
||||
var fields = api2.update_fields(params, model_notes, jsondata); // Build updater
|
||||
|
||||
var xxx_tabel = model_notes._getNoteTable(params.data.module); // De tabel met notes die aangepast moet worden.
|
||||
// Wijzig de veldnamen overeenkomstig de te gebruiken tabel
|
||||
for (i in fields)
|
||||
{
|
||||
if (fields[i].dbs == "writer_key")
|
||||
fields[i].dbs = "prs_perslid_key";
|
||||
else
|
||||
fields[i].dbs = xxx_tabel.naam + "_" + fields[i].dbs;
|
||||
}
|
||||
var wheres = [ xxx_tabel.naam+"_key = " + the_key];
|
||||
var xxxUpd = buildTrackingUpdate(xxx_tabel.naam, wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
|
||||
Oracle.Execute(xxxUpd.sql);
|
||||
|
||||
return { key: the_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata) /* new note */
|
||||
{
|
||||
params.isNew = true;
|
||||
//
|
||||
var xxx_tabel = model_notes._getNoteTable(params.data.module); // De tabel met notes die aangepast moet worden.
|
||||
var fields = [];
|
||||
fields.push({ dbs: "prs_perslid_key", typ: "key", val: user_key });
|
||||
fields.push({ dbs: xxx_tabel.parent+"_key", typ: "key", val: params.filter.id });
|
||||
fields.push({ dbs: xxx_tabel.naam+"_aanmaak", typ: "datetime", val: new Date() });
|
||||
fields.push({ dbs: xxx_tabel.naam+"_omschrijving", typ: "varchar", val: jsondata.description });
|
||||
fields.push({ dbs: xxx_tabel.naam+"_key", typ: "key", seq: xxx_tabel.seq });
|
||||
|
||||
var xxxIns = buildInsert(xxx_tabel.naam, fields, { noValidateToken: true });
|
||||
var new_key = xxxIns.sequences[xxx_tabel.naam];
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ xxxIns.sql + ";"
|
||||
+ "END;";
|
||||
Oracle.Execute(xxxIns.sql);
|
||||
|
||||
return { key: new_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete note */
|
||||
{ // Niet van toepassing.
|
||||
}
|
||||
}
|
||||
%>
|
||||
Reference in New Issue
Block a user