From 42481023f96cbb302c4f381876c880569eb3cc66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20V=C3=A9ron?= Date: Sat, 21 Nov 2015 09:17:56 +0100 Subject: [PATCH] Bug 15243 - Place a hold on... Fix display issue and improve translatability Temporary patch, will need more work 1.12..2015/mv --- C4/Reserves.pm | 34 +++++++++++++++++--- .../prog/en/modules/reserve/request.tt | 24 +++++++------- reserve/request.pl | 10 +++++- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/C4/Reserves.pm b/C4/Reserves.pm index 6ed1543..75b2816 100644 --- a/C4/Reserves.pm +++ b/C4/Reserves.pm @@ -107,6 +107,7 @@ BEGIN { &GetReserveCount &GetReserveInfo &GetReserveStatus + &GetAllowedReserves &GetOtherReserves @@ -458,7 +459,6 @@ sub CanItemBeReserved{ my $controlbranch = C4::Context->preference('ReservesControlBranch'); - # we retrieve user rights on this itemtype and branchcode my $sth = $dbh->prepare("SELECT categorycode, itemtype, branchcode, reservesallowed FROM issuingrules WHERE (categorycode in (?,'*') ) @@ -492,10 +492,11 @@ sub CanItemBeReserved{ } # we retrieve rights - $sth->execute($borrower->{'categorycode'}, $item->{'itype'}, $branchcode); - if(my $rights = $sth->fetchrow_hashref()){ + my $rights = GetAllowedReserves($borrower->{'categorycode'}, $item->{'itype'}, $branchcode); + + if( $rights ){ $ruleitemtype = $rights->{itemtype}; - $allowedreserves = $rights->{reservesallowed}; + $allowedreserves = $rights->{reservesallowed}; }else{ $ruleitemtype = '*'; } @@ -581,6 +582,31 @@ sub CanReserveBeCanceledFromOpac { } +=head2 GetAllowedReserves + + $number = &GetAllowedReserves($borrowernumber, $itemtype, $branchcode); + +this function returns the rights for a patron on itemtype and branchcode. +=cut + +sub GetAllowedReserves { + my ($categorycode, $itemtype, $branchcode) = @_; + my $dbh = C4::Context->dbh; + my $sth = $dbh->prepare("SELECT categorycode, itemtype, branchcode, reservesallowed + FROM issuingrules + WHERE (categorycode in (?,'*') ) + AND (itemtype IN (?,'*')) + AND (branchcode IN (?,'*')) + ORDER BY + categorycode DESC, + itemtype DESC, + branchcode DESC;" + ); + $sth->execute($categorycode, $itemtype, $branchcode); + return $sth->fetchrow_hashref(); +} + + =head2 GetReserveCount $number = &GetReserveCount($borrowernumber); diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt index bf85bf6..e815f1e 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt @@ -233,7 +233,7 @@ function checkMultiHold() { [% IF ( messagetransfert ) %]

Hold found for ([% nextreservtitle %]), please transfer

-

Hold placed by : [% nextreservsurname %] [% nextreservfirstname %] at : [% branchname %] , Please transfer this item. +

Hold placed by: [% nextreservsurname %] [% nextreservfirstname %] at : [% branchname %] . Please transfer this item.

@@ -305,23 +305,23 @@ function checkMultiHold() {

Cannot place hold

[% ELSE %]

Cannot place hold on some items

[% IF ( exceeded_maxreserves ) %] -
  • Too many holds: [% borrowerfirstname %] [% borrowersurname %] can place [% new_reserves_allowed %] of the requested [% new_reserves_count %] holds for a maximum of [% maxreserves %] total holds.
  • +
  • Too many holds: [% borrowerfirstname %] [% borrowersurname %] can place [% new_reserves_allowed %] of the requested [% new_reserves_count %] holds for a maximum of [% maxreserves %] total holds.
  • [% END %] [% END %] @@ -331,19 +331,19 @@ function checkMultiHold() { [% IF ( expiry || diffbranch ) %]
    diff --git a/reserve/request.pl b/reserve/request.pl index 80cf0d6..2596cb9 100755 --- a/reserve/request.pl +++ b/reserve/request.pl @@ -82,6 +82,7 @@ my $messageborrower; my $warnings; my $messages; my $exceeded_maxreserves; +my $maxreserves = C4::Context->preference('maxreserves'); my $date = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }); my $action = $input->param('action'); @@ -150,7 +151,6 @@ if ($borrowernumber_hold && !$action) { my $new_reserves_count = scalar( @biblionumbers ); - my $maxreserves = C4::Context->preference('maxreserves'); if ( $maxreserves && ( $reserves_count + $new_reserves_count > $maxreserves ) ) { @@ -225,6 +225,13 @@ foreach my $biblionumber (@biblionumbers) { } elsif ( $canReserve eq 'tooManyReserves' ) { $exceeded_maxreserves = 1; + + my $rights = GetAllowedReserves($borrowerinfo->{'categorycode'}, $dat->{'itype'}, $borrowerinfo->{'branchcode'} ); + + if ( $rights ) { + $maxreserves = $rights->{reservesallowed} + if ( $maxreserves && ( $maxreserves > $rights->{reservesallowed} ) ); + } } elsif ( $canReserve eq 'ageRestricted' ) { $template->param( $canReserve => 1 ); @@ -614,6 +621,7 @@ foreach my $biblionumber (@biblionumbers) { $template->param( biblioloop => \@biblioloop ); $template->param( biblionumbers => $biblionumbers ); $template->param( exceeded_maxreserves => $exceeded_maxreserves ); +$template->param( maxreserves => $maxreserves ); if ($multihold) { $template->param( multi_hold => 1 ); -- 1.7.10.4