@@ -, +, @@
---
C4/Reserves.pm | 2 ++
Koha/Holds.pm | 12 +++---------
koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt | 2 --
.../intranet-tmpl/prog/en/modules/reserve/request.tt | 6 +++---
t/db_dependent/Holds.t | 15 ++++++++++++++-
5 files changed, 22 insertions(+), 15 deletions(-)
--- a/C4/Reserves.pm
+++ a/C4/Reserves.pm
@@ -2332,6 +2332,8 @@ sub GetReserveId {
my $hold = Koha::Holds->search( $params )->next();
+ return unless $hold;
+
return $hold->id();
}
--- a/Koha/Holds.pm
+++ a/Koha/Holds.pm
@@ -71,15 +71,9 @@ that would prevent one or the other.
sub forced_hold_level {
my ($self) = @_;
- my $force_hold_level;
-
- if ( $self->count() ) {
- my $has_item_level_holds;
- map { $has_item_level_holds ||= $_->itemnumber } $self->as_list();
- $force_hold_level = $has_item_level_holds ? 'item' : 'record';
- }
-
- return $force_hold_level;
+ return $self->search( { itemnumber => { '!=' => undef } } )->count()
+ ? 'item'
+ : 'record';
}
=head3 type
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/returns.tt
@@ -309,7 +309,6 @@ $(document).ready(function () {
-
@@ -526,7 +525,6 @@ $(document).ready(function () {
-
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
+++ a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt
@@ -276,13 +276,13 @@ function checkMultiHold() {
[% ELSIF ( exceeded_holds_per_record ) %]
Too many holds for this record: [% borrowerfirstname %] [% borrowersurname %] can only place a maximum of [% max_holds_for_record %] hold(s) on this record.
[% ELSIF ( alreadypossession ) %]
- [% borrowerfirstname %] [% borrowersurname %] is already in possession of one item [% borrowerfirstname %] [% borrowersurname %] is already in possession of one item.
[% ELSIF ( alreadyreserved ) %]
- [% borrowerfirstname %] [% borrowersurname %] already has a hold on this item
+ [% borrowerfirstname %] [% borrowersurname %] already has a hold on this item.
[% ELSIF ( ageRestricted ) %]
Age restricted
[% ELSIF ( none_available ) %]
- No items are available to be placed on hold
+ No items are available to be placed on hold.
[% ELSIF ( maxreserves ) %]
Too many holds: [% borrowerfirstname %] [% borrowersurname %] has too many holds.
[% END %]
--- a/t/db_dependent/Holds.t
+++ a/t/db_dependent/Holds.t
@@ -8,7 +8,7 @@ use t::lib::TestBuilder;
use C4::Context;
use C4::Branch;
-use Test::More tests => 60;
+use Test::More tests => 61;
use MARC::Record;
use C4::Biblio;
use C4::Items;
@@ -339,6 +339,19 @@ ModItem({ damaged => 1 }, $item_bibnum, $itemnumber);
t::lib::Mocks::mock_preference( 'AllowHoldsOnDamagedItems', 1 );
is( CanItemBeReserved( $borrowernumbers[0], $itemnumber), 'OK', "Patron can reserve damaged item with AllowHoldsOnDamagedItems enabled" );
ok( defined( ( CheckReserves($itemnumber) )[1] ), "Hold can be trapped for damaged item with AllowHoldsOnDamagedItems enabled" );
+
+$hold = Koha::Hold->new(
+ {
+ borrowernumber => $borrowernumbers[0],
+ itemnumber => $itemnumber,
+ biblionumber => $item_bibnum,
+ }
+)->store();
+is( CanItemBeReserved( $borrowernumbers[0], $itemnumber ),
+ 'itemAlreadyOnHold',
+ "Patron cannot place a second item level hold for a given item" );
+$hold->delete();
+
t::lib::Mocks::mock_preference( 'AllowHoldsOnDamagedItems', 0 );
ok( CanItemBeReserved( $borrowernumbers[0], $itemnumber) eq 'damaged', "Patron cannot reserve damaged item with AllowHoldsOnDamagedItems disabled" );
ok( !defined( ( CheckReserves($itemnumber) )[1] ), "Hold cannot be trapped for damaged item with AllowHoldsOnDamagedItems disabled" );
--