From 4e55c22f1d220c49fc8b302c20aa8a9763662261 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Wed, 12 Jun 2013 10:09:25 -0400 Subject: [PATCH] Bug 10452 - AllowHoldsOnDamagedItems should control using damaged items to fulfill holds 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 --- 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