]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/financial/list_funds.js
Acq: this line unneeded; TagManager doesn't go here.
[working/Evergreen.git] / Open-ILS / web / js / ui / default / acq / financial / list_funds.js
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');
21
22 var contextOrg;
23 var rolloverResponses;
24 var rolloverMode = false;
25
26 function getBalanceInfo(rowIndex, item) {
27     if(!item) return '';
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;
32     return 0;
33 }
34
35 function initPage() {
36
37     contextOrg = openils.User.user.ws_ou();
38
39     var connect = function() {
40         dojo.connect(contextOrgSelector, 'onChange',
41             function() {
42                 contextOrg = this.attr('value');
43                 dojo.byId('oils-acq-rollover-ctxt-org').innerHTML = 
44                     fieldmapper.aou.findOrgUnit(contextOrg).shortname();
45                 rolloverMode = false;
46                 gridDataLoader();
47             }
48         );
49     };
50
51     dojo.connect(refreshButton, 'onClick', function() { rolloverMode = false; gridDataLoader(); });
52
53     new openils.User().buildPermOrgSelector(
54         'ADMIN_ACQ_FUND', contextOrgSelector, contextOrg, connect);
55
56     dojo.byId('oils-acq-rollover-ctxt-org').innerHTML = 
57         fieldmapper.aou.findOrgUnit(contextOrg).shortname();
58
59     loadYearSelector();
60     lfGrid.dataLoader = gridDataLoader;
61     loadFundGrid(new openils.CGI().param('year') || new Date().getFullYear().toString());
62 }
63
64 function gridDataLoader() {
65     lfGrid.resetStore();
66     if(rolloverMode) {
67         var offset = lfGrid.displayOffset;
68         for(var i = offset; i < (offset + lfGrid.displayLimit - 1); i++) {
69             var fund = rolloverResponses[i];
70             if(!fund) break;
71             lfGrid.store.newItem(fieldmapper.acqf.toStoreItem(fund));
72         }
73     } else {
74         loadFundGrid();
75     }
76 }
77
78 function loadFundGrid(year) {
79
80     openils.Util.hide('acq-fund-list-rollover-summary');
81     year = year || fundFilterYearSelect.attr('value');
82
83     fieldmapper.standardRequest(
84        [ 'open-ils.acq', 'open-ils.acq.fund.org.retrieve'],
85        {    async: true,
86
87             params: [
88                 openils.User.authtoken, 
89                 {year : year, org : fieldmapper.aou.descendantNodeList(contextOrg, true)}, 
90                 {
91                     flesh_summary:1, 
92                     limit: lfGrid.displayLimit,
93                     offset: lfGrid.displayOffset
94                 }
95             ],
96
97             onresponse : function(r) {
98                 if(lf = openils.Util.readResponse(r)) {
99                    openils.acq.Fund.cache[lf.id()] = lf;
100                    lfGrid.store.newItem(acqf.toStoreItem(lf));
101                 }
102             },
103
104             oncomplete : function(r) {
105                 lfGrid.hideLoadProgressIndicator();
106             }
107         }
108     );
109 }
110
111 function loadYearSelector() {
112
113     fieldmapper.standardRequest(
114         ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
115         {   async : true,
116             params : [openils.User.authtoken],
117             oncomplete : function(r) {
118
119                 var yearList = openils.Util.readResponse(r);
120                 if(!yearList) return;
121                 yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
122
123                 var yearStore = {identifier:'year', name:'year', items:yearList};
124                 yearStore.items = yearStore.items.sort().reverse();
125                 fundFilterYearSelect.store = new dojo.data.ItemFileWriteStore({data:yearStore});
126
127                 // default to this year
128                 fundFilterYearSelect.setValue(new Date().getFullYear().toString());
129
130                 dojo.connect(
131                     fundFilterYearSelect, 
132                     'onChange', 
133                     function() { 
134                         rolloverMode = false;
135                         gridDataLoader();
136                     }
137                 );
138             }
139         }
140     );
141 }
142
143 function performRollover(args) {
144
145     rolloverMode = true;
146     progressDialog.show(true, "Processing...");
147     rolloverResponses = [];
148
149     var method = 'open-ils.acq.fiscal_rollover';
150
151     if(args.rollover[0] == 'on') {
152         method += '.combined';
153     } else {
154         method += '.propagate';
155     }
156         
157     var dryRun = args.dry_run[0] == 'on';
158     if(dryRun) method += '.dry_run';
159
160     var count = 0;
161     var amount_rolled = 0;
162     var year = fundFilterYearSelect.attr('value'); // TODO alternate selector?
163     
164     fieldmapper.standardRequest(
165         ['open-ils.acq', method],
166         {
167             async : true,
168
169             params : [
170                 openils.User.authtoken, 
171                 year,
172                 contextOrg,
173                 (args.child_orgs[0] == 'on')
174             ],
175
176             onresponse : function(r) {
177                 var resp = openils.Util.readResponse(r);
178                 rolloverResponses.push(resp.fund);
179                 count += 1;
180                 amount_rolled += resp.rollover_amount;
181             }, 
182
183             oncomplete : function() {
184                 
185                 var nextYear = Number(year) + 1;
186                 rolloverResponses = rolloverResponses.sort(
187                     function(a, b) {
188                         if(a.code() > b.code())
189                             return 1;
190                         return -1;
191                     }
192                 )
193
194                 dojo.byId('acq-fund-list-rollover-summary-header').innerHTML = 
195                     dojo.string.substitute(
196                         localeStrings.FUND_LIST_ROLLOVER_SUMMARY,
197                         [nextYear]
198                     );
199
200                 dojo.byId('acq-fund-list-rollover-summary-funds').innerHTML = 
201                     dojo.string.substitute(
202                         localeStrings.FUND_LIST_ROLLOVER_SUMMARY_FUNDS,
203                         [nextYear, count]
204                     );
205
206                 dojo.byId('acq-fund-list-rollover-summary-rollover-amount').innerHTML = 
207                     dojo.string.substitute(
208                         localeStrings.FUND_LIST_ROLLOVER_SUMMARY_ROLLOVER_AMOUNT,
209                         [nextYear, amount_rolled]
210                     );
211
212                 if(!dryRun) {
213                     openils.Util.hide('acq-fund-list-rollover-summary-dry-run');
214                     
215                     // add the new year to the year selector if it's not already there
216                     fundFilterYearSelect.store.fetch({
217                         query : {year : nextYear}, 
218                         onComplete:
219                             function(list) {
220                                 if(list && list.length > 0) return;
221                                 fundFilterYearSelect.store.newItem({year : nextYear});
222                             }
223                     });
224                 }
225
226                 openils.Util.show('acq-fund-list-rollover-summary');
227                 progressDialog.hide();
228                 gridDataLoader();
229             }
230         }
231     );
232 }
233
234 openils.Util.addOnLoad(initPage);