adding a top level index-style file
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 21 Sep 2006 20:45:42 +0000 (20:45 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 21 Sep 2006 20:45:42 +0000 (20:45 +0000)
adding the base transform template files
added some more transform handling logic to base code

git-svn-id: svn://svn.open-ils.org/ILS/trunk@6182 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/reports/oils_rpt.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_builder.js
Open-ILS/web/reports/oils_rpt_builder.xhtml
Open-ILS/web/reports/oils_rpt_tform_date.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_tform_numeric.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_tform_string.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_utils.js
Open-ILS/web/reports/oils_rpt_vars.js

diff --git a/Open-ILS/web/reports/oils_rpt.xhtml b/Open-ILS/web/reports/oils_rpt.xhtml
new file mode 100644 (file)
index 0000000..39c2e77
--- /dev/null
@@ -0,0 +1,58 @@
+<?xml version='1.0'?>
+
+<!DOCTYPE html PUBLIC 
+       "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [
+       <!ENTITY nbsp " ">
+]>
+
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude">
+
+       <head>
+               <title>Evergreen: Reports</title>
+               <script language='javascript' src='/opac/common/js/utils.js'> </script>
+               <script language='javascript' src='/opac/common/js//config.js'> </script> 
+               <script language='javascript' src='/opac/common/js/CGI.js'> </script>
+               <script language='javascript' src='/opac/common/js/Cookie.js'> </script>
+               <script language='javascript' src='/opac/common/js/JSON.js'> </script>
+               <script language='javascript' src='/opac/common/js/fmall.js'> </script>
+               <script language='javascript' src='/opac/common/js/fmgen.js'> </script>
+               <script language='javascript' src='/opac/common/js/Cookies.js'> </script>
+               <script language='javascript' src='/opac/common/js/opac_utils.js'> </script>
+               <script language='javascript' src='/opac/common/js/OrgTree.js'> </script>
+               <script language='javascript' src='/opac/common/js/org_utils.js'> </script>
+               <script language='javascript' src='/opac/common/js/init.js'> </script>
+               <script language='javascript' src='/opac/common/js/RemoteRequest.js'> </script>
+               <script language='javascript' src='slimtree.js'> </script>
+
+               <link rel="stylesheet" type="text/css" media="all" 
+                       href="/opac/common/js/jscalendar/calendar-brown.css" title="win2k-cold-1" />
+               <script type="text/javascript" src="/opac/common/js/jscalendar/calendar.js"></script>
+               <script type="text/javascript" src="/opac/common/js/jscalendar/lang/calendar-en.js"></script>
+               <script type="text/javascript" src="/opac/common/js/jscalendar/calendar-setup.js"></script>
+
+               <script type="text/javascript" src="adminlib.js"></script>
+               <script type="text/javascript" src="oils_rpt_vars.js"></script>
+               <script type="text/javascript" src="oils_rpt_utils.js"></script>
+               <script type="text/javascript" src="oils_rpt_builder.js"></script>
+               <script type="text/javascript" src="oils_rpt_tree.js"></script>
+               <script type="text/javascript" src="oils_rpt.js"></script>
+
+               <link rel="stylesheet" type="text/css" href="oils_rpt.css"> </link>
+
+               <script>function _l(l) { location.href = l + location.search; }</script>
+
+       </head>
+
+       <body onload='oilsInitReports();' onunload='oilsCleanupReports();'>
+               <div class='welcome_box'>
+                       <span>You are logged in as </span><b><span id='oils_rpt_user'/></b>
+               </div>
+
+               <div>
+                       <a class='oils_rpt_main_link' href='javascript:_l("oils_rpt_builder.xhtml");'>Build a New Report</a>
+               </div>
+       </body>
+</html>
+
+
index d823913..0856a0f 100644 (file)
@@ -13,12 +13,15 @@ function oilsInitReportBuilder() {
 }
 
 function oilsReportBuilderReset() {
+       var n = (oilsRpt) ? oilsRpt.name : "";
        oilsRpt = new oilsReport();
+       oilsRpt.name = n;
        oilsRptDisplaySelector  = DOM.oils_rpt_display_selector;
        oilsRptFilterSelector   = DOM.oils_rpt_filter_selector;
        removeChildren(oilsRptDisplaySelector);
        removeChildren(oilsRptFilterSelector);
        oilsRptDebug();
+       oilsRptResetParams();
 }
 
 /* returns just the column name */
@@ -62,7 +65,7 @@ function oilsRptMakeLabel(path) {
 
 
 /* adds an item to the display window */
-function oilsAddRptDisplayItem(path, name) {
+function oilsAddRptDisplayItem(path, name, tform) {
        if( ! oilsAddSelectorItem(oilsRptDisplaySelector, path, name) ) 
                return;
 
@@ -71,11 +74,17 @@ function oilsAddRptDisplayItem(path, name) {
        var param = oilsRptNextParam();
 
        /* add this item to the select blob */
-       oilsRpt.def.select.push( {
+       var sel = {
                relation:oilsRptPathRel(path), 
-               column:oilsRptPathCol(path), 
                alias:param
-       });
+       };
+
+       if( tform ) {
+               sel.column = {};
+               sel.column[tform] = oilsRptPathCol(path); 
+       } else { sel.column = oilsRptPathCol(path); }
+
+       oilsRpt.def.select.push(sel);
 
        mergeObjects( oilsRpt.def.from, oilsRptBuildFromClause(path));
        oilsRpt.params[param] = name;
@@ -85,10 +94,10 @@ function oilsAddRptDisplayItem(path, name) {
 /* takes a column path and builds a from-clause object for the path */
 function oilsRptBuildFromClause(path) {
        var parts = path.split(/-/);
-       //var obj = {from : {}};
        var obj = {};
        var tobj = obj;
        var newpath = "";
+
        for( var i = 0; i < parts.length; i += 2 ) {
                var cls = parts[i];
                var col = parts[i+1];
@@ -130,8 +139,13 @@ function oilsDelSelectedDisplayItems() {
                function(i) {
                        for( var j = 0; j < list.length; j++ ) {
                                var d = list[j];
-                               if( oilsRptPathRel(d) == i.relation 
-                                               && oilsRptPathCol(d) == i.column ) {
+                               var col = i.column;
+
+                               /* if this columsn has a transform, it will be an object { tform => column } */
+                               if( typeof col != 'string' ) 
+                                       for( var c in col ) col = col[c];
+
+                               if( oilsRptPathRel(d) == i.relation && oilsRptPathCol(d) == col ) {
                                        var param = (i.alias) ? i.alias.match(/::PARAM\d*/) : null;
                                        if( param ) delete oilsRpt.params[param];
                                        return false;
@@ -140,10 +154,15 @@ function oilsDelSelectedDisplayItems() {
                        return true;
                }
        );
-       if(!oilsRpt.def.select) oilsRpt.def.select = [];
 
-       for( var j = 0; j < list.length; j++ ) 
-               oilsRptPruneFromClause(list[j]);
+       if(!oilsRpt.def.select) {
+               oilsRpt.def.select = [];
+               oilsReportBuilderReset();
+
+       } else {
+               for( var j = 0; j < list.length; j++ ) 
+                       oilsRptPruneFromClause(list[j]);
+       }
 
        oilsRptDebug();
 }
@@ -249,6 +268,8 @@ function oilsRptDrawDataWindow(path) {
                function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_filter_div)};
        DOM.oils_rpt_agg_filter_tab.onclick = 
                function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_agg_filter_div)};
+
+       DOM.oils_rpt_tform_tab.onclick();
 }
 
 
@@ -258,14 +279,38 @@ function oilsRptDrawTransformWindow(path, col, cls, field) {
        DOM.oils_rpt_tform_label_input.value = oilsRptMakeLabel(path);
 
        DOM.oils_rpt_tform_submit.onclick = 
-               function(){ oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value) };
+               function(){ 
+                       var tform = oilsRptGetTform();
+                       tform = (tform == 'raw') ? null : tform;
+                       oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value, tform) 
+               };
 
        DOM.oils_rpt_tform_label_input.focus();
        DOM.oils_rpt_tform_label_input.select();
+       oilsRptHideTformFields();
 
-       if( field.datatype == 'timestamp' )
-               unHideMe(DOM.oils_rpt_tform_date_div);
+       _debug("Transforming item with datatype "+field.datatype);
+       unHideMe($('oils_rpt_tform_'+field.datatype+'_div'));
+       unHideMe($('oils_rpt_tform_'+field.datatype+'_raw'));
+       $('oils_rpt_tform_'+field.datatype+'_raw').checked = true;
 }
 
+function oilsRptHideTformFields() {
+       for( var t in oilsRptTransforms ) {
+               hideMe($('oils_rpt_tform_'+t+'_div'));
+               for( var i in oilsRptTransforms[t] ) {
+                       _debug('oils_rpt_tform_'+t+'_'+oilsRptTransforms[t][i]);
+                       $('oils_rpt_tform_'+t+'_'+oilsRptTransforms[t][i]).checked = false;
+               }
+       }
+}
 
+function oilsRptGetTform() {
+       for( var t in oilsRptTransforms ) 
+               for( var i in oilsRptTransforms[t] ) 
+                       if( $('oils_rpt_tform_'+t+'_'+oilsRptTransforms[t][i]).checked )
+                               return oilsRptTransforms[t][i];
+       return null;
+}
 
+;
index 527c08b..31f776a 100644 (file)
                                        <div style='margin-bottom: 10px;'>Select how this field should be displayed:</div>
                                        <!--#include virtual="oils_rpt_tform_string.xhtml"-->
                                        <!--#include virtual="oils_rpt_tform_date.xhtml"-->
+                                       <!--#include virtual="oils_rpt_tform_numeric.xhtml"-->
                                </div>
                                <br/><br/>
                                <button id='oils_rpt_tform_submit'>Add Item</button>
diff --git a/Open-ILS/web/reports/oils_rpt_tform_date.xhtml b/Open-ILS/web/reports/oils_rpt_tform_date.xhtml
new file mode 100644 (file)
index 0000000..dbd75a6
--- /dev/null
@@ -0,0 +1,11 @@
+<div id='oils_rpt_tform_timestamp_div' class='hide_me'>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_raw'/> Raw Timestamp <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_month_trunc'/> Month Trunc <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_months_ago' /> Months Ago <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_quarters_ago'/> Quarters Ago <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_age'/> Age <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_count'/> Count <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_count_distinct'/> Count Distinct <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_min'/> Min <br/>
+       <input type='radio' name='oils_rpt_tform_timestamp' id='oils_rpt_tform_timestamp_max'/> Max <br/>
+</div>
diff --git a/Open-ILS/web/reports/oils_rpt_tform_numeric.xhtml b/Open-ILS/web/reports/oils_rpt_tform_numeric.xhtml
new file mode 100644 (file)
index 0000000..0a7c114
--- /dev/null
@@ -0,0 +1,9 @@
+<div id='oils_rpt_tform_numeric_div'>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_raw'/> Full Data <br/>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_sum'/> Full Data <br/>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_average'/> Full Data <br/>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_count'/> Count <br/>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_count_distinct'/> Count Distinct <br/>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_min'/> Min <br/>
+       <input type='radio' name='oils_rpt_tform_numeric' id='oils_rpt_tform_numeric_max'/> Max <br/>
+</div>
diff --git a/Open-ILS/web/reports/oils_rpt_tform_string.xhtml b/Open-ILS/web/reports/oils_rpt_tform_string.xhtml
new file mode 100644 (file)
index 0000000..516059a
--- /dev/null
@@ -0,0 +1,8 @@
+<div id='oils_rpt_tform_string_div'>
+       <input type='radio' name='oils_rpt_tform_string' id='oils_rpt_tform_string_raw'/> Full Data <br/>
+       <input type='radio' name='oils_rpt_tform_string' id='oils_rpt_tform_string_count'/> Count <br/>
+       <input type='radio' name='oils_rpt_tform_string' id='oils_rpt_tform_string_count_distinct'/> Count Distinct <br/>
+       <input type='radio' name='oils_rpt_tform_string' id='oils_rpt_tform_string_min'/> Min <br/>
+       <input type='radio' name='oils_rpt_tform_string' id='oils_rpt_tform_string_max'/> Max <br/>
+       <input type='radio' name='oils_rpt_tform_string' id='oils_rpt_tform_string_substring'/> Substring <br/>
+</div>
index 8f89378..c1f966a 100644 (file)
@@ -8,6 +8,10 @@ function oilsRptNextParam() {
        return '::PARAM'+ (oilsRptID2++);
 }
 
+function oilsRptResetParams() {
+       oilsRptID2 = 0;
+}
+
 function nodeText(id) {
        if($(id))
                return $(id).innerHTML;
index 9e2ed39..5170712 100644 (file)
@@ -32,3 +32,22 @@ var oilsPageYMid;
 
 var oilsIDLReportsNS = 'http://open-ils.org/spec/opensrf/IDL/reporter/v1';
 var oilsIDLPersistNS = 'http://open-ils.org/spec/opensrf/IDL/persistance/v1';
+
+/* transforms for the different data types */
+var oilsRptTransforms = {
+       'string'                : [ 'substring' ],
+       'numeric'       : [ 'sum', 'average' ],
+       'timestamp' : [ 'month_trunc', 'months_ago', 'quarters_ago', 'age' ],
+       'all'                   : [ 'raw', 'count', 'count_distinct', 'min', 'max' ]
+};
+
+/* for ease of use, shove everything in the 'all' slot into the other tforms */
+for( var t in oilsRptTransforms ) {
+       if( t == 'all' ) continue;
+       for( var a in oilsRptTransforms['all'] ) 
+               oilsRptTransforms[t].push( oilsRptTransforms['all'][a] );
+}
+delete oilsRptTransforms.all;
+
+
+