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:
parent
a935e23d3d
commit
3b300146b2
3 changed files with 57 additions and 4 deletions
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -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/>
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in a new issue