=head2 GetReservesFromItemnumber
- ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = GetReservesFromItemnumber($itemnumber);
+ ( $reservedate, $borrowernumber, $branchcode, $reserve_id, $waitingdate ) = GetReservesFromItemnumber($itemnumber, $all_dates);
-TODO :: Description here
+Get the first reserve for a specific item number (based on priority). Returns the abovementioned values for that reserve.
+
+all_dates is an optional parameter, telling Koha to include or exclude future holds
=cut
my ( $itemnumber, $all_dates ) = @_;
my $dbh = C4::Context->dbh;
my $query = "
- SELECT reservedate,borrowernumber,branchcode,reserve_id
+ SELECT reservedate,borrowernumber,branchcode,reserve_id,waitingdate
FROM reserves
WHERE itemnumber=?
";
unless ( $all_dates ) {
$query .= " AND reservedate <= CURRENT_DATE()";
}
+ $query .= ' ORDER BY priority';
my $sth_res = $dbh->prepare($query);
$sth_res->execute($itemnumber);
- my ( $reservedate, $borrowernumber, $branchcode, $reserve_id ) = $sth_res->fetchrow_array;
- return ( $reservedate, $borrowernumber, $branchcode, $reserve_id );
+ my ( $reservedate, $borrowernumber,$branchcode, $reserve_id, $wait ) = $sth_res->fetchrow_array;
+ return ( $reservedate, $borrowernumber, $branchcode, $reserve_id, $wait );
}
=head2 GetReservesFromBorrowernumber
}
# checking for holds
- my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($item->{itemnumber});
+ my ($reservedate,$reservedfor,$expectedAt,undef,$wait) = GetReservesFromItemnumber($item->{itemnumber}, 1); #second parameter: all dates
+ # all dates will include a future item level hold or a future wait
my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0);
if (C4::Context->preference('HidePatronName')){
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
$item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname};
- $item->{Reservedcardnumber} = $ItemBorrowerReserveInfo->{'cardnumber'};
+ $item->{Reservedcardnumber} = $ItemBorrowerReserveInfo->{'cardnumber'};
+ # Check waiting status
+ $item->{waitingdate} = format_date($wait) if $wait;
}
+
# Check the transit status
my ( $transfertwhen, $transfertfrom, $transfertto ) = GetTransfers($item->{itemnumber});
if ( defined( $transfertwhen ) && ( $transfertwhen ne '' ) ) {
$item->{nocancel} = 1;
}
- # FIXME: move this to a pm, check waiting status for holds
- my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'");
- $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber});
- while (my $wait_hashref = $sth2->fetchrow_hashref) {
- $item->{waitingdate} = format_date($wait_hashref->{waitingdate});
- }
-
# item has a host number if its biblio number does not match the current bib
if ($item->{biblionumber} ne $biblionumber){
$item->{hostbiblionumber} = $item->{biblionumber};
$getransf{'subtitle'} = GetRecordValue('subtitle', $record, GetFrameworkCode($gettitle->{'biblionumber'}));
# we check if we have a reserv for this transfer
- my @checkreserv = GetReservesFromItemnumber($num->{'itemnumber'} );
+ my @checkreserv = GetReservesFromItemnumber($num->{'itemnumber'},1 ); #alldate parameter for future holds and waits
if ( $checkreserv[0] ) {
my $getborrower = GetMemberDetails( $checkreserv[1] );
$getransf{'borrowernum'} = $getborrower->{'borrowernumber'};
}
# checking reserve
- my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($itemNum);
+ my ($reservedate,$reservedfor,$expectedAt,undef,$wait) = GetReservesFromItemnumber($itemNum,1); #with alldates parameter include future item level holds and waits
my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0);
- # the item could be reserved for this borrower vi a host record, flag this
- if ($reservedfor eq $borrowernumber){
- $itemLoopIter->{already_reserved} = 1;
- }
+ # the item could be reserved for this borrower vi a host record, flag this
+ if ($reservedfor eq $borrowernumber){
+ $itemLoopIter->{already_reserved} = 1;
+ }
if ( defined $reservedate ) {
$itemLoopIter->{backgroundcolor} = 'reserved';
$itemLoopIter->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$itemLoopIter->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
$itemLoopIter->{ExpectedAtLibrary} = $expectedAt;
+ #waiting status
+ $itemLoopIter->{waitingdate} = format_date($wait) if $wait;
}
$itemLoopIter->{notforloan} = $itemInfo->{notforloan};
$numCopiesAvailable++;
}
- # FIXME: move this to a pm
- my $dbh = C4::Context->dbh;
- my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'");
- $sth2->execute($itemLoopIter->{ReservedForBorrowernumber}, $itemNum);
- while (my $wait_hashref = $sth2->fetchrow_hashref) {
- $itemLoopIter->{waitingdate} = format_date($wait_hashref->{waitingdate});
- }
- $itemLoopIter->{imageurl} = getitemtypeimagelocation( 'opac', $itemTypes->{ $itemInfo->{itype} }{imageurl} );
+ $itemLoopIter->{imageurl} = getitemtypeimagelocation( 'opac', $itemTypes->{ $itemInfo->{itype} }{imageurl} );
# Show serial enumeration when needed
if ($itemLoopIter->{enumchron}) {
}
# checking reserve
- my ($reservedate,$reservedfor,$expectedAt,$reserve_id) = GetReservesFromItemnumber($itemnumber);
+ my ($reservedate,$reservedfor,$expectedAt,$reserve_id,$wait) = GetReservesFromItemnumber($itemnumber,1); #alldates parameter to include future holds/waits
my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor );
if ( defined $reservedate ) {
$item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
$item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
$item->{ExpectedAtLibrary} = $branches->{$expectedAt}{branchname};
-
+ $item->{waitingdate} = format_date($wait) if $wait;
}
# Management of the notforloan document
# If none of the conditions hold true, then neither override nor available is set and the item cannot be checked
- # FIXME: move this to a pm
- my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'");
- $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber});
- while (my $wait_hashref = $sth2->fetchrow_hashref) {
- $item->{waitingdate} = format_date($wait_hashref->{waitingdate});
- }
-
# Show serial enumeration when needed
if ($item->{enumchron}) {
$itemdata_enumchron = 1;