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',*/ 'std_map_row_to_columns',
8 'retrieve_au_via_id', 'retrieve_fleshed_au_via_id', 'retrieve_fleshed_au_via_barcode', 'set_penalty_css', 'retrieve_name_via_id',
9 'merge', 'ausp_columns', 'format_name'
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,
58 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mbts.last_billing_ts(), "" ); }
61 'persist' : 'hidden width ordinal', 'id' : 'last_payment_note', 'label' : commonStrings.getString('staff.mbts_last_payment_note_label'), 'flex' : 2,
62 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.last_payment_note(); }
65 'persist' : 'hidden width ordinal', 'id' : 'last_payment_type', 'label' : commonStrings.getString('staff.mbts_last_payment_type_label'), 'flex' : 1,
66 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mbts.last_payment_type(); }
69 'persist' : 'hidden width ordinal', 'id' : 'last_payment_ts', 'label' : commonStrings.getString('staff.mbts_last_payment_timestamp_label'), 'flex' : 1,
70 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mbts.last_payment_ts(), "" ); }
73 'persist' : 'hidden width ordinal', 'id' : 'xact_start', 'label' : commonStrings.getString('staff.mbts_xact_start_label'), 'flex' : 1,
74 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mbts.xact_start() ? my.mbts.xact_start().toString().substr(0,10) : ""; }
77 'persist' : 'hidden width ordinal', 'id' : 'xact_finish', 'label' : commonStrings.getString('staff.mbts_xact_finish_label'), 'flex' : 1,
78 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mbts.xact_finish() ? my.mbts.xact_finish().toString().substr(0,10) : ""; }
81 for (var i = 0; i < c.length; i++) {
82 if (modify[ c[i].id ]) {
83 for (var j in modify[ c[i].id ]) {
84 c[i][j] = modify[ c[i].id ][j];
89 if (params.just_these) {
90 JSAN.use('util.functional');
92 for (var i = 0; i < params.just_these.length; i++) {
93 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
94 new_c.push( function(y){ return y; }( x ) );
98 if (params.except_these) {
99 JSAN.use('util.functional');
101 for (var i = 0; i < c.length; i++) {
102 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
103 if (!x) new_c.push(c[i]);
108 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
111 patron.util.mb_columns = function(modify,params) {
113 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
114 JSAN.use('util.money'); JSAN.use('util.date');
116 var commonStrings = document.getElementById('commonStrings');
120 'persist' : 'hidden width ordinal', 'id' : 'mb_id', 'label' : commonStrings.getString('staff.mb_id_label'), 'flex' : 1,
121 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.id(); }
124 'persist' : 'hidden width ordinal', 'id' : 'voided', 'label' : commonStrings.getString('staff.mb_voided_label'), 'flex' : 1,
125 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return get_bool( my.mb.voided() ) ? "Yes" : "No"; }
128 'persist' : 'hidden width ordinal', 'id' : 'voider', 'label' : commonStrings.getString('staff.mb_voider_label'), 'flex' : 1,
129 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.voider() ? "Id = " + my.mb.voider() : ""; }
132 'persist' : 'hidden width ordinal', 'id' : 'void_time', 'label' : commonStrings.getString('staff.mb_void_time_label'), 'flex' : 1,
133 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.void_time(); }
136 'persist' : 'hidden width ordinal', 'id' : 'amount', 'label' : commonStrings.getString('staff.mb_amount_label'), 'flex' : 1,
137 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mb.amount() ); },
138 'sort_type' : 'money'
141 'persist' : 'hidden width ordinal', 'id' : 'billing_type', 'label' : commonStrings.getString('staff.mb_billing_type_label'), 'flex' : 1,
142 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mb.billing_type(); }
145 'persist' : 'hidden width ordinal', 'id' : 'billing_ts', 'label' : commonStrings.getString('staff.mb_billing_ts_label'), 'flex' : 1,
146 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mb.billing_ts(), "" ); }
149 'persist' : 'hidden width ordinal', 'id' : 'note', 'label' : commonStrings.getString('staff.mb_note_label'), 'flex' : 2,
150 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mb.note(); }
153 'persist' : 'hidden width ordinal', 'id' : 'xact', 'label' : commonStrings.getString('staff.mb_xact_label'), 'flex' : 1,
154 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mb.xact(); }
157 for (var i = 0; i < c.length; i++) {
158 if (modify[ c[i].id ]) {
159 for (var j in modify[ c[i].id ]) {
160 c[i][j] = modify[ c[i].id ][j];
165 if (params.just_these) {
166 JSAN.use('util.functional');
168 for (var i = 0; i < params.just_these.length; i++) {
169 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
170 new_c.push( function(y){ return y; }( x ) );
174 if (params.except_these) {
175 JSAN.use('util.functional');
177 for (var i = 0; i < c.length; i++) {
178 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
179 if (!x) new_c.push(c[i]);
185 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
188 patron.util.mp_columns = function(modify,params) {
190 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
191 JSAN.use('util.money'); JSAN.use('util.date'); JSAN.use('patron.util');
193 var commonStrings = document.getElementById('commonStrings');
197 'persist' : 'hidden width ordinal', 'id' : 'mp_id', 'label' : commonStrings.getString('staff.mp_id_label'), 'flex' : 1,
198 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mp.id(); }
201 'persist' : 'hidden width ordinal', 'id' : 'mp_amount', 'label' : commonStrings.getString('staff.mp_amount_label'), 'flex' : 1,
202 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.money.sanitize( my.mp.amount() ); },
203 'sort_type' : 'money'
206 'persist' : 'hidden width ordinal', 'id' : 'mp_payment_type', 'label' : commonStrings.getString('staff.mp_payment_type_label'), 'flex' : 1,
207 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mp.payment_type(); }
210 'persist' : 'hidden width ordinal', 'id' : 'mp_payment_ts', 'label' : commonStrings.getString('staff.mp_payment_timestamp_label'), 'flex' : 1,
211 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return util.date.formatted_date( my.mp.payment_ts(), "" ); }
214 'persist' : 'hidden width ordinal', 'id' : 'mp_note', 'label' : commonStrings.getString('staff.mp_note_label'), 'flex' : 2,
215 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mp.note(); }
218 'persist' : 'hidden width ordinal', 'id' : 'mp_ws', 'label' : commonStrings.getString('staff.mp_cash_drawer_label'), 'flex' : 1,
219 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return my.mp.cash_drawer().name(); }
222 'persist' : 'hidden width ordinal', 'id' : 'mp_staff', 'label' : commonStrings.getString('staff.mp_accepting_usr_label'), 'flex' : 1,
223 '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); return s.family_name() + " (" + s.card().barcode() + ") @ " + data.hash.aou[ s.home_ou() ].shortname(); }
226 'persist' : 'hidden width ordinal', 'id' : 'mp_xact', 'label' : commonStrings.getString('staff.mp_xact_label'), 'flex' : 1,
227 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.mp.xact(); }
230 for (var i = 0; i < c.length; i++) {
231 if (modify[ c[i].id ]) {
232 for (var j in modify[ c[i].id ]) {
233 c[i][j] = modify[ c[i].id ][j];
238 if (params.just_these) {
239 JSAN.use('util.functional');
241 for (var i = 0; i < params.just_these.length; i++) {
242 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
243 new_c.push( function(y){ return y; }( x ) );
247 if (params.except_these) {
248 JSAN.use('util.functional');
250 for (var i = 0; i < c.length; i++) {
251 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
252 if (!x) new_c.push(c[i]);
258 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
261 patron.util.ausp_columns = function(modify,params) {
263 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
264 JSAN.use('util.functional');
266 var commonStrings = document.getElementById('commonStrings');
270 'persist' : 'hidden width ordinal', 'id' : 'csp_id', 'label' : commonStrings.getString('staff.csp_id_label'), 'flex' : 1,
271 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.id() : my.csp; }
274 'persist' : 'hidden width ordinal', 'id' : 'csp_name', 'label' : commonStrings.getString('staff.csp_name_label'), 'flex' : 1,
275 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.name() : data.hash.csp[ my.csp ].name(); }
278 'persist' : 'hidden width ordinal', 'id' : 'csp_label', 'label' : commonStrings.getString('staff.csp_label_label'), 'flex' : 1,
279 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) { return typeof my.csp == 'object' ? my.csp.label() : data.hash.csp[ my.csp ].label(); }
282 'persist' : 'hidden width ordinal', 'id' : 'csp_block_list', 'label' : commonStrings.getString('staff.csp_block_list_label'), 'flex' : 1,
283 '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(); }
286 'persist' : 'hidden width ordinal', 'id' : 'csp_block_circ', 'label' : commonStrings.getString('staff.csp_block_circ_label'), 'flex' : 1,
287 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
288 var my_csp = typeof my.csp == 'object' ? my.csp : data.hash.csp[ my.csp ];
289 return String( my_csp.block_list() ).match('CIRC') ? commonStrings.getString('staff.csp_block_circ_yes') : commonStrings.getString('staff.csp_block_circ_no');
293 'persist' : 'hidden width ordinal', 'id' : 'csp_block_renew', 'label' : commonStrings.getString('staff.csp_block_renew_label'), 'flex' : 1,
294 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
295 var my_csp = typeof my.csp == 'object' ? my.csp : data.hash.csp[ my.csp ];
296 return String( my_csp.block_list() ).match('RENEW') ? commonStrings.getString('staff.csp_block_renew_yes') : commonStrings.getString('staff.csp_block_renew_no');
301 'persist' : 'hidden width ordinal', 'id' : 'csp_block_hold', 'label' : commonStrings.getString('staff.csp_block_hold_label'), 'flex' : 1,
302 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
303 var my_csp = typeof my.csp == 'object' ? my.csp : data.hash.csp[ my.csp ];
304 return String( my_csp.block_list() ).match('HOLD') ? commonStrings.getString('staff.csp_block_hold_yes') : commonStrings.getString('staff.csp_block_hold_no');
308 'persist' : 'hidden width ordinal', 'id' : 'ausp_id', 'label' : commonStrings.getString('staff.ausp_id_label'), 'flex' : 1,
309 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.ausp ? my.ausp.id() : ''; }
312 'persist' : 'hidden width ordinal', 'id' : 'ausp_staff', 'label' : commonStrings.getString('staff.ausp_staff_label'), 'flex' : 1,
313 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) {
314 return my.ausp ? my.ausp.staff() : '';
318 'persist' : 'hidden width ordinal', 'id' : 'ausp_set_date', 'label' : commonStrings.getString('staff.ausp_set_date_label'), 'flex' : 1,
319 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) {
320 return my.ausp ? my.ausp.set_date() : '';
324 'persist' : 'hidden width ordinal', 'id' : 'ausp_note', 'label' : commonStrings.getString('staff.ausp_note_label'), 'flex' : 1,
325 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) {
326 return my.ausp ? my.ausp.note() : '';
330 'persist' : 'hidden width ordinal', 'id' : 'ausp_org_unit', 'label' : commonStrings.getString('staff.ausp_org_unit_label'), 'flex' : 1,
331 'primary' : false, 'hidden' : false, 'editable' : false, 'render' : function(my) {
332 return my.ausp ? data.hash.aou[ my.ausp.org_unit() ].shortname() : '';
336 for (var i = 0; i < c.length; i++) {
337 if (modify[ c[i].id ]) {
338 for (var j in modify[ c[i].id ]) {
339 c[i][j] = modify[ c[i].id ][j];
344 if (params.just_these) {
346 for (var i = 0; i < params.just_these.length; i++) {
347 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
348 new_c.push( function(y){ return y; }( x ) );
352 if (params.except_these) {
354 for (var i = 0; i < c.length; i++) {
355 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
356 if (!x) new_c.push(c[i]);
362 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
366 patron.util.columns = function(modify,params) {
368 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
370 var commonStrings = document.getElementById('commonStrings');
374 'persist' : 'hidden width ordinal', 'id' : 'barcode', 'label' : commonStrings.getString('staff.card_barcode_label'), 'flex' : 1,
375 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.card().barcode(); }
378 'persist' : 'hidden width ordinal', 'id' : 'usrname', 'label' : commonStrings.getString('staff.au_usrname_label'), 'flex' : 1,
379 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.usrname(); }
382 'persist' : 'hidden width ordinal', 'id' : 'profile', 'label' : commonStrings.getString('staff.au_profile_label'), 'flex' : 1,
383 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.pgt[ my.au.profile() ].name(); }
386 'persist' : 'hidden width ordinal', 'id' : 'active', 'label' : commonStrings.getString('staff.au_active_label'), 'flex' : 1,
387 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return get_bool( my.au.active() ) ? "Yes" : "No"; }
390 'persist' : 'hidden width ordinal', 'id' : 'barred', 'label' : commonStrings.getString('staff.au_barred_label'), 'flex' : 1,
391 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return get_bool( my.au.barred() ) ? "Yes" : "No"; }
394 'persist' : 'hidden width ordinal', 'id' : 'au_id', 'label' : document.getElementById('commonStrings').getString('staff.au_id_label'), 'flex' : 1,
395 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.id(); }
398 'persist' : 'hidden width ordinal', 'id' : 'prefix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_prefix_label'), 'flex' : 1,
399 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.prefix(); }
402 'persist' : 'hidden width ordinal', 'id' : 'family_name', 'label' : document.getElementById('commonStrings').getString('staff.au_family_name_label'), 'flex' : 1,
403 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.family_name(); }
406 'persist' : 'hidden width ordinal', 'id' : 'first_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_first_given_name_label'), 'flex' : 1,
407 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.first_given_name(); }
410 'persist' : 'hidden width ordinal', 'id' : 'second_given_name', 'label' : document.getElementById('commonStrings').getString('staff.au_second_given_name_label'), 'flex' : 1,
411 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.second_given_name(); }
414 'persist' : 'hidden width ordinal', 'id' : 'suffix', 'label' : document.getElementById('commonStrings').getString('staff.au_name_suffix_label'), 'flex' : 1,
415 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.suffix(); }
418 'persist' : 'hidden width ordinal', 'id' : 'alert_message', 'label' : commonStrings.getString('staff.au_alert_message_label'), 'flex' : 1,
419 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.alert_message(); }
422 'persist' : 'hidden width ordinal', 'id' : 'claims_returned_count', 'label' : commonStrings.getString('staff.au_claims_returned_count_label'), 'flex' : 1,
423 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.claims_returned_count(); },
424 'sort_type' : 'number'
427 'persist' : 'hidden width ordinal', 'id' : 'create_date', 'label' : commonStrings.getString('staff.au_create_date_label'), 'flex' : 1,
428 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.create_date(); }
431 'persist' : 'hidden width ordinal', 'id' : 'expire_date', 'label' : commonStrings.getString('staff.au_expire_date_label'), 'flex' : 1,
432 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.expire_date().substr(0,10); }
435 'persist' : 'hidden width ordinal', 'id' : 'home_ou', 'label' : commonStrings.getString('staff.au_home_library_label'), 'flex' : 1,
436 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].shortname(); }
439 'persist' : 'hidden width ordinal', 'id' : 'home_ou_fullname', 'label' : commonStrings.getString('staff.au_home_library_fullname_label'), 'flex' : 1,
440 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.aou[ my.au.home_ou() ].name(); }
443 'persist' : 'hidden width ordinal', 'id' : 'credit_forward_balance', 'label' : commonStrings.getString('staff.au_credit_forward_balance_label'), 'flex' : 1,
444 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.credit_forward_balance(); },
445 'sort_type' : 'money'
448 'persist' : 'hidden width ordinal', 'id' : 'day_phone', 'label' : commonStrings.getString('staff.au_day_phone_label'), 'flex' : 1,
449 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.day_phone(); }
452 'persist' : 'hidden width ordinal', 'id' : 'evening_phone', 'label' : commonStrings.getString('staff.au_evening_phone_label'), 'flex' : 1,
453 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.evening_phone(); }
456 'persist' : 'hidden width ordinal', 'id' : 'other_phone', 'label' : commonStrings.getString('staff.au_other_phone_label'), 'flex' : 1,
457 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.other_phone(); }
460 'persist' : 'hidden width ordinal', 'id' : 'email', 'label' : commonStrings.getString('staff.au_email_label'), 'flex' : 1,
461 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.email(); }
464 'persist' : 'hidden width ordinal', 'id' : 'alias', 'label' : commonStrings.getString('staff.au_alias_label'), 'flex' : 1,
465 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.alias(); }
468 'persist' : 'hidden width ordinal', 'id' : 'dob', 'label' : commonStrings.getString('staff.au_birth_date_label'), 'flex' : 1,
469 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.dob().substr(0,10); }
472 'persist' : 'hidden width ordinal', 'id' : 'ident_type', 'label' : commonStrings.getString('staff.au_ident_type_label'), 'flex' : 1,
473 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.cit[ my.au.ident_type() ].name(); }
476 'persist' : 'hidden width ordinal', 'id' : 'ident_value', 'label' : commonStrings.getString('staff.au_ident_value_label'), 'flex' : 1,
477 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.ident_value(); }
480 'persist' : 'hidden width ordinal', 'id' : 'ident_type2', 'label' : commonStrings.getString('staff.au_ident_type2_label'), 'flex' : 1,
481 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return data.hash.cit[ my.au.ident_type2() ].name(); }
484 'persist' : 'hidden width ordinal', 'id' : 'ident_value2', 'label' : commonStrings.getString('staff.au_ident_value2_label'), 'flex' : 1,
485 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.ident_value2(); }
488 'persist' : 'hidden width ordinal', 'id' : 'net_access_level', 'label' : commonStrings.getString('staff.au_net_access_level_label'), 'flex' : 1,
489 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.net_access_level(); }
492 'persist' : 'hidden width ordinal', 'id' : 'master_account', 'label' : commonStrings.getString('staff.au_master_account_label'), 'flex' : 1,
493 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return get_bool( my.au.master_account() ) ? "Yes" : "No"; }
496 'persist' : 'hidden width ordinal', 'id' : 'usrgroup', 'label' : commonStrings.getString('staff.au_group_id_label'), 'flex' : 1,
497 'primary' : false, 'hidden' : true, 'editable' : false, 'render' : function(my) { return my.au.usrgroup(); }
500 for (var i = 0; i < c.length; i++) {
501 if (modify[ c[i].id ]) {
502 for (var j in modify[ c[i].id ]) {
503 c[i][j] = modify[ c[i].id ][j];
508 if (params.just_these) {
509 JSAN.use('util.functional');
511 for (var i = 0; i < params.just_these.length; i++) {
512 var x = util.functional.find_list(c,function(d){return(d.id==params.just_these[i]);});
513 new_c.push( function(y){ return y; }( x ) );
517 if (params.except_these) {
518 JSAN.use('util.functional');
520 for (var i = 0; i < c.length; i++) {
521 var x = util.functional.find_list(params.except_these,function(d){return(d==c[i].id);});
522 if (!x) new_c.push(c[i]);
528 return c.sort( function(a,b) { if (a.label < b.label) return -1; if (a.label > b.label) return 1; return 0; } );
531 patron.util.std_map_row_to_columns = function(error_value) {
532 return function(row,cols) {
533 // row contains { 'my' : { 'au' : {} } }
534 // cols contains all of the objects listed above in columns
536 var obj = {}; obj.OpenILS = {};
537 JSAN.use('util.error'); obj.error = new util.error();
538 JSAN.use('OpenILS.data'); obj.OpenILS.data = new OpenILS.data(); obj.OpenILS.data.init({'via':'stash'});
539 JSAN.use('util.date'); JSAN.use('util.money');
545 for (var i = 0; i < cols.length; i++) {
546 switch (typeof cols[i].render) {
547 case 'function': try { values[i] = cols[i].render(my); } catch(E) { values[i] = error_value; obj.error.sdump('D_COLUMN_RENDER_ERROR',E); } break;
548 case 'string' : cmd += 'try { ' + cols[i].render + '; values['+i+'] = v; } catch(E) { values['+i+'] = error_value; }'; break;
549 default: cmd += 'values['+i+'] = "??? '+(typeof cols[i].render)+'"; ';
552 if (cmd) eval( cmd );
554 obj.error.sdump('D_WARN','map_row_to_column: ' + E);
555 if (error_value) { value = error_value; } else { value = ' ' };
561 patron.util.retrieve_au_via_id = function(session, id, f) {
562 JSAN.use('util.network');
563 var network = new util.network();
564 var patron_obj = network.simple_request(
565 'FM_AU_RETRIEVE_VIA_ID',
572 patron.util.retrieve_name_via_id = function(session, id) {
573 JSAN.use('util.network');
574 var network = new util.network();
575 var parts = network.simple_request(
576 'BLOB_AU_PARTS_RETRIEVE',
577 [ session, id, ['family_name', 'first_given_name', 'second_given_name', 'home_ou' ] ]
582 patron.util.retrieve_fleshed_au_via_id = function(session, id) {
583 JSAN.use('util.network');
584 var network = new util.network();
585 var patron_obj = network.simple_request(
586 'FM_AU_FLESHED_RETRIEVE_VIA_ID.authoritative',
589 patron.util.set_penalty_css(patron_obj);
593 patron.util.retrieve_fleshed_au_via_barcode = function(session, id) {
594 JSAN.use('util.network');
595 var network = new util.network();
596 var patron_obj = network.simple_request(
597 'FM_AU_RETRIEVE_VIA_BARCODE.authoritative',
600 if (typeof patron_obj.ilsevent == 'undefined') patron.util.set_penalty_css(patron_obj);
604 var TIME = { minute : 60, hour : 60*60, day : 60*60*24, year : 60*60*24*365 };
606 patron.util.set_penalty_css = function(patron) {
608 removeCSSClass(document.documentElement,'PATRON_HAS_BILLS');
609 removeCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
610 removeCSSClass(document.documentElement,'PATRON_HAS_NOTES');
611 removeCSSClass(document.documentElement,'PATRON_EXCEEDS_CHECKOUT_COUNT');
612 removeCSSClass(document.documentElement,'PATRON_EXCEEDS_OVERDUE_COUNT');
613 removeCSSClass(document.documentElement,'PATRON_EXCEEDS_FINES');
614 removeCSSClass(document.documentElement,'NO_PENALTIES');
615 removeCSSClass(document.documentElement,'ONE_PENALTY');
616 removeCSSClass(document.documentElement,'MULTIPLE_PENALTIES');
617 removeCSSClass(document.documentElement,'PATRON_HAS_ALERT');
618 removeCSSClass(document.documentElement,'PATRON_BARRED');
619 removeCSSClass(document.documentElement,'PATRON_INACTIVE');
620 removeCSSClass(document.documentElement,'PATRON_EXPIRED');
621 removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
622 removeCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
623 removeCSSClass(document.documentElement,'PATRON_AGE_GE_65');
624 removeCSSClass(document.documentElement,'PATRON_AGE_LT_65');
625 removeCSSClass(document.documentElement,'PATRON_AGE_GE_24');
626 removeCSSClass(document.documentElement,'PATRON_AGE_LT_24');
627 removeCSSClass(document.documentElement,'PATRON_AGE_GE_21');
628 removeCSSClass(document.documentElement,'PATRON_AGE_LT_21');
629 removeCSSClass(document.documentElement,'PATRON_AGE_GE_18');
630 removeCSSClass(document.documentElement,'PATRON_AGE_LT_18');
631 removeCSSClass(document.documentElement,'PATRON_AGE_GE_13');
632 removeCSSClass(document.documentElement,'PATRON_AGE_LT_13');
633 removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_1');
634 removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_2');
635 removeCSSClass(document.documentElement,'PATRON_NET_ACCESS_3');
637 JSAN.use('util.network'); var net = new util.network();
638 net.simple_request('FM_MOUS_RETRIEVE.authoritative',[ ses(), patron.id() ], function(req) {
639 if (req.getResultObject().balance_owed() > 0) addCSSClass(document.documentElement,'PATRON_HAS_BILLS');
641 net.simple_request('FM_CIRC_COUNT_RETRIEVE_VIA_USER.authoritative',[ ses(), patron.id() ], function(req) {
643 var co = req.getResultObject();
644 if (co.overdue > 0 || co.long_overdue > 0) addCSSClass(document.documentElement,'PATRON_HAS_OVERDUES');
649 net.simple_request('FM_AUN_RETRIEVE_ALL.authoritative',[ ses(), { 'patronid' : patron.id() } ], function(req) {
650 var notes = req.getResultObject();
651 if (notes.length > 0) addCSSClass(document.documentElement,'PATRON_HAS_NOTES');
655 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.init({'via':'stash'});
656 data.last_patron = patron.id(); data.stash('last_patron');
659 var penalties = patron.standing_penalties();
660 for (var i = 0; i < penalties.length; i++) {
661 /* this comes from /opac/common/js/utils.js */
662 addCSSClass(document.documentElement,penalties[i].standing_penalty().name());
665 switch(penalties.length) {
666 case 0: addCSSClass(document.documentElement,'NO_PENALTIES'); break;
667 case 1: addCSSClass(document.documentElement,'ONE_PENALTY'); break;
668 default: addCSSClass(document.documentElement,'MULTIPLE_PENALTIES'); break;
671 if (patron.alert_message()) {
672 addCSSClass(document.documentElement,'PATRON_HAS_ALERT');
675 if (get_bool( patron.barred() )) {
676 addCSSClass(document.documentElement,'PATRON_BARRED');
679 if (!get_bool( patron.active() )) {
680 addCSSClass(document.documentElement,'PATRON_INACTIVE');
683 try { addCSSClass(document.documentElement,'PATRON_NET_ACCESS_' + patron.net_access_level()); } catch(E) {}
685 var now = new Date();
686 now = now.getTime()/1000;
688 var expire_parts = patron.expire_date().substr(0,10).split('-');
689 expire_parts[1] = expire_parts[1] - 1;
691 var expire = new Date();
692 expire.setFullYear(expire_parts[0], expire_parts[1], expire_parts[2]);
693 expire = expire.getTime()/1000
695 if (expire < now) addCSSClass(document.documentElement,'PATRON_EXPIRED');
698 var age_parts = patron.dob().substr(0,10).split('-');
699 age_parts[1] = age_parts[1] - 1;
701 var born = new Date();
702 born.setFullYear(age_parts[0], age_parts[1], age_parts[2]);
703 born = born.getTime()/1000
705 var patron_age = now - born;
706 var years_old = Number(patron_age / TIME.year);
708 addCSSClass(document.documentElement,'PATRON_AGE_IS_' + years_old);
710 if ( years_old >= 65 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_65');
711 if ( years_old < 65 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_65');
713 if ( years_old >= 24 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_24');
714 if ( years_old < 24 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_24');
716 if ( years_old >= 21 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_21');
717 if ( years_old < 21 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_21');
719 if ( years_old >= 18 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_18');
720 if ( years_old < 18 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_18');
722 if ( years_old >= 13 ) addCSSClass(document.documentElement,'PATRON_AGE_GE_13');
723 if ( years_old < 13 ) addCSSClass(document.documentElement,'PATRON_AGE_LT_13');
725 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_DOB');
728 if ( get_bool( patron.juvenile() ) ) addCSSClass(document.documentElement,'PATRON_JUVENILE');
729 else removeCSSClass(document.documentElement,'PATRON_JUVENILE');
731 if (patron.mailing_address()) {
732 if (!get_bool(patron.mailing_address().valid())) {
733 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
736 if (patron.billing_address()) {
737 if (!get_bool(patron.billing_address().valid())) {
738 addCSSClass(document.documentElement,'PATRON_HAS_INVALID_ADDRESS');
743 dump('patron.util.set_penalty_css: ' + E + '\n');
744 alert('patron.util.set_penalty_css: ' + E + '\n');
748 patron.util.merge = function(record_ids) {
751 netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect UniversalBrowserWrite');
752 JSAN.use('util.error'); error = new util.error();
753 var top_xml = '<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" flex="1" >';
754 top_xml += '<description>' + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.merge_lead') + '</description>';
756 top_xml += '<button id="lead" disabled="true" label="'
757 + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.button.label') + '" name="fancy_submit"/>';
758 top_xml += '<button label="' + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.cancel_button.label') +'" accesskey="'
759 + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.cancel_button.accesskey') +'" name="fancy_cancel"/></hbox></vbox>';
761 var xml = '<form xmlns="http://www.w3.org/1999/xhtml">';
762 xml += '<table><tr valign="top">';
763 for (var i = 0; i < record_ids.length; i++) {
764 xml += '<td><input value="' + $("patronStrings").getString('staff.patron.usr_buckets.merge_records.lead')
765 xml += '" id="record_' + record_ids[i] + '" type="radio" name="lead"';
766 xml += ' onclick="' + "try { var x = $('lead'); x.setAttribute('value',";
767 xml += record_ids[i] + '); x.disabled = false; } catch(E) { alert(E); }">';
768 xml += '</input>' + $("patronStrings").getFormattedString('staff.patron.usr_buckets.merge_records.lead_record_number',[record_ids[i]]) + '</td>';
770 xml += '</tr><tr valign="top">';
771 for (var i = 0; i < record_ids.length; i++) {
772 xml += '<td nowrap="nowrap"><iframe style="min-height: 1000px; min-width: 300px" flex="1" src="' + urls.XUL_PATRON_SUMMARY;
773 xml += '?id=' + record_ids[i] + '&show_name=1"/></td>';
775 xml += '</tr></table></form>';
776 JSAN.use('util.window'); var win = new util.window();
777 var fancy_prompt_data = win.open(
778 urls.XUL_FANCY_PROMPT,
779 'fancy_prompt', 'chrome,resizable,modal,width=750,height=500',
781 'top_xml' : top_xml, 'xml' : xml, 'title' : $("patronStrings").getString('staff.patron.usr_buckets.merge_records.fancy_prompt_title')
785 if (typeof fancy_prompt_data.fancy_status == 'undefined' || fancy_prompt_data.fancy_status == 'incomplete') {
786 alert($("patronStrings").getString('staff.patron.usr_buckets.merge_records.fancy_prompt.alert'));
790 JSAN.use('util.functional'); JSAN.use('util.network'); var network = new util.network();
791 var robj = network.simple_request('FM_AU_MERGE',
794 fancy_prompt_data.lead,
795 util.functional.filter_list( record_ids,
797 return o != fancy_prompt_data.lead;
802 if (Number(robj) != 1) { throw(robj); }
803 return fancy_prompt_data.lead;
805 dump('patron.util.merge: ' + js2JSON(E) + '\n');
806 try { error.standard_unexpected_error_alert('Error in patron.util.merge',E); } catch(F) { alert('patron.util.merge: ' + E + '\n'); }
811 patron.util.format_name = function(patron_obj) {
812 var patron_name = ( patron_obj.prefix() ? patron_obj.prefix() + ' ' : '') +
813 patron_obj.family_name() + ', ' +
814 patron_obj.first_given_name() + ' ' +
815 ( patron_obj.second_given_name() ? patron_obj.second_given_name() + ' ' : '' ) +
816 ( patron_obj.suffix() ? patron_obj.suffix() : '');
820 dump('exiting patron/util.js\n');