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

(-)a/C4/Circulation.pm (-41 / +47 lines)
Lines 2667-2719 sub CanBookBeRenewed { Link Here
2667
    {
2667
    {
2668
        my $schema = Koha::Database->new()->schema();
2668
        my $schema = Koha::Database->new()->schema();
2669
2669
2670
        # Get all other items that could possibly fill reserves
2670
        my $item_holds = $schema->resultset('Reserve')->search( { itemnumber => $itemnumber, found => undef } )->count();
2671
        my @itemnumbers = $schema->resultset('Item')->search(
2671
        if ($item_holds) {
2672
            {
2672
            # There is an item level hold on this item, no other item can fill the hold
2673
                biblionumber => $resrec->{biblionumber},
2673
            $resfound = 1;
2674
                onloan       => undef,
2675
                -not         => { itemnumber => $itemnumber }
2676
            },
2677
            { columns => 'itemnumber' }
2678
        )->get_column('itemnumber')->all();
2679
2680
        # Get all other reserves that could have been filled by this item
2681
        my @borrowernumbers;
2682
        while (1) {
2683
            my ( $reserve_found, $reserve, undef ) =
2684
              C4::Reserves::CheckReserves( $itemnumber, undef, undef,
2685
                \@borrowernumbers );
2686
2687
            if ($reserve_found) {
2688
                push( @borrowernumbers, $reserve->{borrowernumber} );
2689
            }
2690
            else {
2691
                last;
2692
            }
2693
        }
2674
        }
2675
        else {
2694
2676
2695
        # If the count of the union of the lists of reservable items for each borrower
2677
            # Get all other items that could possibly fill reserves
2696
        # is equal or greater than the number of borrowers, we know that all reserves
2678
            my @itemnumbers = $schema->resultset('Item')->search(
2697
        # can be filled with available items. We can get the union of the sets simply
2698
        # by pushing all the elements onto an array and removing the duplicates.
2699
        my @reservable;
2700
        foreach my $b (@borrowernumbers) {
2701
            my ( $borr ) = C4::Members::GetMemberDetails( $b );
2702
            foreach my $i (@itemnumbers) {
2703
                my $item   = GetItem($i);
2704
                if (   IsAvailableForItemLevelRequest($item, $borr)
2705
                    && CanItemBeReserved( $b, $i )
2706
                    && !IsItemOnHoldAndFound($i) )
2707
                {
2679
                {
2708
                    push( @reservable, $i );
2680
                    biblionumber => $resrec->{biblionumber},
2681
                    onloan       => undef,
2682
                    -not         => { itemnumber => $itemnumber }
2683
                },
2684
                { columns => 'itemnumber' }
2685
            )->get_column('itemnumber')->all();
2686
2687
            # Get all other reserves that could have been filled by this item
2688
            my @borrowernumbers;
2689
            while (1) {
2690
                my ( $reserve_found, $reserve, undef ) =
2691
                  C4::Reserves::CheckReserves( $itemnumber, undef, undef, \@borrowernumbers );
2692
2693
                if ($reserve_found) {
2694
                    push( @borrowernumbers, $reserve->{borrowernumber} );
2695
                }
2696
                else {
2697
                    last;
2698
                }
2699
            }
2700
2701
            # If the count of the union of the lists of reservable items for each borrower
2702
            # is equal or greater than the number of borrowers, we know that all reserves
2703
            # can be filled with available items. We can get the union of the sets simply
2704
            # by pushing all the elements onto an array and removing the duplicates.
2705
            my @reservable;
2706
            foreach my $b (@borrowernumbers) {
2707
                my ($borr) = C4::Members::GetMemberDetails($b);
2708
                foreach my $i (@itemnumbers) {
2709
                    my $item = GetItem($i);
2710
                    if (   IsAvailableForItemLevelRequest( $item, $borr )
2711
                        && CanItemBeReserved( $b, $i )
2712
                        && !IsItemOnHoldAndFound($i) )
2713
                    {
2714
                        push( @reservable, $i );
2715
                    }
2709
                }
2716
                }
2710
            }
2717
            }
2711
        }
2712
2718
2713
        @reservable = uniq(@reservable);
2719
            @reservable = uniq(@reservable);
2714
2720
2715
        if ( @reservable >= @borrowernumbers ) {
2721
            if ( @reservable >= @borrowernumbers ) {
2716
            $resfound = 0;
2722
                $resfound = 0;
2723
            }
2717
        }
2724
        }
2718
    }
2725
    }
2719
2726
2720
- 

Return to bug 13919