@@ -, +, @@ --- C4/Biblio.pm | 15 +++++++++++++-- C4/Reserves.pm | 7 ++++++- C4/VirtualShelves/Page.pm | 2 +- opac/opac-ISBDdetail.pl | 2 +- opac/opac-MARCdetail.pl | 2 +- opac/opac-detail.pl | 2 +- opac/opac-search.pl | 2 +- 7 files changed, 24 insertions(+), 8 deletions(-) --- a/C4/Biblio.pm +++ a/C4/Biblio.pm @@ -2619,9 +2619,20 @@ more. =cut sub CountItemsIssued { - my ($biblionumber) = @_; + my ($params) = @_; + my $biblionumber = $params->{'biblionumber'}; + my $count_on_order = $params->{'count_on_order'}; + + my $sql = 'SELECT COUNT(*) AS issuedCount FROM items LEFT JOIN issues ON items.itemnumber = issues.itemnumber WHERE items.biblionumber = ?'; + + if ( $count_on_order ) { + $sql .= ' AND ( issues.itemnumber IS NOT NULL OR items.notforloan < 0 )'; + } else { + $sql .= ' AND issues.itemnumber IS NOT NULL'; + } + my $dbh = C4::Context->dbh; - my $sth = $dbh->prepare('SELECT COUNT(*) as issuedCount FROM items, issues WHERE items.itemnumber = issues.itemnumber AND items.biblionumber = ?'); + my $sth = $dbh->prepare( $sql ); $sth->execute($biblionumber); my $row = $sth->fetchrow_hashref(); return $row->{'issuedCount'}; --- a/C4/Reserves.pm +++ a/C4/Reserves.pm @@ -1465,7 +1465,12 @@ sub IsAvailableForItemLevelRequest { if (C4::Context->preference('AllowOnShelfHolds')) { return $available_per_item; } else { - return ($available_per_item and ($item->{onloan} or GetReserveStatus($itemnumber) eq "Waiting")); + return ( + $available_per_item + and ($item->{onloan} + or GetReserveStatus($itemnumber) eq "Waiting" + or $item->{notforloan} < 0 ) + ); } } --- a/C4/VirtualShelves/Page.pm +++ a/C4/VirtualShelves/Page.pm @@ -278,7 +278,7 @@ sub shelfpage { if(!defined($this_item->{'size'})) { $this_item->{'size'} = "" }; #TT has problems with size # Getting items infos for location display my @items_infos = &GetItemsLocationInfo( $this_item->{'biblionumber'}); - $this_item->{'itemsissued'} = CountItemsIssued( $this_item->{'biblionumber'} ); + $this_item->{'itemsissued'} = CountItemsIssued({ biblionumber => $this_item->{'biblionumber'} }); $this_item->{'ITEM_RESULTS'} = \@items_infos; if ( grep {$_ eq $biblionumber} @cart_list) { $this_item->{'incart'} = 1; --- a/opac/opac-ISBDdetail.pl +++ a/opac/opac-ISBDdetail.pl @@ -81,7 +81,7 @@ if($query->cookie("bib_list")){ } $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); -$template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) ); +$template->param( 'ItemsIssued' => CountItemsIssued({ biblionumber => $biblionumber, count_on_order => 1 }) ); my $marcflavour = C4::Context->preference("marcflavour"); my $record = GetMarcBiblio($biblionumber); --- a/opac/opac-MARCdetail.pl +++ a/opac/opac-MARCdetail.pl @@ -94,7 +94,7 @@ if($query->cookie("bib_list")){ } $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); -$template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) ); +$template->param( 'ItemsIssued' => CountItemsIssued({ biblionumber => $biblionumber, count_on_order => 1 }) ); # adding the $RequestOnOpac param my $RequestOnOpac; --- a/opac/opac-detail.pl +++ a/opac/opac-detail.pl @@ -391,7 +391,7 @@ if ($session->param('busc')) { $template->param( 'AllowOnShelfHolds' => C4::Context->preference('AllowOnShelfHolds') ); -$template->param( 'ItemsIssued' => CountItemsIssued( $biblionumber ) ); +$template->param( 'ItemsIssued' => CountItemsIssued({ biblionumber => $biblionumber, count_on_order => 1 }) ); --- a/opac/opac-search.pl +++ a/opac/opac-search.pl @@ -593,7 +593,7 @@ for (my $i=0;$i<@servers;$i++) { if (C4::Context->preference('TagsEnabled') and C4::Context->preference('TagsShowOnList')) { if ( my $bibnum = $res->{biblionumber} ) { - $res->{itemsissued} = CountItemsIssued( $bibnum ); + $res->{itemsissued} = CountItemsIssued({ biblionumber => $bibnum }) ); $res->{'TagLoop'} = get_tags({ biblionumber => $bibnum, approved => 1, --