1 dump('entering circ.copy_status.js\n');
4 if (typeof circ == 'undefined') { circ = {}; }
5 circ.copy_status = function (params) {
7 JSAN.use('util.error'); this.error = new util.error();
8 JSAN.use('util.network'); this.network = new util.network();
9 JSAN.use('util.barcode');
10 JSAN.use('util.date');
11 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
12 JSAN.use('util.sound'); this.sound = new util.sound();
15 circ.copy_status.prototype = {
16 'selection_list' : [],
17 'list_copyid_map' : {},
19 'init' : function( params ) {
23 JSAN.use('circ.util');
24 var columns = circ.util.columns(
26 'barcode' : { 'hidden' : false },
27 'title' : { 'hidden' : false },
28 'location' : { 'hidden' : false },
29 'call_number' : { 'hidden' : false },
30 'status' : { 'hidden' : false },
31 'alert_message' : { 'hidden' : false },
32 'due_date' : { 'hidden' : false }
36 'checkin_time', 'checkin_time_full', 'route_to', 'message', 'uses', 'xact_finish'
41 JSAN.use('util.list'); obj.list = new util.list('copy_status_list');
45 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
46 'on_select' : function(ev) {
48 JSAN.use('util.functional');
49 var sel = obj.list.retrieve_selection();
50 obj.selection_list = util.functional.map_list(
52 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
54 obj.error.sdump('D_TRACE','circ/copy_status: selection list = ' + js2JSON(obj.selection_list) );
55 if (obj.selection_list.length == 0) {
56 obj.controller.view.sel_checkin.setAttribute('disabled','true');
57 obj.controller.view.cmd_replace_barcode.setAttribute('disabled','true');
58 obj.controller.view.sel_edit.setAttribute('disabled','true');
59 obj.controller.view.sel_opac.setAttribute('disabled','true');
60 obj.controller.view.sel_bucket.setAttribute('disabled','true');
61 obj.controller.view.sel_copy_details.setAttribute('disabled','true');
62 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','true');
63 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','true');
64 obj.controller.view.sel_patron.setAttribute('disabled','true');
65 obj.controller.view.sel_spine.setAttribute('disabled','true');
66 obj.controller.view.sel_transit_abort.setAttribute('disabled','true');
67 obj.controller.view.sel_clip.setAttribute('disabled','true');
68 obj.controller.view.sel_renew.setAttribute('disabled','true');
69 obj.controller.view.cmd_add_items.setAttribute('disabled','true');
70 obj.controller.view.cmd_delete_items.setAttribute('disabled','true');
71 obj.controller.view.cmd_transfer_items.setAttribute('disabled','true');
72 obj.controller.view.cmd_add_volumes.setAttribute('disabled','true');
73 obj.controller.view.cmd_edit_volumes.setAttribute('disabled','true');
74 obj.controller.view.cmd_delete_volumes.setAttribute('disabled','true');
75 obj.controller.view.cmd_mark_volume.setAttribute('disabled','true');
76 obj.controller.view.cmd_mark_library.setAttribute('disabled','true');
77 obj.controller.view.cmd_transfer_volume.setAttribute('disabled','true');
79 obj.controller.view.sel_checkin.setAttribute('disabled','false');
80 obj.controller.view.cmd_replace_barcode.setAttribute('disabled','false');
81 obj.controller.view.sel_edit.setAttribute('disabled','false');
82 obj.controller.view.sel_opac.setAttribute('disabled','false');
83 obj.controller.view.sel_patron.setAttribute('disabled','false');
84 obj.controller.view.sel_bucket.setAttribute('disabled','false');
85 obj.controller.view.sel_copy_details.setAttribute('disabled','false');
86 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','false');
87 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','false');
88 obj.controller.view.sel_spine.setAttribute('disabled','false');
89 obj.controller.view.sel_transit_abort.setAttribute('disabled','false');
90 obj.controller.view.sel_clip.setAttribute('disabled','false');
91 obj.controller.view.sel_renew.setAttribute('disabled','false');
92 obj.controller.view.cmd_add_items.setAttribute('disabled','false');
93 obj.controller.view.cmd_delete_items.setAttribute('disabled','false');
94 obj.controller.view.cmd_transfer_items.setAttribute('disabled','false');
95 obj.controller.view.cmd_add_volumes.setAttribute('disabled','false');
96 obj.controller.view.cmd_edit_volumes.setAttribute('disabled','false');
97 obj.controller.view.cmd_delete_volumes.setAttribute('disabled','false');
98 obj.controller.view.cmd_mark_volume.setAttribute('disabled','false');
99 obj.controller.view.cmd_mark_library.setAttribute('disabled','false');
100 obj.controller.view.cmd_transfer_volume.setAttribute('disabled','false');
103 alert('FIXME: ' + E);
109 JSAN.use('util.controller'); obj.controller = new util.controller();
113 'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
117 obj.list.clipboard();
118 obj.controller.view.copy_status_barcode_entry_textbox.focus();
126 JSAN.use('circ.util');
127 for (var i = 0; i < obj.selection_list.length; i++) {
128 var barcode = obj.selection_list[i].barcode;
129 var checkin = circ.util.checkin_via_barcode( ses(), { 'barcode' : barcode } );
130 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
132 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
133 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.action.complete'));
135 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.sel_checkin.error'),E);
139 'cmd_replace_barcode' : [
144 JSAN.use('cat.util');
145 for (var i = 0; i < obj.selection_list.length; i++) {
147 var barcode = obj.selection_list[i].barcode;
148 var new_bc = cat.util.replace_barcode( barcode );
149 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(new_bc) );
151 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.cmd_replace_barcode.error', [barcode]), E);
154 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
155 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.action.complete'));
157 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.cmd_replace_barcodes.error'), E);
166 obj.spawn_copy_editor();
167 for (var i = 0; i < obj.selection_list.length; i++) {
168 var barcode = obj.selection_list[i].barcode;
169 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
171 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
173 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.sel_edit.error'), E);
180 JSAN.use('cat.util');
181 cat.util.spawn_spine_editor(obj.selection_list);
187 JSAN.use('cat.util');
188 cat.util.show_in_opac(obj.selection_list);
191 'sel_transit_abort' : [
195 JSAN.use('circ.util');
196 circ.util.abort_transits(obj.selection_list);
197 for (var i = 0; i < obj.selection_list.length; i++) {
198 var barcode = obj.selection_list[i].barcode;
199 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
201 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
202 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.action.complete'));
208 JSAN.use('circ.util');
209 circ.util.show_last_few_circs(obj.selection_list);
212 'sel_copy_details' : [
215 JSAN.use('circ.util');
216 for (var i = 0; i < obj.selection_list.length; i++) {
217 circ.util.show_copy_details( obj.selection_list[i].copy_id );
225 JSAN.use('circ.util');
226 for (var i = 0; i < obj.selection_list.length; i++) {
227 var test = obj.selection_list[i].renewable;
228 var barcode = obj.selection_list[i].barcode;
230 circ.util.renew_via_barcode( barcode );
231 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
233 alert(document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.sel_renew.not_circulating', [barcode]));
236 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
237 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.action.complete'));
241 'sel_mark_items_damaged' : [
245 JSAN.use('cat.util'); JSAN.use('util.functional');
246 cat.util.mark_item_damaged( util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } ) );
247 for (var i = 0; i < obj.selection_list.length; i++) {
248 var barcode = obj.selection_list[i].barcode;
249 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
251 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
254 'sel_mark_items_missing' : [
258 JSAN.use('cat.util'); JSAN.use('util.functional');
259 cat.util.mark_item_missing( util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } ) );
260 for (var i = 0; i < obj.selection_list.length; i++) {
261 var barcode = obj.selection_list[i].barcode;
262 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
264 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
270 JSAN.use('cat.util');
271 cat.util.add_copies_to_bucket(obj.selection_list);
274 'copy_status_barcode_entry_textbox' : [
277 if (ev.keyCode && ev.keyCode == 13) {
284 function() { alert(document.getElementById('circStrings').getString('staff.circ.unimplemented')); }
286 'cmd_copy_status_submit_barcode' : [
292 'cmd_copy_status_upload_file' : [
295 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
296 JSAN.use('util.file');
297 var f = new util.file('');
298 var content = f.import_file( { 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.upload_file.title'), 'not_json' : true } );
299 if (!content) { return; }
300 var barcodes = content.split(/[,\s]+/);
301 if (barcodes.length > 0) {
302 JSAN.use('util.exec'); var exec = new util.exec();
304 for (var i = 0; i < barcodes.length; i++) {
313 funcs.push( function() { alert(document.getElementById('circStrings').getString('staff.circ.copy_status.upload_file.complete')); } );
316 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.upload_file.no_barcodes'));
321 'cmd_copy_status_print' : [
326 'template' : 'item_status'
330 obj.error.standard_unexpected_error_alert('print',E);
334 'cmd_csv_to_clipboard' : [ ['command'], function() {
335 obj.list.dump_csv_to_clipboard();
336 obj.controller.view.copy_status_barcode_entry_textbox.focus();
338 'cmd_csv_to_printer' : [ ['command'], function() {
339 obj.list.dump_csv_to_printer();
340 obj.controller.view.copy_status_barcode_entry_textbox.focus();
342 'cmd_csv_to_file' : [ ['command'], function() {
343 obj.list.dump_csv_to_file( { 'defaultFileName' : 'item_status.txt' } );
344 obj.controller.view.copy_status_barcode_entry_textbox.focus();
352 JSAN.use('util.functional');
353 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
354 if (list.length == 0) { return; }
356 var copy_shortcut = {}; var map_acn = {};
358 for (var i = 0; i < list.length; i++) {
359 var volume_id = list[i];
360 if (volume_id == -1) {
361 continue; /* ignore magic pre-cat volume */
363 if (! map_acn[volume_id]) {
364 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
366 var record_id = map_acn[ volume_id ].record();
367 var ou_id = map_acn[ volume_id ].owning_lib();
368 var label = map_acn[ volume_id ].label();
369 if (!copy_shortcut[record_id]) {
370 copy_shortcut[record_id] = {};
372 if (!copy_shortcut[record_id][ou_id]) {
373 copy_shortcut[record_id][ou_id] = {};
375 copy_shortcut[record_id][ou_id][ label ] = volume_id;
379 for (var r in copy_shortcut) {
381 /* quick fix */ /* what was this fixing? */
382 list = []; for (var i in copy_shortcut[r]) { list.push( i ); }
386 edit = obj.network.request(
387 api.PERM_MULTI_ORG_CHECK.app,
388 api.PERM_MULTI_ORG_CHECK.method,
391 obj.data.list.au[0].id(),
395 ).length == 0 ? 1 : 0;
397 obj.error.sdump('D_ERROR','batch permission check: ' + E);
401 return; // no read-only view for this interface
404 var title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.add_items.title', [r]);
406 JSAN.use('util.window'); var win = new util.window();
408 window.xulG.url_prefix(urls.XUL_VOLUME_COPY_CREATOR),
409 //+'?doc_id=' + window.escape(r)
410 //+'&ou_ids=' + window.escape( js2JSON(list) )
411 //+'©_shortcut=' + window.escape( js2JSON(copy_shortcut[r]) ),
414 { 'doc_id' : r, 'ou_ids' : list, 'copy_shortcut' : copy_shortcut[r] }
419 obj.error.standard_unexpected_error_alert('copy status -> add copies',E);
424 'cmd_delete_items' : [
429 JSAN.use('util.functional');
431 var list = util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } );
433 var copies = util.functional.map_list(
436 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
440 for (var i = 0; i < copies.length; i++) {
441 copies[i].ischanged(1);
442 copies[i].isdeleted(1);
445 if (! window.confirm(document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.del_items.confirm', [util.functional.map_list( copies, function(o) { return o.barcode(); }).join(", ")]))) {
449 var robj = obj.network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE',[ ses(), copies, true]);
450 var robj = obj.network.simple_request(
451 'FM_ACP_FLESHED_BATCH_UPDATE',
452 [ ses(), copies, true ],
455 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.del_items.title'),
456 'overridable_events' : [
457 1208 /* TITLE_LAST_COPY */,
458 1227 /* COPY_DELETE_WARNING */
463 if (typeof robj.ilsevent != 'undefined') {
464 switch(Number(robj.ilsevent)) {
465 case 1208 /* TITLE_LAST_COPY */:
466 case 1227 /* COPY_DELETE_WARNING */:
469 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.del_items.success.error'), robj);
472 } else { alert(document.getElementById('circStrings').getString('staff.circ.copy_status.del_items.success')); }
475 obj.error.standard_unexpected_error_alert('copy status -> delete items',E);
479 'cmd_transfer_items' : [
483 obj.data.stash_retrieve();
484 if (!obj.data.marked_volume) {
485 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_items.mark_destination'));
489 JSAN.use('util.functional');
491 var list = util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } );
493 var volume = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_volume ]);
495 JSAN.use('cat.util'); cat.util.transfer_copies( {
497 'docid' : volume.record(),
498 'volume_label' : volume.label(),
499 'owning_lib' : volume.owning_lib()
503 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_items.problem'), E);
508 'cmd_add_volumes' : [
512 JSAN.use('util.functional');
513 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
514 if (list.length == 0) { return; }
516 var aou_hash = {}; var map_acn = {};
518 for (var i = 0; i < list.length; i++) {
519 var volume_id = list[i];
520 if (volume_id == -1) {
521 continue; /* ignore magic pre-cat volume */
523 if (! map_acn[volume_id]) {
524 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
526 var record_id = map_acn[ volume_id ].record();
527 var ou_id = map_acn[ volume_id ].owning_lib();
528 var label = map_acn[ volume_id ].label();
529 if (!aou_hash[record_id]) aou_hash[record_id] = {};
530 aou_hash[record_id][ou_id] = 1;
534 for (var r in aou_hash) {
536 list = []; for (var org in aou_hash[r]) list.push(org);
540 edit = obj.network.request(
541 api.PERM_MULTI_ORG_CHECK.app,
542 api.PERM_MULTI_ORG_CHECK.method,
545 obj.data.list.au[0].id(),
547 [ 'CREATE_VOLUME', 'CREATE_COPY' ]
549 ).length == 0 ? 1 : 0;
551 obj.error.sdump('D_ERROR','batch permission check: ' + E);
555 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.add_volumes.perm_failure'));
556 return; // no read-only view for this interface
559 var title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.add_volumes.title', [r]);
561 JSAN.use('util.window'); var win = new util.window();
563 window.xulG.url_prefix(urls.XUL_VOLUME_COPY_CREATOR),
564 //+'?doc_id=' + window.escape(r)
565 //+'&ou_ids=' + window.escape( js2JSON(list) ),
568 { 'doc_id' : r, 'ou_ids' : list }
574 obj.error.standard_unexpected_error_alert('copy status -> add volumes',E);
579 'cmd_edit_volumes' : [
583 JSAN.use('util.functional');
584 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
585 if (list.length == 0) { return; }
587 var volume_hash = {}; var map_acn = {};
589 for (var i = 0; i < list.length; i++) {
590 var volume_id = list[i];
591 if (volume_id == -1) {
592 continue; /* ignore magic pre-cat volume */
594 if (! map_acn[volume_id]) {
595 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
596 map_acn[ volume_id ].copies( [] );
598 var record_id = map_acn[ volume_id ].record();
599 if (!volume_hash[record_id]) {
600 volume_hash[record_id] = {};
602 volume_hash[record_id][volume_id] = 1;
605 for (var rec in volume_hash) {
608 for (var v in volume_hash[rec]) {
609 list.push( map_acn[v] );
614 edit = obj.network.request(
615 api.PERM_MULTI_ORG_CHECK.app,
616 api.PERM_MULTI_ORG_CHECK.method,
619 obj.data.list.au[0].id(),
620 util.functional.map_list(
623 return o.owning_lib();
628 ).length == 0 ? 1 : 0;
630 obj.error.sdump('D_ERROR','batch permission check: ' + E);
634 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.edit_volumes.perm_failure'));
635 return; // no read-only view for this interface
639 if (list.length == 1) {
640 title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.edit_volume.title', [rec]);
642 title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.edit_volumes.title', [rec]);
645 JSAN.use('util.window'); var win = new util.window();
646 //obj.data.volumes_temp = js2JSON( list );
647 //obj.data.stash('volumes_temp');
648 var my_xulG = win.open(
649 window.xulG.url_prefix(urls.XUL_VOLUME_EDITOR),
651 'chrome,modal,resizable',
652 { 'volumes' : JSON2js(js2JSON(list)) }
655 /* FIXME -- need to unique the temp space, and not rely on modalness of window */
656 //obj.data.stash_retrieve();
657 //var volumes = JSON2js( obj.data.volumes_temp );
658 if (typeof my_xulG.update_these_volumes == 'undefined') { return; }
659 var volumes = my_xulG.volumes;
660 if (!volumes) { return; }
662 volumes = util.functional.filter_list(
665 return o.ischanged() == '1';
669 volumes = util.functional.map_list(
672 o.record( rec ); // staff client 2 did not do this. Does it matter?
677 if (volumes.length == 0) { return; }
680 var r = obj.network.request(
681 api.FM_ACN_TREE_UPDATE.app,
682 api.FM_ACN_TREE_UPDATE.method,
683 [ ses(), volumes, false ]
685 if (typeof r.ilsevent != 'undefined') {
686 switch(Number(r.ilsevent)) {
687 case 1705 /* VOLUME_LABEL_EXISTS */ :
688 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.edit_volumes.duplicate'));
693 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.edit_volumes.success'));
696 obj.error.standard_unexpected_error_alert('volume update error: ',E);
701 obj.error.standard_unexpected_error_alert('Copy Status -> Volume Edit',E);
706 'cmd_delete_volumes' : [
710 JSAN.use('util.functional');
711 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
712 if (list.length == 0) { return; }
716 for (var i = 0; i < list.length; i++) {
717 var volume_id = list[i];
718 if (volume_id == -1) {
719 continue; /* ignore magic pre-cat volume */
721 if (! map_acn[volume_id]) {
722 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
727 for (var v in map_acn) {
728 list.push( map_acn[v] );
732 if (list.length == 1) {
733 confirm_prompt = document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.singular');
735 confirm_prompt = document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.plural');
738 var r = obj.error.yns_alert(
740 document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.title'),
741 document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.delete'),
742 document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.cancel'),
744 document.getElementById('circStrings').getString('staff.circ.confirm')
748 for (var i = 0; i < list.length; i++) {
749 list[i].isdeleted('1');
751 var robj = obj.network.simple_request(
752 'FM_ACN_TREE_UPDATE',
753 [ ses(), list, true ],
756 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.override'),
757 'overridable_events' : [
761 if (robj == null) throw(robj);
762 if (typeof robj.ilsevent != 'undefined') {
763 if (robj.ilsevent == 1206 /* VOLUME_NOT_EMPTY */) {
764 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.delete_copies'));
767 if (robj.ilsevent != 0) { throw(robj); }
769 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.success'));
772 obj.error.standard_unexpected_error_alert('copy status -> delete volumes',E);
778 'cmd_mark_volume' : [
782 JSAN.use('util.functional');
783 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
785 if (list.length == 1) {
786 obj.data.marked_volume = list[0];
787 obj.data.stash('marked_volume');
788 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.mark_volume.status'));
791 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_volume.prompt'),
792 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_volume.title'),
793 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
796 document.getElementById('circStrings').getString('staff.circ.confirm')
800 obj.error.standard_unexpected_error_alert('copy status -> mark volume',E);
804 'cmd_mark_library' : [
808 JSAN.use('util.functional');
809 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
811 if (list.length == 1) {
812 var v = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[list[0]]);
813 var owning_lib = v.owning_lib();
814 if (typeof owning_lib == 'object') {
815 owning_lib = owning_lib.id();
818 obj.data.marked_library = { 'lib' : owning_lib, 'docid' : v.record() };
819 obj.data.stash('marked_library');
820 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.mark_library'));
823 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_library.limit_one'),
824 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_library.limit_one.title'),
825 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
828 document.getElementById('circStrings').getString('staff.circ.confirm')
832 obj.error.standard_unexpected_error_alert('copy status -> mark library',E);
836 'cmd_transfer_volume' : [
840 obj.data.stash_retrieve();
841 if (!obj.data.marked_library) {
842 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.none'));
846 JSAN.use('util.functional');
848 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
849 if (list.length == 0) { return; }
853 for (var i = 0; i < list.length; i++) {
854 var volume_id = list[i];
855 if (volume_id == -1) {
856 continue; /* ignore magic pre-cat volume */
858 if (! map_acn[volume_id]) {
859 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
865 list.push(map_acn[v]);
868 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
869 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto">';
870 xml += '<description>';
872 var vols = util.functional.map_list(list,
878 var volume_list = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.transfer_volume.confirm',
879 [vols, obj.data.hash.aou[ obj.data.marked_library.lib ].shortname()]);
882 xml += '</description>';
883 xml += '<hbox><button label="';
884 xml += document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.transfer.label');
885 xml += '" name="fancy_submit"/>';
886 xml += '<button label="';
887 xml += document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.cancel.label');
888 xml += '" accesskey="';
889 xml += document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.cancel.accesskey');
890 xml += '" name="fancy_cancel"/></hbox>';
891 xml += '<iframe style="overflow: scroll" flex="1" src="' + urls.XUL_BIB_BRIEF + '?docid=' + obj.data.marked_library.docid + '"/>';
893 JSAN.use('OpenILS.data');
894 //var data = new OpenILS.data(); data.init({'via':'stash'});
895 //data.temp_transfer = xml; data.stash('temp_transfer');
896 JSAN.use('util.window'); var win = new util.window();
897 var fancy_prompt_data = win.open(
898 urls.XUL_FANCY_PROMPT,
899 //+ '?xml_in_stash=temp_transfer'
900 //+ '&title=' + window.escape('Volume Transfer'),
901 'fancy_prompt', 'chrome,resizable,modal,width=500,height=300',
902 { 'xml' : xml, 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.title') }
905 if (fancy_prompt_data.fancy_status == 'incomplete') {
906 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.aborted'));
910 var robj = obj.network.simple_request(
912 [ ses(), { 'docid' : obj.data.marked_library.docid, 'lib' : obj.data.marked_library.lib, 'volumes' : util.functional.map_list( list, function(o) { return o.id(); }) } ],
915 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.override_failure'),
916 'overridable_events' : [
917 1208 /* TITLE_LAST_COPY */,
918 1219 /* COPY_REMOTE_CIRC_LIB */
923 if (typeof robj.ilsevent != 'undefined') {
924 if (robj.ilsevent == 1221 /* ORG_CANNOT_HAVE_VOLS */) {
925 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.cannot_have_vols'));
930 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.success'));
934 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.error'),E);
942 this.controller.render();
943 this.controller.view.copy_status_barcode_entry_textbox.focus();
947 'test_barcode' : function(bc) {
949 var good = util.barcode.check(bc);
950 var x = document.getElementById('strict_barcode');
951 if (x && x.checked != true) { return true; }
955 if ( 1 == obj.error.yns_alert(
956 document.getElementById('circStrings').getFormattedString('staff.circ.check_digit.bad', [bc]),
957 document.getElementById('circStrings').getString('staff.circ.barcode.bad'),
958 document.getElementById('circStrings').getString('staff.circ.cancel'),
959 document.getElementById('circStrings').getString('staff.circ.barcode.accept'),
961 document.getElementById('circStrings').getString('staff.circ.confirm'),
962 '/xul/server/skin/media/images/bad_barcode.png'
971 'copy_status' : function(barcode,refresh) {
974 try { document.getElementById('last_scanned').setAttribute('value',''); } catch(E) {}
976 barcode = obj.controller.view.copy_status_barcode_entry_textbox.value;
978 if (!barcode) { return; }
980 if ( obj.test_barcode(barcode) ) { /* good */ } else { /* bad */ return; }
982 JSAN.use('circ.util');
983 function handle_req(req) {
985 var details = req.getResultObject();
986 if (details == null) {
987 throw(document.getElementById('circStrings').getString('staff.circ.copy_status.status.null_result'));
988 } else if (details.ilsevent) {
989 switch(Number(details.ilsevent)) {
991 obj.error.standard_network_error_alert();
992 obj.controller.view.copy_status_barcode_entry_textbox.select();
993 obj.controller.view.copy_status_barcode_entry_textbox.focus();
996 case 1502 /* ASSET_COPY_NOT_FOUND */ :
997 try { document.getElementById('last_scanned').setAttribute('value', document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode])); } catch(E) {}
999 document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode]),
1000 document.getElementById('circStrings').getString('staff.circ.copy_status.status.not_cataloged'),
1001 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
1004 document.getElementById('circStrings').getString('staff.circ.confirm.msg')
1006 obj.controller.view.copy_status_barcode_entry_textbox.select();
1007 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1015 var msg = details.copy.barcode() + ' -- ';
1016 if (details.copy.call_number() == -1) {
1017 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.pre_cat') + ' ';
1020 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.hold') + ' ';
1022 if (details.transit) {
1023 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.transit') + ' ';
1025 if (details.circ && ! details.circ.checkin_time()) {
1026 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.circ') + ' ';
1028 try { document.getElementById('last_scanned').setAttribute('value',msg); } catch(E) {}
1029 if (document.getElementById('trim_list')) {
1030 var x = document.getElementById('trim_list');
1031 if (x.checked) { obj.list.trim_list = 20; } else { obj.list.trim_list = null; }
1034 'retrieve_id' : js2JSON(
1036 'renewable' : details.circ ? 't' : 'f',
1037 'copy_id' : details.copy.id(),
1038 'acn_id' : details.volume ? details.volume.id() : -1,
1039 'barcode' : barcode,
1040 'doc_id' : details.mvr ? details.mvr.doc_id() : null
1045 'mvr' : details.mvr,
1046 'acp' : details.copy,
1047 'acn' : details.volume,
1048 'atc' : details.transit,
1049 'circ' : details.circ,
1050 'ahr' : details.hold
1056 var nparams = obj.list.append(params);
1057 if (!document.getElementById('trim_list').checked) {
1058 if (typeof obj.list_copyid_map[details.copy.id()] == 'undefined') obj.list_copyid_map[details.copy.id()] =[];
1059 obj.list_copyid_map[details.copy.id()].push(nparams);
1062 if (!document.getElementById('trim_list').checked) {
1063 if (typeof obj.list_copyid_map[details.copy.id()] != 'undefined') {
1064 for (var i = 0; i < obj.list_copyid_map[details.copy.id()].length; i++) {
1065 if (typeof obj.list_copyid_map[details.copy.id()][i] == 'undefined') {
1066 obj.list.append(params);
1068 params.my_node = obj.list_copyid_map[details.copy.id()][i].my_node;
1069 obj.list.refresh_row(params);
1073 obj.list.append(params);
1076 obj.list.append(params);
1080 obj.error.standard_unexpected_error_alert('barcode = ' + barcode,E);
1083 var result = obj.network.simple_request('FM_ACP_DETAILS_VIA_BARCODE.authoritative', [ ses(), barcode ]);
1084 handle_req({'getResultObject':function(){return result;}}); // used to be async
1085 obj.controller.view.copy_status_barcode_entry_textbox.value = '';
1086 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1089 obj.error.standard_unexpected_error_alert('barcode = ' + barcode,E);
1090 obj.controller.view.copy_status_barcode_entry_textbox.select();
1091 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1096 'spawn_copy_editor' : function() {
1100 JSAN.use('util.functional');
1102 var list = obj.selection_list;
1104 list = util.functional.map_list(
1111 JSAN.use('cat.util'); cat.util.spawn_copy_editor( { 'copy_ids' : list, 'edit' : 1 } );
1117 dump('exiting circ.copy_status.js\n');