[Koha-patches] [PATCH] Bug 10452 - AllowHoldsOnDamagedItems should control using damaged items to fulfill holds

Srdjan srdjan at catalyst.net.nz
Fri Jul 19 07:06:23 CEST 2013


From: Kyle M Hall <kyle at bywatersolutions.com>

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 at catalyst.net.nz>
---
 C4/Reserves.pm                                     | 26 ++++++++++++++--------
 .../en/modules/admin/preferences/circulation.pref  |  2 +-
 2 files changed, 18 insertions(+), 10 deletions(-)

diff --git a/C4/Reserves.pm b/C4/Reserves.pm
index 5ff12e4..b5336f7 100644
--- a/C4/Reserves.pm
+++ b/C4/Reserves.pm
@@ -421,13 +421,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 
@@ -809,7 +813,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
@@ -821,7 +826,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
@@ -837,13 +843,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 );
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
index c286ed1..a228efe 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref
@@ -344,7 +344,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:
-- 
1.8.1.2


More information about the Koha-patches mailing list