@@ -, +, @@ before' and 'Automatic renewal'. Both daily and hourly loans should work. should be possible. You can run misc/cronjobs/automatic_renewals.pl for automatic renewal. * Both automatic and manual renewal with 'No renewal before' set to 0 do not happen before the due date (exact DateTime). * Manual renewal with 'No renewal before' set to undef (enter empty string) is unrestricted. * Automatic renewal with 'No renewal before' set to undef does not happen before the due date. --- C4/Circulation.pm | 26 +++++++++++++++++++++----- admin/smart-rules.pl | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) --- a/C4/Circulation.pm +++ a/C4/Circulation.pm @@ -2818,12 +2818,15 @@ sub CanBookBeRenewed { return ( 0, 'overdue'); } - if ( $issuingrule->{norenewalbefore} ) { + if ( defined $issuingrule->{norenewalbefore} + and $issuingrule->{norenewalbefore} ne "" ) + { # Get current time and add norenewalbefore. # If this is smaller than date_due, it's too soon for renewal. + my $now = dt_from_string; if ( - DateTime->now( time_zone => C4::Context->tz() )->add( + $now->add( $issuingrule->{lengthunit} => $issuingrule->{norenewalbefore} ) < $itemissue->{date_due} ) @@ -2831,9 +2834,20 @@ sub CanBookBeRenewed { return ( 0, "auto_too_soon" ) if $itemissue->{auto_renew}; return ( 0, "too_soon" ); } + elsif ( $itemissue->{auto_renew} ) { + return ( 0, "auto_renew" ); + } + } + + # Fallback for automatic renewals: + # If norenewalbefore is undef, don't renew before due date. + elsif ( $itemissue->{auto_renew} ) { + my $now = dt_from_string; + return ( 0, "auto_renew" ) + if $now >= $itemissue->{date_due}; + return ( 0, "auto_too_soon" ); } - return ( 0, "auto_renew" ) if $itemissue->{auto_renew}; return ( 1, undef ); } @@ -3045,9 +3059,11 @@ sub GetSoonestRenewDate { my $issuingrule = GetIssuingRule( $borrower->{categorycode}, $item->{itype}, $branchcode ); - my $now = DateTime->now( time_zone => C4::Context->tz() ); + my $now = dt_from_string; - if ( $issuingrule->{norenewalbefore} ) { + if ( defined $issuingrule->{norenewalbefore} + and $issuingrule->{norenewalbefore} ne "" ) + { my $soonestrenewal = $itemissue->{date_due}->subtract( $issuingrule->{lengthunit} => $issuingrule->{norenewalbefore} ); --- a/admin/smart-rules.pl +++ a/admin/smart-rules.pl @@ -115,7 +115,7 @@ elsif ($op eq 'add') { my $renewalsallowed = $input->param('renewalsallowed'); my $renewalperiod = $input->param('renewalperiod'); my $norenewalbefore = $input->param('norenewalbefore'); - $norenewalbefore = undef if $norenewalbefore eq '0' or $norenewalbefore =~ /^\s*$/; + $norenewalbefore = undef if $norenewalbefore =~ /^\s*$/; my $auto_renew = $input->param('auto_renew') eq 'yes' ? 1 : 0; my $reservesallowed = $input->param('reservesallowed'); my $onshelfholds = $input->param('onshelfholds') || 0; --