From f9399c98caed32c2980bacdb4fbecbcf371749df Mon Sep 17 00:00:00 2001 From: phasefx Date: Thu, 21 Jul 2005 03:38:41 +0000 Subject: [PATCH] magic money distribution git-svn-id: svn://svn.open-ils.org/ILS/trunk@1332 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../chrome/content/evergreen/main/list_box.js | 2 + .../content/evergreen/patron/patron_bills.js | 192 ++++++++++++++---- .../patron/patron_display_overlay.xul | 32 ++- .../content/evergreen/patron/patron_utils.js | 4 +- .../chrome/content/evergreen/util/error.js | 2 +- .../chrome/content/evergreen/util/util.js | 35 +++- 6 files changed, 211 insertions(+), 56 deletions(-) diff --git a/Evergreen/staff_client/chrome/content/evergreen/main/list_box.js b/Evergreen/staff_client/chrome/content/evergreen/main/list_box.js index 776ac88de0..4492f9aafa 100644 --- a/Evergreen/staff_client/chrome/content/evergreen/main/list_box.js +++ b/Evergreen/staff_client/chrome/content/evergreen/main/list_box.js @@ -58,6 +58,8 @@ function list_box_init( p ) { sdump('D_ERROR', cols[i] + '\n' + E + '\n'); } } + + return listitem; } p.clear_rows = function () { diff --git a/Evergreen/staff_client/chrome/content/evergreen/patron/patron_bills.js b/Evergreen/staff_client/chrome/content/evergreen/patron/patron_bills.js index f19ff5fcbf..97932f3275 100644 --- a/Evergreen/staff_client/chrome/content/evergreen/patron/patron_bills.js +++ b/Evergreen/staff_client/chrome/content/evergreen/patron/patron_bills.js @@ -8,6 +8,108 @@ function patron_bills_init(p) { patron_bills_control_box_init( p ); + p.current_payments = []; + + p.update_payment_applied = function () { + sdump('D_PATRON_BILLS','p.update_payment_applied()\n'); + var total_applied = 0; + for (var i = 0; i < p.current_payments.length; i++) { + total_applied += dollars_float_to_cents_integer( p.current_payments[ i ].textbox.value ); + } + var total_payment = 0; + if (p.control_box.bill_payment_amount.value) { + try { + total_payment = dollars_float_to_cents_integer( p.control_box.bill_payment_amount.value ); + } catch(E) { + sdump('D_ERROR',E + '\n'); + } + } + if ( total_applied > total_payment ) { + total_payment = total_applied; + p.control_box.bill_payment_amount.value = cents_as_dollars( total_applied ); + } + p.control_box.bill_payment_applied.value = cents_as_dollars( total_applied ); + p.control_box.bill_credit_amount.value = ''; + if (total_payment > total_applied ) { + p.control_box.bill_change_amount.value = cents_as_dollars( total_payment - total_applied); + p.control_box.bill_credit_amount.value = '0.00'; + } else { + p.control_box.bill_change_amount.value = '0.00'; + p.control_box.bill_credit_amount.value = '0.00'; + } + var total_owed = dollars_float_to_cents_integer( p.control_box.bill_total_owed.value ); + p.control_box.bill_new_balance.value = cents_as_dollars( total_owed - total_applied ); + } + + p.list_box.apply_to_each_listitem = function (idx, listitem) { + sdump('D_PATRON_BILLS','p.list_box.apply_to_each_listitem()\n'); + p.current_payments[ idx ] = {}; + p.current_payments[ idx ].listitem = listitem; + p.current_payments[ idx ].checkbox = listitem.getElementsByTagName('checkbox')[0]; + p.current_payments[ idx ].textbox = listitem.getElementsByTagName('textbox')[0]; + p.current_payments[ idx ].mbts_id = listitem.getAttribute('record_id'); + p.current_payments[ idx ].balance_owed = listitem.getAttribute('balance_owed'); + + p.current_payments[ idx ].textbox.addEventListener( + 'change', + function () { + sdump('D_PATRON_BILLS','listitem textbox onchange handler()\n'); + var tb = p.current_payments[ idx ].textbox; + var bo = p.current_payments[ idx ].balance_owed; + tb.value = cents_as_dollars( dollars_float_to_cents_integer( tb.value ) ); // show user what we think the number is + sdump('D_PATRON_BILLS','bo = ' + bo + '\ntb.value = ' + tb.value + '\n'); + if ( dollars_float_to_cents_integer( tb.value ) > dollars_float_to_cents_integer( bo ) ) { + sdump('D_PATRON_BILLS','Tried to overpay bill\n'); + tb.value = bo; + } + p.update_payment_applied(); + }, + false + ); + } + + p.control_box.bill_payment_amount.addEventListener( + 'change', + function () { + var tb = p.control_box.bill_payment_amount; + tb.value = cents_as_dollars( dollars_float_to_cents_integer( tb.value ) ); + var total = dollars_float_to_cents_integer( tb.value ); + for (var i = 0; i < p.current_payments.length; i++) { + var bill = p.current_payments[i]; + var bo = dollars_float_to_cents_integer( bill.balance_owed ); + if ( bo > total ) { + bill.textbox.value = cents_as_dollars( total ); + total = 0; + } else { + bill.textbox.value = cents_as_dollars( bo ); + total = total - bo; + } + } + p.update_payment_applied(); + }, + false + ); + + p.control_box.bill_change_amount.addEventListener( + 'change', + function() { + var tb = p.control_box.bill_change_amount; + var proposed_change = dollars_float_to_cents_integer( tb.value ); + var proposed_credit = 0; + p.update_payment_applied(); + var real_change = dollars_float_to_cents_integer( tb.value ); + if ( proposed_change > real_change ) { + sdump('D_ERROR','Someone wanted more money than they deserved\n'); + proposed_change = real_change; + } else if ( real_change > proposed_change ) { + proposed_credit = real_change - proposed_change; + } + tb.value = cents_as_dollars( proposed_change ); + p.control_box.bill_credit_amount.value = cents_as_dollars( proposed_credit ); + }, + false + ); + p.control_box.bill_apply_payment.addEventListener( 'command', function() { alert('Fatal error.. gasp.. arggg.. choke... cough.. sputter'); }, @@ -24,9 +126,11 @@ function patron_bills_control_box_init( p ) { p.control_box.bill_total_owed = p.control_box.node.getElementsByAttribute('id','bill_total_owed')[0]; p.control_box.payment_type = p.control_box.node.getElementsByAttribute('id','payment_type_menulist')[0]; p.control_box.bill_payment_amount = p.control_box.node.getElementsByAttribute('id','bill_payment_amount_textbox')[0]; + p.control_box.bill_payment_applied = p.control_box.node.getElementsByAttribute('id','bill_payment_applied_textbox')[0]; p.control_box.bill_change_amount = p.control_box.node.getElementsByAttribute('id','bill_change_amount_textbox')[0]; p.control_box.bill_credit_amount = p.control_box.node.getElementsByAttribute('id','bill_credit_amount_textbox')[0]; p.control_box.bill_apply_payment = p.control_box.node.getElementsByAttribute('id','bill_apply_payment')[0]; + p.control_box.bill_new_balance = p.control_box.node.getElementsByAttribute('id','bill_new_balance_textbox')[0]; } function patron_bills_list_box_init( p ) { @@ -57,7 +161,7 @@ function patron_bills_list_box_init( p ) { ]; p.list_box = list_box_init( { 'w' : p.w, 'node' : p.node, 'cols' : p.patron_bills_cols, 'debug' : p.app } ); - p.clear_patron_bills = p.list_box.clear_rows; + p.clear_patron_bills = function () { p.current_payments = []; p.list_box.clear_rows(); }; p.add_patron_bills = function (bills) { sdump('D_PATRON_BILLS','p.add_patron_bills(' + bills + ')\n'); return patron_bills_add_patron_bills(p,bills); @@ -67,7 +171,8 @@ function patron_bills_list_box_init( p ) { function patron_bills_add_patron_bills(p, bills) { sdump('D_PATRON_BILLS',arg_dump(arguments,{1:true})); - p.control_box.bill_total_owed.setAttribute('value',''); + p.control_box.bill_total_owed.setAttribute('value',get_bills_total( bills )); + p.control_box.bill_new_balance.setAttribute('value',get_bills_total( bills )); function xact_dates_box( mbts ) { var grid = p.w.document.createElement('grid'); @@ -148,51 +253,60 @@ function patron_bills_add_patron_bills(p, bills) { setTimeout( function() { - //p.list_box.clear_rows(); + //p.list_box.clear_rows(); - for (var i = 0; i < bills.length; i++) { + for (var i = 0; i < bills.length; i++) { - var mbts = bills[i]; + var mbts = bills[i]; - var cols = []; + var cols = []; - for (var j = 0; j < p.patron_bills_cols.length; j++) { - var hash = p.patron_bills_cols[j]; - sdump('D_PATRON_BILLS','Considering ' + js2JSON(hash) + '\n'); - var listcell = p.w.document.createElement('listcell'); - listcell.setAttribute('pack','start'); - listcell.setAttribute('align','start'); - listcell.setAttribute('style','border-left: black solid thin'); - var col = ''; - if (hash.fm_field_render) { + for (var j = 0; j < p.patron_bills_cols.length; j++) { + var hash = p.patron_bills_cols[j]; + sdump('D_PATRON_BILLS','Considering ' + js2JSON(hash) + '\n'); + var listcell = p.w.document.createElement('listcell'); + listcell.setAttribute('pack','start'); + listcell.setAttribute('align','start'); + listcell.setAttribute('style','border-left: black solid thin'); + var col = ''; + if (hash.fm_field_render) { - var obj = 'mbts'; - switch( hash.fm_class ) { - case 'mvr' : obj_string = 'mvr'; break; - } - var cmd = parse_render_string( obj_string, hash.fm_field_render ); - sdump('D_PATRON_BILLS','cmd = ' + cmd + '\n'); - try { - col = eval( cmd ); - sdump('D_PATRON_BILLS','eval = ' + col + '\n'); - } catch(E) { - sdump('D_ERROR',E + '\n'); + var obj = 'mbts'; + switch( hash.fm_class ) { + case 'mvr' : obj_string = 'mvr'; break; + } + var cmd = parse_render_string( obj_string, hash.fm_field_render ); + sdump('D_PATRON_BILLS','cmd = ' + cmd + '\n'); + try { + col = eval( cmd ); + sdump('D_PATRON_BILLS','eval = ' + col + '\n'); + } catch(E) { + sdump('D_ERROR',E + '\n'); + } + if (typeof(col) == 'string') { + listcell.setAttribute('label',col); + } else { + listcell.appendChild( col ); + } + } + if (hash.render_xul) { + var xul = p.w.document.createElement( hash.render_xul ); + listcell.appendChild( xul ); + if (hash.render_xul == 'checkbox') xul.setAttribute('checked', 'true'); + } + cols.push( listcell ); } - if (typeof(col) == 'string') { - listcell.setAttribute('label',col); - } else { - listcell.appendChild( col ); + + var listitem = p.list_box.add_row( + cols, { + 'record_id' : mbts.id(), + 'balance_owed' : mbts.balance_owed() + } + ); + if (p.list_box.apply_to_each_listitem) { + p.list_box.apply_to_each_listitem( i, listitem ); } } - if (hash.render_xul) { - var xul = p.w.document.createElement( hash.render_xul ); - listcell.appendChild( xul ); - if (hash.render_xul == 'checkbox') xul.setAttribute('checked', 'true'); - } - cols.push( listcell ); - } - p.list_box.add_row( cols, { 'record_id' : mbts.id() } ); - } }, 0 ); } diff --git a/Evergreen/staff_client/chrome/content/evergreen/patron/patron_display_overlay.xul b/Evergreen/staff_client/chrome/content/evergreen/patron/patron_display_overlay.xul index e069e4f058..99a57a7107 100755 --- a/Evergreen/staff_client/chrome/content/evergreen/patron/patron_display_overlay.xul +++ b/Evergreen/staff_client/chrome/content/evergreen/patron/patron_display_overlay.xul @@ -110,14 +110,14 @@ - + - - + +