From 363c1ca9f9392403b98f3a3604c1345320f4a8c4 Mon Sep 17 00:00:00 2001 From: Nahuel ANGELINETTI Date: Fri, 5 Nov 2010 09:13:21 -0400 Subject: [PATCH] (MT 2985) simplify CanBookBeReserved The function was too complex for so simple stuff, not we check if one of all items of the record can be issued. [Note by Galen Charlton: not only does this patch simplify the routine, it also makes it behave correctly.] Signed-off-by: Galen Charlton Signed-off-by: Chris Cormack --- C4/Reserves.pm | 73 +++----------------------------------------------- 1 file changed, 4 insertions(+), 69 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 9b7014ef14..fcf92093bb 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -380,76 +380,11 @@ sub GetReservesFromBorrowernumber { sub CanBookBeReserved{ my ($borrowernumber, $biblionumber) = @_; - my $dbh = C4::Context->dbh; - my $biblio = GetBiblioData($biblionumber); - my $borrower = C4::Members::GetMember(borrowernumber=>$borrowernumber); - my $controlbranch = C4::Context->preference('ReservesControlBranch'); - my $itype = C4::Context->preference('item-level_itypes'); - my $reservesrights= 0; - my $reservescount = 0; - - # we retrieve the user rights - my @args; - my $rightsquery = "SELECT categorycode, itemtype, branchcode, reservesallowed - FROM issuingrules - WHERE categorycode IN (?, '*')"; - push @args,$borrower->{categorycode}; - - if($controlbranch eq "ItemHomeLibrary"){ - $rightsquery .= " AND branchcode = '*'"; - }elsif($controlbranch eq "PatronLibrary"){ - $rightsquery .= " AND branchcode IN (?,'*')"; - push @args, $borrower->{branchcode}; - } - - if(not $itype){ - $rightsquery .= " AND itemtype IN (?,'*')"; - push @args, $biblio->{itemtype}; - }else{ - $rightsquery .= " AND itemtype = '*'"; - } - - $rightsquery .= " ORDER BY categorycode DESC, itemtype DESC, branchcode DESC"; - my $sthrights = $dbh->prepare($rightsquery); - $sthrights->execute(@args); - - if(my $row = $sthrights->fetchrow_hashref()){ - $reservesrights = $row->{reservesallowed}; - } - - @args = (); - # we count how many reserves the borrower have - my $countquery = "SELECT count(*) as count - FROM reserves - LEFT JOIN items USING (itemnumber) - LEFT JOIN biblioitems ON (reserves.biblionumber=biblioitems.biblionumber) - LEFT JOIN borrowers USING (borrowernumber) - WHERE borrowernumber = ? - "; - push @args, $borrowernumber; - - if(not $itype){ - $countquery .= "AND itemtype = ?"; - push @args, $biblio->{itemtype}; + my @items = GetItemsInfo($biblionumber); + foreach my $item (@items){ + return 1 if CanItemBeReserved($borrowernumber, $item->{itemnumber}); } - - if($controlbranch eq "PatronLibrary"){ - $countquery .= " AND borrowers.branchcode = ? "; - push @args, $borrower->{branchcode}; - } - - my $sthcount = $dbh->prepare($countquery); - $sthcount->execute(@args); - - if(my $row = $sthcount->fetchrow_hashref()){ - $reservescount = $row->{count}; - } - if($reservescount < $reservesrights){ - return 1; - }else{ - return 0; - } - + return 0; } =head2 CanItemBeReserved -- 2.39.5