1 dump('entering patron.summary.js\n');
3 if (typeof patron == 'undefined') patron = {};
4 patron.summary = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.window'); this.window = new util.window();
8 JSAN.use('util.network'); this.network = new util.network();
12 patron.summary.prototype = {
14 'init' : function( params ) {
18 obj.session = params['session'];
19 obj.barcode = params['barcode'];
20 obj.id = params['id'];
22 JSAN.use('OpenILS.data'); this.OpenILS = {};
23 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
25 JSAN.use('util.controller'); obj.controller = new util.controller();
31 function() { alert('Not Yet Implemented'); }
37 e.setAttribute('value',
38 obj.patron.family_name() + ', ' + obj.patron.first_given_name()
40 e.setAttribute('style','background-color: lime');
41 //FIXME//bills should become a virtual field
42 if (obj.patron.bills.length > 0)
43 e.setAttribute('style','background-color: yellow');
44 if (obj.patron.standing() == 2)
45 e.setAttribute('style','background-color: lightred');
54 e.setAttribute('value',
55 obj.OpenILS.data.hash.pgt[
66 e.setAttribute('value',
67 obj.OpenILS.data.hash.cst[
78 JSAN.use('util.money');
79 e.setAttribute('value',
80 util.money.cents_as_dollars(
81 obj.patron.credit_forward_balance()
91 JSAN.use('util.money');
93 //FIXME//adjust when .bills becomes a virtual field
94 for (var i = 0; i < obj.patron.bills.length; i++) {
95 total += util.money.dollars_float_to_cents_integer(
96 obj.patron.bills[i].balance_owed()
99 e.setAttribute('value',
100 util.money.cents_as_dollars( total )
105 'patron_checkouts' : [
109 e.setAttribute('value',
110 obj.patron.checkouts().length
119 //FIXME//Get Bill to do this correctly on server side
120 JSAN.use('util.date');
122 for (var i = 0; i < obj.patron.checkouts().length; i++) {
123 var item = obj.patron.checkouts()[i];
124 var due_date = item.circ.due_date();
125 due_date = due_date.substr(0,4)
126 + due_date.substr(5,2) + due_date.substr(8,2);
127 var today = util.date.formatted_date( new Date() , '%Y%m%d' );
128 if (today > due_date) total++;
130 e.setAttribute('value',
140 e.setAttribute('value',
141 obj.patron.hold_requests.length
146 'patron_holds_available' : [
151 for (var i = 0; i < obj.patron.hold_requests().length; i++) {
152 var hold = obj.patron.hold_requests()[i];
153 if (hold.capture_time()) total++;
155 e.setAttribute('value',
165 e.setAttribute('value',
166 obj.patron.card().barcode()
171 'patron_ident_type_1' : [
175 var ident_string = '';
176 var ident = obj.OpenILS.data.hash.cit[
177 obj.patron.ident_type()
179 if (ident) ident_string = ident.name()
180 e.setAttribute('value',
186 'patron_ident_value_1' : [
190 e.setAttribute('value',
191 obj.patron.ident_value()
196 'patron_ident_type_2' : [
200 var ident_string = '';
201 var ident = obj.OpenILS.data.hash.cit[
202 obj.patron.ident_type2()
204 if (ident) ident_string = ident.name()
205 e.setAttribute('value',
211 'patron_ident_value_2' : [
215 e.setAttribute('value',
216 obj.patron.ident_value2()
221 'patron_date_of_birth' : [
225 e.setAttribute('value',
231 'patron_day_phone' : [
235 e.setAttribute('value',
236 obj.patron.day_phone()
241 'patron_evening_phone' : [
245 e.setAttribute('value',
246 obj.patron.evening_phone()
251 'patron_other_phone' : [
255 e.setAttribute('value',
256 obj.patron.other_phone()
265 e.setAttribute('value',
271 'patron_photo_url' : [
275 e.setAttribute('src',
276 obj.patron.photo_url()
285 e.setAttribute('value',
286 obj.OpenILS.data.hash.aou[
290 e.setAttribute('tooltiptext',
291 obj.OpenILS.data.hash.aou[
298 'patron_last_library' : [
302 e.setAttribute('value',
303 obj.OpenILS.data.hash.aou[
307 e.setAttribute('tooltiptext',
308 obj.OpenILS.data.hash.aou[
315 'patron_mailing_address_street1' : [
319 e.setAttribute('value',
320 obj.patron.mailing_address().street1()
325 'patron_mailing_address_street2' : [
329 e.setAttribute('value',
330 obj.patron.mailing_address().street2()
335 'patron_mailing_address_city' : [
339 e.setAttribute('value',
340 obj.patron.mailing_address().city()
345 'patron_mailing_address_state' : [
349 e.setAttribute('value',
350 obj.patron.mailing_address().state()
355 'patron_mailing_address_post_code' : [
359 e.setAttribute('value',
360 obj.patron.mailing_address().post_code()
365 'patron_physical_address_street1' : [
369 e.setAttribute('value',
370 obj.patron.billing_address().street1()
375 'patron_physical_address_street2' : [
379 e.setAttribute('value',
380 obj.patron.billing_address().street2()
385 'patron_physical_address_city' : [
389 e.setAttribute('value',
390 obj.patron.billing_address().city()
395 'patron_physical_address_state' : [
399 e.setAttribute('value',
400 obj.patron.billing_address().state()
405 'patron_physical_address_post_code' : [
409 e.setAttribute('value',
410 obj.patron.billing_address().post_code()
423 'retrieve' : function() {
431 // Retrieve the patron
436 if (obj.barcode && obj.barcode != 'null') {
437 robj = obj.network.request(
438 api.fm_au_retrieve_via_barcode.app,
439 api.fm_au_retrieve_via_barcode.method,
440 [ obj.session, obj.barcode ]
442 } else if (obj.id && obj.id != 'null') {
443 robj = obj.network.request(
444 api.fm_au_retrieve_via_id.app,
445 api.fm_au_retrieve_via_id.method,
446 [ obj.session, obj.id ]
449 throw('summary: No barcode or id');
453 if (instanceOf(robj,au)) {
457 } else if (typeof robj.ilsevent != 'undefined') {
459 if (robj.ilsevent == 0) {
461 // are we moving toward a payload here?
464 var error = robj.ilsevent + ' : '
465 + obj.error.get_ilsevent( robj.ilsevent );
470 throw('result is not an au fm object');
474 throw('result == false');
478 var error = ('patron.summary.retrieve : ' + js2JSON(E));
479 obj.error.sdump('D_ERROR',error);
485 // Retrieve the bills
489 var bills = obj.network.request(
490 api.fm_mobts_having_balance.app,
491 api.fm_mobts_having_balance.method,
492 [ obj.session, obj.patron.id() ]
494 //FIXME// obj.patron.bills( bills );
495 obj.patron.bills = bills;
497 var error = ('patron.summary.retrieve : ' + js2JSON(E));
498 obj.error.sdump('D_ERROR',error);
504 // Retrieve the checkouts
508 var checkouts = obj.network.request(
509 api.blob_checkouts_retrieve.app,
510 api.blob_checkouts_retrieve.method,
511 [ obj.session, obj.patron.id() ]
513 obj.patron.checkouts( checkouts );
515 var error = ('patron.summary.retrieve : ' + js2JSON(E));
516 obj.error.sdump('D_ERROR',error);
522 // Retrieve the holds
526 var holds = obj.network.request(
527 api.fm_ahr_retrieve.app,
528 api.fm_ahr_retrieve.method,
529 [ obj.session, obj.patron.id() ]
531 obj.patron.hold_requests( holds );
533 var error = ('patron.summary.retrieve : ' + js2JSON(E));
534 obj.error.sdump('D_ERROR',error);
541 chain.push( function() { obj.controller.render(); } );
545 chain.push( function() {
547 if (typeof window.xulG == 'object' && typeof window.xulG.on_finished == 'function') {
548 obj.error.sdump('D_PATRON_SUMMARY',
549 'patron.summary: Calling external .on_finished()\n');
550 window.xulG.on_finished(obj.patron);
552 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_finished()\n');
558 JSAN.use('util.exec'); obj.exec = new util.exec();
559 obj.exec.on_error = function(E) {
560 //location.href = urls.remote_patron_barcode_entry + '?session=' + window.escape(obj.session);
561 obj.patron = new au();
562 obj.patron.checkouts( [] );
563 obj.patron.hold_requests( [] );
564 obj.patron.bills = [];
565 var home_ou = new aou();
566 obj.patron.home_ou( home_ou );
567 var card = new ac(); card.barcode( obj.barcode );
568 obj.patron.card( card );
569 obj.patron.family_name( 'Could not retrieve patron' );
570 alert('FIXME: Need better alert and error handling.\nProblem with barcode: '
571 + obj.barcode + '\n' + E);
573 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
574 obj.error.sdump('D_PATRON_SUMMARY',
575 'patron.summary: Calling external .on_error()\n');
576 window.xulG.on_error(E);
578 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_error()\n');
582 this.exec.chain( chain );
585 var error = ('patron.summary.retrieve : ' + js2JSON(E));
586 this.error.sdump('D_ERROR',error);
592 dump('exiting patron.summary.js\n');