diff --git a/APPL/API2/api2.inc b/APPL/API2/api2.inc index 5db5ca806b..0caca7032e 100644 --- a/APPL/API2/api2.inc +++ b/APPL/API2/api2.inc @@ -310,6 +310,12 @@ api2 = { return wheres; }, + // Als er voor een veldnaam een alias moet worden gebruikt, doe het dan op deze manier. + sqlfield_alias: function _sqlfield_alias(model, field) + { + return model.aliasprefix + (field.dbs == model.primary ? field.dbs : field.name); + }, + // Bepaal bij een GET welke velden op te halen sqlfields: function _sqlfields(params, model) { @@ -329,16 +335,17 @@ api2 = { if (field.sql) { if (model.aliasprefix) - dbs = model.aliasprefix + dbs; + dbs = model.aliasprefix + field.name; selects.push(field.sql + " AS " + dbs); } else if (dbs) { + // veldnamen moeten gelijk zijn bij het ophalen. Zie ook: sql2jsonval if (dbs.indexOf(".") < 0) { dbs = model.table + "." + dbs; if (model.aliasprefix) - dbs += " AS " + model.aliasprefix + field.dbs; + dbs += " AS " + api2.sqlfield_alias(model, field); } selects.push(dbs); } @@ -553,7 +560,10 @@ __Log("newval="+newval); if (field.val instanceof Function) var val = field.val(oRs, field, model); else if (field.dbs.indexOf(".") < 0) - var val = oRs(model.aliasprefix + field.dbs).Value; + { + var sqlfieldname = (model.aliasprefix ? api2.sqlfield_alias(model, field) : field.dbs); + var val = oRs(sqlfieldname).Value; + } else var val = oRs(field.dbs.split(".")[1]).Value; if (field.typ == "date" && (val != null)) @@ -644,7 +654,6 @@ __Log("newval="+newval); continue; record[field.name] = val; } - if (params.include && model.includes) { for (var i in params.include) // welke includes worden opgevraagd? diff --git a/APPL/API2/api_invoicelines.asp b/APPL/API2/api_invoicelines.asp new file mode 100644 index 0000000000..bf6b0309c0 --- /dev/null +++ b/APPL/API2/api_invoicelines.asp @@ -0,0 +1,27 @@ +<%@ language = "JavaScript" %> +<% /* + $Revision$ + $Id$ + + File: api_invoicelines.asp + + Description: FIN_FACTUURREGEL API + Parameters: + Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen + + Notes: +*/ + DOCTYPE_Disable = true; + ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf + THIS_FILE = "appl/api/api_invoicelines.asp"; + +// Session("logging")=1; + +%> + + + + +<% + api2.process(model_invoicelines); +%> \ No newline at end of file diff --git a/APPL/API2/api_invoices.asp b/APPL/API2/api_invoices.asp new file mode 100644 index 0000000000..ce6f7d5c4e --- /dev/null +++ b/APPL/API2/api_invoices.asp @@ -0,0 +1,27 @@ +<%@ language = "JavaScript" %> +<% /* + $Revision$ + $Id$ + + File: api_invoices.asp + + Description: FIN_FACTUUR API + Parameters: + Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen + + Notes: +*/ + DOCTYPE_Disable = true; + ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf + THIS_FILE = "appl/api/api_invoices.asp"; + +// Session("logging")=1; + +%> + + + + +<% + api2.process(model_invoices); +%> \ No newline at end of file diff --git a/APPL/API2/api_issues.asp b/APPL/API2/api_issues.asp new file mode 100644 index 0000000000..a9e8e3ab4d --- /dev/null +++ b/APPL/API2/api_issues.asp @@ -0,0 +1,27 @@ +<%@ language = "JavaScript" %> +<% /* + $Revision$ + $Id$ + + File: api_issues.asp + + Description: MLD_MELDING API + Parameters: + Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen + + Notes: +*/ + DOCTYPE_Disable = true; + ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf + THIS_FILE = "appl/api/api_issues.asp"; + +// Session("logging")=1; + +%> + + + + +<% + api2.process(model_issues); +%> \ No newline at end of file diff --git a/APPL/API2/model_invoicelines.inc b/APPL/API2/model_invoicelines.inc new file mode 100644 index 0000000000..4a2e24d5dc --- /dev/null +++ b/APPL/API2/model_invoicelines.inc @@ -0,0 +1,230 @@ +<% /* + $Revision$ + $Id$ + + File: model_invoicelines.inc + + Description: Factuurregel model. Dit bestand heeft niets met interfacing te maken + maar werkt uitsluitend op JSON-data + Parameters: + Context: + + Notes: TODO: autorisaties voor scope=fo|bo + TODO on demand: PUT/POST/DELETE +*/ + +%> + + +<% + +model_invoicelines = +{ + module: "FIN", + table: "fin_factuurregel", + primary: "fin_factuurregel_key", + records_name: "invoicelines", + record_name: "invoiceline", + fields: [{ name: "id", dbs: "fin_factuurregel_key", typ: "key", filter: "exact" }, + { name: "name", dbs: "fin_factuurregel_omschrijving", typ: "varchar", track: L("lcl_descr"), filter: "like" }, + { name: "line", dbs: "fin_factuurregel_nr", typ: "number" }, + { name: "total", dbs: "fin_factuurregel_totaal", typ: "float", track: L("lcl_fin_total_sum_exBTW") }, + { name: "vat", dbs: "fin_factuurregel_btw", typ: "float", track: L("lcl_fin_total_sum_inBTW") }, + { name: "reference", dbs: "fin_factuurregel_referentie", typ: "varchar", track: L("lcl_location"), filter: "like" }, + { name: "vatvalue", dbs: "fin_btwtabelwaarde_key", typ: "key", foreign: "fin_btwtabelwaarde", track: L("lcl_fin_btwtarief"), filter: "exact" }, + { name: "costtype", dbs: "prs_kostensoort_key", typ: "key", foreign: "prs_kostensoort", track: L("lcl_shared_charge_type"), filter: "exact" } + // niet terug linken{ name: "factuur", dbs: "fin_factuur_key", typ: "key", foreign: "fac_factuur", filter: "exact" } + ], + + _pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata, common voor PUT en POST */ + { + delete jsondata.line; // factuurregelnummer niet door de gebruiker laten zetten. + }, + + _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 er geen bedrag en omschrijving is ingevuld, dan de factuurregel verwijderen of niet toevoegen + }, + + _synchronize_totals_sql: function (factuur_key) + { + // Redundante info bijwerken. Door dat hier te doen hebben we redelijk consistentie-garantie. + var sql = " UPDATE fin_factuur ff" + + " SET fin_factuur_totaal = (SELECT SUM(fin_factuurregel_totaal)" + + " FROM fin_factuurregel fr" + + " WHERE fr.fin_factuur_key = ff.fin_factuur_key)" + + " , fin_factuur_totaal_btw = (SELECT SUM(fin_factuurregel_btw)" + + " FROM fin_factuurregel fr" + + " WHERE fr.fin_factuur_key = ff.fin_factuur_key)" + + " WHERE fin_factuur_key = " + factuur_key; + return sql; + }, + + _renumber_invoicelines_sql: function (factuur_key) + { + // Regels hernummeren zodat ze weer opeenvolgend zijn. + var sql = "UPDATE fin_factuurregel" + + " SET fin_factuurregel_nr = ROWNUM" + + " WHERE fin_factuur_key = " + factuur_key; + return sql; + }, + + + REST_GET: function _GET(params) + { + var scope = getQParamSafe("scope", "fe"); + var autfunction = { fe : "WEB_FINUSE", fo : "WEB_FINFOF", bo : "WEB_FINBOF" } [scope]; + params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch + var query = api2.sqlfields(params, model_invoicelines ); + + var parentexists = ["f.fin_factuur_verwijder IS NULL"]; + + if (scope == "fe") + { + parentexists.push("f.prs_perslid_key_user=" + user_key); + } + else + { + // TODO: disc3d conditie voor de geldendende autfunction toevoegen + } + + if (!params.filter.id) + { + parentexists.push("fin_factuur_datum > SYSDATE - 30"); + } + + if (parentexists.length) + { + var sqlparent = " EXISTS (SELECT 1" + + " FROM fin_factuur f" + + " WHERE f.fin_factuur_key = fin_factuurregel.fin_factuur_key" + + " AND " + parentexists.join(" AND ") + ")"; + query.wheres.push(sqlparent); + } + + var wheres = api2.sqlfilter(params, model_invoicelines); + query.wheres = query.wheres.concat(wheres); + + var sql = "SELECT " + query.selects.join(", ") + + " FROM " + query.tables.join(", ") + + " WHERE " + query.wheres.join(" AND " ) + + " ORDER BY fin_factuurregel_nr"; + var json = api2.sql2json (params, sql, model_invoicelines ); + + return json; + }, + + REST_PUT: function (params, jsondata, the_key) /* update invoiceline */ + { + var finregel_key = the_key; + + model_invoicelines._pre_analyze_fields(params, jsondata); + var fields = api2.update_fields(params, model_invoicelines, jsondata); // Build updater + model_invoicelines._analyze_fields(fields, params, jsondata); + model_invoicelines._validate_fields(fields, params, jsondata); + // + var sql = "SELECT fin_factuur_key" + + " FROM fin_factuurregel" + + " WHERE fin_factuurregel_key = " + finregel_key; + var oRs = Oracle.Execute(sql); + var fin_factuur_key = oRs("fin_factuur_key").value; + oRs.Close(); + + var wheres = [" fin_factuurregel_key = " + finregel_key]; + var finUpd = buildTrackingUpdate("fin_factuurregel", wheres.join(" AND " ), fields, { noValidateToken: true }); + + var sql = "BEGIN " + + finUpd.sql + ";" + + model_invoicelines._synchronize_totals_sql(fin_factuur_key) + ";" + + "END;"; + var err = Oracle.Execute(sql, true); + if (err.friendlyMsg) + abort_with_warning(err.friendlyMsg); + + return { key: finregel_key }; + }, + + REST_POST: function (params, jsondata, parent_key) /* new invoiceline */ + { + params.isNew = true; + var trackarray = []; + var factuur_key = parent_key; + var this_fin = fin.func_enabled_factuur(factuur_key); // Wat heb ik zoal aan rechten op deze specifieke factuur + + model_invoicelines._pre_analyze_fields(params, jsondata); + var fields = api2.update_fields(params, model_invoicelines, jsondata); // Build updater + model_invoicelines._analyze_fields(fields, params, jsondata); + model_invoicelines._validate_fields(fields, params, jsondata); + + // Zet volgnummer van de nieuwe factuurregel. + var sql = "SELECT MAX(fin_factuurregel_nr) volgnr" + + " FROM fin_factuurregel" + + " WHERE fin_factuur_key = " + factuur_key; + var oRs = Oracle.Execute(sql); + var volgnr = oRs("volgnr").value + 1; + oRs.Close(); + + fields.push({ dbs: "fin_factuur_key", typ: "key", val: factuur_key }); + fields.push({ dbs: "fin_factuurregel_key", typ: "key", seq: "fin_s_fin_factuurregel_key" }); + fields.push({ dbs: "fin_factuurregel_nr", typ: "number", val: volgnr }); + + var finIns = buildInsert("fin_factuurregel", fields, { noValidateToken: true }); + var factuurregel_key = finIns.sequences["fin_factuurregel_key"]; + + var sql = "BEGIN " + + finIns.sql + ";" + + model_invoicelines._synchronize_totals_sql(factuur_key) + ";" + + "END;"; + var err = Oracle.Execute(sql, true); + if (err.friendlyMsg) + abort_with_warning(err.friendlyMsg); + + // Tracking toevoegen. + trackarray.push(L("lcl_fin_invoicerow_add") + ": " + safe.quoted_sql(jsondata.name) + "/" + jsondata.total); + shared.trackaction("FINNEW", factuur_key, trackarray.join("\n")); + + // + params.isNew = false; // Voorkom dat een volgende invoicelines ook een insert wordt. + return { key: factuurregel_key }; + }, + + REST_DELETE: function (params, the_key) /* delete invoiceline */ + { + var trackarray = []; + var factuurregel_key = the_key; + + var sql = "SELECT fin_factuur_key" + + " , fin_factuurregel_omschrijving" + + " , fin_factuurregel_totaal" + + " FROM fin_factuurregel" + + " WHERE fin_factuurregel_key = " + factuurregel_key; + var oRs = Oracle.Execute(sql); + var factuur_key = oRs("fin_factuur_key").value; + var desc = oRs("fin_factuurregel_omschrijving").value; + var total = oRs("fin_factuurregel_totaal").value; + oRs.Close(); + + var this_fin = fin.func_enabled_factuur(factuur_key); + user.auth_required_or_abort(this_fin.canDelete); + + // Alleen bij voldoende rechten op de factuur kan een factuurregel worden verwijderd. + trackarray.push(L("lcl_fin_regel_del") + ": " + safe.quoted_sql(desc) + "/" + total); + + fin.deleteFactuurregel(factuurregel_key); + + var sql = "BEGIN " + + model_invoicelines._synchronize_totals_sql(factuur_key) + ";" + + model_invoicelines._renumber_invoicelines_sql(factuur_key) + ";" + + "END;" + var err = Oracle.Execute(sql, true); + if (err.friendlyMsg) + abort_with_warning(err.friendlyMsg); + else + shared.trackaction("FINDEL", factuurregel_key, trackarray.join("\n")); + } +} +%> diff --git a/APPL/API2/model_invoices.inc b/APPL/API2/model_invoices.inc new file mode 100644 index 0000000000..414ef2b412 --- /dev/null +++ b/APPL/API2/model_invoices.inc @@ -0,0 +1,189 @@ +<% /* + $Revision$ + $Id$ + + File: model_invoices.inc + + Description: Factuur model. Dit bestand heeft niets met interfacing te maken + maar werkt uitsluitend op JSON-data + Parameters: + Context: + + Notes: TODO: definitieve naamgeving bepalen + TODO: autorisaties voor scope=fo|bo + TODO on demand: PUT/POST/DELETE +*/ + +%> + + + +<% + +model_invoices = +{ + module: "FIN", + table: "fin_factuur", + primary: "fin_factuur_key", + records_name: "invoices", + record_name: "invoice", + + // Dit zijn voorlopige namen! Weet niet zeker of dit factuur_nr (intern/extern?) de juist is als name + fields: [{ name: "id", dbs: "fin_factuur_key", typ: "key", filter: "exact" }, + { name: "invoicedate", dbs: "fin_factuur_datum", typ: "datetime", track: L("lcl_fin_findate") }, + // uitvoerende + // referentietype + // referentie +// { name: "invoicenr", dbs: "fin_factuur_nr", typ: "varchar", track: L("lcl_fin_invoice_nr_extern"), filter: "exact" }, + { name: "name", dbs: "fin_factuur_nr", typ: "varchar", track: L("lcl_fin_invoice_nr_extern"), filter: "exact" }, + { name: "order", dbs: "mld_opdr_key", typ: "key", foreign: "mld_opdr" }, + { name: "contract", dbs: "cnt_contract_key", typ: "key", foreign: "cnt_contract" }, + { name: "besorder", dbs: "bes_bestelopdr_key", typ: "key", foreign: "bes_bestelopdr" }, + { name: "total", dbs: "fin_factuur_totaal", typ: "float", track: L("lcl_fin_totaal_bedrag") }, + { name: "vat", dbs: "fin_factuur_totaal_btw", typ: "float", track: L("lcl_fin_totaal_bedrag_btw") }, + { name: "status", dbs: "fin_factuur_statuses_key", typ: "key", foreign: fin.getfinstatustext, track: L("lcl_fin_fin_status"), filter: "exact" }, + { name: "month", dbs: "fin_factuur_boekmaand", typ: "varchar", track: L("lcl_fin_divide_period"), filter: "exact" }, + { name: "reference", dbs: "fin_factuur_debiteur_nr", typ: "varchar", track: L("lcl_fin_debtor_nr"), filter: "exact" }, + // budgethouder via kostenplaats + // kostenplaats via het gerefereerde item + { name: "costtype", dbs: "prs_kostensoort_key", typ: "key", foreign: "prs_kostensoort", track: L("lcl_shared_charge_type"), filter: "exact" }, + { name: "contact", dbs: "prs_perslid_key_user", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_name"), filter: "exact" }, + { name: "remark", dbs: "fin_factuur_opmerking", typ: "varchar", track: L("lcl_fin_remark") } + ], + includes: {"invoicelines": { model: model_invoicelines, + joinfield: "fin_factuur_key" + } + }, + + _pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata, common voor PUT en POST */ + { + // De factuurbedragen worden berekend uit de factuurregels. Eventuele waarden die hier gezet zijn negeren. + delete jsondata.total; + delete jsondata.vat; + + // Status van 3 (foute import) moet bij saven op 2 worden gezet. + var fin_status_key = jsondata.invoice.status; + if (fin_status_key == 3) fin_status_key = 2; + + // Status 6 (Akkoord) moet bij saven op 2 (Ingevoerd) worden gezet. Factuur dient indien nodig weer gefiatteerd te worden. + if (fin_status_key == 6) fin_status_key = 2; + + jsondata.invoice.status = fin_status_key; + }, + + _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 */ + { + }, + + REST_GET: function _GET(params) + { + var scope = getQParamSafe("scope", "fe"); + var autfunction = { fe : "WEB_FINUSE", fo : "WEB_FINFOF", bo : "WEB_FINBOF" } [scope]; + params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch + + // TODO: Add authorization + var query = api2.sqlfields(params, model_invoices ); + query.wheres.push("fin_factuur_verwijder IS NULL"); + + if (scope == "fe") + { + query.wheres.push("prs_perslid_key_user=" + user_key); + } + else + { + // TODO: disc3d conditie voor de geldendende autfunction toevoegen + } + + if (!params.filter.id) + { + query.wheres.push("fin_factuur_datum > SYSDATE - 30"); // ff beperken tot recente stuff + } + var wheres = api2.sqlfilter(params, model_invoices); + query.wheres = query.wheres.concat(wheres); + + var sql = "SELECT " + query.selects.join(", ") + + " FROM " + query.tables.join(", ") + + " WHERE " + query.wheres.join(" AND " ) + + " ORDER BY fin_factuur_key"; + var json = api2.sql2json (params, sql, model_invoices ); + + return json; + }, + + REST_PUT: function (params, jsondata, the_key) /* update call */ + { + var fin_key = the_key; + model_invoices._pre_analyze_fields(params, jsondata); + var fields = api2.update_fields(params, model_invoices, jsondata); // Build updater + model_invoices._analyze_fields(fields, params, jsondata); + model_invoices._validate_fields(fields, params, jsondata); + // + var wheres = [" fin_factuur_key = " + fin_key]; + wheres.push(user_key + " = prs_perslid_key_user"); // Altijd fe vooralnog + var finUpd = buildTrackingUpdate("fin_factuur", wheres.join(" AND " ), fields, { noValidateToken: true }); + var err = Oracle.Execute(finUpd.sql, true); + if (err.friendlyMsg) + abort_with_warning(err.friendlyMsg); + + var fintrack = api2.process_includes(params, model_invoices, jsondata, the_key); + + // update nog tracken + if (fin_key > 0) + { + shared.trackaction("FINUPD", + fin_key, + L("lcl_fin_is_finupdtrack").format(fin_key) + (finUpd.trackarray.length > 0? "\n" : "") + finUpd.trackarray.join("\n")); + }; + + return { key: fin_key }; + }, + + REST_POST: function (params, jsondata) /* new invoice */ + { + params.isNew = true; + model_invoices._pre_analyze_fields(params, jsondata); + var fields = api2.update_fields(params, model_invoices, jsondata); // Build updater + model_invoices._analyze_fields(fields, params, jsondata); + model_invoices._validate_fields(fields, params, jsondata); + + fields.push({ dbs: "fin_factuur_key", typ: "key", seq: "fin_s_fin_factuur_key" }); + var finIns = buildInsert("fin_factuur", fields, { noValidateToken: true} ); + var factuur_key = finIns.sequences["fin_factuur_key"]; + + var sql = "BEGIN " + + finIns.sql +";" + + "END;"; + + var err = Oracle.Execute(sql, true); + if (err.friendlyMsg) + abort_with_warning(err.friendlyMsg); + + var fintrack = api2.process_includes(params, model_invoices, jsondata, factuur_key); + + shared.trackaction("FINNEW", factuur_key); + + return { key: factuur_key }; + }, + + REST_DELETE: function (params, the_key) /* delete invoice */ + { + var factuur_key = params.filter.id; + + var this_fin = fin.func_enabled_factuur(factuur_key); + user.auth_required_or_abort(this_fin.canDelete); + if (this_fin.canDelete) // Dubbel op: bij canDelete=false komt hij hier niet meer. + { + // Verwijderdatum van de factuur zetten en niet fysiek verwijderen + var sql = "UPDATE fin_factuur" + + " SET fin_factuur_verwijder = SYSDATE" + + " WHERE fin_factuur_verwijder IS NULL" + + " AND fin_factuur_key = " + factuur_key; + oRs = Oracle.Execute(sql); + } + } +} +%> \ No newline at end of file diff --git a/APPL/API2/model_issues.inc b/APPL/API2/model_issues.inc new file mode 100644 index 0000000000..9c22e61b32 --- /dev/null +++ b/APPL/API2/model_issues.inc @@ -0,0 +1,142 @@ +<% /* + $Revision$ + $Id$ + + File: model_issues.inc + + Description: Melding model. Dit bestand heeft niets met interfacing te maken + maar werkt uitsluitend op JSON-data + Parameters: + Context: + + Notes: TODO: definitieve naamgeving bepalen + TODO: autorisaties voor scope=fo|bo + TODO on demand: PUT/POST/DELETE + TODO floor referentie levert id/code ipv id/name. Waar zit dat?? +*/ + +%> + + + + +<% + +model_issues = +{ + module: "MLD", + table: "mld_melding", + primary: "mld_melding_key", + 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: "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: "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" }, + { name: "account", dbs: "prs_kostenplaats_key", typ: "key", foreign: "prs_kostenplaats", track: L("lcl_account"), filter: "exact" }, + { name: "handler", dbs: "mld_melding_behandelaar_key", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_behandelaar"), filter: "exact" }, + { name: "location", dbs: "mld_alg_locatie_key", typ: "key", foreign: "alg_locatie", track: L("lcl_location"), filter: "exact" }, + { name: "building", dbs: "alg_v_allonroerendgoed.alg_gebouw_key", typ: "key", foreign: "alg_gebouw", track: L("lcl_building"), filter: "exact" }, + { name: "floor", dbs: "alg_v_allonroerendgoed.alg_verdieping_key", typ: "key", foreign: "alg_verdieping", track: L("lcl_floor"), filter: "exact" }, + { name: "room", dbs: "alg_v_allonroerendgoed.alg_ruimte_key", typ: "key", foreign: "alg_ruimte", track: L("lcl_room"), filter: "exact" }, + { 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 + //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"; + } + } + }, + + REST_GET: function _GET(params) + { + 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); + // Hier kom je niet terecht als bovenstaande autorisatiecheck niet tot succes leidt. + + // TODO: Add authorization + var query = api2.sqlfields(params, model_issues ); + + if (scope == "fe") + { + query.wheres.push("prs_perslid_key=" + user_key); + } + else + { + // TODO: disc3d conditie voor de geldendende autfunction toevoegen + // TODO: disc3d conditie voor de geldendende autfunction toevoegen + // TODO: disc3d conditie voor de geldendende autfunction toevoegen + // TODO: disc3d conditie voor de geldendende autfunction toevoegen + } + + if (!params.filter.id) + { + query.wheres.push("mld_melding_datum > SYSDATE - 30"); // ff beperken tot recente stuff + } + + /* we need the prefix for the name */ + query.tables.push("mld_stdmelding"); + query.wheres.push("mld_melding.mld_stdmelding_key = mld_stdmelding.mld_stdmelding_key"); + query.tables.push("ins_tab_discipline"); + query.wheres.push("mld_stdmelding.mld_ins_discipline_key = ins_tab_discipline.ins_discipline_key"); + query.tables.push("ins_srtdiscipline"); + query.wheres.push("ins_tab_discipline.ins_srtdiscipline_key = ins_srtdiscipline.ins_srtdiscipline_key"); + + query.tables.push("alg_v_allonroerendgoed"); + query.wheres.push("mld_alg_onroerendgoed_keys = alg_v_allonroerendgoed.alg_onroerendgoed_keys(+)"); + + + + var wheres = api2.sqlfilter(params, model_issues); + query.wheres = query.wheres.concat(wheres); + + var sql = "SELECT " + query.selects.join(", ") + + " FROM " + query.tables.join(", ") + + " WHERE " + query.wheres.join(" AND " ) + + " ORDER BY mld_melding_key"; + + var json = api2.sql2json (params, sql, model_issues ); + + return json; + }, + _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 */ + { + }, + + REST_PUT: function (params, jsondata, the_key) /* update call */ + { + }, + REST_POST: function (params, jsondata) /* new call */ + { + }, + + REST_DELETE: function (params, jsondata, the_key) /* delete call */ + { + } +} +%> \ No newline at end of file