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', 'retrieve_name_via_id'
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' : 'mp_id', 'label' : 'ID', 'flex' : 1,
177 'primary' : false, 'hidden' : true, 'render' : 'my.mp.id()'
180 'persist' : 'hidden width ordinal', 'id' : 'mp_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' : 'mp_payment_type', 'label' : 'Type', 'flex' : 1,
186 'primary' : false, 'hidden' : false, 'render' : 'my.mp.payment_type()'
189 'persist' : 'hidden width ordinal', 'id' : 'mp_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' : 'mp_note', 'label' : 'Note', 'flex' : 2,
194 'primary' : false, 'hidden' : false, 'render' : 'my.mp.note()'
197 'persist' : 'hidden width ordinal', 'id' : 'mp_ws', 'label' : 'Workstation', 'flex' : 1,
198 'primary' : false, 'hidden' : false, 'render' : 'my.mp.cash_drawer().name()'
201 'persist' : 'hidden width ordinal', 'id' : 'mp_staff', 'label' : 'Staff', 'flex' : 1,
202 'primary' : false, 'hidden' : false, 'render' : 'JSAN.use("patron.util"); var s = my.mp.accepting_usr(); if (s && typeof s != "object") s = patron.util.retrieve_fleshed_au_via_id(ses(),s); s.card().barcode() + " @ " + obj.OpenILS.data.hash.aou[ s.home_ou() ].shortname();'
205 'persist' : 'hidden width ordinal', 'id' : 'mp_xact', 'label' : 'Transaction ID', 'flex' : 1,
206 'primary' : false, 'hidden' : true, 'render' : 'my.mp.xact()'
209 for (var i = 0; i < c.length; i++) {
210 if (modify[ c[i].id ]) {
211 for (var j in modify[ c[i].id ]) {
212 c[i][j] = modify[ c[i].id ][j];
217 if (params.just_these) {
218 JSAN.use('util.functional');
220 for (var i = 0; i < params.just_these.length; i++) {
221 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
222 new_c.push( function(y){ return y; }( x ) );
230 patron.util.columns = function(modify,params) {
232 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
234 function getString(s) { return data.entities[s]; }
238 'persist' : 'hidden width ordinal', 'id' : 'barcode', 'label' : 'Barcode', 'flex' : 1,
239 'primary' : false, 'hidden' : true, 'render' : 'my.au.card().barcode()'
242 'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : 'Login Name', 'flex' : 1,
243 'primary' : false, 'hidden' : true, 'render' : 'my.au.usrname()'
246 'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : 'Group', 'flex' : 1,
247 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.pgt[ my.au.profile() ].name()'
250 'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : getString('staff.au_label_active'), 'flex' : 1,
251 'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.active() ) ? "Yes" : "No"'
254 'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : 'Barred', 'flex' : 1,
255 'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.barred() ) ? "Yes" : "No"'
258 'persist' : 'hidden width ordinal', 'id' : 'id', 'label' : getString('staff.au_label_id'), 'flex' : 1,
259 'primary' : false, 'hidden' : true, 'render' : 'my.au.id()'
262 'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : getString('staff.au_label_prefix'), 'flex' : 1,
263 'primary' : false, 'hidden' : true, 'render' : 'my.au.prefix()'
266 'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : getString('staff.au_label_family_name'), 'flex' : 1,
267 'primary' : false, 'hidden' : true, 'render' : 'my.au.family_name()'
270 'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : getString('staff.au_label_first_given_name'), 'flex' : 1,
271 'primary' : false, 'hidden' : true, 'render' : 'my.au.first_given_name()'
274 'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : getString('staff.au_label_second_given_name'), 'flex' : 1,
275 'primary' : false, 'hidden' : true, 'render' : 'my.au.second_given_name()'
278 'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : getString('staff.au_label_suffix'), 'flex' : 1,
279 'primary' : false, 'hidden' : true, 'render' : 'my.au.suffix()'
282 'persist' : 'hidden width ordinal', 'id' : 'alert_message', 'label' : 'Alert', 'flex' : 1,
283 'primary' : false, 'hidden' : true, 'render' : 'my.au.alert_message()'
286 'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : 'Returns Claimed', 'flex' : 1,
287 'primary' : false, 'hidden' : true, 'render' : 'my.au.claims_returned_count()',
288 'sort_type' : 'number',
291 'persist' : 'hidden width ordinal', 'id' : 'create_date', 'label' : 'Created On', 'flex' : 1,
292 'primary' : false, 'hidden' : true, 'render' : 'my.au.create_date()'
295 'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : 'Expires On', 'flex' : 1,
296 'primary' : false, 'hidden' : true, 'render' : 'my.au.expire_date().substr(0,10)'
299 'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : 'Home Lib', 'flex' : 1,
300 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.aou[ my.au.home_ou() ].shortname()'
303 'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : 'Credit', 'flex' : 1,
304 'primary' : false, 'hidden' : true, 'render' : 'my.au.credit_forward_balance()',
305 'sort_type' : 'money',
308 'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : 'Day Phone', 'flex' : 1,
309 'primary' : false, 'hidden' : true, 'render' : 'my.au.day_phone()'
312 'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : 'Evening Phone', 'flex' : 1,
313 'primary' : false, 'hidden' : true, 'render' : 'my.au.evening_phone()'
316 'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : 'Other Phone', 'flex' : 1,
317 'primary' : false, 'hidden' : true, 'render' : 'my.au.other_phone()'
320 'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : 'Email', 'flex' : 1,
321 'primary' : false, 'hidden' : true, 'render' : 'my.au.email()'
324 'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : 'Birth Date', 'flex' : 1,
325 'primary' : false, 'hidden' : true, 'render' : 'my.au.dob().substr(0,10)'
328 'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : 'Ident Type', 'flex' : 1,
329 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type() ].name()'
332 'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : 'Ident Value', 'flex' : 1,
333 'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value()'
336 'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : 'Ident Type 2', 'flex' : 1,
337 'primary' : false, 'hidden' : true, 'render' : 'obj.OpenILS.data.hash.cit[ my.au.ident_type2() ].name()'
340 'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : 'Ident Value 2', 'flex' : 1,
341 'primary' : false, 'hidden' : true, 'render' : 'my.au.ident_value2()'
344 'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : 'Net Access', 'flex' : 1,
345 'primary' : false, 'hidden' : true, 'render' : 'my.au.net_access_level()'
348 'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : 'Group Lead', 'flex' : 1,
349 'primary' : false, 'hidden' : true, 'render' : 'get_bool( my.au.master_account() ) ? "Yes" : "No"'
352 for (var i = 0; i < c.length; i++) {
353 if (modify[ c[i].id ]) {
354 for (var j in modify[ c[i].id ]) {
355 c[i][j] = modify[ c[i].id ][j];
360 if (params.just_these) {
361 JSAN.use('util.functional');
363 for (var i = 0; i < params.just_these.length; i++) {
364 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
365 new_c.push( function(y){ return y; }( x ) );
373 patron.util.std_map_row_to_column = function(error_value) {
374 return function(row,col) {
375 // row contains { 'my' : { 'au' : {} } }
376 // col contains one of the objects listed above in columns
378 var obj = {}; obj.OpenILS = {};
379 JSAN.use('util.error'); obj.error = new util.error();
380 JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
381 JSAN.use('util.date'); JSAN.use('util.money');
386 value = eval( col.render );
388 obj.error.sdump('D_WARN','map_row_to_column: ' + E);
389 if (error_value) { value = error_value; } else { value = ' ' };
395 patron.util.retrieve_au_via_id = function(session, id, f) {
396 JSAN.use('util.network');
397 var network = new util.network();
398 var patron_obj = network.request(
399 api.FM_AU_RETRIEVE_VIA_ID.app,
400 api.FM_AU_RETRIEVE_VIA_ID.method,
407 patron.util.retrieve_name_via_id = function(session, id) {
408 JSAN.use('util.network');
409 var network = new util.network();
410 var parts = network.simple_request(
411 'BLOB_AU_PARTS_RETRIEVE',
412 [ session, id, ['family_name', 'first_given_name', 'second_given_name', 'home_ou' ] ]
417 patron.util.retrieve_fleshed_au_via_id = function(session, id) {
418 JSAN.use('util.network');
419 var network = new util.network();
420 var patron_obj = network.simple_request(
421 'FM_AU_FLESHED_RETRIEVE_VIA_ID',
424 patron.util.set_penalty_css(patron_obj);
428 patron.util.retrieve_fleshed_au_via_barcode = function(session, id) {
429 JSAN.use('util.network');
430 var network = new util.network();
431 var patron_obj = network.simple_request(
432 'FM_AU_RETRIEVE_VIA_BARCODE',
435 patron.util.set_penalty_css(patron_obj);
439 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
441 patron.util.set_penalty_css = function(patron) {
444 JSAN.use('util.network'); var net = new util.network();
445 net.simple_request('FM_MOBTS_TOTAL_HAVING_BALANCE',[ ses(), patron.id() ], function(req) {
446 if (req.getResultObject() > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
448 net.simple_request('FM_CIRC_COUNT_RETRIEVE_VIA_USER',[ ses(), patron.id() ], function(req) {
449 var co = req.getResultObject();
450 if (co.overdue > 0 || co.long_overdue > 0) addCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
452 net.simple_request('FM_AUN_RETRIEVE_ALL',[ ses(), { 'patronid' : patron.id() } ], function(req) {
453 var notes = req.getResultObject();
454 if (notes.length > 0) addCSSClass(document.documentElement,'PATRON_HAS_NOTES');
458 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
459 data.last_patron = patron.id(); data.stash('last_patron');
462 var penalties = patron.standing_penalties();
463 for (var i = 0; i < penalties.length; i++) {
464 /* this comes from /opac/common/js/utils.js */
465 addCSSClass(document.documentElement,penalties[i].penalty_type());
468 switch(penalties.length) {
469 case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
470 case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
471 default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
474 if (patron.alert_message()) {
475 addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
478 if (get_bool( patron.barred() )) {
479 addCSSClass(document.documentElement,'PATRON_BARRED');
482 if (!get_bool( patron.active() )) {
483 addCSSClass(document.documentElement,'PATRON_INACTIVE');
486 var now = new Date();
487 now = now.getTime()/1000;
489 var expire_parts = patron.expire_date().substr(0,10).split('-');
490 expire_parts[1] = expire_parts[1] - 1;
492 var expire = new Date();
493 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
494 expire = expire.getTime()/1000
496 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
499 var age_parts = patron.dob().substr(0,10).split('-');
500 age_parts[1] = age_parts[1] - 1;
502 var born = new Date();
503 born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
504 born = born.getTime()/1000
506 var patron_age = now - born;
507 var years_old = Number(patron_age / TIME.year);
509 addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
511 if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
512 if ( years_old < 65 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
514 if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
515 if ( years_old < 24 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
517 if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
518 if ( years_old < 21 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
520 if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
521 if ( years_old < 18 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
523 if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
524 if ( years_old < 13 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
526 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
529 if (patron.mailing_address()) {
530 if (!get_bool(patron.mailing_address().valid())) {
531 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
534 if (patron.billing_address()) {
535 if (!get_bool(patron.billing_address().valid())) {
536 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
541 dump('patron.util.set_penalty_css: ' + E + '\n');
542 alert('patron.util.set_penalty_css: ' + E + '\n');
547 dump('exiting patron/util.js\n');