From 6ccd2a55e138fe07aa74742c0df8b44cd7e26619 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 (cherry picked from commit 64412969037ac9a9f81f05c69c3dd43bd3cab90b) Signed-off-by: Lucas Gass (cherry picked from commit 2e3b3a23fc6c3c1183853a6b5022598930b55b0d) Signed-off-by: Aleisha Amohia --- members/paycollect.pl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/members/paycollect.pl b/members/paycollect.pl index da87507aad..d8139bd1e7 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -143,7 +143,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 }, @@ -152,8 +152,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