1 dump('entering patron.summary.js\n');
3 function $(id) { return document.getElementById(id); }
5 if (typeof patron == 'undefined') patron = {};
6 patron.summary = function (params) {
8 JSAN.use('util.error'); this.error = new util.error();
9 JSAN.use('util.window'); this.window = new util.window();
10 JSAN.use('util.network'); this.network = new util.network();
14 patron.summary.prototype = {
16 'init' : function( params ) {
20 obj.barcode = params['barcode'];
21 obj.id = params['id'];
22 if (params['show_name']) {
23 document.getElementById('patron_name').hidden = false;
24 document.getElementById('patron_name').setAttribute('hidden','false');
27 JSAN.use('OpenILS.data'); this.OpenILS = {};
28 obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
30 JSAN.use('util.controller'); obj.controller = new util.controller();
36 function() { alert($("commonStrings").getString('common.unimplemented')); }
38 'cmd_verify_credentials' : [
41 xulG.verify_credentials(obj.patron);
48 JSAN.use('util.widgets');
49 util.widgets.remove_children( e );
50 if (obj.patron.alert_message()) {
52 document.createTextNode(
53 obj.patron.alert_message()
56 e.parentNode.hidden = false;
58 e.parentNode.hidden = true;
67 e.setAttribute('value',obj.patron.usrname());
75 e.setAttribute('value',
76 obj.OpenILS.data.hash.pgt[
83 'patron_net_access' : [
87 e.setAttribute('value',
88 $("patronStrings").getString('staff.patron.summary.patron_net_access') +
89 ' ' + obj.OpenILS.data.hash.cnal[
90 obj.patron.net_access_level()
101 e.setAttribute('value',
102 obj.OpenILS.data.hash.cst[
103 obj.patron.standing()
107 var e2 = document.getElementById('patron_standing_penalties');
108 JSAN.use('util.widgets');
109 util.widgets.remove_children(e2);
110 var penalties = obj.patron.standing_penalties();
111 for (var i = 0; i < penalties.length; i++) {
113 var row = document.createElement('row');
114 var label = document.createElement('label');
116 //x.setAttribute('value',penalties[i].penalty_type());
117 label.setAttribute('value',penalties[i].standing_penalty().label());
118 row.appendChild(label);
120 var button = document.createElement('button');
121 button.setAttribute('label', $("patronStrings").getString('staff.patron.summary.standing_penalty.remove'));
122 button.disabled = true;
123 row.appendChild(button);
125 // XXX check a permission here? How to fire the remove action ??? XXX
126 if (penalties[i].standing_penalty().id() > 100) {
129 if (penalties[i].standing_penalty().block_list()) {
130 if (penalties[i].standing_penalty().block_list().match(/RENEW/)) addCSSClass(label,'PENALTY_RENEW');
131 if (penalties[i].standing_penalty().block_list().match(/HOLD/)) addCSSClass(label,'PENALTY_HOLD');
132 if (penalties[i].standing_penalty().block_list().match(/CIRC/)) addCSSClass(label,'PENALTY_CIRC');
136 e2.parentNode.parentNode.hidden = false;
145 JSAN.use('util.money');
146 e.setAttribute('value',
149 obj.patron.credit_forward_balance()
159 e.setAttribute('value','...');
160 obj.network.simple_request(
161 'FM_MOUS_RETRIEVE.authoritative',
162 [ ses(), obj.patron.id() ],
164 JSAN.use('util.money');
165 var robj = req.getResultObject();
166 e.setAttribute('value', $("patronStrings").getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( robj.balance_owed() )]));
170 obj.network.simple_request(
171 'FM_MBTS_IDS_RETRIEVE_ALL_HAVING_BALANCE.authoritative',
172 [ ses(), obj.patron.id() ],
174 JSAN.use('util.money');
175 var list = req.getResultObject();
176 if (typeof list.ilsevent != 'undefined') {
177 e.setAttribute('value', '??? See Bills');
181 for (var i = 0; i < list.length; i++) {
182 var robj = typeof list[i] == 'object' ? list[i] : obj.network.simple_request('FM_MBTS_RETRIEVE.authoritative',[ses(),list[i]]);
183 sum += util.money.dollars_float_to_cents_integer( robj.balance_owed() );
185 if (sum > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
186 JSAN.use('util.money');
187 e.setAttribute('value', '$' + util.money.sanitize( util.money.cents_as_dollars( sum ) ));
194 'patron_checkouts' : [
198 e.setAttribute('value','...');
199 var e2 = document.getElementById( 'patron_overdue' ); if (e2) e2.setAttribute('value','...');
200 var e3 = document.getElementById( 'patron_claimed_returned' ); if (e3) e3.setAttribute('value','...');
201 var e4 = document.getElementById( 'patron_long_overdue' ); if (e4) e4.setAttribute('value','...');
202 var e5 = document.getElementById( 'patron_lost' ); if (e5) e5.setAttribute('value','...');
203 var e6 = document.getElementById( 'patron_noncat' ); if (e6) e6.setAttribute('value','...');
204 obj.network.simple_request(
205 'FM_CIRC_COUNT_RETRIEVE_VIA_USER.authoritative',
206 [ ses(), obj.patron.id() ],
209 var robj = req.getResultObject();
210 e.setAttribute('value', robj.out + robj.overdue + robj.claims_returned + robj.long_overdue );
211 if (e2) e2.setAttribute('value', robj.overdue );
212 if (e3) e3.setAttribute('value', robj.claims_returned );
213 if (e4) e4.setAttribute('value', robj.long_overdue );
214 if (e5) e5.setAttribute('value', robj.lost );
220 obj.network.simple_request(
221 'FM_ANCC_RETRIEVE_VIA_USER.authoritative',
222 [ ses(), obj.patron.id() ],
224 var robj = req.getResultObject();
225 if (e6) e6.setAttribute('value',robj.length);
235 /* handled by 'patron_checkouts' */
243 e.setAttribute('value','...');
244 var e2 = document.getElementById('patron_holds_available');
245 if (e2) e2.setAttribute('value','...');
246 obj.network.simple_request(
247 'FM_AHR_COUNT_RETRIEVE.authoritative',
248 [ ses(), obj.patron.id() ],
250 e.setAttribute('value',
251 req.getResultObject().total
253 if (e2) e2.setAttribute('value',
254 req.getResultObject().ready
261 'patron_holds_available' : [
265 /* handled by 'patron_holds' */
273 e.setAttribute('value',
274 obj.patron.card().barcode()
279 'patron_ident_type_1' : [
283 var ident_string = '';
284 var ident = obj.OpenILS.data.hash.cit[
285 obj.patron.ident_type()
287 if (ident) ident_string = ident.name()
288 e.setAttribute('value',
294 'patron_ident_value_1' : [
298 var val = obj.patron.ident_value();
299 val = val.replace(/.+(\d\d\d\d)$/,'xxxx$1');
300 e.setAttribute('value', val);
304 'patron_ident_type_2' : [
308 var ident_string = '';
309 var ident = obj.OpenILS.data.hash.cit[
310 obj.patron.ident_type2()
312 if (ident) ident_string = ident.name()
313 e.setAttribute('value',
319 'patron_ident_value_2' : [
323 var val = obj.patron.ident_value2();
324 val = val.replace(/.+(\d\d\d\d)$/,'xxxx$1');
325 e.setAttribute('value', val);
329 'patron_date_of_exp' : [
333 e.setAttribute('value',
334 $("patronStrings").getString('staff.patron.summary.expires_on') + ' ' + (
335 obj.patron.expire_date() ?
336 obj.patron.expire_date().substr(0,10) :
343 'patron_date_of_birth' : [
347 e.setAttribute('value',
349 obj.patron.dob().substr(0,10) :
355 'patron_day_phone' : [
359 e.setAttribute('value',
360 obj.patron.day_phone()
365 'patron_evening_phone' : [
369 e.setAttribute('value',
370 obj.patron.evening_phone()
375 'patron_other_phone' : [
379 e.setAttribute('value',
380 obj.patron.other_phone()
389 e.setAttribute('value',
399 e.setAttribute('value',
405 'patron_photo_url' : [
409 e.setAttribute('src',
410 obj.patron.photo_url()
419 e.setAttribute('value',
420 obj.OpenILS.data.hash.aou[
424 e.setAttribute('tooltiptext',
425 obj.OpenILS.data.hash.aou[
432 'patron_last_library' : [
436 e.setAttribute('value',
437 obj.OpenILS.data.hash.aou[
441 e.setAttribute('tooltiptext',
442 obj.OpenILS.data.hash.aou[
449 'patron_mailing_address_street1' : [
453 e.setAttribute('value',
454 obj.patron.mailing_address().street1()
456 if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
460 'patron_mailing_address_street2' : [
464 e.setAttribute('value',
465 obj.patron.mailing_address().street2()
467 if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
471 'patron_mailing_address_city' : [
475 e.setAttribute('value',
476 obj.patron.mailing_address().city()
478 if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
482 'patron_mailing_address_state' : [
486 e.setAttribute('value',
487 obj.patron.mailing_address().state()
489 if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
493 'patron_mailing_address_post_code' : [
497 e.setAttribute('value',
498 obj.patron.mailing_address().post_code()
500 if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
504 'patron_physical_address_street1' : [
508 e.setAttribute('value',
509 obj.patron.billing_address().street1()
511 if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
515 'patron_physical_address_street2' : [
519 e.setAttribute('value',
520 obj.patron.billing_address().street2()
522 if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
526 'patron_physical_address_city' : [
530 e.setAttribute('value',
531 obj.patron.billing_address().city()
533 if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
537 'patron_physical_address_state' : [
541 e.setAttribute('value',
542 obj.patron.billing_address().state()
544 if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
548 'patron_physical_address_post_code' : [
552 e.setAttribute('value',
553 obj.patron.billing_address().post_code()
555 if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
566 var caption = document.getElementById("PatronSummaryContact_caption");
567 var arrow = document.getAnonymousNodes(caption)[0];
568 var gb_content = document.getAnonymousNodes(caption.parentNode)[1];
569 arrow.addEventListener(
574 //alert('setting shrink_state to ' + gb_content.hidden);
575 //caption.setAttribute('shrink_state',gb_content.hidden);
576 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
577 JSAN.use('util.file'); var file = new util.file('patron_id_shrink');
578 file.set_object(String(gb_content.hidden)); file.close();
583 //var shrink_state = caption.getAttribute('shrink_state');
584 var shrink_state = false;
585 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
586 JSAN.use('util.file'); var file = new util.file('patron_id_shrink');
587 if (file._file.exists()) {
588 shrink_state = file.get_object(); file.close();
590 //alert('shrink_state retrieved as ' + shrink_state);
591 if (shrink_state != 'false' && shrink_state) {
592 JSAN.use('util.widgets');
593 //alert('clicking the widget');
594 util.widgets.click( arrow );
597 obj.error.sdump('D_ERROR','with shrink_state in summary.js: ' + E);
601 'retrieve' : function() {
609 // Retrieve the patron
610 function blah_retrieve() {
613 if (obj.barcode && obj.barcode != 'null') {
614 robj = obj.network.simple_request(
615 'FM_AU_RETRIEVE_VIA_BARCODE.authoritative',
616 [ ses(), obj.barcode ]
618 } else if (obj.id && obj.id != 'null') {
619 robj = obj.network.simple_request(
620 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
624 throw($("patronStrings").getString('staff.patron.summary.retrieve.no_barcode'));
628 if (instanceOf(robj,au)) {
631 JSAN.use('patron.util');
632 document.getElementById('patron_name').setAttribute('value',
633 ( obj.patron.prefix() ? obj.patron.prefix() + ' ' : '') +
634 obj.patron.family_name() + ', ' +
635 obj.patron.first_given_name() + ' ' +
636 ( obj.patron.second_given_name() ? obj.patron.second_given_name() + ' ' : '' ) +
637 ( obj.patron.suffix() ? obj.patron.suffix() : '')
639 patron.util.set_penalty_css(obj.patron);
640 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
641 data.last_patron = obj.patron.id(); data.stash('last_patron');
661 // Retrieve the survey responses for required surveys
665 var surveys = obj.OpenILS.data.list.my_asv;
666 var survey_responses = {};
667 for (var i = 0; i < surveys.length; i++) {
668 var s = obj.network.request(
669 api.FM_ASVR_RETRIEVE.app,
670 api.FM_ASVR_RETRIEVE.method,
671 [ ses(), surveys[i].id(), obj.patron.id() ]
673 survey_responses[ surveys[i].id() ] = s;
675 obj.patron.survey_responses( survey_responses );
677 var error = ('patron.summary.retrieve : ' + js2JSON(E));
678 obj.error.sdump('D_ERROR',error);
686 chain.push( function() { obj.controller.render(); } );
690 chain.push( function() {
692 if (typeof window.xulG == 'object' && typeof window.xulG.on_finished == 'function') {
693 obj.error.sdump('D_PATRON_SUMMARY',
694 'patron.summary: Calling external .on_finished()\n');
695 window.xulG.on_finished(obj.patron);
697 obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_finished()\n');
703 JSAN.use('util.exec'); obj.exec = new util.exec();
704 obj.exec.on_error = function(E) {
706 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
707 window.xulG.on_error(E);
713 this.exec.chain( chain );
716 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
717 window.xulG.on_error(E);
725 dump('exiting patron.summary.js\n');