From: erickson Date: Thu, 5 Oct 2006 17:06:40 +0000 (+0000) Subject: more widget work X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ac45accf44a0bc87ab312a052a9493d3e8cb974f;p=evergreen%2Fpines.git more widget work git-svn-id: svn://svn.open-ils.org/ILS/trunk@6395 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/web/reports/oils_rpt_builder.js b/Open-ILS/web/reports/oils_rpt_builder.js index eda54d6dca..f075669623 100644 --- a/Open-ILS/web/reports/oils_rpt_builder.js +++ b/Open-ILS/web/reports/oils_rpt_builder.js @@ -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'); } diff --git a/Open-ILS/web/reports/oils_rpt_param_editor.js b/Open-ILS/web/reports/oils_rpt_param_editor.js index 72f5ab10e0..8992bb8f81 100644 --- a/Open-ILS/web/reports/oils_rpt_param_editor.js +++ b/Open-ILS/web/reports/oils_rpt_param_editor.js @@ -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) { diff --git a/Open-ILS/web/reports/oils_rpt_tforms.js b/Open-ILS/web/reports/oils_rpt_tforms.js index f92170de16..a7e9492d5f 100644 --- a/Open-ILS/web/reports/oils_rpt_tforms.js +++ b/Open-ILS/web/reports/oils_rpt_tforms.js @@ -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 : { diff --git a/Open-ILS/web/reports/oils_rpt_widget.js b/Open-ILS/web/reports/oils_rpt_widget.js index f4d74ff749..76446fca27 100644 --- a/Open-ILS/web/reports/oils_rpt_widget.js +++ b/Open-ILS/web/reports/oils_rpt_widget.js @@ -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); +}