3 # This file is part of Koha.
5 # Copyright (C) 2014 Hochschule für Gesundheit (hsg), Germany
7 # Koha is free software; you can redistribute it and/or modify it
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
22 automatic_renewals.pl - cron script to renew loans
26 ./automatic_renewals.pl [--send-notices]
29 0 3 * * * automatic_renewals.pl
33 This script searches for issues scheduled for automatic renewal
34 (issues.auto_renew). If there are still renews left (Renewals allowed)
35 and the renewal isn't premature (No Renewal before) the issue is renewed.
41 =item B<--send-notices>
43 Send AUTO_RENEWALS notices to patrons if the auto renewal has been done.
45 Note that this option does not support digest yet.
55 use Koha
::Script
-cron
;
64 my ( $help, $send_notices );
67 'send-notices' => \
$send_notices,
70 pod2usage
(0) if $help;
73 my $auto_renews = Koha
::Checkouts
->search({ auto_renew
=> 1 });
76 while ( my $auto_renew = $auto_renews->next ) {
78 # CanBookBeRenewed returns 'auto_renew' when the renewal should be done by this script
79 my ( $ok, $error ) = CanBookBeRenewed
( $auto_renew->borrowernumber, $auto_renew->itemnumber );
80 if ( $error eq 'auto_renew' ) {
81 my $date_due = AddRenewal
( $auto_renew->borrowernumber, $auto_renew->itemnumber, $auto_renew->branchcode );
82 $auto_renew->auto_renew_error(undef)->store;
83 push @
{ $report{ $auto_renew->borrowernumber } }, $auto_renew;
84 } elsif ( $error eq 'too_many'
85 or $error eq 'on_reserve'
86 or $error eq 'restriction'
87 or $error eq 'overdue'
88 or $error eq 'auto_account_expired'
89 or $error eq 'auto_too_late'
90 or $error eq 'auto_too_much_oweing'
91 or $error eq 'auto_too_soon'
92 or $error eq 'item_denied_renewal' ) {
93 if ( not $auto_renew->auto_renew_error or $error ne $auto_renew->auto_renew_error ) {
94 $auto_renew->auto_renew_error($error)->store;
95 push @
{ $report{ $auto_renew->borrowernumber } }, $auto_renew
96 if $error ne 'auto_too_soon'; # Do not notify if it's too soon
101 if ( $send_notices ) {
102 for my $borrowernumber ( keys %report ) {
103 my $patron = Koha
::Patrons
->find($borrowernumber);
104 for my $issue ( @
{ $report{$borrowernumber} } ) {
105 my $item = Koha
::Items
->find( $issue->itemnumber );
106 my $letter = C4
::Letters
::GetPreparedLetter
(
107 module
=> 'circulation',
108 letter_code
=> 'AUTO_RENEWALS',
110 borrowers
=> $patron->borrowernumber,
111 issues
=> $issue->itemnumber,
112 items
=> $issue->itemnumber,
113 biblio
=> $item->biblionumber,
117 my $library = Koha
::Libraries
->find( $patron->branchcode );
118 my $admin_email_address = $library->branchemail || C4
::Context
->preference('KohaAdminEmailAddress');
120 C4
::Letters
::EnqueueLetter
(
122 borrowernumber
=> $borrowernumber,
123 message_transport_type
=> 'email',
124 from_address
=> $admin_email_address,