1 sdump('D_TRACE','Loading patron_display.js\n');
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));
7 // gives: p.clamshell, p.right_panel, p.left_panel
8 patron_display_clamshell_init(p);
10 // gives: p.patron_items, p.redraw_patron_items
11 patron_display_patron_items_init(p);
13 // gives: p.patron_checkout_items, p.redraw_patron_checkout_items
14 patron_display_patron_checkout_items_init(p);
16 // gives: p.patron_holds, p.redraw_patron_holds
17 patron_display_patron_holds_init(p);
19 // gives: p.patron_bills, p.redraw_patron_bills
20 patron_display_patron_bills_init(p);
22 // gives: p.patron_edit, p.redraw_patron_edit
23 patron_display_patron_edit_init(p);
25 p.set_patron = function (au) {
26 p.patron_edit._patron = au;
27 return p._patron = au;
30 p.display_patron = function (exceptions) {
31 if (!exceptions) exceptions = {};
32 if (!exceptions.all) {
33 if (!exceptions.patron_checkout_items) p.redraw_patron_checkout_items();
34 if (!exceptions.patron_items) p.redraw_patron_items();
35 if (!exceptions.patron_holds) p.redraw_patron_holds();
36 if (!exceptions.patron_bills) p.redraw_patron_bills();
37 //if (!exceptions.patron_edit) p.redraw_patron_edit();
39 return render_fm(p.w.document, { 'au' : p._patron });
41 p.redraw = p.display_patron;
43 p.retrieve_patron_via_barcode = function (barcode) {
44 if (!barcode) barcode = patron_get_barcode( p._patron );
45 p.set_patron( retrieve_patron_by_barcode( barcode ) );
46 return p.display_patron( {} );
49 p.retrieve_patron_via_id = function (id, exceptions) {
50 p.set_patron( retrieve_patron_by_id( id ) );
51 return p.display_patron(exceptions);
54 p.refresh = function(exceptions) {
55 if (p._patron) p.retrieve_patron_via_id( p._patron.id(), exceptions );
58 set_patron_display_widgets(p);
61 if (typeof(p.patron) == 'object') {
62 //p._patron = p.patron;
63 p.set_patron( p.patron );
66 p.retrieve_patron_via_barcode( p.patron );
69 sdump('D_TRACE_EXIT',arg_dump(arguments));
73 function set_patron_display_widgets(p) {
74 p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
82 function gen_func(i) {
83 // because otherwise i would be 5 for each closure
85 p.clamshell.set_second_deck(i);
88 var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds',
89 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
91 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
97 p.commandset_node.getElementsByAttribute('id','cmd_patron_checkout')[0].addEventListener(
100 focus_widget( p.w.document, 'patron_checkout_barcode_entry_textbox' );
104 p.commandset_node.getElementsByAttribute('id','cmd_patron_bills')[0].addEventListener(
107 focus_widget( p.w.document, 'bill_payment_amount_textbox' );
111 p.commandset_node.getElementsByAttribute('id','cmd_patron_edit')[0].addEventListener(
114 p.redraw_patron_edit();
125 function patron_display_clamshell_init(p) {
126 p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
127 p.left_panel = p.clamshell.first_deck;
128 p.right_panel = p.clamshell.second_deck;
131 function patron_display_patron_items_init(p) {
132 p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'debug' : p.app } );
134 p.w.document.getElementById('item_print').addEventListener(
139 'lib' : mw.G.user_ou,
141 'header' : mw.G.itemsout_header,
142 'line_item' : mw.G.itemsout_line_item,
143 'footer' : mw.G.itemsout_footer
145 mw.print_itemsout_receipt( params );
149 p.redraw_patron_items = function() {
150 p.patron_items.clear_patron_items();
151 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
152 for (var i = 0; i < p._patron.checkouts().length; i++) {
153 p.patron_items.add_patron_items( [ i ] );
157 p.patron_items.register_patron_items_select_callback(
159 sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
160 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
161 var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
162 /* grab cover art for selected item? */
165 p.patron_items.register_flesh_patron_items_function(
166 function (treeitem) {
167 sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
168 var record_id = treeitem.getAttribute('record_id');
169 p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
172 p.patron_items.register_item_context_builder(
174 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_items\n');
175 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_items.paged_tree.popup = ' + p.patron_items.paged_tree.popup + '\n');
176 empty_widget(p.patron_items.paged_tree.popup);
177 var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
178 sdump('D_PATRON_DISPLAY','patron_items.length = ' + patron_items.length + '\n');
181 var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
182 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
183 menuitem_pi_r.setAttribute('label',getString('circ.context_renew'));
184 menuitem_pi_r.addEventListener(
187 sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
188 for (var i = 0; i < patron_items.length; i++) {
190 var idx = patron_items[i].getAttribute('record_id');
191 var circ = p._patron.checkouts()[ idx ].circ;
192 alert( js2JSON(renew_by_circ_id( circ.id() )) );
203 var menuitem_pi_c = p.patron_items.paged_tree.w.document.createElement('menuitem');
204 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_c );
205 menuitem_pi_c.setAttribute('label',getString('circ.context_checkin'));
206 menuitem_pi_c.addEventListener(
209 sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
210 for (var i = 0; i < patron_items.length; i++) {
212 var idx = patron_items[i].getAttribute('record_id');
213 var copy = p._patron.checkouts()[ idx ].copy;
214 var check = checkin_by_copy_barcode( copy.barcode(), null );
215 if (check.status == 0) {
216 alert('Check In: ' + check.text + ' Route To: ' + check.route_to);
218 alert('Check In: ' + check.text + ' Route To: ' + mw.G.org_tree_hash[check.route_to].shortname());
230 var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
231 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
234 /*** COPY EDITOR ***/
235 var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
236 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
237 menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
238 menuitem_pi_ce.addEventListener(
241 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
242 for (var i = 0; i < patron_items.length; i++) {
243 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
250 var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
251 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
252 menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
253 menuitem_pi_o.addEventListener(
256 sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
257 for (var i = 0; i < patron_items.length; i++) {
258 sdump('D_PATRON_DISPLAY','Firing opac context\n');
268 function patron_display_patron_checkout_items_init(p) {
269 p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
270 var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
271 var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
275 function print_receipt() {
276 p._patron._current_checkouts = checkouts;
279 'lib' : mw.G.user_ou,
281 'header' : mw.G.checkout_header,
282 'line_item' : mw.G.checkout_line_item,
283 'footer' : mw.G.checkout_footer
285 mw.print_checkout_receipt( params );
288 p.w.document.getElementById('checkout_print').addEventListener( 'command',print_receipt, false);
290 p.w.document.getElementById('checkout_done').addEventListener(
293 if (p.w.document.getElementById('checkout_auto').checked) print_receipt();
294 checkouts = []; p.display_patron(); tb.focus();
298 p.attempt_checkout = function(barcode) {
300 //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
301 var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
302 if (permit_check.status == 0) {
303 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
305 checkouts.push( check );
306 p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
307 var temp = p._patron.checkouts();
309 p._patron.checkouts( temp );
310 render_fm(p.w.document, { 'au' : p._patron }); // p.display_patron();
311 p.redraw_patron_items();
315 throw(permit_check.text);
319 if (typeof(E) == 'object') {
320 handle_error(E,true);
331 if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
335 submit_button.addEventListener(
338 p.attempt_checkout( tb.value );
343 p.redraw_patron_checkout_items = function() {
344 p.patron_checkout_items.clear_checkout_items();
345 for (var i = 0; i < checkouts.length; i++) {
346 p.patron_checkout_items.add_checkout_items( [ i ] );
350 p.patron_checkout_items.register_patron_checkout_items_select_callback(
352 sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
353 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
354 var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
355 /* grab cover art for selected item? */
358 p.patron_checkout_items.register_flesh_patron_checkout_items_function(
359 function (treeitem) {
360 sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
361 var record_id = treeitem.getAttribute('record_id');
362 p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
365 p.patron_checkout_items.register_checkout_context_builder(
367 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
368 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
369 empty_widget(p.patron_checkout_items.paged_tree.popup);
370 var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
373 var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
374 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
375 menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
376 menuitem_pci_c.addEventListener(
379 sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
381 for (var i = 0; i < patron_checkout_items.length; i++) {
383 var idx = patron_checkout_items[i].getAttribute('record_id');
384 var copy = checkouts[ idx ].copy;
385 var check = checkin_by_copy_barcode( copy.barcode(), null );
386 if (check == null) { // change this to whatever it takes
387 keep_these.push( checkouts[ idx ] );
389 checkouts = keep_these;
390 if (check.status == 0) {
391 alert('Check In: ' + check.text + ' Route To: ' + check.route_to);
393 alert('Check In: ' + check.text + ' Route To: ' + mw.G.org_tree_hash[check.route_to].shortname());
405 var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
406 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
409 /*** COPY EDITOR ***/
410 var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
411 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
412 menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
413 menuitem_pci_ce.addEventListener(
416 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
417 for (var i = 0; i < patron_checkout_items.length; i++) {
418 var idx = patron_checkout_items[i].getAttribute('record_id');
419 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
426 var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
427 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
428 menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
429 menuitem_pci_o.addEventListener(
432 sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
433 for (var i = 0; i < patron_checkout_items.length; i++) {
434 var idx = patron_checkout_items[i].getAttribute('record_id');
435 sdump('D_PATRON_DISPLAY','Firing opac context\n');
445 function patron_display_patron_holds_init(p) {
446 p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
448 p.redraw_patron_holds = function() {
449 p.patron_holds.clear_patron_holds();
450 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
451 for (var i = 0; i < p._patron.hold_requests().length; i++) {
452 p.patron_holds.add_patron_holds( [ i ] );
456 p.patron_holds.register_patron_holds_select_callback(
458 sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
459 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
460 var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
461 /* grab cover art for selected item? */
464 p.patron_holds.register_flesh_patron_holds_function(
465 function (treeitem) {
466 sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
467 var record_id = treeitem.getAttribute('record_id');
468 var hold = p._patron.hold_requests()[ record_id ];
469 patron_get_hold_status(
472 var result = request.getResultObject();
473 hold.status( hold_status_as_text( result ) );
474 p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
479 p.patron_holds.register_item_context_builder(
481 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
482 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
483 empty_widget(p.patron_holds.paged_tree.popup);
484 var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
485 sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
487 /*** CANCEL HOLD ***/
488 var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
489 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
490 menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
491 menuitem_ph_ce.addEventListener(
494 sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
495 for (var i = 0; i < patron_holds.length; i++) {
496 sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
497 var record_id = patron_holds[i].getAttribute('record_id');
498 var hold = p._patron.hold_requests()[ record_id ];
507 var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
508 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
510 /*** COPY EDITOR ***/
511 var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
512 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
513 menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
514 menuitem_ph_ce.addEventListener(
517 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
518 for (var i = 0; i < patron_holds.length; i++) {
519 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
526 var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
527 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
528 menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
529 menuitem_ph_o.addEventListener(
532 sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
533 for (var i = 0; i < patron_holds.length; i++) {
534 sdump('D_PATRON_DISPLAY','Firing opac context\n');
544 function patron_display_patron_bills_init(p) {
545 p.patron_bills = patron_bills_init( {
547 'node' : p.patron_bills_node,
551 p.patron_bills.refresh = function() { p.refresh(); }
553 p.redraw_patron_bills = function() {
555 p.patron_bills.clear_patron_bills();
556 if (!p._patron.bills) patron_get_bills( p._patron );
557 p.patron_bills.add_patron_bills( p._patron.bills );
559 sdump('D_ERROR',js2JSON(E) + '\n');
564 function patron_display_patron_edit_init(p) {
566 p.patron_edit = patron_edit_init( {
568 'node' : p.patron_edit_node,
572 p.patron_edit.redisplay = function() { p.display_patron( {'patron_edit':true} ); }
573 p.patron_edit.refresh = function() { p.refresh( {'patron_edit':true} ); }
575 p.redraw_patron_edit = function() {
577 p.patron_edit.clear_patron_edit();
578 p.patron_edit.add_rows( p._patron );
580 sdump('D_ERROR',js2JSON(E) + '\n');
584 /* shoehorn in the old legacy stuff */
586 p.redraw_patron_edit = function() {
587 empty_widget( p.patron_edit_node );
590 var frame = p.w.document.createElement('iframe');
591 p.patron_edit_node.appendChild( frame );
592 frame.setAttribute('flex','1');
593 frame.setAttribute('src','chrome://evergreen/content/patron/patron_edit_legacy.xul');
594 frame.contentWindow.mw = mw;
595 frame.contentWindow.params = {};
596 var barcode = patron_get_barcode( p._patron );
597 frame.contentWindow.params.barcode = barcode;
598 frame.contentWindow.params._patron = p._patron;
599 frame.contentWindow.patron_save_callback = function ( params ) {
600 p._patron = params.au;
603 p.patron_edit.frame = frame;