added support for remote object limiting by org where available
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 9 Oct 2006 02:25:46 +0000 (02:25 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 9 Oct 2006 02:25:46 +0000 (02:25 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6413 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Reporter.pm
Open-ILS/web/reports/oils_rpt_vars.js
Open-ILS/web/reports/oils_rpt_widget.js

index 152e6c0..d745288 100644 (file)
@@ -396,6 +396,8 @@ sub magic_fetch_all {
        return $e->event unless $e->allowed('RUN_REPORTS');
 
        my $hint = $$args{hint};
+       my $org_col = $$args{org_column};
+       my $orgs = $$args{org};
 
        # Find the class the iplements the given hint
        my ($class) = grep { 
@@ -405,11 +407,20 @@ sub magic_fetch_all {
 
        $class =~ s/Fieldmapper:://og;
        $class =~ s/::/_/og;
-       my $method = "retrieve_all_$class";
+       
+       my $method;
+       my $margs;
+
+       if( $org_col ) {
+               $method = "search_$class";
+               $margs = { $org_col => $orgs };
+       } else {
+               $method = "retrieve_all_$class";
+       }
 
        $logger->info("reporter.magic_fetch => $method");
 
-       return $e->$method();
+       return $e->$method($margs);
 }
 
 
index de6c8b3..2348829 100644 (file)
@@ -11,6 +11,7 @@ var oilsRpt;
 var oilsRptTree;
 
 var oilsRptCurrentOrg;
+var oilsRptMyOrgs;
 
 var oilsRptCookie;
 
index ef12c6f..e08624f 100644 (file)
@@ -616,7 +616,24 @@ function oilsRptRemoteWidget(args) {
 }
 
 oilsRptRemoteWidget.prototype.draw = function() {
-       var req = new Request(OILS_RPT_MAGIC_FETCH, SESSION, {hint:this.class}); 
+       var orgcol;
+       iterate(oilsIDL[this.class].fields,
+               function(i) {
+                       if(i.type == 'link' && i.class == 'aou') 
+                               orgcol = i.name;
+               }
+       );
+
+       if(orgcol) _debug("found org column for remote widget: " + orgcol);
+
+       var orgs = [];
+       iterate(oilsRptMyOrgs,function(i){orgs.push(i.id());});
+       var req = new Request(OILS_RPT_MAGIC_FETCH, SESSION, {
+               hint:this.class,
+               org_column : orgcol,
+               org : orgs
+       }); 
+
        var obj = this;
        this.node.appendChild(this.source);
        req.callback(function(r){obj.render(r.getResultObject())});
@@ -624,7 +641,6 @@ oilsRptRemoteWidget.prototype.draw = function() {
 }
 
 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]();
@@ -679,17 +695,22 @@ function oilsRptMyOrgsWidget(node, orgid, maxorg) {
 }
 
 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();
+       if(!oilsRptMyOrgs) {
+               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();
+       } else {
+               this.drawWidget(oilsRptMyOrgs);
+       }
 }
 
 oilsRptMyOrgsWidget.prototype.drawWidget = function(orglist) {
        var sel = this.node;
        var started = false;
+       oilsRptMyOrgs = orglist;
        for( var i = 0; i < orglist.length; i++ ) {
                var org = orglist[i];
                var opt = insertSelectorVal( this.node, -1,