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