Bug 11634 [QA Followup 3] - Found holds should be considered unavailable

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@gmail.com>
This commit is contained in:
Kyle Hall 2014-09-18 07:44:36 -04:00 committed by Tomas Cohen Arazi
parent a935e23d3d
commit 3b300146b2
3 changed files with 57 additions and 4 deletions

View file

@ -2683,7 +2683,8 @@ sub CanBookBeRenewed {
foreach my $b (@borrowernumbers) { foreach my $b (@borrowernumbers) {
foreach my $i (@itemnumbers) { foreach my $i (@itemnumbers) {
if ( IsAvailableForItemLevelRequest($i) if ( IsAvailableForItemLevelRequest($i)
&& CanItemBeReserved( $b, $i ) ) && CanItemBeReserved( $b, $i )
&& !IsItemOnHoldAndFound($i) )
{ {
push( @reservable, $i ); push( @reservable, $i );
} }

View file

@ -136,6 +136,8 @@ BEGIN {
&SuspendAll &SuspendAll
&GetReservesControlBranch &GetReservesControlBranch
IsItemOnHoldAndFound
); );
@EXPORT_OK = qw( MergeHolds ); @EXPORT_OK = qw( MergeHolds );
} }
@ -205,6 +207,7 @@ sub AddReserve {
$const, $priority, $notes, $checkitem, $const, $priority, $notes, $checkitem,
$found, $waitingdate, $expdate $found, $waitingdate, $expdate
); );
my $reserve_id = $sth->{mysql_insertid};
# Send e-mail to librarian if syspref is active # Send e-mail to librarian if syspref is active
if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){ if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){
@ -248,7 +251,7 @@ sub AddReserve {
$sth->execute($borrowernumber, $biblionumber, $resdate, $_); $sth->execute($borrowernumber, $biblionumber, $resdate, $_);
} }
return; # FIXME: why not have a useful return value? return $reserve_id;
} }
=head2 GetReserve =head2 GetReserve
@ -2411,6 +2414,30 @@ sub CalculatePriority {
return @row ? $row[0]+1 : 1; return @row ? $row[0]+1 : 1;
} }
=head2 IsItemOnHoldAndFound
my $bool = IsItemFoundHold( $itemnumber );
Returns true if the item is currently on hold
and that hold has a non-null found status ( W, T, etc. )
=cut
sub IsItemOnHoldAndFound {
my ($itemnumber) = @_;
my $rs = Koha::Database->new()->schema()->resultset('Reserve');
my $found = $rs->count(
{
itemnumber => $itemnumber,
found => { '!=' => undef }
}
);
return $found;
}
=head1 AUTHOR =head1 AUTHOR
Koha Development Team <http://koha-community.org/> Koha Development Team <http://koha-community.org/>

View file

@ -26,7 +26,7 @@ use C4::Reserves;
use Koha::DateUtils; use Koha::DateUtils;
use Koha::Database; use Koha::Database;
use Test::More tests => 57; use Test::More tests => 59;
BEGIN { BEGIN {
use_ok('C4::Circulation'); use_ok('C4::Circulation');
@ -233,7 +233,7 @@ C4::Context->dbh->do("DELETE FROM accountlines");
$biblionumber $biblionumber
); );
# Create 2 borrowers # Create borrowers
my %renewing_borrower_data = ( my %renewing_borrower_data = (
firstname => 'John', firstname => 'John',
surname => 'Renewal', surname => 'Renewal',
@ -248,8 +248,16 @@ C4::Context->dbh->do("DELETE FROM accountlines");
branchcode => $branch, branchcode => $branch,
); );
my %hold_waiting_borrower_data = (
firstname => 'Kyle',
surname => 'Reservation',
categorycode => 'S',
branchcode => $branch,
);
my $renewing_borrowernumber = AddMember(%renewing_borrower_data); my $renewing_borrowernumber = AddMember(%renewing_borrower_data);
my $reserving_borrowernumber = AddMember(%reserving_borrower_data); my $reserving_borrowernumber = AddMember(%reserving_borrower_data);
my $hold_waiting_borrowernumber = AddMember(%hold_waiting_borrower_data);
my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber ); my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber );
@ -282,11 +290,28 @@ C4::Context->dbh->do("DELETE FROM accountlines");
$title, $checkitem, $found $title, $checkitem, $found
); );
# Testing of feature to allow the renewal of reserved items if other items on the record can fill all needed holds
C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 1 ); C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 1 );
( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds'); is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2); ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2);
is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds'); is( $renewokay, 1, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
# Now let's add a waiting hold on the 3rd item, it's no longer available tp check out by just anyone, so we should no longer
# be able to renew these items
my $hold = Koha::Database->new()->schema()->resultset('Reserve')->create(
{
borrowernumber => $hold_waiting_borrowernumber,
biblionumber => $biblionumber,
itemnumber => $itemnumber3,
branchcode => $branch,
priority => 0,
found => 'W'
}
);
( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);
is( $renewokay, 0, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber2);
is( $renewokay, 0, 'Bug 11634 - Allow renewal of item with unfilled holds if other available items can fill those holds');
C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 0 ); C4::Context->set_preference('AllowRenewalIfOtherItemsAvailable', 0 );
( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber); ( $renewokay, $error ) = CanBookBeRenewed($renewing_borrowernumber, $itemnumber);