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 circ = obj.patron.checkouts()[i];
124 var due_date = 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 netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
166 /*******************************************************************/
168 while(e.lastChild){e.removeChild(e.lastChild);} /* empty vbox */
169 var grid = document.createElement('grid'); e.appendChild(grid);
170 var cols = document.createElement('columns'); grid.appendChild(cols);
171 var c1 = document.createElement('column'); cols.appendChild(c1); c1.setAttribute('flex','1');
172 var c2 = document.createElement('column'); cols.appendChild(c2);
173 var rows = document.createElement('rows'); grid.appendChild(rows);
174 /*******************************************************************/
175 JSAN.use('util.date'); JSAN.use('util.functional');
176 var surveys = obj.OpenILS.data.list.asv;
177 var sr = obj.patron.survey_responses();
178 for (var i = 0; i < surveys.length; i++) {
179 var survey = surveys[i];
180 /***********************************************************/
182 var row = document.createElement('row'); rows.appendChild(row);
183 row.setAttribute('style','border-bottom: dotted black thin');
184 var sname = document.createElement('label'); row.appendChild(sname);
185 sname.setAttribute('value',survey.name());
186 /***********************************************************/
187 var responses = sr[survey.id()];
188 /***********************************************************/
190 var vbox = document.createElement('vbox'); row.appendChild(vbox);
191 var sdate = document.createElement('label'); vbox.appendChild(sdate);
192 sdate.setAttribute('value','Not Taken');
193 /***********************************************************/
194 if (responses && responses.length > 0) {
195 var response = responses.pop(); // last response
197 if (response.effective_date()) {
198 date = util.date.formatted_date( response.effective_date(), '%D' );
200 date = util.date.formatted_date( response.answer_date(), '%D' );
202 /***************************************************/
204 sdate.setAttribute('value',date);
205 /***************************************************/
206 var answer = util.functional.find_id_object_in_list( // first answer
207 util.functional.find_id_object_in_list(
213 /***************************************************/
215 var ans = document.createElement('label'); vbox.appendChild(ans);
216 ans.setAttribute('value',answer);
217 /***************************************************/
227 e.setAttribute('value',
228 obj.patron.card().barcode()
233 'patron_ident_type_1' : [
237 var ident_string = '';
238 var ident = obj.OpenILS.data.hash.cit[
239 obj.patron.ident_type()
241 if (ident) ident_string = ident.name()
242 e.setAttribute('value',
248 'patron_ident_value_1' : [
252 e.setAttribute('value',
253 obj.patron.ident_value()
258 'patron_ident_type_2' : [
262 var ident_string = '';
263 var ident = obj.OpenILS.data.hash.cit[
264 obj.patron.ident_type2()
266 if (ident) ident_string = ident.name()
267 e.setAttribute('value',
273 'patron_ident_value_2' : [
277 e.setAttribute('value',
278 obj.patron.ident_value2()
283 'patron_date_of_birth' : [
287 e.setAttribute('value',
293 'patron_day_phone' : [
297 e.setAttribute('value',
298 obj.patron.day_phone()
303 'patron_evening_phone' : [
307 e.setAttribute('value',
308 obj.patron.evening_phone()
313 'patron_other_phone' : [
317 e.setAttribute('value',
318 obj.patron.other_phone()
327 e.setAttribute('value',
333 'patron_photo_url' : [
337 e.setAttribute('src',
338 obj.patron.photo_url()
347 e.setAttribute('value',
348 obj.OpenILS.data.hash.aou[
352 e.setAttribute('tooltiptext',
353 obj.OpenILS.data.hash.aou[
360 'patron_last_library' : [
364 e.setAttribute('value',
365 obj.OpenILS.data.hash.aou[
369 e.setAttribute('tooltiptext',
370 obj.OpenILS.data.hash.aou[
377 'patron_mailing_address_street1' : [
381 e.setAttribute('value',
382 obj.patron.mailing_address().street1()
387 'patron_mailing_address_street2' : [
391 e.setAttribute('value',
392 obj.patron.mailing_address().street2()
397 'patron_mailing_address_city' : [
401 e.setAttribute('value',
402 obj.patron.mailing_address().city()
407 'patron_mailing_address_state' : [
411 e.setAttribute('value',
412 obj.patron.mailing_address().state()
417 'patron_mailing_address_post_code' : [
421 e.setAttribute('value',
422 obj.patron.mailing_address().post_code()
427 'patron_physical_address_street1' : [
431 e.setAttribute('value',
432 obj.patron.billing_address().street1()
437 'patron_physical_address_street2' : [
441 e.setAttribute('value',
442 obj.patron.billing_address().street2()
447 'patron_physical_address_city' : [
451 e.setAttribute('value',
452 obj.patron.billing_address().city()
457 'patron_physical_address_state' : [
461 e.setAttribute('value',
462 obj.patron.billing_address().state()
467 'patron_physical_address_post_code' : [
471 e.setAttribute('value',
472 obj.patron.billing_address().post_code()
485 'retrieve' : function() {
493 // Retrieve the patron
498 if (obj.barcode && obj.barcode != 'null') {
499 robj = obj.network.request(
500 api.FM_AU_RETRIEVE_VIA_BARCODE.app,
501 api.FM_AU_RETRIEVE_VIA_BARCODE.method,
502 [ obj.session, obj.barcode ]
504 } else if (obj.id && obj.id != 'null') {
505 robj = obj.network.request(
506 api.FM_AU_RETRIEVE_VIA_ID.app,
507 api.FM_AU_RETRIEVE_VIA_ID.method,
508 [ obj.session, obj.id ]
511 throw('summary: No barcode or id');
515 if (instanceOf(robj,au)) {
519 } else if (typeof robj.ilsevent != 'undefined') {
521 if (robj.ilsevent == 0) {
523 // are we moving toward a payload here?
526 var error = robj.ilsevent + ' : '
527 + obj.error.get_ilsevent( robj.ilsevent );
532 throw('result is not an au fm object');
536 throw('result == false');
540 var error = ('patron.summary.retrieve : ' + js2JSON(E));
541 obj.error.sdump('D_ERROR',error);
547 // Retrieve the bills
551 var bills = obj.network.request(
552 api.FM_MOBTS_HAVING_BALANCE.app,
553 api.FM_MOBTS_HAVING_BALANCE.method,
554 [ obj.session, obj.patron.id() ]
556 //FIXME// obj.patron.bills( bills );
557 obj.patron.bills = bills;
559 var error = ('patron.summary.retrieve : ' + js2JSON(E));
560 obj.error.sdump('D_ERROR',error);
566 // Retrieve the checkouts
570 var checkouts = obj.network.request(
571 api.FM_CIRC_RETRIEVE_VIA_USER.app,
572 api.FM_CIRC_RETRIEVE_VIA_USER.method,
573 [ obj.session, obj.patron.id() ]
575 obj.patron.checkouts( checkouts );
577 var error = ('patron.summary.retrieve : ' + js2JSON(E));
578 obj.error.sdump('D_ERROR',error);
584 // Retrieve the holds
588 var holds = obj.network.request(
589 api.FM_AHR_RETRIEVE.app,
590 api.FM_AHR_RETRIEVE.method,
591 [ obj.session, obj.patron.id() ]
593 obj.patron.hold_requests( holds );
595 var error = ('patron.summary.retrieve : ' + js2JSON(E));
596 obj.error.sdump('D_ERROR',error);
602 // Retrieve the survey responses for required surveys
606 var surveys = obj.OpenILS.data.list.asv;
607 var survey_responses = {};
608 for (var i = 0; i < surveys.length; i++) {
609 var s = obj.network.request(
610 api.FM_ASVR_RETRIEVE.app,
611 api.FM_ASVR_RETRIEVE.method,
612 [ obj.session, surveys[i].id(), obj.patron.id() ]
614 survey_responses[ surveys[i].id() ] = s;
616 obj.patron.survey_responses( survey_responses );
618 var error = ('patron.summary.retrieve : ' + js2JSON(E));
619 obj.error.sdump('D_ERROR',error);
626 chain.push( function() { obj.controller.render(); } );
630 chain.push( function() {
632 if (typeof window.xulG == 'object' && typeof window.xulG.on_finished == 'function') {
633 obj.error.sdump('D_PATRON_SUMMARY',
634 'patron.summary: Calling external .on_finished()\n');
635 window.xulG.on_finished(obj.patron);
637 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_finished()\n');
643 JSAN.use('util.exec'); obj.exec = new util.exec();
644 obj.exec.on_error = function(E) {
645 //location.href = urls.XUL_PATRON_BARCODE_ENTRY + '?session=' + window.escape(obj.session);
646 obj.patron = new au();
647 obj.patron.checkouts( [] );
648 obj.patron.hold_requests( [] );
649 obj.patron.bills = [];
650 var home_ou = new aou();
651 obj.patron.home_ou( home_ou );
652 var card = new ac(); card.barcode( obj.barcode );
653 obj.patron.card( card );
654 obj.patron.family_name( 'Could not retrieve patron' );
655 var error = ('FIXME: Need better alert and error handling.\nProblem with barcode: '
656 + obj.barcode + '\n' + E);
658 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
659 obj.error.sdump('D_PATRON_SUMMARY',
660 'patron.summary: Calling external .on_error()\n');
661 window.xulG.on_error(error);
663 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_error()\n');
667 this.exec.chain( chain );
670 var error = ('patron.summary.retrieve : ' + js2JSON(E));
671 this.error.sdump('D_ERROR',error);
672 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
673 window.xulG.on_error(error);
681 dump('exiting patron.summary.js\n');