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