1 dump('entering patron.bills.js\n');
3 if (typeof patron == 'undefined') patron = {};
4 patron.bills = function (params) {
6 JSAN.use('util.error'); this.error = new util.error();
7 JSAN.use('util.network'); this.network = new util.network();
8 this.OpenILS = {}; JSAN.use('OpenILS.data'); this.OpenILS.data = new OpenILS.data(); this.OpenILS.data.init({'via':'stash'});
11 patron.bills.prototype = {
13 'version' : 'test123',
15 'current_payments' : [],
17 'init' : function( params ) {
21 obj.session = params['session'];
22 obj.patron_id = params['patron_id'];
24 JSAN.use('util.list'); obj.list = new util.list('bill_list');
26 function getString(s) { return obj.OpenILS.data.entities[s]; }
31 'id' : 'xact_dates', 'label' : getString('staff.bills_xact_dates_label'), 'flex' : 1,
32 'primary' : false, 'hidden' : false, 'render' : 'obj.xact_dates_box(my.mobts)'
35 'id' : 'notes', 'label' : getString('staff.bills_information'), 'flex' : 2,
36 'primary' : false, 'hidden' : false, 'render' : 'obj.info_box(my.mobts)'
39 'id' : 'money', 'label' : getString('staff.bills_money_label'), 'flex' : 1,
40 'primary' : false, 'hidden' : false, 'render' : 'obj.money_box(my.mobts)'
43 'id' : 'current_pay', 'label' : getString('staff.bills_current_payment_label'), 'flex' : 0,
44 'render' : 'document.createElement("textbox")'
47 'map_row_to_column' : obj.gen_map_row_to_column(),
51 JSAN.use('util.controller'); obj.controller = new util.controller();
57 function() { alert('Not Yet Implemented'); }
61 function() { alert('Not Yet Implemented'); }
63 'cmd_change_to_credit' : [
66 obj.change_to_credit();
69 'cmd_bill_apply_payment' : [
77 function(e) { return function() {}; }
81 function(e) { return function() {}; }
83 'bill_payment_amount' : [
86 JSAN.use('util.money');
88 tb.value = util.money.cents_as_dollars( util.money.dollars_float_to_cents_integer( tb.value ) );
89 var total = util.money.dollars_float_to_cents_integer( tb.value );
90 for (var i = 0; i < obj.current_payments.length; i++) {
91 var bill = obj.current_payments[i];
92 if (bill.checkbox.checked) {
93 var bo = util.money.dollars_float_to_cents_integer( bill.balance_owed );
95 bill.textbox.value = util.money.cents_as_dollars( total );
98 bill.textbox.value = util.money.cents_as_dollars( bo );
102 bill.textbox.value = '0.00';
105 obj.update_payment_applied();
108 'bill_payment_applied' : [
110 function(e) { return function() {}; }
112 'bill_change_amount' : [
115 JSAN.use('util.money');
117 var proposed_change = util.money.dollars_float_to_cents_integer( tb.value );
118 var proposed_credit = 0;
119 obj.update_payment_applied();
120 var real_change = util.money.dollars_float_to_cents_integer( tb.value );
121 if ( proposed_change > real_change ) {
122 obj.error.sdump('D_ERROR','Someone wanted more money than they deserved\n');
123 proposed_change = real_change;
124 } else if ( real_change > proposed_change ) {
125 proposed_credit = real_change - proposed_change;
127 tb.value = util.money.cents_as_dollars( proposed_change );
128 obj.controller.view.bill_credit_amount.value = util.money.cents_as_dollars( proposed_credit );
131 'bill_credit_amount' : [
133 function(e) { return function() {}; }
135 'bill_new_balance' : [
137 function(e) { return function() {}; }
147 JSAN.use('util.money');
149 //FIXME//.bills virtual field
150 for (var i = 0; i < obj.bills.length; i++) {
151 var rnode = obj.list.append( { 'row' : { 'my' : { 'mobts' : obj.bills[i] } }, 'attributes' : { 'allowevents' : true } } );
152 var cb = rnode.getElementsByTagName('checkbox')[0];
153 var tb = rnode.getElementsByTagName('textbox')[0];
154 var bo = obj.bills[i].balance_owed();
155 total_owed += util.money.dollars_float_to_cents_integer( bo );
156 var id = obj.bills[i].id();
157 obj.current_payments.push( { 'mobts_id' : id, 'balance_owed' : bo, 'checkbox' : cb, 'textbox' : tb, } );
161 JSAN.use('util.money');
162 tb.value = util.money.cents_as_dollars( util.money.dollars_float_to_cents_integer( tb.value ) );
163 if ( util.money.dollars_float_to_cents_integer( tb.value ) >
164 util.money.dollars_float_to_cents_integer( bo ) ) {
167 obj.update_payment_applied();
172 obj.controller.view.bill_total_owed.value = util.money.cents_as_dollars( total_owed );
175 /*****************************************************************************************************************************/
177 'apply_payment' : function() {
179 var payment_blob = {};
180 payment_blob.userid = obj.patron_id;
181 payment_blob.note = '';
182 payment_blob.cash_drawer = 1; // FIXME: get new Config() to work
183 payment_blob.payment_type = obj.controller.view.payment_type.value;
184 payment_blob.payments = [];
185 payment_blob.patron_credit = obj.controller.view.bill_credit_amount.value;
186 for (var i = 0; i < obj.current_payments.length; i++) {
187 var tb = obj.current_payments[ i ].textbox;
188 if ( !(tb.value == '0.00' || tb.value == '') ) {
189 payment_blob.payments.push(
191 obj.current_payments[ i ].mobts_id,
198 if ( obj.pay( payment_blob ) ) {
209 obj.error.sdump('D_ERROR',E);
213 'pay' : function(payment_blob) {
215 var robj = this.network.retrieve(
218 [ this.session, payment_blob ]
220 if (robj && robj.ilsevent && robj.ilsevent == 0) {
226 this.error.sdump('D_ERROR','patron.bills.pay: ' + E);
231 'update_payment_applied' : function() {
232 JSAN.use('util.money');
234 var total_applied = 0;
235 for (var i = 0; i < obj.current_payments.length; i++) {
236 total_applied += util.money.dollars_float_to_cents_integer( obj.current_payments[ i ].textbox.value );
238 var total_payment = 0;
239 if (obj.controller.view.bill_payment_amount.value) {
241 total_payment = util.money.dollars_float_to_cents_integer( obj.controller.view.bill_payment_amount.value );
243 obj.error.sdump('D_ERROR',E + '\n');
246 if ( total_applied > total_payment ) {
247 total_payment = total_applied;
248 obj.controller.view.bill_payment_amount.value = util.money.cents_as_dollars( total_applied );
250 obj.controller.view.bill_payment_applied.value = util.money.cents_as_dollars( total_applied );
251 obj.controller.view.bill_credit_amount.value = '';
252 if (total_payment > total_applied ) {
253 obj.controller.view.bill_change_amount.value = util.money.cents_as_dollars( total_payment - total_applied);
254 obj.controller.view.bill_credit_amount.value = '0.00';
256 obj.controller.view.bill_change_amount.value = '0.00';
257 obj.controller.view.bill_credit_amount.value = '0.00';
259 var total_owed = util.money.dollars_float_to_cents_integer( obj.controller.view.bill_total_owed.value );
260 obj.controller.view.bill_new_balance.value = util.money.cents_as_dollars( total_owed - total_applied );
263 'change_to_credit' : function() {
264 JSAN.use('util.money');
266 var tb = obj.controller.view.bill_change_amount;
267 var proposed_change = 0;
268 var proposed_credit = util.money.dollars_float_to_cents_integer( tb.value );
269 obj.update_payment_applied();
270 var real_change = util.money.dollars_float_to_cents_integer( tb.value );
271 if ( proposed_change > real_change ) {
272 obj.error.sdump('D_ERROR','Someone wanted more money than they deserved\n');
273 proposed_change = real_change;
274 } else if ( real_change > proposed_change ) {
275 proposed_credit = real_change - proposed_change;
277 tb.value = util.money.cents_as_dollars( proposed_change );
278 obj.controller.view.bill_credit_amount.value = util.money.cents_as_dollars( proposed_credit );
281 'retrieve' : function() {
283 obj.bills = obj.network.request(
284 api.fm_mobts_having_balance.app,
285 api.fm_mobts_having_balance.method,
286 [ obj.session, obj.patron_id ]
290 'xact_dates_box' : function ( mobts ) {
292 function getString(s) { return obj.OpenILS.data.entities[s]; }
293 var grid = document.createElement('grid');
294 var cols = document.createElement('columns');
295 grid.appendChild( cols );
296 cols.appendChild( document.createElement('column') );
297 cols.appendChild( document.createElement('column') );
298 var rows = document.createElement('rows');
299 grid.appendChild( rows );
300 var row0 = document.createElement('row');
301 rows.appendChild( row0 );
302 var cb_r0_0 = document.createElement('checkbox');
303 row0.appendChild( cb_r0_0 );
304 cb_r0_0.setAttribute('checked','true');
305 var hb_r0_1 = document.createElement('hbox');
306 row0.appendChild( hb_r0_1 );
307 var label_r0_1 = document.createElement('label');
308 hb_r0_1.appendChild( label_r0_1 );
309 label_r0_1.setAttribute('value',getString('staff.mbts_id_label'));
310 var label_r0_2 = document.createElement('label');
311 hb_r0_1.appendChild( label_r0_2 );
312 label_r0_2.setAttribute('value',mobts.id());
313 var row1 = document.createElement('row');
314 rows.appendChild( row1 );
315 var label_r1_1 = document.createElement('label');
316 row1.appendChild( label_r1_1 );
317 label_r1_1.setAttribute('value',getString('staff.mbts_xact_start_label'));
318 var label_r1_2 = document.createElement('label');
319 row1.appendChild( label_r1_2 );
320 label_r1_2.setAttribute('value',mobts.xact_start().toString().substr(0,10));
321 var row2 = document.createElement('row');
322 rows.appendChild( row2 );
323 var label_r2_1 = document.createElement('label');
324 row2.appendChild( label_r2_1 );
325 label_r2_1.setAttribute('value',getString('staff.mbts_xact_finish_label'));
326 var label_r2_2 = document.createElement('label');
327 row2.appendChild( label_r2_2 );
328 try { label_r2_2.setAttribute('value',mobts.xact_finish().toString().substr(0,10));
334 'money_box' : function ( mobts ) {
336 function getString(s) { return obj.OpenILS.data.entities[s]; }
337 var grid = document.createElement('grid');
338 var cols = document.createElement('columns');
339 grid.appendChild( cols );
340 cols.appendChild( document.createElement('column') );
341 cols.appendChild( document.createElement('column') );
342 var rows = document.createElement('rows');
343 grid.appendChild( rows );
344 var row1 = document.createElement('row');
345 rows.appendChild( row1 );
346 var label_r1_1 = document.createElement('label');
347 row1.appendChild( label_r1_1 );
348 label_r1_1.setAttribute('value',getString('staff.mbts_total_owed_label'));
349 var label_r1_2 = document.createElement('label');
350 row1.appendChild( label_r1_2 );
351 label_r1_2.setAttribute('value',mobts.total_owed());
352 var row2 = document.createElement('row');
353 rows.appendChild( row2 );
354 var label_r2_1 = document.createElement('label');
355 row2.appendChild( label_r2_1 );
356 label_r2_1.setAttribute('value',getString('staff.mbts_total_paid_label'));
357 var label_r2_2 = document.createElement('label');
358 row2.appendChild( label_r2_2 );
359 label_r2_2.setAttribute('value',mobts.total_paid());
360 var row3 = document.createElement('row');
361 rows.appendChild( row3 );
362 var label_r3_1 = document.createElement('label');
363 row3.appendChild( label_r3_1 );
364 label_r3_1.setAttribute('value',getString('staff.mbts_balance_owed_label'));
365 label_r3_1.setAttribute('style','font-weight: bold');
366 var label_r3_2 = document.createElement('label');
367 row3.appendChild( label_r3_2 );
368 label_r3_2.setAttribute('value',mobts.balance_owed());
369 label_r3_2.setAttribute('style','font-weight: bold');
374 'info_box' : function ( mobts ) {
376 function getString(s) { return obj.OpenILS.data.entities[s]; }
377 var vbox = document.createElement('vbox');
378 var grid = document.createElement('grid');
379 vbox.appendChild( grid );
381 var cols = document.createElement('columns');
382 grid.appendChild( cols );
383 cols.appendChild( document.createElement('column') );
384 cols.appendChild( document.createElement('column') );
385 var rows = document.createElement('rows');
386 grid.appendChild( rows );
388 var xact_type = document.createElement('row');
389 rows.appendChild( xact_type );
391 var xt_label = document.createElement('label');
392 xact_type.appendChild( xt_label );
393 xt_label.setAttribute( 'value', 'Type' );
394 var xt_value = document.createElement('label');
395 xact_type.appendChild( xt_value );
396 xt_value.setAttribute( 'value', mobts.xact_type() );
398 var last_billing = document.createElement('row');
399 rows.appendChild( last_billing );
401 var lb_label = document.createElement('label');
402 last_billing.appendChild( lb_label );
403 lb_label.setAttribute( 'value', 'Last Billing:' );
405 var lb_value = document.createElement('label');
406 last_billing.appendChild( lb_value );
407 if (mobts.last_billing_type())
408 lb_value.setAttribute( 'value', mobts.last_billing_type() );
410 var last_payment = document.createElement('row');
411 rows.appendChild( last_payment );
413 var lp_label = document.createElement('label');
414 last_payment.appendChild( lp_label );
415 lp_label.setAttribute( 'value', 'Last Payment:' );
417 var lp_value = document.createElement('label');
418 last_payment.appendChild( lp_value );
419 if (mobts.last_payment_type())
420 lp_value.setAttribute( 'value', mobts.last_payment_type() );
422 var btn = document.createElement('button');
423 vbox.appendChild( btn );
424 btn.setAttribute( 'label', 'Full Details' );
425 btn.setAttribute( 'name', 'full_details' );
426 btn.setAttribute( 'mobts_id', mobts.id() );
427 btn.addEventListener(
430 alert('bill details go here');
438 'gen_map_row_to_column' : function() {
441 return function(row,col) {
442 // row contains { 'my' : { 'mobts' : ... } }
443 // col contains one of the objects listed above in columns
448 value = eval( col.render );
450 try{obj.error.sdump('D_ERROR','map_row_to_column: ' + E);}
451 catch(P){dump('?map_row_to_column: ' + E + '\n');}
454 dump('map_row_to_column: value = ' + value + '\n');
461 dump('exiting patron.bills.js\n');