1 dojo.require("dijit.Dialog");
2 dojo.require("dijit.form.FilteringSelect");
3 dojo.require('dijit.form.Button');
4 dojo.require('dijit.TooltipDialog');
5 dojo.require('dijit.form.DropDownButton');
6 dojo.require('dijit.form.CheckBox');
7 dojo.require('dojox.grid.DataGrid');
8 dojo.require('dojo.data.ItemFileWriteStore');
9 dojo.require('openils.widget.OrgUnitFilteringSelect');
10 dojo.require('openils.acq.CurrencyType');
11 dojo.require('openils.Event');
12 dojo.require('openils.Util');
13 dojo.require('openils.User');
14 dojo.require('openils.CGI');
15 dojo.require('openils.acq.Fund');
16 dojo.require('openils.widget.AutoGrid');
17 dojo.require('openils.widget.ProgressDialog');
18 dojo.require('fieldmapper.OrgUtils');
19 dojo.requireLocalization('openils.acq', 'acq');
20 var localeStrings = dojo.i18n.getLocalization('openils.acq', 'acq');
23 var rolloverResponses;
24 var rolloverMode = false;
26 function getBalanceInfo(rowIndex, item) {
28 var id = this.grid.store.getValue( item, 'id');
29 var fund = openils.acq.Fund.cache[id];
30 if(fund && fund.summary())
31 return fund.summary().combined_balance;
37 contextOrg = openils.User.user.ws_ou();
39 var connect = function() {
40 dojo.connect(contextOrgSelector, 'onChange',
42 contextOrg = this.attr('value');
43 dojo.byId('oils-acq-rollover-ctxt-org').innerHTML =
44 fieldmapper.aou.findOrgUnit(contextOrg).shortname();
51 dojo.connect(refreshButton, 'onClick', function() { rolloverMode = false; gridDataLoader(); });
53 new openils.User().buildPermOrgSelector(
54 'ADMIN_ACQ_FUND', contextOrgSelector, contextOrg, connect);
56 dojo.byId('oils-acq-rollover-ctxt-org').innerHTML =
57 fieldmapper.aou.findOrgUnit(contextOrg).shortname();
60 lfGrid.dataLoader = gridDataLoader;
61 loadFundGrid(new openils.CGI().param('year') || new Date().getFullYear().toString());
63 tagManager = new TagManager(lfGrid);
66 function gridDataLoader() {
69 var offset = lfGrid.displayOffset;
70 for(var i = offset; i < (offset + lfGrid.displayLimit - 1); i++) {
71 var fund = rolloverResponses[i];
73 lfGrid.store.newItem(fieldmapper.acqf.toStoreItem(fund));
80 function loadFundGrid(year) {
82 openils.Util.hide('acq-fund-list-rollover-summary');
83 year = year || fundFilterYearSelect.attr('value');
85 fieldmapper.standardRequest(
86 [ 'open-ils.acq', 'open-ils.acq.fund.org.retrieve'],
90 openils.User.authtoken,
91 {year : year, org : fieldmapper.aou.descendantNodeList(contextOrg, true)},
94 limit: lfGrid.displayLimit,
95 offset: lfGrid.displayOffset
99 onresponse : function(r) {
100 if(lf = openils.Util.readResponse(r)) {
101 openils.acq.Fund.cache[lf.id()] = lf;
102 lfGrid.store.newItem(acqf.toStoreItem(lf));
106 oncomplete : function(r) {
107 lfGrid.hideLoadProgressIndicator();
113 function loadYearSelector() {
115 fieldmapper.standardRequest(
116 ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
118 params : [openils.User.authtoken],
119 oncomplete : function(r) {
121 var yearList = openils.Util.readResponse(r);
122 if(!yearList) return;
123 yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
125 var yearStore = {identifier:'year', name:'year', items:yearList};
126 yearStore.items = yearStore.items.sort().reverse();
127 fundFilterYearSelect.store = new dojo.data.ItemFileWriteStore({data:yearStore});
129 // default to this year
130 fundFilterYearSelect.setValue(new Date().getFullYear().toString());
133 fundFilterYearSelect,
136 rolloverMode = false;
145 function performRollover(args) {
148 progressDialog.show(true, "Processing...");
149 rolloverResponses = [];
151 var method = 'open-ils.acq.fiscal_rollover';
153 if(args.rollover[0] == 'on') {
154 method += '.combined';
156 method += '.propagate';
159 var dryRun = args.dry_run[0] == 'on';
160 if(dryRun) method += '.dry_run';
163 var amount_rolled = 0;
164 var year = fundFilterYearSelect.attr('value'); // TODO alternate selector?
166 fieldmapper.standardRequest(
167 ['open-ils.acq', method],
172 openils.User.authtoken,
175 (args.child_orgs[0] == 'on')
178 onresponse : function(r) {
179 var resp = openils.Util.readResponse(r);
180 rolloverResponses.push(resp.fund);
182 amount_rolled += resp.rollover_amount;
185 oncomplete : function() {
187 var nextYear = Number(year) + 1;
188 rolloverResponses = rolloverResponses.sort(
190 if(a.code() > b.code())
196 dojo.byId('acq-fund-list-rollover-summary-header').innerHTML =
197 dojo.string.substitute(
198 localeStrings.FUND_LIST_ROLLOVER_SUMMARY,
202 dojo.byId('acq-fund-list-rollover-summary-funds').innerHTML =
203 dojo.string.substitute(
204 localeStrings.FUND_LIST_ROLLOVER_SUMMARY_FUNDS,
208 dojo.byId('acq-fund-list-rollover-summary-rollover-amount').innerHTML =
209 dojo.string.substitute(
210 localeStrings.FUND_LIST_ROLLOVER_SUMMARY_ROLLOVER_AMOUNT,
211 [nextYear, amount_rolled]
215 openils.Util.hide('acq-fund-list-rollover-summary-dry-run');
217 // add the new year to the year selector if it's not already there
218 fundFilterYearSelect.store.fetch({
219 query : {year : nextYear},
222 if(list && list.length > 0) return;
223 fundFilterYearSelect.store.newItem({year : nextYear});
228 openils.Util.show('acq-fund-list-rollover-summary');
229 progressDialog.hide();
236 openils.Util.addOnLoad(initPage);