Initial dev repository
[kcls-web.git] / js / ui / default / acq / financial / list_funds.js
diff --git a/js/ui/default/acq/financial/list_funds.js b/js/ui/default/acq/financial/list_funds.js
new file mode 100644 (file)
index 0000000..7da788d
--- /dev/null
@@ -0,0 +1,234 @@
+dojo.require("dijit.Dialog");
+dojo.require("dijit.form.FilteringSelect");
+dojo.require('dijit.form.Button');
+dojo.require('dijit.TooltipDialog');
+dojo.require('dijit.form.DropDownButton');
+dojo.require('dijit.form.CheckBox');
+dojo.require('dojox.grid.DataGrid');
+dojo.require('dojo.data.ItemFileWriteStore');
+dojo.require('openils.widget.OrgUnitFilteringSelect');
+dojo.require('openils.acq.CurrencyType');
+dojo.require('openils.Event');
+dojo.require('openils.Util');
+dojo.require('openils.User');
+dojo.require('openils.CGI');
+dojo.require('openils.acq.Fund');
+dojo.require('openils.widget.AutoGrid');
+dojo.require('openils.widget.ProgressDialog');
+dojo.require('fieldmapper.OrgUtils');
+dojo.requireLocalization('openils.acq', 'acq');
+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;
+}
+
+function initPage() {
+
+    contextOrg = openils.User.user.ws_ou();
+
+    var connect = function() {
+        dojo.connect(contextOrgSelector, 'onChange',
+            function() {
+                contextOrg = this.attr('value');
+                dojo.byId('oils-acq-rollover-ctxt-org').innerHTML = 
+                    fieldmapper.aou.findOrgUnit(contextOrg).shortname();
+                rolloverMode = false;
+                gridDataLoader();
+            }
+        );
+    };
+
+    dojo.connect(refreshButton, 'onClick', function() { rolloverMode = false; gridDataLoader(); });
+
+    new openils.User().buildPermOrgSelector(
+        'ADMIN_ACQ_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());
+}
+
+function gridDataLoader() {
+    lfGrid.resetStore();
+    if(rolloverMode) {
+        var offset = lfGrid.displayOffset;
+        for(var i = offset; i < (offset + lfGrid.displayLimit - 1); i++) {
+            var fund = rolloverResponses[i];
+            if(!fund) break;
+            lfGrid.store.newItem(fieldmapper.acqf.toStoreItem(fund));
+        }
+    } else {
+        loadFundGrid();
+    }
+}
+
+function loadFundGrid(year) {
+
+    openils.Util.hide('acq-fund-list-rollover-summary');
+    year = year || fundFilterYearSelect.attr('value');
+
+    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));
+                }
+            },
+
+            oncomplete : function(r) {
+                lfGrid.hideLoadProgressIndicator();
+            }
+        }
+    );
+}
+
+function loadYearSelector() {
+
+    fieldmapper.standardRequest(
+        ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
+        {   async : true,
+            params : [openils.User.authtoken],
+            oncomplete : function(r) {
+
+                var yearList = openils.Util.readResponse(r);
+                if(!yearList) return;
+                yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
+
+                var yearStore = {identifier:'year', name:'year', items:yearList};
+                yearStore.items = yearStore.items.sort().reverse();
+                fundFilterYearSelect.store = new dojo.data.ItemFileWriteStore({data:yearStore});
+
+                // default to this year
+                fundFilterYearSelect.setValue(new Date().getFullYear().toString());
+
+                dojo.connect(
+                    fundFilterYearSelect, 
+                    'onChange', 
+                    function() { 
+                        rolloverMode = false;
+                        gridDataLoader();
+                    }
+                );
+            }
+        }
+    );
+}
+
+function performRollover(args) {
+
+    rolloverMode = true;
+    progressDialog.show(true, "Processing...");
+    rolloverResponses = [];
+
+    var method = 'open-ils.acq.fiscal_rollover';
+
+    if(args.rollover[0] == 'on') {
+        method += '.combined';
+    } else {
+        method += '.propagate';
+    }
+        
+    var dryRun = args.dry_run[0] == 'on';
+    if(dryRun) method += '.dry_run';
+
+    var count = 0;
+    var amount_rolled = 0;
+    var year = fundFilterYearSelect.attr('value'); // TODO alternate selector?
+    
+    fieldmapper.standardRequest(
+        ['open-ils.acq', method],
+        {
+            async : true,
+
+            params : [
+                openils.User.authtoken, 
+                year,
+                contextOrg,
+                (args.child_orgs[0] == 'on')
+            ],
+
+            onresponse : function(r) {
+                var resp = openils.Util.readResponse(r);
+                rolloverResponses.push(resp.fund);
+                count += 1;
+                amount_rolled += Number(resp.rollover_amount);
+            }, 
+
+            oncomplete : function() {
+                
+                var nextYear = Number(year) + 1;
+                rolloverResponses = rolloverResponses.sort(
+                    function(a, b) {
+                        if(a.code() > b.code())
+                            return 1;
+                        return -1;
+                    }
+                )
+
+                dojo.byId('acq-fund-list-rollover-summary-header').innerHTML = 
+                    dojo.string.substitute(
+                        localeStrings.FUND_LIST_ROLLOVER_SUMMARY,
+                        [nextYear]
+                    );
+
+                dojo.byId('acq-fund-list-rollover-summary-funds').innerHTML = 
+                    dojo.string.substitute(
+                        localeStrings.FUND_LIST_ROLLOVER_SUMMARY_FUNDS,
+                        [nextYear, count]
+                    );
+
+                dojo.byId('acq-fund-list-rollover-summary-rollover-amount').innerHTML = 
+                    dojo.string.substitute(
+                        localeStrings.FUND_LIST_ROLLOVER_SUMMARY_ROLLOVER_AMOUNT,
+                        [nextYear, amount_rolled]
+                    );
+
+                if(!dryRun) {
+                    openils.Util.hide('acq-fund-list-rollover-summary-dry-run');
+                    
+                    // add the new year to the year selector if it's not already there
+                    fundFilterYearSelect.store.fetch({
+                        query : {year : nextYear}, 
+                        onComplete:
+                            function(list) {
+                                if(list && list.length > 0) return;
+                                fundFilterYearSelect.store.newItem({year : nextYear});
+                            }
+                    });
+                }
+
+                openils.Util.show('acq-fund-list-rollover-summary');
+                progressDialog.hide();
+                gridDataLoader();
+            }
+        }
+    );
+}
+
+openils.Util.addOnLoad(initPage);