Bug 21549: Use filter_by_last_update from filter_by_dateexpiry
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 12 Apr 2021 14:12:03 +0000 (16:12 +0200)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Wed, 14 Apr 2021 13:34:27 +0000 (15:34 +0200)
To not reengineer the patch this patch does not remove the new
subroutine but make it use the logic from
Koha::Objects->filter_by_last_update

It also adds a new parameter "days_inclusive"

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Koha/Objects.pm
Koha/Patrons.pm
t/db_dependent/Koha/Objects.t

index 2f16b35..ed9366c 100644 (file)
@@ -257,7 +257,7 @@ sub update {
 
 my $filtered_objects = $objects->filter_by_last_update
 
-days exclusive
+days exclusive by default (will be inclusive if days_inclusive is passed and set)
 from inclusive
 to   inclusive
 
@@ -266,6 +266,7 @@ to   inclusive
 sub filter_by_last_update {
     my ( $self, $params ) = @_;
     my $timestamp_column_name = $params->{timestamp_column_name} || 'timestamp';
+    my $days_inclusive = $params->{days_inclusive} || 0;
     my $conditions;
     Koha::Exceptions::MissingParameter->throw(
         "Missing mandatory parameter: days or from or to")
@@ -275,7 +276,9 @@ sub filter_by_last_update {
 
     my $dtf = Koha::Database->new->schema->storage->datetime_parser;
     if ( exists $params->{days} ) {
-        $conditions->{'<'} = $dtf->format_date( dt_from_string->subtract( days => $params->{days} ) );
+        my $dt = Koha::DateUtils::dt_from_string();
+        my $operator = $days_inclusive ? '<=' : '<';
+        $conditions->{$operator} = $dtf->format_date( $dt->subtract( days => $params->{days} ) );
     }
     if ( exists $params->{from} ) {
         my $from = ref($params->{from}) ? $params->{from} : dt_from_string($params->{from});
index 97fac5e..d42f035 100644 (file)
@@ -243,12 +243,14 @@ sub delete {
 
 sub filter_by_dateexpiry {
     my ( $class, $params ) = @_;
-    my $days = $params->{days} || 0;
-    my $parser = Koha::Database->new->schema->storage->datetime_parser;
-    my $dt = dt_from_string()->subtract( days => $days );
-    return $class->search({
-        dateexpiry => { '<=' => $parser->format_datetime($dt) },
-    });
+
+    return $class->filter_by_last_update(
+        {
+            timestamp_column_name => 'dateexpiry',
+            days                  => $params->{days} || 0,
+            days_inclusive        => 1,
+        }
+    );
 }
 
 =head3 search_unsubscribed
index afb00ee..8e046e9 100755 (executable)
@@ -1102,14 +1102,26 @@ subtest "filter_by_last_update" => sub {
     is( $count, 3, '3 patrons have been updated before the last 2 days (exclusive)' );
 
     $count = $patrons->filter_by_last_update(
+        { timestamp_column_name => 'updated_on', days => 2, days_inclusive => 1 } )->count;
+    is( $count, 4, '4 patrons have been updated before the last 2 days (inclusive)' );
+
+    $count = $patrons->filter_by_last_update(
         { timestamp_column_name => 'updated_on', days => 1 } )->count;
     is( $count, 4, '4 patrons have been updated before yesterday (exclusive)' );
 
     $count = $patrons->filter_by_last_update(
+        { timestamp_column_name => 'updated_on', days => 1, days_inclusive => 1 } )->count;
+    is( $count, 5, '5 patrons have been updated before yesterday (inclusive)' );
+
+    $count = $patrons->filter_by_last_update(
         { timestamp_column_name => 'updated_on', days => 0 } )->count;
     is( $count, 5, '5 patrons have been updated before today (exclusive)' );
 
     $count = $patrons->filter_by_last_update(
+        { timestamp_column_name => 'updated_on', days => 0, days_inclusive => 1 } )->count;
+    is( $count, 6, '6 patrons have been updated before today (inclusive)' );
+
+    $count = $patrons->filter_by_last_update(
         { timestamp_column_name => 'updated_on', from => $now } )->count;
     is( $count, 1, '1 patron has been updated "from today" (inclusive)' );