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' : {},
20 'init' : function( params ) {
24 JSAN.use('circ.util');
25 var columns = circ.util.columns(
27 'barcode' : { 'hidden' : false },
28 'title' : { 'hidden' : false },
29 'location' : { 'hidden' : false },
30 'call_number' : { 'hidden' : false },
31 'acp_status' : { 'hidden' : false },
32 'alert_message' : { 'hidden' : false },
33 'due_date' : { 'hidden' : false }
37 'route_to', 'message', 'uses'
42 JSAN.use('util.list'); obj.list = new util.list('copy_status_list');
46 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
47 'on_select' : function(ev) {
49 JSAN.use('util.functional');
50 var sel = obj.list.retrieve_selection();
51 obj.selection_list = util.functional.map_list(
53 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
55 obj.error.sdump('D_TRACE','circ/copy_status: selection list = ' + js2JSON(obj.selection_list) );
56 if (obj.selection_list.length == 0) {
57 obj.controller.view.sel_checkin.setAttribute('disabled','true');
58 obj.controller.view.cmd_replace_barcode.setAttribute('disabled','true');
59 obj.controller.view.sel_edit.setAttribute('disabled','true');
60 obj.controller.view.sel_opac.setAttribute('disabled','true');
61 obj.controller.view.sel_bucket.setAttribute('disabled','true');
62 obj.controller.view.sel_copy_details.setAttribute('disabled','true');
63 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','true');
64 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','true');
65 obj.controller.view.sel_patron.setAttribute('disabled','true');
66 obj.controller.view.cmd_triggered_events.setAttribute('disabled','true');
67 obj.controller.view.sel_spine.setAttribute('disabled','true');
68 obj.controller.view.sel_transit_abort.setAttribute('disabled','true');
69 obj.controller.view.sel_clip.setAttribute('disabled','true');
70 obj.controller.view.sel_renew.setAttribute('disabled','true');
71 obj.controller.view.cmd_add_items.setAttribute('disabled','true');
72 obj.controller.view.cmd_delete_items.setAttribute('disabled','true');
73 obj.controller.view.cmd_transfer_items.setAttribute('disabled','true');
74 obj.controller.view.cmd_add_volumes.setAttribute('disabled','true');
75 obj.controller.view.cmd_edit_volumes.setAttribute('disabled','true');
76 obj.controller.view.cmd_delete_volumes.setAttribute('disabled','true');
77 obj.controller.view.cmd_mark_volume.setAttribute('disabled','true');
78 obj.controller.view.cmd_mark_library.setAttribute('disabled','true');
79 obj.controller.view.cmd_transfer_volume.setAttribute('disabled','true');
81 obj.controller.view.sel_checkin.setAttribute('disabled','false');
82 obj.controller.view.cmd_replace_barcode.setAttribute('disabled','false');
83 obj.controller.view.sel_edit.setAttribute('disabled','false');
84 obj.controller.view.sel_opac.setAttribute('disabled','false');
85 obj.controller.view.sel_patron.setAttribute('disabled','false');
86 obj.controller.view.cmd_triggered_events.setAttribute('disabled','false');
87 obj.controller.view.sel_bucket.setAttribute('disabled','false');
88 obj.controller.view.sel_copy_details.setAttribute('disabled','false');
89 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','false');
90 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','false');
91 obj.controller.view.sel_spine.setAttribute('disabled','false');
92 obj.controller.view.sel_transit_abort.setAttribute('disabled','false');
93 obj.controller.view.sel_clip.setAttribute('disabled','false');
94 obj.controller.view.sel_renew.setAttribute('disabled','false');
95 obj.controller.view.cmd_add_items.setAttribute('disabled','false');
96 obj.controller.view.cmd_delete_items.setAttribute('disabled','false');
97 obj.controller.view.cmd_transfer_items.setAttribute('disabled','false');
98 obj.controller.view.cmd_add_volumes.setAttribute('disabled','false');
99 obj.controller.view.cmd_edit_volumes.setAttribute('disabled','false');
100 obj.controller.view.cmd_delete_volumes.setAttribute('disabled','false');
101 obj.controller.view.cmd_mark_volume.setAttribute('disabled','false');
102 obj.controller.view.cmd_mark_library.setAttribute('disabled','false');
103 obj.controller.view.cmd_transfer_volume.setAttribute('disabled','false');
106 alert('FIXME: ' + E);
112 JSAN.use('util.controller'); obj.controller = new util.controller();
120 e.appendChild( obj.list.render_list_actions() );
121 obj.list.set_list_actions(
123 'on_complete' : function() { obj.controller.view.copy_status_barcode_entry_textbox.focus(); }
129 'sel_clip' : [ ['command'], function() { obj.list.clipboard(); obj.controller.view.copy_status_barcode_entry_textbox.focus(); } ],
130 'save_columns' : [ ['command'], function() { obj.list.save_columns(); obj.controller.view.copy_status_barcode_entry_textbox.focus(); } ],
134 e.setAttribute('label', document.getElementById("circStrings").getString('staff.circ.copy_status.alt_view.label'));
135 e.setAttribute('accesskey', document.getElementById("circStrings").getString('staff.circ.copy_status.alt_view.accesskey'));
142 var n = obj.controller.view.alt_view_btn;
143 if (n.getAttribute('toggle') == '1') {
144 document.getElementById('deck').selectedIndex = 0;
145 n.setAttribute('toggle','0');
146 n.setAttribute('label', document.getElementById("circStrings").getString('staff.circ.copy_status.alt_view.label'));
147 n.setAttribute('accesskey', document.getElementById("circStrings").getString('staff.circ.copy_status.alt_view.accesskey'));
148 obj.controller.view.copy_status_barcode_entry_textbox.focus();
150 document.getElementById('deck').selectedIndex = 1;
151 n.setAttribute('toggle','1');
152 n.setAttribute('label', document.getElementById("circStrings").getString('staff.circ.copy_status.list_view.label'));
153 n.setAttribute('accesskey', document.getElementById("circStrings").getString('staff.circ.copy_status.list_view.accesskey'));
154 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
155 obj.controller.view.copy_status_barcode_entry_textbox.focus();
156 if (obj.selection_list.length == 0) return;
157 var f = obj.browser.get_content();
158 xulG.barcode = obj.selection_list[0].barcode;
163 alert('Error in copy_status.js, cmd_alt_view handler: ' + E);
167 'cmd_triggered_events' : [
171 for (var i = 0; i < obj.selection_list.length; i++) {
173 urls.XUL_TRIGGER_EVENTS,
175 'tab_name' : document.getElementById('commonStrings').getFormattedString('tab.label.triggered_events_for_copy',[ obj.selection_list[i].barcode ])
178 'copy_id' : obj.selection_list[i].copy_id
183 alert('Error in copy_status.js, cmd_triggered_events: ' + E);
192 JSAN.use('circ.util');
193 for (var i = 0; i < obj.selection_list.length; i++) {
194 var barcode = obj.selection_list[i].barcode;
195 var checkin = circ.util.checkin_via_barcode( ses(), { 'barcode' : barcode } );
196 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
198 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
200 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.sel_checkin.error'),E);
204 'cmd_replace_barcode' : [
209 JSAN.use('cat.util');
210 for (var i = 0; i < obj.selection_list.length; i++) {
212 var barcode = obj.selection_list[i].barcode;
213 var new_bc = cat.util.replace_barcode( barcode );
214 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(new_bc) );
216 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.cmd_replace_barcode.error', [barcode]), E);
219 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
221 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.cmd_replace_barcodes.error'), E);
230 obj.spawn_copy_editor();
231 for (var i = 0; i < obj.selection_list.length; i++) {
232 var barcode = obj.selection_list[i].barcode;
233 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
235 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
237 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.sel_edit.error'), E);
244 JSAN.use('cat.util');
245 cat.util.spawn_spine_editor(obj.selection_list);
251 JSAN.use('cat.util');
252 cat.util.show_in_opac(obj.selection_list);
255 'sel_transit_abort' : [
259 JSAN.use('circ.util');
260 circ.util.abort_transits(obj.selection_list);
261 for (var i = 0; i < obj.selection_list.length; i++) {
262 var barcode = obj.selection_list[i].barcode;
263 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
265 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
271 JSAN.use('circ.util');
272 circ.util.show_last_few_circs(obj.selection_list);
275 'sel_copy_details' : [
278 JSAN.use('circ.util');
279 for (var i = 0; i < obj.selection_list.length; i++) {
280 circ.util.show_copy_details( obj.selection_list[i].copy_id );
288 JSAN.use('circ.util');
289 for (var i = 0; i < obj.selection_list.length; i++) {
290 var test = obj.selection_list[i].renewable;
291 var barcode = obj.selection_list[i].barcode;
293 circ.util.renew_via_barcode( { 'barcode' : barcode } );
294 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
296 alert(document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.sel_renew.not_circulating', [barcode]));
299 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
303 'sel_mark_items_damaged' : [
307 JSAN.use('cat.util'); JSAN.use('util.functional');
308 cat.util.mark_item_damaged( util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } ) );
309 for (var i = 0; i < obj.selection_list.length; i++) {
310 var barcode = obj.selection_list[i].barcode;
311 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
313 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
316 'sel_mark_items_missing' : [
320 JSAN.use('cat.util'); JSAN.use('util.functional');
321 cat.util.mark_item_missing( util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } ) );
322 for (var i = 0; i < obj.selection_list.length; i++) {
323 var barcode = obj.selection_list[i].barcode;
324 funcs.push( function(a) { return function() { obj.copy_status( a, true ); }; }(barcode) );
326 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
332 JSAN.use('cat.util');
333 cat.util.add_copies_to_bucket(obj.selection_list);
336 'copy_status_barcode_entry_textbox' : [
339 if (ev.keyCode && ev.keyCode == 13) {
346 function() { alert(document.getElementById('circStrings').getString('staff.circ.unimplemented')); }
348 'cmd_copy_status_submit_barcode' : [
354 'cmd_copy_status_upload_file' : [
357 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
358 JSAN.use('util.file');
359 var f = new util.file('');
360 var content = f.import_file( { 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.upload_file.title'), 'not_json' : true } );
361 if (!content) { return; }
362 var barcodes = content.split(/[,\s]+/);
363 if (barcodes.length > 0) {
364 JSAN.use('util.exec'); var exec = new util.exec();
366 for (var i = 0; i < barcodes.length; i++) {
375 funcs.push( function() { alert(document.getElementById('circStrings').getString('staff.circ.copy_status.upload_file.complete')); } );
378 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.upload_file.no_barcodes'));
383 'cmd_copy_status_print' : [
388 'template' : 'item_status'
392 obj.error.standard_unexpected_error_alert('print',E);
401 JSAN.use('util.functional');
402 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
403 if (list.length == 0) { return; }
405 var copy_shortcut = {}; var map_acn = {};
407 for (var i = 0; i < list.length; i++) {
408 var volume_id = list[i];
409 if (volume_id == -1) {
410 continue; /* ignore magic pre-cat volume */
412 if (! map_acn[volume_id]) {
413 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
415 var record_id = map_acn[ volume_id ].record();
416 var ou_id = map_acn[ volume_id ].owning_lib();
417 var label = map_acn[ volume_id ].label();
418 if (!copy_shortcut[record_id]) {
419 copy_shortcut[record_id] = {};
421 if (!copy_shortcut[record_id][ou_id]) {
422 copy_shortcut[record_id][ou_id] = {};
424 copy_shortcut[record_id][ou_id][ label ] = volume_id;
428 for (var r in copy_shortcut) {
430 /* quick fix */ /* what was this fixing? */
431 list = []; for (var i in copy_shortcut[r]) { list.push( i ); }
435 edit = obj.network.request(
436 api.PERM_MULTI_ORG_CHECK.app,
437 api.PERM_MULTI_ORG_CHECK.method,
440 obj.data.list.au[0].id(),
444 ).length == 0 ? 1 : 0;
446 obj.error.sdump('D_ERROR','batch permission check: ' + E);
450 return; // no read-only view for this interface
453 var title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.add_items.title', [r]);
455 JSAN.use('util.window'); var win = new util.window();
457 window.xulG.url_prefix(urls.XUL_VOLUME_COPY_CREATOR),
458 //+'?doc_id=' + window.escape(r)
459 //+'&ou_ids=' + window.escape( js2JSON(list) )
460 //+'©_shortcut=' + window.escape( js2JSON(copy_shortcut[r]) ),
463 { 'doc_id' : r, 'ou_ids' : list, 'copy_shortcut' : copy_shortcut[r] }
468 obj.error.standard_unexpected_error_alert('copy status -> add copies',E);
473 'cmd_delete_items' : [
478 JSAN.use('util.functional');
480 var list = util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } );
482 var copies = util.functional.map_list(
485 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
489 for (var i = 0; i < copies.length; i++) {
490 copies[i].ischanged(1);
491 copies[i].isdeleted(1);
494 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(", ")]))) {
498 var robj = obj.network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE',[ ses(), copies, true]);
499 var robj = obj.network.simple_request(
500 'FM_ACP_FLESHED_BATCH_UPDATE',
501 [ ses(), copies, true ],
504 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.del_items.title'),
505 'overridable_events' : [
506 1208 /* TITLE_LAST_COPY */,
507 1227 /* COPY_DELETE_WARNING */
512 if (typeof robj.ilsevent != 'undefined') {
513 switch(Number(robj.ilsevent)) {
514 case 1208 /* TITLE_LAST_COPY */:
515 case 1227 /* COPY_DELETE_WARNING */:
518 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.del_items.success.error'), robj);
521 } else { alert(document.getElementById('circStrings').getString('staff.circ.copy_status.del_items.success')); }
524 obj.error.standard_unexpected_error_alert('copy status -> delete items',E);
528 'cmd_transfer_items' : [
532 obj.data.stash_retrieve();
533 if (!obj.data.marked_volume) {
534 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_items.mark_destination'));
538 JSAN.use('util.functional');
540 var list = util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } );
542 var volume = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_volume ]);
544 JSAN.use('cat.util'); cat.util.transfer_copies( {
546 'docid' : volume.record(),
547 'volume_label' : volume.label(),
548 'owning_lib' : volume.owning_lib()
552 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_items.problem'), E);
557 'cmd_add_volumes' : [
561 JSAN.use('util.functional');
562 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
563 if (list.length == 0) { return; }
565 var aou_hash = {}; var map_acn = {};
567 for (var i = 0; i < list.length; i++) {
568 var volume_id = list[i];
569 if (volume_id == -1) {
570 continue; /* ignore magic pre-cat volume */
572 if (! map_acn[volume_id]) {
573 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
575 var record_id = map_acn[ volume_id ].record();
576 var ou_id = map_acn[ volume_id ].owning_lib();
577 var label = map_acn[ volume_id ].label();
578 if (!aou_hash[record_id]) aou_hash[record_id] = {};
579 aou_hash[record_id][ou_id] = 1;
583 for (var r in aou_hash) {
585 list = []; for (var org in aou_hash[r]) list.push(org);
589 edit = obj.network.request(
590 api.PERM_MULTI_ORG_CHECK.app,
591 api.PERM_MULTI_ORG_CHECK.method,
594 obj.data.list.au[0].id(),
596 [ 'CREATE_VOLUME', 'CREATE_COPY' ]
598 ).length == 0 ? 1 : 0;
600 obj.error.sdump('D_ERROR','batch permission check: ' + E);
604 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.add_volumes.perm_failure'));
605 return; // no read-only view for this interface
608 var title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.add_volumes.title', [r]);
610 JSAN.use('util.window'); var win = new util.window();
612 window.xulG.url_prefix(urls.XUL_VOLUME_COPY_CREATOR),
613 //+'?doc_id=' + window.escape(r)
614 //+'&ou_ids=' + window.escape( js2JSON(list) ),
617 { 'doc_id' : r, 'ou_ids' : list }
623 obj.error.standard_unexpected_error_alert('copy status -> add volumes',E);
628 'cmd_edit_volumes' : [
632 JSAN.use('util.functional');
633 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
634 if (list.length == 0) { return; }
636 var volume_hash = {}; var map_acn = {};
638 for (var i = 0; i < list.length; i++) {
639 var volume_id = list[i];
640 if (volume_id == -1) {
641 continue; /* ignore magic pre-cat volume */
643 if (! map_acn[volume_id]) {
644 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
645 map_acn[ volume_id ].copies( [] );
647 var record_id = map_acn[ volume_id ].record();
648 if (!volume_hash[record_id]) {
649 volume_hash[record_id] = {};
651 volume_hash[record_id][volume_id] = 1;
654 for (var rec in volume_hash) {
657 for (var v in volume_hash[rec]) {
658 list.push( map_acn[v] );
663 edit = obj.network.request(
664 api.PERM_MULTI_ORG_CHECK.app,
665 api.PERM_MULTI_ORG_CHECK.method,
668 obj.data.list.au[0].id(),
669 util.functional.map_list(
672 return o.owning_lib();
677 ).length == 0 ? 1 : 0;
679 obj.error.sdump('D_ERROR','batch permission check: ' + E);
683 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.edit_volumes.perm_failure'));
684 return; // no read-only view for this interface
688 if (list.length == 1) {
689 title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.edit_volume.title', [rec]);
691 title = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.edit_volumes.title', [rec]);
694 JSAN.use('util.window'); var win = new util.window();
695 //obj.data.volumes_temp = js2JSON( list );
696 //obj.data.stash('volumes_temp');
697 var my_xulG = win.open(
698 window.xulG.url_prefix(urls.XUL_VOLUME_EDITOR),
700 'chrome,modal,resizable',
701 { 'volumes' : JSON2js(js2JSON(list)) }
704 /* FIXME -- need to unique the temp space, and not rely on modalness of window */
705 //obj.data.stash_retrieve();
706 //var volumes = JSON2js( obj.data.volumes_temp );
707 if (typeof my_xulG.update_these_volumes == 'undefined') { return; }
708 var volumes = my_xulG.volumes;
709 if (!volumes) { return; }
711 volumes = util.functional.filter_list(
714 return o.ischanged() == '1';
718 volumes = util.functional.map_list(
721 o.record( rec ); // staff client 2 did not do this. Does it matter?
726 if (volumes.length == 0) { return; }
729 var r = obj.network.request(
730 api.FM_ACN_TREE_UPDATE.app,
731 api.FM_ACN_TREE_UPDATE.method,
732 [ ses(), volumes, false ]
734 if (typeof r.ilsevent != 'undefined') {
735 switch(Number(r.ilsevent)) {
736 case 1705 /* VOLUME_LABEL_EXISTS */ :
737 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.edit_volumes.duplicate'));
742 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.edit_volumes.success'));
745 obj.error.standard_unexpected_error_alert('volume update error: ',E);
750 obj.error.standard_unexpected_error_alert('Copy Status -> Volume Edit',E);
755 'cmd_delete_volumes' : [
759 JSAN.use('util.functional');
760 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
761 if (list.length == 0) { return; }
765 for (var i = 0; i < list.length; i++) {
766 var volume_id = list[i];
767 if (volume_id == -1) {
768 continue; /* ignore magic pre-cat volume */
770 if (! map_acn[volume_id]) {
771 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
776 for (var v in map_acn) {
777 list.push( map_acn[v] );
781 if (list.length == 1) {
782 confirm_prompt = document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.singular');
784 confirm_prompt = document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.plural');
787 var r = obj.error.yns_alert(
789 document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.title'),
790 document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.delete'),
791 document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.cancel'),
793 document.getElementById('circStrings').getString('staff.circ.confirm')
797 for (var i = 0; i < list.length; i++) {
798 list[i].isdeleted('1');
800 var robj = obj.network.simple_request(
801 'FM_ACN_TREE_UPDATE',
802 [ ses(), list, true ],
805 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.override'),
806 'overridable_events' : [
810 if (robj == null) throw(robj);
811 if (typeof robj.ilsevent != 'undefined') {
812 if (robj.ilsevent == 1206 /* VOLUME_NOT_EMPTY */) {
813 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.delete_copies'));
816 if (robj.ilsevent != 0) { throw(robj); }
818 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.delete_volumes.success'));
821 obj.error.standard_unexpected_error_alert('copy status -> delete volumes',E);
827 'cmd_mark_volume' : [
831 JSAN.use('util.functional');
832 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
834 if (list.length == 1) {
835 obj.data.marked_volume = list[0];
836 obj.data.stash('marked_volume');
837 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.mark_volume.status'));
840 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_volume.prompt'),
841 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_volume.title'),
842 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
845 document.getElementById('circStrings').getString('staff.circ.confirm')
849 obj.error.standard_unexpected_error_alert('copy status -> mark volume',E);
853 'cmd_mark_library' : [
857 JSAN.use('util.functional');
858 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
860 if (list.length == 1) {
861 var v = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[list[0]]);
862 var owning_lib = v.owning_lib();
863 if (typeof owning_lib == 'object') {
864 owning_lib = owning_lib.id();
867 obj.data.marked_library = { 'lib' : owning_lib, 'docid' : v.record() };
868 obj.data.stash('marked_library');
869 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.mark_library'));
872 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_library.limit_one'),
873 document.getElementById('circStrings').getString('staff.circ.copy_status.mark_library.limit_one.title'),
874 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
877 document.getElementById('circStrings').getString('staff.circ.confirm')
881 obj.error.standard_unexpected_error_alert('copy status -> mark library',E);
885 'cmd_transfer_volume' : [
889 obj.data.stash_retrieve();
890 if (!obj.data.marked_library) {
891 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.none'));
895 JSAN.use('util.functional');
897 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
898 if (list.length == 0) { return; }
902 for (var i = 0; i < list.length; i++) {
903 var volume_id = list[i];
904 if (volume_id == -1) {
905 continue; /* ignore magic pre-cat volume */
907 if (! map_acn[volume_id]) {
908 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ volume_id ]);
914 list.push(map_acn[v]);
917 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
918 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto">';
919 xml += '<description>';
921 var vols = util.functional.map_list(list,
927 var volume_list = document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.transfer_volume.confirm',
928 [vols, obj.data.hash.aou[ obj.data.marked_library.lib ].shortname()]);
931 xml += '</description>';
932 xml += '<hbox><button label="';
933 xml += document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.transfer.label');
934 xml += '" name="fancy_submit"/>';
935 xml += '<button label="';
936 xml += document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.cancel.label');
937 xml += '" accesskey="';
938 xml += document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.cancel.accesskey');
939 xml += '" name="fancy_cancel"/></hbox>';
940 xml += '<iframe style="overflow: scroll" flex="1" src="' + urls.XUL_BIB_BRIEF + '?docid=' + obj.data.marked_library.docid + '"/>';
942 JSAN.use('OpenILS.data');
943 //var data = new OpenILS.data(); data.init({'via':'stash'});
944 //data.temp_transfer = xml; data.stash('temp_transfer');
945 JSAN.use('util.window'); var win = new util.window();
946 var fancy_prompt_data = win.open(
947 urls.XUL_FANCY_PROMPT,
948 //+ '?xml_in_stash=temp_transfer'
949 //+ '&title=' + window.escape('Volume Transfer'),
950 'fancy_prompt', 'chrome,resizable,modal,width=500,height=300',
951 { 'xml' : xml, 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.title') }
954 if (fancy_prompt_data.fancy_status == 'incomplete') {
955 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.aborted'));
959 var robj = obj.network.simple_request(
961 [ ses(), { 'docid' : obj.data.marked_library.docid, 'lib' : obj.data.marked_library.lib, 'volumes' : util.functional.map_list( list, function(o) { return o.id(); }) } ],
964 'title' : document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.override_failure'),
965 'overridable_events' : [
966 1208 /* TITLE_LAST_COPY */,
967 1219 /* COPY_REMOTE_CIRC_LIB */
972 if (typeof robj.ilsevent != 'undefined') {
973 if (robj.ilsevent == 1221 /* ORG_CANNOT_HAVE_VOLS */) {
974 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.cannot_have_vols'));
979 alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.success'));
983 obj.error.standard_unexpected_error_alert(document.getElementById('circStrings').getString('staff.circ.copy_status.transfer_volume.error'),E);
991 this.controller.render();
992 this.controller.view.copy_status_barcode_entry_textbox.focus();
994 JSAN.use('util.browser');
995 obj.browser = new util.browser();
998 'url' : 'alternate_copy_summary.xul',
1000 'alt_print' : false,
1001 'browser_id' : 'copy_status_frame',
1002 'passthru_content_params' : xulG,
1008 'test_barcode' : function(bc) {
1010 var good = util.barcode.check(bc);
1011 var x = document.getElementById('strict_barcode');
1012 if (x && x.checked != true) { return true; }
1016 if ( 1 == obj.error.yns_alert(
1017 document.getElementById('circStrings').getFormattedString('staff.circ.check_digit.bad', [bc]),
1018 document.getElementById('circStrings').getString('staff.circ.barcode.bad'),
1019 document.getElementById('circStrings').getString('staff.circ.cancel'),
1020 document.getElementById('circStrings').getString('staff.circ.barcode.accept'),
1022 document.getElementById('circStrings').getString('staff.circ.confirm'),
1023 '/xul/server/skin/media/images/bad_barcode.png'
1032 'copy_status' : function(barcode,refresh) {
1035 try { document.getElementById('last_scanned').setAttribute('value',''); } catch(E) {}
1037 barcode = obj.controller.view.copy_status_barcode_entry_textbox.value;
1039 if (!barcode) { return; }
1041 if ( obj.test_barcode(barcode) ) { /* good */ } else { /* bad */ return; }
1043 JSAN.use('circ.util');
1044 function handle_req(req) {
1046 var details = req.getResultObject();
1047 if (details == null) {
1048 throw(document.getElementById('circStrings').getString('staff.circ.copy_status.status.null_result'));
1049 } else if (details.ilsevent) {
1050 switch(Number(details.ilsevent)) {
1052 obj.error.standard_network_error_alert();
1053 obj.controller.view.copy_status_barcode_entry_textbox.select();
1054 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1057 case 1502 /* ASSET_COPY_NOT_FOUND */ :
1058 try { document.getElementById('last_scanned').setAttribute('value', document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode])); } catch(E) {}
1059 obj.error.yns_alert(
1060 document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode]),
1061 document.getElementById('circStrings').getString('staff.circ.copy_status.status.not_cataloged'),
1062 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
1065 document.getElementById('circStrings').getString('staff.circ.confirm.msg')
1067 obj.controller.view.copy_status_barcode_entry_textbox.select();
1068 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1076 var msg = details.copy.barcode() + ' -- ';
1077 if (details.copy.call_number() == -1) {
1078 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.pre_cat') + ' ';
1081 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.hold') + ' ';
1083 if (details.transit) {
1084 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.transit') + ' ';
1086 if (details.circ && ! details.circ.checkin_time()) {
1087 msg += document.getElementById('circStrings').getString('staff.circ.copy_status.status.circ') + ' ';
1089 try { document.getElementById('last_scanned').setAttribute('value',msg); } catch(E) {}
1090 if (document.getElementById('trim_list')) {
1091 var x = document.getElementById('trim_list');
1092 if (x.checked) { obj.list.trim_list = 20; } else { obj.list.trim_list = null; }
1095 'retrieve_id' : js2JSON(
1097 'renewable' : details.circ ? 't' : 'f',
1098 'copy_id' : details.copy.id(),
1099 'acn_id' : details.volume ? details.volume.id() : -1,
1100 'barcode' : barcode,
1101 'doc_id' : details.mvr ? details.mvr.doc_id() : null
1106 'mvr' : details.mvr,
1107 'acp' : details.copy,
1108 'acn' : details.volume,
1109 'atc' : details.transit,
1110 'circ' : details.circ,
1111 'ahr' : details.hold
1117 var nparams = obj.list.append(params);
1118 if (!document.getElementById('trim_list').checked) {
1119 if (typeof obj.list_copyid_map[details.copy.id()] == 'undefined') obj.list_copyid_map[details.copy.id()] =[];
1120 obj.list_copyid_map[details.copy.id()].push(nparams);
1123 if (!document.getElementById('trim_list').checked) {
1124 if (typeof obj.list_copyid_map[details.copy.id()] != 'undefined') {
1125 for (var i = 0; i < obj.list_copyid_map[details.copy.id()].length; i++) {
1126 if (typeof obj.list_copyid_map[details.copy.id()][i] == 'undefined') {
1127 obj.list.append(params);
1129 params.my_node = obj.list_copyid_map[details.copy.id()][i].my_node;
1130 obj.list.refresh_row(params);
1134 obj.list.append(params);
1137 obj.list.append(params);
1141 obj.error.standard_unexpected_error_alert('barcode = ' + barcode,E);
1144 var result = obj.network.simple_request('FM_ACP_DETAILS_VIA_BARCODE.authoritative', [ ses(), barcode ]);
1145 handle_req({'getResultObject':function(){return result;}}); // used to be async
1146 if (result.copy && document.getElementById('deck').selectedIndex == 1) {
1147 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
1148 var f = obj.browser.get_content();
1149 xulG.barcode = result.copy.barcode(); // FIXME: We could pass the already-fetched data, but need to figure out how to manage that and honor Trim List, the whole point of which is to limit memory consumption
1157 obj.controller.view.copy_status_barcode_entry_textbox.value = '';
1158 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1161 obj.error.standard_unexpected_error_alert('barcode = ' + barcode,E);
1162 obj.controller.view.copy_status_barcode_entry_textbox.select();
1163 obj.controller.view.copy_status_barcode_entry_textbox.focus();
1168 'spawn_copy_editor' : function() {
1172 JSAN.use('util.functional');
1174 var list = obj.selection_list;
1176 list = util.functional.map_list(
1183 JSAN.use('cat.util'); cat.util.spawn_copy_editor( { 'copy_ids' : list, 'edit' : 1 } );
1189 dump('exiting circ.copy_status.js\n');