Bug 8975 - search results should say on order in staff client
authorOwen Leonard <oleonard@myacpl.org>
Fri, 2 Nov 2012 15:40:52 +0000 (11:40 -0400)
committerJared Camins-Esakov <jcamins@cpbibliography.com>
Tue, 20 Nov 2012 12:40:40 +0000 (07:40 -0500)
In order to allow holds on items with notforloan = -1, processing
of "unavailable" items in Search.pm was altered to exclude items
with notforloan < 0. (See Bug 2341: items marked 'on order' not
 reserveable from search results). Doing so meant that such items
were excluded from the list, in staff client search results, of
items which are unavailable.

This patch changes the logic of that processing so that items
with notforloan < 0 are considered unavailable, but can still
be placed on hold.

To test, edit a record with a single item and view that record
in search results. When the item is is on order (notforloan -1)
it should say so. The holds link should be INactive only if:

- item is withdrawn AND/OR
- item is lost AND/OR
- item is damaged (and AllowHoldsOnDamagedItems is off) AND/OR
- item is not for loan, with notforloan > 0

Signed-off-by: Nicole C. Engard <nengard@bywatersolutions.com>
All tests pass (note that a reindex is required if changing item
statuses - which is why my first tests failed).

Passed-QA-by: Jonathan Druart <jonathan.druart@biblibre.com>
Signed-off-by: Jared Camins-Esakov <jcamins@cpbibliography.com>
C4/Search.pm

index f95cb83..1e850d9 100644 (file)
@@ -1849,13 +1849,23 @@ sub searchResults {
                     $item->{status} = $item->{wthdrawn} . "-" . $item->{itemlost} . "-" . $item->{damaged} . "-" . $item->{notforloan};
 
                     # can place hold on item ?
-                    if ((!$item->{damaged} || C4::Context->preference('AllowHoldsOnDamagedItems'))
-                      && !$item->{itemlost}
-                      && !$item->{withdrawn}
-                    ) {
-                        $can_place_holds = 1;
+                    if ( !$item->{itemlost} ) {
+                        if ( !$item->{wthdrawn} ){
+                            if ( $item->{damaged} ){
+                                if ( C4::Context->preference('AllowHoldsOnDamagedItems') ){
+                                    # can place a hold on a damaged item if AllowHoldsOnDamagedItems is true
+                                    if ( ( !$item->{notforloan} || $item->{notforloan} < 0 ) ){
+                                        # item is either for loan or has notforloan < 0
+                                        $can_place_holds = 1;
+                                    }
+                                }
+                            } elsif ( $item->{notforloan} < 0 ) {
+                                # item is not damaged and notforloan is < 0
+                                $can_place_holds = 1;
+                            }
+                        }
                     }
-                    
+
                     $other_count++;
 
                     my $key = $prefix . $item->{status};