Bug 17001: fix due date filter on the overdue report
authorGalen Charlton <gmcharlt@gmail.com>
Fri, 29 Jul 2016 20:41:19 +0000 (20:41 +0000)
committerKyle M Hall <kyle@bywatersolutions.com>
Thu, 18 Aug 2016 16:10:48 +0000 (16:10 +0000)
When the TimeFormat system preference is set to "12 hour",
setting a filter on the due date can result in:

- no overdue loans being reported, even if there are some
  that meet the criteria

OR

- overdue loans being omitted from the report if they
  are due on the "until" date in the filter

This patch fixes this by replacing output_pref() with
DateTime::Format::MySQL to format the date filter values
to pass to the SQL query.

To test
-------
[1] Run the overdue report (circ/overdue.pl) and set a filter
    on due date, using values that should bring up one or
    more overdue loans.
[2] Note that zero overdue loans are returned (if using MySQL
    5.5, 5.6, or 5.7 or MariaDB 5) or that loans due on the
    "until" date are omitted (if using MarioDB 10).
[3] Apply the patch and repeat step 1. This time, the correct
    set of overdue loans should be reported.

Signed-off-by: Galen Charlton <gmcharlt@gmail.com>
Signed-off-by: Jason Robb <jrobb@sekls.org>
Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
circ/overdue.pl

index 8e06013..047e073 100755 (executable)
@@ -29,6 +29,7 @@ use C4::Debug;
 use Text::CSV_XS;
 use Koha::DateUtils;
 use DateTime;
+use DateTime::Format::MySQL;
 
 my $input = new CGI;
 my $order           = $input->param('order') || '';
@@ -321,8 +322,8 @@ if ($noreport) {
     $template->param(sql=>$strsth);
     my $sth=$dbh->prepare($strsth);
     $sth->execute(
-        ($dateduefrom ? output_pref({ dt => $dateduefrom, dateformat => 'iso' }) : ()),
-        ($datedueto ? output_pref({ dt => $datedueto, dateformat => 'iso' }) : ()),
+        ($dateduefrom ? DateTime::Format::MySQL->format_datetime($dateduefrom) : ()),
+        ($datedueto ? DateTime::Format::MySQL->format_datetime($datedueto) : ()),
     );
 
     my @overduedata;