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 //patron_display_survey_init(p);
27 p.set_patron = function (au) {
28 p.patron_edit._patron = au;
29 return p._patron = au;
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();
42 return render_fm(p.w.document, { 'au' : p._patron });
44 p.redraw = p.display_patron;
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( {} );
52 p.retrieve_patron_via_id = function (id, exceptions) {
53 p.set_patron( retrieve_patron_by_id( id ) );
54 return p.display_patron(exceptions);
57 p.refresh = function(exceptions) {
58 if (p._patron) p.retrieve_patron_via_id( p._patron.id(), exceptions );
61 set_patron_display_widgets(p);
64 if (typeof(p.patron) == 'object') {
65 //p._patron = p.patron;
66 p.set_patron( p.patron );
69 p.retrieve_patron_via_barcode( p.patron );
72 sdump('D_TRACE_EXIT',arg_dump(arguments));
76 function set_patron_display_widgets(p) {
77 p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
85 function gen_func(i) {
86 // because otherwise i would be 5 for each closure
88 p.clamshell.set_second_deck(i);
91 var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds',
92 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
94 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
100 p.commandset_node.getElementsByAttribute('id','cmd_patron_checkout')[0].addEventListener(
103 focus_widget( p.w.document, 'patron_checkout_barcode_entry_textbox' );
107 p.commandset_node.getElementsByAttribute('id','cmd_patron_bills')[0].addEventListener(
110 focus_widget( p.w.document, 'bill_payment_amount_textbox' );
114 p.commandset_node.getElementsByAttribute('id','cmd_patron_edit')[0].addEventListener(
117 p.redraw_patron_edit();
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;
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 } );
137 p.w.document.getElementById('item_print').addEventListener(
142 'lib' : mw.G.user_ou,
144 'header' : mw.G.itemsout_header,
145 'line_item' : mw.G.itemsout_line_item,
146 'footer' : mw.G.itemsout_footer
148 mw.print_itemsout_receipt( params );
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 ] );
160 p.patron_items.register_patron_items_select_callback(
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? */
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 );
175 p.patron_items.register_item_context_builder(
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');
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(
190 sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
191 for (var i = 0; i < patron_items.length; i++) {
193 var idx = patron_items[i].getAttribute('record_id');
194 var circ = p._patron.checkouts()[ idx ].circ;
195 alert( js2JSON(renew_by_circ_id( circ.id() )) );
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(
212 sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
213 for (var i = 0; i < patron_items.length; i++) {
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.status == 0) {
219 alert('Check In: ' + check.text + ' Route To: ' + check.route_to);
221 alert('Check In: ' + check.text + ' Route To: ' + mw.G.org_tree_hash[check.route_to].shortname());
233 var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
234 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
237 /*** COPY EDITOR ***/
238 var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
239 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
240 menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
241 menuitem_pi_ce.addEventListener(
244 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
245 for (var i = 0; i < patron_items.length; i++) {
246 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
253 var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
254 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
255 menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
256 menuitem_pi_o.addEventListener(
259 sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
260 for (var i = 0; i < patron_items.length; i++) {
261 sdump('D_PATRON_DISPLAY','Firing opac context\n');
271 function patron_display_patron_checkout_items_init(p) {
272 p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
273 var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
274 var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
278 function print_receipt() {
279 p._patron._current_checkouts = checkouts;
282 'lib' : mw.G.user_ou,
284 'header' : mw.G.checkout_header,
285 'line_item' : mw.G.checkout_line_item,
286 'footer' : mw.G.checkout_footer
288 mw.print_checkout_receipt( params );
291 p.w.document.getElementById('checkout_print').addEventListener( 'command',print_receipt, false);
293 p.w.document.getElementById('checkout_done').addEventListener(
296 if (p.w.document.getElementById('checkout_auto').checked) print_receipt();
297 checkouts = []; p.display_patron(); tb.focus();
301 p.attempt_checkout = function(barcode) {
303 //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
304 var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
305 if (permit_check.status == 0) {
306 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
308 checkouts.push( check );
309 p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
310 var temp = p._patron.checkouts();
312 p._patron.checkouts( temp );
313 render_fm(p.w.document, { 'au' : p._patron }); // p.display_patron();
314 p.redraw_patron_items();
318 throw(permit_check.text);
322 if (typeof(E) == 'object') {
323 handle_error(E,true);
334 if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
338 submit_button.addEventListener(
341 p.attempt_checkout( tb.value );
346 p.redraw_patron_checkout_items = function() {
347 p.patron_checkout_items.clear_checkout_items();
348 for (var i = 0; i < checkouts.length; i++) {
349 p.patron_checkout_items.add_checkout_items( [ i ] );
353 p.patron_checkout_items.register_patron_checkout_items_select_callback(
355 sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
356 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
357 var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
358 /* grab cover art for selected item? */
361 p.patron_checkout_items.register_flesh_patron_checkout_items_function(
362 function (treeitem) {
363 sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
364 var record_id = treeitem.getAttribute('record_id');
365 p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
368 p.patron_checkout_items.register_checkout_context_builder(
370 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
371 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
372 empty_widget(p.patron_checkout_items.paged_tree.popup);
373 var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
376 var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
377 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
378 menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
379 menuitem_pci_c.addEventListener(
382 sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
384 for (var i = 0; i < patron_checkout_items.length; i++) {
386 var idx = patron_checkout_items[i].getAttribute('record_id');
387 var copy = checkouts[ idx ].copy;
388 var check = checkin_by_copy_barcode( copy.barcode(), null );
389 if (check == null) { // change this to whatever it takes
390 keep_these.push( checkouts[ idx ] );
392 checkouts = keep_these;
393 if (check.status == 0) {
394 alert('Check In: ' + check.text + ' Route To: ' + check.route_to);
396 alert('Check In: ' + check.text + ' Route To: ' + mw.G.org_tree_hash[check.route_to].shortname());
408 var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
409 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
412 /*** COPY EDITOR ***/
413 var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
414 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
415 menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
416 menuitem_pci_ce.addEventListener(
419 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
420 for (var i = 0; i < patron_checkout_items.length; i++) {
421 var idx = patron_checkout_items[i].getAttribute('record_id');
422 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
429 var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
430 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
431 menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
432 menuitem_pci_o.addEventListener(
435 sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
436 for (var i = 0; i < patron_checkout_items.length; i++) {
437 var idx = patron_checkout_items[i].getAttribute('record_id');
438 sdump('D_PATRON_DISPLAY','Firing opac context\n');
448 function patron_display_patron_holds_init(p) {
449 p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
451 p.redraw_patron_holds = function() {
452 p.patron_holds.clear_patron_holds();
453 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
454 for (var i = 0; i < p._patron.hold_requests().length; i++) {
455 p.patron_holds.add_patron_holds( [ i ] );
459 p.patron_holds.register_patron_holds_select_callback(
461 sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
462 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
463 var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
464 /* grab cover art for selected item? */
467 p.patron_holds.register_flesh_patron_holds_function(
468 function (treeitem) {
469 sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
470 var record_id = treeitem.getAttribute('record_id');
471 var hold = p._patron.hold_requests()[ record_id ];
472 patron_get_hold_status(
475 var result = request.getResultObject();
476 hold.status( hold_status_as_text( result ) );
477 p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
482 p.patron_holds.register_item_context_builder(
484 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
485 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
486 empty_widget(p.patron_holds.paged_tree.popup);
487 var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
488 sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
490 /*** CANCEL HOLD ***/
491 var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
492 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
493 menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
494 menuitem_ph_ce.addEventListener(
497 sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
498 for (var i = 0; i < patron_holds.length; i++) {
499 sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
500 var record_id = patron_holds[i].getAttribute('record_id');
501 var hold = p._patron.hold_requests()[ record_id ];
510 var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
511 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
513 /*** COPY EDITOR ***/
514 var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
515 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
516 menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
517 menuitem_ph_ce.addEventListener(
520 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
521 for (var i = 0; i < patron_holds.length; i++) {
522 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
529 var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
530 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
531 menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
532 menuitem_ph_o.addEventListener(
535 sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
536 for (var i = 0; i < patron_holds.length; i++) {
537 sdump('D_PATRON_DISPLAY','Firing opac context\n');
547 function patron_display_patron_bills_init(p) {
548 p.patron_bills = patron_bills_init( {
550 'node' : p.patron_bills_node,
554 p.patron_bills.refresh = function() { p.refresh(); }
556 p.redraw_patron_bills = function() {
558 p.patron_bills.clear_patron_bills();
559 if (!p._patron.bills) patron_get_bills( p._patron );
560 p.patron_bills.add_patron_bills( p._patron.bills );
562 sdump('D_ERROR',js2JSON(E) + '\n');
567 function patron_display_patron_edit_init(p) {
569 p.patron_edit = patron_edit_init( {
571 'node' : p.patron_edit_node,
575 p.patron_edit.redisplay = function() { p.display_patron( {'patron_edit':true} ); }
576 p.patron_edit.refresh = function() { p.refresh( {'patron_edit':true} ); }
578 p.redraw_patron_edit = function() {
580 p.patron_edit.clear_patron_edit();
581 p.patron_edit.add_rows( p._patron );
583 sdump('D_ERROR',js2JSON(E) + '\n');
587 /* shoehorn in the old legacy stuff */
589 p.redraw_patron_edit = function() {
590 empty_widget( p.patron_edit_node );
593 var frame = p.w.document.createElement('iframe');
594 p.patron_edit_node.appendChild( frame );
595 frame.setAttribute('flex','1');
596 frame.setAttribute('src','chrome://evergreen/content/patron/patron_edit_legacy.xul');
597 frame.contentWindow.mw = mw;
598 frame.contentWindow.params = {};
599 var barcode = patron_get_barcode( p._patron );
600 frame.contentWindow.params.barcode = barcode;
601 frame.contentWindow.params._patron = p._patron;
602 frame.contentWindow.patron_save_callback = function ( params ) {
603 p._patron = params.au;
606 p.patron_edit.frame = frame;
612 function patron_display_survey_init(p) {
613 var gb = p.w.document.getElementById('PatronDisplaySurvey_groupbox');
614 var count = gb.childNodes.length; for (var i = 1; i < count; i++) { gb.removeChild( gb.lastChild ); } // all but caption
616 'open-ils.circ', 'open-ils.circ.survey.retrieve.required', [ mw.G.auth_ses[0] ],
618 var surveys = request.getResultObject();
619 for (var i = 0; i < surveys.length; i++) {
621 var survey = a_get(surveys, i);
623 var hbox = document.createElement('hbox');
624 gb.appendChild(hbox);
626 var name_label = document.createElement('label');
627 name_label.setAttribute('value',survey.name());
628 hbox.appendChild(name_label);
630 var answer_label = document.createElement('label');
631 answer_label.setAttribute('value','');
632 hbox.appendChild(answer_label);
634 var taken_label = document.createElement('label');
635 taken_label.setAttribute('value','Not Taken');
636 hbox.appendChild(taken_label);
639 'open-ils.circ', 'open-ils.circ.survey.response.retrieve',
640 [ mw.G.auth_ses[0], survey.id(), p._patron.id() ],
642 var responses = request.getResultObject();
643 if (responses.length > 0) {
644 var response = responses.pop(); // last response
646 if (response.effective_date()) {
647 date = formatted_date( response.effective_date(), '%D' );
649 date = formatted_date( response.answer_date(), '%D' );
651 taken_label.setAttribute('value',date);
652 var answer = find_id_object_in_list( // first answer
653 find_id_object_in_list(
659 answer_label.setAttribute('value',answer);