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

(-)a/C4/Circulation.pm (-113 / +5 lines)
Lines 2709-2714 sub CanBookBeRenewed { Link Here
2709
        return ( 0, "too_many" )
2709
        return ( 0, "too_many" )
2710
          if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
2710
          if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
2711
2711
2712
        return ( 0, "too_unseen" )
2713
          if C4::Context->preference('UnseenRenewals') &&
2714
            $issuing_rule->{unseen_renewals_allowed} &&
2715
            $issuing_rule->{unseen_renewals_allowed} <= $issue->unseen_renewals;
2716
2712
        my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
2717
        my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
2713
        my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
2718
        my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
2714
        $patron         = Koha::Patrons->find($borrowernumber); # FIXME Is this really useful?
2719
        $patron         = Koha::Patrons->find($borrowernumber); # FIXME Is this really useful?
Lines 2880-2997 sub CanBookBeRenewed { Link Here
2880
2885
2881
    return ( 0, "auto_renew" ) if $auto_renew eq "ok" && !$override_limit; # 0 if auto-renewal should not succeed
2886
    return ( 0, "auto_renew" ) if $auto_renew eq "ok" && !$override_limit; # 0 if auto-renewal should not succeed
2882
2887
2883
    return ( 1, undef ) if $override_limit;
2884
2885
    my $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed );
2886
    my $issuing_rule = Koha::CirculationRules->get_effective_rules(
2887
        {
2888
            categorycode => $patron->categorycode,
2889
            itemtype     => $item->effective_itemtype,
2890
            branchcode   => $branchcode,
2891
            rules => [
2892
                'renewalsallowed',
2893
                'no_auto_renewal_after',
2894
                'no_auto_renewal_after_hard_limit',
2895
                'lengthunit',
2896
                'norenewalbefore',
2897
                'unseen_renewals_allowed'
2898
            ]
2899
        }
2900
    );
2901
2902
    return ( 0, "too_many" )
2903
      if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
2904
2905
    return ( 0, "too_unseen" )
2906
      if C4::Context->preference('UnseenRenewals') &&
2907
        $issuing_rule->{unseen_renewals_allowed} &&
2908
        $issuing_rule->{unseen_renewals_allowed} <= $issue->unseen_renewals;
2909
2910
    my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing');
2911
    my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing');
2912
    $patron         = Koha::Patrons->find($borrowernumber); # FIXME Is this really useful?
2913
    my $restricted  = $patron->is_debarred;
2914
    my $hasoverdues = $patron->has_overdues;
2915
2916
    if ( $restricted and $restrictionblockrenewing ) {
2917
        return ( 0, 'restriction');
2918
    } elsif ( ($hasoverdues and $overduesblockrenewing eq 'block') || ($issue->is_overdue and $overduesblockrenewing eq 'blockitem') ) {
2919
        return ( 0, 'overdue');
2920
    }
2921
2922
    if ( $issue->auto_renew ) {
2923
2924
        if ( $patron->category->effective_BlockExpiredPatronOpacActions and $patron->is_expired ) {
2925
            return ( 0, 'auto_account_expired' );
2926
        }
2927
2928
        if ( defined $issuing_rule->{no_auto_renewal_after}
2929
                and $issuing_rule->{no_auto_renewal_after} ne "" ) {
2930
            # Get issue_date and add no_auto_renewal_after
2931
            # If this is greater than today, it's too late for renewal.
2932
            my $maximum_renewal_date = dt_from_string($issue->issuedate, 'sql');
2933
            $maximum_renewal_date->add(
2934
                $issuing_rule->{lengthunit} => $issuing_rule->{no_auto_renewal_after}
2935
            );
2936
            my $now = dt_from_string;
2937
            if ( $now >= $maximum_renewal_date ) {
2938
                return ( 0, "auto_too_late" );
2939
            }
2940
        }
2941
        if ( defined $issuing_rule->{no_auto_renewal_after_hard_limit}
2942
                      and $issuing_rule->{no_auto_renewal_after_hard_limit} ne "" ) {
2943
            # If no_auto_renewal_after_hard_limit is >= today, it's also too late for renewal
2944
            if ( dt_from_string >= dt_from_string( $issuing_rule->{no_auto_renewal_after_hard_limit} ) ) {
2945
                return ( 0, "auto_too_late" );
2946
            }
2947
        }
2948
2949
        if ( C4::Context->preference('OPACFineNoRenewalsBlockAutoRenew') ) {
2950
            my $fine_no_renewals = C4::Context->preference("OPACFineNoRenewals");
2951
            my $amountoutstanding =
2952
              C4::Context->preference("OPACFineNoRenewalsIncludeCredit")
2953
              ? $patron->account->balance
2954
              : $patron->account->outstanding_debits->total_outstanding;
2955
            if ( $amountoutstanding and $amountoutstanding > $fine_no_renewals ) {
2956
                return ( 0, "auto_too_much_oweing" );
2957
            }
2958
        }
2959
    }
2960
2961
    if ( defined $issuing_rule->{norenewalbefore}
2962
        and $issuing_rule->{norenewalbefore} ne "" )
2963
    {
2964
2965
        # Calculate soonest renewal by subtracting 'No renewal before' from due date
2966
        my $soonestrenewal = dt_from_string( $issue->date_due, 'sql' )->subtract(
2967
            $issuing_rule->{lengthunit} => $issuing_rule->{norenewalbefore} );
2968
2969
        # Depending on syspref reset the exact time, only check the date
2970
        if ( C4::Context->preference('NoRenewalBeforePrecision') eq 'date'
2971
            and $issuing_rule->{lengthunit} eq 'days' )
2972
        {
2973
            $soonestrenewal->truncate( to => 'day' );
2974
        }
2975
2976
        if ( $soonestrenewal > dt_from_string() )
2977
        {
2978
            return ( 0, "auto_too_soon" ) if $issue->auto_renew;
2979
            return ( 0, "too_soon" );
2980
        }
2981
        elsif ( $issue->auto_renew ) {
2982
            return ( 0, "auto_renew" );
2983
        }
2984
    }
2985
2986
    # Fallback for automatic renewals:
2987
    # If norenewalbefore is undef, don't renew before due date.
2988
    if ( $issue->auto_renew ) {
2989
        my $now = dt_from_string;
2990
        return ( 0, "auto_renew" )
2991
          if $now >= dt_from_string( $issue->date_due, 'sql' );
2992
        return ( 0, "auto_too_soon" );
2993
    }
2994
2995
    return ( 1, undef );
2888
    return ( 1, undef );
2996
}
2889
}
2997
2890
2998
- 

Return to bug 24083