Bug 25683: Fix grouping of results
authorNick Clemens <nick@bywatersolutions.com>
Wed, 10 Jun 2020 12:26:06 +0000 (12:26 +0000)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 6 Aug 2020 09:37:07 +0000 (11:37 +0200)
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 <david@davidnind.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Koha/Patrons.pm
misc/cronjobs/update_patrons_category.pl

index 6d45751..c20a659 100644 (file)
@@ -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};
index 3de4822..207f9b6 100644 (file)
@@ -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;