From 57fd09f45c4372438b10cf6779a42def51c77960 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 Signed-off-by: Josef Moravec Signed-off-by: Marcel de Rooy Signed-off-by: Kyle M Hall --- Koha/Patron.pm | 19 ++++++++++++++++++ circ/circulation.pl | 5 +---- t/db_dependent/Koha/Patrons.t | 37 +++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/Koha/Patron.pm b/Koha/Patron.pm index c05dbd287c..5c0c3f2bb5 100644 --- a/Koha/Patron.pm +++ b/Koha/Patron.pm @@ -295,6 +295,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 6efcbe6556..c4dde26a08 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 7be731c745..79b083579f 100644 --- a/t/db_dependent/Koha/Patrons.t +++ b/t/db_dependent/Koha/Patrons.t @@ -190,6 +190,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.39.5