my ($bibnum) = @_;
my $dbh = C4::Context->dbh;
- # my $query = C4::Context->preference('item-level_itypes') ?
- # " SELECT * , biblioitems.notes AS bnotes, biblio.notes
- # FROM biblio
- # LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
- # WHERE biblio.biblionumber = ?
- # AND biblioitems.biblionumber = biblio.biblionumber
- #";
-
my $query = " SELECT * , biblioitems.notes AS bnotes, itemtypes.notforloan as bi_notforloan, biblio.notes
FROM biblio
LEFT JOIN biblioitems ON biblio.biblionumber = biblioitems.biblionumber
LEFT JOIN itemtypes ON biblioitems.itemtype = itemtypes.itemtype
- WHERE biblio.biblionumber = ?
- AND biblioitems.biblionumber = biblio.biblionumber ";
+ WHERE biblio.biblionumber = ?";
my $sth = $dbh->prepare($query);
$sth->execute($bibnum);
$error="too_many";
}
- my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves($itemnumber);
- if ($resfound) {
+ my $resstatus = C4::Reserves::GetReserveStatus($itemnumber);
+ if ( $resstatus eq "Waiting" or $resstatus eq "Reserved" ) {
$renewokay = 0;
- $error="on_reserve"
+ $error->{message} = "on_reserve";
}
-
}
return ($renewokay,$error);
}
}
sub GetReserveStatus {
- my ($itemnumber) = @_;
-
+ my ($itemnumber, $biblionumber) = @_;
+
my $dbh = C4::Context->dbh;
-
- my $itemstatus = $dbh->prepare("SELECT found FROM reserves WHERE itemnumber = ?");
-
- $itemstatus->execute($itemnumber);
- my ($found) = $itemstatus->fetchrow_array;
- return $found;
+
+ my ($sth, $found, $priority);
+ if ( $itemnumber ) {
+ $sth = $dbh->prepare("SELECT found, priority FROM reserves WHERE itemnumber = ? order by priority LIMIT 1");
+ $sth->execute($itemnumber);
+ ($found, $priority) = $sth->fetchrow_array;
+ }
+
+ if ( $biblionumber and not defined $found and not defined $priority ) {
+ $sth = $dbh->prepare("SELECT found, priority FROM reserves WHERE biblionumber = ? order by priority LIMIT 1");
+ $sth->execute($biblionumber);
+ } else {
+ return;
+ }
+ ($found, $priority) = $sth->fetchrow_array;
+
+ return 'Waiting' if $found eq 'W' and $priority == 0;
+ return 'Finished' if $found eq 'F';
+ return 'Reserved' if $priority > 0;
+ return;
}
=head2 CheckReserves
if (C4::Context->preference('AllowOnShelfHolds')) {
return $available_per_item;
} else {
- return ($available_per_item and ($item->{onloan} or GetReserveStatus($itemnumber) eq "W"));
+ my $status = GetReserveStatus($itemnumber);
+ return ($available_per_item and ($item->{onloan} or $status eq "Waiting" or $status = "Reserved"));
}
}
use C4::Members qw(GetHideLostItemsPreference);
use C4::XSLT;
use C4::Branch;
-use C4::Reserves; # CheckReserves
+use C4::Reserves; # GetReserveStatus
use C4::Debug;
use C4::Charset;
use YAML;
my ($transfertfrom, $transfertto);
# is item on the reserve shelf?
- my $reservestatus = '';
- my $reserveitem;
+ my $reservestatus = '';
unless ($item->{wthdrawn}
|| $item->{itemlost}
# should map transit status to record indexed in Zebra.
#
($transfertwhen, $transfertfrom, $transfertto) = C4::Circulation::GetTransfers($item->{itemnumber});
- ($reservestatus, $reserveitem, undef) = C4::Reserves::CheckReserves($item->{itemnumber});
+ $reservestatus = C4::Reserves::GetReserveStatus( $item->{itemnumber}, $oldbiblio->{biblionumber} );
}
# item is withdrawn, lost, damaged, not for loan, reserved or in transit
|| $item->{itemlost}
|| $item->{damaged}
|| $item->{notforloan}
- || $reservestatus eq 'Waiting'
+ || $reservestatus eq 'Waiting'
|| ($transfertwhen ne ''))
{
$wthdrawn_count++ if $item->{wthdrawn};
$itemlost_count++ if $item->{itemlost};
$itemdamaged_count++ if $item->{damaged};
$item_in_transit_count++ if $transfertwhen ne '';
- $item_onhold_count++ if $reservestatus eq 'Waiting';
+ $item_onhold_count++ if $reservestatus eq 'Waiting';
$item->{status} = $item->{wthdrawn} . "-" . $item->{itemlost} . "-" . $item->{damaged} . "-" . $item->{notforloan};
# can place hold on item ?
my ( $transfertwhen, $transfertfrom, $transfertto ) = C4::Circulation::GetTransfers($item->{itemnumber});
- my ( $reservestatus, $reserveitem, undef ) = C4::Reserves::CheckReserves($item->{itemnumber});
+ my $reservestatus = C4::Reserves::GetReserveStatus( $item->{itemnumber} );
if ( $itemtypes->{ $item->{itype} }->{notforloan} || $item->{notforloan} || $item->{onloan} || $item->{wthdrawn} || $item->{itemlost} || $item->{damaged} ||
(defined $transfertwhen && $transfertwhen ne '') || $item->{itemnotforloan} || (defined $reservestatus && $reservestatus eq "Waiting") ){
$it->{'borrowernumber'},$it->{'itemnumber'}
);
$it->{"renew_error_${can_renew_error}"} = 1 if defined $can_renew_error;
- my ( $restype, $reserves, undef ) = CheckReserves( $it->{'itemnumber'} );
+ my $restype = C4::Reserves::GetReserveStatus( $it->{'itemnumber'} );
$it->{'can_renew'} = $can_renew;
$it->{'can_confirm'} = !$can_renew && !$restype;
- $it->{'renew_error'} = $restype;
+ $it->{'renew_error'} = ( $restype eq "Waiting" or $restype eq "Reserved" ) ? 1 : 0;
$it->{'checkoutdate'} = C4::Dates->new($it->{'issuedate'},'iso')->output('syspref');
$it->{'issuingbranchname'} = GetBranchName($it->{'branchcode'});
use C4::Koha;
use C4::Letters;
use C4::Biblio;
-use C4::Reserves;
use C4::Branch; # GetBranchName
use C4::Overdues qw/CheckBorrowerDebarred/;
use C4::Form::MessagingPreferences;
$itm->{'lostimageurl'} = $lostimageinfo->{ 'imageurl' };
$itm->{'lostimagelabel'} = $lostimageinfo->{ 'label' };
}
- my ($reserve_status) = C4::Reserves::CheckReserves($itm->{itemnumber});
+ my $reserve_status = C4::Reserves::GetReserveStatus($itm->{itemnumber});
if( $reserve_status eq "Waiting"){ $itm->{'waiting'} = 1; }
if( $reserve_status eq "Reserved"){ $itm->{'onhold'} = 1; }
if ($issues){
foreach my $issue ( sort { $b->{date_due}->datetime() cmp $a->{date_due}->datetime() } @{$issues} ) {
# check for reserves
- my ( $restype, $res, undef ) = CheckReserves( $issue->{'itemnumber'} );
+ my $restype = GetReserveStatus( $issue->{'itemnumber'} );
if ( $restype ) {
$issue->{'reserved'} = 1;
}