Koha/misc/cronjobs/patron_emailer.pl
Josef Moravec 6fa21ef939 Bug 22755: Fix pod in patron_emailer.pl
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2019-04-24 10:43:55 +00:00

176 lines
5.3 KiB
Perl
Executable file

#!/usr/bin/perl
#
# This file is part of Koha.
#
# Koha is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Koha is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Koha; if not, see <http://www.gnu.org/licenses>.
use Modern::Perl;
BEGIN {
# find Koha's Perl modules
# test carefully before changing this
use FindBin;
eval { require "$FindBin::Bin/../kohalib.pl" };
}
use Koha::Script -cron;
use Getopt::Long;
use Pod::Usage;
use C4::Log;
use C4::Reports::Guided;
cronlogaction();
=head1 NAME
patron_emailer.pl
=head1 SYNOPSIS
patron_emailer.pl
[--report ][--notice][--module] --library --from
Options:
--help brief help
--report report ID to use as data for email template
--notice specific notice code to use
--module which module to find the above notice in
--library specified branch for selecting notice, will use all libraries by default
--from specified email for 'from' address, report column 'from' used if not specified
--email specified column to use as 'to' email address, report column 'email' used if not specified
--verbose increased verbosity, will print notices and errors
--commit send emails, without this script will only report
=head1 OPTIONS
=over 8
=item B<-help>
Print brief help and exit.
=item B<-man>
Print full documentation and exit.
=item B<-report>
Specify a saved SQL report id in the Koha system to user for the emails. All, and only,
columns in the report will be available for notice template variables
=item B<-notice>
Specific notice (CODE) to select
=item B<-module>
Which module to find the specified notice in
=item B<-library>
Option to specify which branches notice should be used, 'All libraries' is used if not specified
=item B<-from>
Specify the sender address of the email, if not specified a 'from' column in the report will be used.
=item B<-email>
Specify the column to find recipient address of the email, if not specified an 'email' column in the report will be used.
=item B<-verbose>
Increased verbosity, reports successes and errors.
=item B<-commit>
Send emails, if omitted script will report as verbose.
=back
=cut
my $help = 0;
my $report_id;
my $notice;
my $module; #this is only for selecting correct notice - report itself defines available columns, not module
my $library; #as above, determines which notice to use, will use 'all libraries' if not specified
my $email; #to specify which column should be used as email in report will use 'email' from borrwers table
my $from; #to specify from address, will expect 'from' column in report if not specified
my $verbose = 0;
my $commit = 0;
my $error_msgs = {
MISSING_PARAMS => "You must supply a report ID, letter module and code at minimum\n",
NO_LETTER => "The specified letter was not found, please check your input\n",
NO_REPORT => "The specified report was not found, please check your input\n",
REPORT_FAIL => "There was an error running the report, please check your SQL\n",
NO_BOR_COL => "There was no borrowernumber found for row ",
NO_EMAIL_COL => "There was no email found for row ",
NO_FROM_COL => "No from email was specified for row ",
NO_BOR => "There is no borrower with borrowernumber "
};
GetOptions(
'help|?' => \$help,
'report=i' => \$report_id,
'notice=s' => \$notice,
'module=s' => \$module,
'library=s' => \$library,
'email=s' => \$email,
'from=s' => \$from,
'verbose' => \$verbose,
'commit' => \$commit
) or pod2usage(1);
pod2usage(1) if $help;
pod2usage(1) unless $report_id && $notice && $module;
my ( $emails, $errors ) = C4::Reports::Guided::EmailReport({
email => $email,
from => $from,
report_id => $report_id,
module => $module,
code => $notice,
branch => $library,
verbose => $verbose,
commit => $commit,
});
foreach my $email (@$emails){
print "No emails will be sent!\n" unless $commit;
if( $verbose || !$commit ){
print "Email generated to $email->{to_address} from $email->{from_address}\n";
print "Content:\n";
print $email->{letter}->{content} ."\n";
}
C4::Letters::EnqueueLetter({
letter => $email->{letter},
borrowernumber => $email->{borrowernumber},
message_transport_type => 'email',
from_address => $email->{from_address},
to_address => $email->{to_address},
}) if $commit;
}
if( $verbose || !$commit ){
foreach my $error ( @$errors ){
foreach ( keys %{$error} ){
print "$_\n";
if ( $_ eq 'FATAL' ) { print $error_msgs->{ ${$error}{$_} } }
else { print $error_msgs->{$_} . ${$error}{$_} . "\n" }
}
}
}