Bug 9788: Improvements when calling GetReservesFromItemnumber
This patch makes GetReservesFromItemnumber also returns the waiting date and removes some repeated code. Improves item status display on catalogue detail, when placing a hold at opac-reserve and in staff, and on transfers to receive form. This patch builds on work from reports 9367 and 9761. Test plan: Place a future next-av. hold (enable future holds prefs), say 2 days ahead. Check item status on catalogue detail. Nothing to see. Enable ConfirmFutureHolds by inserting a number of days, say 2. Confirm earlier hold by checking it in. Look at item status again on detail. Switch to other opac user. Try to place a hold again. Check item status with item level hold info. Try to place hold in staff, check item level status. Make a transfer for that item. Switch branch. Look at transfers to receive. Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com> Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
parent
e686dd2543
commit
1a9737be76
|
|
@ -358,9 +358,11 @@ sub GetReservesFromBiblionumber {
|
|||
|
||||
=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
|
||||
|
||||
|
|
@ -368,17 +370,18 @@ sub GetReservesFromItemnumber {
|
|||
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
|
||||
|
|
|
|||
|
|
@ -233,7 +233,8 @@ foreach my $item (@items) {
|
|||
}
|
||||
|
||||
# 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')){
|
||||
|
|
@ -247,9 +248,12 @@ foreach my $item (@items) {
|
|||
$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 '' ) ) {
|
||||
|
|
@ -259,13 +263,6 @@ foreach my $item (@items) {
|
|||
$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};
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ foreach my $br ( keys %$branches ) {
|
|||
$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'};
|
||||
|
|
|
|||
|
|
@ -431,13 +431,13 @@ foreach my $biblioNum (@biblionumbers) {
|
|||
}
|
||||
|
||||
# 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';
|
||||
|
|
@ -446,6 +446,8 @@ foreach my $biblioNum (@biblionumbers) {
|
|||
$itemLoopIter->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'};
|
||||
$itemLoopIter->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'};
|
||||
$itemLoopIter->{ExpectedAtLibrary} = $expectedAt;
|
||||
#waiting status
|
||||
$itemLoopIter->{waitingdate} = format_date($wait) if $wait;
|
||||
}
|
||||
|
||||
$itemLoopIter->{notforloan} = $itemInfo->{notforloan};
|
||||
|
|
@ -505,14 +507,7 @@ foreach my $biblioNum (@biblionumbers) {
|
|||
$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}) {
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@ foreach my $biblionumber (@biblionumbers) {
|
|||
}
|
||||
|
||||
# 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 ) {
|
||||
|
|
@ -338,7 +338,7 @@ foreach my $biblionumber (@biblionumbers) {
|
|||
$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
|
||||
|
|
@ -424,13 +424,6 @@ foreach my $biblionumber (@biblionumbers) {
|
|||
|
||||
# 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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue