1 dump('entering admin/offline_manage_xacts.js\n');
3 if (typeof admin == 'undefined') admin = {};
4 admin.offline_manage_xacts = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
10 admin.offline_manage_xacts.prototype = {
15 'init' : function( params ) {
19 JSAN.use('OpenILS.data'); obj.data = new OpenILS.data(); obj.data.init({'via':'stash'});
21 obj.init_list(); obj.init_script_list(); obj.init_error_list();
23 obj.retrieve_seslist(); obj.render_seslist();
25 var x = document.getElementById('create');
26 if (obj.check_perm(obj.session,'OFFLINE_CREATE_SESSION')) {
28 x.addEventListener('command',function() { try{obj.create_ses();}catch(E){alert(E);} },false);
31 x = document.getElementById('upload');
32 x.addEventListener('command',function() { try{obj.upload();}catch(E){alert(E);} },false);
34 x = document.getElementById('refresh');
35 x.addEventListener('command',function() { try{obj.retrieve_seslist();obj.render_seslist();}catch(E){alert(E);} },false);
37 x = document.getElementById('execute');
38 x.addEventListener('command',function() { try{obj.execute_ses();}catch(E){alert(E);} },false);
40 document.getElementById('deck').selectedIndex = 2;
43 'init_list' : function() {
44 var obj = this; JSAN.use('util.list');
45 obj.list = new util.list('session_tree');
49 'id' : 'org', 'hidden' : 'true', 'flex' : '1',
50 'label' : 'Organization',
51 'render' : 'data.hash.aou[ my.org ].shortname()',
54 'id' : 'description', 'flex' : '2',
55 'label' : 'Description',
56 'render' : "my.description",
59 'id' : 'create_time', 'flex' : '1',
60 'label' : 'Date Created',
61 'render' : 'if (my.create_time) { var x = new Date(); x.setTime(my.create_time+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { ""; }',
64 'id' : 'creator', 'flex' : '1', 'hidden' : 'true',
65 'label' : 'Created By',
66 'render' : 'my.creator',
69 'id' : 'count', 'flex' : '1',
70 'label' : 'Upload Count',
71 'render' : "my.scripts.length",
74 'id' : 'num_complete', 'flex' : '1',
75 'label' : 'Transactions Processed',
76 'render' : "my.num_complete",
79 'id' : 'in_process', 'flex' : '1',
80 'label' : 'Processing?',
81 'render' : "if (my.end_time) { 'Completed' } else {my.in_process == 0 ? 'No' : 'Yes'}",
84 'id' : 'start_time', 'flex' : '1', 'hidden' : 'true',
85 'label' : 'Date Started',
86 'render' : 'if (my.start_time) {var x = new Date(); x.setTime(my.start_time+"000"); util.date.formatted_date(x,"%F %H:%M");} else { ""; }',
89 'id' : 'end_time', 'flex' : '1',
90 'label' : 'Date Completed',
91 'render' : 'if (my.end_time) {var x = new Date(); x.setTime(my.end_time+"000"); util.date.formatted_date(x,"%F %H:%M");} else { ""; }',
94 'id' : 'key', 'hidden' : 'true', 'flex' : '1',
99 'map_row_to_column' : function(row,col) {
100 JSAN.use('util.date');
101 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
102 var my = row; var value;
103 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
106 'on_select' : function(ev) {
108 JSAN.use('util.functional');
109 var sel = obj.list.retrieve_selection();
110 obj.sel_list = util.functional.map_list(
112 function(o) { return o.getAttribute('retrieve_id'); }
114 if (obj.check_perm(obj.session,'OFFLINE_EXECUTE_SESSION')) {
115 document.getElementById('execute').disabled = false;
117 if (obj.check_perm(obj.session,'OFFLINE_UPLOAD_XACTS')) {
118 document.getElementById('upload').disabled = false;
120 var complete = false;
121 for (var i = 0; i < obj.sel_list.length; i++) {
122 if (obj.seslist[ obj.sel_list[i] ].end_time) { complete = true; }
125 obj.render_errorlist();
127 obj.render_scriptlist();
130 alert('on_select: ' + E);
138 'init_script_list' : function() {
139 var obj = this; JSAN.use('util.list');
140 obj.script_list = new util.list('script_tree');
141 obj.script_list.init( {
144 'id' : 'create_time', 'flex' : '1',
145 'label' : 'Date Uploaded',
146 'render' : 'if (my.create_time) { var x = new Date(); x.setTime(my.create_time+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { ""; }',
149 'id' : 'requestor', 'flex' : '1', 'hidden' : 'true',
150 'label' : 'Uploaded By',
151 'render' : 'my.requestor',
154 'id' : 'time_delta', 'hidden' : 'true', 'flex' : '1',
155 'label' : 'Server/Local Time Delta',
156 'render' : "my.time_delta",
159 'id' : 'workstation', 'flex' : '1',
160 'label' : 'Workstation',
161 'render' : "my.workstation",
164 'map_row_to_column' : function(row,col) {
165 JSAN.use('util.date');
166 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
167 var my = row; var value;
168 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
176 'init_error_list' : function() {
177 var obj = this; JSAN.use('util.list');
178 obj.error_list = new util.list('error_tree');
179 obj.error_list.init( {
182 'id' : 'workstation', 'flex' : '1',
183 'label' : 'Workstation',
184 'render' : 'my.command._workstation ? my.command._workstation : my.command._worksation',
187 'id' : 'timestamp', 'flex' : '1',
188 'label' : 'Timestamp',
189 'render' : 'if (my.command.timestamp) { var x = new Date(); x.setTime(my.command.timestamp+"000"); util.date.formatted_date(x,"%F %H:%M"); } else { my.command._realtime; }',
192 'id' : 'type', 'flex' : '1',
194 'render' : 'my.command.type',
197 'id' : 'ilsevent', 'hidden' : 'true', 'flex' : '1',
198 'label' : 'Event Code',
199 'render' : "my.event.ilsevent",
202 'id' : 'textcode', 'flex' : '1',
203 'label' : 'Event Name',
204 'render' : "my.event.textcode",
207 'id' : 'i_barcode', 'flex' : '1',
208 'label' : 'Item Barcode',
209 'render' : 'my.command.barcode ? my.command.barcode : ""',
212 'id' : 'p_barcode', 'flex' : '1',
213 'label' : 'Patron Barcode',
214 'render' : 'if (my.command.patron_barcode) { my.command.patron_barcode; } else { if (my.command.user.card.barcode) { my.command.user.card.barcode; } else { ""; } }',
217 'id' : 'duedate', 'flex' : '1', 'hidden' : 'true',
218 'label' : 'Due Date',
219 'render' : 'my.command.due_date || ""',
222 'id' : 'backdate', 'flex' : '1', 'hidden' : 'true',
223 'label' : 'Check In Backdate',
224 'render' : 'my.command.backdate || ""',
227 'id' : 'count', 'flex' : '1', 'hidden' : 'true',
228 'label' : 'In House Use Count',
229 'render' : 'my.command.count || ""',
232 'id' : 'noncat', 'flex' : '1', 'hidden' : 'true',
233 'label' : 'Non-Cataloged?',
234 'render' : 'my.command.noncat == 1 ? "Yes" : "No"',
237 'id' : 'noncat_type', 'flex' : '1', 'hidden' : 'true',
238 'label' : 'Non-Cataloged Type',
239 'render' : 'data.hash.cnct[ my.command.noncat_type ] ? data.hash.cnct[ my.command.noncat_type ].name() : ""',
242 'id' : 'noncat_count', 'flex' : '1', 'hidden' : 'true',
243 'label' : 'Non-Cataloged Count',
244 'render' : 'my.command.noncat_count || ""',
247 'map_row_to_column' : function(row,col) {
248 JSAN.use('util.date');
249 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
250 var my = row; var value;
251 try { value = eval( col.render ); } catch(E) { obj.error.sdump('D_ERROR',E); value = '???'; }
259 'check_perm' : function(ses,perms) {
260 return true; /* FIXME */
263 'execute_ses' : function() {
266 obj.data.stash_retrieve();
268 for (var i = 0; i < obj.sel_list.length; i++) {
270 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
271 + "?ses=" + window.escape(obj.data.session)
273 + "&seskey=" + window.escape(obj.seslist[obj.sel_list[i]].key)
274 + "&ws=" + window.escape(obj.data.ws_name);
275 var x = new XMLHttpRequest();
276 x.open("GET",url,false);
279 dump(url + ' = ' + x.responseText + '\n' );
280 var robj = JSON2js(x.responseText);
282 if (robj.ilsevent != 0) { alert('Execute error: ' + x.responseText); }
284 obj.retrieve_seslist(); obj.render_seslist();
288 'ses_errors' : function() {
291 obj.data.stash_retrieve();
293 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
294 + "?ses=" + window.escape(obj.data.session)
296 + "&seskey=" + window.escape(obj.seslist[ obj.sel_list[0] ].key)
297 + "&ws=" + window.escape(obj.data.ws_name)
298 + '&status_type=exceptions';
299 var x = new XMLHttpRequest();
300 x.open("GET",url,false);
303 dump(url + ' = ' + x.responseText + '\n' );
304 var robj = JSON2js(x.responseText);
306 return { 'errors' : robj, 'description' : obj.seslist[ obj.sel_list[0] ].description };
310 'rename_file' : function() {
311 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
313 JSAN.use('util.file');
314 var pending = new util.file('pending_xacts');
315 if ( !pending._file.exists() ) { throw("Can't rename a non-existent file"); }
316 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
318 var file = new util.file(obj.transition_filename);
319 while (file._file.exists()) {
320 obj.transition_filename = 'pending_xacts_' + new Date().getTime();
321 file = new util.file(obj.transition_filename);
322 if (count++>100) throw("Taking too long to find a unique filename.");
324 pending._file.moveTo(null,obj.transition_filename);
327 'revert_file' : function() {
328 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
330 JSAN.use('util.file');
331 var pending = new util.file('pending_xacts');
332 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; }
333 var file = new util.file(obj.transition_filename);
334 file._file.moveTo(null,'pending_xacts');
337 'archive_file' : function() {
338 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
340 JSAN.use('util.file');
341 var file = new util.file(obj.transition_filename);
342 if (file._file.exists()) file._file.moveTo(null,obj.transition_filename + '.complete')
345 'upload' : function() {
346 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
348 if (obj.sel_list.length == 0) { alert('Please select a session to upload to.'); return; }
349 if (obj.sel_list.length > 1) { alert('Please select a single session to upload to.'); return; }
351 JSAN.use('util.file');
353 var file = new util.file('pending_xacts');
354 if (!file._file.exists()) { alert('No pending transactions to upload.'); return; }
358 obj.data.stash_retrieve();
359 var seskey = obj.seslist[ obj.sel_list[0] ].key;
360 JSAN.use('util.widgets');
361 var xx = document.getElementById('iframe_placeholder'); util.widgets.remove_children(xx);
362 var x = document.createElement('iframe'); xx.appendChild(x); x.flex = 1;
365 window.xulG.url_prefix( urls.XUL_REMOTE_BROWSER )
366 + '?url=' + window.escape(
367 urls.XUL_OFFLINE_UPLOAD_XACTS
368 + '?ses=' + window.escape(obj.data.session)
369 + '&seskey=' + window.escape(seskey)
370 + '&ws=' + window.escape(obj.data.ws_name)
371 + '&delta=' + window.escape('0')
372 + '&filename=' + window.escape( obj.transition_filename )
376 'url_prefix' : window.xulG.url_prefix,
377 'passthru_content_params' : {
378 'url_prefix' : window.xulG.url_prefix,
379 'handle_event' : function(robj){
380 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
382 dump('robj = ' + js2JSON(robj) + '\n');
383 if ( robj.ilsevent != 0 ) {
388 obj.retrieve_seslist(); obj.render_seslist();
391 JSAN.use('util.widgets');
392 util.widgets.remove_children('iframe_placeholder');
396 alert('handle_event error: ' + E);
401 x.contentWindow.xulG = newG;
404 'ses_status' : function() {
407 obj.data.stash_retrieve();
409 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
410 + "?ses=" + window.escape(obj.data.session)
412 + "&seskey=" + window.escape(obj.seslist[obj.sel_list[0]].key)
413 + "&ws=" + window.escape(obj.data.ws_name)
414 + "&status_type=scripts";
415 var x = new XMLHttpRequest();
416 x.open("GET",url,false);
419 dump(url + ' = ' + x.responseText + '\n' );
420 var robj = JSON2js(x.responseText);
425 'create_ses' : function() {
429 var desc = window.prompt('Please enter a description:','','Create an Offline Transaction Session');
430 if (desc=='' || desc==null) { return; }
432 obj.data.stash_retrieve();
434 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
435 + "?ses=" + window.escape(obj.data.session)
437 + "&desc=" + window.escape(desc)
438 + "&ws=" + window.escape(obj.data.ws_name);
439 var x = new XMLHttpRequest();
440 x.open("GET",url,false);
443 dump(url + ' = ' + x.responseText + '\n' );
444 var robj = JSON2js(x.responseText);
445 if (robj.ilsevent == 0) {
446 obj.retrieve_seslist(); obj.render_seslist();
448 alert('Error: ' + x.responseText);
452 'retrieve_seslist' : function() {
456 obj.data.stash_retrieve();
458 var url = xulG.url_prefix(urls.XUL_OFFLINE_MANAGE_XACTS_CGI)
459 + "?ses=" + window.escape(obj.data.session)
461 + "&org=" + window.escape(obj.data.list.au[0].ws_ou())
462 + "&status_type=sessions";
463 var x = new XMLHttpRequest();
464 x.open("GET",url,false);
467 dump(url + ' = ' + x.responseText + '\n' );
468 obj.seslist = JSON2js( x.responseText );
471 'render_seslist' : function() {
478 for (var i = 0; i < obj.seslist.length; i++) {
482 obj.list.append( { 'retrieve_id' : idx, 'row' : row } );
487 JSAN.use('util.exec'); var exec = new util.exec();
490 document.getElementById('execute').disabled = true;
491 document.getElementById('upload').disabled = true;
495 'render_scriptlist' : function() {
497 dump('render_scriptlist\n');
499 document.getElementById('deck').selectedIndex = 0;
503 obj.script_list.clear();
505 var status = obj.ses_status();
506 document.getElementById('status_caption').setAttribute('label','Uploaded Transactions for ' + status.description);
508 var scripts = status.scripts;
511 for (var i = 0; i < scripts.length; i++) {
515 obj.script_list.append( { 'row' : row } );
520 JSAN.use('util.exec'); var exec = new util.exec();
524 'render_errorlist' : function() {
526 dump('render_errorlist\n');
528 document.getElementById('deck').selectedIndex = 1;
532 obj.error_list.clear();
534 var error_meta = obj.ses_errors();
535 document.getElementById('errors_caption').setAttribute('label','Exceptions for ' + error_meta.description);
537 obj.errors = error_meta.errors;
540 for (var i = 0; i < obj.errors.length; i++) {
544 obj.error_list.append( { 'retrieve_id' : idx, 'row' : row } );
549 JSAN.use('util.exec'); var exec = new util.exec();
555 dump('exiting admin/offline_manage_xacts.js\n');