ACQ fund admin UI improvements
authorBill Erickson <berick@esilibrary.com>
Thu, 22 Mar 2012 15:56:00 +0000 (11:56 -0400)
committerBill Erickson <berick@esilibrary.com>
Thu, 29 Mar 2012 14:10:36 +0000 (10:10 -0400)
* Fund retrieval directly via AutoGrid/pcrud, now that pcrud supports fleshing.
* Sort funds I can edit to the front of the list
* Enable the new improved grid filter dialog
* Leverage onItemReceived for caching funds for balanceInfo getter
* Add some height to the grid to allow more rows to be visible in the page (without scrolling)

Signed-off-by: Bill Erickson <berick@esilibrary.com>
Signed-off-by: Jason Stephenson <jstephenson@mvlc.org>

Open-ILS/src/templates/acq/fund/list.tt2
Open-ILS/web/js/ui/default/acq/financial/list_funds.js

index 83f2320..95eac5f 100644 (file)
     </div>
 </div>
 
-<div dojoType="dijit.layout.ContentPane" layoutAlign="client">
+<div dojoType="dijit.layout.ContentPane" layoutAlign="client" style='height:80%'>
     <table  jsId="lfGrid"
             dojoType="openils.widget.AutoGrid"
             fieldOrder="['id', 'name', 'code', 'year', 'org', 'currency_type', 'combined_balance']"
             requiredFields="['name', 'code', 'year', 'org', 'currency_type']"
             query="{id: '*'}"
-            defaultCellWidth='"auto"'
             fmClass='acqf'
+            showLoadFilter='true'
             showPaginator='true'
             editOnEnter='true'>
         <thead>
index 7da788d..5b212c6 100644 (file)
@@ -12,7 +12,7 @@ dojo.require('openils.Event');
 dojo.require('openils.Util');
 dojo.require('openils.User');
 dojo.require('openils.CGI');
-dojo.require('openils.acq.Fund');
+dojo.require('openils.PermaCrud');
 dojo.require('openils.widget.AutoGrid');
 dojo.require('openils.widget.ProgressDialog');
 dojo.require('fieldmapper.OrgUtils');
@@ -22,18 +22,19 @@ var localeStrings = dojo.i18n.getLocalization('openils.acq', 'acq');
 var contextOrg;
 var rolloverResponses;
 var rolloverMode = false;
-
-function getBalanceInfo(rowIndex, item) {
-    if(!item) return '';
-    var id = this.grid.store.getValue( item, 'id');   
-    var fund = openils.acq.Fund.cache[id];
-    if(fund && fund.summary()) 
-        return fund.summary().combined_balance;
-    return 0;
-}
+var fundFleshFields = [
+    'spent_balance', 
+    'combined_balance', 
+    'spent_total', 
+    'encumbrance_total', 
+    'debit_total', 
+    'allocation_total'
+];
+
+var adminPermOrgs = [];
+var cachedFunds = [];
 
 function initPage() {
-
     contextOrg = openils.User.user.ws_ou();
 
     var connect = function() {
@@ -48,17 +49,29 @@ function initPage() {
         );
     };
 
-    dojo.connect(refreshButton, 'onClick', function() { rolloverMode = false; gridDataLoader(); });
+    dojo.connect(refreshButton, 'onClick', 
+        function() { rolloverMode = false; gridDataLoader(); });
 
     new openils.User().buildPermOrgSelector(
-        'ADMIN_ACQ_FUND', contextOrgSelector, contextOrg, connect);
+        ['ADMIN_ACQ_FUND', 'VIEW_FUND'], 
+        contextOrgSelector, contextOrg, connect);
 
     dojo.byId('oils-acq-rollover-ctxt-org').innerHTML = 
         fieldmapper.aou.findOrgUnit(contextOrg).shortname();
 
     loadYearSelector();
-    lfGrid.dataLoader = gridDataLoader;
-    loadFundGrid(new openils.CGI().param('year') || new Date().getFullYear().toString());
+    lfGrid.onItemReceived = function(item) {cachedFunds.push(item)};
+
+    new openils.User().getPermOrgList(
+        'ADMIN_ACQ_FUND',
+        function(list) {
+            adminPermOrgs = list;
+            loadFundGrid(
+                new openils.CGI().param('year') 
+                    || new Date().getFullYear().toString());
+        },
+        true, true
+    );
 }
 
 function gridDataLoader() {
@@ -75,36 +88,39 @@ function gridDataLoader() {
     }
 }
 
-function loadFundGrid(year) {
+function getBalanceInfo(rowIdx, item) {
+    if (!item) return '';
+    var fundId = this.grid.store.getValue(item, 'id');
+    var fund = cachedFunds.filter(function(f) { return f.id() == fundId })[0];
+    var cb = fund.combined_balance();
+    return cb ? cb.amount() : '0';
+}
 
+function loadFundGrid(year) {
     openils.Util.hide('acq-fund-list-rollover-summary');
     year = year || fundFilterYearSelect.attr('value');
+    cachedFunds = [];
 
-    fieldmapper.standardRequest(
-       [ 'open-ils.acq', 'open-ils.acq.fund.org.retrieve'],
-       {    async: true,
-
-            params: [
-                openils.User.authtoken, 
-                {year : year, org : fieldmapper.aou.descendantNodeList(contextOrg, true)}, 
-                {
-                    flesh_summary:1, 
-                    limit: lfGrid.displayLimit,
-                    offset: lfGrid.displayOffset
-                }
-            ],
-
-            onresponse : function(r) {
-                if(lf = openils.Util.readResponse(r)) {
-                   openils.acq.Fund.cache[lf.id()] = lf;
-                   lfGrid.store.newItem(acqf.toStoreItem(lf));
+    lfGrid.loadAll(
+        {
+            flesh : 1,  
+            flesh_fields : {acqf : fundFleshFields},
+            
+            // by default, sort funds I can edit to the front
+            order_by : [
+                {   'class' : 'acqf',
+                    field : 'org',
+                    compare : {'in' : adminPermOrgs},
+                    direction : 'desc'
+                },
+                {   'class' : 'acqf',
+                    field : 'name'
                 }
-            },
-
-            oncomplete : function(r) {
-                lfGrid.hideLoadProgressIndicator();
-            }
-        }
+            ]
+        }, {   
+            year : year, 
+            org : fieldmapper.aou.descendantNodeList(contextOrg, true) 
+        } 
     );
 }
 
@@ -113,7 +129,7 @@ function loadYearSelector() {
     fieldmapper.standardRequest(
         ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
         {   async : true,
-            params : [openils.User.authtoken],
+            params : [openils.User.authtoken, {}, {limit_perm : 'VIEW_FUND'}],
             oncomplete : function(r) {
 
                 var yearList = openils.Util.readResponse(r);