]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/admin/offline_manage_xacts.js
script list
[Evergreen.git] / Open-ILS / xul / staff_client / server / admin / offline_manage_xacts.js
1 dump('entering admin/offline_manage_xacts.js\n');
2
3 if (typeof admin == 'undefined') admin = {};
4 admin.offline_manage_xacts = function (params) {
5
6         JSAN.use('util.error'); this.error = new util.error();
7         JSAN.use('util.network'); this.network = new util.network();
8 }
9
10 admin.offline_manage_xacts.prototype = {
11
12         'sel_list' : [],
13
14         'init' : function( params ) {
15
16                 var obj = this;
17
18                 JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
19
20                 JSAN.use('util.list'); obj.list = new util.list('session_tree');
21                 obj.list.init( {
22                         'columns' : [
23                                 {
24                                         'id' : 'org', 'hidden' : 'true', 'flex' : '1',
25                                         'label' : 'Organization',
26                                         'render' : 'data.hash.aou[ my.org ].shortname()',
27                                 },
28                                 { 
29                                         'id' : 'description', 'flex' : '2',
30                                         'label' : 'Description', 
31                                         'render' : "my.description", 
32                                 },
33                                 {
34                                         'id' : 'create_time', 'flex' : '1',
35                                         'label' : 'Date Created',
36                                         'render' : 'if (my.create_time) { var x = new Date(); x.setTime(my.create_time+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { ""; }',
37                                 },
38                                 {
39                                         'id' : 'creator', 'flex' : '1', 'hidden' : 'true',
40                                         'label' : 'Created By',
41                                         'render' : 'my.creator',
42                                 },
43                                 { 
44                                         'id' : 'count', 'flex' : '1',
45                                         'label' : 'Upload Count', 
46                                         'render' : "my.scripts.length", 
47                                 },
48                                 { 
49                                         'id' : 'num_complete', 'flex' : '1', 
50                                         'label' : 'Uploads Processed', 
51                                         'render' : "my.num_complete", 
52                                 },
53                                 { 
54                                         'id' : 'in_process', 'flex' : '1',
55                                         'label' : 'Processing?', 
56                                         'render' : "if (my.end_time) { 'Completed' } else {my.in_process == 0 ? 'No' : 'Yes'}", 
57                                 },
58                                 {
59                                         'id' : 'start_time', 'flex' : '1', 'hidden' : 'true',
60                                         'label' : 'Date Started',
61                                         'render' : 'if (my.start_time) {var x = new Date(); x.setTime(my.start_time+"000"); util.date.formatted_date(x,"%F %H:%M");} else { ""; }',
62                                 },
63                                 {
64                                         'id' : 'end_time', 'flex' : '1',
65                                         'label' : 'Date Completed',
66                                         'render' : 'if (my.end_time) {var x = new Date(); x.setTime(my.end_time+"000"); util.date.formatted_date(x,"%F %H:%M");} else { ""; }',
67                                 },
68                                 { 
69                                         'id' : 'key', 'hidden' : 'true', 'flex' : '1', 
70                                         'label' : 'Session', 
71                                         'render' : "my.key", 
72                                 },
73                         ],
74                         'map_row_to_column' : function(row,col) {
75                                 JSAN.use('util.date');
76                                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
77                                 var my = row; var value;
78                                 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
79                                 return value;
80                         },
81                         'on_select' : function(ev) {
82                                 JSAN.use('util.functional');
83                                 var sel = obj.list.retrieve_selection();
84                                 obj.sel_list = util.functional.map_list(
85                                         sel,
86                                         function(o) { return o.getAttribute('retrieve_id'); }
87                                 );
88                                 if (obj.check_perm(obj.session,'OFFLINE_EXECUTE_SESSION')) {
89                                         document.getElementById('execute').disabled = false;    
90                                 }
91                                 if (obj.check_perm(obj.session,'OFFLINE_UPLOAD_XACTS')) {
92                                         document.getElementById('upload').disabled = false;     
93                                 }
94                                 if (obj.check_perm(obj.session,'OFFLINE_SESSION_ERRORS')) {
95                                         document.getElementById('errors').disabled = false;     
96                                 }
97                                 obj.render_scriptlist();
98                         },
99                 } );
100
101                 obj.script_list = new util.list('script_tree');
102                 obj.script_list.init( {
103                         'columns' : [
104                                 {
105                                         'id' : 'create_time', 'flex' : '1',
106                                         'label' : 'Date Uploaded',
107                                         'render' : 'if (my.create_time) { var x = new Date(); x.setTime(my.create_time+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { ""; }',
108                                 },
109                                 {
110                                         'id' : 'requestor', 'flex' : '1', 'hidden' : 'true',
111                                         'label' : 'Uploaded By',
112                                         'render' : 'my.requestor',
113                                 },
114                                 { 
115                                         'id' : 'time_delta', 'hidden' : 'true', 'flex' : '1', 
116                                         'label' : 'Server/Local Time Delta', 
117                                         'render' : "my.time_delta", 
118                                 },
119                                 { 
120                                         'id' : 'workstation', 'flex' : '1', 
121                                         'label' : 'Workstation', 
122                                         'render' : "my.workstation", 
123                                 },
124                         ],
125                         'map_row_to_column' : function(row,col) {
126                                 JSAN.use('util.date');
127                                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
128                                 var my = row; var value;
129                                 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
130                                 return value;
131                         },
132                 } );
133
134
135                 obj.retrieve_seslist();
136                 obj.render_seslist();
137
138                 var x = document.getElementById('create');
139                 if (obj.check_perm(obj.session,'OFFLINE_CREATE_SESSION')) {
140                         x.disabled = false;
141                         x.addEventListener('command',function() { try{obj.create_ses();}catch(E){alert(E);} },false);
142                 }
143
144                 x = document.getElementById('upload');
145                 x.addEventListener('command',function() { try{obj.upload();}catch(E){alert(E);} },false);
146
147                 x = document.getElementById('refresh');
148                 x.addEventListener('command',function() { try{obj.retrieve_seslist();obj.render_seslist();}catch(E){alert(E);} },false);
149
150                 x = document.getElementById('execute');
151                 x.addEventListener('command',function() { try{obj.execute_ses();}catch(E){alert(E);} },false);
152
153                 x = document.getElementById('errors');
154                 x.addEventListener('command',function() { try{obj.ses_errors();}catch(E){alert(E);} },false);
155         },
156
157         'check_perm' : function(ses,perms) {
158                 return true; /* FIXME */
159         },
160
161         'execute_ses' : function() {
162                 var obj = this;
163
164                 obj.data.stash_retrieve();
165
166                 for (var i = 0; i < obj.sel_list.length; i++) {
167
168                         var url  = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
169                                 + "?ses=" + window.escape(obj.data.session)
170                                 + "&action=execute" 
171                                 + "&seskey=" + window.escape(obj.sel_list[i])
172                                 + "&ws=" + window.escape(obj.data.ws_name);
173                         var x = new XMLHttpRequest();
174                         x.open("GET",url,false);
175                         x.send(null);
176
177                         dump(url + ' = ' + x.responseText + '\n' );
178                         var robj = JSON2js(x.responseText);
179
180                         if (robj.ilsevent != 0) { alert('Execute error: ' + x.responseText); }
181
182                         obj.retrieve_seslist(); obj.render_seslist();
183                 }
184         },
185
186         'ses_errors' : function() {
187                 var obj = this;
188
189                 obj.data.stash_retrieve();
190
191                 for (var i = 0; i < obj.sel_list.length; i++) {
192
193                         var url  = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
194                                 + "?ses=" + window.escape(obj.data.session)
195                                 + "&action=status" 
196                                 + "&seskey=" + window.escape(obj.sel_list[i])
197                                 + "&ws=" + window.escape(obj.data.ws_name)
198                                 + '&status_type=exceptions';
199                         var x = new XMLHttpRequest();
200                         x.open("GET",url,false);
201                         x.send(null);
202
203                         dump(url + ' = ' + x.responseText + '\n' );
204                         var robj = JSON2js(x.responseText);
205
206                         alert(js2JSON(robj));
207
208                 }
209         },
210
211         'rename_file' : function() {
212                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
213                 var obj = this;
214                 JSAN.use('util.file'); 
215                 var pending = new util.file('pending_xacts');
216                 if ( !pending._file.exists() ) { throw("Can't rename a non-existent file"); }
217                 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
218                 var count = 0;
219                 var file = new util.file(obj.transition_filename);
220                 while (file._file.exists()) {
221                         obj.transition_filename = 'pending_xacts_' + new Date().getTime();
222                         file = new util.file(obj.transition_filename);
223                         if (count++>100) throw("Taking too long to find a unique filename.");
224                 }
225                 pending._file.moveTo(null,obj.transition_filename);
226         },
227
228         'revert_file' : function() {
229                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
230                 var obj = this;
231                 JSAN.use('util.file');
232                 var pending = new util.file('pending_xacts');
233                 if (pending._file.exists()) { alert('Something bad happened.  New offline transactions were accumulated during our attempted upload.  Tell your system admin that the file involved is ' + obj.transition_filename); return; }
234                 var file = new util.file(obj.transition_filename);
235                 file._file.moveTo(null,'pending_xacts');
236         },
237
238         'archive_file' : function() {
239                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
240                 var obj = this;
241                 JSAN.use('util.file');
242                 var file = new util.file(obj.transition_filename);
243                 if (file._file.exists()) file._file.moveTo(null,obj.transition_filename + '.complete')
244         },
245
246         'upload' : function() {
247                 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
248                 var obj = this;
249                 if (obj.sel_list.length == 0) { alert('Please select a session to upload to.'); return; }
250                 if (obj.sel_list.length > 1) { alert('Please select a single session to upload to.'); return; }
251
252                 JSAN.use('util.file');
253
254                 var file = new util.file('pending_xacts');
255                 if (!file._file.exists()) { alert('No pending transactions to upload.'); return; }
256
257                 obj.rename_file();
258
259                 obj.data.stash_retrieve();
260                 var seskey = obj.sel_list[0];
261                 JSAN.use('util.widgets');
262                 var xx = document.getElementById('iframe_placeholder'); util.widgets.remove_children(xx);
263                 var x = document.createElement('iframe'); xx.appendChild(x); x.flex = 1;
264                 x.setAttribute(
265                         'src',
266                         window.xulG.url_prefix( urls.XUL_REMOTE_BROWSER )
267                         + '?url=' + window.escape(
268                                 urls.XUL_OFFLINE_UPLOAD_XACTS
269                                 + '?ses=' + window.escape(obj.data.session)
270                                 + '&seskey=' + window.escape(seskey)
271                                 + '&ws=' + window.escape(obj.data.ws_name)
272                                 + '&delta=' + window.escape('0')
273                                 + '&filename=' + window.escape( obj.transition_filename )
274                         )
275                 );
276                 var newG = { 
277                         'url_prefix' : window.xulG.url_prefix, 
278                         'passthru_content_params' : {
279                                 'url_prefix' : window.xulG.url_prefix,
280                                 'handle_event' : function(robj){
281                                         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
282                                         try {
283                                                 dump('robj = ' + js2JSON(robj) + '\n');
284                                                 if ( robj.ilsevent != 0 ) {
285                                                         obj.revert_file();
286                                                 } else {
287                                                         obj.archive_file();
288                                                 }
289                                                 obj.retrieve_seslist(); obj.render_seslist();
290                                                 setTimeout(
291                                                         function() {
292                                                                 JSAN.use('util.widgets');
293                                                                 util.widgets.remove_children('iframe_placeholder');
294                                                         },0
295                                                 );
296                                         } catch(E) {
297                                                 alert('handle_event error: ' + E);
298                                         }
299                                 } 
300                         }
301                 };
302                 x.contentWindow.xulG = newG;
303         },
304
305         'ses_status' : function() {
306                 var obj = this;
307
308                 obj.data.stash_retrieve();
309
310                 var url  = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
311                         + "?ses=" + window.escape(obj.data.session)
312                         + "&action=status" 
313                         + "&seskey=" + window.escape(obj.sel_list[0])
314                         + "&ws=" + window.escape(obj.data.ws_name)
315                         + "&status_type=scripts";
316                 var x = new XMLHttpRequest();
317                 x.open("GET",url,false);
318                 x.send(null);
319
320                 dump(url + ' = ' + x.responseText + '\n' );
321                 var robj = JSON2js(x.responseText);
322
323                 return robj;
324         },
325
326         'create_ses' : function() {
327
328                 var obj = this;
329
330                 var desc = window.prompt('Please enter a description:','','Create an Offline Transaction Session');
331                 if (desc=='' || desc==null) { return; }
332
333                 obj.data.stash_retrieve();
334
335                 var url  = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
336                         + "?ses=" + window.escape(obj.data.session)
337                         + "&action=create" 
338                         + "&desc=" + window.escape(desc)
339                         + "&ws=" + window.escape(obj.data.ws_name);
340                 var x = new XMLHttpRequest();
341                 x.open("GET",url,false);
342                 x.send(null);
343
344                 dump(url + ' = ' + x.responseText + '\n' );
345                 var robj = JSON2js(x.responseText);
346                 if (robj.ilsevent == 0) {
347                         obj.retrieve_seslist(); obj.render_seslist();
348                 } else {
349                         alert('Error: ' + x.responseText);
350                 }
351         },
352
353         'retrieve_seslist' : function() {
354
355                 var obj = this;
356
357                 obj.data.stash_retrieve();
358
359                 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI) 
360                         + "?ses=" + window.escape(obj.data.session)
361                         + "&action=status"
362                         + "&org=" + window.escape(obj.data.list.au[0].ws_ou())
363                         + "&status_type=sessions";
364                 var x = new XMLHttpRequest();
365                 x.open("GET",url,false);
366                 x.send(null);
367
368                 dump(url + ' = ' + x.responseText + '\n' );
369                 obj.seslist = JSON2js( x.responseText );
370         },
371
372         'render_seslist' : function() {
373
374                 var obj = this;
375
376                 obj.list.clear();
377
378                 var funcs = [];
379                 for (var i = 0; i < obj.seslist.length; i++) {
380                         funcs.push( 
381                                 function(row){ 
382                                         return function(){
383                                                 obj.list.append( { 'retrieve_id' : row.key, 'row' : row } );
384                                         };
385                                 }(obj.seslist[i]) 
386                         );
387                 }
388                 JSAN.use('util.exec'); var exec = new util.exec();
389                 exec.chain( funcs );
390
391                 document.getElementById('execute').disabled = true;
392                 document.getElementById('errors').disabled = true;
393                 document.getElementById('upload').disabled = true;
394
395         },
396
397         'render_scriptlist' : function() {
398
399                 var obj = this;
400
401                 obj.script_list.clear();
402
403                 var scripts = obj.ses_status().scripts;
404
405                 var funcs = [];
406                 for (var i = 0; i < scripts.length; i++) {
407                         funcs.push( 
408                                 function(row){ 
409                                         return function(){
410                                                 obj.script_list.append( { 'row' : row } );
411                                         };
412                                 }(scripts[i]) 
413                         );
414                 }
415                 JSAN.use('util.exec'); var exec = new util.exec();
416                 exec.chain( funcs );
417         },
418 }
419
420 dump('exiting admin/offline_manage_xacts.js\n');