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.PermaCrud');
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;
25 var fundFleshFields = [
34 var adminPermOrgs = [];
38 contextOrg = openils.User.user.ws_ou();
40 var connect = function() {
41 dojo.connect(contextOrgSelector, 'onChange',
43 contextOrg = this.attr('value');
44 dojo.byId('oils-acq-rollover-ctxt-org').innerHTML =
45 fieldmapper.aou.findOrgUnit(contextOrg).shortname();
52 dojo.connect(refreshButton, 'onClick',
53 function() { rolloverMode = false; gridDataLoader(); });
55 new openils.User().buildPermOrgSelector(
56 ['ADMIN_ACQ_FUND', 'VIEW_FUND'],
57 contextOrgSelector, contextOrg, connect);
59 dojo.byId('oils-acq-rollover-ctxt-org').innerHTML =
60 fieldmapper.aou.findOrgUnit(contextOrg).shortname();
63 lfGrid.onItemReceived = function(item) {cachedFunds.push(item)};
65 new openils.User().getPermOrgList(
70 new openils.CGI().param('year')
71 || new Date().getFullYear().toString());
77 function gridDataLoader() {
80 var offset = lfGrid.displayOffset;
81 for(var i = offset; i < (offset + lfGrid.displayLimit - 1); i++) {
82 var fund = rolloverResponses[i];
84 lfGrid.store.newItem(fieldmapper.acqf.toStoreItem(fund));
91 function getBalanceInfo(rowIdx, item) {
93 var fundId = this.grid.store.getValue(item, 'id');
94 var fund = cachedFunds.filter(function(f) { return f.id() == fundId })[0];
95 var cb = fund.combined_balance();
96 return cb ? cb.amount() : '0';
99 function loadFundGrid(year) {
100 openils.Util.hide('acq-fund-list-rollover-summary');
101 year = year || fundFilterYearSelect.attr('value');
107 flesh_fields : {acqf : fundFleshFields},
109 // by default, sort funds I can edit to the front
113 compare : {'in' : adminPermOrgs},
122 org : fieldmapper.aou.descendantNodeList(contextOrg, true)
127 function loadYearSelector() {
129 fieldmapper.standardRequest(
130 ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
132 params : [openils.User.authtoken, {}, {limit_perm : 'VIEW_FUND'}],
133 oncomplete : function(r) {
135 var yearList = openils.Util.readResponse(r);
136 if(!yearList) return;
137 yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
139 var yearStore = {identifier:'year', name:'year', items:yearList};
140 yearStore.items = yearStore.items.sort().reverse();
141 fundFilterYearSelect.store = new dojo.data.ItemFileWriteStore({data:yearStore});
143 // default to this year
144 fundFilterYearSelect.setValue(new Date().getFullYear().toString());
147 fundFilterYearSelect,
150 rolloverMode = false;
159 function performRollover(args) {
162 progressDialog.show(true, "Processing...");
163 rolloverResponses = [];
165 var method = 'open-ils.acq.fiscal_rollover';
167 if(args.rollover[0] == 'on') {
168 method += '.combined';
170 method += '.propagate';
173 var dryRun = args.dry_run[0] == 'on';
174 if(dryRun) method += '.dry_run';
177 var amount_rolled = 0;
178 var year = fundFilterYearSelect.attr('value'); // TODO alternate selector?
180 fieldmapper.standardRequest(
181 ['open-ils.acq', method],
186 openils.User.authtoken,
189 (args.child_orgs[0] == 'on')
192 onresponse : function(r) {
193 var resp = openils.Util.readResponse(r);
194 rolloverResponses.push(resp.fund);
196 amount_rolled += Number(resp.rollover_amount);
199 oncomplete : function() {
201 var nextYear = Number(year) + 1;
202 rolloverResponses = rolloverResponses.sort(
204 if(a.code() > b.code())
210 dojo.byId('acq-fund-list-rollover-summary-header').innerHTML =
211 dojo.string.substitute(
212 localeStrings.FUND_LIST_ROLLOVER_SUMMARY,
216 dojo.byId('acq-fund-list-rollover-summary-funds').innerHTML =
217 dojo.string.substitute(
218 localeStrings.FUND_LIST_ROLLOVER_SUMMARY_FUNDS,
222 dojo.byId('acq-fund-list-rollover-summary-rollover-amount').innerHTML =
223 dojo.string.substitute(
224 localeStrings.FUND_LIST_ROLLOVER_SUMMARY_ROLLOVER_AMOUNT,
225 [nextYear, amount_rolled]
229 openils.Util.hide('acq-fund-list-rollover-summary-dry-run');
231 // add the new year to the year selector if it's not already there
232 fundFilterYearSelect.store.fetch({
233 query : {year : nextYear},
236 if(list && list.length > 0) return;
237 fundFilterYearSelect.store.newItem({year : nextYear});
242 openils.Util.show('acq-fund-list-rollover-summary');
243 progressDialog.hide();
250 openils.Util.addOnLoad(initPage);