1 dump('entering patron/util.js\n');
3 if (typeof patron == 'undefined') var patron = {};
6 patron.util.EXPORT_OK = [
7 'columns', 'mbts_columns', 'mb_columns', 'mp_columns', 'std_map_row_to_column', 'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'retrieve_fleshed_au_via_barcode', 'set_penalty_css'
9 patron.util.EXPORT_TAGS = { ':all' : patron.util.EXPORT_OK };
11 patron.util.mbts_columns = function(modify,params) {
13 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
15 function getString(s) { return data.entities[s]; }
20 'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : 'Id', 'flex' : 1,
21 'primary' : false, 'hidden' : false, 'render' : 'my.mbts.id()'
24 'persist' : 'hidden width ordinal', 'id' : 'usr', 'label' : 'User', 'flex' : 1,
25 'primary' : false, 'hidden' : true, 'render' : 'my.mbts.usr() ? "Id = " + my.mbts.usr() : ""'
28 'persist' : 'hidden width ordinal', 'id' : 'xact_type', 'label' : 'Type', 'flex' : 1,
29 'primary' : false, 'hidden' : false, 'render' : 'my.mbts.xact_type()'
32 'persist' : 'hidden width ordinal', 'id' : 'balance_owed', 'label' : 'Balance Owed', 'flex' : 1,
33 'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mbts.balance_owed() )',
34 'sort_type' : 'money',
37 'persist' : 'hidden width ordinal', 'id' : 'total_owed', 'label' : 'Total Billed', 'flex' : 1,
38 'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mbts.total_owed() )',
39 'sort_type' : 'money',
42 'persist' : 'hidden width ordinal', 'id' : 'total_paid', 'label' : 'Total Paid', 'flex' : 1,
43 'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mbts.total_paid() )',
44 'sort_type' : 'money',
47 'persist' : 'hidden width ordinal', 'id' : 'last_billing_note', 'label' : 'Last Billing Note', 'flex' : 2,
48 'primary' : false, 'hidden' : true, 'render' : 'my.mbts.last_billing_note()'
51 'persist' : 'hidden width ordinal', 'id' : 'last_billing_type', 'label' : 'Last Billing Type', 'flex' : 1,
52 'primary' : false, 'hidden' : true, 'render' : 'my.mbts.last_billing_type()'
55 'persist' : 'hidden width ordinal', 'id' : 'last_billing_ts', 'label' : 'Last Billed', 'flex' : 1,
56 'primary' : false, 'hidden' : true, 'render' : 'util.date.formatted_date( my.mbts.last_billing_ts(), "" )'
59 'persist' : 'hidden width ordinal', 'id' : 'last_payment_note', 'label' : 'Last Payment Note', 'flex' : 2,
60 'primary' : false, 'hidden' : true, 'render' : 'my.mbts.last_payment_note()'
63 'persist' : 'hidden width ordinal', 'id' : 'last_payment_type', 'label' : 'Last Payment Type', 'flex' : 1,
64 'primary' : false, 'hidden' : true, 'render' : 'my.mbts.last_payment_type()'
67 'persist' : 'hidden width ordinal', 'id' : 'last_payment_ts', 'label' : 'Last Payment', 'flex' : 1,
68 'primary' : false, 'hidden' : true, 'render' : 'util.date.formatted_date( my.mbts.last_payment_ts(), "" )'
71 'persist' : 'hidden width ordinal', 'id' : 'xact_start', 'label' : 'Created', 'flex' : 1,
72 'primary' : false, 'hidden' : false, 'render' : 'my.mbts.xact_start() ? my.mbts.xact_start().toString().substr(0,10) : ""'
75 'persist' : 'hidden width ordinal', 'id' : 'xact_finish', 'label' : 'Closed', 'flex' : 1,
76 'primary' : false, 'hidden' : false, 'render' : 'my.mbts.xact_finish() ? my.mbts.xact_finish().toString().substr(0,10) : ""'
79 for (var i = 0; i < c.length; i++) {
80 if (modify[ c[i].id ]) {
81 for (var j in modify[ c[i].id ]) {
82 c[i][j] = modify[ c[i].id ][j];
87 if (params.just_these) {
88 JSAN.use('util.functional');
90 for (var i = 0; i < params.just_these.length; i++) {
91 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
92 new_c.push( function(y){ return y; }( x ) );
100 patron.util.mb_columns = function(modify,params) {
102 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
104 function getString(s) { return data.entities[s]; }
109 'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : 'Id', 'flex' : 1,
110 'primary' : false, 'hidden' : true, 'render' : 'my.mb.id()'
113 'persist' : 'hidden width ordinal', 'id' : 'voided', 'label' : 'Voided', 'flex' : 1,
114 'primary' : false, 'hidden' : false, 'render' : 'get_bool( my.mb.voided() ) ? "Yes" : "No"'
117 'persist' : 'hidden width ordinal', 'id' : 'voider', 'label' : 'Voider', 'flex' : 1,
118 'primary' : false, 'hidden' : true, 'render' : 'my.mb.voider() ? "Id = " + my.mb.voider() : ""'
121 'persist' : 'hidden width ordinal', 'id' : 'void_time', 'label' : 'Void Time', 'flex' : 1,
122 'primary' : false, 'hidden' : true, 'render' : 'my.mb.void_time()'
125 'persist' : 'hidden width ordinal', 'id' : 'amount', 'label' : 'Amount', 'flex' : 1,
126 'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mb.amount() )',
127 'sort_type' : 'money',
130 'persist' : 'hidden width ordinal', 'id' : 'billing_type', 'label' : 'Type', 'flex' : 1,
131 'primary' : false, 'hidden' : false, 'render' : 'my.mb.billing_type()'
134 'persist' : 'hidden width ordinal', 'id' : 'billing_ts', 'label' : 'When', 'flex' : 1,
135 'primary' : false, 'hidden' : false, 'render' : 'util.date.formatted_date( my.mb.billing_ts(), "" )'
138 'persist' : 'hidden width ordinal', 'id' : 'note', 'label' : 'Note', 'flex' : 2,
139 'primary' : false, 'hidden' : false, 'render' : 'my.mb.note()'
142 'persist' : 'hidden width ordinal', 'id' : 'xact', 'label' : 'Transaction ID', 'flex' : 1,
143 'primary' : false, 'hidden' : true, 'render' : 'my.mb.xact()'
146 for (var i = 0; i < c.length; i++) {
147 if (modify[ c[i].id ]) {
148 for (var j in modify[ c[i].id ]) {
149 c[i][j] = modify[ c[i].id ][j];
154 if (params.just_these) {
155 JSAN.use('util.functional');
157 for (var i = 0; i < params.just_these.length; i++) {
158 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
159 new_c.push( function(y){ return y; }( x ) );
167 patron.util.mp_columns = function(modify,params) {
169 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
171 function getString(s) { return data.entities[s]; }
176 'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : 'ID', 'flex' : 1,
177 'primary' : false, 'hidden' : true, 'render' : 'my.mp.id()'
180 'persist' : 'hidden width ordinal', 'id' : 'amount', 'label' : 'Amount', 'flex' : 1,
181 'primary' : false, 'hidden' : false, 'render' : 'util.money.sanitize( my.mp.amount() )',
182 'sort_type' : 'money',
185 'persist' : 'hidden width ordinal', 'id' : 'payment_type', 'label' : 'Type', 'flex' : 1,
186 'primary' : false, 'hidden' : false, 'render' : 'my.mp.payment_type()'
189 'persist' : 'hidden width ordinal', 'id' : 'payment_ts', 'label' : 'When', 'flex' : 1,
190 'primary' : false, 'hidden' : false, 'render' : 'util.date.formatted_date( my.mp.payment_ts(), "" )'
193 'persist' : 'hidden width ordinal', 'id' : 'note', 'label' : 'Note', 'flex' : 2,
194 'primary' : false, 'hidden' : false, 'render' : 'my.mp.note()'
197 'persist' : 'hidden width ordinal', 'id' : 'xact', 'label' : 'Transaction ID', 'flex' : 1,
198 'primary' : false, 'hidden' : true, 'render' : 'my.mp.xact()'
201 for (var i = 0; i < c.length; i++) {
202 if (modify[ c[i].id ]) {
203 for (var j in modify[ c[i].id ]) {
204 c[i][j] = modify[ c[i].id ][j];
209 if (params.just_these) {
210 JSAN.use('util.functional');
212 for (var i = 0; i < params.just_these.length; i++) {
213 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
214 new_c.push( function(y){ return y; }( x ) );
222 patron.util.columns = function(modify,params) {
224 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
226 function getString(s) { return data.entities[s]; }
230 'persist' : 'hidden width ordinal', 'id' : 'barcode', 'label' : 'Barcode', 'flex' : 1,
231 'primary' : false, 'hidden' : true, 'render' : 'my.au.card().barcode()'
234 'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : 'Login Name', 'flex' : 1,
235 'primary' : false, 'hidden' : true, 'render' : 'my.au.usrname()'
238 'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : 'Group', 'flex' : 1,
239 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.pgt[ my.au.profile() ].name()'
242 'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : getString('staff.au_label_active'), 'flex' : 1,
243 'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.active() ) ? "Yes" : "No"'
246 'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : 'Barred', 'flex' : 1,
247 'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.barred() ) ? "Yes" : "No"'
250 'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : getString('staff.au_label_id'), 'flex' : 1,
251 'primary' : false, 'hidden' : true, 'render' : 'my.au.id()'
254 'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : getString('staff.au_label_prefix'), 'flex' : 1,
255 'primary' : false, 'hidden' : true, 'render' : 'my.au.prefix()'
258 'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : getString('staff.au_label_family_name'), 'flex' : 1,
259 'primary' : false, 'hidden' : true, 'render' : 'my.au.family_name()'
262 'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : getString('staff.au_label_first_given_name'), 'flex' : 1,
263 'primary' : false, 'hidden' : true, 'render' : 'my.au.first_given_name()'
266 'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : getString('staff.au_label_second_given_name'), 'flex' : 1,
267 'primary' : false, 'hidden' : true, 'render' : 'my.au.second_given_name()'
270 'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : getString('staff.au_label_suffix'), 'flex' : 1,
271 'primary' : false, 'hidden' : true, 'render' : 'my.au.suffix()'
274 'persist' : 'hidden width ordinal', 'id' : 'alert_message', 'label' : 'Alert', 'flex' : 1,
275 'primary' : false, 'hidden' : true, 'render' : 'my.au.alert_message()'
278 'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : 'Returns Claimed', 'flex' : 1,
279 'primary' : false, 'hidden' : true, 'render' : 'my.au.claims_returned_count()',
280 'sort_type' : 'number',
283 'persist' : 'hidden width ordinal', 'id' : 'create_date', 'label' : 'Created On', 'flex' : 1,
284 'primary' : false, 'hidden' : true, 'render' : 'my.au.create_date()'
287 'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : 'Expires On', 'flex' : 1,
288 'primary' : false, 'hidden' : true, 'render' : 'my.au.expire_date().substr(0,10)'
291 'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : 'Home Lib', 'flex' : 1,
292 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.aou[ my.au.home_ou() ].shortname()'
295 'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : 'Credit', 'flex' : 1,
296 'primary' : false, 'hidden' : true, 'render' : 'my.au.credit_forward_balance()',
297 'sort_type' : 'money',
300 'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : 'Day Phone', 'flex' : 1,
301 'primary' : false, 'hidden' : true, 'render' : 'my.au.day_phone()'
304 'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : 'Evening Phone', 'flex' : 1,
305 'primary' : false, 'hidden' : true, 'render' : 'my.au.evening_phone()'
308 'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : 'Other Phone', 'flex' : 1,
309 'primary' : false, 'hidden' : true, 'render' : 'my.au.other_phone()'
312 'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : 'Email', 'flex' : 1,
313 'primary' : false, 'hidden' : true, 'render' : 'my.au.email()'
316 'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : 'Birth Date', 'flex' : 1,
317 'primary' : false, 'hidden' : true, 'render' : 'my.au.dob().substr(0,10)'
320 'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : 'Ident Type', 'flex' : 1,
321 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type() ].name()'
324 'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : 'Ident Value', 'flex' : 1,
325 'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value()'
328 'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : 'Ident Type 2', 'flex' : 1,
329 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type2() ].name()'
332 'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : 'Ident Value 2', 'flex' : 1,
333 'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value2()'
336 'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : 'Net Access', 'flex' : 1,
337 'primary' : false, 'hidden' : true, 'render' : 'my.au.net_access_level()'
340 'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : 'Group Lead', 'flex' : 1,
341 'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.master_account() ) ? "Yes" : "No"'
344 for (var i = 0; i < c.length; i++) {
345 if (modify[ c[i].id ]) {
346 for (var j in modify[ c[i].id ]) {
347 c[i][j] = modify[ c[i].id ][j];
352 if (params.just_these) {
353 JSAN.use('util.functional');
355 for (var i = 0; i < params.just_these.length; i++) {
356 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
357 new_c.push( function(y){ return y; }( x ) );
365 patron.util.std_map_row_to_column = function(error_value) {
366 return function(row,col) {
367 // row contains { 'my' : { 'au' : {} } }
368 // col contains one of the objects listed above in columns
370 var obj = {}; obj.OpenILS = {};
371 JSAN.use('util.error'); obj.error = new util.error();
372 JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
373 JSAN.use('util.date'); JSAN.use('util.money');
378 value = eval( col.render );
380 obj.error.sdump('D_WARN','map_row_to_column: ' + E);
381 if (error_value) { value = error_value; } else { value = ' ' };
387 patron.util.retrieve_au_via_id = function(session, id, f) {
388 JSAN.use('util.network');
389 var network = new util.network();
390 var patron_obj = network.request(
391 api.FM_AU_RETRIEVE_VIA_ID.app,
392 api.FM_AU_RETRIEVE_VIA_ID.method,
399 patron.util.retrieve_fleshed_au_via_id = function(session, id) {
400 JSAN.use('util.network');
401 var network = new util.network();
402 var patron_obj = network.simple_request(
403 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
406 patron.util.set_penalty_css(patron_obj);
410 patron.util.retrieve_fleshed_au_via_barcode = function(session, id) {
411 JSAN.use('util.network');
412 var network = new util.network();
413 var patron_obj = network.simple_request(
414 'FM_AU_RETRIEVE_VIA_BARCODE',
417 patron.util.set_penalty_css(patron_obj);
421 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
423 patron.util.set_penalty_css = function(patron) {
426 JSAN.use('util.network'); var net = new util.network();
427 net.simple_request('FM_MOBTS_TOTAL_HAVING_BALANCE',[ ses(), patron.id() ], function(req) {
428 if (req.getResultObject() > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
430 net.simple_request('FM_CIRC_COUNT_RETRIEVE_VIA_USER',[ ses(), patron.id() ], function(req) {
431 var co = req.getResultObject();
432 if (co.overdue > 0 || co.long_overdue > 0) addCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
434 net.simple_request('FM_AUN_RETRIEVE_ALL',[ ses(), { 'patronid' : patron.id() } ], function(req) {
435 var notes = req.getResultObject();
436 if (notes.length > 0) addCSSClass(document.documentElement,'PATRON_HAS_NOTES');
439 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
440 data.last_patron = patron.id(); data.stash('last_patron');
442 var penalties = patron.standing_penalties();
443 for (var i = 0; i < penalties.length; i++) {
444 /* this comes from /opac/common/js/utils.js */
445 addCSSClass(document.documentElement,penalties[i].penalty_type());
448 switch(penalties.length) {
449 case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
450 case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
451 default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
454 if (patron.alert_message()) {
455 addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
458 if (get_bool( patron.barred() )) {
459 addCSSClass(document.documentElement,'PATRON_BARRED');
462 if (!get_bool( patron.active() )) {
463 addCSSClass(document.documentElement,'PATRON_INACTIVE');
466 var now = new Date();
467 now = now.getTime()/1000;
469 var expire_parts = patron.expire_date().substr(0,10).split('-');
470 expire_parts[1] = expire_parts[1] - 1;
472 var expire = new Date();
473 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
474 expire = expire.getTime()/1000
476 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
479 var age_parts = patron.dob().substr(0,10).split('-');
480 age_parts[1] = age_parts[1] - 1;
482 var born = new Date();
483 born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
484 born = born.getTime()/1000
486 var patron_age = now - born;
487 var years_old = Number(patron_age / TIME.year);
489 addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
491 if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
492 if ( years_old < 65 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
494 if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
495 if ( years_old < 24 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
497 if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
498 if ( years_old < 21 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
500 if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
501 if ( years_old < 18 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
503 if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
504 if ( years_old < 13 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
506 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
510 dump('patron.util.set_penalty_css: ' + E + '\n');
511 alert('patron.util.set_penalty_css: ' + E + '\n');
516 dump('exiting patron/util.js\n');