]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/financial/list_funds.js
plugged in paging for viewing fund propagation results. added context org and org...
[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     tagManager = new TagManager(lfGrid);
64 }
65
66 function gridDataLoader() {
67     lfGrid.resetStore();
68     if(rolloverMode) {
69         var offset = lfGrid.displayOffset;
70         for(var i = offset; i < (offset + lfGrid.displayLimit - 1); i++) {
71             var fund = rolloverResponses[i];
72             if(!fund) break;
73             lfGrid.store.newItem(fieldmapper.acqf.toStoreItem(fund));
74         }
75     } else {
76         loadFundGrid();
77     }
78 }
79
80 function loadFundGrid(year) {
81
82     openils.Util.hide('acq-fund-list-rollover-summary');
83     year = year || fundFilterYearSelect.attr('value');
84
85     fieldmapper.standardRequest(
86        [ 'open-ils.acq', 'open-ils.acq.fund.org.retrieve'],
87        {    async: true,
88
89             params: [
90                 openils.User.authtoken, 
91                 {year : year, org : fieldmapper.aou.descendantNodeList(contextOrg, true)}, 
92                 {
93                     flesh_summary:1, 
94                     limit: lfGrid.displayLimit,
95                     offset: lfGrid.displayOffset
96                 }
97             ],
98
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));
103                 }
104             },
105
106             oncomplete : function(r) {
107                 lfGrid.hideLoadProgressIndicator();
108             }
109         }
110     );
111 }
112
113 function loadYearSelector() {
114
115     fieldmapper.standardRequest(
116         ['open-ils.acq', 'open-ils.acq.fund.org.years.retrieve'],
117         {   async : true,
118             params : [openils.User.authtoken],
119             oncomplete : function(r) {
120
121                 var yearList = openils.Util.readResponse(r);
122                 if(!yearList) return;
123                 yearList = yearList.map(function(year){return {year:year+''};}); // dojo wants strings
124
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});
128
129                 // default to this year
130                 fundFilterYearSelect.setValue(new Date().getFullYear().toString());
131
132                 dojo.connect(
133                     fundFilterYearSelect, 
134                     'onChange', 
135                     function() { 
136                         rolloverMode = false;
137                         gridDataLoader();
138                     }
139                 );
140             }
141         }
142     );
143 }
144
145 function performRollover(args) {
146
147     rolloverMode = true;
148     progressDialog.show(true, "Processing...");
149     rolloverResponses = [];
150
151     var method = 'open-ils.acq.fiscal_rollover';
152
153     if(args.rollover[0] == 'on') {
154         method += '.combined';
155     } else {
156         method += '.propagate';
157     }
158         
159     var dryRun = args.dry_run[0] == 'on';
160     if(dryRun) method += '.dry_run';
161
162     var count = 0;
163     var amount_rolled = 0;
164     var year = fundFilterYearSelect.attr('value'); // TODO alternate selector?
165     
166     fieldmapper.standardRequest(
167         ['open-ils.acq', method],
168         {
169             async : true,
170
171             params : [
172                 openils.User.authtoken, 
173                 year,
174                 contextOrg,
175                 (args.child_orgs[0] == 'on')
176             ],
177
178             onresponse : function(r) {
179                 var resp = openils.Util.readResponse(r);
180                 rolloverResponses.push(resp.fund);
181                 count += 1;
182                 amount_rolled += resp.rollover_amount;
183             }, 
184
185             oncomplete : function() {
186                 
187                 var nextYear = Number(year) + 1;
188                 rolloverResponses = rolloverResponses.sort(
189                     function(a, b) {
190                         if(a.code() > b.code())
191                             return 1;
192                         return -1;
193                     }
194                 )
195
196                 dojo.byId('acq-fund-list-rollover-summary-header').innerHTML = 
197                     dojo.string.substitute(
198                         localeStrings.FUND_LIST_ROLLOVER_SUMMARY,
199                         [nextYear]
200                     );
201
202                 dojo.byId('acq-fund-list-rollover-summary-funds').innerHTML = 
203                     dojo.string.substitute(
204                         localeStrings.FUND_LIST_ROLLOVER_SUMMARY_FUNDS,
205                         [nextYear, count]
206                     );
207
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]
212                     );
213
214                 if(!dryRun) {
215                     openils.Util.hide('acq-fund-list-rollover-summary-dry-run');
216                     
217                     // add the new year to the year selector if it's not already there
218                     fundFilterYearSelect.store.fetch({
219                         query : {year : nextYear}, 
220                         onComplete:
221                             function(list) {
222                                 if(list && list.length > 0) return;
223                                 fundFilterYearSelect.store.newItem({year : nextYear});
224                             }
225                     });
226                 }
227
228                 openils.Util.show('acq-fund-list-rollover-summary');
229                 progressDialog.hide();
230                 gridDataLoader();
231             }
232         }
233     );
234 }
235
236 openils.Util.addOnLoad(initPage);