diff --git a/APPL/API2/api2.inc b/APPL/API2/api2.inc index 0730d8013a..5341e6d2ad 100644 --- a/APPL/API2/api2.inc +++ b/APPL/API2/api2.inc @@ -258,6 +258,9 @@ api2 = { */ normalize: function _normalize(model) { + if (model.parent_key in model.fields) + abort_with_warning("parent_key '{0}' should not be defined in fields".format(model.parent_key)); + if (!model.fields.length) return; // het is al een hash var newfields = {}; @@ -801,7 +804,10 @@ __DoLogj(typeof newval) val = { id: val }; val.name = name; } - if (val !== null && (field.LOV)) +// if (field.typ == 'check' && !field.LOV) +// field.LOV = "0;" + L("lcl_No") + ";1;" + L("lcl_Yes"); + + if (val !== null && field.LOV) { var spl = api2.splitLOV(field.LOV); val = { id: val, name: spl[val] }; @@ -831,7 +837,7 @@ __DoLogj(typeof newval) var spl = api2.splitLOV(LOV); var options = []; for (var l in spl) - options.push(""); + options.push(""); return ""; }, sql2jsonfields: function (oRs, model) @@ -1297,6 +1303,11 @@ __DoLogj(typeof newval) value = jsondataobject; } return value; + }, + generic_REST: function(model) + { + model.REST_GET = generic_REST_GET(model); + model.REST_PUT = generic_REST_PUT(model); } } @@ -1323,6 +1334,56 @@ function RequestJSON() return { json: vraag }; } +function generic_REST_GET(model) +{ + user.checkAutorisation(model.autfunction); // Als je zelfs geen readrechten hebt ben je heel fout bezig + + return function(params, jsondata) + { + var query = api2.sqlfields(params, model); + + var wheres = api2.sqlfilter(params, model); + query.wheres = query.wheres.concat(wheres); + + if (model.soft_delete && params.filter.show_deleted != "on") + query.wheres.push(model.soft_delete + " IS NULL"); + + var maxcnt = getQParamInt("showall", 0) == 1?S("qp_maxrows2"):S("qp_maxrows"); + query.wheres.push("ROWNUM <= " + maxcnt + 1); // Eentje extra om overflow-melding te triggeren in resultsettable + + var sql = "SELECT " + query.selects.join(", ") + + " FROM " + query.tables.join(", ") + + (query.wheres.length ? " WHERE " + query.wheres.join(" AND " ) : "") + + " ORDER BY " + (model.fields.name?model.fields.name.dbs:model.fields.id.dbs); + + var json = api2.sql2json (params, sql, model); + return json; + } +} + +function generic_REST_PUT(model) +{ + var autparams = user.checkAutorisation(model.autfunction, true); + if (!autparams || autparams.PRSwritelevel == 9 || autparams.ALGwritelevel == 9) + return false; + + return function(params, jsondata, the_key) + { + abort_with_warning("generic update not supported yet"); + + var fields = api2.update_fields(params, model, jsondata); + var wheres = [model.id.dbs + " = " + the_key]; + var xxxUpd = buildTrackingUpdate(model.table, wheres.join(" AND " ), fields, { noValidateToken: true }); + // TODO: Generieke tracking? + + var err = Oracle.Execute(xxxUpd.sql, true); + if (err.friendlyMsg) + abort_with_warning(err.friendlyMsg); + + return { key: the_key, warning: "" }; + } +} + function RequestXML() { try @@ -1385,4 +1446,15 @@ function _get_ParamISODate(pColl, pName, defVal) // Error message will get to client and/or IIS logfiles eval("INTERNAL_ERROR_PARAMETER_" + pName + "_IS_NOT_ISODATE"); } + +// Backwards compatible FACMGT_LCL +var __F = []; +function F(tekst) +{ + if (!__F.length) + { + // TODO: Inlezen uit FAC_LOCALE_MGT, zoek op vbLCL + } + return tekst; +} %> \ No newline at end of file diff --git a/APPL/API2/model_generic.inc b/APPL/API2/model_generic.inc index 5eb26da0a2..4874976878 100644 --- a/APPL/API2/model_generic.inc +++ b/APPL/API2/model_generic.inc @@ -10,8 +10,6 @@ Notes: */ -%> -<% model_generic_template = { @@ -22,41 +20,8 @@ model_generic_template = fields: {}, list: { columns: [] }, soft_delete: null, + autfunction: "WEB_PRSSYS", - _check_authorization: function(params, method) - { - params.message = ""; - var autfunction = "WEB_PRSSYS"; - params.authparams = user.checkAutorisation(autfunction); - }, - - _analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */ - { - }, - - - REST_GET: function _GET(params, jsondata) - { - model_generic_template._check_authorization(params, "GET"); - var query = api2.sqlfields(params, model_generic_template); - - var wheres = api2.sqlfilter(params, model_generic_template); - query.wheres = query.wheres.concat(wheres); - - if (model_generic_template.soft_delete && params.filter.show_deleted != "on") - query.wheres.push(model_generic_template.soft_delete + " IS NULL"); - - var maxcnt = getQParamInt("showall", 0) == 1?S("qp_maxrows2"):S("qp_maxrows"); - query.wheres.push("ROWNUM <= " + maxcnt + 1); // Eentje extra om overflow-melding te triggeren in resultsettable - - var sql = "SELECT " + query.selects.join(", ") - + " FROM " + query.tables.join(", ") - + (query.wheres.length ? " WHERE " + query.wheres.join(" AND " ) : "") - + " ORDER BY " + (model_generic_template.fields.name?model_generic_template.fields.name.dbs:model_generic_template.fields.id.dbs); - - var json = api2.sql2json (params, sql, model_generic_template); - return json; - }, REST_PUT: function (params, jsondata, the_key) /* update room */ { abort_with_warning("generic update not supported yet"); @@ -109,13 +74,14 @@ model_generic_template = } } -function model_generic(table) +function model_generic(table, autfunction) { - model_generic_template.table = table; - model_generic_template.record_name = table.substring(0,1) + table.substring(1).toLowerCase(); + model_generic_template.autfunction = autfunction; + model_generic_template.table = table.toLowerCase(); + model_generic_template.record_name = table.substring(0,1).toUpperCase() + table.substring(1); model_generic_template.records_name = model_generic_template.record_name + "s"; - var sql = "SELECT cols.column_name, cols.position, cons.status, cons.owner" + var sql = "SELECT LOWER(cols.column_name) column_name, cols.position, cons.status, cons.owner" + " FROM all_constraints cons, all_cons_columns cols" + " WHERE cols.table_name = " + safe.quoted_sql(table) + " AND cons.constraint_type = 'P'" @@ -125,7 +91,6 @@ function model_generic(table) var oRs = Oracle.Execute(sql); if (oRs.Eof) { - Session.Contents.Remove("scaffolding_table"); abort_with_warning("Unable to determine primary key for table {0}".format(table)); } @@ -133,7 +98,6 @@ function model_generic(table) oRs.MoveNext(); if (!oRs.Eof) { - Session.Contents.Remove("scaffolding_table"); abort_with_warning("Composite primary key not supported for table {0}".format(table)); } oRs.Close(); @@ -146,7 +110,7 @@ function model_generic(table) model_generic_template.last_analyzed = oRs("last_analyzed").Value; oRs.Close; - var sql = "SELECT column_name" + var sql = "SELECT LOWER(column_name) column_name" + " , data_type" + " , data_length" + " , data_precision" @@ -167,8 +131,6 @@ function model_generic(table) var ora_precision = oRs("data_precision").Value; var ora_scale = oRs("data_scale").Value; -foreignKeyTable("dummy") // force generating __foreignKeyTable - switch (ora_type) { case 'NUMBER': @@ -177,14 +139,14 @@ foreignKeyTable("dummy") // force generating __foreignKeyTable { field.datatype = 'float'; } - if (field.dbs.match(/_KEY$/)) + if (field.dbs.match(/_key$/)) { field.typ = 'key'; if (field.dbs != model_generic_template.primary && - field.dbs.replace(/_KEY$/,"") in __foreignKeyTable) // TODO ipv. de replace echt foreign-key constraint controleren + foreignKeyTable(field.dbs.replace(/_key$/,""))) // TODO ipv. de replace echt foreign-key constraint controleren { - field.foreign = field.dbs.replace(/_KEY$/,""); - field.label = field.foreign + "(_KEY)"; // indicatie dat het foreign is + field.foreign = field.dbs.replace(/_key$/,""); + field.label = field.foreign + "(_key)"; // indicatie dat het foreign is field.filter = "exact"; } } @@ -199,8 +161,12 @@ foreignKeyTable("dummy") // force generating __foreignKeyTable var fld = oRs.Fields("column_name").Value; - if (fld == table + "_VERWIJDER") - model_generic_template.soft_delete = table + "_VERWIJDER"; + if (fld == table.toLowerCase() + "_verwijder") + model_generic_template.soft_delete = table + "_verwijder"; + + // Dan zien we hem ook nergens meer? + //if (fld == table + "_AANMAAK") + // field.readonly = true; if (fld == model_generic_template.primary) { @@ -230,7 +196,10 @@ foreignKeyTable("dummy") // force generating __foreignKeyTable oRs.MoveNext(); } oRs.Close(); + + api2.generic_REST(model_generic_template); __Logj(model_generic_template); return model_generic_template; } + %> diff --git a/APPL/API2/model_reportcolumns.inc b/APPL/API2/model_reportcolumns.inc index cb4c639f84..453b357d04 100644 --- a/APPL/API2/model_reportcolumns.inc +++ b/APPL/API2/model_reportcolumns.inc @@ -19,18 +19,25 @@ model_reportcolumns = primary: "fac_usrrap_cols_key", records_name: "columns", record_name: "column", + records_title: L("lcl_rap_columns"), + record_title: L("lcl_rap_column"), parent_key: "fac_usrrap_key", + autfunction: "WEB_PRSSYS", fields: { "id" : { dbs: "fac_usrrap_cols_key", typ: "key", filter: "exact" }, + "name" : { dbs: "fac_usrrap_cols_column_name", typ: "varchar", label: L("lcl_rap_column"), insertonly: true }, + "datatype" : { dbs: "fac_usrrap_cols_datatype", typ: "varchar", label: L("lcl_rap_datatype"), insertonly: true, + LOV: L("lcl_rap_datatypeLOV")}, // "varchar;Tekst;date;Datum;float;Float;integer;Getal" "sequence" : { dbs: "fac_usrrap_cols_volgnr", typ: "number", label: L("lcl_rap_sequence") }, - "columnname": { dbs: "fac_usrrap_cols_column_name", typ: "varchar", label: L("lcl_rap_column"), insertonly: true }, "caption" : { dbs: "fac_usrrap_cols_caption", typ: "varchar", label: L("lcl_rap_caption")}, - "datatype" : { dbs: "fac_usrrap_cols_datatype", typ: "varchar", label: L("lcl_rap_datatype"), - LOV: "varchar;Tekst;date;Datum;float;Float;integer;Getal"}, - "filter" : { dbs: "fac_usrrap_cols_filter", typ: "varchar", label: L("lcl_rap_filter")}, - "total" : { dbs: "fac_usrrap_cols_total", typ: "varchar", label: L("lcl_rap_total")} + "filter" : { dbs: "fac_usrrap_cols_filter", typ: "varchar", label: L("lcl_rap_filter"), + LOV: L("lcl_rap_filterLOV") }, // "A;Automatisch" + "visible" : { dbs: "fac_usrrap_cols_visible", typ: "varchar", label: L("lcl_rap_visible"), + LOV: L("lcl_rap_visibleLOV")}, // "V;Visible;I;Invisible;H;hidden" + "total" : { dbs: "fac_usrrap_cols_total", typ: "varchar", label: L("lcl_rap_groupby"), + LOV: L("lcl_rap_groupbydateLOV") + ";" + L("lcl_rap_groupbynumberLOV") } }, - list: { columns: ["id", "sequence", "columnname", "caption", "datatype"] }, + list: { columns: ["sequence", "name", "caption", "datatype", "visible", "total"] }, REST_GET: function _GET(params) { @@ -58,7 +65,7 @@ model_reportcolumns = return { key: the_key }; }, - // Internally used by report_clone + // Only internally used by report_clone REST_POST: function (params, jsondata, parent_key) /* insert columns */ { if (!params.internal) diff --git a/APPL/API2/model_reports.inc b/APPL/API2/model_reports.inc index 6c9944d7a5..ffda580573 100644 --- a/APPL/API2/model_reports.inc +++ b/APPL/API2/model_reports.inc @@ -24,6 +24,7 @@ model_reports_template = records_name: "te bepalen", record_name: "te bepalen", fields: {/* te bepalen */}, + autfunction: "WEB_PRSSYS", _check_authorization: function(params, method) { @@ -122,25 +123,29 @@ model_reports_template = REST_DELETE: false } +// Voltooi model_reports_template voor een bepaald rapport function model_reports(fac_usrrap_key) { var usrrap = model_reportsx.REST_GET({filter: { "id" : fac_usrrap_key}, include: ["columns"] })[0]; - model_reports_template.table = usrrap.viewname; model_reports_template.record_name = usrrap.viewname.substring(0,1) + usrrap.viewname.substring(1).toLowerCase(); model_reports_template.records_name = model_reports_template.record_name + "s"; + model_reports_template.records_title = usrrap.name; + //model_reports_template.autfunction = usrrap.authorisation; - model_reports_template.list = { columns : [] }; + model_reports_template.list = { columns : [], canGroup: true }; for (var i = 0; i < usrrap.columns.length; i++) { - var field = { dbs: usrrap.columns[i].columnname, + var field = { dbs: usrrap.columns[i].name, label: usrrap.columns[i].caption, typ: usrrap.columns[i].datatype.id, - filter: usrrap.columns[i].filter == "A"?"like":null + filter: usrrap.columns[i].filter && usrrap.columns[i].filter.id == "A"?"like":null, + total: usrrap.columns[i].total } var fld = "COL" + String(usrrap.columns[i].id) model_reports_template.fields[fld] = field; - model_reports_template.list.columns.push(fld); + if (usrrap.columns[i].visible.id == 'V') + model_reports_template.list.columns.push(fld); } __Logj(model_reports_template); return model_reports_template; diff --git a/APPL/API2/model_reportsx.inc b/APPL/API2/model_reportsx.inc index b8a1cc4944..f98a1d6da5 100644 --- a/APPL/API2/model_reportsx.inc +++ b/APPL/API2/model_reportsx.inc @@ -22,11 +22,19 @@ model_reportsx = primary: "fac_usrrap_key", records_name: "reports", record_name: "report", + records_title: L("lcl_menu_fac_reports"), + record_title: L("lcl_usrrap_report"), + autfunction: "WEB_PRSSYS", + fields: { "id" : { dbs: "fac_usrrap_key", typ: "key", label: "Key", filter: "exact" }, "name" : { dbs: "fac_usrrap_omschrijving", typ: "varchar", label: L("lcl_usrrap_report"), filter: "like", len : 60}, "description" : { dbs: "fac_usrrap_info", typ: "varchar", label: L("lcl_usrrap_info")}, "viewname" : { dbs: "fac_usrrap_view_name", typ: "varchar", label: L("lcl_usrrap_viewname"), filter: "like"}, - "authorisation": { dbs: "fac_functie_key", typ: "key", label: L("lcl_usrrap_functie"), foreign: "fac_functie"} + "authorisation": { dbs: "fac_functie_key", typ: "key", label: L("lcl_usrrap_functie"), foreign: "fac_functie"}, + "styling" : { dbs: "fac_usrrap_functie", typ: "key", label: L("lcl_usrrap_styling"), + LOV: L("lcl_usrrap_stylingLOV") }, // 0;on-gestylede;1;gestylede;2;procedure;3;procedure gestyled;8;Via tabelizer + + "autorefresh" : { dbs: "fac_usrrap_autorefresh", typ: "check", label: L("lcl_usrrap_autorefresh")} }, list: { columns: ["id", "name", "viewname", "description"] }, includes: {"columns": { model: model_reportcolumns, @@ -102,25 +110,23 @@ return; // TODO? return json; }, - REST_PUT: function (params, jsondata, the_key) /* update room */ + REST_PUT: function (params, jsondata, the_key) /* update report */ { model_reportsx._check_authorization(params, "PUT"); - if (!jsondata.room.id) jsondata.room.id = the_key; - var rap_key = the_key; var fields = api2.update_fields(params, model_reportsx, jsondata); // Build updater model_reportsx._analyze_fields(fields, params, jsondata); - var wheres = [" fac_usrrap_key = " + rap_key]; + var wheres = [" fac_usrrap_key = " + the_key]; var roomUpd = buildTrackingUpdate("fac_usrrap", wheres.join(" AND " ), fields, { noValidateToken: true }); var err = Oracle.Execute(roomUpd.sql, true); if (err.friendlyMsg) abort_with_warning(err.friendlyMsg); - return { key: rap_key, warning: "" }; + return { key: the_key, warning: "" }; }, - REST_POST: function (params, jsondata) /* new room */ + REST_POST: function (params, jsondata) /* new report */ { model_reportsx._check_authorization(params, "POST"); @@ -138,7 +144,7 @@ return; // TODO? return { key: rap_key, warning: "" }; }, - REST_DELETE: function (params, the_key) /* delete room */ + REST_DELETE: function (params, the_key) /* delete report */ { model_reportsx._check_authorization(params, "DELETE"); var rap_key = params.filter.id; diff --git a/APPL/FAC/fac_usrrap.asp b/APPL/FAC/fac_usrrap.asp index 653fa8a470..0401613dda 100644 --- a/APPL/FAC/fac_usrrap.asp +++ b/APPL/FAC/fac_usrrap.asp @@ -153,7 +153,7 @@ if (!p_bAutoexec) // FAC_USERRAP_FUNCTIE==2 -->Stored procedure FCLTrapportselector("usrrap_key", "sgRapport", - { label: L("lcl_usrrep_report"), + { label: L("lcl_usrrap_report"), rapportKey: -1, rapportViewName: p_rap_name, fcode: p_fcode, @@ -166,7 +166,7 @@ if (!p_bAutoexec) BLOCK_END(); %>
<% - var buttons = [ {title: L("lcl_usrrep_uitvoeren"), action: "startSearch();startAutoRefreshTimer();" } ]; + var buttons = [ {title: L("lcl_usrrap_uitvoeren"), action: "startSearch();startAutoRefreshTimer();" } ]; CreateButtons(buttons, { entersubmit: true}); %> diff --git a/APPL/FAC/fac_usrrap_filter.asp b/APPL/FAC/fac_usrrap_filter.asp index 8808a4ee2b..6fcbdf9454 100644 --- a/APPL/FAC/fac_usrrap_filter.asp +++ b/APPL/FAC/fac_usrrap_filter.asp @@ -63,7 +63,7 @@ var fac_usrrap = usrrap.fac_usrrap_info(usrrap_key); size="1" style="display:none;">
" title="<%=L("lcl_usrrep_beware")%>"
+
" title="<%=L("lcl_usrrap_beware")%>"
style='cursor:pointer'
onclick="FillListbox('<%="fclt_f_colvalue" + nr_charcols%>','<%=col.column_name%>', <%=usrrap_key%>)">
"
diff --git a/APPL/FAC/fac_usrrapx_list.asp b/APPL/FAC/fac_usrrapx_list.asp
index 8207e4e1a1..380f1a8b57 100644
--- a/APPL/FAC/fac_usrrapx_list.asp
+++ b/APPL/FAC/fac_usrrapx_list.asp
@@ -62,7 +62,7 @@ var showall = getQParamInt("showall", 0) == 1;
});
rst.addColumn(new Column({caption: "Key", content:"fac_usrrap_key"}));
- rst.addColumn(new Column({caption: L("lcl_usrrep_report"), content:"fac_usrrap_omschrijving"}));
+ rst.addColumn(new Column({caption: L("lcl_usrrap_report"), content:"fac_usrrap_omschrijving"}));
rst.addColumn(new Column({caption: L("lcl_fac_usrrapxpath"), content:"fac_usrrap_view_name"}));
rst.addColumn(new Column({caption: L("lcl_fac_usrrapxcreate"), content:"fac_usrrap_info"}));
diff --git a/APPL/Localscripts/iface.js b/APPL/Localscripts/iface.js
index 26a67fdde3..6a82e8f7a3 100644
--- a/APPL/Localscripts/iface.js
+++ b/APPL/Localscripts/iface.js
@@ -50,6 +50,7 @@ iface =
}
var elem = btn.getAttribute("fcltclick");
+ window.fcltevent = evt;
var result = eval(elem);
// Dit lijkt erg onzinning (we zitten binnen iface) maar soms als
// een scherm/dialoog net gesloten is door de action van de button
diff --git a/APPL/SCF/scaffolding.inc b/APPL/SCF/scaffolding.inc
index 5ab845971e..beb28b29df 100644
--- a/APPL/SCF/scaffolding.inc
+++ b/APPL/SCF/scaffolding.inc
@@ -9,7 +9,7 @@
Context:
*/
-var mode = getQParamSafe("mode", "empty");
+var mode = getQParamSafe("mode", "search");
if (mode == "save")
var JSON_Result = true;
%>
@@ -18,7 +18,9 @@ if (mode == "save")
+
+
<% } %>
@@ -35,9 +37,6 @@ function scaffolding(model, scf_params)
{
scf_params = scf_params || {};
- if (model && mode == 'empty')
- mode = 'search';
-
var imodel = getQParam("model", ""); // include model
if (model.includes && imodel in model.includes)
{
@@ -50,8 +49,6 @@ function scaffolding(model, scf_params)
switch (mode)
{
- case "empty":
- break;
case "search":
scaffolding_search(model, scf_params);
break;
diff --git a/APPL/SCF/scaffolding_edit.inc b/APPL/SCF/scaffolding_edit.inc
index cd70123a5a..60f154ebe3 100644
--- a/APPL/SCF/scaffolding_edit.inc
+++ b/APPL/SCF/scaffolding_edit.inc
@@ -18,9 +18,6 @@ function scaffolding_edit(model, scf_params)
js: ["jquery-ui.js", "jquery.timepicker-table.js"],
css: ["timePicker-table.css"]})
- // Autorisatie
- var authparamsPRSSYS = user.checkAutorisation("WEB_PRSSYS");
-
var transit = "";
if ("transit" in scf_params)
transit = "&" + scf_params.transit.name + "=" + safe.url(scf_params.transit.val);
@@ -63,7 +60,7 @@ function scaffolding_edit(model, scf_params)
var buttons = [ {title: L("lcl_submit"), action:"scf_submit()", icon: "opslaan.png", singlepress: true },
{title: L("lcl_cancel"), action:"scf_cancel()", icon: "undo.png" }];
if (!modal)
- IFRAMER_HEADER(model.record_name, buttons);
+ IFRAMER_HEADER(model.record_title || model.record_name, buttons);
%>