]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/copy_buckets.js
Support barcode autocompletion in copy buckets
[working/Evergreen.git] / Open-ILS / xul / staff_client / server / cat / copy_buckets.js
1 // vim:noet:sw=4:ts=4:
2 dump('entering cat.copy_buckets.js\n');
3
4 if (typeof cat == 'undefined') cat = {};
5 cat.copy_buckets = function (params) {
6
7     JSAN.use('util.error'); this.error = new util.error();
8     JSAN.use('util.network'); this.network = new util.network();
9     JSAN.use('util.date');
10     JSAN.use('OpenILS.data'); this.data = new OpenILS.data(); this.data.init({'via':'stash'});
11 }
12
13 cat.copy_buckets.prototype = {
14     'selection_list1' : [],
15     'selection_list2' : [],
16     'bucket_id_name_map' : {},
17     'copy_hash' : {},
18
19     'render_pending_copies' : function() {
20         var obj = this;
21         obj.list1.clear();
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 );
25         }
26     },
27
28     'init' : function( params ) {
29
30         var obj = this;
31
32         obj.copy_ids = params['copy_ids'] || [];
33
34         JSAN.use('circ.util');
35         var columns = circ.util.columns( 
36             { 
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 },
43             } 
44         );
45
46         JSAN.use('util.list'); 
47
48         function retrieve_row(params) {
49             var row = params.row;
50             try {
51                 function handle_details(blob_req) {
52                     try {
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.treeitem_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); }
62
63                     } catch(E) {
64                         obj.error.standard_unexpected_error_alert($('catStrings').getFormattedString('staff.cat.copy_buckets.retrieve_row.error', [row.my.acp_id]), E);
65                     }
66                 }
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; } } );
69                 } else {
70                     obj.network.simple_request( 'FM_ACP_DETAILS', [ ses(), row.my.copy_id ], handle_details );
71                 }
72             } catch(E) {
73                 obj.error.sdump('D_ERROR','retrieve_row: ' + E );
74             }
75             return row;
76         }
77
78         obj.list1 = new util.list('pending_copies_list');
79         obj.list1.init(
80             {
81                 'columns' : columns,
82                 'retrieve_row' : retrieve_row,
83                 'on_select' : function(ev) {
84                     try {
85                         JSAN.use('util.functional');
86                         var sel = obj.list1.retrieve_selection();
87                         obj.selection_list1 = util.functional.map_list(
88                             sel,
89                             function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
90                         );
91                         obj.error.sdump('D_TRACE','circ/copy_buckets: selection list 1 = ' + js2JSON(obj.selection_list1) );
92                         if (obj.selection_list1.length == 0) {
93                             obj.controller.view.copy_buckets_sel_add.disabled = true;
94                         } else {
95                             obj.controller.view.copy_buckets_sel_add.disabled = false;
96                         }
97                     } catch(E) {
98                         alert('FIXME: ' + E);
99                     }
100                 },
101
102             }
103         );
104
105         obj.render_pending_copies();
106     
107         obj.list2 = new util.list('copies_in_bucket_list');
108         obj.list2.init(
109             {
110                 'columns' : columns,
111                 'retrieve_row' : retrieve_row,
112                 'on_select' : function(ev) {
113                     try {
114                         JSAN.use('util.functional');
115                         var sel = obj.list2.retrieve_selection();
116                         obj.selection_list2 = util.functional.map_list(
117                             sel,
118                             function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
119                         );
120                         obj.error.sdump('D_TRACE','circ/copy_buckets: selection list 2 = ' + js2JSON(obj.selection_list2) );
121                         if (obj.selection_list2.length == 0) {
122                             obj.controller.view.copy_buckets_delete_item.disabled = true;
123                             obj.controller.view.copy_buckets_delete_item.setAttribute('disabled','true');
124                             obj.controller.view.copy_buckets_export.disabled = true;
125                             obj.controller.view.copy_buckets_export.setAttribute('disabled','true');
126                         } else {
127                             obj.controller.view.copy_buckets_delete_item.disabled = false;
128                             obj.controller.view.copy_buckets_delete_item.setAttribute('disabled','false');
129                             obj.controller.view.copy_buckets_export.disabled = false;
130                             obj.controller.view.copy_buckets_export.setAttribute('disabled','false');
131                         }
132                     } catch(E) {
133                         alert('FIXME: ' + E);
134                     }
135                 },
136             }
137         );
138         
139         JSAN.use('util.controller'); obj.controller = new util.controller();
140         obj.controller.init(
141             {
142                 'control_map' : {
143                     'list_actions1' : [
144                         ['render'],
145                         function(e) {
146                             return function() {
147                                 e.appendChild( obj.list1.render_list_actions() );
148                                 obj.list1.set_list_actions(
149                                     {
150                                         'on_complete' : function() { }
151                                     }
152                                 );
153                             };
154                         }
155                     ],
156                     'list_actions2' : [
157                         ['render'],
158                         function(e) {
159                             return function() {
160                                 e.appendChild( obj.list2.render_list_actions() );
161                                 obj.list2.set_list_actions(
162                                     {
163                                         'on_complete' : function() { }
164                                     }
165                                 );
166                             };
167                         }
168                     ],
169                     'copy_bucket_barcode_entry_textbox' : [
170                         ['keypress'],
171                         function(ev) {
172                             if (ev.keyCode && ev.keyCode == 13) {
173                                 obj.scan_barcode();
174                             }
175                         }
176                     ],
177                     'cmd_copy_bucket_submit_barcode' : [
178                         ['command'],
179                         function() {
180                             obj.scan_barcode();
181                         }
182                     ],
183                     'copy_buckets_menulist_placeholder' : [
184                         ['render'],
185                         function(e) {
186                             return function() {
187                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
188                                 var items = [
189                                     [$('catStrings').getString('staff.cat.copy_buckets.menulist.render.choose_bucket'),''],
190                                     [$('catStrings').getString('staff.cat.copy_buckets.menulist.render.retrieve_bucket'),-1]
191                                 ].concat(
192                                     util.functional.map_list(
193                                         obj.network.simple_request(
194                                             'BUCKET_RETRIEVE_VIA_USER',
195                                             [ ses(), obj.data.list.au[0].id() ]
196                                         ).copy,
197                                         function(o) {
198                                             obj.bucket_id_name_map[ o.id() ] = o.name();
199                                             return [ o.name(), o.id() ];
200                                         }
201                                     ).sort( 
202                                         function( a, b ) {
203                                             if (a[0] < b[0]) return -1;
204                                             if (a[0] > b[0]) return 1;
205                                             return 0;
206                                         }
207                                     )
208                                 );
209                                 obj.error.sdump('D_TRACE','items = ' + js2JSON(items));
210                                 util.widgets.remove_children( e );
211                                 var ml = util.widgets.make_menulist(
212                                     items
213                                 );
214                                 e.appendChild( ml );
215                                 ml.setAttribute('id','bucket_menulist');
216                                 ml.setAttribute('accesskey','');
217
218                                 function change_bucket(ev) {
219                                     var bucket_id = ev.target.value;
220                                     if (bucket_id < 0 ) {
221                                         bucket_id = window.prompt($('catStrings').getString('staff.cat.copy_buckets.menulist.change_bucket.prompt'));
222                                         ev.target.value = bucket_id;
223                                         ev.target.setAttribute('value',bucket_id);
224                                     }
225                                     if (!bucket_id) return;
226                                     var bucket = obj.network.simple_request(
227                                         'BUCKET_FLESH',
228                                         [ ses(), 'copy', bucket_id ]
229                                     );
230                                     if (typeof bucket.ilsevent != 'undefined') {
231                                         if (bucket.ilsevent == 1506 /* CONTAINER_NOT_FOUND */) {
232                                             alert($('catStrings').getFormattedString('staff.cat.copy_buckets.menulist.change_bucket.undefined', [bucket_id]));
233                                         } else {
234                                             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.menulist.change_bucket.error'),bucket);
235                                         }
236                                         return;
237                                     }
238                                     try {
239                                         var x = document.getElementById('info_box');
240                                         x.setAttribute('hidden','false');
241                                         x = document.getElementById('bucket_number');
242                                         x.setAttribute('value',bucket.id());
243                                         x = document.getElementById('bucket_name');
244                                         x.setAttribute('value',bucket.name());
245                                         x = document.getElementById('bucket_owner');
246                                         var s = bucket.owner(); JSAN.use('patron.util');
247                                         if (s && typeof s != "object") s = patron.util.retrieve_fleshed_au_via_id(ses(),s); 
248                                         x.setAttribute('value',s.card().barcode() + " @ " + obj.data.hash.aou[ s.home_ou() ].shortname());
249
250                                     } catch(E) {
251                                         alert(E);
252                                     }
253                                     var items = bucket.items() || [];
254                                     obj.list2.clear();
255                                     for (var i = 0; i < items.length; i++) {
256                                         var item = obj.prep_item_for_list( 
257                                             items[i].target_copy(),
258                                             items[i].id()
259                                         );
260                                         if (item) obj.list2.append( item );
261                                     }
262                                 }
263
264                                 ml.addEventListener( 'change_bucket', change_bucket , false);
265                                 ml.addEventListener( 'command', function() {
266                                     JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
267                                 }, false);
268                                 obj.controller.view.bucket_menulist = ml;
269                                 JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
270                                 document.getElementById('refresh').addEventListener( 'command', function() {
271                                     JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
272                                 }, false);
273                             };
274                         },
275                     ],
276
277                     'copy_buckets_add' : [
278                         ['command'],
279                         function() {
280                             try {
281                                 var bucket_id = obj.controller.view.bucket_menulist.value;
282                                 if (!bucket_id) return;
283                                 for (var i = 0; i < obj.copy_ids.length; i++) {
284                                     var bucket_item = new ccbi();
285                                     bucket_item.isnew('1');
286                                     bucket_item.bucket(bucket_id);
287                                     bucket_item.target_copy( obj.copy_ids[i] );
288                                     try {
289                                         var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
290                                             [ ses(), 'copy', bucket_item ]);
291
292                                         if (typeof robj == 'object') throw robj;
293
294                                         var item = obj.prep_item_for_list( obj.copy_ids[i], robj );
295                                         if (!item) continue;
296
297                                         obj.list2.append( item );
298                                     } catch(E) {
299                                         obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_add.error'), E);
300                                     }
301                                 }
302                             } catch(E) {
303                                 alert(E);
304                             }
305                         }
306                     ],
307                     'copy_buckets_sel_add' : [
308                         ['command'],
309                         function() {                                                        
310                             var bucket_id = obj.controller.view.bucket_menulist.value;
311                             if (!bucket_id) return;
312                             for (var i = 0; i < obj.selection_list1.length; i++) {
313                                 var acp_id = obj.selection_list1[i][0];
314                                 //var barcode = obj.selection_list1[i][1];
315                                 var bucket_item = new ccbi();
316                                 bucket_item.isnew('1');
317                                 bucket_item.bucket(bucket_id);
318                                 bucket_item.target_copy( acp_id );
319                                 try {
320                                     var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
321                                         [ ses(), 'copy', bucket_item ]);
322
323                                     if (typeof robj == 'object') throw robj;
324
325                                     var item = obj.prep_item_for_list( acp_id, robj );
326                                     if (!item) continue;
327
328                                     obj.list2.append( item );
329                                 } catch(E) {
330                                     obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_sel_add.error'), E);
331                                 }
332                             }
333
334                         }
335                     ],
336                     'copy_buckets_export' : [
337                         ['command'],
338                         function() {                                                        
339                             for (var i = 0; i < obj.selection_list2.length; i++) {
340                                 var acp_id = obj.selection_list2[i][0];
341                                 //var barcode = obj.selection_list1[i][1];
342                                 //var bucket_item_id = obj.selection_list1[i][2];
343                                 var item = obj.prep_item_for_list( acp_id );
344                                 if (item) {
345                                     obj.list1.append( item );
346                                     obj.copy_ids.push( acp_id );
347                                 }
348                             }
349                         }
350                     ],
351
352                     'copy_buckets_delete_item' : [
353                         ['command'],
354                         function() {
355                             for (var i = 0; i < obj.selection_list2.length; i++) {
356                                 try {
357                                     //var acp_id = obj.selection_list2[i][0];
358                                     //var barcode = obj.selection_list2[i][1];
359                                     var bucket_item_id = obj.selection_list2[i][2];
360                                     var robj = obj.network.simple_request('BUCKET_ITEM_DELETE',
361                                         [ ses(), 'copy', bucket_item_id ]);
362                                     if (typeof robj == 'object') throw robj;
363                                 } catch(E) {
364                                     obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_delete_item.error'), E);
365                                 }
366                             }
367                             setTimeout(
368                                 function() {
369                                     JSAN.use('util.widgets'); 
370                                     util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
371                                 }, 0
372                             );
373                         }
374                     ],
375                     'copy_buckets_delete_bucket' : [
376                         ['command'],
377                         function() {
378                             try {
379                                 var bucket = obj.controller.view.bucket_menulist.value;
380                                 var name = obj.bucket_id_name_map[ bucket ];
381                                 var conf = window.confirm($('catStrings').getFormattedString('staff.cat.copy_buckets.copy_buckets_delete_bucket.confirm', [name]));
382                                 if (!conf) return;
383                                 obj.list2.clear();
384                                 var robj = obj.network.simple_request('BUCKET_DELETE',[ses(),'copy',bucket]);
385                                 if (typeof robj == 'object') throw robj;
386                                 obj.controller.render('copy_buckets_menulist_placeholder');
387                             } catch(E) {
388                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_delete_bucket.error'),E);
389                             }
390                         }
391                     ],
392                     'copy_buckets_new_bucket' : [
393                         ['command'],
394                         function() {
395                             try {
396                                 var name = prompt(
397                                     $('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.prompt'),
398                                     '',
399                                     $('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.title')
400                                 );
401
402                                 if (name) {
403                                     var bucket = new ccb();
404                                     bucket.btype('staff_client');
405                                     bucket.owner( obj.data.list.au[0].id() );
406                                     bucket.name( name );
407
408                                     var robj = obj.network.simple_request('BUCKET_CREATE',[ses(),'copy',bucket]);
409
410                                     if (typeof robj == 'object') {
411                                         if (robj.ilsevent == 1710 /* CONTAINER_EXISTS */) {
412                                             alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.container_exists'));
413                                             return;
414                                         }
415                                         throw robj;
416                                     }
417
418                                     obj.controller.render('copy_buckets_menulist_placeholder');
419                                     obj.controller.view.bucket_menulist.value = robj;
420                                     setTimeout(
421                                         function() {
422                                             JSAN.use('util.widgets'); 
423                                             util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
424                                         }, 0
425                                     );
426                                 }
427                             } catch(E) {
428                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.error'),E);
429                             }
430                         }
431                     ],
432                     'copy_buckets_batch_copy_edit' : [
433                         ['command'],
434                         function() {
435                             try {
436
437                                 obj.list2.select_all();
438                             
439                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
440
441                                 var list = util.functional.map_list(
442                                     obj.list2.dump_retrieve_ids(),
443                                     function (o) {
444                                         return JSON2js(o)[0]; // acp_id
445                                     }
446                                 );
447
448                                 JSAN.use('cat.util'); cat.util.spawn_copy_editor( { 'copy_ids' : list, 'edit' : 1 } );
449
450                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
451                                 setTimeout(
452                                     function() {
453                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
454                                     }, 0
455                                 );
456                             } catch(E) {
457                                 alert( js2JSON(E) );
458                             }
459                         }
460                     ],
461                     'copy_buckets_batch_copy_delete' : [
462                         ['command'],
463                         function() {
464                             try {
465                             
466                                 obj.list2.select_all();
467
468                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
469
470                                 var list = util.functional.map_list(
471                                     obj.list2.dump_retrieve_ids(),
472                                     function (o) {
473                                         return JSON2js(o)[0]; // acp_id
474                                     }
475                                 );
476
477                                 var copies = util.functional.map_list(
478                                     list,
479                                     function (acp_id) {
480                                         return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
481                                     }
482                                 );
483
484                                 for (var i = 0; i < copies.length; i++) {
485                                     copies[i].ischanged(1);
486                                     copies[i].isdeleted(1);
487                                 }
488
489                                 var robj = obj.network.simple_request(
490                                     'FM_ACP_FLESHED_BATCH_UPDATE',
491                                     [ ses(), copies, true],
492                                     null, // no callback
493                                     {
494                                         'title' : document.getElementById('catStrings').getString('staff.cat.copy_buckets.batch.error'),
495                                         'overridable_events' : [
496                                             1208 /* TITLE_LAST_COPY */,
497                                             1227 /* COPY_DELETE_WARNING */
498                                         ]
499                                     }
500                                 );
501                                 if (typeof robj.ilsevent != 'undefined') {
502                                     switch(Number(robj.ilsevent)) {
503                                         case 1208 /* TITLE_LAST_COPY */ :
504                                         case 1227 /* COPY_DELETE_WARNING */ :
505                                         case 5000 /* PERM_DENIED */ :
506                                             // ignore this
507                                         break;
508                                         default:
509                                             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.batch.error'), robj);
510                                     }
511                                 }
512
513                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
514                                 setTimeout(
515                                     function() {
516                                         JSAN.use('util.widgets'); 
517                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
518                                     }, 0
519                                 );
520                             } catch(E) {
521                                 alert( js2JSON(E) );
522                             }
523                         }
524                     ],
525
526                     'cmd_request_items' : [
527                         ['command'],
528                         function() {
529                             try {
530                                 obj.list2.select_all();
531
532                                 var copy_ids = util.functional.map_list(
533                                     obj.list2.dump_retrieve_ids(),
534                                     function (o) {
535                                         return JSON2js(o)[0]; // acp_id
536                                     }
537                                 )
538
539                                 JSAN.use('cat.util');
540                                 cat.util.request_items(copy_ids); 
541
542                             } catch(E) {
543                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
544                             }
545                         }
546                     ],
547
548                     'copy_buckets_transfer_to_volume' : [
549                         ['command'],
550                         function() {
551                             try {
552                                 obj.list2.select_all();
553
554                                 obj.data.stash_retrieve();
555                                 if (!obj.data.marked_volume) {
556                                     alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.no_volume'));
557                                     return;
558                                 }
559
560                                 var copy_ids = util.functional.map_list(
561                                     obj.list2.dump_retrieve_ids(),
562                                     function (o) {
563                                         return JSON2js(o)[0]; // acp_id
564                                     }
565                                 )
566
567                                 var volume = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_volume ]);
568
569                                 var msg = $('catStrings').getFormattedString(
570                                     'staff.cat.copy_buckets.copy_buckets_transfer_to_volume.confirm',
571                                     [
572                                         obj.controller.view.bucket_menulist.getAttribute('label'),
573                                         volume.label(),
574                                         obj.data.hash.aou[ volume.owning_lib() ].shortname()
575                                     ]
576                                 );
577
578                                 JSAN.use('cat.util'); cat.util.transfer_copies( { 
579                                     'copy_ids' : copy_ids, 
580                                     'message' : msg, 
581                                     'docid' : volume.record(),
582                                     'volume_label' : volume.label(),
583                                     'owning_lib' : volume.owning_lib(),
584                                 } );
585
586                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
587                                 setTimeout(
588                                     function() {
589                                         JSAN.use('util.widgets'); 
590                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
591                                     }, 0
592                                 );
593                                 
594                             } catch(E) {
595                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
596                             }
597                         }
598                     ],
599                     'cmd_broken' : [
600                         ['command'],
601                         function() { alert($('commonStrings').getString('common.unimplemented')); }
602                     ],
603                     'cmd_copy_buckets_print' : [
604                         ['command'],
605                         function() {
606                             JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
607                             obj.list2.on_all_fleshed = function() {
608                                 try {
609                                     dump( js2JSON( obj.list2.dump_with_keys() ) + '\n' );
610                                     data.stash_retrieve();
611                                     var lib = data.hash.aou[ data.list.au[0].ws_ou() ];
612                                     lib.children(null);
613                                     var p = { 
614                                         'lib' : lib,
615                                         'staff' : data.list.au[0],
616                                         'header' : data.print_list_templates.item_status.header,
617                                         'line_item' : data.print_list_templates.item_status.line_item,
618                                         'footer' : data.print_list_templates.item_status.footer,
619                                         'type' : data.print_list_templates.item_status.type,
620                                         'list' : obj.list2.dump_with_keys(),
621                                         'context' : data.print_list_templates.item_status.context,
622                                     };
623                                     JSAN.use('util.print'); var print = new util.print();
624                                     print.tree_list( p );
625                                     setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
626                                 } catch(E) {
627                                     alert(E); 
628                                 }
629                             }
630                             obj.list2.full_retrieve();
631                         }
632                     ],
633                     'cmd_copy_buckets_export' : [
634                         ['command'],
635                         function() {
636                             obj.list2.dump_csv_to_clipboard();
637                         }
638                     ],
639                     'cmd_copy_buckets_reprint' : [
640                         ['command'],
641                         function() {
642                         }
643                     ],
644                     'cmd_export_to_copy_status' : [
645                         ['command'],
646                         function() {
647                             try {
648                                 obj.list2.on_all_fleshed =
649                                     function() {
650                                         try {
651                                             obj.list2.select_all();
652                                             JSAN.use('util.functional');
653                                             var barcodes = util.functional.map_list(
654                                                 obj.list2.dump_retrieve_ids(),
655                                                 function(o) { return JSON2js(o)[1]; }
656                                             );
657                                             var url = urls.XUL_COPY_STATUS;
658                                             xulG.new_tab( url, {}, { 'barcodes' : barcodes });
659                                             setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
660                                         } catch(E) {
661                                             obj.error.standard_unexpected_error_alert('export to copy status',E);
662                                         }
663                                     }
664                                 obj.list2.full_retrieve();
665                             } catch(E) {
666                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.cmd_export_to_copy_status.error'), E);
667                             }
668                         }
669                     ],
670                 }
671             }
672         );
673         this.controller.render();
674
675         if (typeof xulG == 'undefined') {
676             obj.controller.view.cmd_export_to_copy_status.disabled = true;
677             obj.controller.view.cmd_export_to_copy_status.setAttribute('disabled',true);
678         }
679     
680     },
681
682     'prep_item_for_list' : function(acp_id,bucket_item_id) {
683         var obj = this;
684         try {
685             var item = {
686                 'retrieve_id' : js2JSON( [ acp_id, null, bucket_item_id ] ),
687                 'row' : {
688                     'my' : {
689                         'acn' : -2,
690                         'copy_id' : acp_id,
691                         'bucket_item_id' : bucket_item_id
692                     }
693                 }
694             };
695             return item;
696         } catch(E) {
697             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.prep_item_for_list.error'), E);
698             return null;
699         }
700
701     },
702
703     'scan_barcode' : function() {
704         var obj = this;
705         try {
706             var barcode = obj.controller.view.copy_bucket_barcode_entry_textbox.value;
707             var barcode_object = xulG.get_barcode(window, 'asset', barcode);
708             // user_false means the user said "None of the above", so abort without further prompts/actions
709             if(barcode_object == "user_false") return;
710             if(barcode_object && barcode_object.barcode) {
711                 barcode = barcode_object.barcode;
712             }
713
714             var copy_obj = obj.network.simple_request('FM_ACP_DETAILS_VIA_BARCODE',[ses(),barcode]);
715             if (copy_obj == null) {
716                 throw(document.getElementById('circStrings').getString('staff.circ.copy_status.status.null_result'));
717             } else if (copy_obj.ilsevent) {
718                 switch(Number(copy_obj.ilsevent)) {
719                     case -1: 
720                         obj.error.standard_network_error_alert(); 
721                         obj.controller.view.copy_bucket_barcode_entry_textbox.select();
722                         obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
723                         return;
724                     break;
725                     case 1502 /* ASSET_COPY_NOT_FOUND */ :
726                         obj.error.yns_alert(
727                             document.getElementById('circStrings').getFormattedString('staff.circ.copy_status.status.copy_not_found', [barcode]),
728                             document.getElementById('circStrings').getString('staff.circ.copy_status.status.not_cataloged'),
729                             document.getElementById('circStrings').getString('staff.circ.copy_status.ok'),
730                             null,
731                             null,
732                             document.getElementById('circStrings').getString('staff.circ.confirm.msg')
733                         );
734                         obj.controller.view.copy_bucket_barcode_entry_textbox.select();
735                         obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
736                         return;
737                     break;
738                     default: 
739                         throw(details); 
740                     break;
741                 }
742             }
743             var item = obj.prep_item_for_list( copy_obj.copy.id() );
744             if (item) {
745                 obj.copy_ids.push( copy_obj.copy.id() );
746                 obj.copy_hash[ copy_obj.copy.id() ] = copy_obj;
747                 obj.list1.append( item );
748             }
749             obj.controller.view.copy_bucket_barcode_entry_textbox.value = '';
750             obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
751         } catch(E) {
752             obj.controller.view.copy_bucket_barcode_entry_textbox.select();
753             obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
754             alert(E);
755         }
756     }    
757 }
758
759 dump('exiting cat.copy_buckets.js\n');