@@ -, +, @@ - remove DateTime->now() - use Koha::DateUtils->dt_from_string; - use Pod2usage for the usage - use Modern::Perl - use branches table - Change letter code from MEMEXP to MEMBERSHIP_EXPIRY - review comments implemented --- C4/Members.pm | 2 +- misc/cronjobs/membership_expiry.pl | 133 +++++++++++++++++++++++++++++++----- 2 files changed, 117 insertions(+), 18 deletions(-) --- a/C4/Members.pm +++ a/C4/Members.pm @@ -1490,7 +1490,7 @@ sub GetExpiryDate { sub GetUpcomingMembershipExpires { my $dbh = C4::Context->dbh; my $days = C4::Context->preference("MembershipExpiryDaysNotice") || 0; - my $dateexpiry = DateTime->now()->add(days => $days)->ymd(); + my $dateexpiry = output_pref({ dt => (dt_from_string()->add( days => $days)), dateformat => 'iso', dateonly => 1 }); my $query = " SELECT borrowers.*, categories.description, --- a/misc/cronjobs/membership_expiry.pl +++ a/misc/cronjobs/membership_expiry.pl @@ -2,7 +2,7 @@ # This file is part of Koha. # -# Copyright (C) 2013 Amit Gupta (amitddng135@gmail.com) +# Copyright (C) 2015 Amit Gupta (amitddng135@gmail.com) # # Koha is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -19,21 +19,28 @@ =head1 NAME -membership_expires.pl - cron script to put membership expiry reminders into message queue +membership_expiry.pl - cron script to put membership expiry reminder into message queues =head1 SYNOPSIS -./membership_expires.pl -c +./membership_expiry.pl -c or, in crontab: -0 1 * * * membership_expires.pl -c +0 1 * * * membership_expiry.pl -c + +=head1 DESCRIPTION + +This script sends membership expiry reminder notices to patrons. +It queues them in the message queue, which is processed by +the process_message_queue.pl cronjob. =cut -use strict; -use warnings; + +use Modern::Perl; use Getopt::Long; +use Pod::Usage; use Data::Dumper; BEGIN { # find Koha's Perl modules @@ -47,18 +54,109 @@ use C4::Letters; use C4::Dates qw/format_date/; use C4::Log; -cronlogaction(); + +=head1 NAME + +membership_expiry.pl - prepare messages to be sent to membership expiry reminder notices to patrons. + +=head1 SYNOPSIS + +membership_expiry.pl [-c] + +=head1 OPTIONS + +=over 8 + +=item B<--help> + +Print a brief help message and exits. + +=item B<--man> + +Prints the manual page and exits. + +=item B<-v> + +Verbose. Without this flag set, only fatal errors are reported. + +=item B<-n> + +Do not send any email. Membership expire notices that would have been sent to +the patrons are printed to standard out. + +=item B<-c> + +Confirm flag: Add this option. The script will only print a usage +statement otherwise. + +=back + +=head1 DESCRIPTION + +This script is designed to alert send membership expire notices + +=head2 Configuration + +This script pays attention to send the membership expire notices +The content of the messages is configured in Tools -> Notices and slips. Use the MEMBERSHIP_EXPIRY template + +=head2 Outgoing emails + +Typically, messages are prepared for each patron when the memberships are going to expire + + +These emails are staged in the outgoing message queue, as are messages +produced by other features of Koha. This message queue must be +processed regularly by the +F program. + +In the event that the C<-n> flag is passed to this program, no emails +are sent. Instead, messages are sent on standard output from this +program. + +=head2 Templates + +Templates can contain variables enclosed in double angle brackets like +EEthisEE. Those variables will be replaced with values +specific to the members there membership expiry date is coming. +Available variables are: + +=over + +=item EEborrowers.*EE + +any field from the borrowers table + +=item EEbranches.*EE + +any field from the branches table + +=back + +=head1 SEE ALSO + +The F program allows you to send +messages to patrons when the membership are going to expires. +=cut # These are defaults for command line options. + my $confirm; # -c: Confirm that the user has read and configured this script. my $nomail; # -n: No mail. Will not send any emails. my $verbose= 0; # -v: verbose -GetOptions( 'c' => \$confirm, - 'n' => \$nomail, - 'v' => \$verbose, - ); +my $help = 0; +my $man = 0; +GetOptions( + 'help|?' => \$help, + 'man' => \$man, + 'c' => \$confirm, + 'n' => \$nomail, + 'v' => \$verbose, + ) or pod2usage(2); +pod2usage(1) if $help; +pod2usage( -verbose => 2 ) if $man;; my $usage = << 'ENDUSAGE'; This script prepares for membership expiry reminders to be sent to @@ -71,13 +169,15 @@ This script has the following parameters : -v verbose ENDUSAGE -unless ($confirm) { +unless ($confirm) { print $usage; print "Do you wish to continue? (y/n)"; chomp($_ = ); - exit unless (/^y/i); + exit unless (/^y/i); } +cronlogaction(); + my $admin_adress = C4::Context->preference('KohaAdminEmailAddress'); warn 'getting upcoming membership expires' if $verbose; my $upcoming_mem_expires = C4::Members::GetUpcomingMembershipExpires(); @@ -86,7 +186,7 @@ warn 'found ' . scalar( @$upcoming_mem_expires ) . ' issues' if $verbose; UPCOMINGMEMEXP: foreach my $recent ( @$upcoming_mem_expires ) { my $from_address = $recent->{'branchemail'} || $admin_adress; - my $letter_type = 'MEMEXP'; + my $letter_type = 'MEMBERSHIP_EXPIRY'; my $letter = C4::Letters::getletter( 'members', $letter_type, $recent->{'branchcode'} ); die "no letter of type '$letter_type' found. Please see sample_notices.sql" unless $letter; @@ -123,9 +223,8 @@ sub parse_letter { } my $letter = C4::Letters::GetPreparedLetter ( module => 'members', - letter_code => 'MEMEXP', - branchcode => $params->{'branchcode'}, - tables => {'borrowers', $params->{'borrowernumber'},}, + letter_code => 'MEMBERSHIP_EXPIRY', + tables => {'borrowers', $params->{'borrowernumber'}, 'branches', $params->{'branchcode'}}, ); } --