LP1781274 Fix floating point issue preventing transactions from closing
authorMichele Morgan <mmorgan@noblenet.org>
Fri, 20 Dec 2019 21:00:08 +0000 (16:00 -0500)
committerJason Stephenson <jason@sigio.com>
Tue, 21 Apr 2020 16:50:03 +0000 (12:50 -0400)
Paying multiple bills with a single payment can lead to some
transactions not closing because of floating point math inaccuracies.
This branch resolves the issue by limiting pending payment amounts to
2 decimal places.

The bug can be reproduced using grocery bills as follows.

Retrieve a patron that owes no money.

Add a billing of $.90
Add a billing of $.10
Select both billings
Enter $1 in payment received and Apply the payment

Click on History in the billings screen. Turn on the Total Billed and
Transaction Finish Time column and note that the $.10 bill has zero
balance owed, but does not have a transaction finish time.

To test:

Use the steps above to reproduce, noting the lack of Transaction
Finish Time.  Apply the patch.

Use the same steps above and note that the post patch payments
resulted in both transactions getting a Transaction Finish Time.

Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Jason Stephenson <jason@sigio.com>

Open-ILS/web/js/ui/default/staff/circ/patron/bills.js

index a0dd979..b741359 100644 (file)
@@ -358,7 +358,8 @@ function($scope , $q , $routeParams , egCore , egConfirmDialog , $location,
                 // balance owed on the current item matches or exceeds
                 // the pending payment.  Apply the full remainder of
                 // the payment to this item.. and we're done.
-                item.payment_pending = payment_amount;
+                // Limit to two decimal places to avoid floating point issues
+                item.payment_pending = payment_amount.toFixed(2);
                 break;
             }
         }