1 dump('entering circ.copy_status.js\n');
3 if (typeof circ == 'undefined') circ = {};
4 circ.copy_status = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
8 JSAN.use('util.barcode');
10 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
13 circ.copy_status.prototype = {
14 'selection_list' : [],
16 'init' : function( params ) {
20 JSAN.use('circ.util');
21 var columns = circ.util.columns(
23 'barcode' : { 'hidden' : false },
24 'title' : { 'hidden' : false },
25 'location' : { 'hidden' : false },
26 'call_number' : { 'hidden' : false },
27 'status' : { 'hidden' : false },
28 'alert_message' : { 'hidden' : false },
29 'due_date' : { 'hidden' : false },
33 'checkin_time', 'checkin_time_full', 'route_to', 'message', 'uses', 'xact_finish',
38 JSAN.use('util.list'); obj.list = new util.list('copy_status_list');
42 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
43 'on_select' : function(ev) {
45 JSAN.use('util.functional');
46 var sel = obj.list.retrieve_selection();
47 obj.selection_list = util.functional.map_list(
49 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
51 obj.error.sdump('D_TRACE','circ/copy_status: selection list = ' + js2JSON(obj.selection_list) );
52 if (obj.selection_list.length == 0) {
53 obj.controller.view.sel_checkin.setAttribute('disabled','true');
54 obj.controller.view.cmd_replace_barcode.setAttribute('disabled','true');
55 obj.controller.view.sel_edit.setAttribute('disabled','true');
56 obj.controller.view.sel_opac.setAttribute('disabled','true');
57 obj.controller.view.sel_bucket.setAttribute('disabled','true');
58 obj.controller.view.sel_copy_details.setAttribute('disabled','true');
59 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','true');
60 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','true');
61 obj.controller.view.sel_patron.setAttribute('disabled','true');
62 obj.controller.view.sel_spine.setAttribute('disabled','true');
63 obj.controller.view.sel_transit_abort.setAttribute('disabled','true');
64 obj.controller.view.sel_clip.setAttribute('disabled','true');
65 obj.controller.view.sel_renew.setAttribute('disabled','true');
66 obj.controller.view.cmd_add_items.setAttribute('disabled','true');
67 obj.controller.view.cmd_delete_items.setAttribute('disabled','true');
68 obj.controller.view.cmd_transfer_items.setAttribute('disabled','true');
69 obj.controller.view.cmd_add_volumes.setAttribute('disabled','true');
70 obj.controller.view.cmd_edit_volumes.setAttribute('disabled','true');
71 obj.controller.view.cmd_delete_volumes.setAttribute('disabled','true');
72 obj.controller.view.cmd_mark_volume.setAttribute('disabled','true');
73 obj.controller.view.cmd_mark_library.setAttribute('disabled','true');
74 obj.controller.view.cmd_transfer_volume.setAttribute('disabled','true');
76 obj.controller.view.sel_checkin.setAttribute('disabled','false');
77 obj.controller.view.cmd_replace_barcode.setAttribute('disabled','false');
78 obj.controller.view.sel_edit.setAttribute('disabled','false');
79 obj.controller.view.sel_opac.setAttribute('disabled','false');
80 obj.controller.view.sel_patron.setAttribute('disabled','false');
81 obj.controller.view.sel_bucket.setAttribute('disabled','false');
82 obj.controller.view.sel_copy_details.setAttribute('disabled','false');
83 obj.controller.view.sel_mark_items_damaged.setAttribute('disabled','false');
84 obj.controller.view.sel_mark_items_missing.setAttribute('disabled','false');
85 obj.controller.view.sel_spine.setAttribute('disabled','false');
86 obj.controller.view.sel_transit_abort.setAttribute('disabled','false');
87 obj.controller.view.sel_clip.setAttribute('disabled','false');
88 obj.controller.view.sel_renew.setAttribute('disabled','false');
89 obj.controller.view.cmd_add_items.setAttribute('disabled','false');
90 obj.controller.view.cmd_delete_items.setAttribute('disabled','false');
91 obj.controller.view.cmd_transfer_items.setAttribute('disabled','false');
92 obj.controller.view.cmd_add_volumes.setAttribute('disabled','false');
93 obj.controller.view.cmd_edit_volumes.setAttribute('disabled','false');
94 obj.controller.view.cmd_delete_volumes.setAttribute('disabled','false');
95 obj.controller.view.cmd_mark_volume.setAttribute('disabled','false');
96 obj.controller.view.cmd_mark_library.setAttribute('disabled','false');
97 obj.controller.view.cmd_transfer_volume.setAttribute('disabled','false');
100 alert('FIXME: ' + E);
106 JSAN.use('util.controller'); obj.controller = new util.controller();
110 'save_columns' : [ [ 'command' ], function() { obj.list.save_columns(); } ],
113 function() { obj.list.clipboard(); }
120 JSAN.use('circ.util');
121 for (var i = 0; i < obj.selection_list.length; i++) {
122 var barcode = obj.selection_list[i].barcode;
123 var checkin = circ.util.checkin_via_barcode( ses(), { 'barcode' : barcode } );
124 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(barcode) );
126 alert('Action complete.');
127 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
129 obj.error.standard_unexpected_error_alert('Checkin did not likely happen.',E);
133 'cmd_replace_barcode' : [
138 JSAN.use('cat.util');
139 for (var i = 0; i < obj.selection_list.length; i++) {
141 var barcode = obj.selection_list[i].barcode;
142 var new_bc = cat.util.replace_barcode( barcode );
143 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(new_bc) );
145 obj.error.standard_unexpected_error_alert('Barcode ' + barcode + ' was not likely replaced.',E);
148 alert('Action complete.');
149 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
151 obj.error.standard_unexpected_error_alert('Barcode replacements did not likely happen.',E);
160 obj.spawn_copy_editor();
161 for (var i = 0; i < obj.selection_list.length; i++) {
162 var barcode = obj.selection_list[i].barcode;
163 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(barcode) );
165 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
167 obj.error.standard_unexpected_error_alert('with copy editor',E);
174 JSAN.use('cat.util');
175 cat.util.spawn_spine_editor(obj.selection_list);
181 JSAN.use('cat.util');
182 cat.util.show_in_opac(obj.selection_list);
185 'sel_transit_abort' : [
189 JSAN.use('circ.util');
190 circ.util.abort_transits(obj.selection_list);
191 for (var i = 0; i < obj.selection_list.length; i++) {
192 var barcode = obj.selection_list[i].barcode;
193 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(barcode) );
195 alert('Action complete.');
196 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
202 JSAN.use('circ.util');
203 circ.util.show_last_few_circs(obj.selection_list);
206 'sel_copy_details' : [
209 JSAN.use('circ.util');
210 for (var i = 0; i < obj.selection_list.length; i++) {
211 circ.util.show_copy_details( obj.selection_list[i].copy_id );
219 JSAN.use('circ.util');
220 for (var i = 0; i < obj.selection_list.length; i++) {
221 var test = obj.selection_list[i].renewable;
222 var barcode = obj.selection_list[i].barcode;
224 circ.util.renew_via_barcode( barcode );
225 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(barcode) );
227 alert('Item with barcode ' + barcode + ' is not circulating.');
230 alert('Action complete.');
231 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
235 'sel_mark_items_damaged' : [
239 JSAN.use('cat.util'); JSAN.use('util.functional');
240 cat.util.mark_item_damaged( util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } ) );
241 for (var i = 0; i < obj.selection_list.length; i++) {
242 var barcode = obj.selection_list[i].barcode;
243 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(barcode) );
245 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
248 'sel_mark_items_missing' : [
252 JSAN.use('cat.util'); JSAN.use('util.functional');
253 cat.util.mark_item_missing( util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } ) );
254 for (var i = 0; i < obj.selection_list.length; i++) {
255 var barcode = obj.selection_list[i].barcode;
256 funcs.push( function(a) { return function() { obj.copy_status( a ); }; }(barcode) );
258 for (var i = 0; i < funcs.length; i++) { funcs[i](); }
264 JSAN.use('cat.util');
265 cat.util.add_copies_to_bucket(obj.selection_list);
268 'copy_status_barcode_entry_textbox' : [
271 if (ev.keyCode && ev.keyCode == 13) {
278 function() { alert('Not Yet Implemented'); }
280 'cmd_copy_status_submit_barcode' : [
286 'cmd_copy_status_print' : [
290 obj.list.on_all_fleshed =
293 dump( js2JSON( obj.list.dump_with_keys() ) + '\n' );
294 obj.data.stash_retrieve();
295 var lib = obj.data.hash.aou[ obj.data.list.au[0].ws_ou() ];
299 'staff' : obj.data.list.au[0],
300 'header' : obj.data.print_list_templates.item_status.header,
301 'line_item' : obj.data.print_list_templates.item_status.line_item,
302 'footer' : obj.data.print_list_templates.item_status.footer,
303 'type' : obj.data.print_list_templates.item_status.type,
304 'list' : obj.list.dump_with_keys(),
306 JSAN.use('util.print'); var print = new util.print();
307 print.tree_list( p );
308 setTimeout(function(){ obj.list.on_all_fleshed = null; },0);
310 obj.error.standard_unexpected_error_alert('print',E);
313 obj.list.full_retrieve();
315 obj.error.standard_unexpected_error_alert('print',E);
319 'cmd_copy_status_export' : [
323 obj.list.on_all_fleshed =
326 dump( obj.list.dump_csv() + '\n' );
327 copy_to_clipboard(obj.list.dump_csv());
328 setTimeout(function(){ obj.list.on_all_fleshed = null; },0);
330 obj.error.standard_unexpected_error_alert('export',E);
333 obj.list.full_retrieve();
335 obj.error.standard_unexpected_error_alert('export',E);
344 JSAN.use('util.functional');
345 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
346 if (list.length == 0) return;
348 var copy_shortcut = {}; var map_acn = {};
350 for (var i = 0; i < list.length; i++) {
351 var volume_id = list[i];
352 if (volume_id == -1) continue; /* ignore magic pre-cat volume */
353 if (! map_acn[volume_id]) {
354 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE',[ volume_id ]);
356 var record_id = map_acn[ volume_id ].record();
357 var ou_id = map_acn[ volume_id ].owning_lib();
358 var label = map_acn[ volume_id ].label();
359 if (!copy_shortcut[record_id]) copy_shortcut[record_id] = {};
360 if (!copy_shortcut[record_id][ou_id]) copy_shortcut[record_id][ou_id] = {};
361 copy_shortcut[record_id][ou_id][ label ] = volume_id;
365 for (var r in copy_shortcut) {
367 /* quick fix */ /* what was this fixing? */
368 list = []; for (var i in copy_shortcut[r]) { list.push( i ); }
372 edit = obj.network.request(
373 api.PERM_MULTI_ORG_CHECK.app,
374 api.PERM_MULTI_ORG_CHECK.method,
377 obj.data.list.au[0].id(),
381 ).length == 0 ? 1 : 0;
383 obj.error.sdump('D_ERROR','batch permission check: ' + E);
386 if (edit==0) return; // no read-only view for this interface
388 var title = 'Add Item for record #' + r;
390 JSAN.use('util.window'); var win = new util.window();
392 window.xulG.url_prefix(urls.XUL_VOLUME_COPY_CREATOR)
393 +'?doc_id=' + window.escape(r)
394 +'&ou_ids=' + window.escape( js2JSON(list) )
395 +'©_shortcut=' + window.escape( js2JSON(copy_shortcut[r]) ),
402 obj.error.standard_unexpected_error_alert('copy status -> add copies',E);
407 'cmd_delete_items' : [
412 JSAN.use('util.functional');
414 var list = util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } );
416 var copies = util.functional.map_list(
419 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
423 for (var i = 0; i < copies.length; i++) {
424 copies[i].ischanged(1);
425 copies[i].isdeleted(1);
428 if (! window.confirm('Are you sure sure you want to delete these items? ' + util.functional.map_list( copies, function(o) { return o.barcode(); }).join(", ")) ) return;
430 var robj = obj.network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE',[ ses(), copies, true]);
431 if (typeof robj.ilsevent != 'undefined') obj.error.standard_unexpected_error_alert('Batch Item Deletion',robj); else { alert('Items Deleted'); }
434 obj.error.standard_unexpected_error_alert('copy status -> delete items',E);
438 'cmd_transfer_items' : [
442 obj.data.stash_retrieve();
443 if (!obj.data.marked_volume) {
444 alert('Please mark a volume as the destination from within holdings maintenance and then try this again.');
448 JSAN.use('util.functional');
450 var list = util.functional.map_list( obj.selection_list, function(o) { return o.copy_id; } );
452 var volume = obj.network.simple_request('FM_ACN_RETRIEVE',[ obj.data.marked_volume ]);
454 JSAN.use('cat.util'); cat.util.transfer_copies( {
456 'docid' : volume.record(),
457 'volume_label' : volume.label(),
458 'owning_lib' : volume.owning_lib(),
462 obj.error.standard_unexpected_error_alert('All copies not likely transferred.',E);
467 'cmd_add_volumes' : [
471 JSAN.use('util.functional');
472 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
473 if (list.length == 0) return;
475 var aou_hash = {}; var map_acn = {};
477 for (var i = 0; i < list.length; i++) {
478 var volume_id = list[i];
479 if (volume_id == -1) continue; /* ignore magic pre-cat volume */
480 if (! map_acn[volume_id]) {
481 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE',[ volume_id ]);
483 var record_id = map_acn[ volume_id ].record();
484 var ou_id = map_acn[ volume_id ].owning_lib();
485 var label = map_acn[ volume_id ].label();
486 if (!aou_hash[record_id]) aou_hash[record_id] = {};
487 aou_hash[record_id][ou_id] = 1;
491 for (var r in aou_hash) {
493 list = []; for (var org in aou_hash[r]) list.push(org);
497 edit = obj.network.request(
498 api.PERM_MULTI_ORG_CHECK.app,
499 api.PERM_MULTI_ORG_CHECK.method,
502 obj.data.list.au[0].id(),
504 [ 'CREATE_VOLUME', 'CREATE_COPY' ]
506 ).length == 0 ? 1 : 0;
508 obj.error.sdump('D_ERROR','batch permission check: ' + E);
512 alert("You don't have permission to add volumes to that library.");
513 return; // no read-only view for this interface
516 var title = 'Add Volume/Item for Record # ' + r;
518 JSAN.use('util.window'); var win = new util.window();
520 window.xulG.url_prefix(urls.XUL_VOLUME_COPY_CREATOR)
521 +'?doc_id=' + window.escape(r)
522 +'&ou_ids=' + window.escape( js2JSON(list) ),
530 obj.error.standard_unexpected_error_alert('copy status -> add volumes',E);
535 'cmd_edit_volumes' : [
539 JSAN.use('util.functional');
540 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
541 if (list.length == 0) return;
543 var volume_hash = {}; var map_acn = {};
545 for (var i = 0; i < list.length; i++) {
546 var volume_id = list[i];
547 if (volume_id == -1) continue; /* ignore magic pre-cat volume */
548 if (! map_acn[volume_id]) {
549 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE',[ volume_id ]);
550 map_acn[ volume_id ].copies( [] );
552 var record_id = map_acn[ volume_id ].record();
553 if (!volume_hash[record_id]) volume_hash[record_id] = {};
554 volume_hash[record_id][volume_id] = 1;
557 for (var rec in volume_hash) {
559 list = []; for (var v in volume_hash[rec]) list.push( map_acn[v] );
563 edit = obj.network.request(
564 api.PERM_MULTI_ORG_CHECK.app,
565 api.PERM_MULTI_ORG_CHECK.method,
568 obj.data.list.au[0].id(),
569 util.functional.map_list(
572 return o.owning_lib();
577 ).length == 0 ? 1 : 0;
579 obj.error.sdump('D_ERROR','batch permission check: ' + E);
583 alert("You don't have permission to edit this volume.");
584 return; // no read-only view for this interface
587 var title = (list.length == 1 ? 'Volume' : 'Volumes') + ' for record # ' + rec;
589 JSAN.use('util.window'); var win = new util.window();
590 obj.data.volumes_temp = js2JSON( list );
591 obj.data.stash('volumes_temp');
593 window.xulG.url_prefix(urls.XUL_VOLUME_EDITOR),
595 'chrome,modal,resizable'
598 /* FIXME -- need to unique the temp space, and not rely on modalness of window */
599 obj.data.stash_retrieve();
600 var volumes = JSON2js( obj.data.volumes_temp );
601 obj.error.sdump('D_CAT','in browse, obj.data.temp =\n' + obj.data.temp);
602 if (volumes=='') return;
604 volumes = util.functional.filter_list(
607 return o.ischanged() == '1';
611 volumes = util.functional.map_list(
614 o.record( rec ); // staff client 2 did not do this. Does it matter?
619 if (volumes.length == 0) return;
622 var r = obj.network.request(
623 api.FM_ACN_TREE_UPDATE.app,
624 api.FM_ACN_TREE_UPDATE.method,
625 [ ses(), volumes, false ]
627 if (typeof r.ilsevent != 'undefined') throw(r);
628 alert('Volumes modified.');
630 obj.error.standard_unexpected_error_alert('volume update error: ',E);
635 obj.error.standard_unexpected_error_alert('Copy Status -> Volume Edit',E);
640 'cmd_delete_volumes' : [
644 JSAN.use('util.functional');
645 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
646 if (list.length == 0) return;
650 for (var i = 0; i < list.length; i++) {
651 var volume_id = list[i];
652 if (volume_id == -1) continue; /* ignore magic pre-cat volume */
653 if (! map_acn[volume_id]) {
654 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE',[ volume_id ]);
658 list = []; for (var v in map_acn) list.push( map_acn[v] );
660 var r = obj.error.yns_alert('Are you sure you would like to delete ' + (list.length != 1 ? 'these ' + list.length + ' volumes' : 'this one volume') + '?', 'Delete Volumes?', 'Delete', 'Cancel', null, 'Check here to confirm this action');
663 for (var i = 0; i < list.length; i++) {
664 list[i].isdeleted('1');
666 var robj = obj.network.simple_request(
667 'FM_ACN_TREE_UPDATE',
668 [ ses(), list, true ],
671 'title' : 'Override Delete Failure?',
672 'overridable_events' : [
676 if (robj == null) throw(robj);
677 if (typeof robj.ilsevent != 'undefined') {
678 if (robj.ilsevent == 1206 /* VOLUME_NOT_EMPTY */) {
679 alert('You must delete all the copies on the volume before you may delete the volume itself.');
682 if (robj.ilsevent != 0) throw(robj);
684 alert('Volumes deleted.');
687 obj.error.standard_unexpected_error_alert('copy status -> delete volumes',E);
693 'cmd_mark_volume' : [
697 JSAN.use('util.functional');
698 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
700 if (list.length == 1) {
701 obj.data.marked_volume = list[0];
702 obj.data.stash('marked_volume');
703 alert('Volume marked as Item Transfer Destination');
705 obj.error.yns_alert('Choose just one Volume to mark as Item Transfer Destination','Limit Selection','OK',null,null,'Check here to confirm this dialog');
708 obj.error.standard_unexpected_error_alert('copy status -> mark volume',E);
712 'cmd_mark_library' : [
716 JSAN.use('util.functional');
717 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
719 if (list.length == 1) {
720 var v = obj.network.simple_request('FM_ACN_RETRIEVE',[list[0]]);
721 var owning_lib = v.owning_lib(); if (typeof owning_lib == 'object') owning_lib = owning_lib.id();
723 obj.data.marked_library = { 'lib' : owning_lib, 'docid' : v.record() };
724 obj.data.stash('marked_library');
725 alert('Library + Record marked as Volume Transfer Destination');
727 obj.error.yns_alert('Choose just one Library to mark as Volume Transfer Destination','Limit Selection','OK',null,null,'Check here to confirm this dialog');
730 obj.error.standard_unexpected_error_alert('copy status -> mark library',E);
734 'cmd_transfer_volume' : [
738 obj.data.stash_retrieve();
739 if (!obj.data.marked_library) {
740 alert('Please mark a library as the destination from within holdings maintenance and then try this again.');
744 JSAN.use('util.functional');
746 var list = util.functional.map_list( obj.selection_list, function(o) { return o.acn_id; } );
747 if (list.length == 0) return;
751 for (var i = 0; i < list.length; i++) {
752 var volume_id = list[i];
753 if (volume_id == -1) continue; /* ignore magic pre-cat volume */
754 if (! map_acn[volume_id]) {
755 map_acn[ volume_id ] = obj.network.simple_request('FM_ACN_RETRIEVE',[ volume_id ]);
759 list = []; for (v in map_acn) list.push(map_acn[v]);
761 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
762 var xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" style="overflow: auto">';
763 xml += '<description>Transfer volumes ';
765 xml += util.functional.map_list(
772 xml += ' to library ' + obj.data.hash.aou[ obj.data.marked_library.lib ].shortname();
773 xml += ' on the following record?</description>';
774 xml += '<hbox><button label="Transfer" name="fancy_submit"/>';
775 xml += '<button label="Cancel" accesskey="C" name="fancy_cancel"/></hbox>';
776 xml += '<iframe style="overflow: scroll" flex="1" src="' + urls.XUL_BIB_BRIEF + '?docid=' + obj.data.marked_library.docid + '"/>';
778 JSAN.use('OpenILS.data');
779 var data = new OpenILS.data(); data.init({'via':'stash'});
780 data.temp_transfer = xml; data.stash('temp_transfer');
782 urls.XUL_FANCY_PROMPT
783 + '?xml_in_stash=temp_transfer'
784 + '&title=' + window.escape('Volume Transfer'),
785 'fancy_prompt', 'chrome,resizable,modal,width=500,height=300'
788 data.init({'via':'stash'});
789 if (data.fancy_prompt_data == '') { alert('Transfer Aborted'); return; }
791 var robj = obj.network.simple_request(
793 [ ses(), { 'docid' : obj.data.marked_library.docid, 'lib' : obj.data.marked_library.lib, 'volumes' : util.functional.map_list( list, function(o) { return o.id(); }) } ],
796 'title' : 'Override Volume Transfer Failure?',
797 'overridable_events' : [
798 1208 /* TITLE_LAST_COPY */,
799 1219 /* COPY_REMOTE_CIRC_LIB */,
804 if (typeof robj.ilsevent != 'undefined') {
805 if (robj.ilsevent == 1221 /* ORG_CANNOT_HAVE_VOLS */) {
806 alert('That destination cannot have volumes.');
811 alert('Volumes transferred.');
815 obj.error.standard_unexpected_error_alert('All volumes not likely transferred.',E);
823 this.controller.render();
824 this.controller.view.copy_status_barcode_entry_textbox.focus();
828 'test_barcode' : function(bc) {
830 var good = util.barcode.check(bc);
831 var x = document.getElementById('strict_barcode');
832 if (x && x.checked != true) return true;
836 if ( 1 == obj.error.yns_alert(
837 'Bad checkdigit; possible mis-scan. Use this barcode ("' + bc + '") anyway?',
842 'Check here to confirm this action',
843 '/xul/server/skin/media/images/bad_barcode.png'
852 'copy_status' : function(barcode) {
855 try { document.getElementById('last_scanned').setAttribute('value',''); } catch(E) {}
856 if (!barcode) barcode = obj.controller.view.copy_status_barcode_entry_textbox.value;
857 if (!barcode) return;
859 if ( obj.test_barcode(barcode) ) { /* good */ } else { /* bad */ return; }
861 JSAN.use('circ.util');
862 var copy = obj.network.simple_request( 'FM_ACP_RETRIEVE_VIA_BARCODE', [ barcode ]);
864 throw('Something weird happened. null result');
865 } else if (copy.ilsevent) {
866 switch(copy.ilsevent) {
868 obj.error.standard_network_error_alert();
869 obj.controller.view.copy_status_barcode_entry_textbox.select();
870 obj.controller.view.copy_status_barcode_entry_textbox.focus();
872 case 1502 /* ASSET_COPY_NOT_FOUND */ :
873 try { document.getElementById('last_scanned').setAttribute('value',barcode + ' was either mis-scanned or is not cataloged.'); } catch(E) {}
874 obj.error.yns_alert(barcode + ' was either mis-scanned or is not cataloged.','Not Cataloged','OK',null,null,'Check here to confirm this message');
875 obj.controller.view.copy_status_barcode_entry_textbox.select();
876 obj.controller.view.copy_status_barcode_entry_textbox.focus();
883 obj.network.simple_request('FM_ACP_DETAILS', [ ses(), copy.id() ], function(req) {
885 var details = req.getResultObject();
886 var msg = copy.barcode() + ' -- ';
887 if (copy.call_number() == -1) msg += 'Item is a Pre-Cat. ';
888 if (details.hold) msg += 'Item is captured for a Hold. ';
889 if (details.transit) msg += 'Item is in Transit. ';
890 if (details.circ && ! details.circ.checkin_time()) msg += 'Item is circulating. ';
891 try { document.getElementById('last_scanned').setAttribute('value',msg); } catch(E) {}
896 var my_mvr = obj.network.simple_request('MODS_SLIM_RECORD_RETRIEVE_VIA_COPY', [ copy.id() ]);
897 if (document.getElementById('trim_list')) {
898 var x = document.getElementById('trim_list');
899 if (x.checked) { obj.list.trim_list = 20; } else { obj.list.trim_list = null; }
903 'retrieve_id' : js2JSON( { 'renewable' : copy.circulations() ? 't' : 'f', 'copy_id' : copy.id(), 'acn_id' : (typeof copy.call_number() == 'object' ? copy.call_number().id() : copy.call_number()), 'barcode' : barcode, 'doc_id' : (typeof my_mvr.ilsevent == 'undefined' ? my_mvr.doc_id() : null ) } ),
913 obj.controller.view.copy_status_barcode_entry_textbox.value = '';
914 obj.controller.view.copy_status_barcode_entry_textbox.focus();
917 obj.error.standard_unexpected_error_alert('',E);
918 obj.controller.view.copy_status_barcode_entry_textbox.select();
919 obj.controller.view.copy_status_barcode_entry_textbox.focus();
924 'spawn_copy_editor' : function() {
926 /* FIXME - a lot of redundant calls here */
930 JSAN.use('util.widgets'); JSAN.use('util.functional');
932 var list = obj.selection_list;
934 list = util.functional.map_list(
941 var copies = util.functional.map_list(
944 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
950 edit = obj.network.request(
951 api.PERM_MULTI_ORG_CHECK.app,
952 api.PERM_MULTI_ORG_CHECK.method,
955 obj.data.list.au[0].id(),
956 util.functional.map_list(
959 return o.call_number() == -1 ? o.circ_lib() : obj.network.simple_request('FM_ACN_RETRIEVE',[o.call_number()]).owning_lib();
962 copies.length == 1 ? [ 'UPDATE_COPY' ] : [ 'UPDATE_COPY', 'UPDATE_BATCH_COPY' ]
964 ).length == 0 ? 1 : 0;
966 obj.error.sdump('D_ERROR','batch permission check: ' + E);
969 JSAN.use('cat.util'); cat.util.spawn_copy_editor(list,edit);
975 dump('exiting circ.copy_status.js\n');