]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_display.js
context checkin tweaks, and columns again
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / patron / patron_display.js
1 sdump('D_TRACE','Loading patron_display.js\n');
2
3 function patron_display_init(p) {
4         sdump('D_PATRON_DISPLAY',"TESTING: patron_display.js: " + mw.G['main_test_variable'] + '\n');
5         sdump('D_CONSTRUCTOR',arg_dump(arguments));
6
7         // gives: p.clamshell, p.right_panel, p.left_panel
8         patron_display_clamshell_init(p);
9
10         // gives: p.patron_items, p.redraw_patron_items
11         patron_display_patron_items_init(p);
12
13         // gives: p.patron_checkout_items, p.redraw_patron_checkout_items
14         patron_display_patron_checkout_items_init(p);
15
16         // gives: p.patron_holds, p.redraw_patron_holds
17         patron_display_patron_holds_init(p);
18
19         // gives: p.patron_bills, p.redraw_patron_bills
20         patron_display_patron_bills_init(p);
21
22         // gives: p.patron_edit, p.redraw_patron_edit
23         patron_display_patron_edit_init(p);
24
25         //patron_display_survey_init(p);
26
27         p.set_patron = function (au) {
28                 p.patron_edit._patron = au;
29                 return p._patron = au;
30         }
31
32         p.display_patron = function (exceptions) {
33                 if (!exceptions) exceptions = {};
34                 if (!exceptions.all) {
35                         if (!exceptions.patron_checkout_items) p.redraw_patron_checkout_items();
36                         if (!exceptions.patron_items) p.redraw_patron_items();
37                         if (!exceptions.patron_holds) p.redraw_patron_holds();
38                         if (!exceptions.patron_bills) p.redraw_patron_bills();
39                         if (!exceptions.patron_display_survey) patron_display_survey_init(p);
40                         //if (!exceptions.patron_edit) p.redraw_patron_edit();
41                 }
42                 return render_fm(p.w.document, { 'au' : p._patron });
43         }
44         p.redraw = p.display_patron;
45
46         p.retrieve_patron_via_barcode = function (barcode) {
47                 if (!barcode) barcode = patron_get_barcode( p._patron );
48                 p.set_patron( retrieve_patron_by_barcode( barcode ) );
49                 return p.display_patron( {} );
50         }
51
52         p.retrieve_patron_via_id = function (id, exceptions) {
53                 p.set_patron( retrieve_patron_by_id( id ) );
54                 return p.display_patron(exceptions);
55         }
56
57         p.refresh = function(exceptions) {
58                 if (p._patron) p.retrieve_patron_via_id( p._patron.id(), exceptions );
59         }
60
61         set_patron_display_widgets(p);
62
63         if (p.patron) {
64                 if (typeof(p.patron) == 'object') {
65                         //p._patron = p.patron;
66                         p.set_patron( p.patron );
67                         p.display_patron();
68                 } else
69                         p.retrieve_patron_via_barcode( p.patron );
70         }
71
72         sdump('D_TRACE_EXIT',arg_dump(arguments));
73         return p;
74 }
75
76 function set_patron_display_widgets(p) {
77         p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
78                 'command',
79                 function (ev) {
80                         p.refresh();
81                 },
82                 false
83         );
84
85         function gen_func(i) {
86                 // because otherwise i would be 5 for each closure
87                 return function(ev) {
88                         p.clamshell.set_second_deck(i);
89                 };
90         }
91         var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds', 
92                 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
93         for (var i in cmds) {
94                 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
95                         'command',
96                         gen_func(i),
97                         false
98                 );
99         }
100         p.commandset_node.getElementsByAttribute('id','cmd_patron_checkout')[0].addEventListener(
101                 'command',
102                 function () {
103                         focus_widget( p.w.document, 'patron_checkout_barcode_entry_textbox' );
104                 },
105                 false
106         );
107         p.commandset_node.getElementsByAttribute('id','cmd_patron_bills')[0].addEventListener(
108                 'command',
109                 function () {
110                         focus_widget( p.w.document, 'bill_payment_amount_textbox' );
111                 },
112                 false
113         );
114         p.commandset_node.getElementsByAttribute('id','cmd_patron_edit')[0].addEventListener(
115                 'command',
116                 function () {
117                         p.redraw_patron_edit();
118                 },
119                 false
120         );
121
122
123
124
125 }
126
127
128 function patron_display_clamshell_init(p) {
129         p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
130         p.left_panel = p.clamshell.first_deck;
131         p.right_panel = p.clamshell.second_deck;
132 }
133
134 function patron_display_patron_items_init(p) {
135         p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'debug' : p.app } );
136
137         p.w.document.getElementById('item_print').addEventListener(
138                 'command',
139                 function(ev) {
140                         var params = { 
141                                 'au' : p._patron, 
142                                 'lib' : mw.G.user_ou,
143                                 'staff' : mw.G.user,
144                                 'header' : mw.G.itemsout_header,
145                                 'line_item' : mw.G.itemsout_line_item,
146                                 'footer' : mw.G.itemsout_footer
147                         };
148                         mw.print_itemsout_receipt( params );
149                 }, false
150         );
151
152         p.redraw_patron_items = function() {
153                 p.patron_items.clear_patron_items();
154                 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
155                 for (var i = 0; i < p._patron.checkouts().length; i++) {
156                         p.patron_items.add_patron_items( [ i ] );
157                 }
158         }
159
160         p.patron_items.register_patron_items_select_callback(
161                 function (ev) {
162                         sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
163                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
164                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
165                         /* grab cover art for selected item? */
166                 }
167         );
168         p.patron_items.register_flesh_patron_items_function(
169                 function (treeitem) {
170                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
171                         var record_id = treeitem.getAttribute('record_id'); 
172                         p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
173                 }
174         );
175         p.patron_items.register_item_context_builder(
176                 function (ev) {
177                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_items\n');
178                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_items.paged_tree.popup = ' + p.patron_items.paged_tree.popup + '\n');
179                         empty_widget(p.patron_items.paged_tree.popup);
180                         var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
181                         sdump('D_PATRON_DISPLAY','patron_items.length = ' + patron_items.length + '\n');
182
183                         /*** RENEW ***/
184                         var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
185                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
186                         menuitem_pi_r.setAttribute('label',getString('circ.context_renew'));
187                         menuitem_pi_r.addEventListener(
188                                 'command',
189                                 function (ev) {
190                                         sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
191                                         for (var i = 0; i < patron_items.length; i++) {
192                                                 try {
193                                                         var idx = patron_items[i].getAttribute('record_id'); 
194                                                         var circ = p._patron.checkouts()[ idx ].circ;
195                                                         renew_by_circ_id( circ.id() );
196                                                         p.refresh();
197                                                 } catch(E) {
198                                                         alert(E);
199                                                 }
200                                         }
201                                 },
202                                 false
203                         );
204
205                         /*** CHECKIN ***/
206                         var menuitem_pi_c = p.patron_items.paged_tree.w.document.createElement('menuitem');
207                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_c );
208                         menuitem_pi_c.setAttribute('label',getString('circ.context_checkin'));
209                         menuitem_pi_c.addEventListener(
210                                 'command',
211                                 function (ev) {
212                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
213                                         for (var i = 0; i < patron_items.length; i++) {
214                                                 try {
215                                                         var idx = patron_items[i].getAttribute('record_id'); 
216                                                         var copy = p._patron.checkouts()[ idx ].copy;
217                                                         var check = checkin_by_copy_barcode( copy.barcode(), null );
218                                                         if (check != null) {
219                                                                 if (parseInt(check.route_to)) {
220                                                                         try {
221                                                                                 check.route_to = mw.G.org_tree_hash[check.route_to].shortname();
222                                                                         } catch(E) {
223                                                                                 sdump('D_ERROR',js2JSON(E) + '\n');
224                                                                         }
225                                                                 }
226                                                                 alert('Check In: ' + check.text + '  Route To: ' + check.route_to);
227                                                         }
228                                                         p.refresh();
229                                                 } catch(E) {
230                                                         alert(E);
231                                                 }
232                                         }
233                                 },
234                                 false
235                         );
236
237                         /*** LOST ***/
238                         var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
239                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
240                         menuitem_pi_r.setAttribute('label',getString('circ.context_lost'));
241                         menuitem_pi_r.addEventListener(
242                                 'command',
243                                 function (ev) {
244                                         sdump('D_PATRON_DISPLAY','Firing lost context for patron_items\n');
245                                         for (var i = 0; i < patron_items.length; i++) {
246                                                 try {
247                                                         var idx = patron_items[i].getAttribute('record_id'); 
248                                                         var circ = p._patron.checkouts()[ idx ].circ;
249                                                         mark_circ_as_lost( circ ) ;
250                                                         p.refresh();
251                                                 } catch(E) {
252                                                         alert(E);
253                                                 }
254                                         }
255                                 },
256                                 false
257                         );
258
259                         /* separator */
260                         var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
261                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
262                         
263
264                         /*** COPY EDITOR ***/
265                         var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
266                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
267                         menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
268                         menuitem_pi_ce.addEventListener(
269                                 'command',
270                                 function (ev) {
271                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
272                                         for (var i = 0; i < patron_items.length; i++) {
273                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
274                                         }
275                                 },
276                                 false
277                         );
278
279                         /*** OPAC ***/
280                         var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
281                         p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
282                         menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
283                         menuitem_pi_o.addEventListener(
284                                 'command',
285                                 function (ev) {
286                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
287                                         for (var i = 0; i < patron_items.length; i++) {
288                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
289                                         }
290                                 },
291                                 false
292                         );
293                         
294                 }
295         );
296 }
297
298 function patron_display_patron_checkout_items_init(p) {
299         p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
300         var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
301         var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
302
303         var checkouts = [];
304
305         function print_receipt() {
306                 p._patron._current_checkouts = checkouts;
307                 var params = { 
308                         'au' : p._patron, 
309                         'lib' : mw.G.user_ou,
310                         'staff' : mw.G.user,
311                         'header' : mw.G.checkout_header,
312                         'line_item' : mw.G.checkout_line_item,
313                         'footer' : mw.G.checkout_footer
314                 };
315                 mw.print_checkout_receipt( params );
316         }
317
318         p.w.document.getElementById('checkout_print').addEventListener( 'command',print_receipt, false);
319
320         p.w.document.getElementById('checkout_done').addEventListener(
321                 'command',
322                 function () {
323                         if (p.w.document.getElementById('checkout_auto').checked) print_receipt(); 
324                         checkouts = []; p.display_patron(); tb.focus();
325                 },
326                 false
327         );
328         p.attempt_checkout = function(barcode) {
329                 try {
330                         //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
331                         var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
332                         if (permit_check.status == 0) {
333                                 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
334                                 if (check) {
335                                         checkouts.push( check );
336                                         p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
337                                         var temp = p._patron.checkouts();
338                                         temp.push( check );
339                                         p._patron.checkouts( temp );
340                                         render_fm(p.w.document, { 'au' : p._patron }); // p.display_patron();
341                                         p.redraw_patron_items();
342                                         tb.value = '';
343                                 }
344                         } else {
345                                 throw(permit_check.text);
346                         }
347                 } catch(E) {
348                         tb.select();
349                         if (typeof(E) == 'object') {
350                                 handle_error(E,true);
351                         } else {
352                                 s_alert(E);
353                         }
354                 }
355                 tb.focus();
356         }
357
358         tb.addEventListener(
359                 'keypress',
360                 function(ev) {
361                         if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
362                 },
363                 false
364         );
365         submit_button.addEventListener(
366                 'command',
367                 function(ev) {
368                         p.attempt_checkout( tb.value );
369                 },
370                 false
371         );
372
373         p.redraw_patron_checkout_items = function() {
374                 p.patron_checkout_items.clear_checkout_items();
375                 for (var i = 0; i < checkouts.length; i++) {
376                         p.patron_checkout_items.add_checkout_items( [ i ] );
377                 }
378         }
379
380         p.patron_checkout_items.register_patron_checkout_items_select_callback(
381                 function (ev) {
382                         sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
383                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
384                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
385                         /* grab cover art for selected item? */
386                 }
387         );
388         p.patron_checkout_items.register_flesh_patron_checkout_items_function(
389                 function (treeitem) {
390                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
391                         var record_id = treeitem.getAttribute('record_id'); 
392                         p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
393                 }
394         );
395         p.patron_checkout_items.register_checkout_context_builder(
396                 function (ev) {
397                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
398                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
399                         empty_widget(p.patron_checkout_items.paged_tree.popup);
400                         var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
401
402                         /*** CHECKIN ***/
403                         var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
404                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
405                         menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
406                         menuitem_pci_c.addEventListener(
407                                 'command',
408                                 function (ev) {
409                                         sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
410                                         var keep_these = [];
411                                         for (var i = 0; i < patron_checkout_items.length; i++) {
412                                                 try {
413                                                         var idx = patron_checkout_items[i].getAttribute('record_id'); 
414                                                         var copy = checkouts[ idx ].copy;
415                                                         var check = checkin_by_copy_barcode( copy.barcode(), null );
416                                                         if (check == null) { // change this to whatever it takes
417                                                                 keep_these.push( checkouts[ idx ] );    
418                                                         } else {
419                                                                 if (parseInt(check.route_to)) {
420                                                                         try {
421                                                                                 check.route_to = mw.G.org_tree_hash[check.route_to].shortname();
422                                                                         } catch(E) {
423                                                                                 sdump('D_ERROR',js2JSON(E) + '\n');
424                                                                         }
425                                                                 }
426                                                                 alert('Check In: ' + check.text + '  Route To: ' + check.route_to);
427                                                         }
428
429                                                         checkouts = keep_these;
430                                                         p.refresh();
431                                                 } catch(E) {
432                                                         alert(E);
433                                                 }
434                                         }
435                                 },
436                                 false
437                         );
438
439                         /* separator */
440                         var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
441                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
442                         
443
444                         /*** COPY EDITOR ***/
445                         var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
446                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
447                         menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
448                         menuitem_pci_ce.addEventListener(
449                                 'command',
450                                 function (ev) {
451                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
452                                         for (var i = 0; i < patron_checkout_items.length; i++) {
453                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
454                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
455                                         }
456                                 },
457                                 false
458                         );
459
460                         /*** OPAC ***/
461                         var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
462                         p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
463                         menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
464                         menuitem_pci_o.addEventListener(
465                                 'command',
466                                 function (ev) {
467                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
468                                         for (var i = 0; i < patron_checkout_items.length; i++) {
469                                                 var idx = patron_checkout_items[i].getAttribute('record_id');
470                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
471                                         }
472                                 },
473                                 false
474                         );
475                         
476                 }
477         );
478 }
479
480 function patron_display_patron_holds_init(p) {
481         p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
482
483         p.redraw_patron_holds = function() {
484                 p.patron_holds.clear_patron_holds();
485                 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
486                 for (var i = 0; i < p._patron.hold_requests().length; i++) {
487                         p.patron_holds.add_patron_holds( [ i ] );
488                 }
489         }
490
491         p.patron_holds.register_patron_holds_select_callback(
492                 function (ev) {
493                         sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
494                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
495                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
496                         /* grab cover art for selected item? */
497                 }
498         );
499         p.patron_holds.register_flesh_patron_holds_function(
500                 function (treeitem) {
501                         sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
502                         var record_id = treeitem.getAttribute('record_id'); 
503                         var hold = p._patron.hold_requests()[ record_id ];
504                         patron_get_hold_status(
505                                 hold,
506                                 function (request) {
507                                         var result = request.getResultObject();
508                                         hold.status( hold_status_as_text( result ) );
509                                         p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
510                                 }
511                         );
512                 }
513         );
514         p.patron_holds.register_item_context_builder(
515                 function (ev) {
516                         sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
517                         sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
518                         empty_widget(p.patron_holds.paged_tree.popup);
519                         var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
520                         sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
521
522                         /*** CANCEL HOLD ***/
523                         var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
524                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
525                         menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
526                         menuitem_ph_ce.addEventListener(
527                                 'command',
528                                 function (ev) {
529                                         sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
530                                         for (var i = 0; i < patron_holds.length; i++) {
531                                                 sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
532                                                 var record_id = patron_holds[i].getAttribute('record_id');
533                                                 var hold = p._patron.hold_requests()[ record_id ];
534                                                 cancel_hold( hold );
535                                         }
536                                         p.refresh();
537                                 },
538                                 false
539                         );
540
541                         /* separator */
542                         var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
543                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
544                         
545                         /*** COPY EDITOR ***/
546                         var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
547                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
548                         menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
549                         menuitem_ph_ce.addEventListener(
550                                 'command',
551                                 function (ev) {
552                                         sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
553                                         for (var i = 0; i < patron_holds.length; i++) {
554                                                 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
555                                         }
556                                 },
557                                 false
558                         );
559
560                         /*** OPAC ***/
561                         var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
562                         p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
563                         menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
564                         menuitem_ph_o.addEventListener(
565                                 'command',
566                                 function (ev) {
567                                         sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
568                                         for (var i = 0; i < patron_holds.length; i++) {
569                                                 sdump('D_PATRON_DISPLAY','Firing opac context\n');
570                                         }
571                                 },
572                                 false
573                         );
574                         
575                 }
576         );
577 }
578
579 function patron_display_patron_bills_init(p) {
580         p.patron_bills = patron_bills_init( { 
581                 'w' : p.w, 
582                 'node' : p.patron_bills_node, 
583                 'debug' : p.app 
584         } );
585
586         p.patron_bills.refresh = function() { p.refresh(); }
587
588         p.redraw_patron_bills = function() {
589                 try {
590                         p.patron_bills.clear_patron_bills();
591                         if (!p._patron.bills) patron_get_bills( p._patron );
592                         p.patron_bills.add_patron_bills( p._patron.bills );
593                 } catch(E) {
594                         sdump('D_ERROR',js2JSON(E) + '\n');
595                 }
596         }
597 }
598
599 function patron_display_patron_edit_init(p) {
600         /*
601         p.patron_edit = patron_edit_init( { 
602                 'w' : p.w, 
603                 'node' : p.patron_edit_node, 
604                 'debug' : p.app
605         } );
606
607         p.patron_edit.redisplay = function() { p.display_patron( {'patron_edit':true} ); }
608         p.patron_edit.refresh = function() { p.refresh( {'patron_edit':true} ); }
609
610         p.redraw_patron_edit = function() {
611                 try {
612                         p.patron_edit.clear_patron_edit();
613                         p.patron_edit.add_rows( p._patron );
614                 } catch(E) {
615                         sdump('D_ERROR',js2JSON(E) + '\n');
616                 }
617         }
618         */
619         /* shoehorn in the old legacy stuff */
620         p.patron_edit = {};
621         p.redraw_patron_edit = function() { 
622                 empty_widget( p.patron_edit_node );
623                 setTimeout(
624                         function() {
625                                 var frame = p.w.document.createElement('iframe');
626                                 p.patron_edit_node.appendChild( frame );
627                                 frame.setAttribute('flex','1');
628                                 frame.setAttribute('src','chrome://evergreen/content/patron/patron_edit_legacy.xul');
629                                 frame.contentWindow.mw = mw;
630                                 frame.contentWindow.params = {};
631                                 var barcode = patron_get_barcode( p._patron );
632                                 frame.contentWindow.params.barcode = barcode;
633                                 frame.contentWindow.params._patron = p._patron;
634                                 frame.contentWindow.patron_save_callback = function ( params ) {
635                                         p._patron = params.au;
636                                         p.display_patron();
637                                 }
638                                 p.patron_edit.frame = frame;
639                         }, 0
640                 );
641         }
642 }
643
644 function patron_display_survey_init(p) {
645         var gb = p.w.document.getElementById('PatronDisplaySurvey_groupbox');
646         var count = gb.childNodes.length; for (var i = 1; i < count; i++) { gb.removeChild( gb.lastChild ); } // all but caption
647         mw.user_request(
648                 'open-ils.circ', 'open-ils.circ.survey.retrieve.required', [ mw.G.auth_ses[0] ],
649                 function (request) {
650                         var surveys = request.getResultObject();
651                         for (var i = 0; i < surveys.length; i++) {
652
653                                 var survey = a_get(surveys, i);
654                         
655                                 var hbox = document.createElement('hbox');
656                                 gb.appendChild(hbox);
657
658                                 var name_label = document.createElement('label');
659                                 name_label.setAttribute('value',survey.name());
660                                 hbox.appendChild(name_label);
661
662                                 var answer_label = document.createElement('label');
663                                 answer_label.setAttribute('value','');
664                                 hbox.appendChild(answer_label);
665
666                                 var taken_label = document.createElement('label');
667                                 taken_label.setAttribute('value','Not Taken');
668                                 hbox.appendChild(taken_label);
669
670                                 mw.user_request(
671                                         'open-ils.circ', 'open-ils.circ.survey.response.retrieve',
672                                         [ mw.G.auth_ses[0], survey.id(), p._patron.id() ],
673                                         function (request) {
674                                                 var responses = request.getResultObject();
675                                                 if (responses.length > 0) {
676                                                         var response = responses.pop(); // last response
677                                                         var date;
678                                                         if (response.effective_date()) {
679                                                                 date = formatted_date( response.effective_date(), '%D' );
680                                                         } else {
681                                                                 date = formatted_date( response.answer_date(), '%D' );
682                                                         }
683                                                         taken_label.setAttribute('value',date);
684                                                         var answer = find_id_object_in_list( // first answer
685                                                                 find_id_object_in_list(
686                                                                         survey.questions(),
687                                                                         response.question()
688                                                                 ).answers(),
689                                                                 response.answer()
690                                                         ).answer();
691                                                         answer_label.setAttribute('value',answer);
692                                                 }
693                                         }
694                                 );
695                         }
696                 }
697         );
698 }