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

(-)a/C4/Circulation.pm (-31 / +23 lines)
Lines 2752-2758 sub CanBookBeRenewed { Link Here
2752
    return ( 0, 'item_denied_renewal') if _item_denied_renewal({ item => $item });
2752
    return ( 0, 'item_denied_renewal') if _item_denied_renewal({ item => $item });
2753
2753
2754
    my $patron = $issue->patron or return;
2754
    my $patron = $issue->patron or return;
2755
2755
    my $soonest_renew_date;
2756
    # override_limit will override anything else except on_reserve
2756
    # override_limit will override anything else except on_reserve
2757
    unless ( $override_limit ){
2757
    unless ( $override_limit ){
2758
        my $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed );
2758
        my $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed );
Lines 2764-2773 sub CanBookBeRenewed { Link Here
2764
                rules => [
2764
                rules => [
2765
                    'renewalsallowed',
2765
                    'renewalsallowed',
2766
                    'lengthunit',
2766
                    'lengthunit',
2767
                    'unseen_renewals_allowed'
2767
                    'unseen_renewals_allowed',
2768
                    'no_auto_renewal_after',
2769
                    'no_auto_renewal_after_hard_limit',
2770
                    'norenewalbefore'
2768
                ]
2771
                ]
2769
            }
2772
            }
2770
        );
2773
        );
2774
        $soonest_renew_date = GetSoonestRenewDate($borrowernumber, $itemnumber, $branchcode, $issuing_rule);
2771
2775
2772
        return ( 0, "too_many" )
2776
        return ( 0, "too_many" )
2773
          if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
2777
          if not $issuing_rule->{renewalsallowed} or $issuing_rule->{renewalsallowed} <= $issue->renewals;
Lines 2789-2800 sub CanBookBeRenewed { Link Here
2789
            return ( 0, 'overdue');
2793
            return ( 0, 'overdue');
2790
        }
2794
        }
2791
2795
2796
2792
        $auto_renew = _CanBookBeAutoRenewed({
2797
        $auto_renew = _CanBookBeAutoRenewed({
2793
            patron     => $patron,
2798
            patron     => $patron,
2794
            item       => $item,
2799
            item       => $item,
2795
            branchcode => $branchcode,
2800
            branchcode => $branchcode,
2796
            issue      => $issue
2801
            issue      => $issue,
2797
        });
2802
            issuing_rule => $issuing_rule,
2803
            soonest    => $soonest_renew_date
2804
        }) if $issue->auto_renew && $patron->autorenew_checkouts;
2805
2798
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_soon' && $cron;
2806
        return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_soon' && $cron;
2799
        # cron wants 'too_soon' over 'on_reserve' for performance and to avoid
2807
        # cron wants 'too_soon' over 'on_reserve' for performance and to avoid
2800
        # extra notices being sent. Cron also implies no override
2808
        # extra notices being sent. Cron also implies no override
Lines 2863-2874 sub CanBookBeRenewed { Link Here
2863
    }
2871
    }
2864
2872
2865
    return ( 0, "on_reserve" ) if $resfound;    # '' when no hold was found
2873
    return ( 0, "on_reserve" ) if $resfound;    # '' when no hold was found
2866
    return ( 0, $auto_renew  ) if $auto_renew =~ 'too_soon';#$auto_renew ne "no" && $auto_renew ne "ok";
2874
    return ( 0, $auto_renew  ) if $auto_renew =~ 'auto_too_soon';
2867
    if ( GetSoonestRenewDate($borrowernumber, $itemnumber) > dt_from_string() ){
2875
    return (0, "too_soon") if !$override_limit && $soonest_renew_date > dt_from_string();
2868
        return (0, "too_soon") unless $override_limit;
2869
    }
2870
2876
2871
    return ( 0, "auto_renew" ) if $auto_renew eq "ok" && !$override_limit; # 0 if auto-renewal should not succeed
2877
    return ( 0, "auto_renew" ) if $auto_renew eq "ok";
2878
    # scheduled for automatic renewal, if overridden auto_renew is 'no'
2872
2879
2873
    return ( 1, undef );
2880
    return ( 1, undef );
2874
}
2881
}
Lines 3161-3167 cannot be found. Link Here
3161
=cut
3168
=cut
3162
3169
3163
sub GetSoonestRenewDate {
3170
sub GetSoonestRenewDate {
3164
    my ( $borrowernumber, $itemnumber ) = @_;
3171
    my ( $borrowernumber, $itemnumber, $branchcode, $issuing_rule ) = @_;
3165
3172
3166
    my $dbh = C4::Context->dbh;
3173
    my $dbh = C4::Context->dbh;
3167
3174
Lines 3172-3179 sub GetSoonestRenewDate { Link Here
3172
    my $patron = Koha::Patrons->find( $borrowernumber )
3179
    my $patron = Koha::Patrons->find( $borrowernumber )
3173
      or return;
3180
      or return;
3174
3181
3175
    my $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed );
3182
    $branchcode = _GetCircControlBranch( $item->unblessed, $patron->unblessed ) unless $branchcode;
3176
    my $issuing_rule = Koha::CirculationRules->get_effective_rules(
3183
    $issuing_rule = Koha::CirculationRules->get_effective_rules(
3177
        {   categorycode => $patron->categorycode,
3184
        {   categorycode => $patron->categorycode,
3178
            itemtype     => $item->effective_itemtype,
3185
            itemtype     => $item->effective_itemtype,
3179
            branchcode   => $branchcode,
3186
            branchcode   => $branchcode,
Lines 3182-3188 sub GetSoonestRenewDate { Link Here
3182
                'lengthunit',
3189
                'lengthunit',
3183
            ]
3190
            ]
3184
        }
3191
        }
3185
    );
3192
    ) unless $issuing_rule;
3186
3193
3187
    my $now = dt_from_string;
3194
    my $now = dt_from_string;
3188
    return $now unless $issuing_rule;
3195
    return $now unless $issuing_rule;
Lines 4262-4283 sub _CanBookBeAutoRenewed { Link Here
4262
    my $item = $params->{item};
4269
    my $item = $params->{item};
4263
    my $branchcode = $params->{branchcode};
4270
    my $branchcode = $params->{branchcode};
4264
    my $issue = $params->{issue};
4271
    my $issue = $params->{issue};
4265
4272
    my $soonest_renew_date = $params->{soonest};
4266
    return "no" unless $issue->auto_renew && $patron->autorenew_checkouts;
4273
    my $issuing_rule = $params->{issuing_rule};
4267
4268
    my $issuing_rule = Koha::CirculationRules->get_effective_rules(
4269
        {
4270
            categorycode => $patron->categorycode,
4271
            itemtype     => $item->effective_itemtype,
4272
            branchcode   => $branchcode,
4273
            rules => [
4274
                'no_auto_renewal_after',
4275
                'no_auto_renewal_after_hard_limit',
4276
                'lengthunit',
4277
                'norenewalbefore',
4278
            ]
4279
        }
4280
    );
4281
4274
4282
    if ( $patron->category->effective_BlockExpiredPatronOpacActions and $patron->is_expired ) {
4275
    if ( $patron->category->effective_BlockExpiredPatronOpacActions and $patron->is_expired ) {
4283
        return 'auto_account_expired';
4276
        return 'auto_account_expired';
Lines 4317-4323 sub _CanBookBeAutoRenewed { Link Here
4317
4310
4318
    if ( defined $issuing_rule->{norenewalbefore}
4311
    if ( defined $issuing_rule->{norenewalbefore}
4319
        and $issuing_rule->{norenewalbefore} ne "" ) {
4312
        and $issuing_rule->{norenewalbefore} ne "" ) {
4320
        if ( GetSoonestRenewDate($patron->id, $item->id) > dt_from_string()) {
4313
        if ( $soonest_renew_date > dt_from_string()) {
4321
            return "auto_too_soon";
4314
            return "auto_too_soon";
4322
        } else {
4315
        } else {
4323
            return "ok";
4316
            return "ok";
4324
- 

Return to bug 29474