1 dump('entering cat.copy_buckets.js\n');
3 if (typeof cat == 'undefined') cat = {};
4 cat.copy_buckets = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
9 JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
12 cat.copy_buckets.prototype = {
13 'selection_list1' : [],
14 'selection_list2' : [],
15 'bucket_id_name_map' : {},
17 'render_pending_copies' : function() {
20 for (var i = 0; i < obj.copy_ids.length; i++) {
21 var item = obj.flesh_item_for_list( obj.copy_ids[i] );
22 if (item) obj.list1.append( item );
26 'init' : function( params ) {
30 obj.copy_ids = params['copy_ids'] || [];
32 JSAN.use('circ.util');
33 var columns = circ.util.columns(
35 'barcode' : { 'hidden' : false },
36 'title' : { 'hidden' : false },
37 'location' : { 'hidden' : false },
38 'call_number' : { 'hidden' : false },
39 'status' : { 'hidden' : false },
40 'deleted' : { 'hidden' : false },
44 JSAN.use('util.list');
46 obj.list1 = new util.list('pending_copies_list');
50 'map_row_to_column' : circ.util.std_map_row_to_column(),
51 'on_select' : function(ev) {
53 JSAN.use('util.functional');
54 var sel = obj.list1.retrieve_selection();
55 obj.selection_list1 = util.functional.map_list(
57 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
59 obj.error.sdump('D_TRACE','circ/copy_buckets: selection list 1 = ' + js2JSON(obj.selection_list1) );
60 if (obj.selection_list1.length == 0) {
61 obj.controller.view.copy_buckets_sel_add.disabled = true;
63 obj.controller.view.copy_buckets_sel_add.disabled = false;
73 obj.render_pending_copies();
75 obj.list2 = new util.list('copies_in_bucket_list');
79 'map_row_to_column' : circ.util.std_map_row_to_column(),
80 'on_select' : function(ev) {
82 JSAN.use('util.functional');
83 var sel = obj.list2.retrieve_selection();
84 document.getElementById('clip_button').disabled = sel.length < 1;
85 obj.selection_list2 = util.functional.map_list(
87 function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
89 obj.error.sdump('D_TRACE','circ/copy_buckets: selection list 2 = ' + js2JSON(obj.selection_list2) );
90 if (obj.selection_list2.length == 0) {
91 obj.controller.view.copy_buckets_delete_item.disabled = true;
92 obj.controller.view.copy_buckets_delete_item.setAttribute('disabled','true');
93 obj.controller.view.copy_buckets_export.disabled = true;
94 obj.controller.view.copy_buckets_export.setAttribute('disabled','true');
96 obj.controller.view.copy_buckets_delete_item.disabled = false;
97 obj.controller.view.copy_buckets_delete_item.setAttribute('disabled','false');
98 obj.controller.view.copy_buckets_export.disabled = false;
99 obj.controller.view.copy_buckets_export.setAttribute('disabled','false');
102 alert('FIXME: ' + E);
108 JSAN.use('util.controller'); obj.controller = new util.controller();
114 function() { obj.list2.clipboard(); }
116 'copy_buckets_menulist_placeholder' : [
120 JSAN.use('util.widgets'); JSAN.use('util.functional');
121 var items = [ ['Choose a bucket...',''] ].concat(
122 util.functional.map_list(
123 obj.network.simple_request(
124 'BUCKET_RETRIEVE_VIA_USER',
125 [ ses(), obj.data.list.au[0].id() ]
128 obj.bucket_id_name_map[ o.id() ] = o.name();
129 return [ o.name(), o.id() ];
133 g.error.sdump('D_TRACE','items = ' + js2JSON(items));
134 util.widgets.remove_children( e );
135 var ml = util.widgets.make_menulist(
139 ml.setAttribute('id','bucket_menulist');
140 ml.setAttribute('accesskey','');
142 function change_bucket(ev) {
143 var bucket_id = ev.target.value;
144 if (!bucket_id) return;
145 var bucket = obj.network.simple_request(
147 [ ses(), 'copy', bucket_id ]
149 var items = bucket.items() || [];
151 for (var i = 0; i < items.length; i++) {
152 var item = obj.flesh_item_for_list(
153 items[i].target_copy(),
156 if (item) obj.list2.append( item );
160 ml.addEventListener( 'change_bucket', change_bucket , false);
161 ml.addEventListener( 'command', function() {
162 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
164 obj.controller.view.bucket_menulist = ml;
165 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
170 'copy_buckets_add' : [
173 var bucket_id = obj.controller.view.bucket_menulist.value;
174 if (!bucket_id) return;
175 for (var i = 0; i < obj.copy_ids.length; i++) {
176 var bucket_item = new ccbi();
177 bucket_item.isnew('1');
178 bucket_item.bucket(bucket_id);
179 bucket_item.target_copy( obj.copy_ids[i] );
181 var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
182 [ ses(), 'copy', bucket_item ]);
184 if (typeof robj == 'object') throw robj;
186 var item = obj.flesh_item_for_list( obj.copy_ids[i], robj );
189 obj.list2.append( item );
191 obj.error.standard_unexpected_error_alert('Addition likely failed.',E);
196 'copy_buckets_sel_add' : [
199 var bucket_id = obj.controller.view.bucket_menulist.value;
200 if (!bucket_id) return;
201 for (var i = 0; i < obj.selection_list1.length; i++) {
202 var acp_id = obj.selection_list1[i][0];
203 //var barcode = obj.selection_list1[i][1];
204 var bucket_item = new ccbi();
205 bucket_item.isnew('1');
206 bucket_item.bucket(bucket_id);
207 bucket_item.target_copy( acp_id );
209 var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
210 [ ses(), 'copy', bucket_item ]);
212 if (typeof robj == 'object') throw robj;
214 var item = obj.flesh_item_for_list( acp_id, robj );
217 obj.list2.append( item );
219 obj.error.standard_unexpected_error_alert('Deletion likely failed.',E);
225 'copy_buckets_export' : [
228 for (var i = 0; i < obj.selection_list2.length; i++) {
229 var acp_id = obj.selection_list2[i][0];
230 //var barcode = obj.selection_list1[i][1];
231 //var bucket_item_id = obj.selection_list1[i][2];
232 var item = obj.flesh_item_for_list( acp_id );
234 obj.list1.append( item );
235 obj.copy_ids.push( acp_id );
241 'copy_buckets_delete_item' : [
244 for (var i = 0; i < obj.selection_list2.length; i++) {
246 //var acp_id = obj.selection_list2[i][0];
247 //var barcode = obj.selection_list2[i][1];
248 var bucket_item_id = obj.selection_list2[i][2];
249 var robj = obj.network.simple_request('BUCKET_ITEM_DELETE',
250 [ ses(), 'copy', bucket_item_id ]);
251 if (typeof robj == 'object') throw robj;
253 obj.error.standard_unexpected_error_alert('Deletion likely failed.',E);
258 JSAN.use('util.widgets');
259 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
264 'copy_buckets_delete_bucket' : [
268 var bucket = obj.controller.view.bucket_menulist.value;
269 var name = obj.bucket_id_name_map[ bucket ];
270 var conf = window.confirm('Delete the bucket named ' + name + '?');
273 var robj = obj.network.simple_request('BUCKET_DELETE',[ses(),'copy',bucket]);
274 if (typeof robj == 'object') throw robj;
275 obj.controller.render('copy_buckets_menulist_placeholder');
277 obj.error.standard_unexpected_error_alert('Bucket deletion likely failed.',E);
281 'copy_buckets_new_bucket' : [
285 var name = prompt('What would you like to name the bucket?','','Bucket Creation');
288 var bucket = new ccb();
289 bucket.btype('staff_client');
290 bucket.owner( obj.data.list.au[0].id() );
293 var robj = obj.network.simple_request('BUCKET_CREATE',[ses(),'copy',bucket]);
295 if (typeof robj == 'object') throw robj;
297 alert('Bucket "' + name + '" created.');
299 obj.controller.render('copy_buckets_menulist_placeholder');
300 obj.controller.view.bucket_menulist.value = robj;
303 JSAN.use('util.widgets');
304 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
309 obj.error.standard_unexpected_error_alert('Bucket creation failed.',E);
313 'copy_buckets_batch_copy_edit' : [
318 obj.list2.select_all();
320 JSAN.use('util.widgets'); JSAN.use('util.functional');
322 var list = util.functional.map_list(
323 obj.list2.dump_retrieve_ids(),
325 return JSON2js(o)[0]; // acp_id
329 var copies = util.functional.map_list(
332 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
338 edit = obj.network.request(
339 api.PERM_MULTI_ORG_CHECK.app,
340 api.PERM_MULTI_ORG_CHECK.method,
343 obj.data.list.au[0].id(),
344 util.functional.map_list(
347 return o.call_number() == -1 ? o.circ_lib() : obj.network.simple_request('FM_ACN_RETRIEVE',[o.call_number()]).owning_lib();
350 copies.length == 1 ? [ 'UPDATE_COPY' ] : [ 'UPDATE_COPY', 'UPDATE_BATCH_COPY' ]
352 ).length == 0 ? 1 : 0;
354 obj.error.sdump('D_ERROR','batch permission check: ' + E);
357 JSAN.use('cat.util'); cat.util.spawn_copy_editor(list,edit);
359 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
362 JSAN.use('util.widgets');
363 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
371 'copy_buckets_batch_copy_delete' : [
376 obj.list2.select_all();
378 JSAN.use('util.widgets'); JSAN.use('util.functional');
380 var list = util.functional.map_list(
381 obj.list2.dump_retrieve_ids(),
383 return JSON2js(o)[0]; // acp_id
387 var copies = util.functional.map_list(
390 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
394 for (var i = 0; i < copies.length; i++) {
395 copies[i].ischanged(1);
396 copies[i].isdeleted(1);
399 var robj = obj.network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE',[ ses(), copies, true]);
400 if (typeof robj.ilsevent != 'undefined') obj.error.standard_unexpected_error_alert('Batch Item Deletion',robj);
402 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
405 JSAN.use('util.widgets');
406 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
415 'copy_buckets_transfer_to_volume' : [
419 obj.list2.select_all();
421 obj.data.stash_retrieve();
422 if (!obj.data.marked_volume) {
423 alert('Please mark a volume as the destination from within the copy browser and then try this again.');
427 var copy_ids = util.functional.map_list(
428 obj.list2.dump_retrieve_ids(),
430 return JSON2js(o)[0]; // acp_id
434 var volume = obj.network.simple_request('FM_ACN_RETRIEVE',[ obj.data.marked_volume ]);
436 var msg = 'Transfer the items in bucket "';
437 msg += obj.controller.view.bucket_menulist.getAttribute('label') + '" ';
438 msg += 'from their original volumes to ';
439 msg += obj.data.hash.aou[ volume.owning_lib() ].shortname() + "'s volume labelled ";
440 msg += '"' + volume.label() + '" on the following record?';
442 JSAN.use('cat.util'); cat.util.transfer_copies( {
443 'copy_ids' : copy_ids,
445 'docid' : volume.record(),
446 'volume_label' : volume.label(),
447 'owning_lib' : volume.owning_lib(),
450 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
453 JSAN.use('util.widgets');
454 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
459 obj.error.standard_unexpected_error_alert('Items not likely transferred.',E);
465 function() { alert('Not Yet Implemented'); }
467 'cmd_copy_buckets_print' : [
470 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
471 obj.list2.on_all_fleshed = function() {
473 dump( js2JSON( obj.list2.dump_with_keys() ) + '\n' );
474 data.stash_retrieve();
475 var lib = data.hash.aou[ data.list.au[0].ws_ou() ];
479 'staff' : data.list.au[0],
480 'header' : data.print_list_templates.item_status.header,
481 'line_item' : data.print_list_templates.item_status.line_item,
482 'footer' : data.print_list_templates.item_status.footer,
483 'type' : data.print_list_templates.item_status.type,
484 'list' : obj.list2.dump_with_keys(),
486 JSAN.use('util.print'); var print = new util.print();
487 print.tree_list( p );
488 setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
493 obj.list2.full_retrieve();
496 'cmd_copy_buckets_reprint' : [
501 'cmd_copy_buckets_done' : [
507 'cmd_export_to_copy_status' : [
511 obj.list2.select_all();
512 JSAN.use('util.functional');
513 var barcodes = util.functional.map_list(
514 obj.list2.dump_retrieve_ids(),
515 function(o) { return JSON2js(o)[1]; }
517 var url = urls.XUL_COPY_STATUS + '?barcodes=' + window.escape( js2JSON(barcodes) );
518 xulG.new_tab( url, {}, {});
520 obj.error.standard_unexpected_error_alert('Copy Status from Copy Buckets',E);
527 this.controller.render();
529 if (typeof xulG == 'undefined') {
530 obj.controller.view.cmd_export_to_copy_status.disabled = true;
531 obj.controller.view.cmd_export_to_copy_status.setAttribute('disabled',true);
533 obj.controller.view.cmd_copy_buckets_done.disabled = true;
534 obj.controller.view.cmd_copy_buckets_done.setAttribute('disabled',true);
539 'flesh_item_for_list' : function(acp_id,bucket_item_id) {
542 var copy = obj.network.simple_request( 'FM_ACP_RETRIEVE', [ acp_id ]);
543 if (copy == null || typeof copy.ilsevent != 'undefined') {
547 'retrieve_id' : js2JSON( [ copy.id(), copy.barcode(), bucket_item_id ] ),
550 'mvr' : obj.network.simple_request('MODS_SLIM_RECORD_RETRIEVE_VIA_COPY', [ copy.id() ]),
558 obj.error.standard_unexpected_error_alert('List building failed.',E);
566 dump('exiting cat.copy_buckets.js\n');