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 JSAN.use('util.widgets');
38 util.widgets.remove_children( e );
39 if (obj.patron.alert_message()) {
41 document.createTextNode(
42 obj.patron.alert_message()
45 e.parentNode.hidden = false;
47 e.parentNode.hidden = true;
56 e.setAttribute('value',obj.patron.usrname());
64 e.setAttribute('value',
65 obj.patron.family_name() + ', ' + obj.patron.first_given_name()
67 e.setAttribute('style','background-color: lime');
68 //FIXME//bills should become a virtual field
69 if (obj.patron.bills.length > 0)
70 e.setAttribute('style','background-color: yellow');
71 if (obj.patron.standing() == 2)
72 e.setAttribute('style','background-color: lightred');
81 e.setAttribute('value',
82 obj.OpenILS.data.hash.pgt[
93 e.setAttribute('value',
94 obj.OpenILS.data.hash.cst[
105 JSAN.use('util.money');
106 e.setAttribute('value',
107 util.money.cents_as_dollars(
108 obj.patron.credit_forward_balance()
118 JSAN.use('util.money');
120 //FIXME//adjust when .bills becomes a virtual field
121 for (var i = 0; i < obj.patron.bills.length; i++) {
122 total += util.money.dollars_float_to_cents_integer(
123 obj.patron.bills[i].balance_owed()
126 e.setAttribute('value',
127 util.money.cents_as_dollars( total )
132 'patron_checkouts' : [
136 e.setAttribute('value',
137 obj.patron.checkouts().length
146 //FIXME//Get Bill to do this correctly on server side
147 JSAN.use('util.date');
149 for (var i = 0; i < obj.patron.checkouts().length; i++) {
150 var circ = obj.patron.checkouts()[i];
151 var due_date = circ.due_date();
152 due_date = due_date.substr(0,4)
153 + due_date.substr(5,2) + due_date.substr(8,2);
154 var today = util.date.formatted_date( new Date() , '%Y%m%d' );
155 if (today > due_date) total++;
157 e.setAttribute('value',
167 e.setAttribute('value',
168 obj.patron.hold_requests().length
173 'patron_holds_available' : [
178 for (var i = 0; i < obj.patron.hold_requests().length; i++) {
179 var hold = obj.patron.hold_requests()[i];
180 if (hold.capture_time()) total++;
182 e.setAttribute('value',
192 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
193 /*******************************************************************/
195 while(e.lastChild){e.removeChild(e.lastChild);} /* empty vbox */
196 var grid = document.createElement('grid'); e.appendChild(grid);
197 var cols = document.createElement('columns'); grid.appendChild(cols);
198 var c1 = document.createElement('column'); cols.appendChild(c1); c1.setAttribute('flex','1');
199 var c2 = document.createElement('column'); cols.appendChild(c2);
200 var rows = document.createElement('rows'); grid.appendChild(rows);
201 /*******************************************************************/
202 JSAN.use('util.date'); JSAN.use('util.functional');
203 var surveys = obj.OpenILS.data.list.asv;
204 var sr = obj.patron.survey_responses();
205 for (var i = 0; i < surveys.length; i++) {
206 var survey = surveys[i];
207 /***********************************************************/
209 var row = document.createElement('row'); rows.appendChild(row);
210 row.setAttribute('style','border-bottom: dotted black thin');
211 var sname = document.createElement('label'); row.appendChild(sname);
212 sname.setAttribute('value',survey.name());
213 /***********************************************************/
214 var responses = sr[survey.id()];
215 /***********************************************************/
217 var vbox = document.createElement('vbox'); row.appendChild(vbox);
218 var sdate = document.createElement('label'); vbox.appendChild(sdate);
219 sdate.setAttribute('value','Not Taken');
220 /***********************************************************/
221 if (responses && responses.length > 0) {
222 var response = responses.pop(); // last response
224 if (response.effective_date()) {
225 date = util.date.formatted_date( response.effective_date(), '%D' );
227 date = util.date.formatted_date( response.answer_date(), '%D' );
229 /***************************************************/
231 sdate.setAttribute('value',date);
232 /***************************************************/
233 var answer = util.functional.find_id_object_in_list( // first answer
234 util.functional.find_id_object_in_list(
240 /***************************************************/
242 var ans = document.createElement('label'); vbox.appendChild(ans);
243 ans.setAttribute('value',answer);
244 /***************************************************/
254 e.setAttribute('value',
255 obj.patron.card().barcode()
260 'patron_ident_type_1' : [
264 var ident_string = '';
265 var ident = obj.OpenILS.data.hash.cit[
266 obj.patron.ident_type()
268 if (ident) ident_string = ident.name()
269 e.setAttribute('value',
275 'patron_ident_value_1' : [
279 e.setAttribute('value',
280 obj.patron.ident_value()
285 'patron_ident_type_2' : [
289 var ident_string = '';
290 var ident = obj.OpenILS.data.hash.cit[
291 obj.patron.ident_type2()
293 if (ident) ident_string = ident.name()
294 e.setAttribute('value',
300 'patron_ident_value_2' : [
304 e.setAttribute('value',
305 obj.patron.ident_value2()
310 'patron_date_of_birth' : [
314 e.setAttribute('value',
320 'patron_day_phone' : [
324 e.setAttribute('value',
325 obj.patron.day_phone()
330 'patron_evening_phone' : [
334 e.setAttribute('value',
335 obj.patron.evening_phone()
340 'patron_other_phone' : [
344 e.setAttribute('value',
345 obj.patron.other_phone()
354 e.setAttribute('value',
360 'patron_photo_url' : [
364 e.setAttribute('src',
365 obj.patron.photo_url()
374 e.setAttribute('value',
375 obj.OpenILS.data.hash.aou[
379 e.setAttribute('tooltiptext',
380 obj.OpenILS.data.hash.aou[
387 'patron_last_library' : [
391 e.setAttribute('value',
392 obj.OpenILS.data.hash.aou[
396 e.setAttribute('tooltiptext',
397 obj.OpenILS.data.hash.aou[
404 'patron_mailing_address_street1' : [
408 e.setAttribute('value',
409 obj.patron.mailing_address().street1()
414 'patron_mailing_address_street2' : [
418 e.setAttribute('value',
419 obj.patron.mailing_address().street2()
424 'patron_mailing_address_city' : [
428 e.setAttribute('value',
429 obj.patron.mailing_address().city()
434 'patron_mailing_address_state' : [
438 e.setAttribute('value',
439 obj.patron.mailing_address().state()
444 'patron_mailing_address_post_code' : [
448 e.setAttribute('value',
449 obj.patron.mailing_address().post_code()
454 'patron_physical_address_street1' : [
458 e.setAttribute('value',
459 obj.patron.billing_address().street1()
464 'patron_physical_address_street2' : [
468 e.setAttribute('value',
469 obj.patron.billing_address().street2()
474 'patron_physical_address_city' : [
478 e.setAttribute('value',
479 obj.patron.billing_address().city()
484 'patron_physical_address_state' : [
488 e.setAttribute('value',
489 obj.patron.billing_address().state()
494 'patron_physical_address_post_code' : [
498 e.setAttribute('value',
499 obj.patron.billing_address().post_code()
512 'retrieve' : function() {
520 // Retrieve the patron
525 if (obj.barcode && obj.barcode != 'null') {
526 robj = obj.network.request(
527 api.FM_AU_RETRIEVE_VIA_BARCODE.app,
528 api.FM_AU_RETRIEVE_VIA_BARCODE.method,
529 [ obj.session, obj.barcode ]
531 } else if (obj.id && obj.id != 'null') {
532 robj = obj.network.request(
533 api.FM_AU_RETRIEVE_VIA_ID.app,
534 api.FM_AU_RETRIEVE_VIA_ID.method,
535 [ obj.session, obj.id ]
538 throw('summary: No barcode or id');
542 if (instanceOf(robj,au)) {
546 } else if (typeof robj.ilsevent != 'undefined') {
548 if (robj.ilsevent == 0) {
550 // are we moving toward a payload here?
553 var error = robj.ilsevent + ' : '
554 + obj.error.get_ilsevent( robj.ilsevent );
559 throw('result is not an au fm object');
563 throw('result == false');
567 var error = ('patron.summary.retrieve : ' + js2JSON(E));
568 obj.error.sdump('D_ERROR',error);
574 // Retrieve the bills
578 var bills = obj.network.request(
579 api.FM_MOBTS_HAVING_BALANCE.app,
580 api.FM_MOBTS_HAVING_BALANCE.method,
581 [ obj.session, obj.patron.id() ]
583 //FIXME// obj.patron.bills( bills );
584 obj.patron.bills = bills;
586 var error = ('patron.summary.retrieve : ' + js2JSON(E));
587 obj.error.sdump('D_ERROR',error);
593 // Retrieve the checkouts
597 var checkouts = obj.network.request(
598 api.FM_CIRC_RETRIEVE_VIA_USER.app,
599 api.FM_CIRC_RETRIEVE_VIA_USER.method,
600 [ obj.session, obj.patron.id() ]
602 obj.patron.checkouts( checkouts );
604 var error = ('patron.summary.retrieve : ' + js2JSON(E));
605 obj.error.sdump('D_ERROR',error);
611 // Retrieve the holds
615 var holds = obj.network.request(
616 api.FM_AHR_RETRIEVE.app,
617 api.FM_AHR_RETRIEVE.method,
618 [ obj.session, obj.patron.id() ]
620 obj.patron.hold_requests( holds );
622 var error = ('patron.summary.retrieve : ' + js2JSON(E));
623 obj.error.sdump('D_ERROR',error);
629 // Retrieve the survey responses for required surveys
633 var surveys = obj.OpenILS.data.list.asv;
634 var survey_responses = {};
635 for (var i = 0; i < surveys.length; i++) {
636 var s = obj.network.request(
637 api.FM_ASVR_RETRIEVE.app,
638 api.FM_ASVR_RETRIEVE.method,
639 [ obj.session, surveys[i].id(), obj.patron.id() ]
641 survey_responses[ surveys[i].id() ] = s;
643 obj.patron.survey_responses( survey_responses );
645 var error = ('patron.summary.retrieve : ' + js2JSON(E));
646 obj.error.sdump('D_ERROR',error);
653 chain.push( function() { obj.controller.render(); } );
657 chain.push( function() {
659 if (typeof window.xulG == 'object' && typeof window.xulG.on_finished == 'function') {
660 obj.error.sdump('D_PATRON_SUMMARY',
661 'patron.summary: Calling external .on_finished()\n');
662 window.xulG.on_finished(obj.patron);
664 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_finished()\n');
670 JSAN.use('util.exec'); obj.exec = new util.exec();
671 obj.exec.on_error = function(E) {
672 //location.href = urls.XUL_PATRON_BARCODE_ENTRY + '?session=' + window.escape(obj.session);
673 obj.patron = new au();
674 obj.patron.checkouts( [] );
675 obj.patron.hold_requests( [] );
676 obj.patron.bills = [];
677 var home_ou = new aou();
678 obj.patron.home_ou( home_ou );
679 var card = new ac(); card.barcode( obj.barcode );
680 obj.patron.card( card );
681 obj.patron.family_name( 'Could not retrieve patron' );
682 var error = ('FIXME: Need better alert and error handling.\nProblem with barcode: '
683 + obj.barcode + '\n' + E);
685 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
686 obj.error.sdump('D_PATRON_SUMMARY',
687 'patron.summary: Calling external .on_error()\n');
688 window.xulG.on_error(error);
690 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_error()\n');
694 this.exec.chain( chain );
697 var error = ('patron.summary.retrieve : ' + js2JSON(E));
698 this.error.sdump('D_ERROR',error);
699 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
700 window.xulG.on_error(error);
708 dump('exiting patron.summary.js\n');