]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/ui/default/acq/po/events.js
LP2045292 Color contrast for AngularJS patron bills
[working/Evergreen.git] / Open-ILS / web / js / ui / default / acq / po / events.js
1 dojo.require('openils.widget.AutoGrid');
2 dojo.require('fieldmapper.OrgUtils');
3 dojo.require('openils.widget.OrgUnitFilteringSelect');
4 dojo.require('dijit.form.DateTextBox');
5 dojo.require('dojo.date.stamp');
6
7 var eventState;
8 var eventContextOrg;
9 var eventList;
10 var eventStartDateRange;
11 var eventEndDateRange;
12 var po_map = {};
13
14 function eventInit() {
15     try {
16         buildStateSelector();
17         buildOrgSelector();
18         buildDatePickers();
19         buildEventGrid();
20
21         eventGrid.cancelSelected = function() { doSelected('open-ils.acq.purchase_order.event.cancel.batch') };
22         eventGrid.resetSelected = function() { doSelected('open-ils.acq.purchase_order.event.reset.batch') };
23         eventGrid.doSearch = function() {
24             buildEventGrid();
25         }
26
27     } catch(E) {
28         //dump('Error in acq/events.js, eventInit(): ' + E);
29         throw(E);
30     }
31 }
32
33 function buildDatePickers() {
34     var today = new Date(); 
35     var yesterday = new Date( today.getFullYear(), today.getMonth(), today.getDate() - 1);
36     eventStartDatePicker.constraints.max = today;
37     eventStartDatePicker.attr( 'value', yesterday );
38     eventStartDateRange = eventStartDatePicker.attr('value');
39     eventEndDatePicker.constraints.max = today;
40     eventEndDatePicker.attr( 'value', today );
41     eventEndDateRange = eventEndDatePicker.attr('value');
42     dojo.connect(
43         eventStartDatePicker,
44         'onChange',
45         function() {
46             var new_date = arguments[0];
47             if (new_date > eventEndDatePicker.attr('value')) {
48                 var swap = eventEndDatePicker.attr('value');
49                 eventEndDatePicker.attr( 'value', new_date );
50                 this.attr( 'value', swap );
51             }
52             eventStartDateRange = this.attr('value');
53         }
54     );
55     dojo.connect(
56         eventEndDatePicker,
57         'onChange',
58         function() {
59             var new_date = arguments[0];
60             if (new_date < eventStartDatePicker.attr('value')) {
61                 var swap = eventStartDatePicker.attr('value');
62                 eventStartDatePicker.attr( 'value', new_date );
63                 this.attr( 'value', swap );
64             }
65             eventEndDateRange = this.attr('value');
66         }
67     );
68
69 }
70
71 function buildStateSelector() {
72     try {
73         eventStateSelect.store = new dojo.data.ItemFileReadStore({
74             data : {
75                 identifier:"value",
76                 label: "name",
77                 items: [
78                     /* FIXME: I18N? */
79                     {name:"Pending", value:'pending'},
80                     {name:"Complete", value:'complete'},
81                     {name:"Error", value:'error'}
82                 ]
83             }
84         });
85         eventStateSelect.attr( 'value','pending' );
86         dojo.connect(
87             eventStateSelect, 
88             'onChange',
89             function() {
90                 try {
91                      eventState = this.attr('value');
92                 } catch(E) {
93                     //dump('Error in acq/events.js, eventInit, connect, onChange: ' + E);
94                     throw(E);
95                 }
96             }
97         );
98
99     } catch(E) {
100         //dump('Error in acq/events.js, buildStateSelector(): ' + E);
101         throw(E);
102     }
103 }
104
105 function buildOrgSelector() {
106     try {
107         var connect = function() {
108             try {
109                 dojo.connect(
110                     eventContextOrgSelect, 
111                     'onChange',
112                     function() {
113                         try {
114                              eventContextOrg = this.attr('value');
115                         } catch(E) {
116                             //dump('Error in acq/events.js, eventInit, connect, onChange: ' + E);
117                             throw(E);
118                         }
119                     }
120                 );
121             } catch(E) {
122                 //dump('Error in acq/events.js, eventInit, connect: ' + E);
123                 throw(E);
124             }
125         };
126         new openils.User().buildPermOrgSelector('STAFF_LOGIN', eventContextOrgSelect, null, connect);
127
128     } catch(E) {
129         //dump('Error in acq/events.js, buildOrgSelector(): ' + E);
130         throw(E);
131     }
132 }
133
134 function doSelected(method) {
135     try {
136         var ids = [];
137         dojo.forEach(
138             eventGrid.getSelectedItems(),
139             function(item) {
140                 ids.push( eventGrid.store.getValue(item,'id') );
141             }
142         );
143         fieldmapper.standardRequest(
144             [ 'open-ils.acq', method ],
145             {   async: true,
146                 params: [openils.User.authtoken, ids],
147                 onresponse: function(r) {
148                     try {
149                         var result = openils.Util.readResponse(r);
150                         if (typeof result.ilsevent != 'undefined') { throw(result); }
151                     } catch(E) {
152                         //dump('Error in acq/events.js, doSelected(), onresponse(): ' + E);
153                         throw(E);
154                     }
155                 },
156                 onerror: function(r) {
157                     try {
158                         var result = openils.Util.readResponse(r);
159                         throw(result);
160                     } catch(E) {
161                         //dump('Error in acq/events.js, doSelected(), onerror(): ' + E);
162                         throw(E);
163                     }
164                 },
165                 oncomplete: function(r) {
166                     try {
167                         var result = openils.Util.readResponse(r);
168                         buildEventGrid();
169                     } catch(E) {
170                         //dump('Error in acq/events.js, doSelected(), oncomplete(): ' + E);
171                         throw(E);
172                     }
173                 }
174             }
175         );
176     } catch(E) {
177         //dump('Error in acq/events.js, doSelected(): ' + E);
178         throw(E);
179     }
180 }
181
182 function buildEventGrid() {
183     eventGrid.resetStore();
184     if(eventContextOrg == null) {
185         eventContextOrg = openils.User.user.ws_ou();
186     }
187     if(eventState == null) {
188         eventState = 'pending';
189     }
190     var filter = {"state":eventState, "order_by":[{"class":"atev", "field":"run_time", "direction":"desc"}]};
191     if(eventStartDateRange != null) {
192         /* the dijit appears to always provide 00:00:00 for the timestamp component */
193         var end_of_day = eventEndDateRange; end_of_day.setDate( end_of_day.getDate() + 1 ); 
194         filter['start_time'] = {
195             'between' : [
196                 dojo.date.stamp.toISOString( eventStartDateRange ),
197                 dojo.date.stamp.toISOString( end_of_day )
198             ]
199         }
200     }
201     po_map = {};
202     fieldmapper.standardRequest(
203         ['open-ils.acq', 'open-ils.acq.purchase_order.events.ordering_agency'],
204         {   async: true,
205             params: [openils.User.authtoken, eventContextOrg, filter],
206             onresponse: function(r) {
207                 try {
208                     if(eventObject = openils.Util.readResponse(r)) {
209                         po_map[ eventObject.target().id() ] = eventObject.target();
210                         eventObject.target( eventObject.target().id() );
211                         eventGrid.store.newItem(atev.toStoreItem(eventObject));
212                     }
213                 } catch(E) {
214                     //dump('Error in acq/events.js, buildEventGrid, onresponse: ' + E);
215                     throw(E);
216                 }
217             }
218         }
219     );
220 }
221
222 function format_po_link(value) {
223     if (value) {
224         // FIXME -- how do you escape the value from .name() ?
225         return '<a href="' + oilsBasePath + '/acq/po/view/' + value + '">' + po_map[ value ].name() + '</a>';
226     }
227 }
228
229 openils.Util.addOnLoad(eventInit);
230
231