]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/cat/copy_buckets.js
Merge branch 'master' of git.evergreen-ils.org:Evergreen into QP_bucket_filter
[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                 '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                                         ]
498                                     }
499                                 );
500                                 if (typeof robj.ilsevent != 'undefined') {
501                                     switch(Number(robj.ilsevent)) {
502                                         case 1208 /* TITLE_LAST_COPY */ :
503                                             // ignore this
504                                         break;
505                                         case 1227 /* COPY_DELETE_WARNING */ : 
506                                             var copy;
507                                             for (var i = 0; i < copies.length; i++) { if (copies[i].id()==robj.payload) copy = function(a){return a;}(copies[i]); }
508                                             /* The copy in question is not in an ideal status for deleting */
509                                             var err = '*** ' + robj.desc + ' ***\n';
510                                             /* The barcode for the item is {1} */
511                                             err += $('catStrings').getFormattedString('cat.barcode_for_item',[ copy.barcode() ]) + '\n';
512                                             /* The whole batch operation failed */
513                                             err += $('catStrings').getString('cat.batch_operation_failed') + '\n';
514                                             alert(err);
515                                         break;
516                                         default:
517                                             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.batch.error'), robj);
518                                     }
519                                 }
520
521                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
522                                 setTimeout(
523                                     function() {
524                                         JSAN.use('util.widgets'); 
525                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
526                                     }, 0
527                                 );
528                             } catch(E) {
529                                 alert( js2JSON(E) );
530                             }
531                         }
532                     ],
533
534                     'cmd_request_items' : [
535                         ['command'],
536                         function() {
537                             try {
538                                 obj.list2.select_all();
539
540                                 var copy_ids = util.functional.map_list(
541                                     obj.list2.dump_retrieve_ids(),
542                                     function (o) {
543                                         return JSON2js(o)[0]; // acp_id
544                                     }
545                                 )
546
547                                 JSAN.use('cat.util');
548                                 cat.util.request_items(copy_ids); 
549
550                             } catch(E) {
551                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
552                             }
553                         }
554                     ],
555
556                     'copy_buckets_transfer_to_volume' : [
557                         ['command'],
558                         function() {
559                             try {
560                                 obj.list2.select_all();
561
562                                 obj.data.stash_retrieve();
563                                 if (!obj.data.marked_volume) {
564                                     alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.no_volume'));
565                                     return;
566                                 }
567
568                                 var copy_ids = util.functional.map_list(
569                                     obj.list2.dump_retrieve_ids(),
570                                     function (o) {
571                                         return JSON2js(o)[0]; // acp_id
572                                     }
573                                 )
574
575                                 var volume = obj.network.simple_request('FM_ACN_RETRIEVE.authoritative',[ obj.data.marked_volume ]);
576
577                                 var msg = $('catStrings').getFormattedString(
578                                     'staff.cat.copy_buckets.copy_buckets_transfer_to_volume.confirm',
579                                     [
580                                         obj.controller.view.bucket_menulist.getAttribute('label'),
581                                         volume.label(),
582                                         obj.data.hash.aou[ volume.owning_lib() ].shortname()
583                                     ]
584                                 );
585
586                                 JSAN.use('cat.util'); cat.util.transfer_copies( { 
587                                     'copy_ids' : copy_ids, 
588                                     'message' : msg, 
589                                     'docid' : volume.record(),
590                                     'volume_label' : volume.label(),
591                                     'owning_lib' : volume.owning_lib(),
592                                 } );
593
594                                 obj.render_pending_copies(); // FIXME -- need a generic refresh for lists
595                                 setTimeout(
596                                     function() {
597                                         JSAN.use('util.widgets'); 
598                                         util.widgets.dispatch('change_bucket',obj.controller.view.bucket_menulist);
599                                     }, 0
600                                 );
601                                 
602                             } catch(E) {
603                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.copy_buckets_transfer_to_volume.error'), E);
604                             }
605                         }
606                     ],
607                     'cmd_broken' : [
608                         ['command'],
609                         function() { alert($('commonStrings').getString('common.unimplemented')); }
610                     ],
611                     'cmd_copy_buckets_print' : [
612                         ['command'],
613                         function() {
614                             JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
615                             obj.list2.on_all_fleshed = function() {
616                                 try {
617                                     dump( js2JSON( obj.list2.dump_with_keys() ) + '\n' );
618                                     data.stash_retrieve();
619                                     var lib = data.hash.aou[ data.list.au[0].ws_ou() ];
620                                     lib.children(null);
621                                     var p = { 
622                                         'lib' : lib,
623                                         'staff' : data.list.au[0],
624                                         'header' : data.print_list_templates.item_status.header,
625                                         'line_item' : data.print_list_templates.item_status.line_item,
626                                         'footer' : data.print_list_templates.item_status.footer,
627                                         'type' : data.print_list_templates.item_status.type,
628                                         'list' : obj.list2.dump_with_keys(),
629                                     };
630                                     JSAN.use('util.print'); var print = new util.print();
631                                     print.tree_list( p );
632                                     setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
633                                 } catch(E) {
634                                     alert(E); 
635                                 }
636                             }
637                             obj.list2.full_retrieve();
638                         }
639                     ],
640                     'cmd_copy_buckets_export' : [
641                         ['command'],
642                         function() {
643                             obj.list2.dump_csv_to_clipboard();
644                         }
645                     ],
646                     'cmd_copy_buckets_reprint' : [
647                         ['command'],
648                         function() {
649                         }
650                     ],
651                     'cmd_export_to_copy_status' : [
652                         ['command'],
653                         function() {
654                             try {
655                                 obj.list2.on_all_fleshed =
656                                     function() {
657                                         try {
658                                             obj.list2.select_all();
659                                             JSAN.use('util.functional');
660                                             var barcodes = util.functional.map_list(
661                                                 obj.list2.dump_retrieve_ids(),
662                                                 function(o) { return JSON2js(o)[1]; }
663                                             );
664                                             var url = urls.XUL_COPY_STATUS;
665                                             xulG.new_tab( url, {}, { 'barcodes' : barcodes });
666                                             setTimeout(function(){obj.list2.on_all_fleshed = null;},0);
667                                         } catch(E) {
668                                             obj.error.standard_unexpected_error_alert('export to copy status',E);
669                                         }
670                                     }
671                                 obj.list2.full_retrieve();
672                             } catch(E) {
673                                 obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.cmd_export_to_copy_status.error'), E);
674                             }
675                         }
676                     ],
677                 }
678             }
679         );
680         this.controller.render();
681
682         if (typeof xulG == 'undefined') {
683             obj.controller.view.cmd_export_to_copy_status.disabled = true;
684             obj.controller.view.cmd_export_to_copy_status.setAttribute('disabled',true);
685         }
686     
687     },
688
689     'prep_item_for_list' : function(acp_id,bucket_item_id) {
690         var obj = this;
691         try {
692             var item = {
693                 'retrieve_id' : js2JSON( [ acp_id, null, bucket_item_id ] ),
694                 'row' : {
695                     'my' : {
696                         'acn' : -2,
697                         'copy_id' : acp_id,
698                         'bucket_item_id' : bucket_item_id
699                     }
700                 }
701             };
702             return item;
703         } catch(E) {
704             obj.error.standard_unexpected_error_alert($('catStrings').getString('staff.cat.copy_buckets.prep_item_for_list.error'), E);
705             return null;
706         }
707
708     },
709
710     'scan_barcode' : function() {
711         var obj = this;
712         try {
713             var barcode = obj.controller.view.copy_bucket_barcode_entry_textbox.value;
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');