View | Details | Raw Unified | Return to bug 7710
Collapse All | Expand All

(-)a/C4/Reserves.pm (-24 / +35 lines)
Lines 373-408 sub GetReservesFromItemnumber { Link Here
373
373
374
=head2 GetReservesFromBorrowernumber
374
=head2 GetReservesFromBorrowernumber
375
375
376
    $borrowerreserv = GetReservesFromBorrowernumber($borrowernumber,$tatus);
376
    $borrowerreserv = GetReservesFromBorrowernumber($borrowernumber[,$status][,$biblionumber][,$itemnumber]);
377
378
TODO :: Descritpion
379
377
380
=cut
378
=cut
381
379
382
sub GetReservesFromBorrowernumber {
380
sub GetReservesFromBorrowernumber {
383
    my ( $borrowernumber, $status ) = @_;
381
    my ( $borrowernumber, $found, $biblionumber, $itemnumber ) = @_;
384
    my $dbh   = C4::Context->dbh;
382
385
    my $sth;
383
    my @params;
386
    if ($status) {
384
387
        $sth = $dbh->prepare("
385
    my $sql = "SELECT * FROM reserves WHERE borrowernumber = ?";
388
            SELECT *
386
    push( @params, $borrowernumber );
389
            FROM   reserves
387
390
            WHERE  borrowernumber=?
388
    if ( $biblionumber ) {
391
                AND found =?
389
        $sql .= " AND biblionumber = ? ";
392
            ORDER BY reservedate
390
        push( @params, $biblionumber );
393
        ");
391
    }
394
        $sth->execute($borrowernumber,$status);
392
395
    } else {
393
    if ( $itemnumber ) {
396
        $sth = $dbh->prepare("
394
        $sql .= " AND itemnumber = ? ";
397
            SELECT *
395
        push( @params, $itemnumber );
398
            FROM   reserves
396
    }
399
            WHERE  borrowernumber=?
397
400
            ORDER BY reservedate
398
    if ( $found ) {
401
        ");
399
        $sql .= " AND found = ? ";
402
        $sth->execute($borrowernumber);
400
        push( @params, $found );
403
    }
401
    }
402
403
    $sql .= " ORDER BY reservedate ";
404
405
    my $dbh = C4::Context->dbh;
406
    my $sth = $dbh->prepare( $sql );
407
408
    $sth->execute( @params );
409
404
    my $data = $sth->fetchall_arrayref({});
410
    my $data = $sth->fetchall_arrayref({});
405
    return @$data;
411
412
    if ( scalar @$data ) {
413
        return @$data;
414
    } else {
415
        return ();
416
    }
406
}
417
}
407
#-------------------------------------------------------------------------------------
418
#-------------------------------------------------------------------------------------
408
=head2 CanBookBeReserved
419
=head2 CanBookBeReserved
(-)a/installer/data/mysql/sysprefs.sql (+1 lines)
Lines 423-425 INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ( Link Here
423
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('DisplayIconsXSLT', '1', '', 'If ON, displays the format, audience, and material type icons in XSLT MARC21 results and detail pages.', 'YesNo');
423
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES('DisplayIconsXSLT', '1', '', 'If ON, displays the format, audience, and material type icons in XSLT MARC21 results and detail pages.', 'YesNo');
424
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('HighlightOwnItemsOnOPAC','0','','If on, and a patron is logged into the OPAC, items from his or her home library will be emphasized and shown first in search results and item details.','YesNo');
424
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('HighlightOwnItemsOnOPAC','0','','If on, and a patron is logged into the OPAC, items from his or her home library will be emphasized and shown first in search results and item details.','YesNo');
425
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('HighlightOwnItemsOnOPACWhich','PatronBranch','PatronBranch|OpacURLBranch','Decides which branch''s items to emphasize. If PatronBranch, emphasize the logged in user''s library''s items. If OpacURLBranch, highlight the items of the Apache var BRANCHCODE defined in Koha''s Apache configuration file.','Choice')
425
INSERT INTO systempreferences (variable,value,options,explanation,type) VALUES ('HighlightOwnItemsOnOPACWhich','PatronBranch','PatronBranch|OpacURLBranch','Decides which branch''s items to emphasize. If PatronBranch, emphasize the logged in user''s library''s items. If OpacURLBranch, highlight the items of the Apache var BRANCHCODE defined in Koha''s Apache configuration file.','Choice')
426
INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES('MaxHoldsPerRecord', '1', 'The maximum number of holds allowed per bibliographic record per borrower', NULL, NULL);
(-)a/installer/data/mysql/updatedatabase.pl (+6 lines)
Lines 6771-6776 if ( CheckVersion($DBversion) ) { Link Here
6771
   SetVersion ($DBversion);
6771
   SetVersion ($DBversion);
6772
}
6772
}
6773
6773
6774
$DBversion = "3.11.00.XXX";
6775
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
6776
    $dbh->do("INSERT IGNORE INTO systempreferences (variable,value,explanation,options,type) VALUES ('MaxHoldsPerRecord', '1', 'The maximum number of holds allowed per bibliographic record per borrower', NULL, NULL)");
6777
    print "Upgrade to $DBversion done (Add syspref MaxHoldsPerRecord)\n";
6778
    SetVersion ($DBversion);
6779
}
6774
6780
6775
=head1 FUNCTIONS
6781
=head1 FUNCTIONS
6776
6782
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref (-1 / +6 lines)
Lines 404-410 Circulation: Link Here
404
            - Patrons can only have
404
            - Patrons can only have
405
            - pref: maxreserves
405
            - pref: maxreserves
406
              class: integer
406
              class: integer
407
            - holds at once.
407
            - total holds at a time.
408
        -
409
            - Patrons can only place
410
            - pref: MaxHoldsPerRecord
411
              class: integer
412
            - holds on a single record at a time.
408
        -
413
        -
409
            - pref: emailLibrarianWhenHoldIsPlaced
414
            - pref: emailLibrarianWhenHoldIsPlaced
410
              choices:
415
              choices:
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-12 / +13 lines)
Lines 55-61 function check() { Link Here
55
    }
55
    }
56
56
57
    if (alreadyreserved > "0"){
57
    if (alreadyreserved > "0"){
58
		msg += (_("- This patron had already placed a hold on this item") + "\n" + _("Please cancel the previous hold first") + "\n");
58
         msg += (_("This patron has already placed the maximum number of holds for this record.") + "\n\n" + _("Please cancel a previous hold first.") + "\n");
59
    }
59
    }
60
60
61
	if (msg == "") return(true);
61
	if (msg == "") return(true);
Lines 208-214 function checkMultiHold() { Link Here
208
          <li><strong>Too Many Holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %] </a> has too many holds.</li>
208
          <li><strong>Too Many Holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %] </a> has too many holds.</li>
209
        [% END %]
209
        [% END %]
210
        [% IF ( alreadyreserved ) %]
210
        [% IF ( alreadyreserved ) %]
211
          <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %]</a> <strong>already has a hold</strong> on this item </li>
211
          <li><a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% borrowernumber %]">[% borrowerfirstname %] [% borrowersurname %]</a> <strong>has already placed the maximum allowed number of holds</strong> on this record</li>
212
        [% END %]
212
        [% END %]
213
        [% IF ( none_available ) %]
213
        [% IF ( none_available ) %]
214
          <li> <strong>No copies are available</strong> to be placed on hold</li>
214
          <li> <strong>No copies are available</strong> to be placed on hold</li>
Lines 564-569 function checkMultiHold() { Link Here
564
  [% FOREACH reserveloo IN biblioloo.reserveloop %]
564
  [% FOREACH reserveloo IN biblioloo.reserveloop %]
565
  [% UNLESS ( loop.odd ) %]<tr class="highlight">[% ELSE %]<tr>[% END %]
565
  [% UNLESS ( loop.odd ) %]<tr class="highlight">[% ELSE %]<tr>[% END %]
566
        <td>
566
        <td>
567
          <input type="hidden" name="reserve_id" value="[% reserveloo.reserve_id %]" />
567
          <input type="hidden" name="borrowernumber" value="[% reserveloo.borrowernumber %]" />
568
          <input type="hidden" name="borrowernumber" value="[% reserveloo.borrowernumber %]" />
568
          <input type="hidden" name="biblionumber" value="[% reserveloo.biblionumber %]" />
569
          <input type="hidden" name="biblionumber" value="[% reserveloo.biblionumber %]" />
569
          <select name="rank-request">
570
          <select name="rank-request">
Lines 583-601 function checkMultiHold() { Link Here
583
584
584
     [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
585
     [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
585
        <td style="white-space:nowrap;">
586
        <td style="white-space:nowrap;">
586
	        <a title="Move Hold Up" href="request.pl?action=move&amp;where=up&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]">
587
            <a title="Move Hold Up" href="request.pl?action=move&amp;where=up&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;reserve_id=[% reserveloo.reserve_id %]&amp;date=[% reserveloo.date %]">
587
            <img src="/intranet-tmpl/[% theme %]/img/go-up.png" border="0" alt="Go up" />
588
            <img src="/intranet-tmpl/[% theme %]/img/go-up.png" border="0" alt="Go up" />
588
                </a>
589
                </a>
589
590
590
        <a title="Move hold to top" href="request.pl?action=move&amp;where=top&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]">
591
                <a title="Move Hold To Top" href="request.pl?action=move&amp;where=top&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;reserve_id=[% reserveloo.reserve_id %]&amp;date=[% reserveloo.date %]">
591
                    <img src="/intranet-tmpl/[% theme %]/img/go-top.png" border="0" alt="Go top" />
592
                    <img src="/intranet-tmpl/[% theme %]/img/go-top.png" border="0" alt="Go top" />
592
                </a>
593
                </a>
593
594
594
                <a title="Move hold to bottom" href="request.pl?action=move&amp;where=bottom&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]">
595
                <a title="Move Hold To Bottom" href="request.pl?action=move&amp;where=bottom&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;reserve_id=[% reserveloo.reserve_id %]&amp;date=[% reserveloo.date %]">
595
                    <img src="/intranet-tmpl/[% theme %]/img/go-bottom.png" border="0" alt="Go bottom" />
596
                    <img src="/intranet-tmpl/[% theme %]/img/go-bottom.png" border="0" alt="Go bottom" />
596
                </a>
597
                </a>
597
598
598
                <a title="Move hold down" href="request.pl?action=move&amp;where=down&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]">
599
                <a title="Move Hold Down" href="request.pl?action=move&amp;where=down&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;reserve_id=[% reserveloo.reserve_id %]&amp;date=[% reserveloo.date %]">
599
                    <img src="/intranet-tmpl/[% theme %]/img/go-down.png" border="0" alt="Go down" />
600
                    <img src="/intranet-tmpl/[% theme %]/img/go-down.png" border="0" alt="Go down" />
600
                </a>
601
                </a>
601
        </td>
602
        </td>
Lines 675-681 function checkMultiHold() { Link Here
675
676
676
    [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
677
    [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
677
	<td>
678
	<td>
678
        <a title="Toggle lowest priority" href="request.pl?action=setLowestPriority&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]">
679
                <a title="Toggle Lowest Priority" href="request.pl?action=setLowestPriority&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;reserve_id=[% reserveloo.reserve_id %]&amp;date=[% reserveloo.date %]">
679
			[% IF ( reserveloo.lowestPriority ) %]
680
			[% IF ( reserveloo.lowestPriority ) %]
680
                        <img src="/intranet-tmpl/[% theme %]/img/go-bottom.png" border="0" alt="Unset Lowest Priority" />
681
                        <img src="/intranet-tmpl/[% theme %]/img/go-bottom.png" border="0" alt="Unset Lowest Priority" />
681
		        [% ELSE %]
682
		        [% ELSE %]
Lines 686-692 function checkMultiHold() { Link Here
686
    [% END %]
687
    [% END %]
687
688
688
	<td>
689
	<td>
689
        <a title="Cancel hold" href="request.pl?action=cancel&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]">
690
           <a title="Cancel Hold" href="request.pl?action=cancel&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;reserve_id=[% reserveloo.reserve_id %]&amp;date=[% reserveloo.date %]">
690
                    <img src="/intranet-tmpl/[% theme %]/img/x.png" border="0" alt="Cancel" />
691
                    <img src="/intranet-tmpl/[% theme %]/img/x.png" border="0" alt="Cancel" />
691
                </a>
692
                </a>
692
	</td>
693
	</td>
Lines 694-705 function checkMultiHold() { Link Here
694
        [% IF SuspendHoldsIntranet %]
695
        [% IF SuspendHoldsIntranet %]
695
	<td>
696
	<td>
696
	[% UNLESS ( reserveloo.wait ) %]
697
	[% UNLESS ( reserveloo.wait ) %]
697
            <input type="button" value="[% IF ( reserveloo.suspend ) %]Unsuspend[% ELSE %]Suspend[% END %]" onclick="window.location.href='request.pl?action=toggleSuspend&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]&amp;suspend_until=' + $('#suspend_until_[% reserveloo.borrowernumber %]').val()" />
698
            <input type="button" value="[% IF ( reserveloo.suspend ) %]Unsuspend[% ELSE %]Suspend[% END %]" onclick="window.location.href='request.pl?action=toggleSuspend&amp;reserve_id=[% reserveloo.reserve_id %]&amp;borrowernumber=[% reserveloo.borrowernumber %]&amp;biblionumber=[% reserveloo.biblionumber %]&amp;date=[% reserveloo.date %]&amp;suspend_until=' + $('#suspend_until_[% reserveloo.reserve_id %]').val()" />
698
699
699
            [% IF AutoResumeSuspendedHolds %]
700
            [% IF AutoResumeSuspendedHolds %]
700
	    <label for="suspend_until_[% reserveloo.borrowernumber %]">[% IF ( reserveloo.suspend ) %] on [% ELSE %] until [% END %]</label>
701
        <label for="suspend_until_[% reserveloo.reserve_id %]">[% IF ( reserveloo.suspend ) %] on [% ELSE %] until [% END %]</label>
701
        <input name="suspend_until" id="suspend_until_[% reserveloo.borrowernumber %]" size="10" readonly="readonly" value="[% reserveloo.suspend_until | $KohaDates %]" class="datepicker" />
702
            <input name="suspend_until" id="suspend_until_[% reserveloo.reserve_id %]" size="10" readonly="readonly" value="[% reserveloo.suspend_until | $KohaDates %]" class="datepicker" />
702
	    <a href='#' onclick="document.getElementById('suspend_until_[% reserveloo.borrowernumber %]').value='';">Clear Date</a>
703
            <a href='#' onclick="document.getElementById('suspend_until_[% reserveloo.reserve_id %]').value='';">Clear Date</a>
703
            [% END %]
704
            [% END %]
704
	[% ELSE %]
705
	[% ELSE %]
705
		<input type="hidden" name="suspend_until" value="" />
706
		<input type="hidden" name="suspend_until" value="" />
(-)a/koha-tmpl/opac-tmpl/prog/en/modules/opac-reserve.tt (-1 / +5 lines)
Lines 296-302 Link Here
296
                            [% IF ( bibitemloo.already_patron_possession ) %]
296
                            [% IF ( bibitemloo.already_patron_possession ) %]
297
                                <div class="bibmessage">This title cannot be requested because it's already in your possession.</div>
297
                                <div class="bibmessage">This title cannot be requested because it's already in your possession.</div>
298
                            [% ELSE %]
298
                            [% ELSE %]
299
                                <div class="bibmessage">This title cannot be requested.</div>
299
                                [% IF bibitemloo.max_holds %]
300
                                    <div class="bibmessage">This title cannot be requested. You have already placed the maximum number of requests allowed for this title.</div>
301
                                [% ELSE %]
302
                                    <div class="bibmessage">This title cannot be requested.</div>
303
                                [% END %]
300
                            [% END %]
304
                            [% END %]
301
                          [% END %]
305
                          [% END %]
302
                        [% END %]
306
                        [% END %]
(-)a/opac/opac-reserve.pl (-11 / +18 lines)
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 532-537 foreach my $biblioNum (@biblionumbers) { Link Here
532
        $biblioLoopIter{holdable} = undef;
534
        $biblioLoopIter{holdable} = undef;
533
        $anyholdable = undef;
535
        $anyholdable = undef;
534
    }
536
    }
537
    if ($biblioLoopIter{holds_count} >= $max_holds_per_record) {
538
        $biblioLoopIter{holdable} = undef;
539
        $anyholdable = undef;
540
        $biblioLoopIter{max_holds} = 1;
541
    }
535
    if(not CanBookBeReserved($borrowernumber,$biblioNum)){
542
    if(not CanBookBeReserved($borrowernumber,$biblioNum)){
536
        $biblioLoopIter{holdable} = undef;
543
        $biblioLoopIter{holdable} = undef;
537
        $anyholdable = undef;
544
        $anyholdable = undef;
(-)a/reserve/request.pl (-2 / +8 lines)
Lines 209-214 if ($borrowerslist) { Link Here
209
209
210
# FIXME launch another time GetMember perhaps until
210
# FIXME launch another time GetMember perhaps until
211
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
211
my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold );
212
my $max_holds_per_record = C4::Context->preference('MaxHoldsPerRecord');
212
213
213
my @biblionumbers = ();
214
my @biblionumbers = ();
214
my $biblionumbers = $input->param('biblionumbers');
215
my $biblionumbers = $input->param('biblionumbers');
Lines 254-260 foreach my $biblionumber (@biblionumbers) { Link Here
254
        }
255
        }
255
    }
256
    }
256
257
257
    if ( $holds_count ) {
258
    if ( $holds_count >= $max_holds_per_record ) {
258
            $alreadyreserved = 1;
259
            $alreadyreserved = 1;
259
            $warnings = 1;
260
            $warnings = 1;
260
            $biblioloopiter{warn} = 1;
261
            $biblioloopiter{warn} = 1;
Lines 482-487 foreach my $biblionumber (@biblionumbers) { Link Here
482
                $itemdata_enumchron = 1;
483
                $itemdata_enumchron = 1;
483
            }
484
            }
484
485
486
            # Don't allow multiple item level holds on the same item if borrowers can place multiple holds on one bib
487
            if ( GetReservesFromBorrowernumber( $borrowerinfo->{borrowernumber}, undef, undef, $itemnumber) ) {
488
                $item->{available} = 0;
489
                $item->{override} = 0;
490
            }
491
485
            push @{ $biblioitem->{itemloop} }, $item;
492
            push @{ $biblioitem->{itemloop} }, $item;
486
        }
493
        }
487
494
488
- 

Return to bug 7710