FSN#31698 Rapportgenerator beter automatisch COLS aanmakaen
svn path=/Website/trunk/; revision=24495
This commit is contained in:
@@ -244,21 +244,8 @@ api2 = {
|
||||
}
|
||||
return filter;
|
||||
},
|
||||
/*
|
||||
We begonnen ooit met fields als een array van { name: "xxx", dbs: "yyyy", .... }
|
||||
Maar later bleek het handiger een hash van "xxx": { dbs: "yyyy", .... }
|
||||
Voor oude modellen herschrijven we versie 1 naar versie 2
|
||||
|
||||
TODO: Dit moet er nog uit!!
|
||||
*/
|
||||
normalize: function _normalize(model)
|
||||
{
|
||||
if (model.fields.length)
|
||||
OLD_STYLE_MODEL_DETECTED
|
||||
},
|
||||
form2JSONdata: function _form2JSONdata(model, params, formfields) // Maak een jsondata-object voor gebruik vanuit model_xxx.inc
|
||||
{
|
||||
api2.normalize(model);
|
||||
var jsondata = {};
|
||||
jsondata[model.record_name] = {id: params.filter.id};
|
||||
|
||||
@@ -505,7 +492,6 @@ api2 = {
|
||||
// Bepaal bij een GET welke velden op te halen
|
||||
sqlfields: function _sqlfields(params, model)
|
||||
{
|
||||
api2.normalize(model);
|
||||
model.aliasprefix = model.aliasprefix || "";
|
||||
var selects = [];
|
||||
var tables = [ model.table ];
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
Notes:
|
||||
*/
|
||||
%>
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../ALG/alg.inc" -->
|
||||
<%
|
||||
|
||||
|
||||
@@ -71,6 +71,97 @@ model_reportcolumns =
|
||||
}
|
||||
},
|
||||
|
||||
_view2columns: function (usrrap_key)
|
||||
{
|
||||
var sql = "SELECT fac_usrrap_view_name"
|
||||
+ " FROM fac_usrrap"
|
||||
+ " WHERE fac_usrrap_key = " + usrrap_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var view_name = oRs("fac_usrrap_view_name").Value;
|
||||
oRs.Close();
|
||||
// Rapport kan ook zijn XXXX.RAP_YYYYY?
|
||||
var view_name_short = view_name;
|
||||
var i = view_name_short.indexOf('.');
|
||||
if (i != -1)
|
||||
view_name_short = view_name_short.substring(i+1);
|
||||
|
||||
var sequence = 10;
|
||||
var sql = "SELECT INITCAP(column_name) column_name"
|
||||
+ " , data_type"
|
||||
+ " , data_length"
|
||||
+ " , data_precision"
|
||||
+ " , data_scale"
|
||||
+ " FROM user_tab_columns"
|
||||
+ " WHERE table_name = UPPER(" + safe.quoted_sql(view_name_short) + ")"
|
||||
+ " ORDER BY column_id";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
while (!oRs.eof)
|
||||
{
|
||||
var colname = oRs.Fields("column_name").Value.toLowerCase();
|
||||
var colpar = { caption: oRs.Fields("column_name").Value, // Met de initcap
|
||||
name: colname,
|
||||
datatype: "varchar",
|
||||
group: 'G',
|
||||
sequence: sequence,
|
||||
visible: 'V',
|
||||
filter: null
|
||||
};
|
||||
sequence += 10;
|
||||
var ucolname = colname.toUpperCase();
|
||||
|
||||
var special_cols = ucolname.match(/^(HIDE_F_|FCLT_X_|FCLT_3D_|FCLT_KEY|FCLT_F_|HTML_|FCLT_D_|FCLT_C_)/);
|
||||
if (special_cols)
|
||||
colpar.caption = colpar.caption.substring(special_cols[0].length);
|
||||
|
||||
if (ucolname.match(/^(HIDE_F_|FCLT_3D_|FCLT_KEY)/))
|
||||
colpar.visible = 'H'; // Hidden
|
||||
|
||||
if (ucolname.match(/^(FCLT_X_)/))
|
||||
colpar.visible = 'I'; // Invisible, je mag hem wel aanzetten
|
||||
|
||||
if (view_name_short.match(/_V_UDR/))
|
||||
colpar.visible = 'H'; // Hidden, die hebben te veel kolommen
|
||||
|
||||
if (ucolname.match(/^(FCLT_F_|FCLT_D_)/))
|
||||
colpar.filter = 'A';
|
||||
|
||||
var ora_type = oRs("data_type").Value;
|
||||
var ora_length = oRs("data_length").Value;
|
||||
var ora_precision = oRs("data_precision").Value;
|
||||
var ora_scale = oRs("data_scale").Value;
|
||||
|
||||
if (ucolname.match("^FCLT_F_|FCLT_X_")) // Filter, altijd varchar
|
||||
{
|
||||
colpar.filter = 'A';
|
||||
}
|
||||
else if (ucolname.match("^FCLT_C_")) // Currency
|
||||
{
|
||||
colpar.datatype = 'currency';
|
||||
}
|
||||
else if (ucolname.match("^HTML_"))
|
||||
{
|
||||
colpar.datatype = 'html';
|
||||
}
|
||||
else if (ora_type == 'NUMBER')
|
||||
{
|
||||
colpar.datatype = 'number';
|
||||
if (ora_scale > 0)
|
||||
{
|
||||
colpar.datatype = 'float';
|
||||
}
|
||||
}
|
||||
else if (ora_type == "DATE") //
|
||||
{
|
||||
colpar.datatype = 'date';
|
||||
}
|
||||
|
||||
var params = { };
|
||||
model_reportcolumns._REST_POST(params, colpar, usrrap_key);
|
||||
oRs.MoveNext();
|
||||
}
|
||||
oRs.Close();
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var query = api2.sqlfields(params, model_reportcolumns );
|
||||
@@ -83,6 +174,11 @@ model_reportcolumns =
|
||||
+ " ORDER BY fac_usrrap_cols_volgnr";
|
||||
|
||||
var json = api2.sql2json (params, sql, model_reportcolumns );
|
||||
if (!json.length)
|
||||
{
|
||||
model_reportcolumns._view2columns(parseInt(params.filter.pid,10));
|
||||
var json = api2.sql2json (params, sql, model_reportcolumns );
|
||||
}
|
||||
|
||||
return json;
|
||||
},
|
||||
@@ -98,10 +194,8 @@ model_reportcolumns =
|
||||
return { key: the_key };
|
||||
},
|
||||
// Only internally used by report_clone
|
||||
REST_POST: function (params, jsondata, parent_key) /* insert columns */
|
||||
_REST_POST: function (params, jsondata, parent_key) /* insert columns */
|
||||
{
|
||||
if (!params.internal)
|
||||
INTERNAL_ERROR_INTERNAL_ONLY;
|
||||
var fields = api2.update_fields(params, model_reportcolumns, jsondata); // Build updater
|
||||
|
||||
fields["id"] = model_reportcolumns.fields["id"];
|
||||
|
||||
@@ -77,6 +77,14 @@ function model_reportsx(usrrap_key, params)
|
||||
__Log(new_model);
|
||||
};
|
||||
|
||||
function isEmptyObject( obj ) {
|
||||
var name;
|
||||
for ( name in obj ) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
this.REST_GET = function _reportsx_GET(params, jsondata)
|
||||
{
|
||||
var query = api2.sqlfields(params, this);
|
||||
@@ -102,6 +110,11 @@ function model_reportsx(usrrap_key, params)
|
||||
sql += ", fac_usrrap_cols_volgnr";
|
||||
|
||||
var json = api2.sql2json (params, sql, this);
|
||||
if (json.length == 1 && params.include && json[0].columns.length == 0)
|
||||
{
|
||||
model_reportcolumns._view2columns(params.filter.id);
|
||||
var json = api2.sql2json (params, sql, this );
|
||||
}
|
||||
|
||||
return json;
|
||||
};
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
*/
|
||||
%>
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../ALG/alg.inc" -->
|
||||
<!-- #include file="./model_cadcontours.inc" -->
|
||||
<%
|
||||
|
||||
@@ -6,46 +6,76 @@
|
||||
File fac_report.asp
|
||||
Description: Voer een nieuwe stijl rapport uit (toon het zoekblok)
|
||||
Parameters: usrrap_key van een rapport
|
||||
Note: 'Oude' rapporten worden automatisch omgezet (FAC_USRRAP_COLS aangemaakt)
|
||||
mode=list optioneel, toon het rapport direct zonder zoekblok
|
||||
Note: XSL rapporten en view rapporten gaan via de oude code
|
||||
*/
|
||||
%>
|
||||
<!-- #include file="../scf/scaffolding.inc" -->
|
||||
<!-- #include file="../api2/model_reports.inc" -->
|
||||
<!-- #include file="../api2/model_reportsx.inc" -->
|
||||
<!-- #include file="../Shared/xml_converter.inc" -->
|
||||
<%
|
||||
var usrrap_key = getQParamInt("usrrap_key");
|
||||
|
||||
if (mode == "list" && Server.ScriptTimeout<600)
|
||||
Server.ScriptTimeout=600; // extra tijd
|
||||
|
||||
var rapport = model_reports(usrrap_key);
|
||||
if (rapport.styling)
|
||||
{
|
||||
if ((rapport.styling.id & 1) == 1) // XSL proc
|
||||
if ((rapport.styling.id & 2) == 2) // view proc doen we 'old style'
|
||||
Response.Redirect("fac_usrrap_search.asp?usrrap_key=" + usrrap_key);
|
||||
|
||||
if ((rapport.styling.id & 2) == 2) // view proc
|
||||
Response.Redirect("fac_usrrap_search.asp?usrrap_key=" + usrrap_key);
|
||||
}
|
||||
if ((rapport.styling.id & 1) == 1) // XSL proc doen we niet via resultsettable
|
||||
{
|
||||
// Overrule scaffolding_list
|
||||
scaffolding_list = function (model, scf_params)
|
||||
{
|
||||
var outputmode = getQParamInt("outputmode", 0);
|
||||
var nohtml = getQParamInt("nohtml", 0) == 1;
|
||||
if (nohtml) // Die is simpel
|
||||
{
|
||||
Response.Clear();
|
||||
FCLT2XMLResponse ({xmlnode: 'rapport', key: usrrap_key, mode: mode, xwhere: "sql_where"});
|
||||
Response.End;
|
||||
}
|
||||
|
||||
function isEmptyObject( obj ) {
|
||||
var name;
|
||||
for ( name in obj ) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (isEmptyObject(rapport.fields))
|
||||
{
|
||||
var reportsx = new model_reportsx(-1, { internal: true });
|
||||
var rapportx = reportsx.REST_GET({ filter: { id: usrrap_key }})[0];
|
||||
rapportx.columns = [];
|
||||
__DoLog("Automatische rapport conversie key {0}: {1}".format(usrrap_key, rapportx.name));
|
||||
reportsx._clone_report_cols(usrrap_key, rapportx);
|
||||
var params = { internal: true }; // Zodat POST op kolommen wordt geaccepteerd
|
||||
var new_key = reportsx.REST_PUT(params, { "report": rapportx }, usrrap_key );
|
||||
|
||||
rapport = model_reports(usrrap_key); // Nu met kolommen
|
||||
var mode = '';
|
||||
if (outputmode==2) mode = 'excel';
|
||||
if (outputmode==1) mode = 'print';
|
||||
%><html>
|
||||
<head>
|
||||
<% FCLTHeader.Generate({ outputmode: outputmode }); %>
|
||||
<% if (outputmode == 0) {%>
|
||||
<script type="text/javascript">
|
||||
function rap_print()
|
||||
{
|
||||
window.open("fac_report.asp?outputmode=1<%=safe.jsstring(transitQS())%>");
|
||||
}
|
||||
function rap_excel()
|
||||
{
|
||||
window.open("fac_report.asp?outputmode=2<%=safe.jsstring(transitQS())%>");
|
||||
}
|
||||
</script>
|
||||
<% } %>
|
||||
</head>
|
||||
<body id="listbody">
|
||||
<%
|
||||
if(outputmode==0)
|
||||
{
|
||||
var buttons = [ { icon: "print.png", title: L("lcl_print_table"), action: 'rap_print()' },
|
||||
{ icon: "excel.png", title: L("lcl_export_to_excel"), action: 'rap_excel() ' }
|
||||
];
|
||||
IFRAMER_HEADER(model.records_title, buttons);
|
||||
}
|
||||
FCLT2XMLResponse ({xmlnode: 'rapport', key: usrrap_key, mode: mode, xwhere: "sql_where"});
|
||||
%>
|
||||
</body>
|
||||
</html>
|
||||
<%
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
__Log("Existing report {0}: {1}".format(usrrap_key, rapport.table));
|
||||
|
||||
var params = { transit: { name: "usrrap_key", val: usrrap_key },
|
||||
search: { requires: { js: ["./fac_report.js"] }}
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
<%@language = "javascript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File fac_reportx.asp
|
||||
Description: Voor *beheer* van rapporten
|
||||
Parameters:
|
||||
Note:
|
||||
*/
|
||||
%>
|
||||
|
||||
<!-- #include file="../scf/scaffolding.inc" -->
|
||||
<!-- #include file="../api2/model_reportsx.inc" -->
|
||||
@@ -6,9 +16,6 @@
|
||||
<%
|
||||
var reportsx = new model_reportsx();
|
||||
|
||||
if (getQParam("model", "") == "columns")
|
||||
model_reportcolumns.REST_POST = false;
|
||||
|
||||
scaffolding(reportsx,
|
||||
{
|
||||
"search": {
|
||||
|
||||
@@ -152,12 +152,12 @@ FCLTHeader.Requires({ plugins: [] });
|
||||
var oms = oRs("fac_srtnotificatie_oms").Value;
|
||||
oRs.Close();
|
||||
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
|
||||
+ "NULL"
|
||||
+ ", "
|
||||
+ mld_info.behandel_key
|
||||
+ ", 'MLDNOB'"
|
||||
+ ", "
|
||||
+ mld_key
|
||||
+ "NULL"
|
||||
+ ", "
|
||||
+ mld_info.behandel_key
|
||||
+ ", 'MLDNOB'"
|
||||
+ ", "
|
||||
+ mld_key
|
||||
+ ", mld.mldsprintf(" + safe.quoted_sql(oms) + ", " + mld_key + ")"
|
||||
+ ", NULL, NULL, NULL, NULL, 2, NULL); END;");
|
||||
}
|
||||
|
||||
@@ -18,6 +18,9 @@ function scaffolding_edit(model, scf_params)
|
||||
js: ["jquery-ui.js", "jquery.timepicker-table.js"],
|
||||
css: ["timePicker-table.css"]})
|
||||
|
||||
if (scf_params.edit && "requires" in scf_params.edit)
|
||||
FCLTHeader.Requires(scf_params.edit.requires);
|
||||
|
||||
var transit = "";
|
||||
if ("transit" in scf_params)
|
||||
transit = "&" + scf_params.transit.name + "=" + safe.url(scf_params.transit.val);
|
||||
@@ -81,7 +84,7 @@ function scaffolding_edit(model, scf_params)
|
||||
else if (field.insertonly && key > 0)
|
||||
scf_ROFIELDTR(model, fld, xxx_data[fld]);
|
||||
else
|
||||
scf_RWFIELDTR(field, fld, xxx_data[fld], key);
|
||||
scf_RWFIELDTR(model, fld, xxx_data[fld], key);
|
||||
}
|
||||
BLOCK_END();
|
||||
if (modal)
|
||||
|
||||
@@ -114,7 +114,7 @@ function scaffolding_search(model, scf_params)
|
||||
continue;
|
||||
|
||||
if (field.filter == 'like' || field.filter == 'exact' || !("filter" in field))
|
||||
scf_RWFIELDTR(field, fld, def);
|
||||
scf_RWFIELDTR(model, fld, def);
|
||||
else if (field.filter == "range")
|
||||
{
|
||||
var from = null;
|
||||
@@ -137,7 +137,9 @@ function scaffolding_search(model, scf_params)
|
||||
break;
|
||||
case "y":
|
||||
from = new Date();
|
||||
from.setMonth(1,0,0,0,0);
|
||||
from.setDate(1);
|
||||
from.setMonth(0);
|
||||
from.setHours(0,0,0,0);
|
||||
break;
|
||||
}
|
||||
if (def.indexOf('-') > -1) // Einddatum
|
||||
@@ -149,23 +151,24 @@ function scaffolding_search(model, scf_params)
|
||||
break;
|
||||
case "m":
|
||||
to = new Date();
|
||||
to.setMonth(to.getMonth() + 1, 1);
|
||||
to.setHours(23,59,59,00);
|
||||
to.setDate(to.getDate() - 1);
|
||||
to.setDate(1);
|
||||
to.setMonth(to.getMonth() + 1);
|
||||
to.setHours(0,0,-1,0);
|
||||
break;
|
||||
case "y":
|
||||
to = new Date();
|
||||
to.setYear(to.getYear() + 1, 0);
|
||||
to.setHours(23,59,59,00);
|
||||
to.setDate(to.getDate() - 1);
|
||||
to.setYear(to.getYear() + 1);
|
||||
to.setDate(1);
|
||||
to.setMonth(0);
|
||||
to.setHours(0,0,-1,0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
var org_label = field.label;
|
||||
field.label = org_label + " " + L("lcl_from");
|
||||
scf_RWFIELDTR(field, "start_" + fld, from);
|
||||
scf_RWFIELDTR(model, "start_" + fld, from);
|
||||
field.label = org_label + " " + L("lcl_to");
|
||||
scf_RWFIELDTR(field, "end_" + fld, to);
|
||||
scf_RWFIELDTR(model, "end_" + fld, to);
|
||||
field.label = org_label;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
label: label dat voor het veld wordt weergegeven.
|
||||
filtercode: extra filtercode voor de query die gebruikt wordt voor de suggest.
|
||||
onChange: onchange op het textveld.
|
||||
trclass: wordt ook op de <tr> gezet.
|
||||
autlevel: autorisatie niveau voor de query die gebruikt wordt voor de suggest.
|
||||
ins_key: alleen als melding op dit object mogelijk is.
|
||||
extraParamField: veldnaam voor een extra hidden parameter veld.
|
||||
@@ -97,7 +98,7 @@ function FCLTdisciplineselector(fieldName, objectName, params)
|
||||
+ (params.filtercode? "&filtcode=" + params.filtercode : "");
|
||||
if (params.label && !params.dohide)
|
||||
{ %>
|
||||
<tr><td class="label">
|
||||
<tr <%=params.trclass ? "class='"+params.trclass+"'" : ""%>><td class="label">
|
||||
<label for="<%=fieldName%>"><%=params.label%>:</label>
|
||||
<%=params.moreinfo && S("faq_enabled") == 1? "<span class='"+"labelextra'><img class='details' title='" + safe.htmlattr(L("lcl_faq_items")) + "'src='../Pictures/detail.png' onclick='disciplineselector.kennisbankitems()'></span>" : "" %>
|
||||
</td>
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
label: label dat voor het veld wordt weergegeven.
|
||||
filtercode: extra filtercode voor de query die gebruikt wordt voor de suggest.
|
||||
onChange: onchange op het textveld.
|
||||
trclass: wordt ook op de <tr> gezet.
|
||||
autlevel: autorisatie niveau voor de query die gebruikt wordt voor de suggest.
|
||||
extraParamField: veldnaam voor een extra hidden parameter veld.
|
||||
isBad: boolean die aangeeft dat het veld als ongeldig
|
||||
@@ -76,7 +77,7 @@ function FCLTsrtdeelselector(fieldName, objectName, params)
|
||||
+ (params.filtercode? "&filtcode=" + params.filtercode : "");
|
||||
if (params.label)
|
||||
{ %>
|
||||
<tr><td class="label">
|
||||
<tr <%=params.trclass ? "class='"+params.trclass+"'" : ""%>><td class="label">
|
||||
<label for="<%=fieldName%>"><%=params.label%>:</label>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
Reference in New Issue
Block a user