4 # This file is part of Koha.
6 # Koha is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # Koha is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with Koha; if not, see <http://www.gnu.org/licenses>.
21 use Koha::Script -cron;
22 use Getopt::Long qw( GetOptions );
23 use Pod::Usage qw( pod2usage );
25 use C4::Log qw( cronlogaction );
26 use C4::Reports::Guided qw( EmailReport );
37 [--report ][--notice][--module] --library --from
41 --report report ID to use as data for email template
42 --notice specific notice code to use
43 --module which module to find the above notice in
44 --library specified branch for selecting notice, will use all libraries by default
45 --from specified email for 'from' address, report column 'from' used if not specified
46 --email specified column to use as 'to' email address, report column 'email' used if not specified
47 --verbose increased verbosity, will print notices and errors
48 --commit send emails, without this script will only report
56 Print brief help and exit.
60 Print full documentation and exit.
64 Specify a saved SQL report id in the Koha system to user for the emails. All, and only,
65 columns in the report will be available for notice template variables
69 Specific notice (CODE) to select
73 Which module to find the specified notice in
77 Option to specify which branches notice should be used, 'All libraries' is used if not specified
81 Specify the sender address of the email, if not specified a 'from' column in the report will be used.
85 Specify the column to find recipient address of the email, if not specified an 'email' column in the report will be used.
89 Increased verbosity, reports successes and errors.
93 Send emails, if omitted script will report as verbose.
102 my $module; #this is only for selecting correct notice - report itself defines available columns, not module
103 my $library; #as above, determines which notice to use, will use 'all libraries' if not specified
104 my $email; #to specify which column should be used as email in report will use 'email' from borrwers table
105 my $from; #to specify from address, will expect 'from' column in report if not specified
110 MISSING_PARAMS => "You must supply a report ID, letter module and code at minimum\n",
111 NO_LETTER => "The specified letter was not found, please check your input\n",
112 NO_REPORT => "The specified report was not found, please check your input\n",
113 REPORT_FAIL => "There was an error running the report, please check your SQL\n",
114 NO_BOR_COL => "There was no borrowernumber found for row ",
115 NO_EMAIL_COL => "There was no email found for row ",
116 NO_FROM_COL => "No from email was specified for row ",
117 NO_BOR => "There is no borrower with borrowernumber "
122 'report=i' => \$report_id,
123 'notice=s' => \$notice,
124 'module=s' => \$module,
125 'library=s' => \$library,
126 'email=s' => \$email,
128 'verbose' => \$verbose,
131 pod2usage(1) if $help;
132 pod2usage(1) unless $report_id && $notice && $module;
134 my ( $emails, $errors ) = C4::Reports::Guided::EmailReport({
137 report_id => $report_id,
145 foreach my $email (@$emails){
146 print "No emails will be sent!\n" unless $commit;
147 if( $verbose || !$commit ){
148 print "Email generated to $email->{to_address} from $email->{from_address}\n";
150 print $email->{letter}->{content} ."\n";
152 C4::Letters::EnqueueLetter({
153 letter => $email->{letter},
154 borrowernumber => $email->{borrowernumber},
155 message_transport_type => 'email',
156 from_address => $email->{from_address},
157 to_address => $email->{to_address},
161 if( $verbose || !$commit ){
162 foreach my $error ( @$errors ){
163 foreach ( keys %{$error} ){
165 if ( $_ eq 'FATAL' ) { print $error_msgs->{ ${$error}{$_} } }
166 else { print $error_msgs->{$_} . ${$error}{$_} . "\n" }