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',
8 'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'retrieve_fleshed_au_via_barcode', 'set_penalty_css', 'retrieve_name_via_id',
9 'merge', 'ausp_columns', 'format_name', 'work_log_patron_edit'
11 patron.util.EXPORT_TAGS = { ':all' : patron.util.EXPORT_OK };
13 patron.util.mbts_columns = function(modify,params) {
15 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
16 JSAN.use('util.money'); JSAN.use('util.date');
18 var commonStrings = document.getElementById('commonStrings');
22 'persist' : 'hidden width ordinal', 'id' : 'mbts_id', 'label' : commonStrings.getString('staff.mbts_id_label'), 'flex' : 1,
23 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mbts.id(); }
26 'persist' : 'hidden width ordinal', 'id' : 'usr', 'label' : commonStrings.getString('staff.mbts_usr_label'), 'flex' : 1,
27 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.usr() ? "Id = " + my.mbts.usr() : ""; }
30 'persist' : 'hidden width ordinal', 'id' : 'xact_type', 'label' : commonStrings.getString('staff.mbts_xact_type_label'), 'flex' : 1,
31 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mbts.xact_type(); }
34 'persist' : 'hidden width ordinal', 'id' : 'balance_owed', 'label' : commonStrings.getString('staff.mbts_balance_owed_label'), 'flex' : 1,
35 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.balance_owed() ); },
39 'persist' : 'hidden width ordinal', 'id' : 'total_owed', 'label' : commonStrings.getString('staff.mbts_total_owed_label'), 'flex' : 1,
40 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.total_owed() ); },
44 'persist' : 'hidden width ordinal', 'id' : 'total_paid', 'label' : commonStrings.getString('staff.mbts_total_paid_label'), 'flex' : 1,
45 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mbts.total_paid() ); },
49 'persist' : 'hidden width ordinal', 'id' : 'last_billing_note', 'label' : commonStrings.getString('staff.mbts_last_billing_note_label'), 'flex' : 2,
50 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.last_billing_note(); }
53 'persist' : 'hidden width ordinal', 'id' : 'last_billing_type', 'label' : commonStrings.getString('staff.mbts_last_billing_type_label'), 'flex' : 1,
54 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.last_billing_type(); }
57 'persist' : 'hidden width ordinal', 'id' : 'last_billing_ts', 'label' : commonStrings.getString('staff.mbts_last_billing_timestamp_label'), 'flex' : 1,
59 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mbts.last_billing_ts(), "%{localized}" ); }
60 ,'sort_value' : function(my) {
61 return util.date.db_date2Date(
63 ? my.mbts.last_billing_ts()
69 'persist' : 'hidden width ordinal', 'id' : 'last_payment_note', 'label' : commonStrings.getString('staff.mbts_last_payment_note_label'), 'flex' : 2,
70 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.last_payment_note(); }
73 'persist' : 'hidden width ordinal', 'id' : 'last_payment_type', 'label' : commonStrings.getString('staff.mbts_last_payment_type_label'), 'flex' : 1,
74 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.last_payment_type(); }
77 'persist' : 'hidden width ordinal', 'id' : 'last_payment_ts', 'label' : commonStrings.getString('staff.mbts_last_payment_timestamp_label'), 'flex' : 1,
79 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mbts.last_payment_ts(), "%{localized}" ); }
80 ,'sort_value' : function(my) { return util.date.db_date2Date(
82 ? my.mbts.last_payment_ts()
88 'persist' : 'hidden width ordinal', 'id' : 'mbts_xact_start', 'label' : commonStrings.getString('staff.mbts_xact_start_label'), 'flex' : 1,
90 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mbts.xact_start() ? util.date.formatted_date( my.mbts.xact_start(), "%{localized}" ) : ""; }
91 ,'sort_value' : function(my) { return util.date.db_date2Date(
93 ? my.mbts.xact_start()
99 'persist' : 'hidden width ordinal', 'id' : 'mbts_xact_finish', 'label' : commonStrings.getString('staff.mbts_xact_finish_label'), 'flex' : 1,
100 'sort_type' : 'date',
101 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mbts.xact_finish() ? util.date.formatted_date( my.mbts.xact_finish(), "%{localized}" ) : ""; }
102 ,'sort_value' : function(my) { return util.date.db_date2Date(
104 ? my.mbts.xact_finish()
110 for (var i = 0; i < c.length; i++) {
111 if (modify[ c[i].id ]) {
112 for (var j in modify[ c[i].id ]) {
113 c[i][j] = modify[ c[i].id ][j];
118 if (params.just_these) {
119 JSAN.use('util.functional');
121 for (var i = 0; i < params.just_these.length; i++) {
122 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
123 new_c.push( function(y){ return y; }( x ) );
127 if (params.except_these) {
128 JSAN.use('util.functional');
130 for (var i = 0; i < c.length; i++) {
131 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
132 if (!x) new_c.push(c[i]);
137 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
140 patron.util.mb_columns = function(modify,params) {
142 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
143 JSAN.use('util.money'); JSAN.use('util.date');
145 var commonStrings = document.getElementById('commonStrings');
149 'persist' : 'hidden width ordinal', 'id' : 'mb_id', 'label' : commonStrings.getString('staff.mb_id_label'), 'flex' : 1,
150 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.id(); }
153 'persist' : 'hidden width ordinal', 'id' : 'voided', 'label' : commonStrings.getString('staff.mb_voided_label'), 'flex' : 1,
154 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return get_bool( my.mb.voided() ) ? "Yes" : "No"; }
157 'persist' : 'hidden width ordinal', 'id' : 'voider', 'label' : commonStrings.getString('staff.mb_voider_label'), 'flex' : 1,
158 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.voider() ? "Id = " + my.mb.voider() : ""; }
161 'persist' : 'hidden width ordinal', 'id' : 'void_time', 'label' : commonStrings.getString('staff.mb_void_time_label'), 'flex' : 1,
162 'sort_type' : 'date',
163 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mb.void_time(), "%{localized}" ); }
164 ,'sort_value' : function(my) { return util.date.db_date2Date(
172 'persist' : 'hidden width ordinal', 'id' : 'amount', 'label' : commonStrings.getString('staff.mb_amount_label'), 'flex' : 1,
173 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mb.amount() ); },
174 'sort_type' : 'money'
177 'persist' : 'hidden width ordinal', 'id' : 'billing_type', 'label' : commonStrings.getString('staff.mb_billing_type_label'), 'flex' : 1,
178 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mb.billing_type(); }
181 'persist' : 'hidden width ordinal', 'id' : 'billing_ts', 'label' : commonStrings.getString('staff.mb_billing_ts_label'), 'flex' : 1,
182 'sort_type' : 'date',
183 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mb.billing_ts(), "%{localized}" ); }
184 ,'sort_value' : function(my) { return util.date.db_date2Date(
192 'persist' : 'hidden width ordinal', 'id' : 'note', 'label' : commonStrings.getString('staff.mb_note_label'), 'flex' : 2,
193 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mb.note(); }
196 'persist' : 'hidden width ordinal', 'id' : 'xact', 'label' : commonStrings.getString('staff.mb_xact_label'), 'flex' : 1,
197 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.xact(); }
200 for (var i = 0; i < c.length; i++) {
201 if (modify[ c[i].id ]) {
202 for (var j in modify[ c[i].id ]) {
203 c[i][j] = modify[ c[i].id ][j];
208 if (params.just_these) {
209 JSAN.use('util.functional');
211 for (var i = 0; i < params.just_these.length; i++) {
212 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
213 new_c.push( function(y){ return y; }( x ) );
217 if (params.except_these) {
218 JSAN.use('util.functional');
220 for (var i = 0; i < c.length; i++) {
221 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
222 if (!x) new_c.push(c[i]);
228 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
231 patron.util.mp_columns = function(modify,params) {
233 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
234 JSAN.use('util.money'); JSAN.use('util.date'); JSAN.use('patron.util');
236 var commonStrings = document.getElementById('commonStrings');
240 'persist' : 'hidden width ordinal', 'id' : 'mp_id', 'label' : commonStrings.getString('staff.mp_id_label'), 'flex' : 1,
241 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mp.id(); }
244 'persist' : 'hidden width ordinal', 'id' : 'mp_amount', 'label' : commonStrings.getString('staff.mp_amount_label'), 'flex' : 1,
245 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mp.amount() ); },
246 'sort_type' : 'money'
249 'persist' : 'hidden width ordinal', 'id' : 'mp_payment_type', 'label' : commonStrings.getString('staff.mp_payment_type_label'), 'flex' : 1,
250 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mp.payment_type(); }
253 'persist' : 'hidden width ordinal', 'id' : 'mp_payment_ts', 'label' : commonStrings.getString('staff.mp_payment_timestamp_label'), 'flex' : 1,
254 'sort_type' : 'date',
255 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mp.payment_ts(), "%{localized}" ); }
256 ,'sort_value' : function(my) { return util.date.db_date2Date(
264 'persist' : 'hidden width ordinal', 'id' : 'mp_note', 'label' : commonStrings.getString('staff.mp_note_label'), 'flex' : 2,
265 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mp.note(); }
268 'persist' : 'hidden width ordinal', 'id' : 'mp_ws', 'label' : commonStrings.getString('staff.mp_cash_drawer_label'), 'flex' : 1,
269 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mp.cash_drawer().name(); }
272 'persist' : 'hidden width ordinal', 'id' : 'mp_staff', 'label' : commonStrings.getString('staff.mp_accepting_usr_label'), 'flex' : 1,
273 'primary' : false, 'hidden' : false, 'editable' : 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,["card"]); return s.family_name() + " (" + s.card().barcode() + ") @ " + data.hash.aou[ s.home_ou() ].shortname(); }
276 'persist' : 'hidden width ordinal', 'id' : 'mp_xact', 'label' : commonStrings.getString('staff.mp_xact_label'), 'flex' : 1,
277 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mp.xact(); }
280 for (var i = 0; i < c.length; i++) {
281 if (modify[ c[i].id ]) {
282 for (var j in modify[ c[i].id ]) {
283 c[i][j] = modify[ c[i].id ][j];
288 if (params.just_these) {
289 JSAN.use('util.functional');
291 for (var i = 0; i < params.just_these.length; i++) {
292 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
293 new_c.push( function(y){ return y; }( x ) );
297 if (params.except_these) {
298 JSAN.use('util.functional');
300 for (var i = 0; i < c.length; i++) {
301 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
302 if (!x) new_c.push(c[i]);
308 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
311 patron.util.ausp_columns = function(modify,params) {
313 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
314 JSAN.use('util.functional');
316 var commonStrings = document.getElementById('commonStrings');
320 'persist' : 'hidden width ordinal', 'id' : 'csp_id', 'label' : commonStrings.getString('staff.csp_id_label'), 'flex' : 1,
321 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.id() : my.csp; }
324 'persist' : 'hidden width ordinal', 'id' : 'csp_name', 'label' : commonStrings.getString('staff.csp_name_label'), 'flex' : 1,
325 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.name() : data.hash.csp[ my.csp ].name(); }
328 'persist' : 'hidden width ordinal', 'id' : 'csp_label', 'label' : commonStrings.getString('staff.csp_label_label'), 'flex' : 1,
329 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.label() : data.hash.csp[ my.csp ].label(); }
332 'persist' : 'hidden width ordinal', 'id' : 'csp_block_list', 'label' : commonStrings.getString('staff.csp_block_list_label'), 'flex' : 1,
333 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.block_list() : data.hash.csp[ my.csp ].block_list(); }
336 'persist' : 'hidden width ordinal', 'id' : 'csp_block_circ', 'label' : commonStrings.getString('staff.csp_block_circ_label'), 'flex' : 1,
337 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
338 var my_csp = typeof my.csp == 'object' ? my.csp : data.hash.csp[ my.csp ];
339 return String( my_csp.block_list() ).match('CIRC') ? commonStrings.getString('staff.csp_block_circ_yes') : commonStrings.getString('staff.csp_block_circ_no');
343 'persist' : 'hidden width ordinal', 'id' : 'csp_block_renew', 'label' : commonStrings.getString('staff.csp_block_renew_label'), 'flex' : 1,
344 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
345 var my_csp = typeof my.csp == 'object' ? my.csp : data.hash.csp[ my.csp ];
346 return String( my_csp.block_list() ).match('RENEW') ? commonStrings.getString('staff.csp_block_renew_yes') : commonStrings.getString('staff.csp_block_renew_no');
351 'persist' : 'hidden width ordinal', 'id' : 'csp_block_hold', 'label' : commonStrings.getString('staff.csp_block_hold_label'), 'flex' : 1,
352 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
353 var my_csp = typeof my.csp == 'object' ? my.csp : data.hash.csp[ my.csp ];
354 return String( my_csp.block_list() ).match('HOLD') ? commonStrings.getString('staff.csp_block_hold_yes') : commonStrings.getString('staff.csp_block_hold_no');
358 'persist' : 'hidden width ordinal', 'id' : 'ausp_id', 'label' : commonStrings.getString('staff.ausp_id_label'), 'flex' : 1,
359 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.ausp ? my.ausp.id() : ''; }
362 'persist' : 'hidden width ordinal', 'id' : 'ausp_staff', 'label' : commonStrings.getString('staff.ausp_staff_label'), 'flex' : 1,
363 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
364 return my.ausp ? my.ausp.staff() : '';
368 'persist' : 'hidden width ordinal', 'id' : 'ausp_set_date', 'label' : commonStrings.getString('staff.ausp_set_date_label'), 'flex' : 1,
369 'sort_type' : 'date',
370 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) {
371 return my.ausp ? util.date.formatted_date( my.ausp.set_date(), "%{localized}" ) : '';
373 ,'sort_value' : function(my) { return util.date.db_date2Date(
381 'persist' : 'hidden width ordinal', 'id' : 'ausp_note', 'label' : commonStrings.getString('staff.ausp_note_label'), 'flex' : 1,
382 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) {
383 return my.ausp ? my.ausp.note() : '';
387 'persist' : 'hidden width ordinal', 'id' : 'ausp_org_unit', 'label' : commonStrings.getString('staff.ausp_org_unit_label'), 'flex' : 1,
388 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) {
389 return my.ausp ? data.hash.aou[ my.ausp.org_unit() ].shortname() : '';
393 for (var i = 0; i < c.length; i++) {
394 if (modify[ c[i].id ]) {
395 for (var j in modify[ c[i].id ]) {
396 c[i][j] = modify[ c[i].id ][j];
401 if (params.just_these) {
403 for (var i = 0; i < params.just_these.length; i++) {
404 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
405 new_c.push( function(y){ return y; }( x ) );
409 if (params.except_these) {
411 for (var i = 0; i < c.length; i++) {
412 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
413 if (!x) new_c.push(c[i]);
419 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
423 patron.util.columns = function(modify,params) {
425 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
427 var commonStrings = document.getElementById('commonStrings');
431 'persist' : 'hidden width ordinal', 'id' : 'au_barcode', 'label' : commonStrings.getString('staff.card_barcode_label'), 'flex' : 1,
432 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.card().barcode(); }
435 'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : commonStrings.getString('staff.au_usrname_label'), 'flex' : 1,
436 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.usrname(); }
439 'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : commonStrings.getString('staff.au_profile_label'), 'flex' : 1,
440 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.pgt[ my.au.profile() ].name(); }
443 'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : commonStrings.getString('staff.au_active_label'), 'flex' : 1,
444 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return get_bool( my.au.active() ) ? "Yes" : "No"; }
447 'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : commonStrings.getString('staff.au_barred_label'), 'flex' : 1,
448 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return get_bool( my.au.barred() ) ? "Yes" : "No"; }
451 'persist' : 'hidden width ordinal', 'id' : 'au_id', 'label' : document.getElementById('commonStrings').getString('staff.au_id_label'), 'flex' : 1,
452 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.id(); }
455 'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_prefix_label'), 'flex' : 1,
456 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.prefix(); }
459 'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : document.getElementById('commonStrings').getString('staff.au_family_name_label'), 'flex' : 1,
460 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.family_name(); }
463 'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_first_given_name_label'), 'flex' : 1,
464 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.first_given_name(); }
467 'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_second_given_name_label'), 'flex' : 1,
468 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.second_given_name(); }
471 'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_suffix_label'), 'flex' : 1,
472 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.suffix(); }
475 'persist' : 'hidden width ordinal', 'id' : 'au_alert_message', 'label' : commonStrings.getString('staff.au_alert_message_label'), 'flex' : 1,
476 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.alert_message(); }
479 'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : commonStrings.getString('staff.au_claims_returned_count_label'), 'flex' : 1,
480 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.claims_returned_count(); },
481 'sort_type' : 'number'
484 'persist' : 'hidden width ordinal', 'id' : 'au_create_date', 'label' : commonStrings.getString('staff.au_create_date_label'), 'flex' : 1,
485 'sort_type' : 'date',
486 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.au.create_date(), "%{localized}" ); }
487 ,'sort_value' : function(my) { return util.date.db_date2Date(
489 ? my.au.create_date()
495 'persist' : 'hidden width ordinal', 'id' : 'au_last_update_time', 'label' : commonStrings.getString('staff.au_last_update_time_label'), 'flex' : 1,
496 'sort_type' : 'date',
497 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.au.last_update_time(), "%{localized}" ); }
498 ,'sort_value' : function(my) { return util.date.db_date2Date(
500 ? my.au.last_update_time()
507 'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : commonStrings.getString('staff.au_expire_date_label'), 'flex' : 1,
508 'sort_type' : 'date',
509 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.au.expire_date(), "%{localized_date}" ); }
510 ,'sort_value' : function(my) { return util.date.db_date2Date(
512 ? my.au.expire_date()
518 'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : commonStrings.getString('staff.au_home_library_label'), 'flex' : 1,
519 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].shortname(); }
522 'persist' : 'hidden width ordinal', 'id' : 'home_ou_fullname', 'label' : commonStrings.getString('staff.au_home_library_fullname_label'), 'flex' : 1,
523 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].name(); }
526 'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : commonStrings.getString('staff.au_credit_forward_balance_label'), 'flex' : 1,
527 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.credit_forward_balance(); },
528 'sort_type' : 'money'
531 'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : commonStrings.getString('staff.au_day_phone_label'), 'flex' : 1,
532 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.day_phone(); }
535 'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : commonStrings.getString('staff.au_evening_phone_label'), 'flex' : 1,
536 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.evening_phone(); }
539 'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : commonStrings.getString('staff.au_other_phone_label'), 'flex' : 1,
540 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.other_phone(); }
543 'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : commonStrings.getString('staff.au_email_label'), 'flex' : 1,
544 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.email(); }
547 'persist' : 'hidden width ordinal', 'id' : 'alias', 'label' : commonStrings.getString('staff.au_alias_label'), 'flex' : 1,
548 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.alias(); }
551 'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : commonStrings.getString('staff.au_birth_date_label'), 'flex' : 1,
552 'sort_type' : 'date',
553 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.au.dob(), "%{localized_date}" ); }
554 ,'sort_value' : function(my) { return util.date.db_date2Date(
562 'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : commonStrings.getString('staff.au_ident_type_label'), 'flex' : 1,
563 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.cit[ my.au.ident_type() ].name(); }
566 'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : commonStrings.getString('staff.au_ident_value_label'), 'flex' : 1,
567 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.ident_value(); }
570 'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : commonStrings.getString('staff.au_ident_type2_label'), 'flex' : 1,
571 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.cit[ my.au.ident_type2() ].name(); }
574 'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : commonStrings.getString('staff.au_ident_value2_label'), 'flex' : 1,
575 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.ident_value2(); }
578 'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : commonStrings.getString('staff.au_net_access_level_label'), 'flex' : 1,
579 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.net_access_level(); }
582 'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : commonStrings.getString('staff.au_master_account_label'), 'flex' : 1,
583 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return get_bool( my.au.master_account() ) ? "Yes" : "No"; }
586 'persist' : 'hidden width ordinal', 'id' : 'usrgroup', 'label' : commonStrings.getString('staff.au_group_id_label'), 'flex' : 1,
587 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.usrgroup(); }
590 for (var i = 0; i < c.length; i++) {
591 if (modify[ c[i].id ]) {
592 for (var j in modify[ c[i].id ]) {
593 c[i][j] = modify[ c[i].id ][j];
598 if (params.just_these) {
599 JSAN.use('util.functional');
601 for (var i = 0; i < params.just_these.length; i++) {
602 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
603 new_c.push( function(y){ return y; }( x ) );
607 if (params.except_these) {
608 JSAN.use('util.functional');
610 for (var i = 0; i < c.length; i++) {
611 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
612 if (!x) new_c.push(c[i]);
618 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
621 patron.util.retrieve_au_via_id = function(session, id, f) {
622 JSAN.use('util.network');
623 var network = new util.network();
624 var patron_obj = network.simple_request(
625 'FM_AU_RETRIEVE_VIA_ID.authoritative',
632 patron.util.retrieve_name_via_id = function(session, id) {
633 JSAN.use('util.network');
634 var network = new util.network();
635 var parts = network.simple_request(
636 'BLOB_AU_PARTS_RETRIEVE',
637 [ session, id, ['family_name', 'first_given_name', 'second_given_name', 'home_ou' ] ]
642 patron.util.retrieve_fleshed_au_via_id = function(session, id, fields, func) {
643 JSAN.use('util.network');
644 var network = new util.network();
645 var patron_obj = network.simple_request(
646 'FM_AU_FLESHED_RETRIEVE_VIA_ID.authoritative',
647 [ session, id, fields ],
648 typeof func == 'function' ? func : null
650 if (typeof func != 'function') {
651 if (!fields) { patron.util.set_penalty_css(patron_obj); }
656 patron.util.retrieve_fleshed_au_via_barcode = function(session, id) {
657 JSAN.use('util.network');
658 var network = new util.network();
659 var patron_obj = network.simple_request(
660 'FM_AU_RETRIEVE_VIA_BARCODE.authoritative',
663 if (typeof patron_obj.ilsevent == 'undefined') patron.util.set_penalty_css(patron_obj);
667 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
669 patron.util.set_penalty_css = function(patron) {
671 removeCSSClass(document.documentElement,'PATRON_HAS_BILLS');
672 removeCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
673 removeCSSClass(document.documentElement,'PATRON_HAS_NOTES');
674 removeCSSClass(document.documentElement,'PATRON_EXCEEDS_CHECKOUT_COUNT');
675 removeCSSClass(document.documentElement,'PATRON_EXCEEDS_OVERDUE_COUNT');
676 removeCSSClass(document.documentElement,'PATRON_EXCEEDS_FINES');
677 removeCSSClass(document.documentElement,'NO_PENALTIES');
678 removeCSSClass(document.documentElement,'ONE_PENALTY');
679 removeCSSClass(document.documentElement,'MULTIPLE_PENALTIES');
680 removeCSSClass(document.documentElement,'INVALID_PATRON_EMAIL_ADDRESS');
681 removeCSSClass(document.documentElement,'INVALID_PATRON_DAY_PHONE');
682 removeCSSClass(document.documentElement,'INVALID_PATRON_EVENING_PHONE');
683 removeCSSClass(document.documentElement,'INVALID_PATRON_OTHER_PHONE');
684 removeCSSClass(document.documentElement,'PATRON_HAS_ALERT');
685 removeCSSClass(document.documentElement,'PATRON_BARRED');
686 removeCSSClass(document.documentElement,'PATRON_INACTIVE');
687 removeCSSClass(document.documentElement,'PATRON_EXPIRED');
688 removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
689 removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
690 removeCSSClass(document.documentElement,'PATRON_AGE_GE_65');
691 removeCSSClass(document.documentElement,'PATRON_AGE_LT_65');
692 removeCSSClass(document.documentElement,'PATRON_AGE_GE_24');
693 removeCSSClass(document.documentElement,'PATRON_AGE_LT_24');
694 removeCSSClass(document.documentElement,'PATRON_AGE_GE_21');
695 removeCSSClass(document.documentElement,'PATRON_AGE_LT_21');
696 removeCSSClass(document.documentElement,'PATRON_AGE_GE_18');
697 removeCSSClass(document.documentElement,'PATRON_AGE_LT_18');
698 removeCSSClass(document.documentElement,'PATRON_AGE_GE_13');
699 removeCSSClass(document.documentElement,'PATRON_AGE_LT_13');
700 removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_1');
701 removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_2');
702 removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_3');
704 JSAN.use('util.network'); var net = new util.network();
705 net.simple_request('FM_MOUS_RETRIEVE.authoritative',[ ses(), patron.id() ], function(req) {
706 var summary = req.getResultObject();
707 if (summary && summary.balance_owed() > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
709 net.simple_request('FM_CIRC_COUNT_RETRIEVE_VIA_USER.authoritative',[ ses(), patron.id() ], function(req) {
711 var co = req.getResultObject();
712 if (co.overdue > 0 || co.long_overdue > 0) addCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
717 net.simple_request('FM_AUN_RETRIEVE_ALL.authoritative',[ ses(), { 'patronid' : patron.id() } ], function(req) {
718 var notes = req.getResultObject();
719 if (notes.length > 0) addCSSClass(document.documentElement,'PATRON_HAS_NOTES');
723 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
724 data.last_patron = patron.id(); data.stash('last_patron');
727 var penalties = patron.standing_penalties() || [];
728 penalties = penalties.filter(
730 return (!(p.isdeleted() || p.stop_date()));
733 for (var i = 0; i < penalties.length; i++) {
734 /* this comes from /opac/common/js/utils.js */
735 addCSSClass(document.documentElement,penalties[i].standing_penalty().name());
736 if (penalties[i].standing_penalty().id() >= 100) {
737 addCSSClass(document.documentElement,'PATRON_HAS_CUSTOM_PENALTY');
739 if (get_bool( penalties[i].standing_penalty().staff_alert() )) {
740 addCSSClass(document.documentElement,'PATRON_HAS_STAFF_ALERT');
742 var block_list = penalties[i].standing_penalty().block_list();
744 addCSSClass(document.documentElement,'PATRON_HAS_BLOCK');
745 // TODO: futureproofing, split and loop on block_list to produce these classnames
746 if (block_list.match('CIRC')) {
747 addCSSClass(document.documentElement,'PATRON_HAS_CIRC_BLOCK');
749 if (block_list.match('RENEW')) {
750 addCSSClass(document.documentElement,'PATRON_HAS_RENEW_BLOCK');
752 if (block_list.match('HOLD')) {
753 addCSSClass(document.documentElement,'PATRON_HAS_HOLD_BLOCK');
755 if (block_list.match('CAPTURE')) {
756 addCSSClass(document.documentElement,'PATRON_HAS_CAPTURE_BLOCK');
758 if (block_list.match('FULFILL')) {
759 addCSSClass(document.documentElement,'PATRON_HAS_FULFILL_BLOCK');
764 switch(penalties.length) {
765 case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
766 case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
767 default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
770 if (patron.alert_message()) {
771 addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
774 if (get_bool( patron.barred() )) {
775 addCSSClass(document.documentElement,'PATRON_BARRED');
778 if (!get_bool( patron.active() )) {
779 addCSSClass(document.documentElement,'PATRON_INACTIVE');
782 try { addCSSClass(document.documentElement,'PATRON_NET_ACCESS_' + patron.net_access_level()); } catch(E) {}
784 var now = new Date();
785 now = now.getTime()/1000;
787 var expire_parts = patron.expire_date().substr(0,10).split('-');
788 expire_parts[1] = expire_parts[1] - 1;
790 var expire = new Date();
791 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
792 expire = expire.getTime()/1000
794 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
797 var age_parts = patron.dob().substr(0,10).split('-');
798 age_parts[1] = age_parts[1] - 1;
800 var born = new Date();
801 born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
802 born = born.getTime()/1000
804 var patron_age = now - born;
805 var years_old = Number(patron_age / TIME.year);
807 addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
809 if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
810 if ( years_old < 65 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
812 if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
813 if ( years_old < 24 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
815 if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
816 if ( years_old < 21 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
818 if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
819 if ( years_old < 18 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
821 if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
822 if ( years_old < 13 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
824 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
827 if ( get_bool( patron.juvenile() ) ) addCSSClass(document.documentElement,'PATRON_JUVENILE');
828 else removeCSSClass(document.documentElement,'PATRON_JUVENILE');
830 if (patron.mailing_address() && typeof patron.mailing_address() == 'object') {
831 if (!get_bool(patron.mailing_address().valid())) {
832 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
835 if (patron.billing_address() && typeof patron.billing_address() == 'object') {
836 if (!get_bool(patron.billing_address().valid())) {
837 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
842 dump('patron.util.set_penalty_css: ' + E + '\n');
843 alert('patron.util.set_penalty_css: ' + E + '\n');
847 patron.util.merge = function(record_ids) {
850 JSAN.use('util.error'); error = new util.error();
851 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
852 var horizontal_interface = String( data.hash.aous['ui.circ.patron_summary.horizontal'] ) == 'true';
853 var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
854 top_xml += '<description>' + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.merge_lead') + '</description>';
856 top_xml += '<button id="lead" disabled="true" label="'
857 + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.button.label') + '" name="fancy_submit"/>';
858 top_xml += '<button label="' + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.cancel_button.label') +'" accesskey="'
859 + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.cancel_button.accesskey') +'" name="fancy_cancel"/></hbox></vbox>';
861 var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
864 function table_cell_with_lead_button(id) {
866 xml += '<td><input value="' + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.lead')
867 xml += '" id="record_' + id + '" type="radio" name="lead"';
868 xml += ' onclick="' + "try { var x = $('lead'); x.setAttribute('value',";
869 xml += id + '); x.disabled = false; } catch(E) { alert(E); }">';
870 xml += '</input>' + $("patronStrings").getFormattedString('staff.patron.usr_buckets.merge_records.lead_record_number',[id]) + '</td>';
875 if (!horizontal_interface) {
876 xml += '<tr valign="top">';
877 for (var i = 0; i < record_ids.length; i++) {
878 xml += table_cell_with_lead_button( record_ids[i] );
880 xml += '</tr><tr valign="top">';
881 iframe_css = 'min-height: 1000px; min-width: 300px;';
883 iframe_css = 'min-height: 200px; min-width: 1000px;';
885 for (var i = 0; i < record_ids.length; i++) {
886 if (horizontal_interface) {
887 xml += '<tr valign="top">' + table_cell_with_lead_button( record_ids[i] );
889 xml += '<td nowrap="nowrap"><iframe style="' + iframe_css + '" flex="1" src="' + urls.XUL_PATRON_SUMMARY;
890 xml += '?id=' + record_ids[i] + '&show_name=1" oils_force_external="true"/></td>';
891 if (horizontal_interface) {
895 if (!horizontal_interface) {
898 xml += '</table></form>';
899 JSAN.use('util.window'); var win = new util.window();
900 var fancy_prompt_data = win.open(
901 urls.XUL_FANCY_PROMPT,
902 'fancy_prompt', 'chrome,resizable,modal,width=1000,height=700',
904 'top_xml' : top_xml, 'xml' : xml, 'title' : $("patronStrings").getString('staff.patron.usr_buckets.merge_records.fancy_prompt_title')
908 if (typeof fancy_prompt_data.fancy_status == 'undefined' || fancy_prompt_data.fancy_status == 'incomplete') {
909 alert($("patronStrings").getString('staff.patron.usr_buckets.merge_records.fancy_prompt.alert'));
913 JSAN.use('util.functional'); JSAN.use('util.network'); var network = new util.network();
914 var robj = network.simple_request('FM_AU_MERGE',
917 fancy_prompt_data.lead,
918 util.functional.filter_list( record_ids,
920 return o != fancy_prompt_data.lead;
925 if (Number(robj) != 1) { throw(robj); }
926 return fancy_prompt_data.lead;
928 dump('patron.util.merge: ' + js2JSON(E) + '\n');
929 try { error.standard_unexpected_error_alert('Error in patron.util.merge',E); } catch(F) { alert('patron.util.merge: ' + E + '\n'); }
934 patron.util.format_name = function(patron_obj) {
935 var patron_name = ( patron_obj.prefix() ? patron_obj.prefix() + ' ' : '') +
936 patron_obj.family_name() + ', ' +
937 patron_obj.first_given_name() + ' ' +
938 ( patron_obj.second_given_name() ? patron_obj.second_given_name() + ' ' : '' ) +
939 ( patron_obj.suffix() ? patron_obj.suffix() : '');
943 patron.util.work_log_patron_edit = function(p) {
946 JSAN.use('util.error'); error = new util.error();
948 document.getElementById('patronStrings').getFormattedString(
949 'staff.circ.work_log_patron_edit.message',
951 ses('staff_usrname'),
957 'au_family_name' : p.family_name(),
958 'au_barcode' : p.card().barcode()
962 error.sdump('D_ERROR','Error with work_logging in menu.js, cmd_patron_register:' + E);
967 dump('exiting patron/util.js\n');