]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/summary.js
option to not include claims returned circs in summary sidebar and under-button tallies
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / summary.js
1 dump('entering patron.summary.js\n');
2
3 function $(id) { return document.getElementById(id); }
4 var patronStrings = $('patronStrings');
5 var offlineStrings = $('offlineStrings');
6
7 if (typeof patron == 'undefined') patron = {};
8 patron.summary = function (params) {
9
10     JSAN.use('util.error'); this.error = new util.error();
11     JSAN.use('util.window'); this.window = new util.window();
12     JSAN.use('util.network'); this.network = new util.network();
13     JSAN.use('util.widgets'); JSAN.use('util.date');
14     this.w = window;
15 }
16
17 patron.summary.prototype = {
18
19     'init' : function( params ) {
20
21         var obj = this;
22
23         obj.barcode = params['barcode'];
24         obj.id = params['id'];
25         if (params['show_name']) {
26             document.getElementById('patron_name').hidden = false;
27             document.getElementById('patron_name').setAttribute('hidden','false');
28         }
29
30         JSAN.use('OpenILS.data'); this.OpenILS = {}; 
31         obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
32         var obscure_dob = String( obj.OpenILS.data.hash.aous['circ.obscure_dob'] ) == 'true';
33
34         JSAN.use('util.functional'); JSAN.use('patron.util'); JSAN.use('util.list'); 
35
36         if (document.getElementById('group_list')) {
37             obj.group_list = new util.list('group_list');
38             obj.group_list.init( {
39                 'columns' : [
40                     { 'id' : 'gl_family_name', 'flex' : 1, 
41                         'label' : patronStrings.getString('staff.patron.summary.group_list.column.family_name.label'),
42                         'render' : function(my) { return my.family_name; } },
43                     { 'id' : 'gl_first_given_name', 'flex' : 1, 
44                         'label' : patronStrings.getString('staff.patron.summary.group_list.column.first_given_name.label'),
45                         'render' : function(my) { return my.first_given_name; } },
46                     { 'id' : 'gl_second_given_name', 'flex' : 1, 'hidden' : true, 
47                         'label' : patronStrings.getString('staff.patron.summary.group_list.column.second_given_name.label'),
48                         'render' : function(my) { return my.second_given_name; } },
49                     { 'id' : 'gl_home_lib', 'flex' : 1, 'hidden' : true, 
50                         'label' : patronStrings.getString('staff.patron.summary.group_list.column.home_ou.label'),
51                         'render' : function(my) { return obj.OpenILS.data.hash.aou[ my.home_ou ].shortname(); } },
52                     { 'id' : 'gl_balance_owed', 'flex' : 1, 'sort_type' : 'money',
53                         'label' : patronStrings.getString('staff.patron.summary.group_list.column.balance_owed.label'),
54                         'render' : function(my) { return my.balance_owed; } }
55                 ],
56                 'retrieve_row' : function(params) {
57                     var id = params.retrieve_id;
58                     var blob = patron.util.retrieve_name_via_id( ses(), id );
59                     var row = params.row; if (typeof row.my == 'undefined') { row.my = {}; }
60                     row.my.family_name = blob[0];
61                     row.my.first_given_name = blob[1];
62                     row.my.second_given_name = blob[2];
63                     row.my.home_ou = blob[3];
64                     if (obj.group_owed[ id ]) {
65                         row.my.balance_owed = obj.group_owed[ id ];
66                     }
67                     if (typeof params.on_retrieve == 'function') {
68                         params.on_retrieve(row);
69                     }
70                     return row;
71                 }
72             } );
73             $('group_list_actions').appendChild( obj.group_list.render_list_actions() );
74             obj.group_list.set_list_actions();
75         }
76
77         if (document.getElementById('stat_cat_list')) {
78             obj.stat_cat_list = new util.list('stat_cat_list');
79             obj.stat_cat_list.init( {
80                 'columns' : [].concat(
81                     obj.stat_cat_list.fm_columns( 'actsc', {
82                         'actsc_id' : { 'hidden' : true },
83                         'actsc_opac_visible' : { 'hidden' : true },
84                         'actsc_usr_summary' : { 'hidden' : true }
85                     } )
86                 ).concat(
87                     obj.stat_cat_list.fm_columns( 'actscecm', {
88                         'actscecm_id' : { 'hidden' : true }
89                     } )
90                 )
91             } );
92             $('stat_cat_list_actions').appendChild( obj.stat_cat_list.render_list_actions() );
93             obj.stat_cat_list.set_list_actions();
94         }
95
96         JSAN.use('util.controller'); obj.controller = new util.controller();
97         obj.controller.init(
98             {
99                 control_map : {
100                     'cmd_broken' : [
101                         ['command'],
102                         function() { alert($("commonStrings").getString('common.unimplemented')); }
103                     ],
104                     'radio_address' : [
105                         ['render'],
106                         function(e) {
107                             return function() {
108                                 if (e.value == 'physical') { e.selectedIndex = 1; $('address_deck').selectedIndex = 1; }
109                             };
110                         }
111                     ],
112                     'group_tab' : [
113                         ['command'],
114                         function() {
115                             try {
116                                 if (! obj.group_frame_loaded) {
117                                     obj.group_frame();
118                                     obj.group_frame_loaded = true;
119                                 }
120                             } catch(E) {
121                                 alert('Error in summary.js, group_tab: ' + E);
122                             }
123                         }
124                     ],
125                     'stat_cat_tab' : [
126                         ['command'],
127                         function() {
128                             try {
129                                 obj.stat_cat_list.clear();
130                                 var entries = obj.patron.stat_cat_entries();
131                                 for (var i = 0; i < entries.length; i++) {
132                                     var stat_cat = obj.OpenILS.data.hash.my_actsc[ entries[i].stat_cat() ];
133                                     if (!stat_cat) {
134                                         stat_cat = obj.OpenILS.data.hash.actsc[ entries[i].stat_cat() ];
135                                     }
136                                     if (!stat_cat) {
137                                         var robj = obj.network.simple_request('FM_ACTSC_RETRIEVE_VIA_PCRUD',[ ses(), { 'id' : { '=' : entries[i].stat_cat() } }]);
138                                         if (typeof robj == 'object' && typeof robj.ilsevent != 'undefined') {
139                                             obj.OpenILS.data.hash.actsc[ entries[i].stat_cat() ] = robj;
140                                             obj.OpenILS.data.stash( 'hash' );
141                                             stat_cat = robj;
142                                         }
143                                     }
144                                     if (!stat_cat) { continue; }
145                                     if (get_bool( stat_cat.usr_summary() )) {
146                                         obj.stat_cat_list.append( {
147                                             'row' : {
148                                                 'my' : {
149                                                     'actsc' : stat_cat,
150                                                     'actscecm' : entries[i],
151                                                 }
152                                             }
153                                         } );
154                                     }
155                                 }
156                             } catch(E) {
157                                 alert('Error in summary.js, stat_cat_tab: ' + E);
158                             }
159                         }
160                     ],
161                     'spawn_group_interface' : [
162                         ['command'],
163                         function() {
164                             try {
165                                 window.xulG.spawn_group_interface();
166                             } catch(E) {
167                                 alert('Error in summary.js, spawn_group_interface: ' + E);
168                             }
169                         }
170                     ],
171                     'group_tab_retrieve_patron' : [
172                         ['command'],
173                         function() {
174                             var selected_ids = util.functional.map_list(
175                                 obj.group_list.retrieve_selection(),
176                                 function(o) {
177                                     return o.getAttribute('retrieve_id');
178                                 }
179                             );
180                             for (var i = 0; i < selected_ids.length; i++) {
181                                 try {
182                                     window.xulG.new_patron_tab(
183                                         { 'tab_name' : patronStrings.getString('staff.patron.info_group.retrieve_patron.tab_name') },
184                                         {
185                                             'id' : selected_ids[i],
186                                             'url_prefix' : xulG.url_prefix,
187                                             'new_tab' : xulG.new_tab,
188                                             'set_tab' : xulG.set_tab
189                                         }
190                                     );
191                                 } catch(E) {
192                                     alert('Error in summary.js, group_tab_retrieve_patron: ' + E);
193                                 }
194                             }
195                         }
196                     ],
197                     'patron_alert' : [
198                         ['render'],
199                         function(e) {
200                             return function() {
201                                 util.widgets.set_text( e, obj.patron.alert_message() || '' );
202                                 if (obj.patron.alert_message()) {
203                                     e.parentNode.hidden = false;
204                                 } else {
205                                     e.parentNode.hidden = true;
206                                 }
207                             };
208                         }
209                     ],
210                     'patron_usrname' : [
211                         ['render'],
212                         function(e) {
213                             return function() {
214                                 util.widgets.set_text(e,obj.patron.usrname());
215                             };
216                         }
217                     ],
218                     'patron_profile' : [
219                         ['render'],
220                         function(e) {
221                             return function() { 
222                                 util.widgets.set_text(e,
223                                     obj.OpenILS.data.hash.pgt[
224                                         obj.patron.profile()
225                                     ].name()
226                                 );
227                             };
228                         }
229                     ],
230                     'patron_net_access' : [
231                         ['render'],
232                         function(e) {
233                             return function() { 
234                                 util.widgets.set_text(e,
235                                     patronStrings.getString('staff.patron.summary.patron_net_access') + 
236                                     ' ' + obj.OpenILS.data.hash.cnal[
237                                         obj.patron.net_access_level()
238                                     ].name()
239                                 );
240                             };
241                         }
242                     ],
243                     'patron_credit' : [
244                         ['render'],
245                         function(e) {
246                             return function() { 
247                                 JSAN.use('util.money');
248                                 util.widgets.set_text(e,
249                                     '$' + 
250                                     util.money.sanitize(
251                                         obj.patron.credit_forward_balance()
252                                     )
253                                 );
254                             };
255                         }
256                     ],
257                     'patron_bill' : [
258                         ['render'],
259                         function(e) {
260                             return function() { 
261                                 util.widgets.set_text(e,'...');
262                                 var under_btn; 
263                                 if (xulG) {
264                                     if (xulG.display_window) {
265                                         under_btn = xulG.display_window.document.getElementById('under_bills');
266                                         if (under_btn) util.widgets.set_text(under_btn,'...');
267                                     }
268                                 }
269                                 obj.network.simple_request(
270                                     'BLOB_BALANCE_OWED_VIA_USERGROUP',
271                                     [ ses(), obj.patron.usrgroup() ],
272                                     function(req) {
273                                         try {
274                                             JSAN.use('util.money');
275                                             var robj = req.getResultObject();
276                                             if (typeof robj.ilsevent != 'undefined') { throw(robj); }
277
278                                             var sum = 0; /* in cents */
279                                             obj.group_owed = {};
280
281                                             function render_main_patron_bill_summary(bs) {
282                                                 try {
283                                                     util.widgets.set_text(
284                                                         e, 
285                                                         patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( bs.balance_owed )])
286                                                     );
287                                                     if (under_btn) {
288                                                         util.widgets.set_text(
289                                                             under_btn, 
290                                                             patronStrings.getFormattedString('staff.patron.summary.patron_bill.money', [util.money.sanitize( bs.balance_owed )])
291                                                         );
292                                                     }
293                                                     var show_billing_tab_on_bills = String( obj.OpenILS.data.hash.aous['ui.circ.show_billing_tab_on_bills'] ) == 'true';
294                                                     if (show_billing_tab_on_bills && Number(bs.balance_owed) > 0) {
295                                                         if (xulG) {
296                                                             if (xulG.display_window) {
297                                                                 if (! obj.show_billing_tab_on_bills_done_once ) {
298                                                                     xulG.display_window.g.patron.skip_hide_summary = true;
299                                                                     xulG.display_window.util.widgets.dispatch('command','cmd_patron_bills');
300                                                                     obj.show_billing_tab_on_bills_done_once = 1;
301                                                                 }
302                                                             }
303                                                         }
304                                                     };
305                                                     obj.bills_summary = bs;
306                                                     if (obj.holds_summary && obj.bills_summary)  {
307                                                         if (typeof window.xulG == 'object' && typeof window.xulG.stop_sign_page == 'function') {
308                                                             window.xulG.stop_sign_page( obj.patron, { 'holds_summary' : obj.holds_summary, 'bills_summary' : obj.bills_summary } ); 
309                                                         }
310                                                     }
311                                                 } catch(E) {
312                                                     alert('Error in summary.js, render_main_patron_bill_summary(): ' + E);
313                                                 }
314                                             }
315
316                                             var rendered_main_patron_bill_summary = false;
317                                             for (var i = 0; i < robj.length; i++) {
318                                                 if (robj[i].usr == obj.patron.id()) {
319                                                     render_main_patron_bill_summary( robj[i] );
320                                                     rendered_main_patron_bill_summary = true;
321                                                 } else {
322                                                     sum += util.money.dollars_float_to_cents_integer( robj[i].balance_owed );
323                                                     obj.group_owed[ robj[i].usr ] = robj[i].balance_owed;
324                                                 }
325                                             }
326                                             if (!rendered_main_patron_bill_summary) {
327                                                 render_main_patron_bill_summary( { balance_owed: 0.00, usr: obj.patron.id() } );
328                                             }
329                                             var tab = $('group_tab');
330                                             if (tab) {
331                                                 if (sum > 0) {
332                                                     addCSSClass(tab,'balance_owed');
333                                                 } else {
334                                                     removeCSSClass(tab,'balance_owed');
335                                                 }
336                                                 tab.setAttribute(
337                                                     'label',
338                                                     patronStrings.getFormattedString('staff.patron.summary.tab.group_list_with_total_owed.label',[ util.money.cents_as_dollars( sum ) ])
339                                                 );
340                                             }
341                                         } catch(E) {
342                                             alert('Error in summary.js, patron_bill callback: ' + E);
343                                         }
344                                     }
345                                 );
346                             };
347                         }
348                     ],
349                     'patron_checkouts' : [
350                         ['render'],
351                         function(e) {
352                             return function() { 
353                                 util.widgets.set_text(e,'...');
354                                 var e2 = document.getElementById( 'patron_overdue' ); if (e2) util.widgets.set_text(e2,'...');
355                                 var e3 = document.getElementById( 'patron_claimed_returned' ); if (e3) util.widgets.set_text(e3,'...');
356                                 var e4 = document.getElementById( 'patron_long_overdue' ); if (e4) util.widgets.set_text(e4,'...');
357                                 var e5 = document.getElementById( 'patron_lost' ); if (e5) util.widgets.set_text(e5,'...');
358                                 var e6 = document.getElementById( 'patron_noncat' ); if (e6) util.widgets.set_text(e6,'...');
359                                 var under_btn; 
360                                 if (xulG) {
361                                     if (xulG.display_window) {
362                                         under_btn = xulG.display_window.document.getElementById('under_items');
363                                         if (under_btn) util.widgets.set_text(under_btn,'...');
364                                     }
365                                 }
366                                 obj.network.simple_request(
367                                     'FM_CIRC_COUNT_RETRIEVE_VIA_USER.authoritative',
368                                     [ ses(), obj.patron.id() ],
369                                     function(req) {
370                                         try {
371                                             var robj = req.getResultObject();
372                                             var do_not_tally_claims_returned = String( obj.OpenILS.data.hash.aous['circ.do_not_tally_claims_returned'] ) == 'true';
373                                             util.widgets.set_text(e,
374                                                 robj.out
375                                                 + robj.overdue
376                                                 + (do_not_tally_claims_returned ? 0 : robj.claims_returned)
377                                                 + robj.long_overdue
378                                             );
379                                             if (e2) util.widgets.set_text(e2, robj.overdue    );
380                                             if (e3) util.widgets.set_text(e3, robj.claims_returned    );
381                                             if (e4) util.widgets.set_text(e4, robj.long_overdue    );
382                                             if (e5) util.widgets.set_text(e5, robj.lost    );
383                                             if (under_btn) util.widgets.set_text(under_btn, 
384                                                 String(
385                                                     robj.out
386                                                     + robj.overdue
387                                                     + (do_not_tally_claims_returned ? 0 : robj.claims_returned)
388                                                     + robj.long_overdue
389                                                 ) 
390                                                 /* + ( robj.overdue > 0 ? '*' : '' ) */
391                                             );
392                                         } catch(E) {
393                                             alert(E);
394                                         }
395                                     }
396                                 );
397                                 obj.network.simple_request(
398                                     'FM_ANCC_RETRIEVE_VIA_USER.authoritative',
399                                     [ ses(), obj.patron.id() ],
400                                     function(req) {
401                                         var robj = req.getResultObject();
402                                         if (e6) util.widgets.set_text(e6,robj.length);
403                                     }
404                                 );
405                             };
406                         }
407                     ],
408                     'patron_overdue' : [
409                         ['render'],
410                         function(e) {
411                             return function() { 
412                                 /* handled by 'patron_checkouts' */
413                             };
414                         }
415                     ],
416                     'patron_holds' : [
417                         ['render'],
418                         function(e) {
419                             return function() { 
420                                 util.widgets.set_text(e,'...');
421                                 var e2 = document.getElementById('patron_holds_available');
422                                 if (e2) util.widgets.set_text(e2,'...');
423                                 var under_btn; 
424                                 if (xulG) {
425                                     if (xulG.display_window) {
426                                         under_btn = xulG.display_window.document.getElementById('under_holds');
427                                         if (under_btn) util.widgets.set_text(under_btn,'...');
428                                     }
429                                 }
430                                 obj.network.simple_request(
431                                     'FM_AHR_COUNT_RETRIEVE.authoritative',
432                                     [ ses(), obj.patron.id() ],
433                                     function(req) {
434                                         var robj = req.getResultObject();
435                                         util.widgets.set_text(e,
436                                             robj.total
437                                         );
438                                         if (e2) util.widgets.set_text(e2,
439                                             robj.ready
440                                         );
441                                         if (under_btn) util.widgets.set_text(under_btn, req.getResultObject().ready + '/' + req.getResultObject().total );
442                                         obj.holds_summary = robj;
443                                         if (obj.holds_summary && obj.bills_summary) 
444                                             if (typeof window.xulG == 'object' && typeof window.xulG.stop_sign_page == 'function')
445                                                 window.xulG.stop_sign_page( obj.patron, { 'holds_summary' : obj.holds_summary, 'bills_summary' : obj.bills_summary } ); 
446                                     }
447                                 );
448                             };
449                         }
450                     ],
451                     'patron_holds_available' : [
452                         ['render'],
453                         function(e) {
454                             return function() { 
455                                 /* handled by 'patron_holds' */
456                             };
457                         }
458                     ],
459                     'patron_card' : [
460                         ['render'],
461                         function(e) {
462                             return function() { 
463                                 util.widgets.set_text(e,
464                                     obj.patron.card().barcode()
465                                 );
466                             };
467                         }
468                     ],
469                     'patron_ident_type_1' : [
470                         ['render'],
471                         function(e) {
472                             return function() { 
473                                 var ident_string = '';
474                                 var ident = obj.OpenILS.data.hash.cit[
475                                     obj.patron.ident_type()
476                                 ];
477                                 if (ident) ident_string = ident.name()
478                                 util.widgets.set_text(e,
479                                     ident_string
480                                 );
481                             };
482                         }
483                     ],
484                     'patron_ident_value_1' : [
485                         ['render'],
486                         function(e) {
487                             return function() { 
488                                 var val = obj.patron.ident_value();
489                                 if (val) val = val.replace(/.+(\d\d\d\d)$/,'xxxx$1');   // must avoid val.replace if val is NULL
490                                 util.widgets.set_text(e, val);
491                             };
492                         }
493                     ],
494                     'patron_ident_type_2' : [
495                         ['render'],
496                         function(e) {
497                             return function() { 
498                                 var ident_string = '';
499                                 var ident = obj.OpenILS.data.hash.cit[
500                                     obj.patron.ident_type2()
501                                 ];
502                                 if (ident) ident_string = ident.name()
503                                 util.widgets.set_text(e,
504                                     ident_string
505                                 );
506                             };
507                         }
508                     ],
509                     'patron_ident_value_2' : [
510                         ['render'],
511                         function(e) {
512                             return function() { 
513                                 var val = obj.patron.ident_value2();
514                                 if (val) val = val.replace(/.+(\d\d\d\d)$/,'xxxx$1');   // must avoid val.replace if val is NULL
515                                 util.widgets.set_text(e, val);
516                             };
517                         }
518                     ],
519                     'patron_date_of_exp' : [
520                         ['render'],
521                         function(e) {
522                             return function() { 
523                                 util.widgets.set_text(e,
524                                     patronStrings.getString('staff.patron.summary.expires_on') + ' ' + (
525                                         obj.patron.expire_date() ?
526                                         util.date.formatted_date( obj.patron.expire_date(), '%{localized_date}' ) :
527                                         patronStrings.getString('staff.patron.field.unset') 
528                                     )
529                                 );
530                             };
531                         }
532                     ],
533                     'patron_hold_alias' : [
534                         ['render'],
535                         function(e) {
536                             return function() {
537                                 util.widgets.set_text(e,
538                                     obj.patron.alias() ? obj.patron.alias() : ''
539                                 );
540                             }
541                         }
542                     ],
543                     'patron_date_of_birth' : [
544                         ['render'],
545                         function(e) {
546                             return function() { 
547                                 var hide_value = e.getAttribute('hide_value');
548                                 if ( obscure_dob && hide_value == 'true' ) {
549                                     e.setAttribute( 'hidden_value',
550                                         obj.patron.dob() ?
551                                         util.date.formatted_date( obj.patron.dob(), '%{localized_date}' ) :
552                                         patronStrings.getString('staff.patron.field.unset') 
553                                     );
554                                     util.widgets.set_text(e,
555                                         patronStrings.getString('staff.patron.field.hidden') 
556                                     );
557                                 } else {
558                                     util.widgets.set_text(e,
559                                         obj.patron.dob() ?
560                                         util.date.formatted_date( obj.patron.dob(), '%{localized_date}' ) :
561                                         patronStrings.getString('staff.patron.field.unset') 
562                                     );
563                                     e.setAttribute( 'hidden_value',
564                                         patronStrings.getString('staff.patron.field.hidden') 
565                                     );
566                                 }
567                                 var x = document.getElementById('PatronSummaryContact_date_of_birth_label');
568                                 if (x) {
569                                     var click_to_hide_dob = x.getAttribute('click_to_hide_dob');
570                                     if (!obscure_dob || click_to_hide_dob != 'true') {
571                                         removeCSSClass(x,'click_link');
572                                     } 
573                                     if (obscure_dob && click_to_hide_dob == 'true') {
574                                         addCSSClass(x,'click_link');
575                                         x.onclick = function() {
576                                             hide_value = e.getAttribute('hide_value');
577                                             e.setAttribute('hide_value', hide_value == 'true' ? 'false' : 'true'); 
578                                             var value = util.widgets.get_text(e);
579                                             var hidden_value = e.getAttribute('hidden_value');
580                                             util.widgets.set_text(e,hidden_value);
581                                             e.setAttribute('hidden_value',value);
582                                         }
583                                     }
584                                 }
585                             };
586                         }
587                     ],
588                     'patron_day_phone' : [
589                         ['render'],
590                         function(e) {
591                             return function() { 
592                                 util.widgets.set_text(e,
593                                     obj.patron.day_phone()
594                                 );
595                             };
596                         }
597                     ],
598                     'patron_evening_phone' : [
599                         ['render'],
600                         function(e) {
601                             return function() { 
602                                 util.widgets.set_text(e,
603                                     obj.patron.evening_phone()
604                                 );
605                             };
606                         }
607                     ],
608                     'patron_other_phone' : [
609                         ['render'],
610                         function(e) {
611                             return function() { 
612                                 util.widgets.set_text(e,
613                                     obj.patron.other_phone()
614                                 );
615                             };
616                         }
617                     ],
618                     'patron_email' : [
619                         ['render'],
620                         function(e) {
621                             return function() { 
622                                 util.widgets.set_text(e,
623                                     obj.patron.email()
624                                 );
625                             };
626                         }
627                     ],
628                     'patron_alias' : [
629                         ['render'],
630                         function(e) {
631                             return function() { 
632                                 util.widgets.set_text(e,
633                                     obj.patron.alias()
634                                 );
635                             };
636                         }
637                     ],
638                     'patron_photo_url' : [
639                         ['render'],
640                         function(e) {
641                             return function() { 
642                                 e.setAttribute('src',
643                                     obj.patron.photo_url()
644                                 );
645                             };
646                         }
647                     ],
648                     'patron_library' : [
649                         ['render'],
650                         function(e) {
651                             return function() { 
652                                 util.widgets.set_text(e,
653                                     obj.OpenILS.data.hash.aou[
654                                         obj.patron.home_ou()
655                                     ].shortname()
656                                 );
657                                 e.setAttribute('tooltiptext',
658                                     obj.OpenILS.data.hash.aou[
659                                         obj.patron.home_ou()
660                                     ].name()
661                                 );
662                             };
663                         }
664                     ],
665                     'patron_last_library' : [
666                         ['render'],
667                         function(e) {
668                             return function() { 
669                                 util.widgets.set_text(e,
670                                     obj.OpenILS.data.hash.aou[
671                                         obj.patron.home_ou()
672                                     ].shortname()
673                                 );
674                                 e.setAttribute('tooltiptext',
675                                     obj.OpenILS.data.hash.aou[
676                                         obj.patron.home_ou()
677                                     ].name()
678                                 );
679                             };
680                         }
681                     ],
682                     'patron_mailing_address_street1' : [
683                         ['render'],
684                         function(e) {
685                             return function() { 
686                                 if (obj.patron.mailing_address()) {
687                                     util.widgets.set_text(e,
688                                         obj.patron.mailing_address().street1()
689                                     );
690                                     if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
691                                 } else {
692                                     util.widgets.set_text(e,'');
693                                 }
694                             };
695                         }
696                     ],
697                     'patron_mailing_address_street2' : [
698                         ['render'],
699                         function(e) {
700                             return function() { 
701                                 if (obj.patron.mailing_address()) {
702                                     util.widgets.set_text(e,
703                                         obj.patron.mailing_address().street2()
704                                     );
705                                     if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
706                                 } else {
707                                     util.widgets.set_text(e,'');
708                                 }
709                             };
710                         }
711                     ],
712                     'patron_mailing_address_city' : [
713                         ['render'],
714                         function(e) {
715                             return function() { 
716                                 if (obj.patron.mailing_address()) {
717                                     util.widgets.set_text(e,
718                                         obj.patron.mailing_address().city()
719                                     );
720                                     if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
721                                 } else {
722                                     util.widgets.set_text(e,'');
723                                 }
724                             };
725                         }
726                     ],
727                     'patron_mailing_address_state' : [
728                         ['render'],
729                         function(e) {
730                             return function() { 
731                                 if (obj.patron.mailing_address()) {
732                                     util.widgets.set_text(e,
733                                         obj.patron.mailing_address().state()
734                                     );
735                                     if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
736                                 } else {
737                                     util.widgets.set_text(e,'');
738                                 }
739                             };
740                         }
741                     ],
742                     'patron_mailing_address_post_code' : [
743                         ['render'],
744                         function(e) {
745                             return function() { 
746                                 if (obj.patron.mailing_address()) {
747                                     util.widgets.set_text(e,
748                                         obj.patron.mailing_address().post_code()
749                                     );
750                                     if (!get_bool(obj.patron.mailing_address().valid())){e.setAttribute('style','color: red');}
751                                 } else {
752                                     util.widgets.set_text(e,'');
753                                 }
754                             };
755                         }
756                     ],
757                     'patron_physical_address_street1' : [
758                         ['render'],
759                         function(e) {
760                             return function() { 
761                                 if (obj.patron.billing_address()) {
762                                     util.widgets.set_text(e,
763                                         obj.patron.billing_address().street1()
764                                     );
765                                     if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
766                                 } else {
767                                     util.widgets.set_text(e,'');
768                                 }
769                             };
770                         }
771                     ],
772                     'patron_physical_address_street2' : [
773                         ['render'],
774                         function(e) {
775                             return function() {
776                                 if (obj.patron.billing_address()) { 
777                                     util.widgets.set_text(e,
778                                         obj.patron.billing_address().street2()
779                                     );
780                                     if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
781                                 } else {
782                                     util.widgets.set_text(e,'');
783                                 }
784                             };
785                         }
786                     ],
787                     'patron_physical_address_city' : [
788                         ['render'],
789                         function(e) {
790                             return function() {
791                                 if (obj.patron.billing_address()) { 
792                                     util.widgets.set_text(e,
793                                         obj.patron.billing_address().city()
794                                     );
795                                     if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
796                                 } else {
797                                     util.widgets.set_text(e,'');
798                                 }
799                             };
800                         }
801                     ],
802                     'patron_physical_address_state' : [
803                         ['render'],
804                         function(e) {
805                             return function() {
806                                 if (obj.patron.billing_address()) { 
807                                     util.widgets.set_text(e,
808                                         obj.patron.billing_address().state()
809                                     );
810                                     if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
811                                 } else {
812                                     util.widgets.set_text(e,'');
813                                 }
814                             };
815                         }
816                     ],
817                     'patron_physical_address_post_code' : [
818                         ['render'],
819                         function(e) {
820                             return function() {
821                                 if (obj.patron.billing_address()) { 
822                                     util.widgets.set_text(e,
823                                         obj.patron.billing_address().post_code()
824                                     );
825                                     if (!get_bool(obj.patron.billing_address().valid())){e.setAttribute('style','color: red');}
826                                 } else {
827                                     util.widgets.set_text(e,'');
828                                 }
829                             };
830                         }
831                     ]
832                 }
833             }
834         );
835
836         obj.retrieve();
837
838         try {
839             var caption = document.getElementById("PatronSummaryContact_caption");
840             var arrow = document.getAnonymousNodes(caption)[0];
841             var gb_content = document.getAnonymousNodes(caption.parentNode)[1];
842             arrow.addEventListener(
843                 'click',
844                 function() {
845                     setTimeout(
846                         function() {
847                             //alert('setting shrink_state to ' + gb_content.hidden);
848                             //caption.setAttribute('shrink_state',gb_content.hidden);
849                             netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
850                             JSAN.use('util.file'); var file = new util.file('patron_id_shrink');
851                             file.set_object(String(gb_content.hidden)); file.close();
852                         }, 0
853                     );
854                 }, false
855             );
856             //var shrink_state = caption.getAttribute('shrink_state');
857             var shrink_state = false;
858             netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
859             JSAN.use('util.file'); var file = new util.file('patron_id_shrink');
860             if (file._file.exists()) {
861                 shrink_state = file.get_object(); file.close();
862             }
863             //alert('shrink_state retrieved as ' + shrink_state);
864             if (shrink_state != 'false' && shrink_state) {
865                 //alert('clicking the widget');
866                 util.widgets.click( arrow );
867             }
868         } catch(E) {
869             obj.error.sdump('D_ERROR','with shrink_state in summary.js: ' + E);
870         }
871     },
872
873     'retrieve' : function() {
874
875         try {
876
877             var obj = this;
878
879             var chain = [];
880
881             // Retrieve the patron
882                 function blah_retrieve() {
883                     try {
884                         var robj;
885                         if (obj.barcode && obj.barcode != 'null') {
886                             robj = obj.network.simple_request(
887                                 'FM_AU_RETRIEVE_VIA_BARCODE.authoritative',
888                                 [ ses(), obj.barcode ]
889                             );
890                         } else if (obj.id && obj.id != 'null') {
891                             robj = obj.network.simple_request(
892                                 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
893                                 [ ses(), obj.id ]
894                             );
895                         } else {
896                             throw(patronStrings.getString('staff.patron.summary.retrieve.no_barcode'));
897                         }
898                         if (robj) {
899
900                             if (instanceOf(robj,au)) {
901
902                                 obj.patron = robj;
903                                 JSAN.use('patron.util');
904                                 util.widgets.set_text('patron_name',
905                                     patron.util.format_name( obj.patron )
906                                 );
907                                 patron.util.set_penalty_css(obj.patron);
908                                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
909                                 data.last_patron = obj.patron.id(); data.stash('last_patron');
910
911                             } else {
912
913                                 throw(robj);
914
915                             }
916                         } else {
917
918                             throw(robj);
919
920                         }
921
922                     } catch(E) {
923                         throw(E);
924                     }
925                 };
926                 blah_retrieve();
927
928             /*
929             // Retrieve the survey responses for required surveys
930             chain.push(
931                 function() {
932                     try {
933                         var surveys = obj.OpenILS.data.list.my_asv;
934                         var survey_responses = {};
935                         for (var i = 0; i < surveys.length; i++) {
936                             var s = obj.network.request(
937                                 api.FM_ASVR_RETRIEVE.app,
938                                 api.FM_ASVR_RETRIEVE.method,
939                                 [ ses(), surveys[i].id(), obj.patron.id() ]
940                             );
941                             survey_responses[ surveys[i].id() ] = s;
942                         }
943                         obj.patron.survey_responses( survey_responses );
944                     } catch(E) {
945                         var error = ('patron.summary.retrieve : ' + js2JSON(E));
946                         obj.error.sdump('D_ERROR',error);
947                         throw(error);
948                     }
949                 }
950             );
951             */
952
953             // Update the screen
954             chain.push( function() { obj.controller.render(); } );
955
956             // On Complete
957
958             chain.push( function() {
959
960                 if (typeof window.xulG == 'object' && typeof window.xulG.on_finished == 'function') {
961                     obj.error.sdump('D_PATRON_SUMMARY',
962                         'patron.summary: Calling external .on_finished()\n');
963                     window.xulG.on_finished(obj.patron);
964                 } else {
965                     obj.error.sdump('D_PATRON_SUMMARY','patron.summary: No external .on_finished()\n');
966                 }
967
968             } );
969
970             // Do it
971             JSAN.use('util.exec'); obj.exec = new util.exec();
972             obj.exec.on_error = function(E) {
973
974                 if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
975                     window.xulG.on_error(E);
976                 } else {
977                     alert(js2JSON(E));
978                 }
979
980             }
981             this.exec.chain( chain );
982
983         } catch(E) {
984             if (typeof window.xulG == 'object' && typeof window.xulG.on_error == 'function') {
985                 window.xulG.on_error(E);
986             } else {
987                 alert(js2JSON(E));
988             }
989         }
990     },
991
992     'group_frame' : function() {
993         var obj = this;
994         try {
995             obj.group_list.clear();
996
997             var robj = obj.network.simple_request(
998                 'FM_AU_LIST_RETRIEVE_VIA_GROUP.authoritative',
999                 [ ses(), obj.patron.usrgroup() ]
1000             );
1001             if ((robj == null) || (typeof robj.ilsevent != 'undefined') ) throw(robj);
1002             var ids = util.functional.filter_list( robj, function(o) { return o != obj.patron.id(); });
1003             var funcs = [];
1004
1005                 function gen_func(r) {
1006                     return function() {
1007                         obj.group_list.append( { 'retrieve_id' : r, 'row' : {} } );
1008                     }
1009                 }
1010
1011             //funcs.push( gen_func(obj.patron.id()) );
1012             for (var i = 0; i < ids.length; i++) {
1013                 funcs.push( gen_func(ids[i]) );
1014             }
1015             JSAN.use('util.exec'); var exec = new util.exec(4);
1016             exec.chain( funcs );
1017         } catch(E) {
1018             alert('Error in summary.js, group_frame(): ' + E);
1019         }
1020     }
1021 }
1022
1023 dump('exiting patron.summary.js\n');