Bug 10452: make AllowHoldsOnDamagedItems control using damaged items to fulfill holds
authorKyle M Hall <kyle@bywatersolutions.com>
Wed, 12 Jun 2013 14:09:25 +0000 (10:09 -0400)
committerGalen Charlton <gmc@esilibrary.com>
Mon, 10 Mar 2014 18:15:12 +0000 (18:15 +0000)
AllowHoldsOnDamagedItems will stop item-specific holds from being placed
on damaged items, but does not stop Koha from using damaged items to
fill holds. This seems like incorrect behavior.

Test Plan:
1) Set 'AllowHoldsOnDamagedItems' to "Don't Allow"
2) Pick an item, set it to damaged
3) Place a bib-level hold on this item's record
4) Scan the item though the returns system
5) Koha will ask to use this item to fill the hold, click "ignore"
6) Apply this patch
7) Repeat step 4
8) Koha will not ask to use this item to fill the hold

Signed-off-by: Srdjan <srdjan@catalyst.net.nz>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>
C4/Reserves.pm
koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref

index bb40b04..7a914e3 100644 (file)
@@ -465,13 +465,17 @@ sub CanItemBeReserved{
     my $dbh             = C4::Context->dbh;
     my $allowedreserves = 0;
             
-    my $controlbranch = C4::Context->preference('ReservesControlBranch');
-    my $itype         = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype";
-
     # we retrieve borrowers and items informations #
-    my $item     = GetItem($itemnumber);
+    my $item = GetItem($itemnumber);
+
+    # If an item is damaged and we don't allow holds on damaged items, we can stop right here
+    return 0 if ( $item->{damaged} && !C4::Context->preference('AllowHoldsOnDamagedItems') );
+
     my $borrower = C4::Members::GetMember('borrowernumber'=>$borrowernumber);     
     
+    my $controlbranch = C4::Context->preference('ReservesControlBranch');
+    my $itype         = C4::Context->preference('item-level_itypes') ? "itype" : "itemtype";
+
     # we retrieve user rights on this itemtype and branchcode
     my $sth = $dbh->prepare("SELECT categorycode, itemtype, branchcode, reservesallowed 
                              FROM issuingrules 
@@ -869,7 +873,8 @@ sub CheckReserves {
            items.biblioitemnumber,
            itemtypes.notforloan,
            items.notforloan AS itemnotforloan,
-           items.itemnumber
+           items.itemnumber,
+           items.damaged
            FROM   items
            LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
            LEFT JOIN itemtypes   ON items.itype   = itemtypes.itemtype
@@ -881,7 +886,8 @@ sub CheckReserves {
            items.biblioitemnumber,
            itemtypes.notforloan,
            items.notforloan AS itemnotforloan,
-           items.itemnumber
+           items.itemnumber,
+           items.damaged
            FROM   items
            LEFT JOIN biblioitems ON items.biblioitemnumber = biblioitems.biblioitemnumber
            LEFT JOIN itemtypes   ON biblioitems.itemtype   = itemtypes.itemtype
@@ -897,13 +903,15 @@ sub CheckReserves {
         $sth->execute($barcode);
     }
     # note: we get the itemnumber because we might have started w/ just the barcode.  Now we know for sure we have it.
-    my ( $biblio, $bibitem, $notforloan_per_itemtype, $notforloan_per_item, $itemnumber ) = $sth->fetchrow_array;
+    my ( $biblio, $bibitem, $notforloan_per_itemtype, $notforloan_per_item, $itemnumber, $damaged ) = $sth->fetchrow_array;
+
+    return if ( $damaged && !C4::Context->preference('AllowHoldsOnDamagedItems') );
 
-    return ( '' ) unless $itemnumber; # bail if we got nothing.
+    return unless $itemnumber; # bail if we got nothing.
 
     # if item is not for loan it cannot be reserved either.....
     #    execpt where items.notforloan < 0 :  This indicates the item is holdable. 
-    return ( '' ) if  ( $notforloan_per_item > 0 ) or $notforloan_per_itemtype;
+    return if  ( $notforloan_per_item > 0 ) or $notforloan_per_itemtype;
 
     # Find this item in the reserves
     my @reserves = _Findgroupreserve( $bibitem, $biblio, $itemnumber, $lookahead_days);
index ae9d815..70ac352 100644 (file)
@@ -363,7 +363,7 @@ Circulation:
               choices:
                   yes: Allow
                   no: "Don't allow"
-            - hold requests to be placed on damaged items.
+            - hold requests to be placed on and filled by damaged items.
         -
             - pref: AllowOnShelfHolds
               choices: