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

(-)a/C4/Circulation.pm (-55 / +51 lines)
Lines 2753-2805 sub CanBookBeRenewed { Link Here
2753
2753
2754
    my $patron = $issue->patron or return;
2754
    my $patron = $issue->patron or return;
2755
2755
2756
    # override_limit will override anything else except on_reserve
2757
    unless ( $override_limit ){
2758
        my $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed );
2759
        my $issuing_rule = Koha::CirculationRules->get_effective_rules(
2760
            {
2761
                categorycode => $patron->categorycode,
2762
                itemtype     => $item->effective_itemtype,
2763
                branchcode   => $branchcode,
2764
                rules => [
2765
                    'renewalsallowed',
2766
                    'lengthunit',
2767
                    'unseen_renewals_allowed'
2768
                ]
2769
            }
2770
        );
2771
2772
        return ( 0, "too_many" )
2773
          if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
2774
2775
        return ( 0, "too_unseen" )
2776
          if C4::Context->preference('UnseenRenewals') &&
2777
            $issuing_rule->{unseen_renewals_allowed} &&
2778
            $issuing_rule->{unseen_renewals_allowed} <= $issue->unseen_renewals;
2779
2780
        my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
2781
        my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
2782
        $patron         = Koha::Patrons->find($borrowernumber); # FIXME Is this really useful?
2783
        my $restricted  = $patron->is_debarred;
2784
        my $hasoverdues = $patron->has_overdues;
2785
2786
        if ( $restricted and $restrictionblockrenewing ) {
2787
            return ( 0, 'restriction');
2788
        } elsif ( ($hasoverdues and $overduesblockrenewing eq 'block') || ($issue->is_overdue and $overduesblockrenewing eq 'blockitem') ) {
2789
            return ( 0, 'overdue');
2790
        }
2791
2792
        $auto_renew = _CanBookBeAutoRenewed({
2793
            patron     => $patron,
2794
            item       => $item,
2795
            branchcode => $branchcode,
2796
            issue      => $issue
2797
        });
2798
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_account_expired';
2799
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_late';
2800
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_much_oweing';
2801
    }
2802
2803
    my ( $resfound, $resrec, $possible_reserves ) = C4::Reserves::CheckReserves($itemnumber);
2756
    my ( $resfound, $resrec, $possible_reserves ) = C4::Reserves::CheckReserves($itemnumber);
2804
2757
2805
    # If next hold is non priority, then check if any hold with priority (non_priority = 0) exists for the same biblionumber.
2758
    # If next hold is non priority, then check if any hold with priority (non_priority = 0) exists for the same biblionumber.
Lines 2858-2872 sub CanBookBeRenewed { Link Here
2858
            }
2811
            }
2859
        }
2812
        }
2860
    }
2813
    }
2861
    if( $cron ) { #The cron wants to return 'too_soon' over 'on_reserve'
2814
    #The cron wants to return 'too_soon' over 'on_reserve'
2862
        return ( 0, $auto_renew  ) if $auto_renew =~ 'too_soon';#$auto_renew ne "no" && $auto_renew ne "ok";
2815
    return ( 0, "on_reserve" ) if $resfound && !$cron;
2863
        return ( 0, "on_reserve" ) if $resfound;    # '' when no hold was found
2816
2864
    } else { # For other purposes we want 'on_reserve' before 'too_soon'
2817
    # override_limit will override anything else except on_reserve
2865
        return ( 0, "on_reserve" ) if $resfound;    # '' when no hold was found
2818
    unless ( $override_limit ){
2866
        return ( 0, $auto_renew  ) if $auto_renew =~ 'too_soon';#$auto_renew ne "no" && $auto_renew ne "ok";
2819
        my $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed );
2820
        my $issuing_rule = Koha::CirculationRules->get_effective_rules(
2821
            {
2822
                categorycode => $patron->categorycode,
2823
                itemtype     => $item->effective_itemtype,
2824
                branchcode   => $branchcode,
2825
                rules => [
2826
                    'renewalsallowed',
2827
                    'lengthunit',
2828
                    'unseen_renewals_allowed'
2829
                ]
2830
            }
2831
        );
2832
2833
        return ( 0, "too_many" )
2834
          if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
2835
2836
        return ( 0, "too_unseen" )
2837
          if C4::Context->preference('UnseenRenewals') &&
2838
            $issuing_rule->{unseen_renewals_allowed} &&
2839
            $issuing_rule->{unseen_renewals_allowed} <= $issue->unseen_renewals;
2840
2841
        my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
2842
        my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
2843
        $patron         = Koha::Patrons->find($borrowernumber); # FIXME Is this really useful?
2844
        my $restricted  = $patron->is_debarred;
2845
        my $hasoverdues = $patron->has_overdues;
2846
2847
        if ( $restricted and $restrictionblockrenewing ) {
2848
            return ( 0, 'restriction');
2849
        } elsif ( ($hasoverdues and $overduesblockrenewing eq 'block') || ($issue->is_overdue and $overduesblockrenewing eq 'blockitem') ) {
2850
            return ( 0, 'overdue');
2851
        }
2852
2853
        $auto_renew = _CanBookBeAutoRenewed({
2854
            patron     => $patron,
2855
            item       => $item,
2856
            branchcode => $branchcode,
2857
            issue      => $issue
2858
        });
2859
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_account_expired';
2860
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_late';
2861
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_much_oweing';
2867
    }
2862
    }
2868
2863
2869
    return ( 0, "auto_renew" ) if $auto_renew eq "ok" && !$override_limit; # 0 if auto-renewal should not succeed
2864
    return ( 0, $auto_renew  ) if $auto_renew =~ 'too_soon';#$auto_renew ne "no" && $auto_renew ne "ok";
2865
    return ( 0, "on_reserve" ) if $resfound;    # '' when no hold was found
2866
    return ( 0, "auto_renew" ) if $auto_renew eq "ok"; # 0 if auto-renewal should not succeed
2870
2867
2871
    return ( 1, undef );
2868
    return ( 1, undef );
2872
}
2869
}
2873
- 

Return to bug 26440