2 dump('entering cat.copy_buckets.js\n');
4 if (typeof cat == 'undefined') cat = {};
5 cat.copy_buckets = function (params) {
7 JSAN.use('util.error'); this.error = new util.error();
8 JSAN.use('util.network'); this.network = new util.network();
10 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
13 cat.copy_buckets.prototype = {
14 'selection_list1' : [],
15 'selection_list2' : [],
16 'bucket_id_name_map' : {},
19 'render_pending_copies' : function() {
22 for (var i = 0; i < obj.copy_ids.length; i++) {
23 var item = obj.prep_item_for_list( obj.copy_ids[i] );
24 if (item) obj.list1.append( item );
28 'init' : function( params ) {
32 obj.copy_ids = params['copy_ids'] || [];
34 JSAN.use('circ.util');
35 var columns = circ.util.columns(
37 'barcode' : { 'hidden' : false },
38 'title' : { 'hidden' : false },
39 'location' : { 'hidden' : false },
40 'call_number' : { 'hidden' : false },
41 'status' : { 'hidden' : false },
42 'deleted' : { 'hidden' : false },
46 JSAN.use('util.list');
48 function retrieve_row(params) {
51 function handle_details(blob_req) {
53 var blob = blob_req.getResultObject();
54 if (typeof blob.ilsevent != 'undefined') throw(blob);
55 row.my.acp = blob.copy;
56 row.my.mvr = blob.mvr;
57 row.my.acn = blob.volume;
58 row.my.ahr = blob.hold;
59 row.my.circ = blob.circ;
60 params.row_node.setAttribute('retrieve_id', js2JSON( [ blob.copy.id(), blob.copy.barcode(), row.my.bucket_item_id ] ));
61 if (typeof params.on_retrieve == 'function') { params.on_retrieve(row); }
64 obj.error.standard_unexpected_error_alert($('catStrings').getFormattedString('staff.cat.copy_buckets.retrieve_row.error', [row.my.acp_id]), E);
67 if (obj.copy_hash[ row.my.copy_id ]) {
68 handle_details( { 'getResultObject' : function() { var copy_obj = obj.copy_hash[ row.my.copy_id ]; delete obj.copy_hash[ row.my.copy_id ]; return copy_obj; } } );
70 obj.network.simple_request( 'FM_ACP_DETAILS', [ ses(), row.my.copy_id ], handle_details );
73 obj.error.sdump('D_ERROR','retrieve_row: ' + E );
78 obj.list1 = new util.list('pending_copies_list');
82 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
83 'retrieve_row' : retrieve_row,
84 'on_select' : function(ev) {
86 JSAN.use('util.functional');
87 var sel = obj.list1.retrieve_selection();
88 obj.selection_list1 = util.functional.map_list(
90 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
92 obj.error.sdump('D_TRACE','circ/copy_buckets: selection list 1 = ' + js2JSON(obj.selection_list1) );
93 if (obj.selection_list1.length == 0) {
94 obj.controller.view.copy_buckets_sel_add.disabled = true;
96 obj.controller.view.copy_buckets_sel_add.disabled = false;
106 obj.render_pending_copies();
108 obj.list2 = new util.list('copies_in_bucket_list');
112 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
113 'retrieve_row' : retrieve_row,
114 'on_select' : function(ev) {
116 JSAN.use('util.functional');
117 var sel = obj.list2.retrieve_selection();
118 obj.selection_list2 = util.functional.map_list(
120 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
122 obj.error.sdump('D_TRACE','circ/copy_buckets: selection list 2 = ' + js2JSON(obj.selection_list2) );
123 if (obj.selection_list2.length == 0) {
124 obj.controller.view.copy_buckets_delete_item.disabled = true;
125 obj.controller.view.copy_buckets_delete_item.setAttribute('disabled','true');
126 obj.controller.view.copy_buckets_export.disabled = true;
127 obj.controller.view.copy_buckets_export.setAttribute('disabled','true');
129 obj.controller.view.copy_buckets_delete_item.disabled = false;
130 obj.controller.view.copy_buckets_delete_item.setAttribute('disabled','false');
131 obj.controller.view.copy_buckets_export.disabled = false;
132 obj.controller.view.copy_buckets_export.setAttribute('disabled','false');
135 alert('FIXME: ' + E);
141 JSAN.use('util.controller'); obj.controller = new util.controller();
149 e.appendChild( obj.list1.render_list_actions() );
150 obj.list1.set_list_actions(
152 'on_complete' : function() { }
162 e.appendChild( obj.list2.render_list_actions() );
163 obj.list2.set_list_actions(
165 'on_complete' : function() { }
171 'copy_bucket_barcode_entry_textbox' : [
174 if (ev.keyCode && ev.keyCode == 13) {
179 'cmd_copy_bucket_submit_barcode' : [
185 'copy_buckets_menulist_placeholder' : [
189 JSAN.use('util.widgets'); JSAN.use('util.functional');
191 [$('catStrings').getString('staff.cat.copy_buckets.menulist.render.choose_bucket'),''],
192 [$('catStrings').getString('staff.cat.copy_buckets.menulist.render.retrieve_bucket'),-1]
194 util.functional.map_list(
195 obj.network.simple_request(
196 'BUCKET_RETRIEVE_VIA_USER',
197 [ ses(), obj.data.list.au[0].id() ]
200 obj.bucket_id_name_map[ o.id() ] = o.name();
201 return [ o.name(), o.id() ];
205 if (a[0] < b[0]) return -1;
206 if (a[0] > b[0]) return 1;
211 obj.error.sdump('D_TRACE','items = ' + js2JSON(items));
212 util.widgets.remove_children( e );
213 var ml = util.widgets.make_menulist(
217 ml.setAttribute('id','bucket_menulist');
218 ml.setAttribute('accesskey','');
220 function change_bucket(ev) {
221 var bucket_id = ev.target.value;
222 if (bucket_id < 0 ) {
223 bucket_id = window.prompt($('catStrings').getString('staff.cat.copy_buckets.menulist.change_bucket.prompt'));
224 ev.target.value = bucket_id;
225 ev.target.setAttribute('value',bucket_id);
227 if (!bucket_id) return;
228 var bucket = obj.network.simple_request(
230 [ ses(), 'copy', bucket_id ]
232 if (typeof bucket.ilsevent != 'undefined') {
233 if (bucket.ilsevent == 1506 /* CONTAINER_NOT_FOUND */) {
234 alert($('catStrings').getFormattedString('staff.cat.copy_buckets.menulist.change_bucket.undefined', [bucket_id]));
236 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.menulist.change_bucket.error'),bucket);
241 var x = document.getElementById('info_box');
242 x.setAttribute('hidden','false');
243 x = document.getElementById('bucket_number');
244 x.setAttribute('value',bucket.id());
245 x = document.getElementById('bucket_name');
246 x.setAttribute('value',bucket.name());
247 x = document.getElementById('bucket_owner');
248 var s = bucket.owner(); JSAN.use('patron.util');
249 if (s && typeof s != "object") s = patron.util.retrieve_fleshed_au_via_id(ses(),s);
250 x.setAttribute('value',s.card().barcode() + " @ " + obj.data.hash.aou[ s.home_ou() ].shortname());
255 var items = bucket.items() || [];
257 for (var i = 0; i < items.length; i++) {
258 var item = obj.prep_item_for_list(
259 items[i].target_copy(),
262 if (item) obj.list2.append( item );
266 ml.addEventListener( 'change_bucket', change_bucket , false);
267 ml.addEventListener( 'command', function() {
268 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
270 obj.controller.view.bucket_menulist = ml;
271 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
272 document.getElementById('refresh').addEventListener( 'command', function() {
273 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
279 'copy_buckets_add' : [
283 var bucket_id = obj.controller.view.bucket_menulist.value;
284 if (!bucket_id) return;
285 for (var i = 0; i < obj.copy_ids.length; i++) {
286 var bucket_item = new ccbi();
287 bucket_item.isnew('1');
288 bucket_item.bucket(bucket_id);
289 bucket_item.target_copy( obj.copy_ids[i] );
291 var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
292 [ ses(), 'copy', bucket_item ]);
294 if (typeof robj == 'object') throw robj;
296 var item = obj.prep_item_for_list( obj.copy_ids[i], robj );
299 obj.list2.append( item );
301 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_add.error'), E);
309 'copy_buckets_sel_add' : [
312 var bucket_id = obj.controller.view.bucket_menulist.value;
313 if (!bucket_id) return;
314 for (var i = 0; i < obj.selection_list1.length; i++) {
315 var acp_id = obj.selection_list1[i][0];
316 //var barcode = obj.selection_list1[i][1];
317 var bucket_item = new ccbi();
318 bucket_item.isnew('1');
319 bucket_item.bucket(bucket_id);
320 bucket_item.target_copy( acp_id );
322 var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
323 [ ses(), 'copy', bucket_item ]);
325 if (typeof robj == 'object') throw robj;
327 var item = obj.prep_item_for_list( acp_id, robj );
330 obj.list2.append( item );
332 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_sel_add.error'), E);
338 'copy_buckets_export' : [
341 for (var i = 0; i < obj.selection_list2.length; i++) {
342 var acp_id = obj.selection_list2[i][0];
343 //var barcode = obj.selection_list1[i][1];
344 //var bucket_item_id = obj.selection_list1[i][2];
345 var item = obj.prep_item_for_list( acp_id );
347 obj.list1.append( item );
348 obj.copy_ids.push( acp_id );
354 'copy_buckets_delete_item' : [
357 for (var i = 0; i < obj.selection_list2.length; i++) {
359 //var acp_id = obj.selection_list2[i][0];
360 //var barcode = obj.selection_list2[i][1];
361 var bucket_item_id = obj.selection_list2[i][2];
362 var robj = obj.network.simple_request('BUCKET_ITEM_DELETE',
363 [ ses(), 'copy', bucket_item_id ]);
364 if (typeof robj == 'object') throw robj;
366 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_delete_item.error'), E);
371 JSAN.use('util.widgets');
372 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
377 'copy_buckets_delete_bucket' : [
381 var bucket = obj.controller.view.bucket_menulist.value;
382 var name = obj.bucket_id_name_map[ bucket ];
383 var conf = window.confirm($('catStrings').getFormattedString('staff.cat.copy_buckets.copy_buckets_delete_bucket.confirm', [name]));
386 var robj = obj.network.simple_request('BUCKET_DELETE',[ses(),'copy',bucket]);
387 if (typeof robj == 'object') throw robj;
388 obj.controller.render('copy_buckets_menulist_placeholder');
390 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_delete_bucket.error'),E);
394 'copy_buckets_new_bucket' : [
399 $('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.prompt'),
401 $('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.title')
405 var bucket = new ccb();
406 bucket.btype('staff_client');
407 bucket.owner( obj.data.list.au[0].id() );
410 var robj = obj.network.simple_request('BUCKET_CREATE',[ses(),'copy',bucket]);
412 if (typeof robj == 'object') {
413 if (robj.ilsevent == 1710 /* CONTAINER_EXISTS */) {
414 alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.container_exists'));
420 obj.controller.render('copy_buckets_menulist_placeholder');
421 obj.controller.view.bucket_menulist.value = robj;
424 JSAN.use('util.widgets');
425 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
430 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.error'),E);
434 'copy_buckets_batch_copy_edit' : [
439 obj.list2.select_all();
441 JSAN.use('util.widgets'); JSAN.use('util.functional');
443 var list = util.functional.map_list(
444 obj.list2.dump_retrieve_ids(),
446 return JSON2js(o)[0]; // acp_id
450 JSAN.use('cat.util'); cat.util.spawn_copy_editor( { 'copy_ids' : list, 'edit' : 1 } );
452 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
455 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
463 'copy_buckets_batch_copy_delete' : [
468 obj.list2.select_all();
470 JSAN.use('util.widgets'); JSAN.use('util.functional');
472 var list = util.functional.map_list(
473 obj.list2.dump_retrieve_ids(),
475 return JSON2js(o)[0]; // acp_id
479 var copies = util.functional.map_list(
482 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
486 for (var i = 0; i < copies.length; i++) {
487 copies[i].ischanged(1);
488 copies[i].isdeleted(1);
491 var robj = obj.network.simple_request(
492 'FM_ACP_FLESHED_BATCH_UPDATE',
493 [ ses(), copies, true],
496 'title' : document.getElementById('catStrings').getString('staff.cat.copy_buckets.batch.error'),
497 'overridable_events' : [
498 1208 /* TITLE_LAST_COPY */
502 if (typeof robj.ilsevent != 'undefined') {
503 switch(Number(robj.ilsevent)) {
504 case 1208 /* TITLE_LAST_COPY */ :
507 case 1227 /* COPY_DELETE_WARNING */ :
509 for (var i = 0; i < copies.length; i++) { if (copies[i].id()==robj.payload) copy = function(a){return a;}(copies[i]); }
510 /* The copy in question is not in an ideal status for deleting */
511 var err = '*** ' + robj.desc + ' ***\n';
512 /* The barcode for the item is {1} */
513 err += $('catStrings').getFormattedString('cat.barcode_for_item',[ copy.barcode() ]) + '\n';
514 /* The whole batch operation failed */
515 err += $('catStrings').getString('cat.batch_operation_failed') + '\n';
519 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.batch.error'), robj);
523 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
526 JSAN.use('util.widgets');
527 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
536 'cmd_request_items' : [
540 obj.list2.select_all();
542 var copy_ids = util.functional.map_list(
543 obj.list2.dump_retrieve_ids(),
545 return JSON2js(o)[0]; // acp_id
549 JSAN.use('cat.util');
550 cat.util.request_items(copy_ids);
553 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
558 'copy_buckets_transfer_to_volume' : [
562 obj.list2.select_all();
564 obj.data.stash_retrieve();
565 if (!obj.data.marked_volume) {
566 alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.no_volume'));
570 var copy_ids = util.functional.map_list(
571 obj.list2.dump_retrieve_ids(),
573 return JSON2js(o)[0]; // acp_id
577 var volume = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_volume ]);
579 var msg = $('catStrings').getFormattedString(
580 'staff.cat.copy_buckets.copy_buckets_transfer_to_volume.confirm',
582 obj.controller.view.bucket_menulist.getAttribute('label'),
584 obj.data.hash.aou[ volume.owning_lib() ].shortname()
588 JSAN.use('cat.util'); cat.util.transfer_copies( {
589 'copy_ids' : copy_ids,
591 'docid' : volume.record(),
592 'volume_label' : volume.label(),
593 'owning_lib' : volume.owning_lib(),
596 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
599 JSAN.use('util.widgets');
600 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
605 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
611 function() { alert($('commonStrings').getString('common.unimplemented')); }
613 'cmd_copy_buckets_print' : [
616 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
617 obj.list2.on_all_fleshed = function() {
619 dump( js2JSON( obj.list2.dump_with_keys() ) + '\n' );
620 data.stash_retrieve();
621 var lib = data.hash.aou[ data.list.au[0].ws_ou() ];
625 'staff' : data.list.au[0],
626 'header' : data.print_list_templates.item_status.header,
627 'line_item' : data.print_list_templates.item_status.line_item,
628 'footer' : data.print_list_templates.item_status.footer,
629 'type' : data.print_list_templates.item_status.type,
630 'list' : obj.list2.dump_with_keys(),
632 JSAN.use('util.print'); var print = new util.print();
633 print.tree_list( p );
634 setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
639 obj.list2.full_retrieve();
642 'cmd_copy_buckets_export' : [
645 obj.list2.dump_csv_to_clipboard();
648 'cmd_copy_buckets_reprint' : [
653 'cmd_export_to_copy_status' : [
657 obj.list2.on_all_fleshed =
660 obj.list2.select_all();
661 JSAN.use('util.functional');
662 var barcodes = util.functional.map_list(
663 obj.list2.dump_retrieve_ids(),
664 function(o) { return JSON2js(o)[1]; }
666 var url = urls.XUL_COPY_STATUS;
667 xulG.new_tab( url, {}, { 'barcodes' : barcodes });
668 setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
670 obj.error.standard_unexpected_error_alert('export to copy status',E);
673 obj.list2.full_retrieve();
675 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.cmd_export_to_copy_status.error'), E);
682 this.controller.render();
684 if (typeof xulG == 'undefined') {
685 obj.controller.view.cmd_export_to_copy_status.disabled = true;
686 obj.controller.view.cmd_export_to_copy_status.setAttribute('disabled',true);
691 'prep_item_for_list' : function(acp_id,bucket_item_id) {
695 'retrieve_id' : js2JSON( [ acp_id, null, bucket_item_id ] ),
700 'bucket_item_id' : bucket_item_id
706 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.prep_item_for_list.error'), E);
712 'scan_barcode' : function() {
715 var barcode = obj.controller.view.copy_bucket_barcode_entry_textbox.value;
716 var copy_obj = obj.network.simple_request('FM_ACP_DETAILS_VIA_BARCODE',[ses(),barcode]);
717 if (copy_obj == null) {
718 throw(document.getElementById('circStrings').getString('staff.circ.copy_status.status.null_result'));
719 } else if (copy_obj.ilsevent) {
720 switch(Number(copy_obj.ilsevent)) {
722 obj.error.standard_network_error_alert();
723 obj.controller.view.copy_bucket_barcode_entry_textbox.select();
724 obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
727 case 1502 /* ASSET_COPY_NOT_FOUND */ :
729 document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode]),
730 document.getElementById('circStrings').getString('staff.circ.copy_status.status.not_cataloged'),
731 document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
734 document.getElementById('circStrings').getString('staff.circ.confirm.msg')
736 obj.controller.view.copy_bucket_barcode_entry_textbox.select();
737 obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
745 var item = obj.prep_item_for_list( copy_obj.copy.id() );
747 obj.copy_ids.push( copy_obj.copy.id() );
748 obj.copy_hash[ copy_obj.copy.id() ] = copy_obj;
749 obj.list1.append( item );
751 obj.controller.view.copy_bucket_barcode_entry_textbox.value = '';
752 obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
754 obj.controller.view.copy_bucket_barcode_entry_textbox.select();
755 obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
761 dump('exiting cat.copy_buckets.js\n');