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 obj.controller.render('copy_buckets_menulist_placeholder');
298 obj.controller.view.bucket_menulist.value = robj;
301 JSAN.use('util.widgets');
302 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
307 obj.error.standard_unexpected_error_alert('Bucket creation failed.',E);
311 'copy_buckets_batch_copy_edit' : [
316 obj.list2.select_all();
318 JSAN.use('util.widgets'); JSAN.use('util.functional');
320 var list = util.functional.map_list(
321 obj.list2.dump_retrieve_ids(),
323 return JSON2js(o)[0]; // acp_id
327 var copies = util.functional.map_list(
330 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
336 edit = obj.network.request(
337 api.PERM_MULTI_ORG_CHECK.app,
338 api.PERM_MULTI_ORG_CHECK.method,
341 obj.data.list.au[0].id(),
342 util.functional.map_list(
345 return obj.network.simple_request('FM_ACN_RETRIEVE',[o.call_number()]).owning_lib();
348 [ 'UPDATE_COPY', 'UPDATE_BATCH_COPY' ]
350 ).length == 0 ? 1 : 0;
352 obj.error.sdump('D_ERROR','batch permission check: ' + E);
355 JSAN.use('cat.util'); cat.util.spawn_copy_editor(list,edit);
357 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
360 JSAN.use('util.widgets');
361 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
369 'copy_buckets_batch_copy_delete' : [
374 obj.list2.select_all();
376 JSAN.use('util.widgets'); JSAN.use('util.functional');
378 var list = util.functional.map_list(
379 obj.list2.dump_retrieve_ids(),
381 return JSON2js(o)[0]; // acp_id
385 var copies = util.functional.map_list(
388 return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
392 for (var i = 0; i < copies.length; i++) {
393 copies[i].ischanged(1);
394 copies[i].isdeleted(1);
397 var robj = obj.network.simple_request('FM_ACP_FLESHED_BATCH_UPDATE',[ ses(), copies, true]);
398 if (typeof robj.ilsevent != 'undefined') obj.error.standard_unexpected_error_alert('Batch Item Deletion',robj);
400 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
403 JSAN.use('util.widgets');
404 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
413 'copy_buckets_transfer_to_volume' : [
417 obj.list2.select_all();
419 obj.data.stash_retrieve();
420 if (!obj.data.marked_volume) {
421 alert('Please mark a volume as the destination from within the copy browser and then try this again.');
425 var copy_ids = util.functional.map_list(
426 obj.list2.dump_retrieve_ids(),
428 return JSON2js(o)[0]; // acp_id
432 var volume = obj.network.simple_request('FM_ACN_RETRIEVE',[ obj.data.marked_volume ]);
434 var msg = 'Transfer the items in bucket "';
435 msg += obj.controller.view.bucket_menulist.getAttribute('label') + '" ';
436 msg += 'from their original volumes to ';
437 msg += obj.data.hash.aou[ volume.owning_lib() ].shortname() + "'s volume labelled ";
438 msg += '"' + volume.label() + '" on the following record?';
440 JSAN.use('cat.util'); cat.util.transfer_copies( {
441 'copy_ids' : copy_ids,
443 'docid' : volume.record(),
444 'volume_label' : volume.label(),
445 'owning_lib' : volume.owning_lib(),
448 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
451 JSAN.use('util.widgets');
452 util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
457 obj.error.standard_unexpected_error_alert('Items not likely transferred.',E);
463 function() { alert('Not Yet Implemented'); }
465 'cmd_copy_buckets_print' : [
468 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
469 obj.list2.on_all_fleshed = function() {
471 dump( js2JSON( obj.list2.dump_with_keys() ) + '\n' );
472 data.stash_retrieve();
473 var lib = data.hash.aou[ data.list.au[0].ws_ou() ];
477 'staff' : data.list.au[0],
478 'header' : data.print_list_templates.item_status.header,
479 'line_item' : data.print_list_templates.item_status.line_item,
480 'footer' : data.print_list_templates.item_status.footer,
481 'type' : data.print_list_templates.item_status.type,
482 'list' : obj.list2.dump_with_keys(),
484 JSAN.use('util.print'); var print = new util.print();
485 print.tree_list( p );
486 setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
491 obj.list2.full_retrieve();
494 'cmd_copy_buckets_reprint' : [
499 'cmd_copy_buckets_done' : [
505 'cmd_export_to_copy_status' : [
509 obj.list2.select_all();
510 JSAN.use('util.functional');
511 var barcodes = util.functional.map_list(
512 obj.list2.dump_retrieve_ids(),
513 function(o) { return JSON2js(o)[1]; }
515 var url = urls.XUL_COPY_STATUS + '?barcodes=' + window.escape( js2JSON(barcodes) );
516 xulG.new_tab( url, {}, {});
518 obj.error.standard_unexpected_error_alert('Copy Status from Copy Buckets',E);
525 this.controller.render();
527 if (typeof xulG == 'undefined') {
528 obj.controller.view.cmd_export_to_copy_status.disabled = true;
529 obj.controller.view.cmd_export_to_copy_status.setAttribute('disabled',true);
531 obj.controller.view.cmd_copy_buckets_done.disabled = true;
532 obj.controller.view.cmd_copy_buckets_done.setAttribute('disabled',true);
537 'flesh_item_for_list' : function(acp_id,bucket_item_id) {
540 var copy = obj.network.simple_request( 'FM_ACP_RETRIEVE', [ acp_id ]);
541 if (copy == null || typeof copy.ilsevent != 'undefined') {
545 'retrieve_id' : js2JSON( [ copy.id(), copy.barcode(), bucket_item_id ] ),
548 'mvr' : obj.network.simple_request('MODS_SLIM_RECORD_RETRIEVE_VIA_COPY', [ copy.id() ]),
556 obj.error.standard_unexpected_error_alert('List building failed.',E);
564 dump('exiting cat.copy_buckets.js\n');