@@ -, +, @@ --- C4/Circulation.pm | 9 +++++---- C4/Members.pm | 16 ---------------- Koha/Patron.pm | 14 ++++++++++++++ Koha/Template/Plugin/Borrowers.pm | 2 +- t/db_dependent/Koha/Patrons.t | 36 +++++++++++++++++++++++++++++++++++- 5 files changed, 55 insertions(+), 22 deletions(-) --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -2243,7 +2243,7 @@ sub AddReturn { if ( $borrowernumber && $borrower->{'debarred'} && C4::Context->preference('AutoRemoveOverduesRestrictions') - && !C4::Members::HasOverdues( $borrowernumber ) + && !Koha::Patrons->find( $borrowernumber )->has_overdues && @{ GetDebarments({ borrowernumber => $borrowernumber, type => 'OVERDUES' }) } ) { DelUniqueDebarment({ borrowernumber => $borrowernumber, type => 'OVERDUES' }); @@ -2976,8 +2976,9 @@ sub CanBookBeRenewed { my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing'); - my $restricted = Koha::Patrons->find( $borrowernumber )->is_debarred; - my $hasoverdues = C4::Members::HasOverdues($borrowernumber); + my $patron = Koha::Patrons->find($borrowernumber); + my $restricted = $patron->is_debarred; + my $hasoverdues = $patron->has_overdues; if ( $restricted and $restrictionblockrenewing ) { return ( 0, 'restriction'); @@ -3145,7 +3146,7 @@ sub AddRenewal { my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); if ( $borrowernumber && $borrower->{'debarred'} - && !C4::Members::HasOverdues( $borrowernumber ) + && !Koha::Patrons->find( $borrowernumber )->has_overdues && @{ GetDebarments({ borrowernumber => $borrowernumber, type => 'OVERDUES' }) } ) { DelUniqueDebarment({ borrowernumber => $borrowernumber, type => 'OVERDUES' }); --- a/C4/Members.pm +++ a/C4/Members.pm @@ -94,7 +94,6 @@ BEGIN { &IssueSlip GetBorrowersWithEmail - HasOverdues GetOverduesForPatron ); @@ -2060,21 +2059,6 @@ sub AddEnrolmentFeeIfNeeded { } } -=head2 HasOverdues - -=cut - -sub HasOverdues { - my ( $borrowernumber ) = @_; - - my $sql = "SELECT COUNT(*) FROM issues WHERE date_due < NOW() AND borrowernumber = ?"; - my $sth = C4::Context->dbh->prepare( $sql ); - $sth->execute( $borrowernumber ); - my ( $count ) = $sth->fetchrow_array(); - - return $count; -} - =head2 DeleteExpiredOpacRegistrations Delete accounts that haven't been upgraded from the 'temporary' category --- a/Koha/Patron.pm +++ a/Koha/Patron.pm @@ -208,6 +208,20 @@ sub update_password { return 1; } +=head2 has_overdues + +my $has_overdues = $patron->has_overdues; + +Returns the number of patron's overdues + +=cut + +sub has_overdues { + my ($self) = @_; + my $dtf = Koha::Database->new->schema->storage->datetime_parser; + return $self->_result->issues->search({ date_due => { '<' => $dtf->format_datetime( dt_from_string() ) } })->count; +} + =head3 type =cut --- a/Koha/Template/Plugin/Borrowers.pm +++ a/Koha/Template/Plugin/Borrowers.pm @@ -54,7 +54,7 @@ sub HasOverdues { return unless $borrowernumber; - return C4::Members::HasOverdues($borrowernumber); + return Koha::Patrons->find( $borrowernumber )->has_overdues; } --- a/t/db_dependent/Koha/Patrons.t +++ a/t/db_dependent/Koha/Patrons.t @@ -19,9 +19,10 @@ use Modern::Perl; -use Test::More tests => 6; +use Test::More tests => 7; use Test::Warn; +use C4::Circulation; use Koha::Patron; use Koha::Patrons; use Koha::Database; @@ -55,6 +56,9 @@ my $new_patron_2 = Koha::Patron->new( } )->store; +C4::Context->_new_userenv('xxx'); +C4::Context->set_userenv(0,0,0,'firstname','surname', $library->{branchcode}, 'Midway Public Library', '', '', ''); + is( Koha::Patrons->search->count, $nb_of_patrons + 2, 'The 2 patrons should have been added' ); my $retrieved_patron_1 = Koha::Patrons->find( $new_patron_1->borrowernumber ); @@ -102,6 +106,36 @@ subtest 'siblings' => sub { $retrieved_guarantee_1->delete; }; +subtest 'has_overdues' => sub { + plan tests => 3; + + my $biblioitem_1 = $builder->build( { source => 'Biblioitem' } ); + my $item_1 = $builder->build( + { source => 'Item', + value => { + homebranch => $library->{branchcode}, + holdingbranch => $library->{branchcode}, + notforloan => 0, + itemlost => 0, + withdrawn => 0, + biblionumber => $biblioitem_1->{biblionumber} + } + } + ); + my $retrieved_patron = Koha::Patrons->find( $new_patron_1->borrowernumber ); + is( $retrieved_patron->has_overdues, 0, ); + + my $tomorrow = DateTime->today( time_zone => C4::Context->tz() )->add( days => 1 ); + my $issue = AddIssue( $new_patron_1->unblessed, $item_1->{barcode} ); + is( $retrieved_patron->has_overdues, 0, ); + AddReturn( $item_1->{barcode} ); + my $yesterday = DateTime->today(time_zone => C4::Context->tz())->add( days => -1 ); + $issue = AddIssue( $new_patron_1->unblessed, $item_1->{barcode}, $yesterday ); + $retrieved_patron = Koha::Patrons->find( $new_patron_1->borrowernumber ); + is( $retrieved_patron->has_overdues, 1, ); + AddReturn( $item_1->{barcode} ); +}; + subtest 'update_password' => sub { plan tests => 7; --