From 1a01d6ae5d8aafda9c07ebde65347445d1b55b73 Mon Sep 17 00:00:00 2001 From: Tomas Cohen Arazi Date: Wed, 19 Jul 2017 18:14:19 -0300 Subject: [PATCH] Bug 15486: Extend CanItemBeReserved so it handles daily holds limits This patch implements the required changes in C4::Reserves::CanItemBeReserved so it implements a daily limit on holds. It returns the 'tooManyReservesToday' string if the policy doesn't allow placing the hold. It returns 'OK' (current behaviour) otherwise. To test: - Run: $ sudo koha-shell kohadev k$ cd kohaclone k$ prove t/db_dependent/Holds.t => FAIL: Tests fail because the error condition is not making CanItemBeReserved return the desired error code. - Apply this patch - Run: k$ prove t/db_dependent/Holds.t => SUCCESS: Tests pass! - Sign off :-D --- C4/Reserves.pm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 216ececdba..f5ef2dc8e2 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -300,6 +300,7 @@ sub CanItemBeReserved { my $ruleitemtype; # itemtype of the matching issuing rule my $allowedreserves = 0; # Total number of holds allowed across all records my $holds_per_record = 1; # Total number of holds allowed for this one given record + my $holds_per_day = 0; # Total number of holds allowed per day for the given patron # we retrieve borrowers and items informations # # item->{itype} will come for biblioitems if necessery @@ -350,6 +351,7 @@ sub CanItemBeReserved { $ruleitemtype = $rights->{itemtype}; $allowedreserves = $rights->{reservesallowed}; $holds_per_record = $rights->{holds_per_record}; + $holds_per_day = $rights->{holds_per_day}; } else { $ruleitemtype = '*'; @@ -367,6 +369,18 @@ sub CanItemBeReserved { return "tooManyHoldsForThisRecord"; } + my $today_holds = Koha::Holds->search({ + borrowernumber => $borrowernumber, + reservedate => dt_from_string->date + }); + + if ( defined $holds_per_day && + ( ( $holds_per_day > 0 && $today_holds->count() >= $holds_per_day ) + or ( $holds_per_day == 0 ) ) + ) { + return "tooManyReservesToday"; + } + # we retrieve count $querycount .= "AND $branchfield = ?"; @@ -2068,7 +2082,7 @@ sub GetHoldRule { my $sth = $dbh->prepare( q{ - SELECT categorycode, itemtype, branchcode, reservesallowed, holds_per_record + SELECT categorycode, itemtype, branchcode, reservesallowed, holds_per_record, holds_per_day FROM issuingrules WHERE (categorycode in (?,'*') ) AND (itemtype IN (?,'*')) -- 2.16.1