]> git.evergreen-ils.org Git - Evergreen.git/blob - Evergreen/staff_client/chrome/content/evergreen/patron/patron_bills.js
checkboxes and little tweaks
[Evergreen.git] / Evergreen / staff_client / chrome / content / evergreen / patron / patron_bills.js
1 sdump('D_TRACE','Loading patron_bills.js\n');
2
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));
6
7         patron_bills_list_box_init( p );
8
9         patron_bills_control_box_init( p );
10
11         p.current_payments = [];
12
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 );
18                 }
19                 var total_payment = 0;
20                 if (p.control_box.bill_payment_amount.value) {
21                         try {
22                                 total_payment = dollars_float_to_cents_integer( p.control_box.bill_payment_amount.value );
23                         } catch(E) {
24                                 sdump('D_ERROR',E + '\n');
25                         }
26                 }
27                 if ( total_applied > total_payment ) {
28                         total_payment = total_applied;
29                         p.control_box.bill_payment_amount.value = cents_as_dollars( total_applied );
30                 }
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';
36                 } else {
37                         p.control_box.bill_change_amount.value = '0.00';
38                         p.control_box.bill_credit_amount.value = '0.00';
39                 }
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 );
42         }
43
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');
52
53                 p.current_payments[ idx ].textbox.addEventListener(
54                         'change',
55                         function () {
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');
63                                         tb.value = bo;
64                                 }
65                                 p.update_payment_applied();
66                         },
67                         false
68                 );
69         }
70
71         p.control_box.bill_payment_amount.addEventListener(
72                 'change',
73                 function () {
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 );
81                                         if ( bo > total ) {
82                                                 bill.textbox.value = cents_as_dollars( total );
83                                                 total = 0;
84                                         } else {
85                                                 bill.textbox.value = cents_as_dollars( bo );
86                                                 total = total - bo;
87                                         }
88                                 } else {
89                                         bill.textbox.value = '0.00';
90                                 }
91                         }
92                         p.update_payment_applied();
93                 },
94                 false
95         );
96
97         p.control_box.bill_change_amount.addEventListener(
98                 'change',
99                 function() {
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;
110                         }
111                         tb.value = cents_as_dollars( proposed_change );
112                         p.control_box.bill_credit_amount.value = cents_as_dollars( proposed_credit );
113                 },
114                 false
115         );
116
117         p.control_box.bill_apply_payment.addEventListener(
118                 'command',
119                 function() { alert('Fatal error.. gasp.. arggg.. choke... cough.. sputter'); },
120                 false
121         );
122
123         sdump('D_TRACE_EXIT',arg_dump(arguments));
124         return p;
125 }
126
127 function patron_bills_control_box_init( p ) {
128         p.control_box = {};
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];
138 }
139
140 function patron_bills_list_box_init( p ) {
141         p.patron_bills_cols = [
142                 {
143                         'id' : 'checkbox', 'label' : '', 'flex' : 0, 'primary' : false, 'hidden' : false,
144                         'render_xul' : 'checkbox'
145                 },
146                 {
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($$)'
150                 },
151                 {
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()'
155                 },
156                 {
157                         'id' : 'money', 'label' : getString('bills_money_label'), 'flex' : 0,
158                         'primary' : false, 'hidden' : false, 'fm_class' : 'mbts', 
159                         'fm_field_render' : 'money_box($$)'
160                 },
161                 {
162                         'id' : 'current_pay', 'label' : getString('bills_current_payment_label'), 'flex' : 0, 
163                         'render_xul' : 'textbox'
164                 }
165         ];
166
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(); 
177         };
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);
181         }
182 }
183
184 function patron_bills_add_patron_bills(p, bills) {
185         sdump('D_PATRON_BILLS',arg_dump(arguments,{1:true}));
186
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 );
191
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));
224                                         } catch(E) {}
225
226                 return grid;
227         }
228
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');
263
264                 return grid;
265         }
266
267         var obj_string ='mbts';
268
269         setTimeout(
270                 function() {
271                         //p.list_box.clear_rows();
272
273                         for (var i = 0; i < bills.length; i++) {
274
275                                 var mbts = bills[i];
276
277                                 var cols = [];
278
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');
286                                         var col = '';
287                                         if (hash.fm_field_render) {
288
289                                                 var obj = 'mbts';
290                                                 switch( hash.fm_class ) {
291                                                         case 'mvr' : obj_string = 'mvr'; break;
292                                                 }
293                                                 var cmd = parse_render_string( obj_string, hash.fm_field_render );
294                                                 sdump('D_PATRON_BILLS','cmd = ' + cmd + '\n');
295                                                 try {
296                                                         col = eval( cmd );
297                                                         sdump('D_PATRON_BILLS','eval = ' + col + '\n');
298                                                 } catch(E) {
299                                                         sdump('D_ERROR',E + '\n');
300                                                 }
301                                                 if (typeof(col) == 'string') {
302                                                         listcell.setAttribute('label',col);
303                                                 } else {
304                                                         listcell.appendChild( col );
305                                                 }
306                                         }
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');
311                                         }
312                                         cols.push( listcell );
313                                 }
314
315                                 var listitem = p.list_box.add_row( 
316                                         cols, { 
317                                                 'record_id' : mbts.id(),
318                                                 'balance_owed' : mbts.balance_owed()
319                                         } 
320                                 ); 
321                                 if (p.list_box.apply_to_each_listitem) {
322                                         p.list_box.apply_to_each_listitem( i, listitem );
323                                 }
324                         }
325                 }, 0
326         );
327 }