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

(-)a/C4/Reserves.pm (-2 / +22 lines)
Lines 335-343 sub CanBookBeReserved{ Link Here
335
    }
335
    }
336
336
337
    my $canReserve = { status => '' };
337
    my $canReserve = { status => '' };
338
    my ($rights,$item);
339
338
    foreach my $itemnumber (@itemnumbers) {
340
    foreach my $itemnumber (@itemnumbers) {
339
        $canReserve = CanItemBeReserved( $borrowernumber, $itemnumber, $pickup_branchcode, $params );
341
        $canReserve = CanItemBeReserved( $borrowernumber, $itemnumber, $pickup_branchcode, $params );
342
        my $opacitemholds = $canReserve->{rights}->{opacitemholds} // 'Y';
343
        return { status => 'recordHoldNotAllowed' } if $opacitemholds eq 'F';
340
        return { status => 'OK' } if $canReserve->{status} eq 'OK';
344
        return { status => 'OK' } if $canReserve->{status} eq 'OK';
345
        return { status => 'OK' } if $canReserve->{status} eq 'recordHoldsOnly';
341
    }
346
    }
342
    return $canReserve;
347
    return $canReserve;
343
}
348
}
Lines 381-386 sub CanItemBeReserved { Link Here
381
    my $biblio     = $item->biblio;
386
    my $biblio     = $item->biblio;
382
    my $patron = Koha::Patrons->find( $borrowernumber );
387
    my $patron = Koha::Patrons->find( $borrowernumber );
383
    my $borrower = $patron->unblessed;
388
    my $borrower = $patron->unblessed;
389
    my $context = $params->{context} // '';
384
390
385
    # If an item is damaged and we don't allow holds on damaged items, we can stop right here
391
    # If an item is damaged and we don't allow holds on damaged items, we can stop right here
386
    return { status =>'damaged' }
392
    return { status =>'damaged' }
Lines 445-454 sub CanItemBeReserved { Link Here
445
        categorycode => $borrower->{'categorycode'},
451
        categorycode => $borrower->{'categorycode'},
446
        itemtype     => $item->effective_itemtype,
452
        itemtype     => $item->effective_itemtype,
447
        branchcode   => $branchcode,
453
        branchcode   => $branchcode,
448
        rules        => ['holds_per_record','holds_per_day']
454
        rules        => ['holds_per_record','holds_per_day','opacitemholds']
449
    });
455
    });
450
    my $holds_per_record = $rights->{holds_per_record} // 1;
456
    my $holds_per_record = $rights->{holds_per_record} // 1;
451
    my $holds_per_day    = $rights->{holds_per_day};
457
    my $holds_per_day    = $rights->{holds_per_day};
458
    my $opacitemholds    = $rights->{opacitemholds} // 'Y';
452
459
453
    my $search_params = {
460
    my $search_params = {
454
        borrowernumber => $borrowernumber,
461
        borrowernumber => $borrowernumber,
Lines 466-471 sub CanItemBeReserved { Link Here
466
        }
473
        }
467
    }
474
    }
468
475
476
    $item = Koha::Items->find( $itemnumber );
477
478
    $holds = Koha::Holds->search(
479
        {
480
            borrowernumber => $borrowernumber,
481
            biblionumber   => $item->biblionumber,
482
        }
483
    );
484
469
    my $today_holds = Koha::Holds->search({
485
    my $today_holds = Koha::Holds->search({
470
        borrowernumber => $borrowernumber,
486
        borrowernumber => $borrowernumber,
471
        reservedate    => dt_from_string->date
487
        reservedate    => dt_from_string->date
Lines 585-591 sub CanItemBeReserved { Link Here
585
        }
601
        }
586
    }
602
    }
587
603
588
    return { status => 'OK' };
604
    if ( $opacitemholds eq "N" && $context ne 'staff') {
605
        return { status => "recordHoldsOnly", right => $rights };
606
    }
607
608
    return { status => 'OK', rights => $rights };
589
}
609
}
590
610
591
=head2 CanReserveBeCanceledFromOpac
611
=head2 CanReserveBeCanceledFromOpac
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-2 / +5 lines)
Lines 333-339 Link Here
333
                    </div>
333
                    </div>
334
                [% END %]
334
                [% END %]
335
335
336
                [% IF ( no_reserves_allowed || exceeded_maxreserves || exceeded_holds_per_record || alreadyreserved || none_available || alreadypossession || ageRestricted ) %]
336
                [% IF ( no_reserves_allowed || exceeded_maxreserves || exceeded_holds_per_record || alreadyreserved || none_available || alreadypossession || ageRestricted || recordHoldNotAllowed ) %]
337
                    <div class="dialog alert">
337
                    <div class="dialog alert">
338
338
339
                        [% UNLESS ( multi_hold ) %]
339
                        [% UNLESS ( multi_hold ) %]
Lines 355-361 Link Here
355
                                    <li> <strong>No items are available</strong> to be placed on hold.</li>
355
                                    <li> <strong>No items are available</strong> to be placed on hold.</li>
356
                                [% ELSIF ( maxreserves ) %]
356
                                [% ELSIF ( maxreserves ) %]
357
                                    <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> has too many holds.</li>
357
                                    <li><strong>Too many holds: </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> has too many holds.</li>
358
                                [% ELSIF ( recordHoldNotAllowed ) %]
359
                                    <li><strong>Record holds not allowed : </strong> <a href="/cgi-bin/koha/members/moremember.pl?borrowernumber=[% patron.borrowernumber | uri %]">[% patron.firstname | html %] [% patron.surname | html %] </a> cannot put a record-level hold on this ressource.</li>
358
                                [% END # /IF exceeded_maxreserves %]
360
                                [% END # /IF exceeded_maxreserves %]
361
359
                            </ul>
362
                            </ul>
360
                        [% ELSE # UNLESS multi_hold %]
363
                        [% ELSE # UNLESS multi_hold %]
361
                            <h3>Cannot place hold on some items</h3>
364
                            <h3>Cannot place hold on some items</h3>
Lines 531-537 Link Here
531
                                [% IF ( patron.borrowernumber ) %]
534
                                [% IF ( patron.borrowernumber ) %]
532
                                    [% IF ( override_required ) %]
535
                                    [% IF ( override_required ) %]
533
                                        <button type="submit" class="btn btn-default warning"><i class="fa fa-exclamation-triangle "></i> Place hold</button>
536
                                        <button type="submit" class="btn btn-default warning"><i class="fa fa-exclamation-triangle "></i> Place hold</button>
534
                                    [% ELSIF ( none_available ) %]
537
                                    [% ELSIF ( none_available || recordHoldNotAllowed ) %]
535
                                        <button type="submit" disabled="disabled" class="btn btn-default btn-disabled">Place hold</button>
538
                                        <button type="submit" disabled="disabled" class="btn btn-default btn-disabled">Place hold</button>
536
                                    [% ELSE %]
539
                                    [% ELSE %]
537
                                        <button type="submit" class="btn btn-default">Place hold</button>
540
                                        <button type="submit" class="btn btn-default">Place hold</button>
(-)a/reserve/placerequest.pl (-2 / +2 lines)
Lines 100-106 if ( $type eq 'str8' && $borrower ) { Link Here
100
                $biblionumber = $item->biblionumber;
100
                $biblionumber = $item->biblionumber;
101
            }
101
            }
102
102
103
            my $can_item_be_reserved = CanItemBeReserved($borrower->{'borrowernumber'}, $item->itemnumber, $branch)->{status};
103
            my $can_item_be_reserved = CanItemBeReserved($borrower->{'borrowernumber'}, $item->itemnumber, $branch, { context => 'staff' })->{status};
104
104
105
            if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) {
105
            if ( $can_item_be_reserved eq 'OK' || ( $can_item_be_reserved ne 'itemAlreadyOnHold' && $can_override ) ) {
106
                AddReserve(
106
                AddReserve(
Lines 145-151 if ( $type eq 'str8' && $borrower ) { Link Here
145
        } else {
145
        } else {
146
            # place a request on 1st available
146
            # place a request on 1st available
147
            for ( my $i = 0 ; $i < $holds_to_place_count ; $i++ ) {
147
            for ( my $i = 0 ; $i < $holds_to_place_count ; $i++ ) {
148
                if ( $can_override || CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber)->{status} eq 'OK' ) {
148
                if ( $can_override || CanBookBeReserved($borrower->{'borrowernumber'}, $biblionumber, undef, { context => 'staff' })->{status} eq 'OK' ) {
149
                    AddReserve(
149
                    AddReserve(
150
                        {
150
                        {
151
                            branchcode       => $branch,
151
                            branchcode       => $branch,
(-)a/reserve/request.pl (-1 / +4 lines)
Lines 337-342 foreach my $biblionumber (@biblionumbers) { Link Here
337
                $template->param( $canReserve->{status} => 1);
337
                $template->param( $canReserve->{status} => 1);
338
                $biblioloopiter{ $canReserve->{status} } = 1;
338
                $biblioloopiter{ $canReserve->{status} } = 1;
339
            }
339
            }
340
            elsif ( $canReserve->{status} eq 'recordHoldNotAllowed' ) {
341
                $template->param( $canReserve->{status} => 1 );
342
                $biblioloopiter{ $canReserve->{status} } = 1;
343
            }
340
            else {
344
            else {
341
                $biblioloopiter{ $canReserve->{status} } = 1;
345
                $biblioloopiter{ $canReserve->{status} } = 1;
342
            }
346
            }
343
- 

Return to bug 25408