From 4ff6bf0c850acda4729fd46532ba28851927d0a8 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Wed, 10 Jun 2020 12:26:06 +0000 Subject: [PATCH] Bug 25683: Fix grouping of results DBIX doesn't seem to work as I expected - if trying to group by we can only get the columns we grouped by, otherwise the queries are much more complicated and come out wrong This patch removes the 'amountoutstanding' from the query. Note that we do return patron object, however, to access all the columns we must discard_changes (or refetch) Also fixes a typo 'verbosse' To test: 1 - charge a $1 fine to a patron 2 - pay off the fine 3 - perl misc/cronjobs/update_patrons_category.pl -f J -t J -fu=5 -v 4 - Note the patron is returned twice 5 - export DBIC_TRACE=1 6 - repeat 3 - view the SQL query and see how odd it is 7 - Apply this patch 8 - repeat 3 - simpler query 9 - patron returned only once Signed-off-by: David Nind Signed-off-by: Martin Renvoize --- Koha/Patrons.pm | 2 +- misc/cronjobs/update_patrons_category.pl | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/Koha/Patrons.pm b/Koha/Patrons.pm index 6d45751a41..c20a6599bf 100644 --- a/Koha/Patrons.pm +++ b/Koha/Patrons.pm @@ -397,7 +397,7 @@ sub search_patrons_to_update_category { } if ($params->{fine_min} || $params->{fine_max}) { $query{join} = ["accountlines"]; - $query{select} = ["borrowernumber", "accountlines.amountoutstanding" ]; + $query{columns} = ["borrowernumber"]; $query{group_by} = ["borrowernumber"]; $query{having} = \['IFNULL(sum(accountlines.amountoutstanding),0) <= ?',$params->{fine_max}] if defined $params->{fine_max}; $query{having} = \['IFNULL(sum(accountlines.amountoutstanding),0) >= ?',$params->{fine_min}] if defined $params->{fine_min}; diff --git a/misc/cronjobs/update_patrons_category.pl b/misc/cronjobs/update_patrons_category.pl index 3de4822b3d..207f9b6cd9 100644 --- a/misc/cronjobs/update_patrons_category.pl +++ b/misc/cronjobs/update_patrons_category.pl @@ -74,7 +74,7 @@ Print a brief help message and exits. Prints the manual page and exits. -=item B<--verbosse | -v> +=item B<--verbose | -v> Verbose. Without this flag set, only fatal errors are reported. @@ -248,17 +248,18 @@ my $target_patrons = Koha::Patrons->search(\%params)->search_patrons_to_update_c fine_max => $fine_max, } ); + my $patrons_found = $target_patrons->count; my $actually_updated = 0; my $testdisplay = $doit ? "" : "WOULD HAVE "; if ($verbose) { while ( my $target_patron = $target_patrons->next() ) { - my $target = Koha::Patrons->find( $target_patron->borrowernumber ); + $target_patron->discard_changes(); $verbose and print $testdisplay . "Updated " - . $target->firstname . " " - . $target->surname + . $target_patron->firstname() . " " + . $target_patron->surname() . " from $fromcat to $tocat\n"; } $target_patrons->reset; -- 2.20.1