added remote-object retrieval support for "public" data widgets
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 9 Oct 2006 01:30:26 +0000 (01:30 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 9 Oct 2006 01:30:26 +0000 (01:30 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6410 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/common/js/fm_table.js
Open-ILS/web/reports/oils_rpt_param_editor.js
Open-ILS/web/reports/oils_rpt_report_editor.js
Open-ILS/web/reports/oils_rpt_tree.js
Open-ILS/web/reports/oils_rpt_vars.js
Open-ILS/web/reports/oils_rpt_widget.js

index e0d9b47..a9113af 100644 (file)
@@ -129,7 +129,9 @@ FMObjectBuilder.prototype.setKeys = function(o) {
        if(sortme) this.keys = this.keys.sort();
 }
 
+/* use this method to insert object rows after the table has been rendered */
 FMObjectBuilder.prototype.add = function(obj) {
+       this.obj.push(obj);
        this.buildObjectRow(obj);
 }
 
index 9bf69d8..fef3b58 100644 (file)
@@ -157,6 +157,13 @@ oilsRptParamEditor.prototype.buildWidget = function(param, node) {
                        break;
        }
 
+       if( field.selector ) {
+               atomicWidget = oilsRptRemoteWidget;
+               widgetArgs.class = cls;
+               widgetArgs.field = field;
+               widgetArgs.column = param.column.colname;
+       }
+
        switch(cls) {
                case 'aou':
                        atomicWidget = oilsRptOrgSelector;
index cdf6ca0..9e352d1 100644 (file)
@@ -55,6 +55,8 @@ function oilsRptReportEditor(rptObject, folderWindow) {
        DOM.oils_rpt_report_editor_save.onclick = function(){obj.save();}
        DOM.oils_rpt_param_editor_sched_email.value = USER.email();
        DOM.oils_rpt_param_editor_sched_start_date.value = mkYearMonDay();
+
+       _debug("fleshing template:\n" + tmpl.name() + '\n' + formatJSON(tmpl.data()));
 }
 
 
index fe8895c..5131102 100644 (file)
@@ -78,6 +78,7 @@ function oilsRptParseFields( node ) {
                        name    : name,
                        label : field.getAttributeNS(oilsIDLReportsNS,'label'),
                        datatype : field.getAttributeNS(oilsIDLReportsNS,'datatype'),
+                       selector : field.getAttributeNS(oilsIDLReportsNS,'selector'),
                        type    : 'field'
                }
 
index 237ec0c..de6c8b3 100644 (file)
@@ -86,6 +86,7 @@ var OILS_RPT_UPDATE_TEMPLATE          = 'open-ils.reporter:open-ils.reporter.template.up
 var OILS_RPT_FETCH_OUTPUT                      = 'open-ils.reporter:open-ils.reporter.schedule.retrieve_by_folder';
 var OILS_RPT_FETCH_REPORT                      = 'open-ils.reporter:open-ils.reporter.report.retrieve';
 var OILS_RPT_FETCH_TEMPLATE            = 'open-ils.reporter:open-ils.reporter.template.retrieve';
+var OILS_RPT_MAGIC_FETCH                       = 'open-ils.reporter:open-ils.reporter.magic_fetch';
 
 var oilsRptCurrentFolderManager;
 
index cbcc511..ef12c6f 100644 (file)
@@ -606,6 +606,56 @@ oilsRptTruncPicker.prototype.getDisplayValue = function() {
        Atomic remote object picker
        --------------------------------------------------------------------- */
 
+function oilsRptRemoteWidget(args) {
+       this.node       = args.node;
+       this.class      = args.class;
+       this.field      = args.field;
+       this.column = args.column;
+       this.source = elem('select',
+               {multiple:'multiple','class':'oils_rpt_small_info_selector'});
+}
+
+oilsRptRemoteWidget.prototype.draw = function() {
+       var req = new Request(OILS_RPT_MAGIC_FETCH, SESSION, {hint:this.class}); 
+       var obj = this;
+       this.node.appendChild(this.source);
+       req.callback(function(r){obj.render(r.getResultObject())});
+       req.send();
+}
+
+oilsRptRemoteWidget.prototype.render = function(objs) {
+       _debug("rendering objects " + formatJSON(js2JSON(objs)));
+       for( var i = 0; i < objs.length; i++ ) {
+               var obj = objs[i];
+               var label = obj[this.field.selector]();
+               var value = obj[this.column]();
+               _debug("inserted remote object "+label + ' : ' + value);
+               insertSelectorVal(this.source, -1, label, value);
+       }
+}
+
+oilsRptRemoteWidget.prototype.getDisplayValue = function() {
+       var vals = [];
+       iterate(this.source,
+               function(o){
+                       if( o.selected )
+                               vals.push({ label : o.innerHTML, value : o.getAttribute('value')});
+               }
+       );
+       return vals;
+}
+
+oilsRptRemoteWidget.prototype.getValue = function() {
+       var vals = [];
+       iterate(this.source,
+               function(o){
+                       if( o.selected )
+                               vals.push(o.getAttribute('value'))
+               }
+       );
+       return vals;
+}
+