]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/util.js
JavaScript strictness cleanup to reduce warning noise at console
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / util.js
1 dump('entering patron/util.js\n');
2
3 if (typeof patron == 'undefined') var patron = {};
4 patron.util = {};
5
6 patron.util.EXPORT_OK   = [ 
7         'columns', 'mbts_columns', 'mb_columns', 'mp_columns', /*'std_map_row_to_column',*/ 'std_map_row_to_columns',
8         'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'retrieve_fleshed_au_via_barcode', 'set_penalty_css', 'retrieve_name_via_id'
9 ];
10 patron.util.EXPORT_TAGS = { ':all' : patron.util.EXPORT_OK };
11
12 patron.util.mbts_columns = function(modify,params) {
13
14         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
15         JSAN.use('util.money'); JSAN.use('util.date');
16
17     var commonStrings = document.getElementById('commonStrings');
18
19         var c = [
20                 {
21                         'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : commonStrings.getString('staff.mbts_id_label'), 'flex' : 1,
22                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mbts.id(); }
23                 },
24                 {
25                         'persist' : 'hidden width ordinal', 'id' : 'usr', 'label' : commonStrings.getString('staff.mbts_usr_label'), 'flex' : 1,
26                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mbts.usr() ? "Id = " + my.mbts.usr() : ""; }
27                 },
28                 {
29                         'persist' : 'hidden width ordinal', 'id' : 'xact_type', 'label' : commonStrings.getString('staff.mbts_xact_type_label'), 'flex' : 1,
30                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mbts.xact_type(); }
31                 },
32                 {
33                         'persist' : 'hidden width ordinal', 'id' : 'balance_owed', 'label' : commonStrings.getString('staff.mbts_balance_owed_label'), 'flex' : 1,
34                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.balance_owed() ); },
35                         'sort_type' : 'money'
36                 },
37                 {
38                         'persist' : 'hidden width ordinal', 'id' : 'total_owed', 'label' : commonStrings.getString('staff.mbts_total_owed_label'), 'flex' : 1,
39                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.total_owed() ); },
40                         'sort_type' : 'money'
41                 },
42                 {
43                         'persist' : 'hidden width ordinal', 'id' : 'total_paid', 'label' : commonStrings.getString('staff.mbts_total_paid_label'), 'flex' : 1,
44                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.total_paid() ); },
45                         'sort_type' : 'money'
46                 },
47                 {
48                         'persist' : 'hidden width ordinal', 'id' : 'last_billing_note', 'label' : commonStrings.getString('staff.mbts_last_billing_note_label'), 'flex' : 2,
49                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mbts.last_billing_note(); }
50                 },
51                 {
52                         'persist' : 'hidden width ordinal', 'id' : 'last_billing_type', 'label' : commonStrings.getString('staff.mbts_last_billing_type_label'), 'flex' : 1,
53                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mbts.last_billing_type(); }
54                 },
55                 {
56                         'persist' : 'hidden width ordinal', 'id' : 'last_billing_ts', 'label' : commonStrings.getString('staff.mbts_last_billing_timestamp_label'), 'flex' : 1,
57                         'primary' : false, 'hidden' : true, 'render' : function(my) { return util.date.formatted_date( my.mbts.last_billing_ts(), "" ); }
58                 },
59                 {
60                         'persist' : 'hidden width ordinal', 'id' : 'last_payment_note', 'label' : commonStrings.getString('staff.mbts_last_payment_note_label'), 'flex' : 2,
61                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mbts.last_payment_note(); }
62                 },
63                 {
64                         'persist' : 'hidden width ordinal', 'id' : 'last_payment_type', 'label' : commonStrings.getString('staff.mbts_last_payment_type_label'), 'flex' : 1,
65                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mbts.last_payment_type(); }
66                 },
67                 {
68                         'persist' : 'hidden width ordinal', 'id' : 'last_payment_ts', 'label' : commonStrings.getString('staff.mbts_last_payment_timestamp_label'), 'flex' : 1,
69                         'primary' : false, 'hidden' : true, 'render' : function(my) { return util.date.formatted_date( my.mbts.last_payment_ts(), "" ); }
70                 },
71                 {
72                         'persist' : 'hidden width ordinal', 'id' : 'xact_start', 'label' : commonStrings.getString('staff.mbts_xact_start_label'), 'flex' : 1,
73                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mbts.xact_start() ? my.mbts.xact_start().toString().substr(0,10) : ""; }
74                 },
75                 {
76                         'persist' : 'hidden width ordinal', 'id' : 'xact_finish', 'label' : commonStrings.getString('staff.mbts_xact_finish_label'), 'flex' : 1,
77                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mbts.xact_finish() ? my.mbts.xact_finish().toString().substr(0,10) : ""; }
78                 },
79         ];
80         for (var i = 0; i < c.length; i++) {
81                 if (modify[ c[i].id ]) {
82                         for (var j in modify[ c[i].id ]) {
83                                 c[i][j] = modify[ c[i].id ][j];
84                         }
85                 }
86         }
87         if (params) {
88                 if (params.just_these) {
89                         JSAN.use('util.functional');
90                         var new_c = [];
91                         for (var i = 0; i < params.just_these.length; i++) {
92                                 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
93                                 new_c.push( function(y){ return y; }( x ) );
94                         }
95                         c = new_c;
96                 }
97                 if (params.except_these) {
98                         JSAN.use('util.functional');
99                         var new_c = [];
100                         for (var i = 0; i < c.length; i++) {
101                                 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
102                                 if (!x) new_c.push(c[i]);
103                         }
104                         c = new_c;
105                 }
106         }
107         return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
108 }
109
110 patron.util.mb_columns = function(modify,params) {
111
112         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
113         JSAN.use('util.money'); JSAN.use('util.date');
114
115     var commonStrings = document.getElementById('commonStrings');
116
117         var c = [
118                 {
119                         'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : commonStrings.getString('staff.mb_id_label'), 'flex' : 1,
120                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mb.id(); }
121                 },
122                 {
123                         'persist' : 'hidden width ordinal', 'id' : 'voided', 'label' : commonStrings.getString('staff.mb_voided_label'), 'flex' : 1,
124                         'primary' : false, 'hidden' : false, 'render' : function(my) { return get_bool( my.mb.voided() ) ? "Yes" : "No"; }
125                 },
126                 {
127                         'persist' : 'hidden width ordinal', 'id' : 'voider', 'label' : commonStrings.getString('staff.mb_voider_label'), 'flex' : 1,
128                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mb.voider() ? "Id = " + my.mb.voider() : ""; }
129                 },
130                 {
131                         'persist' : 'hidden width ordinal', 'id' : 'void_time', 'label' : commonStrings.getString('staff.mb_void_time_label'), 'flex' : 1,
132                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mb.void_time(); }
133                 },
134                 {
135                         'persist' : 'hidden width ordinal', 'id' : 'amount', 'label' : commonStrings.getString('staff.mb_amount_label'), 'flex' : 1,
136                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.money.sanitize( my.mb.amount() ); },
137                         'sort_type' : 'money'
138                 },
139                 {
140                         'persist' : 'hidden width ordinal', 'id' : 'billing_type', 'label' : commonStrings.getString('staff.mb_billing_type_label'), 'flex' : 1,
141                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mb.billing_type(); }
142                 },
143                 {
144                         'persist' : 'hidden width ordinal', 'id' : 'billing_ts', 'label' : commonStrings.getString('staff.mb_billing_ts_label'), 'flex' : 1,
145                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.date.formatted_date( my.mb.billing_ts(), "" ); }
146                 },
147                 {
148                         'persist' : 'hidden width ordinal', 'id' : 'note', 'label' : commonStrings.getString('staff.mb_note_label'), 'flex' : 2,
149                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mb.note(); }
150                 },
151                 {
152                         'persist' : 'hidden width ordinal', 'id' : 'xact', 'label' : commonStrings.getString('staff.mb_xact_label'), 'flex' : 1,
153                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mb.xact(); }
154                 },
155         ];
156         for (var i = 0; i < c.length; i++) {
157                 if (modify[ c[i].id ]) {
158                         for (var j in modify[ c[i].id ]) {
159                                 c[i][j] = modify[ c[i].id ][j];
160                         }
161                 }
162         }
163         if (params) {
164                 if (params.just_these) {
165                         JSAN.use('util.functional');
166                         var new_c = [];
167                         for (var i = 0; i < params.just_these.length; i++) {
168                                 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
169                                 new_c.push( function(y){ return y; }( x ) );
170                         }
171                         c = new_c;
172                 }
173                 if (params.except_these) {
174                         JSAN.use('util.functional');
175                         var new_c = [];
176                         for (var i = 0; i < c.length; i++) {
177                                 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
178                                 if (!x) new_c.push(c[i]);
179                         }
180                         c = new_c;
181                 }
182
183         }
184         return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
185 }
186
187 patron.util.mp_columns = function(modify,params) {
188
189         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
190         JSAN.use('util.money'); JSAN.use('util.date'); JSAN.use('patron.util');
191
192     var commonStrings = document.getElementById('commonStrings');
193
194         var c = [
195                 {
196                         'persist' : 'hidden width ordinal', 'id' : 'mp_id', 'label' : commonStrings.getString('staff.mp_id_label'), 'flex' : 1,
197                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mp.id(); }
198                 },
199                 {
200                         'persist' : 'hidden width ordinal', 'id' : 'mp_amount', 'label' : commonStrings.getString('staff.mp_amount_label'), 'flex' : 1,
201                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.money.sanitize( my.mp.amount() ); },
202                         'sort_type' : 'money'
203                 },
204                 {
205                         'persist' : 'hidden width ordinal', 'id' : 'mp_payment_type', 'label' : commonStrings.getString('staff.mp_payment_type_label'), 'flex' : 1,
206                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mp.payment_type(); }
207                 },
208                 {
209                         'persist' : 'hidden width ordinal', 'id' : 'mp_payment_ts', 'label' : commonStrings.getString('staff.mp_payment_timestamp_label'), 'flex' : 1,
210                         'primary' : false, 'hidden' : false, 'render' : function(my) { return util.date.formatted_date( my.mp.payment_ts(), "" ); }
211                 },
212                 {
213                         'persist' : 'hidden width ordinal', 'id' : 'mp_note', 'label' : commonStrings.getString('staff.mp_note_label'), 'flex' : 2,
214                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mp.note(); }
215                 },
216                 {
217                         'persist' : 'hidden width ordinal', 'id' : 'mp_ws', 'label' : commonStrings.getString('staff.mp_cash_drawer_label'), 'flex' : 1,
218                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.mp.cash_drawer().name(); }
219                 },
220                 {
221                         'persist' : 'hidden width ordinal', 'id' : 'mp_staff', 'label' : commonStrings.getString('staff.mp_accepting_usr_label'), 'flex' : 1,
222                         'primary' : false, 'hidden' : false, 'render' : function(my) { var s = my.mp.accepting_usr(); if (s && typeof s != "object") s = patron.util.retrieve_fleshed_au_via_id(ses(),s); return s.family_name() + " (" + s.card().barcode() + ") @ " + data.hash.aou[ s.home_ou() ].shortname(); }
223                 },
224                 {
225                         'persist' : 'hidden width ordinal', 'id' : 'mp_xact', 'label' : commonStrings.getString('staff.mp_xact_label'), 'flex' : 1,
226                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.mp.xact(); }
227                 },
228         ];
229         for (var i = 0; i < c.length; i++) {
230                 if (modify[ c[i].id ]) {
231                         for (var j in modify[ c[i].id ]) {
232                                 c[i][j] = modify[ c[i].id ][j];
233                         }
234                 }
235         }
236         if (params) {
237                 if (params.just_these) {
238                         JSAN.use('util.functional');
239                         var new_c = [];
240                         for (var i = 0; i < params.just_these.length; i++) {
241                                 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
242                                 new_c.push( function(y){ return y; }( x ) );
243                         }
244                         c = new_c;
245                 }
246                 if (params.except_these) {
247                         JSAN.use('util.functional');
248                         var new_c = [];
249                         for (var i = 0; i < c.length; i++) {
250                                 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
251                                 if (!x) new_c.push(c[i]);
252                         }
253                         c = new_c;
254                 }
255
256         }
257         return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
258 }
259
260 patron.util.columns = function(modify,params) {
261         
262         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
263
264     var commonStrings = document.getElementById('commonStrings');
265
266         var c = [
267                 {
268                         'persist' : 'hidden width ordinal', 'id' : 'barcode', 'label' : commonStrings.getString('staff.card_barcode_label'), 'flex' : 1, 
269                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.card().barcode(); }
270                 },
271                 { 
272                         'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : commonStrings.getString('staff.au_usrname_label'), 'flex' : 1, 
273                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.usrname(); }
274                 },
275                 { 
276                         'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : commonStrings.getString('staff.au_profile_label'), 'flex' : 1, 
277                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.pgt[ my.au.profile() ].name(); }
278                 },
279                 { 
280                         'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : commonStrings.getString('staff.au_active_label'), 'flex' : 1, 
281                         'primary' : false, 'hidden' : true, 'render' : function(my) { return get_bool( my.au.active() ) ? "Yes" : "No"; }
282                 },
283                 {
284                         'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : commonStrings.getString('staff.au_barred_label'), 'flex' : 1,
285                         'primary' : false, 'hidden' : true, 'render' : function(my) { return get_bool( my.au.barred() ) ? "Yes" : "No"; }
286                 },
287                 { 
288                         'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : document.getElementById('commonStrings').getString('staff.au_id_label'), 'flex' : 1, 
289                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.id(); }
290                 },
291                 { 
292                         'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_prefix_label'), 'flex' : 1, 
293                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.prefix(); }
294                 },
295                 { 
296                         'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : document.getElementById('commonStrings').getString('staff.au_family_name_label'), 'flex' : 1, 
297                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.family_name(); }
298                 },
299                 { 
300                         'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_first_given_name_label'), 'flex' : 1, 
301                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.first_given_name(); }
302                 },
303                 { 
304                         'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_second_given_name_label'), 'flex' : 1, 
305                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.second_given_name(); }
306                 },
307                 { 
308                         'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_suffix_label'), 'flex' : 1, 
309                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.suffix(); }
310                 },
311                 { 
312                         'persist' : 'hidden width ordinal', 'id' : 'alert_message', 'label' : commonStrings.getString('staff.au_alert_message_label'), 'flex' : 1, 
313                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.alert_message(); }
314                 },
315                 { 
316                         'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : commonStrings.getString('staff.au_claims_returned_count_label'), 'flex' : 1, 
317                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.claims_returned_count(); },
318                         'sort_type' : 'number'
319                 },
320                 { 
321                         'persist' : 'hidden width ordinal', 'id' : 'create_date', 'label' : commonStrings.getString('staff.au_create_date_label'), 'flex' : 1, 
322                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.create_date(); }
323                 },
324                 { 
325                         'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : commonStrings.getString('staff.au_expire_date_label'), 'flex' : 1, 
326                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.expire_date().substr(0,10); }
327                 },
328                 { 
329                         'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : commonStrings.getString('staff.au_home_library_label'), 'flex' : 1, 
330                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].shortname(); }
331                 },
332                 { 
333                         'persist' : 'hidden width ordinal', 'id' : 'home_ou_fullname', 'label' : commonStrings.getString('staff.au_home_library_fullname_label'), 'flex' : 1, 
334                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].name(); }
335                 },
336                 { 
337                         'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : commonStrings.getString('staff.au_credit_forward_balance_label'), 'flex' : 1, 
338                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.credit_forward_balance(); },
339                         'sort_type' : 'money'
340                 },
341                 { 
342                         'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : commonStrings.getString('staff.au_day_phone_label'), 'flex' : 1, 
343                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.day_phone(); }
344                 },
345                 { 
346                         'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : commonStrings.getString('staff.au_evening_phone_label'), 'flex' : 1, 
347                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.evening_phone(); }
348                 },
349                 { 
350                         'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : commonStrings.getString('staff.au_other_phone_label'), 'flex' : 1, 
351                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.other_phone(); }
352                 },
353                 { 
354                         'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : commonStrings.getString('staff.au_email_label'), 'flex' : 1, 
355                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.email(); }
356                 },
357                 { 
358                         'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : commonStrings.getString('staff.au_birth_date_label'), 'flex' : 1, 
359                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.dob().substr(0,10); }
360                 },
361                 { 
362                         'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : commonStrings.getString('staff.au_ident_type_label'), 'flex' : 1, 
363                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.cit[ my.au.ident_type() ].name(); }
364                 },
365                 { 
366                         'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : commonStrings.getString('staff.au_ident_value_label'), 'flex' : 1, 
367                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.ident_value(); }
368                 },
369                 { 
370                         'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : commonStrings.getString('staff.au_ident_type2_label'), 'flex' : 1, 
371                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.cit[ my.au.ident_type2() ].name(); }
372                 },
373                 { 
374                         'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : commonStrings.getString('staff.au_ident_value2_label'), 'flex' : 1, 
375                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.ident_value2(); }
376                 },
377                 { 
378                         'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : commonStrings.getString('staff.au_net_access_level_label'), 'flex' : 1, 
379                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.net_access_level(); }
380                 },
381                 { 
382                         'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : commonStrings.getString('staff.au_master_account_label'), 'flex' : 1, 
383                         'primary' : false, 'hidden' : true, 'render' : function(my) { return get_bool( my.au.master_account() ) ? "Yes" : "No"; }
384                 },
385                 { 
386                         'persist' : 'hidden width ordinal', 'id' : 'usrgroup', 'label' : commonStrings.getString('staff.au_group_id_label'), 'flex' : 1, 
387                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.usrgroup(); }
388                 },
389         ];
390         for (var i = 0; i < c.length; i++) {
391                 if (modify[ c[i].id ]) {
392                         for (var j in modify[ c[i].id ]) {
393                                 c[i][j] = modify[ c[i].id ][j];
394                         }
395                 }
396         }
397         if (params) {
398                 if (params.just_these) {
399                         JSAN.use('util.functional');
400                         var new_c = [];
401                         for (var i = 0; i < params.just_these.length; i++) {
402                                 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
403                                 new_c.push( function(y){ return y; }( x ) );
404                         }
405                         c = new_c;
406                 }
407                 if (params.except_these) {
408                         JSAN.use('util.functional');
409                         var new_c = [];
410                         for (var i = 0; i < c.length; i++) {
411                                 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
412                                 if (!x) new_c.push(c[i]);
413                         }
414                         c = new_c;
415                 }
416
417         }
418         return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
419 }
420
421 patron.util.std_map_row_to_columns = function(error_value) {
422         return function(row,cols) {
423                 // row contains { 'my' : { 'au' : {} } }
424                 // cols contains all of the objects listed above in columns
425                 
426                 var obj = {}; obj.OpenILS = {}; 
427                 JSAN.use('util.error'); obj.error = new util.error();
428                 JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
429                 JSAN.use('util.date'); JSAN.use('util.money');
430
431                 var my = row.my;
432                 var values = [];
433                 var cmd = '';
434                 try { 
435                         for (var i = 0; i < cols.length; i++) {
436                                 switch (typeof cols[i].render) {
437                                         case 'function': try { values[i] = cols[i].render(my); } catch(E) { values[i] = error_value; obj.error.sdump('D_COLUMN_RENDER_ERROR',E); } break;
438                                         case 'string' : cmd += 'try { ' + cols[i].render + '; values['+i+'] = v; } catch(E) { values['+i+'] = error_value; }'; break;
439                                         default: cmd += 'values['+i+'] = "??? '+(typeof cols[i].render)+'"; ';
440                                 }
441                         }
442                         if (cmd) eval( cmd );
443                 } catch(E) {
444                         obj.error.sdump('D_WARN','map_row_to_column: ' + E);
445                         if (error_value) { value = error_value; } else { value = '   ' };
446                 }
447                 return values;
448         }
449 }
450
451 patron.util.retrieve_au_via_id = function(session, id, f) {
452         JSAN.use('util.network');
453         var network = new util.network();
454         var patron_obj = network.simple_request(
455                 'FM_AU_RETRIEVE_VIA_ID',
456                 [ session, id ],
457                 f
458         );
459         return patron_obj;
460 }
461
462 patron.util.retrieve_name_via_id = function(session, id) {
463         JSAN.use('util.network');
464         var network = new util.network();
465         var parts = network.simple_request(
466                 'BLOB_AU_PARTS_RETRIEVE',
467                 [ session, id, ['family_name', 'first_given_name', 'second_given_name', 'home_ou' ] ]
468         );
469         return parts;
470 }
471
472 patron.util.retrieve_fleshed_au_via_id = function(session, id) {
473         JSAN.use('util.network');
474         var network = new util.network();
475         var patron_obj = network.simple_request(
476                 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
477                 [ session, id ]
478         );
479         patron.util.set_penalty_css(patron_obj);
480         return patron_obj;
481 }
482
483 patron.util.retrieve_fleshed_au_via_barcode = function(session, id) {
484         JSAN.use('util.network');
485         var network = new util.network();
486         var patron_obj = network.simple_request(
487                 'FM_AU_RETRIEVE_VIA_BARCODE.authoritative',
488                 [ session, id ]
489         );
490         patron.util.set_penalty_css(patron_obj);
491         return patron_obj;
492 }
493
494 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
495
496 patron.util.set_penalty_css = function(patron) {
497         try {
498                                                         removeCSSClass(document.documentElement,'PATRON_HAS_BILLS');
499                                                         removeCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
500                                                         removeCSSClass(document.documentElement,'PATRON_HAS_NOTES');
501                                                         removeCSSClass(document.documentElement,'PATRON_EXCEEDS_CHECKOUT_COUNT');
502                                                         removeCSSClass(document.documentElement,'PATRON_EXCEEDS_OVERDUE_COUNT');
503                                                         removeCSSClass(document.documentElement,'PATRON_EXCEEDS_FINES');
504                                                         removeCSSClass(document.documentElement,'NO_PENALTIES');
505                                                         removeCSSClass(document.documentElement,'ONE_PENALTY');
506                                                         removeCSSClass(document.documentElement,'MULTIPLE_PENALTIES');
507                                                         removeCSSClass(document.documentElement,'PATRON_HAS_ALERT');
508                                                         removeCSSClass(document.documentElement,'PATRON_BARRED');
509                                                         removeCSSClass(document.documentElement,'PATRON_INACTIVE');
510                                                         removeCSSClass(document.documentElement,'PATRON_EXPIRED');
511                                                         removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
512                                                         removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
513                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_65');
514                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_65');
515                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_24');
516                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_24');
517                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_21');
518                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_21');
519                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_18');
520                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_18');
521                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_13');
522                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_13');
523                                                         removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_1');
524                                                         removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_2');
525                                                         removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_3');
526
527                 JSAN.use('util.network'); var net = new util.network();
528                 net.simple_request('FM_MOUS_RETRIEVE.authoritative',[ ses(), patron.id() ], function(req) {
529                         if (req.getResultObject().balance_owed() > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
530                 });
531                 net.simple_request('FM_CIRC_COUNT_RETRIEVE_VIA_USER.authoritative',[ ses(), patron.id() ], function(req) {
532                         try {
533                                 var co = req.getResultObject();
534                                 if (co.overdue > 0 || co.long_overdue > 0) addCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
535                         } catch(E) {
536                                 alert(E);
537                         }
538                 });
539                 net.simple_request('FM_AUN_RETRIEVE_ALL.authoritative',[ ses(), { 'patronid' : patron.id() } ], function(req) {
540                         var notes = req.getResultObject();
541                         if (notes.length > 0) addCSSClass(document.documentElement,'PATRON_HAS_NOTES');
542                 });
543
544                 /*
545                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
546                 data.last_patron = patron.id(); data.stash('last_patron');
547                 */
548
549                 var penalties = patron.standing_penalties();
550                 for (var i = 0; i < penalties.length; i++) {
551                         /* this comes from /opac/common/js/utils.js */
552                         addCSSClass(document.documentElement,penalties[i].penalty_type());
553                 }
554
555                 switch(penalties.length) {
556                         case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
557                         case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
558                         default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
559                 }
560
561                 if (patron.alert_message()) {
562                         addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
563                 }
564
565                 if (get_bool( patron.barred() )) {
566                         addCSSClass(document.documentElement,'PATRON_BARRED');
567                 }
568
569                 if (!get_bool( patron.active() )) {
570                         addCSSClass(document.documentElement,'PATRON_INACTIVE');
571                 }
572
573                 try { addCSSClass(document.documentElement,'PATRON_NET_ACCESS_' + patron.net_access_level()); } catch(E) {}
574
575                 var now = new Date();
576                 now = now.getTime()/1000;
577
578                 var expire_parts = patron.expire_date().substr(0,10).split('-');
579                 expire_parts[1] = expire_parts[1] - 1;
580
581                 var expire = new Date();
582                 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
583                 expire = expire.getTime()/1000
584
585                 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
586
587                 if (patron.dob()) {
588                         var age_parts = patron.dob().substr(0,10).split('-');
589                         age_parts[1] = age_parts[1] - 1;
590
591                         var born = new Date();
592                         born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
593                         born = born.getTime()/1000
594
595                         var patron_age = now - born;
596                         var years_old = Number(patron_age / TIME.year);
597
598                         addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
599
600                         if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
601                         if ( years_old < 65 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
602                 
603                         if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
604                         if ( years_old < 24 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
605                         
606                         if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
607                         if ( years_old < 21 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
608                 
609                         if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
610                         if ( years_old < 18 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
611                 
612                         if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
613                         if ( years_old < 13 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
614                 } else {
615                         addCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
616                 }
617
618                 if (patron.mailing_address()) {
619                         if (!get_bool(patron.mailing_address().valid())) {
620                                 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
621                         }
622                 }
623                 if (patron.billing_address()) {
624                         if (!get_bool(patron.billing_address().valid())) {
625                                 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
626                         }
627                 }
628
629         } catch(E) {
630                 dump('patron.util.set_penalty_css: ' + E + '\n');
631                 alert('patron.util.set_penalty_css: ' + E + '\n');
632         }
633 }
634
635
636 dump('exiting patron/util.js\n');