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