From 64412969037ac9a9f81f05c69c3dd43bd3cab90b Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 28 Jul 2020 12:49:35 -0400 Subject: [PATCH] Bug 26076: Sum the amount due in the database query instead of a loop in Perl This appears to be a bug due to inaccuracies in floating point math. I've been unable to reproduce it on demand. Sometimes when using the "Write off selected" button, Koha will give the error that the payment is more than the amount owed, even though they are the same. The solution I've implemented is to move the summation from Perl code to the database query. This video demonstrates the issue and afterward, shows the error goes away after the patch is applied: https://monosnap.com/file/pG69HC7iI9mU9kkuoCtbkVzVTffKlE Test Plan: 1) Apply this patch 2) Restart all the things! 3) Verify that "Write off selected" functions as usual Signed-off-by: Amit Gupta Signed-off-by: Katrin Fischer Signed-off-by: Jonathan Druart --- members/paycollect.pl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/members/paycollect.pl b/members/paycollect.pl index c258560bc9..a8f449e8ab 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -145,7 +145,7 @@ if ( $selected_accts ) { } my @acc = split /,/, $selected_accts; - @selected_accountlines = Koha::Account::Lines->search( + my $selected_accountlines = Koha::Account::Lines->search( { borrowernumber => $borrowernumber, amountoutstanding => { '<>' => 0 }, @@ -154,8 +154,9 @@ if ( $selected_accts ) { { order_by => 'date' } ); - $total_due = 0; # Reset and recalculate total due - map { $total_due += $_->amountoutstanding } @selected_accountlines; + $total_due = $selected_accountlines->_resultset->get_column('amountoutstanding')->sum(); + + @selected_accountlines = $selected_accountlines->as_list; } -- 2.39.5