refactored field transforms and operations to standalone widget classes
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 26 Sep 2006 14:35:51 +0000 (14:35 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Tue, 26 Sep 2006 14:35:51 +0000 (14:35 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6221 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/reports/oils_rpt.css
Open-ILS/web/reports/oils_rpt_builder.js
Open-ILS/web/reports/oils_rpt_builder.xhtml
Open-ILS/web/reports/oils_rpt_builder_widgets.js [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_ops.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_tform_date.xhtml [deleted file]
Open-ILS/web/reports/oils_rpt_tform_numeric.xhtml [deleted file]
Open-ILS/web/reports/oils_rpt_tform_string.xhtml [deleted file]
Open-ILS/web/reports/oils_rpt_tform_table.xhtml [deleted file]
Open-ILS/web/reports/oils_rpt_tforms.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_vars.js

index 12fa6c5..c829463 100644 (file)
@@ -93,7 +93,7 @@ button {
 .floaty {
        position: absolute;     
        text-align: center;
-       z-index: 10;
+       z-index: 1;
        background: #E0F0F0; 
        border: 3px groove #0033EE;
        padding: 10px;
@@ -142,3 +142,9 @@ button {
        border-bottom: 1px solid #A0A0A0;
        padding: 4px;
 }
+
+.oils_rpt_cal_image {
+       cursor: pointer; 
+       border: 1px solid red; 
+       padding: 0px; margin: -3px;
+}
index 8e34acf..401e2a6 100644 (file)
@@ -6,6 +6,7 @@ function oilsInitReportBuilder() {
        oilsReportBuilderReset();
        DOM.oils_rpt_table.onclick = 
                function(){hideMe(DOM.oils_rpt_column_editor)};
+       //oilsRptBuildCalendars();
        oilsDrawRptTree(
                function() { 
                        hideMe(DOM.oils_rpt_tree_loading); 
@@ -26,6 +27,26 @@ function oilsReportBuilderReset() {
        oilsRptResetParams();
 }
 
+/*
+function oilsRptBuildCalendars() {
+       Calendar.setup({
+               inputField  : "oils_rpt_filter_tform_timestamp_input", // id of the input field
+               ifFormat    : "%Y-%m-%d", // format of the input field
+               button      : "oils_rpt_filter_tform_timestamp_cal",  // trigger for the calendar (button ID)
+               align       : "Tl", // alignment (defaults to "Bl")
+               singleClick : true
+       });
+       Calendar.setup({
+               inputField  : "oils_rpt_filter_tform_timestamp_input_2", // id of the input field
+               ifFormat    : "%Y-%m-%d", // format of the input field
+               button      : "oils_rpt_filter_tform_timestamp_cal2",  // trigger for the calendar (button ID)
+               align       : "Tl", // alignment (defaults to "Bl")
+               singleClick : true
+       });
+}
+*/
+
+
 
 /* returns just the column name */
 function oilsRptPathCol(path) {
@@ -282,9 +303,10 @@ function oilsRptHideEditorDivs() {
 function oilsRptDrawDataWindow(path) {
        var col = oilsRptPathCol(path);
        var cls = oilsRptPathClass(path);
-       var field = grep(oilsIDL[cls].fields, function(f){return (f.name==col);})[0];
+       var field = oilsRptFindField(oilsIDL[cls], col);
 
        appendClear(DOM.oils_rpt_editor_window_label, text(oilsRptMakeLabel(path)));
+       appendClear(DOM.oils_rpt_editor_window_datatype, text(field.datatype));
 
        _debug("setting update data window for column "+col+' on class '+cls);
 
@@ -299,13 +321,24 @@ function oilsRptDrawDataWindow(path) {
        div.style.visibility='hidden'; 
 
        oilsRptDrawTransformWindow(path, col, cls, field);
+       oilsRptDrawFilterWindow(path, col, cls, field);
+
+       //oilsRptSetFilters(field.datatype);
+
+       //oilsRptDoFilterWidgets();
+
+       //DOM.oils_rpt_filter_tform_selector.onchange = oilsRptDoFilterWidgets;
 
-       DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
        buildFloatingDiv(div, 600);
 
        /* now let them see it */
        div.style.visibility='visible';
 
+       oilsRptSetDataWindowActions(div);
+}
+
+
+function oilsRptSetDataWindowActions(div) {
        /* give the tab links behavior */
        DOM.oils_rpt_tform_tab.onclick = 
                function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_tform_div)};
@@ -315,6 +348,14 @@ function oilsRptDrawDataWindow(path) {
                function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_agg_filter_div)};
 
        DOM.oils_rpt_tform_tab.onclick();
+       DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
+}
+
+
+function oilsRptDrawFilterWindow(path, col, cls, field) {
+       oilsRptCurrentFilterTform = new oilsRptTFormManager(DOM.oils_rpt_filter_tform_table);
+       oilsRptCurrentFilterTform.build(field.datatype, false, true);
+       oilsRptCurrentFilterOpManager = new oilsRptOpManager(DOM.oils_rpt_filter_op_table);
 }
 
 
@@ -325,24 +366,39 @@ function oilsRptDrawTransformWindow(path, col, cls, field) {
 
        DOM.oils_rpt_tform_submit.onclick = 
                function(){ 
+                       /*
                        var tform = oilsRptGetTform(dtype);
                        _debug('found tform: ' + js2JSON(tform));
                        var params = getRptTformParams(dtype, tform);
                        _debug('found tform params: ' + js2JSON(params));
                        tform = (tform == 'raw') ? null : tform;
-                       oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value, tform, params ) 
+                       */
+
+                       var tform = oilsRptCurrentTform.getCurrentTForm();
+                       oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value, tform.value, tform.params ) 
                };
 
+
        DOM.oils_rpt_tform_label_input.focus();
        DOM.oils_rpt_tform_label_input.select();
+
+       oilsRptCurrentTform = new oilsRptTFormManager(DOM.oils_rpt_tform_table);
+       oilsRptCurrentTform.build(dtype, true, true);
+
+       /*
        oilsRptHideTformFields();
        oilsRptUnHideTformFields(dtype);
+       */
 
-       _debug("Transforming item with datatype "+dtype);
+       _debug("Building transiform window for datatype "+dtype);
+
+       /*
        unHideMe($('oils_rpt_tform_'+dtype+'_div'));
        $('oils_rpt_tform_all_raw').checked = true;
+       */
 }
 
+/*
 function oilsRptHideTformFields() {
        var rows = DOM.oils_rpt_tform_tbody.childNodes;
        for( var i = 0; i < rows.length; i++ )
@@ -362,6 +418,7 @@ function oilsRptUnHideTformFields(dtype) {
        }
 }
 
+
 function oilsRptGetTform(datatype) {
        for( var i in oilsRptTransforms[datatype] ) 
                if( $('oils_rpt_tform_'+datatype+'_'+oilsRptTransforms[datatype][i]).checked )
@@ -371,16 +428,12 @@ function oilsRptGetTform(datatype) {
                        return oilsRptTransforms.all[i];
        return null;
 }
+*/
+
 
+/*
 function getRptTformParams(type, tform) {
        switch(type) {
-               case 'timestamp':
-                       switch(tform) {
-                               case 'months_ago':
-                                       return [DOM.oils_rpt_tform_timestamp_months_ago_input.value];
-                               case 'quarters_ago':
-                                       return [DOM.oils_rpt_tform_timestamp_quarters_ago_input.value];
-                       }
                case 'string' :
                        switch(tform) {
                                case 'substring' :
@@ -390,5 +443,205 @@ function getRptTformParams(type, tform) {
                        }
        }
 }
+*/
+
+
+/* given a transform selector, this displays the appropriate 
+       transforms for the given datatype.
+       if aggregate is true, is displays the aggregate transforms */
+/*
+function oilsRptSetTransforms(sel, dtype, show_agg, show_noagg) {
+       for( var i = 0; i < sel.options.length; i++ ) {
+               var opt = sel.options[i];
+               var t = opt.getAttribute('datatype');
+               if( t && t != dtype ){
+                       hideMe(opt);
+               } else {
+                       var ag = opt.getAttribute('aggregate');
+                       if( ag && show_agg )
+                               unHideMe(opt);
+                       else if( ag && ! show_agg )
+                               hideMe(opt)
+                       else if( !ag && show_noagg )
+                               unHideMe(opt);
+                       else
+                               hideMe(opt);
+               }
+       }
+}
+*/
+
+
+/* displays the correct filter-transforms for the given datatype */
+/*
+function oilsRptSetFilters(dtype) {
+
+       DOM.oils_rpt_filter_submit.onclick = function() {
+               var data = oilsRptDoFilterWidgets();
+               alert(js2JSON(data));
+       }
+
+       var sel = DOM.oils_rpt_filter_tform_selector;
+       for( var i = 0; i < sel.options.length; i++ ) {
+               var opt = sel.options[i];
+               _debug(opt.getAttribute('op'));
+               var t = opt.getAttribute('datatype');
+               if( t && t != dtype ) hideMe(opt);
+               else unHideMe(opt);
+       }
+}
+*/
+
+/* hides all of the filter widgets */
+function oilsRptHideFilterWidgets(node) {
+       if(!node)
+               node = DOM.oils_rpt_filter_tform_widget_td;
+       if( node.nodeType != 1 ) return;
+       if( node.getAttribute('widget') ) {
+               hideMe(node);
+       } else {
+               var cs = node.childNodes;
+               for( var i = 0; cs && i < cs.length; i++ )
+                       oilsRptHideFilterWidgets(cs[i]);
+       }
+}
+
+/* what does this need to do? */
+function oilsRptSetFilterOpActions() {
+}
+
+
+
+/* hides/unhides the appropriate widgets and returns the parameter
+       array appropriate for the selected widget */
+function oilsRptDoFilterWidgets() {
+       filter = getSelectorVal(DOM.oils_rpt_filter_tform_selector);
+       oilsRptHideFilterWidgets();
+       var op = null;
+       var tform = null;
+       var params = null;
+
+       switch(filter) {
+               
+               /* generic transforms */
+               case 'equals':
+                       if(!op) op = 'equals';
+               case 'like':
+                       if(!op) op = 'like';
+               case 'ilike':
+                       if(!op) op = 'ilike';
+               case 'gt':
+                       if(!op) op = '>';
+               case 'gte':
+                       if(!op) op = '>=';
+               case 'lt':
+                       if(!op) op = '<';
+               case 'lte':
+                       if(!op) op = '<=';
+               case 'in':
+                       if(!op) op = 'in';
+               case 'not_in':
+                       if(!op) op = 'not in';
+               case 'between':
+                       if(!op) op = 'between';
+               case 'not_between':
+                       if(!op) op = 'not between';
+                       unHideMe(DOM.oils_rpt_filter_tform_input);      
+                       params = [DOM.oils_rpt_filter_tform_input.value];
+                       break;
+
+               /* timestamp transforms */
+               case 'date_between':
+                       if(!op) op = 'between';
+               case 'date_not_between':
+                       if(!op) op = 'not between';
+                       tform = 'date';
+                       var d = new Date();
+                       unHideMe(DOM.oils_rpt_filter_tform_date_1);
+                       unHideMe(DOM.oils_rpt_filter_tform_date_2);
+                       unHideMe(DOM.oils_rpt_filter_tform_date_hint);
+                       DOM.oils_rpt_filter_tform_date_1.value = mkYearMonDay();
+                       DOM.oils_rpt_filter_tform_date_2.value = mkYearMonDay();
+                       params = [
+                               DOM.oils_rpt_filter_tform_date_1.value,
+                               DOM.oils_rpt_filter_tform_date_2.value
+                       ];
+                       break;
+
+               case 'dow_between':
+                       op = 'between';
+                       if(!tform) tform = 'dow';
+               case 'dow_not_between':
+                       if(!op) op = 'not between';
+                       if(!tform) tform = 'dow';
+                       break;
+
+               case 'dom_between':
+                       op = 'between';
+                       if(!tform) tform = 'dom';
+               case 'dom_not_between':
+                       if(!op) op = 'not between';
+                       if(!tform) tform = 'dom';
+                       break;
+
+               case 'month_between':
+                       op = 'between';
+                       if(!tform) tform = 'moy';
+               case 'month_not_between':
+                       if(!op) op = 'not between';
+                       if(!tform) tform = 'moy';
+                       break;
+
+               case 'quarter_between':
+                       op = 'between';
+                       if(!tform) tform = 'qoy';
+               case 'quarter_not_between':
+                       if(!op) op = 'not between';
+                       if(!tform) tform = 'qoy';
+                       break;
+
+               case 'year_between':
+                       if(!op) op = 'between';
+                       if(!tform) tform = 'year_trunc';
+               case 'year_not_between':
+                       if(!op) op = 'not between';
+                       if(!tform) tform = 'year_trunc';
+                       break;
+
+               case 'age_between':
+                       if(!op) op = 'between';
+                       if(!tform) tform = 'age';
+               case 'age_not_between':
+                       if(!op) op = 'not between';
+                       if(!tform) tform = 'age';
+                       break;
+
+               /* string transforms */
+               case 'substring':
+                       if(!tform) tform = 'substring';
+                       break;
+
+               case 'lower':
+                       if(!op) op = '';
+                       if(!tform) tform = 'dow';
+
+               case 'upper':
+                       if(!op) op = '';
+                       if(!tform) tform = 'dow';
+
+               /* numeric transforms */
+               case 'round':
+                       if(!op) op = '';
+                       if(!tform) tform = 'dow';
+
+               case 'int':
+                       if(!op) op = '';
+                       if(!tform) tform = 'dow';
+       }
+
+       return { op : op, params : params, tform : tform };
+}
+
+
 
 
index cb1f307..e9ecc05 100644 (file)
                <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>
+               <script language='javascript' src='/opac/common/js/slimtree.js'> </script>
+               <script>
+                       stpicopen  = '../opac/images/slimtree/folder2.gif';
+                       stpicclose = '../opac/images/slimtree/folderopen2.gif';
+                       stpicblank = '../opac/images/slimtree/page.gif';
+                       stpicline  = '../opac/images/slimtree/line.gif';
+                       stpicjoin  = '../opac/images/slimtree/join.gif';
+                       stpicjoinb = '../opac/images/slimtree/joinbottom.gif';
+               </script>
+
 
                <link rel="stylesheet" type="text/css" media="all" 
                        href="/opac/common/js/jscalendar/calendar-brown.css" title="win2k-cold-1" />
@@ -34,8 +43,9 @@
                <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_builder.js"></script>
+               <script type="text/javascript" src="oils_rpt_builder_widgets.js"></script>
                <script type="text/javascript" src="oils_rpt.js"></script>
 
                <link rel="stylesheet" type="text/css" href="oils_rpt.css"> </link>
@@ -54,7 +64,6 @@
                        <a class='oils_rpt_main_link' href='javascript:_l("oils_rpt.xhtml");'>Reports Home</a>
                </div>
 
-
                <div id='oils_rpt_tree_loading'>
                        Loading...
                </div>
                        </tbody></table>
 
                        <div style='margin-bottom: 10px;'>
-                               <b style='padding-right: 15px;' id='oils_rpt_editor_window_label'/>
+                               <b style='padding-right: 8px;' id='oils_rpt_editor_window_label'/>
+                               (<span id='oils_rpt_editor_window_datatype'/>)
                        </div>
                        <div id='oils_rpt_tform_div'>
                                <input size='28' id='oils_rpt_tform_label_input'/>
                                <div class='oils_rpt_field_editor_window'>
                                        <div style='margin-bottom: 10px;'>Select how this field should be displayed:</div>
-                                       <!--#include virtual="oils_rpt_tform_table.xhtml"-->
+                                       <!--#set var="OILS_RPT_TFORM_TABLE_ID" value="oils_rpt_tform_table"-->
+                                       <!--#include virtual="oils_rpt_tforms.xhtml"-->
                                </div>
                                <br/><br/>
                                <button id='oils_rpt_tform_submit'>Add Item</button>
                        <div id='oils_rpt_filter_div' class='hide_me'>
                                <div class='oils_rpt_field_editor_window'>
                                        <div style='margin-bottom: 10px;'>Select what filter should be applied to this field:</div>
-                                       <!--#include virtual="oils_rpt_filter_table.xhtml"-->
+                                       <div>
+                                               <!--#set var="OILS_RPT_TFORM_TABLE_ID" value="oils_rpt_filter_tform_table"-->
+                                               <!--#include virtual="oils_rpt_tforms.xhtml"-->
+                                       </div>
+                                       <div>
+                                               <!--#set var="OILS_RPT_OP_TABLE_ID" value="oils_rpt_filter_op_table"-->
+                                               <!--#include virtual="oils_rpt_ops.xhtml"-->
+                                       </div>
+
                                </div>
                                <button id='oils_rpt_filter_submit'>Create Filter</button>
                        </div>
diff --git a/Open-ILS/web/reports/oils_rpt_builder_widgets.js b/Open-ILS/web/reports/oils_rpt_builder_widgets.js
new file mode 100644 (file)
index 0000000..747aa59
--- /dev/null
@@ -0,0 +1,109 @@
+function oilsRptBuilderWidget(node) {
+       this.init(node);
+}
+
+oilsRptBuilderWidget.prototype.init = function(node) {
+       if(!node) return;
+       this.node = node;
+       _debug(this.node.id);
+
+       this.selector = $n(this.node, 'selector');
+       this.widgetNode = $n(this.node, 'widget_td');
+       var obj = this;
+       this.selector.onchange = function() { 
+               obj.showWidgets(
+                       obj.selector.options[obj.selector.selectedIndex]);
+       }
+       this.hideWidgets();
+}
+
+
+oilsRptBuilderWidget.prototype.hideWidgets = function(node) {
+       if(!node) node = this.widgetNode;
+       if( node.nodeType != 1 ) return;
+       if( node.getAttribute('widget') ) {
+               hideMe(node);
+       } else {
+               var cs = node.childNodes;
+               for( var i = 0; cs && i < cs.length; i++ )
+                       this.hideWidgets(cs[i]);
+       }
+}
+
+
+oilsRptBuilderWidget.prototype.showWidgets = function(opt) {
+       _debug("showing widget with opt value: "+opt.value);
+       this.hideWidgets();
+       var widget = opt.getAttribute('widget');
+       if( widget ) unHideMe($n(this.node, widget));
+}
+
+oilsRptBuilderWidget.prototype.getCurrentOpt = function() {
+       return this.selector.options[this.selector.selectedIndex];
+}
+
+
+
+
+/* ------------------------------------------------------------------------- */
+oilsRptTFormManager.prototype = new oilsRptBuilderWidget();
+oilsRptTFormManager.prototype.constructor = oilsRptTFormManager;
+oilsRptTFormManager.baseClass = oilsRptBuilderWidget.prototype.constructor;
+function oilsRptTFormManager(node) { this.init(node); }
+
+/* displays the appropriate transforms for the given types and flags */
+oilsRptTFormManager.prototype.build = function( dtype, show_agg, show_noagg ) {
+       for( var i = 0; i < this.selector.options.length; i++ ) {
+               var opt = this.selector.options[i];
+               var t = opt.getAttribute('datatype');
+               if( t && t != dtype ){
+                       hideMe(opt);
+               } else {
+                       var ag = opt.getAttribute('aggregate');
+                       if( ag && show_agg )
+                               unHideMe(opt);
+                       else if( ag && ! show_agg )
+                               hideMe(opt)
+                       else if( !ag && show_noagg )
+                               unHideMe(opt);
+                       else hideMe(opt);
+               }
+       }
+}
+
+oilsRptTFormManager.prototype.getCurrentTForm = function() {
+       var opt = this.getCurrentOpt();
+       var data = {
+               value            : opt.value,
+               datatype  : opt.getAttribute('datatype'),
+               aggregate : opt.getAttribute('aggregate'),
+       };
+       data.params = this.getWidgetParams(data);
+       return data;
+}
+
+
+oilsRptTFormManager.prototype.getWidgetParams = function(obj) {
+       switch(obj.datatype) {
+               case 'string' :
+                       switch(obj.value) {
+                               case 'substring':
+                                       return [ 
+                                               $n(this.widgetNode, 'string_substring_offset').value,
+                                               $n(this.widgetNode, 'string_substring_length').value
+                                       ];
+                       }
+       }
+       return null;
+}
+
+
+
+
+/* ------------------------------------------------------------------------- */
+
+oilsRptOpManager.prototype = new oilsRptBuilderWidget();
+oilsRptOpManager.prototype.constructor = oilsRptOpManager;
+oilsRptOpManager.baseClass = oilsRptBuilderWidget.prototype.constructor;
+function oilsRptOpManager(node) { this.init(node); }
+
diff --git a/Open-ILS/web/reports/oils_rpt_ops.xhtml b/Open-ILS/web/reports/oils_rpt_ops.xhtml
new file mode 100644 (file)
index 0000000..2af87a0
--- /dev/null
@@ -0,0 +1,74 @@
+<table id='<!--#echo var="OILS_RPT_OP_TABLE_ID"-->'> 
+       <tbody>
+               <tr>
+
+                       <td>
+                               <select name='selector' style='width: 14em;'>
+                                       <option value='' selected='selected'>Equals</option>
+                                       <option value='like'>Contains Matching substring</option>
+                                       <option value='ilike'>Contains Matching substring (ignore case)</option>
+                                       <option value='&gt;'>Greater than</option>
+                                       <option value='&gt;='>Greater than or equal to</option>
+                                       <option value='&lt;'>Less than</option>
+                                       <option value='&lt;='>Less than or equal to</option>
+                                       <option value='in'>In (comma separated list)</option>
+                                       <option value='not in'>Not in (comma separated list)</option>
+                                       <option value='between'>Between</option>
+                                       <option value='not between'>Not between</option>
+                               </select>
+
+                       </td>
+
+                       <td name='widget_td'>
+                               <!-- Define all of the helpful user data widgets here -->
+
+                               <input widget='1' id='oils_rpt_filter_tform_input' size='12' type='text'/>
+
+                               <input widget='1' id='oils_rpt_filter_tform_date_1' size='10' maxlength='10' type='text'/>
+                               <input widget='1' id='oils_rpt_filter_tform_date_2' size='10' maxlength='10' type='text'/>
+                               <span  widget='1' id='oils_rpt_filter_tform_date_hint'>(YYYY-MM-DD)</span>
+
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_day_selector'>
+                                       <!--#include virtual="oils_rpt_day_opts.xhtml"-->
+                               </select>
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_dom_selector'>
+                                       <!--#include virtual="oils_rpt_dom_opts.xhtml"-->
+                               </select>
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_month_selector'>
+                                       <!--#include virtual="oils_rpt_month_opts.xhtml"-->
+                               </select>
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_quarter_selector'>
+                                       <!--#include virtual="oils_rpt_quarter_opts.xhtml"-->
+                               </select>
+
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_day_selector_2'>
+                                       <!--#include virtual="oils_rpt_day_opts.xhtml"-->
+                               </select>
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_dom_selector_2'>
+                                       <!--#include virtual="oils_rpt_dom_opts.xhtml"-->
+                               </select>
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_month_selector_2'>
+                                       <!--#include virtual="oils_rpt_month_opts.xhtml"-->
+                               </select>
+
+                               <select widget='1' id='oils_rpt_filter_tform_timestamp_quarter_selector_2'>
+                                       <!--#include virtual="oils_rpt_quarter_opts.xhtml"-->
+                               </select>
+
+                               <input widget='1' id='oils_rpt_filter_tform_input_2' size='10' type='text'/>
+
+                       </td>
+               </tr>
+       </tbody>
+</table>
+
+
+
+               
diff --git a/Open-ILS/web/reports/oils_rpt_tform_date.xhtml b/Open-ILS/web/reports/oils_rpt_tform_date.xhtml
deleted file mode 100644 (file)
index c7c11a5..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-<tr datatype='timestamp'>
-       <td colspan='2'>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_timestamp_month_trunc'/> Month Trunc <br/>
-       </td>
-</tr>
-<tr datatype='timestamp'>
-       <td>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_timestamp_months_ago'/> 
-               <span>Month(s) Ago</span> 
-       </td>
-       <td>
-               <select id='oils_rpt_tform_timestamp_months_ago_selector'  style='padding: 0px;'
-                               onchange='
-                                       DOM.oils_rpt_tform_timestamp_months_ago_input.value=getSelectorVal(this);
-                                       DOM.oils_rpt_tform_timestamp_months_ago.checked=true;
-                               '>
-                       <option value='1'>1</option>
-                       <option value='2'>2</option>
-                       <option value='3'>3</option>
-                       <option value='4'>4</option>
-                       <option value='5'>5</option>
-                       <option value='6'>6</option>
-                       <option value='7'>7</option>
-                       <option value='8'>8</option>
-                       <option value='9'>9</option>
-                       <option value='10'>10</option>
-                       <option value='11'>11</option>
-                       <option value='12'>12</option>
-                       <option value='18'>18</option>
-                       <option value='24'>24</option>
-               </select>
-               <input type='text' size='3' maxlength='3' id='oils_rpt_tform_timestamp_months_ago_input' 
-                       onchange='DOM.oils_rpt_tform_timestamp_months_ago.checked = true;' style='padding:0px'  value='1'/>
-       </td>
-</tr>
-<tr datatype='timestamp'>
-       <td>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_timestamp_quarters_ago'/> 
-               <span>Quarter(s) Ago</span>
-       </td>
-       <td>
-               <select id='oils_rpt_tform_timestamp_quarters_ago_selector' style='padding:0px'  
-                               onchange='
-                                       DOM.oils_rpt_tform_timestamp_quarters_ago_input.value=getSelectorVal(this);
-                                       DOM.oils_rpt_tform_timestamp_quarters_ago.checked = true;'>
-                       <option value='1'>1</option>
-                       <option value='2'>2</option>
-                       <option value='3'>3</option>
-                       <option value='4'>4</option>
-                       <option value='5'>5</option>
-                       <option value='6'>6</option>
-                       <option value='7'>7</option>
-                       <option value='8'>8</option>
-                       <option value='9'>9</option>
-                       <option value='10'>10</option>
-                       <option value='11'>11</option>
-                       <option value='12'>12</option>
-               </select>
-               <input type='text' size='3' maxlength='3' id='oils_rpt_tform_timestamp_quarters_ago_input' 
-                       onchange='DOM.oils_rpt_tform_timestamp_quarters_ago.checked = true;' style='padding:0px'  value='1'/>
-       </td>
-</tr>
-<tr datatype='timestamp'>
-       <td colspan='2'>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_timestamp_age'/> Age <br/>
-       </td>
-</tr>
-
-
diff --git a/Open-ILS/web/reports/oils_rpt_tform_numeric.xhtml b/Open-ILS/web/reports/oils_rpt_tform_numeric.xhtml
deleted file mode 100644 (file)
index f60949b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-<tr datatype='numeric'>
-       <td colspan='2'>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_numeric_sum'/> Sum <br/>
-       </td>
-       <td colspan='2'>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_numeric_average'/> Average <br/>
-       </td>
-</tr>
diff --git a/Open-ILS/web/reports/oils_rpt_tform_string.xhtml b/Open-ILS/web/reports/oils_rpt_tform_string.xhtml
deleted file mode 100644 (file)
index b106849..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-<tr datatype='string'>
-       <td>
-               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_string_substring'/> 
-               <span>Substring</span>
-       </td>
-       <td>
-               <span style='padding-left: 5px;'>Offset: </span>
-               <input id='oils_rpt_tform_string_substring_offset' size='3' value='1'
-                       onchange='DOM.oils_rpt_tform_string_substring.checked = true;'/>
-               <span style='padding-left: 5px;'>Length: </span>
-               <input id='oils_rpt_tform_string_substring_length' size='3' value='1'
-                       onchange='DOM.oils_rpt_tform_string_substring.checked = true;'/>
-       </td>
-</tr>
diff --git a/Open-ILS/web/reports/oils_rpt_tform_table.xhtml b/Open-ILS/web/reports/oils_rpt_tform_table.xhtml
deleted file mode 100644 (file)
index b81f012..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<table>
-       <tbody id='oils_rpt_tform_tbody' class='oils_rpt_editor_window_tbody'>
-               <tr datatype='all'>
-                       <td colspan='2'>
-                               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_all_raw'/> 
-                               <span>Raw Data</span>
-                       </td>
-               </tr>
-               <tr datatype='all'>
-                       <td colspan='2'>
-                               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_all_count'/> 
-                               <span>Count</span>
-                       </td>
-               </tr>
-               <tr datatype='all'>
-                       <td colspan='2'>
-                               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_all_count_distinct'/> 
-                               <span>Count Distinct</span>
-                       </td>
-               </tr>
-               <tr datatype='all'>
-                       <td colspan='2'>
-                               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_all_min'/>
-                               <span>Min</span>
-                       </td>
-               </tr>
-               <tr datatype='all'>
-                       <td colspan='2'>
-                               <input type='radio' name='oils_rpt_tform_input' id='oils_rpt_tform_all_max'/>
-                               <span>Max</span>
-                       </td>
-               </tr>
-               <!--#include virtual="oils_rpt_tform_string.xhtml"-->
-               <!--#include virtual="oils_rpt_tform_date.xhtml"-->
-               <!--#include virtual="oils_rpt_tform_numeric.xhtml"-->
-       </tbody>
-</table>
-
-
diff --git a/Open-ILS/web/reports/oils_rpt_tforms.xhtml b/Open-ILS/web/reports/oils_rpt_tforms.xhtml
new file mode 100644 (file)
index 0000000..1febaf7
--- /dev/null
@@ -0,0 +1,54 @@
+<!-- Generic selecto for transforms -->
+<table id='<!--#echo var="OILS_RPT_TFORM_TABLE_ID"-->'> 
+       <tbody>
+               <tr>
+                       <td>
+                               <select name='selector' style='width: 14em;'>
+                               
+                                       <!-- generic transforms -->
+                                       <option value='Bare' selected='selected'>Raw Data</option>
+                                       <option value='count' aggregate='1'>Count</option>
+                                       <option value='count distinct' aggregate='1'>Count Distinct</option>
+                                       <option value='min' aggregate='1'>Min</option>
+                                       <option value='max' aggregate='1'>Max</option>
+                                       
+                                       <!-- string transforms -->
+                                       <option value='substring' datatype='string' widget='string_substring_widget' >Substring</option>
+                                       <option value='lower' datatype='string'>Lower case</option>
+                                       <option value='upper' datatype='string'>Upper Case</option>
+                                       
+                                       <!-- timestamp transforms -->
+                                       <option value='dow' datatype='timestamp'>Day of Week</option>
+                                       <option value='dom' datatype='timestamp'>Day of Month</option>
+                                       <option value='doy' datatype='timestamp'>Day of Year</option>
+                                       <option value='woy' datatype='timestamp'>Week of Year</option>
+                                       <option value='moy' datatype='timestamp'>Month of Year</option>
+                                       <option value='qoy' datatype='timestamp'>Quarter of Year</option>
+                                       <option value='date' datatype='timestamp'>Date</option>
+                                       <option value='month_trunc' datatype='timestamp'>Year + Month</option>
+                                       <option value='year_trunc' datatype='timestamp'>Year</option>
+                                       <option value='day_name' datatype='timestamp'>Day Name</option>
+                                       <option value='month_name' datatype='timestamp'>Month Name</option>
+                                       
+                                       <!-- numeric transforms -->
+                                       <option value='round' datatype='numeric' >Round</option>
+                                       <option value='int' datatype='numeric' >Drop trailing decimals</option>
+                               </select>
+                       </td>
+
+                       <td name='widget_td'>
+
+                               <div widget='1' name='string_substring_widget'>
+                                       <span style='padding-left: 5px;'>Offset: </span>
+                                       <input name='string_substring_offset' size='3' value='1'/>
+                                       <span style='padding-left: 5px;'>Length: </span>
+                                       <input name='string_substring_length' size='3' value='1'/>
+                               </div>
+
+                       </td>
+
+               </tr>
+       </tbody>
+</table>
+
+
index 4e074cf..75cc54e 100644 (file)
@@ -34,12 +34,14 @@ 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 */
 /*
@@ -59,5 +61,11 @@ var oilsRptRegexClasses = {
 }
 */
 
+/* the current transform manager for the builder transform window */
+var oilsRptCurrentTform;
 
+/* the current transform manager for the builder filter window */
+var oilsRptCurrentFilterTform;
 
+/* the current operation manager for the filter window */
+var oilsRptCurrentFilterOpManager;