]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/trigger_events.js
more columns for the triggered events UI. Some label collisions/ambiguity; could...
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / patron / trigger_events.js
1 var list; var error; var net; var rows;
2
3 function $(id) { return document.getElementById(id); }
4
5 //// parent interfaces often call these
6 function default_focus() { $('atev_list').focus(); }
7 function refresh() { populate_list(); }
8 ////
9
10 function trigger_event_init() {
11     try {
12         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
13
14         commonStrings = $('commonStrings');
15         patronStrings = $('patronStrings');
16
17         if (typeof JSAN == 'undefined') {
18             throw(
19                 commonStrings.getString('common.jsan.missing')
20             );
21         }
22
23         JSAN.errorLevel = "die"; // none, warn, or die
24         JSAN.addRepository('..');
25
26         JSAN.use('OpenILS.data'); data = new OpenILS.data(); data.stash_retrieve();
27         XML_HTTP_SERVER = data.server_unadorned;
28
29         JSAN.use('util.error'); error = new util.error();
30         JSAN.use('util.network'); net = new util.network();
31         JSAN.use('patron.util'); 
32         JSAN.use('util.list'); 
33         JSAN.use('util.functional'); 
34         JSAN.use('util.widgets');
35
36         dojo.require('openils.Util');
37
38         init_list();
39         $('cmd_cancel_event').addEventListener('command', gen_event_handler('cancel'), false);
40         $('cmd_reset_event').addEventListener('command', gen_event_handler('reset'), false);
41         $('circ').addEventListener('command', function() { populate_list(); }, false);
42         $('ahr').addEventListener('command', function() { populate_list(); }, false);
43         $('pending').addEventListener('command', function() { populate_list(); }, false);
44         $('complete').addEventListener('command', function() { populate_list(); }, false);
45         $('error').addEventListener('command', function() { populate_list(); }, false);
46         populate_list();
47         default_focus();
48
49     } catch(E) {
50         var err_prefix = 'trigger_events.js -> trigger_event_init() : ';
51         if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
52     }
53 }
54
55 function gen_event_handler(method) { // cancel or reset?
56     return function(ev) {
57         try {
58             var sel = list.retrieve_selection();
59             var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
60
61             var pm = $('progress'); pm.value = 0; pm.hidden = false;
62             var idx = -1;
63
64             var i = method == 'cancel' ? 'FM_ATEV_CANCEL' : 'FM_ATEV_RESET';
65             fieldmapper.standardRequest(
66                 [ api[i].app, api[i].method ],
67                 {   async: true,
68                     params: [ses(), ids],
69                     onresponse: function(r) {
70                         try {
71                             idx++; pm.value = Number( pm.value ) + 100/ids.length;
72                             var result = openils.Util.readResponse(r);
73                             if (typeof result.ilsevent != 'undefined') { throw(result); }
74                         } catch(E) {
75                             error.standard_unexpected_error_alert('In patron/trigger_events.js, handle_'+i+'_event onresponse.',E);
76                         }
77                     },
78                     onerror: function(r) {
79                         try {
80                             var result = openils.Util.readResponse(r);
81                             throw(result);
82                         } catch(E) {
83                             error.standard_unexpected_error_alert('In patron/trigger_events.js, handle_'+i+'_event onerror.',E);
84                         }
85                         pm.hidden = true; pm.value = 0; populate_list();
86                     },
87                     oncomplete: function(r) {
88                         try {
89                             var result = openils.Util.readResponse(r);
90                         } catch(E) {
91                             error.standard_unexpected_error_alert('In patron/trigger_events.js, handle_'+i+'_event oncomplete.',E);
92                         }
93                         pm.hidden = true; pm.value = 0; populate_list();
94                     }
95                 }
96             );
97
98         } catch(E) {
99             alert('Error in patron/trigger_events.js, handle_???_event(): ' + E);
100         }
101     };
102 }
103
104 function init_list() {
105     try {
106
107         list = new util.list( 'atev_list' );
108         list.init( 
109             {
110                 'columns' : [].concat(
111                     list.fm_columns('atev', {
112                         'atev_target' : { 'render' : function(my) { return fieldmapper.IDL.fmclasses[my.atev.target().classname].label; } }
113                     })
114                 ).concat(
115                     list.fm_columns('atevdef', { 
116                         '*' : { 'hidden' : true }, 
117                         'atevdef_name' : { 'hidden' : false }, 
118                         'atevdef_reactor' : { 'hidden' : false } 
119                     })
120                 ).concat(
121                     list.fm_columns('circ', { 
122                         '*' : { 'hidden' : true }, 
123                         'circ_due_date' : { 'hidden' : false } 
124                     })
125                 ).concat(
126                     list.fm_columns('acp', { 
127                         '*' : { 'hidden' : true }, 
128                         'acp_barcode' : { 'hidden' : false } 
129                     })
130                 ).concat(
131                     list.fm_columns('ahr', { 
132                         '*' : { 'hidden' : true },
133                         'ahr_id' : { 'hidden' : false } 
134                     })
135                 ),
136                 'retrieve_row' : retrieve_row,
137                 'on_select' : handle_selection
138             }
139         );
140
141     } catch(E) {
142         var err_prefix = 'trigger_events.js -> init_list() : ';
143         if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
144     }
145 }
146
147 function retrieve_row(params) { // callback function for fleshing rows in a list
148     params.row_node.setAttribute('retrieve_id',params.row.my.atev.id()); 
149     params.on_retrieve(params.row); 
150     return params.row; 
151 }
152
153 function handle_selection(ev) { // handler for list row selection event
154     var sel = list.retrieve_selection();
155     if (sel.length > 0) {
156         $('cmd_cancel_event').setAttribute('disabled','false');
157         $('cmd_reset_event').setAttribute('disabled','false');
158     } else {
159         $('cmd_cancel_event').setAttribute('disabled','true');
160         $('cmd_reset_event').setAttribute('disabled','true');
161     }
162 };
163
164 function populate_list() {
165     try {
166
167         $('circ').disabled = true; $('ahr').disabled = true; $('pending').disabled = true; $('complete').disabled = true; $('error').disabled = true;
168
169         rows = {};
170         list.clear();
171
172         function onResponse(r) {
173             var evt = openils.Util.readResponse(r);
174             var row_params = {
175                 'row' : {
176                     'my' : {
177                         'atev' : evt,
178                         'atevdef' : evt.event_def(),
179                         'circ' : evt.target().classname == 'circ' ? evt.target() : null,
180                         'ahr' : evt.target().classname == 'ahr' ? evt.target() : null,
181                         'acp' : evt.target().classname == 'circ' ? evt.target().target_copy() : evt.target().current_copy()
182                     }
183                 }
184             };
185             rows[ evt.id() ] = list.append( row_params );
186
187         }
188
189         function onError(r) {
190             var evt = openils.Util.readResponse(r);
191             alert('error, evt = ' + js2JSON(evt));
192             $('circ').disabled = false; $('ahr').disabled = false; $('pending').disabled = false; $('complete').disabled = false; $('error').disabled = false;
193         }
194
195         var method = $('circ').checked ? 'FM_ATEV_APROPOS_CIRC' : 'FM_ATEV_APROPOS_AHR';
196         if (xul_param('copy_id')) { method += '_VIA_COPY'; }
197
198         var filter = {"event":{"state":"complete"}, "offset":0, "limit":10, "order_by":[{"class":"atev", "field":"run_time", "direction":"desc"}]};
199
200         if ($('pending').checked) { filter.event.state = 'pending'; filter.order_by[0].direction = 'asc'; }
201         if ($('error').checked) { filter.event.state = 'error'; }
202
203         fieldmapper.standardRequest(
204             [api[method].app, api[method].method ],
205             {   async: true,
206                 params: [ses(), xul_param('copy_id') || xul_param('patron_id'), filter],
207                 onresponse : onResponse,
208                 onerror : onError,
209                 oncomplete : function() {
210                     $('circ').disabled = false; $('ahr').disabled = false; $('pending').disabled = false; $('complete').disabled = false; $('error').disabled = false;
211                 }
212             }
213         );
214
215     } catch(E) {
216         var err_prefix = 'trigger_events.js -> populate_list() : ';
217         if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
218     }
219 }