]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/util.js
re-orient this interface from scaffolding off of csp's to just using ausp's. Need...
[working/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.ausp_columns = function(modify,params) {
261
262         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
263     JSAN.use('util.functional');
264
265     var commonStrings = document.getElementById('commonStrings');
266
267         var c = [
268                 {
269                         'persist' : 'hidden width ordinal', 'id' : 'csp_id', 'label' : commonStrings.getString('staff.csp_id_label'), 'flex' : 1,
270                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.csp.id(); }
271                 },
272                 {
273                         'persist' : 'hidden width ordinal', 'id' : 'csp_name', 'label' : commonStrings.getString('staff.csp_name_label'), 'flex' : 1,
274                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.csp.name(); }
275                 },
276                 {
277                         'persist' : 'hidden width ordinal', 'id' : 'csp_label', 'label' : commonStrings.getString('staff.csp_label_label'), 'flex' : 1,
278                         'primary' : false, 'hidden' : false, 'render' : function(my) { return my.csp.label(); }
279                 },
280                 {
281                         'persist' : 'hidden width ordinal', 'id' : 'csp_block_list', 'label' : commonStrings.getString('staff.csp_block_list_label'), 'flex' : 1,
282                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.csp.block_list(); }
283                 },
284                 {
285                         'persist' : 'hidden width ordinal', 'id' : 'csp_block_circ', 'label' : commonStrings.getString('staff.csp_block_circ_label'), 'flex' : 1,
286                         'primary' : false, 'hidden' : true, 'render' : function(my) { 
287                 return String( my.csp.block_list() ).match('CIRC') ? commonStrings.getString('staff.csp_block_circ_yes') : commonStrings.getString('staff.csp_block_circ_no'); 
288             }
289                 },
290                 {
291                         'persist' : 'hidden width ordinal', 'id' : 'csp_block_renew', 'label' : commonStrings.getString('staff.csp_block_renew_label'), 'flex' : 1,
292                         'primary' : false, 'hidden' : true, 'render' : function(my) { 
293                 return String( my.csp.block_list() ).match('RENEW') ? commonStrings.getString('staff.csp_block_renew_yes') : commonStrings.getString('staff.csp_block_renew_no'); 
294
295             }
296                 },
297                 {
298                         'persist' : 'hidden width ordinal', 'id' : 'csp_block_hold', 'label' : commonStrings.getString('staff.csp_block_hold_label'), 'flex' : 1,
299                         'primary' : false, 'hidden' : true, 'render' : function(my) { 
300                 return String( my.csp.block_list() ).match('HOLD') ?  commonStrings.getString('staff.csp_block_hold_yes') : commonStrings.getString('staff.csp_block_hold_no'); 
301             }
302                 },
303                 {
304                         'persist' : 'hidden width ordinal', 'id' : 'ausp_staff', 'label' : commonStrings.getString('staff.ausp_staff_label'), 'flex' : 1,
305                         'primary' : false, 'hidden' : true, 'render' : function(my) { 
306                 return my.ausp ? my.ausp.staff() : '';
307             }
308         },
309                 {
310                         'persist' : 'hidden width ordinal', 'id' : 'ausp_set_date', 'label' : commonStrings.getString('staff.ausp_set_date_label'), 'flex' : 1,
311                         'primary' : false, 'hidden' : false, 'render' : function(my) { 
312                 return my.ausp ? my.ausp.set_date() : '';
313             }
314         },
315                 {
316                         'persist' : 'hidden width ordinal', 'id' : 'ausp_note', 'label' : commonStrings.getString('staff.ausp_note_label'), 'flex' : 1,
317                         'primary' : false, 'hidden' : false, 'render' : function(my) { 
318                 return my.ausp ? my.ausp.note() : '';
319             }
320         },
321                 {
322                         'persist' : 'hidden width ordinal', 'id' : 'ausp_org_unit', 'label' : commonStrings.getString('staff.ausp_org_unit_label'), 'flex' : 1,
323                         'primary' : false, 'hidden' : false, 'render' : function(my) { 
324                 return my.ausp ? data.hash.aou[ my.ausp.org_unit() ].shortname() : '';
325             }
326         }
327         ];
328         for (var i = 0; i < c.length; i++) {
329                 if (modify[ c[i].id ]) {
330                         for (var j in modify[ c[i].id ]) {
331                                 c[i][j] = modify[ c[i].id ][j];
332                         }
333                 }
334         }
335         if (params) {
336                 if (params.just_these) {
337                         var new_c = [];
338                         for (var i = 0; i < params.just_these.length; i++) {
339                                 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
340                                 new_c.push( function(y){ return y; }( x ) );
341                         }
342                         c = new_c;
343                 }
344                 if (params.except_these) {
345                         var new_c = [];
346                         for (var i = 0; i < c.length; i++) {
347                                 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
348                                 if (!x) new_c.push(c[i]);
349                         }
350                         c = new_c;
351                 }
352
353         }
354         return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
355 }
356
357
358 patron.util.columns = function(modify,params) {
359         
360         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
361
362     var commonStrings = document.getElementById('commonStrings');
363
364         var c = [
365                 {
366                         'persist' : 'hidden width ordinal', 'id' : 'barcode', 'label' : commonStrings.getString('staff.card_barcode_label'), 'flex' : 1, 
367                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.card().barcode(); }
368                 },
369                 { 
370                         'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : commonStrings.getString('staff.au_usrname_label'), 'flex' : 1, 
371                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.usrname(); }
372                 },
373                 { 
374                         'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : commonStrings.getString('staff.au_profile_label'), 'flex' : 1, 
375                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.pgt[ my.au.profile() ].name(); }
376                 },
377                 { 
378                         'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : commonStrings.getString('staff.au_active_label'), 'flex' : 1, 
379                         'primary' : false, 'hidden' : true, 'render' : function(my) { return get_bool( my.au.active() ) ? "Yes" : "No"; }
380                 },
381                 {
382                         'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : commonStrings.getString('staff.au_barred_label'), 'flex' : 1,
383                         'primary' : false, 'hidden' : true, 'render' : function(my) { return get_bool( my.au.barred() ) ? "Yes" : "No"; }
384                 },
385                 { 
386                         'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : document.getElementById('commonStrings').getString('staff.au_id_label'), 'flex' : 1, 
387                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.id(); }
388                 },
389                 { 
390                         'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_prefix_label'), 'flex' : 1, 
391                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.prefix(); }
392                 },
393                 { 
394                         'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : document.getElementById('commonStrings').getString('staff.au_family_name_label'), 'flex' : 1, 
395                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.family_name(); }
396                 },
397                 { 
398                         'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_first_given_name_label'), 'flex' : 1, 
399                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.first_given_name(); }
400                 },
401                 { 
402                         'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_second_given_name_label'), 'flex' : 1, 
403                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.second_given_name(); }
404                 },
405                 { 
406                         'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_suffix_label'), 'flex' : 1, 
407                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.suffix(); }
408                 },
409                 { 
410                         'persist' : 'hidden width ordinal', 'id' : 'alert_message', 'label' : commonStrings.getString('staff.au_alert_message_label'), 'flex' : 1, 
411                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.alert_message(); }
412                 },
413                 { 
414                         'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : commonStrings.getString('staff.au_claims_returned_count_label'), 'flex' : 1, 
415                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.claims_returned_count(); },
416                         'sort_type' : 'number'
417                 },
418                 { 
419                         'persist' : 'hidden width ordinal', 'id' : 'create_date', 'label' : commonStrings.getString('staff.au_create_date_label'), 'flex' : 1, 
420                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.create_date(); }
421                 },
422                 { 
423                         'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : commonStrings.getString('staff.au_expire_date_label'), 'flex' : 1, 
424                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.expire_date().substr(0,10); }
425                 },
426                 { 
427                         'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : commonStrings.getString('staff.au_home_library_label'), 'flex' : 1, 
428                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].shortname(); }
429                 },
430                 { 
431                         'persist' : 'hidden width ordinal', 'id' : 'home_ou_fullname', 'label' : commonStrings.getString('staff.au_home_library_fullname_label'), 'flex' : 1, 
432                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].name(); }
433                 },
434                 { 
435                         'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : commonStrings.getString('staff.au_credit_forward_balance_label'), 'flex' : 1, 
436                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.credit_forward_balance(); },
437                         'sort_type' : 'money'
438                 },
439                 { 
440                         'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : commonStrings.getString('staff.au_day_phone_label'), 'flex' : 1, 
441                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.day_phone(); }
442                 },
443                 { 
444                         'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : commonStrings.getString('staff.au_evening_phone_label'), 'flex' : 1, 
445                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.evening_phone(); }
446                 },
447                 { 
448                         'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : commonStrings.getString('staff.au_other_phone_label'), 'flex' : 1, 
449                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.other_phone(); }
450                 },
451                 { 
452                         'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : commonStrings.getString('staff.au_email_label'), 'flex' : 1, 
453                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.email(); }
454                 },
455                 { 
456                         'persist' : 'hidden width ordinal', 'id' : 'alias', 'label' : commonStrings.getString('staff.au_alias_label'), 'flex' : 1, 
457                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.alias(); }
458                 },
459                 { 
460                         'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : commonStrings.getString('staff.au_birth_date_label'), 'flex' : 1, 
461                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.dob().substr(0,10); }
462                 },
463                 { 
464                         'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : commonStrings.getString('staff.au_ident_type_label'), 'flex' : 1, 
465                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.cit[ my.au.ident_type() ].name(); }
466                 },
467                 { 
468                         'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : commonStrings.getString('staff.au_ident_value_label'), 'flex' : 1, 
469                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.ident_value(); }
470                 },
471                 { 
472                         'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : commonStrings.getString('staff.au_ident_type2_label'), 'flex' : 1, 
473                         'primary' : false, 'hidden' : true, 'render' : function(my) { return data.hash.cit[ my.au.ident_type2() ].name(); }
474                 },
475                 { 
476                         'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : commonStrings.getString('staff.au_ident_value2_label'), 'flex' : 1, 
477                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.ident_value2(); }
478                 },
479                 { 
480                         'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : commonStrings.getString('staff.au_net_access_level_label'), 'flex' : 1, 
481                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.net_access_level(); }
482                 },
483                 { 
484                         'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : commonStrings.getString('staff.au_master_account_label'), 'flex' : 1, 
485                         'primary' : false, 'hidden' : true, 'render' : function(my) { return get_bool( my.au.master_account() ) ? "Yes" : "No"; }
486                 },
487                 { 
488                         'persist' : 'hidden width ordinal', 'id' : 'usrgroup', 'label' : commonStrings.getString('staff.au_group_id_label'), 'flex' : 1, 
489                         'primary' : false, 'hidden' : true, 'render' : function(my) { return my.au.usrgroup(); }
490                 },
491         ];
492         for (var i = 0; i < c.length; i++) {
493                 if (modify[ c[i].id ]) {
494                         for (var j in modify[ c[i].id ]) {
495                                 c[i][j] = modify[ c[i].id ][j];
496                         }
497                 }
498         }
499         if (params) {
500                 if (params.just_these) {
501                         JSAN.use('util.functional');
502                         var new_c = [];
503                         for (var i = 0; i < params.just_these.length; i++) {
504                                 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
505                                 new_c.push( function(y){ return y; }( x ) );
506                         }
507                         c = new_c;
508                 }
509                 if (params.except_these) {
510                         JSAN.use('util.functional');
511                         var new_c = [];
512                         for (var i = 0; i < c.length; i++) {
513                                 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
514                                 if (!x) new_c.push(c[i]);
515                         }
516                         c = new_c;
517                 }
518
519         }
520         return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
521 }
522
523 patron.util.std_map_row_to_columns = function(error_value) {
524         return function(row,cols) {
525                 // row contains { 'my' : { 'au' : {} } }
526                 // cols contains all of the objects listed above in columns
527                 
528                 var obj = {}; obj.OpenILS = {}; 
529                 JSAN.use('util.error'); obj.error = new util.error();
530                 JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
531                 JSAN.use('util.date'); JSAN.use('util.money');
532
533                 var my = row.my;
534                 var values = [];
535                 var cmd = '';
536                 try { 
537                         for (var i = 0; i < cols.length; i++) {
538                                 switch (typeof cols[i].render) {
539                                         case 'function': try { values[i] = cols[i].render(my); } catch(E) { values[i] = error_value; obj.error.sdump('D_COLUMN_RENDER_ERROR',E); } break;
540                                         case 'string' : cmd += 'try { ' + cols[i].render + '; values['+i+'] = v; } catch(E) { values['+i+'] = error_value; }'; break;
541                                         default: cmd += 'values['+i+'] = "??? '+(typeof cols[i].render)+'"; ';
542                                 }
543                         }
544                         if (cmd) eval( cmd );
545                 } catch(E) {
546                         obj.error.sdump('D_WARN','map_row_to_column: ' + E);
547                         if (error_value) { value = error_value; } else { value = '   ' };
548                 }
549                 return values;
550         }
551 }
552
553 patron.util.retrieve_au_via_id = function(session, id, f) {
554         JSAN.use('util.network');
555         var network = new util.network();
556         var patron_obj = network.simple_request(
557                 'FM_AU_RETRIEVE_VIA_ID',
558                 [ session, id ],
559                 f
560         );
561         return patron_obj;
562 }
563
564 patron.util.retrieve_name_via_id = function(session, id) {
565         JSAN.use('util.network');
566         var network = new util.network();
567         var parts = network.simple_request(
568                 'BLOB_AU_PARTS_RETRIEVE',
569                 [ session, id, ['family_name', 'first_given_name', 'second_given_name', 'home_ou' ] ]
570         );
571         return parts;
572 }
573
574 patron.util.retrieve_fleshed_au_via_id = function(session, id) {
575         JSAN.use('util.network');
576         var network = new util.network();
577         var patron_obj = network.simple_request(
578                 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
579                 [ session, id ]
580         );
581         patron.util.set_penalty_css(patron_obj);
582         return patron_obj;
583 }
584
585 patron.util.retrieve_fleshed_au_via_barcode = function(session, id) {
586         JSAN.use('util.network');
587         var network = new util.network();
588         var patron_obj = network.simple_request(
589                 'FM_AU_RETRIEVE_VIA_BARCODE.authoritative',
590                 [ session, id ]
591         );
592         patron.util.set_penalty_css(patron_obj);
593         return patron_obj;
594 }
595
596 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
597
598 patron.util.set_penalty_css = function(patron) {
599         try {
600                                                         removeCSSClass(document.documentElement,'PATRON_HAS_BILLS');
601                                                         removeCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
602                                                         removeCSSClass(document.documentElement,'PATRON_HAS_NOTES');
603                                                         removeCSSClass(document.documentElement,'PATRON_EXCEEDS_CHECKOUT_COUNT');
604                                                         removeCSSClass(document.documentElement,'PATRON_EXCEEDS_OVERDUE_COUNT');
605                                                         removeCSSClass(document.documentElement,'PATRON_EXCEEDS_FINES');
606                                                         removeCSSClass(document.documentElement,'NO_PENALTIES');
607                                                         removeCSSClass(document.documentElement,'ONE_PENALTY');
608                                                         removeCSSClass(document.documentElement,'MULTIPLE_PENALTIES');
609                                                         removeCSSClass(document.documentElement,'PATRON_HAS_ALERT');
610                                                         removeCSSClass(document.documentElement,'PATRON_BARRED');
611                                                         removeCSSClass(document.documentElement,'PATRON_INACTIVE');
612                                                         removeCSSClass(document.documentElement,'PATRON_EXPIRED');
613                                                         removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
614                                                         removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
615                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_65');
616                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_65');
617                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_24');
618                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_24');
619                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_21');
620                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_21');
621                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_18');
622                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_18');
623                                                         removeCSSClass(document.documentElement,'PATRON_AGE_GE_13');
624                                                         removeCSSClass(document.documentElement,'PATRON_AGE_LT_13');
625                                                         removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_1');
626                                                         removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_2');
627                                                         removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_3');
628
629                 JSAN.use('util.network'); var net = new util.network();
630                 net.simple_request('FM_MOUS_RETRIEVE.authoritative',[ ses(), patron.id() ], function(req) {
631                         if (req.getResultObject().balance_owed() > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
632                 });
633                 net.simple_request('FM_CIRC_COUNT_RETRIEVE_VIA_USER.authoritative',[ ses(), patron.id() ], function(req) {
634                         try {
635                                 var co = req.getResultObject();
636                                 if (co.overdue > 0 || co.long_overdue > 0) addCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
637                         } catch(E) {
638                                 alert(E);
639                         }
640                 });
641                 net.simple_request('FM_AUN_RETRIEVE_ALL.authoritative',[ ses(), { 'patronid' : patron.id() } ], function(req) {
642                         var notes = req.getResultObject();
643                         if (notes.length > 0) addCSSClass(document.documentElement,'PATRON_HAS_NOTES');
644                 });
645
646                 /*
647                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
648                 data.last_patron = patron.id(); data.stash('last_patron');
649                 */
650
651                 var penalties = patron.standing_penalties();
652                 for (var i = 0; i < penalties.length; i++) {
653                         /* this comes from /opac/common/js/utils.js */
654                         addCSSClass(document.documentElement,penalties[i].standing_penalty().name());
655                 }
656
657                 switch(penalties.length) {
658                         case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
659                         case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
660                         default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
661                 }
662
663                 if (patron.alert_message()) {
664                         addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
665                 }
666
667                 if (get_bool( patron.barred() )) {
668                         addCSSClass(document.documentElement,'PATRON_BARRED');
669                 }
670
671                 if (!get_bool( patron.active() )) {
672                         addCSSClass(document.documentElement,'PATRON_INACTIVE');
673                 }
674
675                 try { addCSSClass(document.documentElement,'PATRON_NET_ACCESS_' + patron.net_access_level()); } catch(E) {}
676
677                 var now = new Date();
678                 now = now.getTime()/1000;
679
680                 var expire_parts = patron.expire_date().substr(0,10).split('-');
681                 expire_parts[1] = expire_parts[1] - 1;
682
683                 var expire = new Date();
684                 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
685                 expire = expire.getTime()/1000
686
687                 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
688
689                 if (patron.dob()) {
690                         var age_parts = patron.dob().substr(0,10).split('-');
691                         age_parts[1] = age_parts[1] - 1;
692
693                         var born = new Date();
694                         born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
695                         born = born.getTime()/1000
696
697                         var patron_age = now - born;
698                         var years_old = Number(patron_age / TIME.year);
699
700                         addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
701
702                         if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
703                         if ( years_old < 65 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
704                 
705                         if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
706                         if ( years_old < 24 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
707                         
708                         if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
709                         if ( years_old < 21 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
710                 
711                         if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
712                         if ( years_old < 18 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
713                 
714                         if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
715                         if ( years_old < 13 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
716                 } else {
717                         addCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
718                 }
719
720         if ( get_bool( patron.juvenile() ) ) addCSSClass(document.documentElement,'PATRON_JUVENILE');
721         else removeCSSClass(document.documentElement,'PATRON_JUVENILE');
722
723                 if (patron.mailing_address()) {
724                         if (!get_bool(patron.mailing_address().valid())) {
725                                 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
726                         }
727                 }
728                 if (patron.billing_address()) {
729                         if (!get_bool(patron.billing_address().valid())) {
730                                 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
731                         }
732                 }
733
734         } catch(E) {
735                 dump('patron.util.set_penalty_css: ' + E + '\n');
736                 alert('patron.util.set_penalty_css: ' + E + '\n');
737         }
738 }
739
740
741 dump('exiting patron/util.js\n');