@@ -, +, @@ - 1 notice per issue - no way to disable the notice generation - no way to specify patron categories to enable/disable the notifications --- misc/cronjobs/automatic_renewals.pl | 68 ++++++++++++++++++++++++++++++------- 1 file changed, 55 insertions(+), 13 deletions(-) --- a/misc/cronjobs/automatic_renewals.pl +++ a/misc/cronjobs/automatic_renewals.pl @@ -42,24 +42,66 @@ No options. use Modern::Perl; +use C4::Branch; use C4::Circulation; use C4::Context; use C4::Log; +use C4::Letters; +use Koha::Checkouts; +use Koha::Borrowers; cronlogaction(); -my $dbh = C4::Context->dbh; -my ( $borrowernumber, $itemnumber, $branch, $ok, $error ); - -my $query = -"SELECT borrowernumber, itemnumber, branchcode FROM issues WHERE auto_renew = 1"; -my $sth = $dbh->prepare($query); -$sth->execute(); - -while ( ( $borrowernumber, $itemnumber, $branch ) = $sth->fetchrow_array ) { +my $auto_renews = Koha::Checkouts->search({ auto_renew => 1 }); + +my %report; +while ( my $auto_renew = $auto_renews->next ) { + + # CanBookBeRenewed returns 'auto_renew' when the renewal should be done by this script + my ( $ok, $error ) = CanBookBeRenewed( $auto_renew->borrowernumber, $auto_renew->itemnumber ); + if ( $error eq 'auto_renew' ) { + my $date_due = AddRenewal( $auto_renew->borrowernumber, $auto_renew->itemnumber, $auto_renew->branchcode ); + push @{ $report{ $auto_renew->borrowernumber } }, $auto_renew; + } elsif ( $error eq 'too_many' + or $error eq 'on_reserve' + or $error eq 'restriction' + or $error eq 'overdue' + or $error eq 'auto_too_late' + or $error eq 'auto_too_much_oweing' + or $error eq 'auto_too_soon' ) { + if ( not $auto_renew->auto_renew_error or $error ne $auto_renew->auto_renew_error ) { + $auto_renew->auto_renew_error($error)->store; + push @{ $report{ $auto_renew->borrowernumber } }, $auto_renew + if $error ne 'auto_too_soon'; # Do not notify if it's too soon + } + } +} -# CanBookBeRenewed returns 'auto_renew' when the renewal should be done by this script - ( $ok, $error ) = CanBookBeRenewed( $borrowernumber, $itemnumber ); - AddRenewal( $borrowernumber, $itemnumber, $branch ) - if ( $error eq "auto_renew" ); +for my $borrowernumber ( keys %report ) { + my $patron = Koha::Borrowers->find($borrowernumber); + my @issues; + for my $issue ( @{ $report{$borrowernumber} } ) { + my $item = Koha::Items->find( $issue->itemnumber ); + my $letter = C4::Letters::GetPreparedLetter( + module => 'circulation', + letter_code => 'AUTO_RENEWALS', + tables => { + borrowers => $patron->borrowernumber, + issues => $issue->itemnumber, + items => $issue->itemnumber, + biblio => $item->biblionumber, + }, + ); + + my $branch_details = C4::Branch::GetBranchDetail( $patron->branchcode ); + my $admin_email_address = $branch_details->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress'); + + C4::Letters::EnqueueLetter( + { letter => $letter, + borrowernumber => $borrowernumber, + message_transport_type => 'email', + from_address => $admin_email_address, + } + ); + } } --