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.
99 binmode( STDOUT, ":encoding(UTF-8)" );
104 my $module; #this is only for selecting correct notice - report itself defines available columns, not module
105 my $library; #as above, determines which notice to use, will use 'all libraries' if not specified
106 my $email; #to specify which column should be used as email in report will use 'email' from borrwers table
107 my $from; #to specify from address, will expect 'from' column in report if not specified
112 MISSING_PARAMS => "You must supply a report ID, letter module and code at minimum\n",
113 NO_LETTER => "The specified letter was not found, please check your input\n",
114 NO_REPORT => "The specified report was not found, please check your input\n",
115 REPORT_FAIL => "There was an error running the report, please check your SQL\n",
116 NO_BOR_COL => "There was no borrowernumber found for row ",
117 NO_EMAIL_COL => "There was no email found for row ",
118 NO_FROM_COL => "No from email was specified for row ",
119 NO_BOR => "There is no borrower with borrowernumber "
124 'report=i' => \$report_id,
125 'notice=s' => \$notice,
126 'module=s' => \$module,
127 'library=s' => \$library,
128 'email=s' => \$email,
130 'verbose' => \$verbose,
133 pod2usage(1) if $help;
134 pod2usage(1) unless $report_id && $notice && $module;
136 my ( $emails, $errors ) = C4::Reports::Guided::EmailReport({
139 report_id => $report_id,
147 foreach my $email (@$emails){
148 print "No emails will be sent!\n" unless $commit;
149 if( $verbose || !$commit ){
150 print "Email generated to $email->{to_address} from $email->{from_address}\n";
152 print $email->{letter}->{content} ."\n";
154 C4::Letters::EnqueueLetter({
155 letter => $email->{letter},
156 borrowernumber => $email->{borrowernumber},
157 message_transport_type => 'email',
158 from_address => $email->{from_address},
159 to_address => $email->{to_address},
163 if( $verbose || !$commit ){
164 foreach my $error ( @$errors ){
165 foreach ( keys %{$error} ){
167 if ( $_ eq 'FATAL' ) { print $error_msgs->{ ${$error}{$_} } }
168 else { print $error_msgs->{$_} . ${$error}{$_} . "\n" }