</form>
[% ELSE %]
-[% IF ( maxreserves || alreadyreserved || none_available || alreadypossession || ageRestricted ) %]
+[% IF ( exceeded_maxreserves || alreadyreserved || none_available || alreadypossession || ageRestricted ) %]
<div class="dialog alert">
[% UNLESS ( multi_hold ) %]
<h3>Cannot place hold</h3>
- <ul>
- [% IF ( alreadypossession ) %]
+ <ul>
+ [% IF ( exceeded_maxreserves ) %]
+ <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %] </a> can only place a maximum of [% maxreserves %] total holds.</li>
+ [% ELSIF ( alreadypossession ) %]
<li> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %]</a> <strong>is already in possession</strong> of one item</li>
[% ELSIF ( alreadyreserved ) %]
<li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %]</a> <strong>already has a hold</strong> on this item </li>
[% ELSIF ( maxreserves ) %]
<li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %] </a> has too many holds.</li>
[% END %]
- </ul>
+ </ul>
[% ELSE %]
- <h3>Cannot place hold on some items</h3>
+ <h3>Cannot place hold on some items</h3>
+ [% IF ( exceeded_maxreserves ) %]
+ <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %] </a> can place [% new_reserves_allowed %] of the requested [% new_reserves_count %] holds for a maximum of [% maxreserves %] total holds.</li>
+ [% END %]
[% END %]
</div>
$findborrower =~ s|,| |g;
my $borrowernumber_hold = $input->param('borrowernumber') || '';
my $messageborrower;
-my $maxreserves;
my $warnings;
my $messages;
+my $exceeded_maxreserves;
my $date = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
my $action = $input->param('action');
}
}
+my @biblionumbers = ();
+my $biblionumbers = $input->param('biblionumbers');
+if ($multihold) {
+ @biblionumbers = split '/', $biblionumbers;
+} else {
+ push @biblionumbers, $input->param('biblionumber');
+}
+
+
# If we have the borrowernumber because we've performed an action, then we
# don't want to try to place another reserve.
if ($borrowernumber_hold && !$action) {
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
my $diffbranch;
my @getreservloop;
- my $count_reserv = 0;
# we check the reserves of the borrower, and if he can reserv a document
# FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ...
- my $number_reserves =
+ my $reserves_count =
GetReserveCount( $borrowerinfo->{'borrowernumber'} );
- if ( C4::Context->preference('maxreserves') && ($number_reserves >= C4::Context->preference('maxreserves')) ) {
- $warnings = 1;
- $maxreserves = 1;
+ my $new_reserves_count = scalar( @biblionumbers );
+
+ my $maxreserves = C4::Context->preference('maxreserves');
+ if ( $maxreserves
+ && ( $reserves_count + $new_reserves_count > $maxreserves ) )
+ {
+ my $new_reserves_allowed =
+ $maxreserves - $reserves_count > 0
+ ? $maxreserves - $reserves_count
+ : 0;
+ $warnings = 1;
+ $exceeded_maxreserves = 1;
+ $template->param(
+ new_reserves_allowed => $new_reserves_allowed,
+ new_reserves_count => $new_reserves_count,
+ reserves_count => $reserves_count,
+ maxreserves => $maxreserves,
+ );
}
# we check the date expiry of the borrower (only if there is an expiry date, otherwise, set to 1 (warn)
borroweremail => $borrowerinfo->{'email'},
borroweremailpro => $borrowerinfo->{'emailpro'},
borrowercategory => $borrowerinfo->{'category'},
- borrowerreservs => $count_reserv,
cardnumber => $borrowerinfo->{'cardnumber'},
expiry => $expiry,
diffbranch => $diffbranch,
# FIXME launch another time GetMember perhaps until
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
-my @biblionumbers = ();
-my $biblionumbers = $input->param('biblionumbers');
-if ($multihold) {
- @biblionumbers = split '/', $biblionumbers;
-} else {
- push @biblionumbers, $input->param('biblionumber');
-}
-
my $itemdata_enumchron = 0;
my @biblioloop = ();
foreach my $biblionumber (@biblionumbers) {
#All is OK and we can continue
}
elsif ( $canReserve eq 'tooManyReserves' ) {
- $maxreserves = 1;
+ $exceeded_maxreserves = 1;
}
elsif ( $canReserve eq 'ageRestricted' ) {
$template->param( $canReserve => 1 );
my $num_override = 0;
my $hiddencount = 0;
- $biblioitem->{description} =
- $itemtypes->{ $biblioitem->{itemtype} }{description};
- if($biblioitem->{biblioitemnumber} ne $biblionumber){
- $biblioitem->{hostitemsflag}=1;
- }
+ if ( $biblioitem->{biblioitemnumber} ne $biblionumber ) {
+ $biblioitem->{hostitemsflag} = 1;
+ }
+
$biblioloopiter{description} = $biblioitem->{description};
- $biblioloopiter{itypename} = $biblioitem->{description};
- $biblioloopiter{imageurl} =
- getitemtypeimagelocation('intranet', $itemtypes->{$biblioitem->{itemtype}}{imageurl});
+ $biblioloopiter{itypename} = $biblioitem->{description};
+ if ( $biblioitem->{itemtype} ) {
+
+ $biblioitem->{description} =
+ $itemtypes->{ $biblioitem->{itemtype} }{description};
+
+ $biblioloopiter{imageurl} =
+ getitemtypeimagelocation( 'intranet',
+ $itemtypes->{ $biblioitem->{itemtype} }{imageurl} );
+ }
foreach my $itemnumber ( @{ $itemnumbers_of_biblioitem{$biblioitemnumber} } ) {
my $item = $iteminfos_of->{$itemnumber};
if (
!$item->{cantreserve}
+ && !$exceeded_maxreserves
&& IsAvailableForItemLevelRequest($item, $borrowerinfo)
&& CanItemBeReserved(
$borrowerinfo->{borrowernumber}, $itemnumber
$template->param( biblioloop => \@biblioloop );
$template->param( biblionumbers => $biblionumbers );
-$template->param( maxreserves => $maxreserves );
+$template->param( exceeded_maxreserves => $exceeded_maxreserves );
if ($multihold) {
$template->param( multi_hold => 1 );