diff --git a/Koha/Item.pm b/Koha/Item.pm index 68b590860a..06e4152949 100644 --- a/Koha/Item.pm +++ b/Koha/Item.pm @@ -44,6 +44,7 @@ use Koha::ItemTypes; use Koha::Libraries; use Koha::Patrons; use Koha::Plugins; +use Koha::Recalls; use Koha::Result::Boolean; use Koha::SearchEngine::Indexer; use Koha::StockRotationItem; @@ -910,6 +911,26 @@ sub has_pending_hold { return $pending_hold->count ? 1: 0; } +=head3 has_pending_recall { + + my $has_pending_recall + +Return if whether has pending recall of not. + +=cut + +sub has_pending_recall { + my ( $self ) = @_; + + # FIXME Must be moved to $self->recalls + return Koha::Recalls->search( + { + item_id => $self->itemnumber, + status => 'waiting', + } + )->count; +} + =head3 as_marc_field my $field = $item->as_marc_field; diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status-schema-org.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status-schema-org.inc index cd01e72fb6..66e4f3656e 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status-schema-org.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status-schema-org.inc @@ -1,4 +1,4 @@ -[% IF ( item.damaged or item.datedue or item.itemlost or item.transfertwhen or item.waiting ) %] +[% IF ( item.damaged or item.checkout.date_due or item.itemlost or item.transfertwhen or item.waiting ) %] [% ELSIF ( item.withdrawn ) %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc index 314798f928..febdda5a15 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc +++ b/koha-tmpl/opac-tmpl/bootstrap/en/includes/item-status.inc @@ -18,8 +18,8 @@ [% END %] [% IF item.isa('Koha::Item') %] - [% SET datedue = issue.date_due %] - [% SET onsite_checkout = issue.onsite_checkout %] + [% SET datedue = item.checkout.date_due %] + [% SET onsite_checkout = item.checkout.onsite_checkout %] [% ELSE %] [% SET datedue = item.datedue || issue.date_due %] [% SET onsite_checkout = item.onsite_checkout %] @@ -39,7 +39,8 @@ Checked out [% END %] [% END %] - [% IF item.avail_for_recall %]Recall[% END %] + [%# FIXME We should move avail_for_recall to a Koha::Item method %] + [% IF !item.isa('Koha::Item') AND item.avail_for_recall %]Recall[% END %] [% END %] [% IF NOT ( item.isa('Koha::Item') ) AND item.transfertwhen %] [%# transfertwhen is set in C4::Search, do not have it for course reserves %] @@ -100,7 +101,7 @@ Pending hold [% END %] -[% IF item.has_pending_recall %] +[% IF Koha.Preference('UseRecalls') && item.has_pending_recall %] [% SET itemavailable = 0 %] Pending recall [% END %] diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt index 8bb6417518..9eea246bad 100644 --- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt +++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt @@ -1362,7 +1362,7 @@ [% END # /IF itemdata_uri %] [% IF ( itemdata_copynumber ) %][% ITEM_RESULT.copynumber | html %][% END %] - [% INCLUDE 'item-status-schema-org.inc' item = ITEM_RESULT %][% INCLUDE 'item-status.inc' item = ITEM_RESULT %] + [% INCLUDE 'item-status-schema-org.inc' item = ITEM_RESULT %][% INCLUDE 'item-status.inc' item = ITEM_RESULT.object %] [% IF ( itemdata_itemnotes ) %][% ITEM_RESULT.itemnotes | $raw %][% END %] [% IF ITEM_RESULT.checkout %] [% ITEM_RESULT.checkout.date_due | $KohaDates as_due_date => 1 %] diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl index c883c4d035..101781b29d 100755 --- a/opac/opac-detail.pl +++ b/opac/opac-detail.pl @@ -79,7 +79,6 @@ use Koha::Virtualshelves; use Koha::Patrons; use Koha::Plugins; use Koha::Ratings; -use Koha::Recalls; use Koha::Reviews; use Koha::Serial::Items; use Koha::SearchEngine::Search; @@ -729,22 +728,13 @@ else { } $item_info->{checkout} = $item->checkout; + $item_info->{object} = $item; my $reserve_status = C4::Reserves::GetReserveStatus( $item->itemnumber ); if ( $reserve_status eq "Waiting" ) { $item_info->{'waiting'} = 1; } if ( $reserve_status eq "Reserved" ) { $item_info->{'onhold'} = 1; } - if ( C4::Context->preference('UseRecalls') ) { - my $pending_recall_count = Koha::Recalls->search( - { - item_id => $item->itemnumber, - status => 'waiting', - } - )->count; - if ( $pending_recall_count ) { $item_info->has_pending_recall = 1; } - } - my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers( $item->itemnumber ); if ( defined($transfertwhen) && $transfertwhen ne '' ) { diff --git a/t/db_dependent/Koha/Item.t b/t/db_dependent/Koha/Item.t index 55cface4cf..4ad1604f60 100755 --- a/t/db_dependent/Koha/Item.t +++ b/t/db_dependent/Koha/Item.t @@ -1483,7 +1483,7 @@ subtest 'store() tests' => sub { subtest 'Recalls tests' => sub { - plan tests => 20; + plan tests => 22; $schema->storage->txn_begin; @@ -1654,6 +1654,7 @@ subtest 'Recalls tests' => sub { } )->store; $recall2->set_waiting( { item => $item1 } ); + is( $item1->has_pending_recall, 1, 'Item has pending recall' ); # return a waiting recall my $check_recall = $item1->check_recalls; @@ -1661,6 +1662,8 @@ subtest 'Recalls tests' => sub { $recall2->revert_waiting; + is( $item1->has_pending_recall, 0, 'Item does not have pending recall' ); + # return recall based on recalldate $check_recall = $item1->check_recalls; is( $check_recall->patron_id, $patron1->borrowernumber, "No waiting recall, so oldest recall is returned" );