Lines 37-43
use C4::Debug;
Link Here
|
37 |
use Koha::DateUtils; |
37 |
use Koha::DateUtils; |
38 |
# use Data::Dumper; |
38 |
# use Data::Dumper; |
39 |
|
39 |
|
40 |
my $MAXIMUM_NUMBER_OF_RESERVES = C4::Context->preference("maxreserves"); |
40 |
my $maxreserves = C4::Context->preference("maxreserves"); |
|
|
41 |
my $max_holds_per_record = C4::Context->preference('MaxHoldsPerRecord'); |
41 |
|
42 |
|
42 |
my $query = new CGI; |
43 |
my $query = new CGI; |
43 |
my ( $template, $borrowernumber, $cookie ) = get_template_and_user( |
44 |
my ( $template, $borrowernumber, $cookie ) = get_template_and_user( |
Lines 172-178
foreach my $biblioNumber (@biblionumbers) {
Link Here
|
172 |
if ( $query->param('place_reserve') ) { |
173 |
if ( $query->param('place_reserve') ) { |
173 |
my $notes = $query->param('notes'); |
174 |
my $notes = $query->param('notes'); |
174 |
my $reserve_cnt = 0; |
175 |
my $reserve_cnt = 0; |
175 |
if ($MAXIMUM_NUMBER_OF_RESERVES) { |
176 |
if ($maxreserves) { |
176 |
$reserve_cnt = GetReservesFromBorrowernumber( $borrowernumber ); |
177 |
$reserve_cnt = GetReservesFromBorrowernumber( $borrowernumber ); |
177 |
} |
178 |
} |
178 |
|
179 |
|
Lines 255-262
if ( $query->param('place_reserve') ) {
Link Here
|
255 |
$itemNum = undef; |
256 |
$itemNum = undef; |
256 |
} |
257 |
} |
257 |
|
258 |
|
258 |
if ( $MAXIMUM_NUMBER_OF_RESERVES |
259 |
if ( $maxreserves |
259 |
&& $reserve_cnt >= $MAXIMUM_NUMBER_OF_RESERVES ) |
260 |
&& $reserve_cnt >= $maxreserves ) |
260 |
{ |
261 |
{ |
261 |
$canreserve = 0; |
262 |
$canreserve = 0; |
262 |
} |
263 |
} |
Lines 317-323
if ( CheckBorrowerDebarred($borrowernumber) ) {
Link Here
|
317 |
|
318 |
|
318 |
my @reserves = GetReservesFromBorrowernumber( $borrowernumber ); |
319 |
my @reserves = GetReservesFromBorrowernumber( $borrowernumber ); |
319 |
$template->param( RESERVES => \@reserves ); |
320 |
$template->param( RESERVES => \@reserves ); |
320 |
if ( $MAXIMUM_NUMBER_OF_RESERVES && (scalar(@reserves) >= $MAXIMUM_NUMBER_OF_RESERVES) ) { |
321 |
if ( $maxreserves && (scalar(@reserves) >= $maxreserves) ) { |
321 |
$template->param( message => 1 ); |
322 |
$template->param( message => 1 ); |
322 |
$noreserves = 1; |
323 |
$noreserves = 1; |
323 |
$template->param( too_many_reserves => scalar(@reserves)); |
324 |
$template->param( too_many_reserves => scalar(@reserves)); |
Lines 325-336
if ( $MAXIMUM_NUMBER_OF_RESERVES && (scalar(@reserves) >= $MAXIMUM_NUMBER_OF_RES
Link Here
|
325 |
foreach my $res (@reserves) { |
326 |
foreach my $res (@reserves) { |
326 |
foreach my $biblionumber (@biblionumbers) { |
327 |
foreach my $biblionumber (@biblionumbers) { |
327 |
if ( $res->{'biblionumber'} == $biblionumber && $res->{'borrowernumber'} == $borrowernumber) { |
328 |
if ( $res->{'biblionumber'} == $biblionumber && $res->{'borrowernumber'} == $borrowernumber) { |
328 |
# $template->param( message => 1 ); |
329 |
$biblioDataHash{$biblionumber}->{holds_count}++; |
329 |
# $noreserves = 1; |
|
|
330 |
# $template->param( already_reserved => 1 ); |
331 |
$biblioDataHash{$biblionumber}->{already_reserved} = 1; |
332 |
} |
330 |
} |
333 |
} |
331 |
} |
|
|
332 |
|
334 |
} |
333 |
} |
335 |
|
334 |
|
336 |
unless ($noreserves) { |
335 |
unless ($noreserves) { |
Lines 372-378
foreach my $biblioNum (@biblionumbers) {
Link Here
|
372 |
$biblioLoopIter{author} = $biblioData->{author}; |
371 |
$biblioLoopIter{author} = $biblioData->{author}; |
373 |
$biblioLoopIter{rank} = $biblioData->{rank}; |
372 |
$biblioLoopIter{rank} = $biblioData->{rank}; |
374 |
$biblioLoopIter{reservecount} = $biblioData->{reservecount}; |
373 |
$biblioLoopIter{reservecount} = $biblioData->{reservecount}; |
375 |
$biblioLoopIter{already_reserved} = $biblioData->{already_reserved}; |
374 |
$biblioLoopIter{holds_count} = $biblioData->{holds_count}; |
376 |
|
375 |
|
377 |
if (!$itemLevelTypes && $biblioData->{itemtype}) { |
376 |
if (!$itemLevelTypes && $biblioData->{itemtype}) { |
378 |
$biblioLoopIter{description} = $itemTypes->{$biblioData->{itemtype}}{description}; |
377 |
$biblioLoopIter{description} = $itemTypes->{$biblioData->{itemtype}}{description}; |
Lines 499-509
foreach my $biblioNum (@biblionumbers) {
Link Here
|
499 |
$policy_holdallowed = 0; |
498 |
$policy_holdallowed = 0; |
500 |
} |
499 |
} |
501 |
|
500 |
|
502 |
if (IsAvailableForItemLevelRequest($itemNum) and $policy_holdallowed and CanItemBeReserved($borrowernumber,$itemNum) and ($itemLoopIter->{already_reserved} ne 1)) { |
501 |
if (IsAvailableForItemLevelRequest($itemNum) and $policy_holdallowed and CanItemBeReserved($borrowernumber,$itemNum) and ($itemLoopIter->{holds_count} < $max_holds_per_record )) { |
503 |
$itemLoopIter->{available} = 1; |
502 |
$itemLoopIter->{available} = 1; |
504 |
$numCopiesAvailable++; |
503 |
$numCopiesAvailable++; |
505 |
} |
504 |
} |
506 |
|
505 |
|
|
|
506 |
# Don't allow multiple item level holds on the same item if borrowers can place multiple holds on one bib |
507 |
$itemLoopIter->{available} = 0 if ( GetReservesFromBorrowernumber( $borrowernumber, undef, undef, $itemNum ) ); |
508 |
|
507 |
# FIXME: move this to a pm |
509 |
# FIXME: move this to a pm |
508 |
my $dbh = C4::Context->dbh; |
510 |
my $dbh = C4::Context->dbh; |
509 |
my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'"); |
511 |
my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'"); |
Lines 530-535
foreach my $biblioNum (@biblionumbers) {
Link Here
|
530 |
if ($biblioLoopIter{already_reserved}) { |
532 |
if ($biblioLoopIter{already_reserved}) { |
531 |
$biblioLoopIter{holdable} = undef; |
533 |
$biblioLoopIter{holdable} = undef; |
532 |
} |
534 |
} |
|
|
535 |
if ($biblioLoopIter{holds_count} >= $max_holds_per_record) { |
536 |
$biblioLoopIter{holdable} = undef; |
537 |
$anyholdable = undef; |
538 |
$biblioLoopIter{max_holds} = 1; |
539 |
} |
533 |
if(not CanBookBeReserved($borrowernumber,$biblioNum)){ |
540 |
if(not CanBookBeReserved($borrowernumber,$biblioNum)){ |
534 |
$biblioLoopIter{holdable} = undef; |
541 |
$biblioLoopIter{holdable} = undef; |
535 |
} |
542 |
} |