1 sdump('D_TRACE','Loading patron_bills.js\n');
3 function patron_bills_init(p) {
4 sdump('D_PATRON_BILLS',"TESTING: patron_bills.js: " + mw.G['main_test_variable'] + '\n');
5 sdump('D_CONSTRUCTOR',arg_dump(arguments));
7 patron_bills_list_box_init( p );
9 patron_bills_control_box_init( p );
11 p.current_payments = [];
13 p.update_payment_applied = function () {
14 sdump('D_PATRON_BILLS','p.update_payment_applied()\n');
15 var total_applied = 0;
16 for (var i = 0; i < p.current_payments.length; i++) {
17 total_applied += dollars_float_to_cents_integer( p.current_payments[ i ].textbox.value );
19 var total_payment = 0;
20 if (p.control_box.bill_payment_amount.value) {
22 total_payment = dollars_float_to_cents_integer( p.control_box.bill_payment_amount.value );
24 sdump('D_ERROR',E + '\n');
27 if ( total_applied > total_payment ) {
28 total_payment = total_applied;
29 p.control_box.bill_payment_amount.value = cents_as_dollars( total_applied );
31 p.control_box.bill_payment_applied.value = cents_as_dollars( total_applied );
32 p.control_box.bill_credit_amount.value = '';
33 if (total_payment > total_applied ) {
34 p.control_box.bill_change_amount.value = cents_as_dollars( total_payment - total_applied);
35 p.control_box.bill_credit_amount.value = '0.00';
37 p.control_box.bill_change_amount.value = '0.00';
38 p.control_box.bill_credit_amount.value = '0.00';
40 var total_owed = dollars_float_to_cents_integer( p.control_box.bill_total_owed.value );
41 p.control_box.bill_new_balance.value = cents_as_dollars( total_owed - total_applied );
44 p.list_box.apply_to_each_listitem = function (idx, listitem) {
45 sdump('D_PATRON_BILLS','p.list_box.apply_to_each_listitem()\n');
46 p.current_payments[ idx ] = {};
47 p.current_payments[ idx ].listitem = listitem;
48 p.current_payments[ idx ].checkbox = listitem.getElementsByTagName('checkbox')[0];
49 p.current_payments[ idx ].textbox = listitem.getElementsByTagName('textbox')[0];
50 p.current_payments[ idx ].mbts_id = listitem.getAttribute('record_id');
51 p.current_payments[ idx ].balance_owed = listitem.getAttribute('balance_owed');
53 p.current_payments[ idx ].textbox.addEventListener(
56 sdump('D_PATRON_BILLS','listitem textbox onchange handler()\n');
57 var tb = p.current_payments[ idx ].textbox;
58 var bo = p.current_payments[ idx ].balance_owed;
59 tb.value = cents_as_dollars( dollars_float_to_cents_integer( tb.value ) ); // show user what we think the number is
60 sdump('D_PATRON_BILLS','bo = ' + bo + '\ntb.value = ' + tb.value + '\n');
61 if ( dollars_float_to_cents_integer( tb.value ) > dollars_float_to_cents_integer( bo ) ) {
62 sdump('D_PATRON_BILLS','Tried to overpay bill\n');
65 p.update_payment_applied();
71 p.control_box.bill_payment_amount.addEventListener(
74 var tb = p.control_box.bill_payment_amount;
75 tb.value = cents_as_dollars( dollars_float_to_cents_integer( tb.value ) );
76 var total = dollars_float_to_cents_integer( tb.value );
77 for (var i = 0; i < p.current_payments.length; i++) {
78 var bill = p.current_payments[i];
79 if (bill.checkbox.checked) {
80 var bo = dollars_float_to_cents_integer( bill.balance_owed );
82 bill.textbox.value = cents_as_dollars( total );
85 bill.textbox.value = cents_as_dollars( bo );
89 bill.textbox.value = '0.00';
92 p.update_payment_applied();
97 p.control_box.bill_change_amount.addEventListener(
100 var tb = p.control_box.bill_change_amount;
101 var proposed_change = dollars_float_to_cents_integer( tb.value );
102 var proposed_credit = 0;
103 p.update_payment_applied();
104 var real_change = dollars_float_to_cents_integer( tb.value );
105 if ( proposed_change > real_change ) {
106 sdump('D_ERROR','Someone wanted more money than they deserved\n');
107 proposed_change = real_change;
108 } else if ( real_change > proposed_change ) {
109 proposed_credit = real_change - proposed_change;
111 tb.value = cents_as_dollars( proposed_change );
112 p.control_box.bill_credit_amount.value = cents_as_dollars( proposed_credit );
117 p.control_box.bill_apply_payment.addEventListener(
119 function() { alert('Fatal error.. gasp.. arggg.. choke... cough.. sputter'); },
123 sdump('D_TRACE_EXIT',arg_dump(arguments));
127 function patron_bills_control_box_init( p ) {
129 p.control_box.node = p.node.nextSibling;
130 p.control_box.bill_total_owed = p.control_box.node.getElementsByAttribute('id','bill_total_owed')[0];
131 p.control_box.payment_type = p.control_box.node.getElementsByAttribute('id','payment_type_menulist')[0];
132 p.control_box.bill_payment_amount = p.control_box.node.getElementsByAttribute('id','bill_payment_amount_textbox')[0];
133 p.control_box.bill_payment_applied = p.control_box.node.getElementsByAttribute('id','bill_payment_applied_textbox')[0];
134 p.control_box.bill_change_amount = p.control_box.node.getElementsByAttribute('id','bill_change_amount_textbox')[0];
135 p.control_box.bill_credit_amount = p.control_box.node.getElementsByAttribute('id','bill_credit_amount_textbox')[0];
136 p.control_box.bill_apply_payment = p.control_box.node.getElementsByAttribute('id','bill_apply_payment')[0];
137 p.control_box.bill_new_balance = p.control_box.node.getElementsByAttribute('id','bill_new_balance_textbox')[0];
140 function patron_bills_list_box_init( p ) {
141 p.patron_bills_cols = [
143 'id' : 'checkbox', 'label' : '', 'flex' : 0, 'primary' : false, 'hidden' : false,
144 'render_xul' : 'checkbox'
147 'id' : 'xact_dates', 'label' : getString('bills_xact_dates_label'), 'flex' : 0,
148 'primary' : false, 'hidden' : false, 'fm_class' : 'mbts',
149 'fm_field_render' : 'xact_dates_box($$)'
152 'id' : 'notes', 'label' : getString('mbts_xact_type_label'), 'flex' : 1,
153 'primary' : false, 'hidden' : false, 'fm_class' : 'mbts',
154 'fm_field_render' : '.xact_type()'
157 'id' : 'money', 'label' : getString('bills_money_label'), 'flex' : 0,
158 'primary' : false, 'hidden' : false, 'fm_class' : 'mbts',
159 'fm_field_render' : 'money_box($$)'
162 'id' : 'current_pay', 'label' : getString('bills_current_payment_label'), 'flex' : 0,
163 'render_xul' : 'textbox'
167 p.list_box = list_box_init( { 'w' : p.w, 'node' : p.node, 'cols' : p.patron_bills_cols, 'debug' : p.app } );
168 p.clear_patron_bills = function () {
169 p.current_payments = [];
170 p.control_box.bill_total_owed.value = 'Calculating...';
171 p.control_box.bill_payment_amount.value = '';
172 p.control_box.bill_payment_applied.value = '0.00';
173 p.control_box.bill_change_amount.value = '0.00';
174 p.control_box.bill_credit_amount.value = '0.00';
175 p.control_box.bill_new_balance.value = 'Calculating...';
176 p.list_box.clear_rows();
178 p.add_patron_bills = function (bills) {
179 sdump('D_PATRON_BILLS','p.add_patron_bills(' + bills + ')\n');
180 return patron_bills_add_patron_bills(p,bills);
184 function patron_bills_add_patron_bills(p, bills) {
185 sdump('D_PATRON_BILLS',arg_dump(arguments,{1:true}));
187 p.control_box.bill_total_owed.setAttribute('value',get_bills_total( bills ));
188 p.control_box.bill_total_owed.value = get_bills_total( bills );
189 p.control_box.bill_new_balance.setAttribute('value',get_bills_total( bills ));
190 p.control_box.bill_new_balance.value = get_bills_total( bills );
192 function xact_dates_box( mbts ) {
193 var grid = p.w.document.createElement('grid');
194 var cols = p.w.document.createElement('columns');
195 grid.appendChild( cols );
196 cols.appendChild( p.w.document.createElement('column') );
197 cols.appendChild( p.w.document.createElement('column') );
198 var rows = p.w.document.createElement('rows');
199 grid.appendChild( rows );
200 var row0 = p.w.document.createElement('row');
201 rows.appendChild( row0 );
202 var label_r0_1 = p.w.document.createElement('label');
203 row0.appendChild( label_r0_1 );
204 label_r0_1.setAttribute('value',getString('mbts_id_label'));
205 var label_r0_2 = p.w.document.createElement('label');
206 row0.appendChild( label_r0_2 );
207 label_r0_2.setAttribute('value',mbts.id());
208 var row1 = p.w.document.createElement('row');
209 rows.appendChild( row1 );
210 var label_r1_1 = p.w.document.createElement('label');
211 row1.appendChild( label_r1_1 );
212 label_r1_1.setAttribute('value',getString('mbts_xact_start_label'));
213 var label_r1_2 = p.w.document.createElement('label');
214 row1.appendChild( label_r1_2 );
215 label_r1_2.setAttribute('value',mbts.xact_start().toString().substr(0,10));
216 var row2 = p.w.document.createElement('row');
217 rows.appendChild( row2 );
218 var label_r2_1 = p.w.document.createElement('label');
219 row2.appendChild( label_r2_1 );
220 label_r2_1.setAttribute('value',getString('mbts_xact_finish_label'));
221 var label_r2_2 = p.w.document.createElement('label');
222 row2.appendChild( label_r2_2 );
223 try { label_r2_2.setAttribute('value',mbts.xact_finish().toString().substr(0,10));
229 function money_box( mbts ) {
230 var grid = p.w.document.createElement('grid');
231 var cols = p.w.document.createElement('columns');
232 grid.appendChild( cols );
233 cols.appendChild( p.w.document.createElement('column') );
234 cols.appendChild( p.w.document.createElement('column') );
235 var rows = p.w.document.createElement('rows');
236 grid.appendChild( rows );
237 var row1 = p.w.document.createElement('row');
238 rows.appendChild( row1 );
239 var label_r1_1 = p.w.document.createElement('label');
240 row1.appendChild( label_r1_1 );
241 label_r1_1.setAttribute('value',getString('mbts_total_owed_label'));
242 var label_r1_2 = p.w.document.createElement('label');
243 row1.appendChild( label_r1_2 );
244 label_r1_2.setAttribute('value',mbts.total_owed());
245 var row2 = p.w.document.createElement('row');
246 rows.appendChild( row2 );
247 var label_r2_1 = p.w.document.createElement('label');
248 row2.appendChild( label_r2_1 );
249 label_r2_1.setAttribute('value',getString('mbts_total_paid_label'));
250 var label_r2_2 = p.w.document.createElement('label');
251 row2.appendChild( label_r2_2 );
252 label_r2_2.setAttribute('value',mbts.total_paid());
253 var row3 = p.w.document.createElement('row');
254 rows.appendChild( row3 );
255 var label_r3_1 = p.w.document.createElement('label');
256 row3.appendChild( label_r3_1 );
257 label_r3_1.setAttribute('value',getString('mbts_balance_owed_label'));
258 label_r3_1.setAttribute('style','font-weight: bold');
259 var label_r3_2 = p.w.document.createElement('label');
260 row3.appendChild( label_r3_2 );
261 label_r3_2.setAttribute('value',mbts.balance_owed());
262 label_r3_2.setAttribute('style','font-weight: bold');
267 var obj_string ='mbts';
271 //p.list_box.clear_rows();
273 for (var i = 0; i < bills.length; i++) {
279 for (var j = 0; j < p.patron_bills_cols.length; j++) {
280 var hash = p.patron_bills_cols[j];
281 sdump('D_PATRON_BILLS','Considering ' + js2JSON(hash) + '\n');
282 var listcell = p.w.document.createElement('listcell');
283 listcell.setAttribute('pack','start');
284 listcell.setAttribute('align','start');
285 listcell.setAttribute('style','border-left: black solid thin');
287 if (hash.fm_field_render) {
290 switch( hash.fm_class ) {
291 case 'mvr' : obj_string = 'mvr'; break;
293 var cmd = parse_render_string( obj_string, hash.fm_field_render );
294 sdump('D_PATRON_BILLS','cmd = ' + cmd + '\n');
297 sdump('D_PATRON_BILLS','eval = ' + col + '\n');
299 sdump('D_ERROR',E + '\n');
301 if (typeof(col) == 'string') {
302 listcell.setAttribute('label',col);
304 listcell.appendChild( col );
307 if (hash.render_xul) {
308 var xul = p.w.document.createElement( hash.render_xul );
309 listcell.appendChild( xul );
310 if (hash.render_xul == 'checkbox') xul.setAttribute('checked', 'true');
312 cols.push( listcell );
315 var listitem = p.list_box.add_row(
317 'record_id' : mbts.id(),
318 'balance_owed' : mbts.balance_owed()
321 if (p.list_box.apply_to_each_listitem) {
322 p.list_box.apply_to_each_listitem( i, listitem );