From 271a2be5d056863dc62d1d34541b1fb3a9f682ee Mon Sep 17 00:00:00 2001 From: Blou Date: Fri, 21 Dec 2018 10:33:29 -0500 Subject: [PATCH] Bug 17140: fix rounding errors when paying fines Whenever a fine (accountlines in DB) has a precision longer than two floating points, it becomes very hard for a user to clear it. Ex: 1.035 will be displayed as 1.04 or 1.03 depending on the screen. But entering any of those value in Pay Fine will not clear it. The user has no way to know the exact value to enter. This fix makes sure that the intent of the user is met, by matching the EXACT needed sum when the difference is less than 0.01. TEST 1) Create a 1.035 fine - Go to a Patron screen - Fines tab on the left - Create manual invoice 2) go to Pay fines, click Pay amount on bottom left. 3) It will show 1.03 as Total, and as Collect from patron. Click confirm. 4) An error message will appear. 5) Apply patch, do again. Signed-off-by: Hayley Mapley Signed-off-by: Josef Moravec Signed-off-by: Nick Clemens --- members/pay.pl | 1 + members/paycollect.pl | 1 + 2 files changed, 2 insertions(+) diff --git a/members/pay.pl b/members/pay.pl index 00e6f7b386..e17f43f322 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -98,6 +98,7 @@ elsif ( $input->param('confirm_writeoff') ) { my $accountline = Koha::Account::Lines->find( $accountlines_id ); + $amount = $accountline->amountoutstanding if (abs($amount - $accountline->amountoutstanding) < 0.01); if ( $amount > $accountline->amountoutstanding ) { print $input->redirect( "/cgi-bin/koha/members/paycollect.pl?" . "borrowernumber=$borrowernumber" diff --git a/members/paycollect.pl b/members/paycollect.pl index 0974997885..64f29ae03f 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -136,6 +136,7 @@ if ( $pay_individual || $writeoff_individual ) { } if ( $total_paid and $total_paid ne '0.00' ) { + $total_paid = $total_due if (abs($total_paid - $total_due) < 0.01); if ( $total_paid < 0 or $total_paid > $total_due ) { $template->param( error_over => 1, -- 2.11.0