From c7ae33f60c18d2874370e7c2d2f3042fe1331e0e 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 Signed-off-by: Jonathan Druart --- 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 6d45751..c20a659 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 3de4822..207f9b6 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; -- 1.7.2.5