]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/copy_buckets.js
Add cointainer() and record_list() filters to QueryParser
[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.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); }
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                 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
83                 'retrieve_row' : retrieve_row,
84                 'on_select' : function(ev) {
85                     try {
86                         JSAN.use('util.functional');
87                         var sel = obj.list1.retrieve_selection();
88                         obj.selection_list1 = util.functional.map_list(
89                             sel,
90                             function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
91                         );
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;
95                         } else {
96                             obj.controller.view.copy_buckets_sel_add.disabled = false;
97                         }
98                     } catch(E) {
99                         alert('FIXME: ' + E);
100                     }
101                 },
102
103             }
104         );
105
106         obj.render_pending_copies();
107     
108         obj.list2 = new util.list('copies_in_bucket_list');
109         obj.list2.init(
110             {
111                 'columns' : columns,
112                 'map_row_to_columns' : circ.util.std_map_row_to_columns(),
113                 'retrieve_row' : retrieve_row,
114                 'on_select' : function(ev) {
115                     try {
116                         JSAN.use('util.functional');
117                         var sel = obj.list2.retrieve_selection();
118                         obj.selection_list2 = util.functional.map_list(
119                             sel,
120                             function(o) { return JSON2js(o.getAttribute('retrieve_id')); }
121                         );
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');
128                         } else {
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');
133                         }
134                     } catch(E) {
135                         alert('FIXME: ' + E);
136                     }
137                 },
138             }
139         );
140         
141         JSAN.use('util.controller'); obj.controller = new util.controller();
142         obj.controller.init(
143             {
144                 'control_map' : {
145                     'list_actions1' : [
146                         ['render'],
147                         function(e) {
148                             return function() {
149                                 e.appendChild( obj.list1.render_list_actions() );
150                                 obj.list1.set_list_actions(
151                                     {
152                                         'on_complete' : function() { }
153                                     }
154                                 );
155                             };
156                         }
157                     ],
158                     'list_actions2' : [
159                         ['render'],
160                         function(e) {
161                             return function() {
162                                 e.appendChild( obj.list2.render_list_actions() );
163                                 obj.list2.set_list_actions(
164                                     {
165                                         'on_complete' : function() { }
166                                     }
167                                 );
168                             };
169                         }
170                     ],
171                     'copy_bucket_barcode_entry_textbox' : [
172                         ['keypress'],
173                         function(ev) {
174                             if (ev.keyCode && ev.keyCode == 13) {
175                                 obj.scan_barcode();
176                             }
177                         }
178                     ],
179                     'cmd_copy_bucket_submit_barcode' : [
180                         ['command'],
181                         function() {
182                             obj.scan_barcode();
183                         }
184                     ],
185                     'copy_buckets_menulist_placeholder' : [
186                         ['render'],
187                         function(e) {
188                             return function() {
189                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
190                                 var items = [
191                                     [$('catStrings').getString('staff.cat.copy_buckets.menulist.render.choose_bucket'),''],
192                                     [$('catStrings').getString('staff.cat.copy_buckets.menulist.render.retrieve_bucket'),-1]
193                                 ].concat(
194                                     util.functional.map_list(
195                                         obj.network.simple_request(
196                                             'BUCKET_RETRIEVE_VIA_USER',
197                                             [ ses(), obj.data.list.au[0].id() ]
198                                         ).copy,
199                                         function(o) {
200                                             obj.bucket_id_name_map[ o.id() ] = o.name();
201                                             return [ o.name(), o.id() ];
202                                         }
203                                     ).sort( 
204                                         function( a, b ) {
205                                             if (a[0] < b[0]) return -1;
206                                             if (a[0] > b[0]) return 1;
207                                             return 0;
208                                         }
209                                     )
210                                 );
211                                 obj.error.sdump('D_TRACE','items = ' + js2JSON(items));
212                                 util.widgets.remove_children( e );
213                                 var ml = util.widgets.make_menulist(
214                                     items
215                                 );
216                                 e.appendChild( ml );
217                                 ml.setAttribute('id','bucket_menulist');
218                                 ml.setAttribute('accesskey','');
219
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);
226                                     }
227                                     if (!bucket_id) return;
228                                     var bucket = obj.network.simple_request(
229                                         'BUCKET_FLESH',
230                                         [ ses(), 'copy', bucket_id ]
231                                     );
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]));
235                                         } else {
236                                             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.menulist.change_bucket.error'),bucket);
237                                         }
238                                         return;
239                                     }
240                                     try {
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());
251
252                                     } catch(E) {
253                                         alert(E);
254                                     }
255                                     var items = bucket.items() || [];
256                                     obj.list2.clear();
257                                     for (var i = 0; i < items.length; i++) {
258                                         var item = obj.prep_item_for_list( 
259                                             items[i].target_copy(),
260                                             items[i].id()
261                                         );
262                                         if (item) obj.list2.append( item );
263                                     }
264                                 }
265
266                                 ml.addEventListener( 'change_bucket', change_bucket , false);
267                                 ml.addEventListener( 'command', function() {
268                                     JSAN.use('util.widgets'); util.widgets.dispatch('change_bucket',ml);
269                                 }, false);
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);
274                                 }, false);
275                             };
276                         },
277                     ],
278
279                     'copy_buckets_add' : [
280                         ['command'],
281                         function() {
282                             try {
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] );
290                                     try {
291                                         var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
292                                             [ ses(), 'copy', bucket_item ]);
293
294                                         if (typeof robj == 'object') throw robj;
295
296                                         var item = obj.prep_item_for_list( obj.copy_ids[i], robj );
297                                         if (!item) continue;
298
299                                         obj.list2.append( item );
300                                     } catch(E) {
301                                         obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_add.error'), E);
302                                     }
303                                 }
304                             } catch(E) {
305                                 alert(E);
306                             }
307                         }
308                     ],
309                     'copy_buckets_sel_add' : [
310                         ['command'],
311                         function() {                                                        
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 );
321                                 try {
322                                     var robj = obj.network.simple_request('BUCKET_ITEM_CREATE',
323                                         [ ses(), 'copy', bucket_item ]);
324
325                                     if (typeof robj == 'object') throw robj;
326
327                                     var item = obj.prep_item_for_list( acp_id, robj );
328                                     if (!item) continue;
329
330                                     obj.list2.append( item );
331                                 } catch(E) {
332                                     obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_sel_add.error'), E);
333                                 }
334                             }
335
336                         }
337                     ],
338                     'copy_buckets_export' : [
339                         ['command'],
340                         function() {                                                        
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 );
346                                 if (item) {
347                                     obj.list1.append( item );
348                                     obj.copy_ids.push( acp_id );
349                                 }
350                             }
351                         }
352                     ],
353
354                     'copy_buckets_delete_item' : [
355                         ['command'],
356                         function() {
357                             for (var i = 0; i < obj.selection_list2.length; i++) {
358                                 try {
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;
365                                 } catch(E) {
366                                     obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_delete_item.error'), E);
367                                 }
368                             }
369                             setTimeout(
370                                 function() {
371                                     JSAN.use('util.widgets'); 
372                                     util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
373                                 }, 0
374                             );
375                         }
376                     ],
377                     'copy_buckets_delete_bucket' : [
378                         ['command'],
379                         function() {
380                             try {
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]));
384                                 if (!conf) return;
385                                 obj.list2.clear();
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');
389                             } catch(E) {
390                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_delete_bucket.error'),E);
391                             }
392                         }
393                     ],
394                     'copy_buckets_new_bucket' : [
395                         ['command'],
396                         function() {
397                             try {
398                                 var name = prompt(
399                                     $('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.prompt'),
400                                     '',
401                                     $('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.title')
402                                 );
403
404                                 if (name) {
405                                     var bucket = new ccb();
406                                     bucket.btype('staff_client');
407                                     bucket.owner( obj.data.list.au[0].id() );
408                                     bucket.name( name );
409
410                                     var robj = obj.network.simple_request('BUCKET_CREATE',[ses(),'copy',bucket]);
411
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'));
415                                             return;
416                                         }
417                                         throw robj;
418                                     }
419
420                                     obj.controller.render('copy_buckets_menulist_placeholder');
421                                     obj.controller.view.bucket_menulist.value = robj;
422                                     setTimeout(
423                                         function() {
424                                             JSAN.use('util.widgets'); 
425                                             util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
426                                         }, 0
427                                     );
428                                 }
429                             } catch(E) {
430                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_new_bucket.error'),E);
431                             }
432                         }
433                     ],
434                     'copy_buckets_batch_copy_edit' : [
435                         ['command'],
436                         function() {
437                             try {
438
439                                 obj.list2.select_all();
440                             
441                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
442
443                                 var list = util.functional.map_list(
444                                     obj.list2.dump_retrieve_ids(),
445                                     function (o) {
446                                         return JSON2js(o)[0]; // acp_id
447                                     }
448                                 );
449
450                                 JSAN.use('cat.util'); cat.util.spawn_copy_editor( { 'copy_ids' : list, 'edit' : 1 } );
451
452                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
453                                 setTimeout(
454                                     function() {
455                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
456                                     }, 0
457                                 );
458                             } catch(E) {
459                                 alert( js2JSON(E) );
460                             }
461                         }
462                     ],
463                     'copy_buckets_batch_copy_delete' : [
464                         ['command'],
465                         function() {
466                             try {
467                             
468                                 obj.list2.select_all();
469
470                                 JSAN.use('util.widgets'); JSAN.use('util.functional');
471
472                                 var list = util.functional.map_list(
473                                     obj.list2.dump_retrieve_ids(),
474                                     function (o) {
475                                         return JSON2js(o)[0]; // acp_id
476                                     }
477                                 );
478
479                                 var copies = util.functional.map_list(
480                                     list,
481                                     function (acp_id) {
482                                         return obj.network.simple_request('FM_ACP_RETRIEVE',[acp_id]);
483                                     }
484                                 );
485
486                                 for (var i = 0; i < copies.length; i++) {
487                                     copies[i].ischanged(1);
488                                     copies[i].isdeleted(1);
489                                 }
490
491                                 var robj = obj.network.simple_request(
492                                     'FM_ACP_FLESHED_BATCH_UPDATE',
493                                     [ ses(), copies, true],
494                                     null, // no callback
495                                     {
496                                         'title' : document.getElementById('catStrings').getString('staff.cat.copy_buckets.batch.error'),
497                                         'overridable_events' : [
498                                             1208 /* TITLE_LAST_COPY */
499                                         ]
500                                     }
501                                 );
502                                 if (typeof robj.ilsevent != 'undefined') {
503                                     switch(Number(robj.ilsevent)) {
504                                         case 1208 /* TITLE_LAST_COPY */ :
505                                             // ignore this
506                                         break;
507                                         case 1227 /* COPY_DELETE_WARNING */ : 
508                                             var copy;
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';
516                                             alert(err);
517                                         break;
518                                         default:
519                                             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.batch.error'), robj);
520                                     }
521                                 }
522
523                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
524                                 setTimeout(
525                                     function() {
526                                         JSAN.use('util.widgets'); 
527                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
528                                     }, 0
529                                 );
530                             } catch(E) {
531                                 alert( js2JSON(E) );
532                             }
533                         }
534                     ],
535
536                     'cmd_request_items' : [
537                         ['command'],
538                         function() {
539                             try {
540                                 obj.list2.select_all();
541
542                                 var copy_ids = util.functional.map_list(
543                                     obj.list2.dump_retrieve_ids(),
544                                     function (o) {
545                                         return JSON2js(o)[0]; // acp_id
546                                     }
547                                 )
548
549                                 JSAN.use('cat.util');
550                                 cat.util.request_items(copy_ids); 
551
552                             } catch(E) {
553                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
554                             }
555                         }
556                     ],
557
558                     'copy_buckets_transfer_to_volume' : [
559                         ['command'],
560                         function() {
561                             try {
562                                 obj.list2.select_all();
563
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'));
567                                     return;
568                                 }
569
570                                 var copy_ids = util.functional.map_list(
571                                     obj.list2.dump_retrieve_ids(),
572                                     function (o) {
573                                         return JSON2js(o)[0]; // acp_id
574                                     }
575                                 )
576
577                                 var volume = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_volume ]);
578
579                                 var msg = $('catStrings').getFormattedString(
580                                     'staff.cat.copy_buckets.copy_buckets_transfer_to_volume.confirm',
581                                     [
582                                         obj.controller.view.bucket_menulist.getAttribute('label'),
583                                         volume.label(),
584                                         obj.data.hash.aou[ volume.owning_lib() ].shortname()
585                                     ]
586                                 );
587
588                                 JSAN.use('cat.util'); cat.util.transfer_copies( { 
589                                     'copy_ids' : copy_ids, 
590                                     'message' : msg, 
591                                     'docid' : volume.record(),
592                                     'volume_label' : volume.label(),
593                                     'owning_lib' : volume.owning_lib(),
594                                 } );
595
596                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
597                                 setTimeout(
598                                     function() {
599                                         JSAN.use('util.widgets'); 
600                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
601                                     }, 0
602                                 );
603                                 
604                             } catch(E) {
605                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
606                             }
607                         }
608                     ],
609                     'cmd_broken' : [
610                         ['command'],
611                         function() { alert($('commonStrings').getString('common.unimplemented')); }
612                     ],
613                     'cmd_copy_buckets_print' : [
614                         ['command'],
615                         function() {
616                             JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
617                             obj.list2.on_all_fleshed = function() {
618                                 try {
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() ];
622                                     lib.children(null);
623                                     var p = { 
624                                         'lib' : lib,
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(),
631                                     };
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);
635                                 } catch(E) {
636                                     alert(E); 
637                                 }
638                             }
639                             obj.list2.full_retrieve();
640                         }
641                     ],
642                     'cmd_copy_buckets_export' : [
643                         ['command'],
644                         function() {
645                             obj.list2.dump_csv_to_clipboard();
646                         }
647                     ],
648                     'cmd_copy_buckets_reprint' : [
649                         ['command'],
650                         function() {
651                         }
652                     ],
653                     'cmd_export_to_copy_status' : [
654                         ['command'],
655                         function() {
656                             try {
657                                 obj.list2.on_all_fleshed =
658                                     function() {
659                                         try {
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]; }
665                                             );
666                                             var url = urls.XUL_COPY_STATUS;
667                                             xulG.new_tab( url, {}, { 'barcodes' : barcodes });
668                                             setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
669                                         } catch(E) {
670                                             obj.error.standard_unexpected_error_alert('export to copy status',E);
671                                         }
672                                     }
673                                 obj.list2.full_retrieve();
674                             } catch(E) {
675                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.cmd_export_to_copy_status.error'), E);
676                             }
677                         }
678                     ],
679                 }
680             }
681         );
682         this.controller.render();
683
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);
687         }
688     
689     },
690
691     'prep_item_for_list' : function(acp_id,bucket_item_id) {
692         var obj = this;
693         try {
694             var item = {
695                 'retrieve_id' : js2JSON( [ acp_id, null, bucket_item_id ] ),
696                 'row' : {
697                     'my' : {
698                         'acn' : -2,
699                         'copy_id' : acp_id,
700                         'bucket_item_id' : bucket_item_id
701                     }
702                 }
703             };
704             return item;
705         } catch(E) {
706             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.prep_item_for_list.error'), E);
707             return null;
708         }
709
710     },
711
712     'scan_barcode' : function() {
713         var obj = this;
714         try {
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)) {
721                     case -1: 
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();
725                         return;
726                     break;
727                     case 1502 /* ASSET_COPY_NOT_FOUND */ :
728                         obj.error.yns_alert(
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'),
732                             null,
733                             null,
734                             document.getElementById('circStrings').getString('staff.circ.confirm.msg')
735                         );
736                         obj.controller.view.copy_bucket_barcode_entry_textbox.select();
737                         obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
738                         return;
739                     break;
740                     default: 
741                         throw(details); 
742                     break;
743                 }
744             }
745             var item = obj.prep_item_for_list( copy_obj.copy.id() );
746             if (item) {
747                 obj.copy_ids.push( copy_obj.copy.id() );
748                 obj.copy_hash[ copy_obj.copy.id() ] = copy_obj;
749                 obj.list1.append( item );
750             }
751             obj.controller.view.copy_bucket_barcode_entry_textbox.value = '';
752             obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
753         } catch(E) {
754             obj.controller.view.copy_bucket_barcode_entry_textbox.select();
755             obj.controller.view.copy_bucket_barcode_entry_textbox.focus();
756             alert(E);
757         }
758     }    
759 }
760
761 dump('exiting cat.copy_buckets.js\n');