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 (au) {
31 if (au) p.set_patron(au);
32 p.redraw_patron_checkout_items();
33 p.redraw_patron_items();
34 p.redraw_patron_holds();
35 p.redraw_patron_bills();
36 p.redraw_patron_edit();
37 return render_fm(p.w.document, { 'au' : p._patron });
40 p.retrieve_patron_via_barcode = function (barcode) {
41 if (!barcode) barcode = patron_get_barcode( p._patron );
42 p.set_patron( retrieve_patron_by_barcode( barcode ) );
43 return p.display_patron();
46 p.retrieve_patron_via_id = function (id) {
47 p.set_patron( retrieve_patron_by_id( id ) );
48 return p.display_patron();
51 p.refresh = function() {
52 if (p._patron) p.retrieve_patron_via_id( p._patron.id() );
55 set_patron_display_widgets(p);
58 if (typeof(p.patron) == 'object') {
59 //p._patron = p.patron;
60 p.set_patron( p.patron );
63 p.retrieve_patron_via_barcode( p.patron );
66 sdump('D_TRACE_EXIT',arg_dump(arguments));
70 function set_patron_display_widgets(p) {
71 p.commandset_node.getElementsByAttribute('id','cmd_patron_refresh')[0].addEventListener(
79 function gen_func(i) {
80 // because otherwise i would be 5 for each closure
82 p.clamshell.set_second_deck(i);
85 var cmds = [ 'cmd_patron_checkout', 'cmd_patron_items', 'cmd_patron_holds',
86 'cmd_patron_bills', 'cmd_patron_edit', 'cmd_patron_info' ]
88 p.commandset_node.getElementsByAttribute('id',cmds[i])[0].addEventListener(
94 p.commandset_node.getElementsByAttribute('id','cmd_patron_checkout')[0].addEventListener(
97 focus_widget( p.w.document, 'patron_checkout_barcode_entry_textbox' );
101 p.commandset_node.getElementsByAttribute('id','cmd_patron_bills')[0].addEventListener(
104 focus_widget( p.w.document, 'bill_payment_amount_textbox' );
113 function patron_display_clamshell_init(p) {
114 p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
115 p.left_panel = p.clamshell.first_deck;
116 p.right_panel = p.clamshell.second_deck;
119 function patron_display_patron_items_init(p) {
120 p.patron_items = patron_items_init( { 'w' : p.w, 'node' : p.patron_items_node, 'debug' : p.app } );
122 p.redraw_patron_items = function() {
123 p.patron_items.clear_patron_items();
124 if (!p._patron.checkouts()) patron_get_checkouts( p._patron );
125 for (var i = 0; i < p._patron.checkouts().length; i++) {
126 p.patron_items.add_patron_items( [ i ] );
130 p.patron_items.register_patron_items_select_callback(
132 sdump('D_PATRON_DISPLAY','Firing patron_items_select_callback\n');
133 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
134 var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
135 /* grab cover art for selected item? */
138 p.patron_items.register_flesh_patron_items_function(
139 function (treeitem) {
140 sdump('D_PATRON_DISPLAY','Firing flesh_patron_items_function\n');
141 var record_id = treeitem.getAttribute('record_id');
142 p.patron_items.map_patron_items_to_cols( p._patron.checkouts()[ record_id ], treeitem );
145 p.patron_items.register_item_context_builder(
147 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_items\n');
148 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_items.paged_tree.popup = ' + p.patron_items.paged_tree.popup + '\n');
149 empty_widget(p.patron_items.paged_tree.popup);
150 var patron_items = get_list_from_tree_selection( p.patron_items.paged_tree.tree );
151 sdump('D_PATRON_DISPLAY','patron_items.length = ' + patron_items.length + '\n');
154 var menuitem_pi_r = p.patron_items.paged_tree.w.document.createElement('menuitem');
155 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_r );
156 menuitem_pi_r.setAttribute('label',getString('circ.context_renew'));
157 menuitem_pi_r.addEventListener(
160 sdump('D_PATRON_DISPLAY','Firing renew context for patron_items\n');
161 for (var i = 0; i < patron_items.length; i++) {
163 var idx = patron_items[i].getAttribute('record_id');
164 var circ = p._patron.checkouts()[ idx ].circ;
165 alert( js2JSON(renew_by_circ_id( circ.id() )) );
176 var menuitem_pi_c = p.patron_items.paged_tree.w.document.createElement('menuitem');
177 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_c );
178 menuitem_pi_c.setAttribute('label',getString('circ.context_checkin'));
179 menuitem_pi_c.addEventListener(
182 sdump('D_PATRON_DISPLAY','Firing checkin context for patron_items\n');
183 for (var i = 0; i < patron_items.length; i++) {
185 var idx = patron_items[i].getAttribute('record_id');
186 var copy = p._patron.checkouts()[ idx ].copy;
187 checkin_by_copy_barcode( copy.barcode(), null );
198 var menuitem_pi_s = p.patron_items.paged_tree.w.document.createElement('menuseparator');
199 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_s );
202 /*** COPY EDITOR ***/
203 var menuitem_pi_ce = p.patron_items.paged_tree.w.document.createElement('menuitem');
204 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_ce );
205 menuitem_pi_ce.setAttribute('label',getString('circ.context_edit'));
206 menuitem_pi_ce.addEventListener(
209 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_items\n');
210 for (var i = 0; i < patron_items.length; i++) {
211 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
218 var menuitem_pi_o = p.patron_items.paged_tree.w.document.createElement('menuitem');
219 p.patron_items.paged_tree.popup.appendChild( menuitem_pi_o );
220 menuitem_pi_o.setAttribute('label',getString('circ.context_opac'));
221 menuitem_pi_o.addEventListener(
224 sdump('D_PATRON_DISPLAY','Firing opac context for patron_items\n');
225 for (var i = 0; i < patron_items.length; i++) {
226 sdump('D_PATRON_DISPLAY','Firing opac context\n');
236 function patron_display_patron_checkout_items_init(p) {
237 p.patron_checkout_items = patron_checkout_items_init( { 'w' : p.w, 'node' : p.patron_checkout_items_node, 'debug' : p.app } );
238 var tb = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_barcode_entry_textbox')[0];
239 var submit_button = p.patron_checkout_items_node.getElementsByAttribute('id','patron_checkout_submit_barcode_button')[0];
243 p.w.document.getElementById('checkout_done').addEventListener(
246 // print receipt call goes here
247 checkouts = []; p.refresh(); tb.focus();
251 p.attempt_checkout = function(barcode) {
253 //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
254 var permit_check = checkout_permit( barcode, p._patron.id(), 0 );
255 if (permit_check.status == 0) {
256 var check = checkout_by_copy_barcode( barcode, p._patron.id() );
258 checkouts.push( check );
259 p.patron_checkout_items.add_checkout_items( [ checkouts.length - 1 ] );
260 var temp = p._patron.checkouts();
262 p._patron.checkouts( temp );
263 render_fm(p.w.document, { 'au' : p._patron }); // p.display_patron();
264 p.redraw_patron_items();
268 throw(permit_check.text);
280 if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_checkout( tb.value ); }
284 submit_button.addEventListener(
287 p.attempt_checkout( tb.value );
292 p.redraw_patron_checkout_items = function() {
293 p.patron_checkout_items.clear_checkout_items();
294 for (var i = 0; i < checkouts.length; i++) {
295 p.patron_checkout_items.add_checkout_items( [ i ] );
299 p.patron_checkout_items.register_patron_checkout_items_select_callback(
301 sdump('D_PATRON_DISPLAY','Firing patron_checkout_items_select_callback\n');
302 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
303 var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
304 /* grab cover art for selected item? */
307 p.patron_checkout_items.register_flesh_patron_checkout_items_function(
308 function (treeitem) {
309 sdump('D_PATRON_DISPLAY','Firing flesh_patron_checkout_items_function\n');
310 var record_id = treeitem.getAttribute('record_id');
311 p.patron_checkout_items.map_patron_checkout_items_to_cols( checkouts[ record_id ], treeitem );
314 p.patron_checkout_items.register_checkout_context_builder(
316 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_checkout_items\n');
317 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_checkout_items.paged_tree.popup = ' + p.patron_checkout_items.paged_tree.popup + '\n');
318 empty_widget(p.patron_checkout_items.paged_tree.popup);
319 var patron_checkout_items = get_list_from_tree_selection( p.patron_checkout_items.paged_tree.tree );
322 var menuitem_pci_c = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
323 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_c );
324 menuitem_pci_c.setAttribute('label',getString('circ.context_checkin'));
325 menuitem_pci_c.addEventListener(
328 sdump('D_PATRON_DISPLAY','Firing checkin context for patron_checkout_items\n');
330 for (var i = 0; i < patron_checkout_items.length; i++) {
332 var idx = patron_checkout_items[i].getAttribute('record_id');
333 var copy = checkouts[ idx ].copy;
334 var status = checkin_by_copy_barcode( copy.barcode(), null );
335 if (status == null) { // change this to whatever it takes
336 keep_these.push( checkouts[ idx ] );
338 checkouts = keep_these;
339 alert( js2JSON( status ) );
350 var menuitem_pci_s = p.patron_checkout_items.paged_tree.w.document.createElement('menuseparator');
351 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_s );
354 /*** COPY EDITOR ***/
355 var menuitem_pci_ce = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
356 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_ce );
357 menuitem_pci_ce.setAttribute('label',getString('circ.context_edit'));
358 menuitem_pci_ce.addEventListener(
361 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_checkout_items\n');
362 for (var i = 0; i < patron_checkout_items.length; i++) {
363 var idx = patron_checkout_items[i].getAttribute('record_id');
364 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
371 var menuitem_pci_o = p.patron_checkout_items.paged_tree.w.document.createElement('menuitem');
372 p.patron_checkout_items.paged_tree.popup.appendChild( menuitem_pci_o );
373 menuitem_pci_o.setAttribute('label',getString('circ.context_opac'));
374 menuitem_pci_o.addEventListener(
377 sdump('D_PATRON_DISPLAY','Firing opac context for patron_checkout_items\n');
378 for (var i = 0; i < patron_checkout_items.length; i++) {
379 var idx = patron_checkout_items[i].getAttribute('record_id');
380 sdump('D_PATRON_DISPLAY','Firing opac context\n');
390 function patron_display_patron_holds_init(p) {
391 p.patron_holds = patron_holds_init( { 'w' : p.w, 'node' : p.patron_holds_node, 'debug' : p.app } );
393 p.redraw_patron_holds = function() {
394 p.patron_holds.clear_patron_holds();
395 if (!p._patron.hold_requests()) patron_get_holds( p._patron );
396 for (var i = 0; i < p._patron.hold_requests().length; i++) {
397 p.patron_holds.add_patron_holds( [ i ] );
401 p.patron_holds.register_patron_holds_select_callback(
403 sdump('D_PATRON_DISPLAY','Firing patron_holds_select_callback\n');
404 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\n');
405 var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
406 /* grab cover art for selected item? */
409 p.patron_holds.register_flesh_patron_holds_function(
410 function (treeitem) {
411 sdump('D_PATRON_DISPLAY','Firing flesh_patron_holds_function\n');
412 var record_id = treeitem.getAttribute('record_id');
413 var hold = p._patron.hold_requests()[ record_id ];
414 patron_get_hold_status(
417 var result = request.getResultObject();
418 hold.status( hold_status_as_text( result ) );
419 p.patron_holds.map_patron_holds_to_cols( hold, treeitem );
424 p.patron_holds.register_item_context_builder(
426 sdump('D_PATRON_DISPLAY','Firing context_builder for patron_holds\n');
427 sdump('D_PATRON_DISPLAY','ev.target = ' + ev.target + '\np.patron_holds.paged_tree.popup = ' + p.patron_holds.paged_tree.popup + '\n');
428 empty_widget(p.patron_holds.paged_tree.popup);
429 var patron_holds = get_list_from_tree_selection( p.patron_holds.paged_tree.tree );
430 sdump('D_PATRON_DISPLAY','patron_holds.length = ' + patron_holds.length + '\n');
432 /*** CANCEL HOLD ***/
433 var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
434 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
435 menuitem_ph_ce.setAttribute('label',getString('circ.context_cancel_hold'));
436 menuitem_ph_ce.addEventListener(
439 sdump('D_PATRON_DISPLAY','Firing cancel hold context for patron_holds\n');
440 for (var i = 0; i < patron_holds.length; i++) {
441 sdump('D_PATRON_DISPLAY','Firing cancel edit context\n');
442 var record_id = patron_holds[i].getAttribute('record_id');
443 var hold = p._patron.hold_requests()[ record_id ];
452 var menuitem_ph_s = p.patron_holds.paged_tree.w.document.createElement('menuseparator');
453 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_s );
455 /*** COPY EDITOR ***/
456 var menuitem_ph_ce = p.patron_holds.paged_tree.w.document.createElement('menuitem');
457 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_ce );
458 menuitem_ph_ce.setAttribute('label',getString('circ.context_edit'));
459 menuitem_ph_ce.addEventListener(
462 sdump('D_PATRON_DISPLAY','Firing copy editor context for patron_holds\n');
463 for (var i = 0; i < patron_holds.length; i++) {
464 sdump('D_PATRON_DISPLAY','Firing copy edit context\n');
471 var menuitem_ph_o = p.patron_holds.paged_tree.w.document.createElement('menuitem');
472 p.patron_holds.paged_tree.popup.appendChild( menuitem_ph_o );
473 menuitem_ph_o.setAttribute('label',getString('circ.context_opac'));
474 menuitem_ph_o.addEventListener(
477 sdump('D_PATRON_DISPLAY','Firing opac context for patron_holds\n');
478 for (var i = 0; i < patron_holds.length; i++) {
479 sdump('D_PATRON_DISPLAY','Firing opac context\n');
489 function patron_display_patron_bills_init(p) {
490 p.patron_bills = patron_bills_init( {
492 'node' : p.patron_bills_node,
496 p.patron_bills.refresh = function() { p.refresh(); }
498 p.redraw_patron_bills = function() {
500 p.patron_bills.clear_patron_bills();
501 if (!p._patron.bills) patron_get_bills( p._patron );
502 p.patron_bills.add_patron_bills( p._patron.bills );
504 sdump('D_ERROR',js2JSON(E) + '\n');
509 function patron_display_patron_edit_init(p) {
510 p.patron_edit = patron_edit_init( {
512 'node' : p.patron_edit_node,
516 p.patron_edit.refresh = function() { p.refresh(); }
518 p.redraw_patron_edit = function() {
520 p.patron_edit.clear_patron_edit();
521 p.patron_edit.add_rows( p._patron );
523 sdump('D_ERROR',js2JSON(E) + '\n');