Bug 17327: Item level holds no longer enforced
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 21 Sep 2016 02:15:02 +0000 (02:15 +0000)
committerKyle M Hall <kyle@bywatersolutions.com>
Sat, 24 Sep 2016 20:55:16 +0000 (20:55 +0000)
Reported by Katrin:

Example:
- on shelf holds allowed
- holds allowed 5
- holds on same record allowed 5
- FORCE item level holds

On a record with only one item, you can only place a record level hold
in OPAC now - which is against your circulation conditions.

Another example:
- record with 2 items
- circulation rules as above, 1 hold allowed on the record
- Item level holds: forced

I can only place record level holds in OPAC and staff. At the moment, I
am not able to place item level holds in any circumstances in my
installation.

Test Plan:
1) Apply the unit test patch
2) prove t/db_dependent/Reserves/MultiplePerRecord.t
   should fail
3) Apply the second patch
4) prove t/db_dependent/Reserves/MultiplePerRecord.t
   should pass
5) Attempt to replicate one of the examples above, you should be unable to

Signed-off-by: Benjamin Rokseth <benjamin.rokseth@kul.oslo.kommune.no>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Koha/Holds.pm

index bde63c9..6dc0c9e 100644 (file)
@@ -62,7 +62,7 @@ This method will return 'item' if the patron has
 at least one item level hold. It will return 'record'
 if the patron has holds but none are item level,
 Finally, if the patron has no holds, it will return
-undef which indicateds the patron may select either
+undef which indicates the patron may select either
 record or item level holds, barring any other rules
 that would prevent one or the other.
 
@@ -71,9 +71,13 @@ that would prevent one or the other.
 sub forced_hold_level {
     my ($self) = @_;
 
-    return $self->search( { itemnumber => { '!=' => undef } } )->count()
-      ? 'item'
-      : 'record';
+    my $item_level_count = $self->search( { itemnumber => { '!=' => undef } } )->count();
+    return 'item' if $item_level_count > 0;
+
+    my $record_level_count = $self->search( { itemnumber => undef } )->count();
+    return 'record' if $record_level_count > 0;
+
+    return undef;
 }
 
 =head3 type