]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/util.js
new columns for money payment and money billing lists
[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', 'mb_columns', 'mp_columns', 'std_map_row_to_column', 'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'set_penalty_css'
8 ];
9 patron.util.EXPORT_TAGS = { ':all' : patron.util.EXPORT_OK };
10
11 patron.util.mb_columns = function(modify) {
12
13         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
14
15         function getString(s) { return data.entities[s]; }
16
17
18         var c = [
19                 {
20                         'id' : 'id', 'label' : 'Id', 'flex' : 0,
21                         'primary' : false, 'hidden' : true, 'render' : 'my.mb.id()'
22                 },
23                 {
24                         'id' : 'voided', 'label' : 'Voided', 'flex' : 0,
25                         'primary' : false, 'hidden' : false, 'render' : 'my.mb.voided() ? "Yes" : "No"'
26                 },
27                 {
28                         'id' : 'voider', 'label' : 'Voider', 'flex' : 0,
29                         'primary' : false, 'hidden' : true, 'render' : 'my.mb.voider() ? "Id = " + my.mb.voider() : ""'
30                 },
31                 {
32                         'id' : 'void_time', 'label' : 'Void Time', 'flex' : 0,
33                         'primary' : false, 'hidden' : true, 'render' : 'my.mb.void_time()'
34                 },
35                 {
36                         'id' : 'amount', 'label' : 'Amount', 'flex' : 0,
37                         'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mb.amount() )'
38                 },
39                 {
40                         'id' : 'billing_type', 'label' : 'Type', 'flex' : 0,
41                         'primary' : false, 'hidden' : false, 'render' : 'my.mb.billing_type()'
42                 },
43                 {
44                         'id' : 'billing_ts', 'label' : 'When', 'flex' : 0,
45                         'primary' : false, 'hidden' : false, 'render' : 'util.date.formatted_date( my.mb.billing_ts(), "" )'
46                 },
47                 {
48                         'id' : 'note', 'label' : 'Note', 'flex' : 0,
49                         'primary' : false, 'hidden' : false, 'render' : 'my.mb.note()'
50                 },
51         ];
52         for (var i = 0; i < c.length; i++) {
53                 if (modify[ c[i].id ]) {
54                         for (var j in modify[ c[i].id ]) {
55                                 c[i][j] = modify[ c[i].id ][j];
56                         }
57                 }
58         }
59         return c;
60 }
61
62 patron.util.mp_columns = function(modify) {
63
64         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
65
66         function getString(s) { return data.entities[s]; }
67
68
69         var c = [
70                 {
71                         'id' : 'id', 'label' : 'ID', 'flex' : 0,
72                         'primary' : false, 'hidden' : true, 'render' : 'my.mp.id()'
73                 },
74                 {
75                         'id' : 'refunded', 'label' : 'Refunded', 'flex' : 0,
76                         'primary' : false, 'hidden' : false, 'render' : 'my.mp.refunded() ? "Yes" : "No"'
77                 },
78                 {
79                         'id' : 'refunder', 'label' : 'Refunder ID', 'flex' : 0,
80                         'primary' : false, 'hidden' : true, 'render' : 'my.mp.refunder() ? my.mp.refunder() : ""'
81                 },
82                 {
83                         'id' : 'refund_time', 'label' : 'Refund Time', 'flex' : 0,
84                         'primary' : false, 'hidden' : true, 'render' : 'my.mp.refund_time()'
85                 },
86                 {
87                         'id' : 'amount', 'label' : 'Amount', 'flex' : 0,
88                         'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mp.amount() )'
89                 },
90                 {
91                         'id' : 'payment_type', 'label' : 'Type', 'flex' : 0,
92                         'primary' : false, 'hidden' : false, 'render' : 'my.mp.payment_type()'
93                 },
94                 {
95                         'id' : 'payment_ts', 'label' : 'When', 'flex' : 0,
96                         'primary' : false, 'hidden' : false, 'render' : 'util.date.formatted_date( my.mp.payment_ts(), "" )'
97                 },
98                 {
99                         'id' : 'note', 'label' : 'Note', 'flex' : 0,
100                         'primary' : false, 'hidden' : false, 'render' : 'my.mp.note()'
101                 },
102                 {
103                         'id' : 'xact', 'label' : 'Transaction ID', 'flex' : 0,
104                         'primary' : false, 'hidden' : false, 'render' : 'my.mp.xact()'
105                 },
106         ];
107         for (var i = 0; i < c.length; i++) {
108                 if (modify[ c[i].id ]) {
109                         for (var j in modify[ c[i].id ]) {
110                                 c[i][j] = modify[ c[i].id ][j];
111                         }
112                 }
113         }
114         return c;
115 }
116
117 patron.util.columns = function(modify) {
118         
119         JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
120
121         function getString(s) { return data.entities[s]; }
122
123         var c = [
124                 {
125                         'id' : 'barcode', 'label' : 'Barcode', 'flex' : 1, 
126                         'primary' : false, 'hidden' : true, 'render' : 'my.au.card().barcode()'
127                 },
128                 { 
129                         'id' : 'usrname', 'label' : 'Login Name', 'flex' : 1, 
130                         'primary' : false, 'hidden' : true, 'render' : 'my.au.usrname()'
131                 },
132                 { 
133                         'id' : 'profile', 'label' : 'Group', 'flex' : 1, 
134                         'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.pgt[ my.au.profile() ].name()'
135                 },
136                 { 
137                         'id' : 'active', 'label' : getString('staff.au_label_active'), 'flex' : 1, 
138                         'primary' : false, 'hidden' : true, 'render' : 'my.au.active() ? "Yes" : "No"'
139                 },
140                 {
141                         'id' : 'barred', 'label' : 'Barred', 'flex' : 1,
142                         'primary' : false, 'hidden' : true, 'render' : 'my.au.barred() ? "Yes" : "No"'
143                 },
144                 { 
145                         'id' : 'id', 'label' : getString('staff.au_label_id'), 'flex' : 1, 
146                         'primary' : false, 'hidden' : true, 'render' : 'my.au.id()'
147                 },
148                 { 
149                         'id' : 'prefix', 'label' : getString('staff.au_label_prefix'), 'flex' : 1, 
150                         'primary' : false, 'hidden' : true, 'render' : 'my.au.prefix()'
151                 },
152                 { 
153                         'id' : 'family_name', 'label' : getString('staff.au_label_family_name'), 'flex' : 1, 
154                         'primary' : false, 'hidden' : true, 'render' : 'my.au.family_name()'
155                 },
156                 { 
157                         'id' : 'first_given_name', 'label' : getString('staff.au_label_first_given_name'), 'flex' : 1, 
158                         'primary' : false, 'hidden' : true, 'render' : 'my.au.first_given_name()'
159                 },
160                 { 
161                         'id' : 'second_given_name', 'label' : getString('staff.au_label_second_given_name'), 'flex' : 1, 
162                         'primary' : false, 'hidden' : true, 'render' : 'my.au.second_given_name()'
163                 },
164                 { 
165                         'id' : 'suffix', 'label' : getString('staff.au_label_suffix'), 'flex' : 1, 
166                         'primary' : false, 'hidden' : true, 'render' : 'my.au.suffix()'
167                 },
168                 { 
169                         'id' : 'alert_message', 'label' : 'Alert', 'flex' : 1, 
170                         'primary' : false, 'hidden' : true, 'render' : 'my.au.alert_message()'
171                 },
172                 { 
173                         'id' : 'claims_returned_count', 'label' : 'Returns Claimed', 'flex' : 1, 
174                         'primary' : false, 'hidden' : true, 'render' : 'my.au.claims_returned_count()'
175                 },
176                 { 
177                         'id' : 'create_date', 'label' : 'Created On', 'flex' : 1, 
178                         'primary' : false, 'hidden' : true, 'render' : 'my.au.create_date()'
179                 },
180                 { 
181                         'id' : 'expire_date', 'label' : 'Expires On', 'flex' : 1, 
182                         'primary' : false, 'hidden' : true, 'render' : 'my.au.expire_date()'
183                 },
184                 { 
185                         'id' : 'home_ou', 'label' : 'Home Lib', 'flex' : 1, 
186                         'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.aou[ my.au.home_ou() ].shortname()'
187                 },
188                 { 
189                         'id' : 'credit_forward_balance', 'label' : 'Credit', 'flex' : 1, 
190                         'primary' : false, 'hidden' : true, 'render' : 'my.au.credit_forward_balance()'
191                 },
192                 { 
193                         'id' : 'day_phone', 'label' : 'Day Phone', 'flex' : 1, 
194                         'primary' : false, 'hidden' : true, 'render' : 'my.au.day_phone()'
195                 },
196                 { 
197                         'id' : 'evening_phone', 'label' : 'Evening Phone', 'flex' : 1, 
198                         'primary' : false, 'hidden' : true, 'render' : 'my.au.evening_phone()'
199                 },
200                 { 
201                         'id' : 'other_phone', 'label' : 'Other Phone', 'flex' : 1, 
202                         'primary' : false, 'hidden' : true, 'render' : 'my.au.other_phone()'
203                 },
204                 { 
205                         'id' : 'email', 'label' : 'Email', 'flex' : 1, 
206                         'primary' : false, 'hidden' : true, 'render' : 'my.au.email()'
207                 },
208                 { 
209                         'id' : 'dob', 'label' : 'Birth Date', 'flex' : 1, 
210                         'primary' : false, 'hidden' : true, 'render' : 'my.au.dob()'
211                 },
212                 { 
213                         'id' : 'ident_type', 'label' : 'Ident Type', 'flex' : 1, 
214                         'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type() ].name()'
215                 },
216                 { 
217                         'id' : 'ident_value', 'label' : 'Ident Value', 'flex' : 1, 
218                         'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value()'
219                 },
220                 { 
221                         'id' : 'ident_type2', 'label' : 'Ident Type 2', 'flex' : 1, 
222                         'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type2() ].name()'
223                 },
224                 { 
225                         'id' : 'ident_value2', 'label' : 'Ident Value 2', 'flex' : 1, 
226                         'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value2()'
227                 },
228                 { 
229                         'id' : 'net_access_level', 'label' : 'Net Access', 'flex' : 1, 
230                         'primary' : false, 'hidden' : true, 'render' : 'my.au.net_access_level()'
231                 },
232         ];
233         for (var i = 0; i < c.length; i++) {
234                 if (modify[ c[i].id ]) {
235                         for (var j in modify[ c[i].id ]) {
236                                 c[i][j] = modify[ c[i].id ][j];
237                         }
238                 }
239         }
240         return c;
241 }
242
243 patron.util.std_map_row_to_column = function() {
244         return function(row,col) {
245                 // row contains { 'my' : { 'au' : {} } }
246                 // col contains one of the objects listed above in columns
247                 
248                 var obj = {}; obj.OpenILS = {}; 
249                 JSAN.use('util.error'); obj.error = new util.error();
250                 JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
251
252                 var my = row.my;
253                 var value;
254                 try { 
255                         value = eval( col.render );
256                 } catch(E) {
257                         obj.error.sdump('D_ERROR','map_row_to_column: ' + E);
258                         value = '???';
259                 }
260                 return value;
261         }
262 }
263
264 patron.util.retrieve_au_via_id = function(session, id) {
265         JSAN.use('util.network');
266         var network = new util.network();
267         var patron = network.request(
268                 api.FM_AU_RETRIEVE_VIA_ID.app,
269                 api.FM_AU_RETRIEVE_VIA_ID.method,
270                 [ session, id ]
271         );
272         return patron;
273 }
274
275 patron.util.retrieve_fleshed_au_via_id = function(session, id) {
276         JSAN.use('util.network');
277         var network = new util.network();
278         var patron = network.simple_request(
279                 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
280                 [ session, id ]
281         );
282         patron.util.set_penalty_css(patron);
283         return patron;
284 }
285
286 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
287
288 patron.util.set_penalty_css = function(patron) {
289         try {
290
291                 var penalties = patron.standing_penalties();
292                 for (var i = 0; i < penalties.length; i++) {
293                         /* this comes from /opac/common/js/utils.js */
294                         addCSSClass(document.documentElement,penalties[i].penalty_type());
295                 }
296
297                 switch(penalties.length) {
298                         case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
299                         case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
300                         default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
301                 }
302
303                 if (patron.alert_message()) {
304                         addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
305                 }
306
307                 if (patron.barred() > 0) {
308                         addCSSClass(document.documentElement,'PATRON_BARRED');
309                 }
310
311                 if (patron.active() == 0) {
312                         addCSSClass(document.documentElement,'PATRON_INACTIVE');
313                 }
314
315                 var now = new Date();
316                 now = now.getTime()/1000;
317
318                 var expire_parts = patron.expire_date().split('-');
319                 expire_parts[1] = expire_parts[1] - 1;
320
321                 var expire = new Date();
322                 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
323                 expire = expire.getTime()/1000
324
325                 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
326
327                 var age_parts = patron.dob().split('-');
328                 age_parts[1] = age_parts[1] - 1;
329
330                 var born = new Date();
331                 born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
332                 born = born.getTime()/1000
333
334                 var patron_age = now - born;
335                 var years_old = parseInt(patron_age / TIME.year);
336
337                 addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
338
339                 if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
340                 if ( years_old < 65 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
341                 
342                 if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
343                 if ( years_old < 24 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
344                 
345                 if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
346                 if ( years_old < 21 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
347                 
348                 if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
349                 if ( years_old < 18 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
350                 
351                 if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
352                 if ( years_old < 13 )  addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
353                 
354
355         } catch(E) {
356                 dump('patron.util.set_penalty_css: ' + E + '\n');
357                 alert('patron.util.set_penalty_css: ' + E + '\n');
358         }
359 }
360
361
362 dump('exiting patron/util.js\n');