more widget work
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 5 Oct 2006 17:06:40 +0000 (17:06 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 5 Oct 2006 17:06:40 +0000 (17:06 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6395 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/reports/oils_rpt_builder.js
Open-ILS/web/reports/oils_rpt_param_editor.js
Open-ILS/web/reports/oils_rpt_tforms.js
Open-ILS/web/reports/oils_rpt_widget.js

index eda54d6..f075669 100644 (file)
@@ -50,7 +50,7 @@ function oilsReportBuilderSave() {
        req.callback(
                function(r) {
                        var res = r.getResultObject();
-                       if( res != 0 ) {
+                       if( res && res != '0' ) {
                                oilsRptAlertSuccess();
                                _l('oils_rpt.xhtml');
                        }
index 72f5ab1..8992bb8 100644 (file)
@@ -69,14 +69,10 @@ oilsRptParamEditor.prototype.buildRelWidget = function(par, row) {
 
 
 oilsRptParamEditor.prototype.buildWidget = function(param, node) {
-       var path = param.path.split(/-/);
-       path.pop();
-       var cls = path.pop();
-
-       var field = oilsRptFindField(
-               oilsIDL[oilsRptPathClass(param.path)], oilsRptPathCol(param.path));
-       var dtype = field.datatype;
        var transform = param.column.transform;
+       var cls = oilsRptPathClass(param.path);
+       var field = oilsRptFindField(oilsIDL[cls], oilsRptPathCol(param.path));
+       var dtype = field.datatype;
 
        _debug("building widget with param class:" + cls + ' col: '+param.column.colname + ' op: '+ param.op);
 
@@ -87,11 +83,76 @@ oilsRptParamEditor.prototype.buildWidget = function(param, node) {
        widgetArgs.inputSize = OILS_RPT_TRANSFORMS[transform].input_size;
 
        switch(transform) {
+               case 'hour_trunc':
                case 'month_trunc':
                case 'year_trunc':
                case 'date':
                        atomicWidget = oilsRptCalWidget;
                        break;
+               case 'age':
+                       atomicWidget = oilsRptAgeWidget;
+                       break;
+               case 'days_ago':        
+                       widgetArgs.size = 7;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'months_ago':      
+                       widgetArgs.size = 12;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'quarters_ago':    
+                       widgetArgs.size = 4;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'years_ago':       
+                       widgetArgs.size = 20;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'dow':
+                       widgetArgs.size = 7;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'dom':
+                       widgetArgs.size = 31;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'doy':
+                       widgetArgs.size = 365;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'woy':
+                       widgetArgs.size = 52;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'moy':
+                       widgetArgs.size = 12;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'qoy':
+                       widgetArgs.size = 4;
+                       widgetArgs.start = 1;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+               case 'hod':
+                       widgetArgs.size = 24;
+                       widgetArgs.start = 0;
+                       atomicWidget = oilsRptNumberWidget
+                       break;
+       }
+
+       switch(cls) {
+               case 'aou':
+                       atomicWidget = oilsRptOrgSelector;
+                       break;
        }
 
        switch(param.op) {
index f92170d..a7e9492 100644 (file)
@@ -76,7 +76,7 @@ var OILS_RPT_TRANSFORMS = {
        moy : {
                datatype : OILS_RPT_DTYPE_TIMESTAMP,
                label : 'Month of Year',
-               regex : /^[0-9]{1,2}$/
+               regex : /^\d{1,2}$/
        },
 
        qoy : {
@@ -85,6 +85,12 @@ var OILS_RPT_TRANSFORMS = {
                regex : /^[1234]$/
        }, 
 
+       hod : {
+               datatype : OILS_RPT_DTYPE_TIMESTAMP,
+               label : 'Hour of day',
+               regex : /^\d{1,2}$/
+       }, 
+
        date : {
                datatype : OILS_RPT_DTYPE_TIMESTAMP,
                label : 'Date',
@@ -112,6 +118,15 @@ var OILS_RPT_TRANSFORMS = {
                input_size : 4
        },
 
+       hour_trunc : {
+               datatype : OILS_RPT_DTYPE_TIMESTAMP,
+               label : 'Hour',
+               regex : /^\d{2}$/,
+               hint  : 'HH',
+               cal_format : '%H',
+               input_size : 2
+       },
+
        day_name : {
                datatype : OILS_RPT_DTYPE_TIMESTAMP,
                label : 'Day Name'
@@ -126,6 +141,7 @@ var OILS_RPT_TRANSFORMS = {
                label : 'Age'
        },
 
+       /*
        relative_year : {
                datatype : OILS_RPT_DTYPE_TIMESTAMP,
                label : 'Relative year'
@@ -145,6 +161,33 @@ var OILS_RPT_TRANSFORMS = {
                datatype : OILS_RPT_DTYPE_TIMESTAMP,
                label : 'Relative date'
        },
+       */
+
+       /* exists?
+       days_ago : {
+               datatype : OILS_RPT_DTYPE_TIMESTAMP,
+               label : 'Days ago'
+       }
+       */
+
+       months_ago : {
+               datatype : OILS_RPT_DTYPE_TIMESTAMP,
+               label : 'Months ago'
+       },
+
+       quarters_ago : {
+               datatype : OILS_RPT_DTYPE_TIMESTAMP,
+               label : 'Quarters ago'
+       },
+
+
+       /* exists?
+       years_ago : {
+               datatype : OILS_RPT_DTYPE_TIMESTAMP,
+               label : 'Years ago'
+       },
+       */
+
 
        /* int  / float transforms ----------------------------------- */
        sum : {
index f4d74ff..76446fc 100644 (file)
@@ -1,3 +1,4 @@
+/*
 oilsRptSetSubClass('oilsRptWidget', 'oilsRptObject');
 oilsRptWidget.OILS_RPT_TRANSFORM_WIDGET = 0;
 oilsRptWidget.OILS_RPT_OPERATION_WIDGET = 1;
@@ -24,9 +25,6 @@ oilsRptWidget.prototype.draw = function() {
        appendClear(this.node, this.dest);
 }
 
-/* ----------------------------------------------------------- */
-
-/* multiple input boxes, no separate source, optional box labels */
 oilsRptSetSubClass('oilsRptMultiInputWidget', 'oilsRptWidget');
 function oilsRptMultiInputWidget(args) {
        this.initInputWidget(args);
@@ -64,10 +62,6 @@ oilsRptMultiInputWidget.prototype.setLabels = function(labels) {
 
 
 
-/* ----------------------------------------------------------- */
-
-/* abstract class, multi-select output (dest), 
-       add and delete buttons, you provide intput */
 oilsRptSetSubClass('oilsRptMultiWidget', 'oilsRptWidget');
 function oilsRptMultiWidget(args) {
        this.initMultiWidget(args);
@@ -119,10 +113,6 @@ oilsRptMultiWidget.prototype.drawMultiWidget = function() {
        this.node.appendChild(this.dest);
 }
 
-
-/* ----------------------------------------------------------- */
-
-/* single text box as source, multiwidget output (select) as dest */
 oilsRptSetSubClass('oilsRptInputMultiWidget', 'oilsRptMultiWidget');
 function oilsRptInputMultiWidget(args) {
        this.initInputMultiWidget(args);
@@ -145,9 +135,7 @@ oilsRptInputMultiWidget.prototype.getSourceCollector = function() {
 }
 
 
-/* ----------------------------------------------------------- */
 
-/* multi-select source */
 oilsRptSetSubClass('oilsRptSelectorMultiWidget', 'oilsRptMultiWidget');
 function oilsRptSelectorMultiWidget(args) {
        this.initSelectorMultiWidget(args);
@@ -169,10 +157,11 @@ oilsRptSelectorMultiWidget.prototype.getSourceCollector = function() {
                }
        }
 }
+*/
 
 /* ----------------------------------------------------------- */
 
-/* in process */
+/*
 oilsRptSetSubClass('oilsRptRemoteWidget', 'oilsRptSelectorMultiWidget');
 function oilsRptRemoteWidget(args) {
        this.initRemoteWidget(args);
@@ -191,43 +180,13 @@ oilsRptRemoteWidget.prototype.draw = function() {
 oilsRptRemoteWidget.prototype.setFetch = function(func) {
        this.fetch = func;
 }
+*/
 
 
-/* --------------------------------------------------------------------- */
-
-/* custom my-orgs picker */
-function oilsRptMyOrgsWidget(node, orgid) {
-       this.node = node;
-       this.orgid = orgid;
-}
-
-oilsRptMyOrgsWidget.prototype.draw = function() {
-       var req = new Request(OILS_RPT_FETCH_ORG_FULL_PATH, this.orgid);
-       var obj = this;
-       req.callback(
-               function(r) { obj.drawWidget(r.getResultObject()); }
-       );
-       req.send();
-}
 
-oilsRptMyOrgsWidget.prototype.drawWidget = function(orglist) {
-       var sel = this.node;
-       for( var i = 0; i < orglist.length; i++ ) {
-               var org = orglist[i];
-               var opt = insertSelectorVal( this.node, -1, 
-                       org.name(), org.id(), null, findOrgDepth(org) );
-               if( org.id() == this.orgid )
-                       opt.selected = true;
-       }
-}
-
-oilsRptMyOrgsWidget.prototype.getValue = function() {
-       return getSelectorVal(this.node);
-}
 
 /* --------------------------------------------------------------------- */
-
-/* custom all-orgs picker */
+/*
 oilsRptSetSubClass('oilsRptOrgMultiSelect','oilsRptSelectorMultiWidget');
 function oilsRptOrgMultiSelect(args) {
        this.initSelectorMultiWidget(args);
@@ -244,6 +203,8 @@ oilsRptOrgMultiSelect.prototype.draw = function(org) {
        }
        this.drawMultiWidget();
 }
+*/
+
 
 
 /* --------------------------------------------------------------------- */
@@ -333,7 +294,9 @@ oilsRptSetWidget.prototype.removeSelected = function() {
 }
 
 oilsRptSetWidget.prototype.getValue = function() {
-       return getSelectedSet(this.dest);
+       var vals = [];
+       iterate(this.dest, function(i){vals.push(i.getAttribute('value'))});
+       return vals;
 }
 
 
@@ -348,7 +311,9 @@ function oilsRptBetweenWidget(args) {
 }
 oilsRptBetweenWidget.prototype.draw = function() {
        removeChildren(this.node);
+       this.node.appendChild(text('Between '));
        this.startWidget.draw();
+       this.node.appendChild(text(' and '));
        this.endWidget.draw();
 }
 oilsRptBetweenWidget.prototype.getValue = function() {
@@ -359,8 +324,15 @@ oilsRptBetweenWidget.prototype.getValue = function() {
 }
 
 
+
+
+/* --------------------------------------------------------------------- 
+       ATOMIC WIDGETS
+       --------------------------------------------------------------------- */
+
+
 /* --------------------------------------------------------------------- 
-       the most basic text input widget
+       Atomic text input widget
        --------------------------------------------------------------------- */
 function oilsRptTextWidget(args) {
        this.node = args.node;
@@ -381,8 +353,10 @@ oilsRptTextWidget.prototype.getDisplayValue = function() {
 }
 
 
-/* --------------------------------------------------------------------- */
 
+/* --------------------------------------------------------------------- 
+       Atomic calendar widget
+       --------------------------------------------------------------------- */
 function oilsRptCalWidget(args) {
        this.node = args.node;
        this.calFormat = args.calFormat;
@@ -423,5 +397,157 @@ oilsRptCalWidget.prototype.getDisplayValue = function() {
 }
 
 
+/* --------------------------------------------------------------------- 
+       Atomic org widget
+       --------------------------------------------------------------------- */
+function oilsRptOrgSelector(args) {
+       this.node = args.node;
+       this.selector = elem('select',
+               {multiple:'multiple','class':'oils_rpt_small_info_selector'});
+}
+
+oilsRptOrgSelector.prototype.draw = function(org) {
+       if(!org) org = globalOrgTree;
+       var opt = insertSelectorVal( this.selector, -1, 
+               org.shortname(), org.id(), null, findOrgDepth(org) );
+       if( org.id() == oilsRptCurrentOrg )
+               opt.selected = true;
+       if( org.children() ) {
+               for( var c = 0; c < org.children().length; c++ )
+                       this.draw(org.children()[c]);
+       }
+       this.node.appendChild(this.selector);
+}
+
+oilsRptOrgSelector.prototype.getValue = function() {
+       var vals = [];
+       iterate(this.selector,
+               function(o){
+                       if( o.selected )
+                               vals.push(o.getAttribute('value'))
+               }
+       );
+       return vals;
+}
+
+oilsRptOrgSelector.prototype.getDisplayValue = function() {
+       var vals = [];
+       iterate(this.selector,
+               function(o){
+                       if( o.selected )
+                               vals.push({ label : o.innerHTML, value : o.getAttribute('value')});
+               }
+       );
+       return vals;
+}
+
+
+/* --------------------------------------------------------------------- 
+       Atomic age widget
+       --------------------------------------------------------------------- */
+function oilsRptAgeWidget(args) {
+       this.node = args.node;
+       this.count = elem('select');
+       this.type = elem('select');
+}
+
+oilsRptAgeWidget.prototype.draw = function() {
+       for( var i = 1; i < 25; i++ )
+               insertSelectorVal(this.count, -1, i, i);
+       insertSelectorVal(this.type, -1, 'Day(s)', 'days');
+       insertSelectorVal(this.type, -1, 'Month(s)', 'months');
+       insertSelectorVal(this.type, -1, 'Year(s)', 'years');
+       this.node.appendChild(this.count);
+       this.node.appendChild(this.type);
+}
+
+oilsRptAgeWidget.prototype.getValue = function() {
+       var count = getSelectorVal(this.count);
+       var type = getSelectorVal(this.type);
+       return count+''+type;
+}
+
+oilsRptAgeWidget.prototype.getDisplayValue = function() {
+       var val = { value : this.getValue() };
+       var label = getSelectorVal(this.count) + ' ';
+       for( var i = 0; i < this.type.options.length; i++ ) {
+               var opt = this.type.options[i];
+               if( opt.selected )
+                       label += opt.innerHTML;
+       }
+       val.label = label;
+       return val;
+}
+
+
+
+/* --------------------------------------------------------------------- 
+       Atomic number picker
+       --------------------------------------------------------------------- */
+function oilsRptNumberWidget(args) {
+       this.node = args.node;
+       this.size = args.size || 24;
+       this.start = args.start;
+       var len = new String(this.size).length;
+       _debug('length = ' + len);
+       this.input = elem('input',{type:'text',size: len});
+       this.selector = elem('select');
+}
+oilsRptNumberWidget.prototype.draw = function() {
+       for( var i = this.start; i < (this.size + this.start); i++ )
+               insertSelectorVal(this.selector, -1, i, i);
+       this.node.appendChild(this.selector);
+       this.node.appendChild(this.input);
+       var obj = this;
+       this.selector.onchange = function() {
+               obj.input.value = getSelectorVal(obj.selector);
+       }
+       this.input.value = getSelectorVal(this.selector);
+}
+
+oilsRptNumberWidget.prototype.getValue = function() {
+       return this.input.value;
+}
+
+oilsRptNumberWidget.prototype.getDisplayValue = function() {
+       return { label : this.getValue(), value : this.getValue() };
+}
+
+
+/* --------------------------------------------------------------------- 
+       CUSTOM WIDGETS
+       --------------------------------------------------------------------- */
+
+/* --------------------------------------------------------------------- 
+       custom my-orgs picker 
+       --------------------------------------------------------------------- */
+function oilsRptMyOrgsWidget(node, orgid) {
+       this.node = node;
+       this.orgid = orgid;
+}
+
+oilsRptMyOrgsWidget.prototype.draw = function() {
+       var req = new Request(OILS_RPT_FETCH_ORG_FULL_PATH, this.orgid);
+       var obj = this;
+       req.callback(
+               function(r) { obj.drawWidget(r.getResultObject()); }
+       );
+       req.send();
+}
+
+oilsRptMyOrgsWidget.prototype.drawWidget = function(orglist) {
+       var sel = this.node;
+       for( var i = 0; i < orglist.length; i++ ) {
+               var org = orglist[i];
+               var opt = insertSelectorVal( this.node, -1, 
+                       org.name(), org.id(), null, findOrgDepth(org) );
+               if( org.id() == this.orgid )
+                       opt.selected = true;
+       }
+}
+
+oilsRptMyOrgsWidget.prototype.getValue = function() {
+       return getSelectorVal(this.node);
+}