From 8a19f02d60f4a49f53f70a9717ae4528fd42b19e Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 8 Nov 2016 15:01:55 +0000 Subject: [PATCH] Bug 17583: Add the Koha::Patron->is_going_to_expired method In order to be consistent, we need to create this method as well. Test plan: Make sure the pref NotifyBorrowerDeparture works as expected --- Koha/Patron.pm | 19 +++++++++++++++++++ circ/circulation.pl | 5 +---- t/db_dependent/Koha/Patrons.t | 39 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 58 insertions(+), 5 deletions(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index 04a472e..e697cf2 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -282,6 +282,25 @@ sub is_expired { return 0; } +=head2 is_going_to_expired + +my $is_going_to_expired = $patron->is_going_to_expired; + +Returns 1 if the patron is going to expired, depending on the NotifyBorrowerDeparture pref or 0 + +=cut + +sub is_going_to_expired { + my ($self) = @_; + + my $delay = C4::Context->preference('NotifyBorrowerDeparture') || 0; + + return 0 unless $self->dateexpiry; + return 0 if $self->dateexpiry eq '0000-00-00'; + return 1 if dt_from_string( $self->dateexpiry )->add( days => $delay ) < dt_from_string; + return 0; +} + =head2 update_password my $updated = $patron->update_password( $userid, $password ); diff --git a/circ/circulation.pl b/circ/circulation.pl index 5dc0f6a..e2f7097 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -278,10 +278,7 @@ if ($borrowernumber) { ); } # check for NotifyBorrowerDeparture - elsif ( C4::Context->preference('NotifyBorrowerDeparture') && - Date_to_Days(Add_Delta_Days($warning_year,$warning_month,$warning_day,- C4::Context->preference('NotifyBorrowerDeparture'))) < - Date_to_Days( $today_year, $today_month, $today_day ) ) - { + elsif ( $patron->is_going_to_expired ) { # borrower card soon to expire warn librarian $template->param( "warndeparture" => $borrower->{dateexpiry} , ); diff --git a/t/db_dependent/Koha/Patrons.t b/t/db_dependent/Koha/Patrons.t index 60b113a..5dc66a9 100644 --- a/t/db_dependent/Koha/Patrons.t +++ b/t/db_dependent/Koha/Patrons.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 12; +use Test::More tests => 13; use Test::Warn; use C4::Members; @@ -183,6 +183,43 @@ subtest 'is_expired' => sub { $patron->delete; }; +subtest 'is_going_to_expired' => sub { + plan tests => 8; + my $patron = $builder->build({ source => 'Borrower' }); + $patron = Koha::Patrons->find( $patron->{borrowernumber} ); + $patron->dateexpiry( undef )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is not set'); + $patron->dateexpiry( '0000-00-00' )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is not 0000-00-00'); + $patron->dateexpiry( dt_from_string )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is today'); + + t::lib::Mocks::mock_preference('NotifyBorrowerDeparture', 0); + my $dt_from_string = dt_from_string; + $patron->dateexpiry( $dt_from_string )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is today and pref is 0'); + + t::lib::Mocks::mock_preference('NotifyBorrowerDeparture', 10); + $patron->dateexpiry( dt_from_string->add( days => 11 ) )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is 11 days before and pref is 10'); + + t::lib::Mocks::mock_preference('NotifyBorrowerDeparture', 0); + $patron->dateexpiry( dt_from_string->add( days => 10 ) )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is 10 days before and pref is 0'); + + t::lib::Mocks::mock_preference('NotifyBorrowerDeparture', 10); + $patron->dateexpiry( dt_from_string->add( days => 10 ) )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is 10 days before and pref is 10'); + $patron->delete; + + t::lib::Mocks::mock_preference('NotifyBorrowerDeparture', 10); + $patron->dateexpiry( dt_from_string->add( days => 20 ) )->store; + is( $patron->is_going_to_expired, 0, 'Patron should not be considered going to expire if dateexpiry is 20 days before and pref is 10'); + + $patron->delete; +}; + + subtest 'renew_account' => sub { plan tests => 10; my $a_month_ago = dt_from_string->add( months => -1 )->truncate( to => 'day' ); -- 2.1.4