Confirm flag: Add this option. The script will only print a usage
statement otherwise.
+=item B<-branch>
+
+Optional branchcode to restrict the cronjob to that branch.
+
+=item B<-before>
+
+Optional parameter to extend the selection with a number of days BEFORE
+the date set by the preference.
+
+=item B<-after>
+
+Optional parameter to extend the selection with a number of days AFTER
+the date set by the preference.
+
+=item B<-letter>
+
+Optional parameter to use another notice than the default one.
+
=back
=head1 CONFIGURATION
use C4::Letters;
use C4::Log;
+use Koha::Patrons;
+
# 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
+my $verbose = 0; # -v: verbose
my $help = 0;
my $man = 0;
+my $before = 0;
+my $after = 0;
+my ( $branch, $letter_type );
GetOptions(
'help|?' => \$help,
'c' => \$confirm,
'n' => \$nomail,
'v' => \$verbose,
+ 'branch:s' => \$branch,
+ 'before:i' => \$before,
+ 'after:i' => \$after,
+ 'letter:s' => \$letter_type,
) or pod2usage(2);
pod2usage( -verbose => 2 ) if $man;
cronlogaction();
+my $expdays = C4::Context->preference('MembershipExpiryDaysNotice');
+if( !$expdays ) {
+ #If the pref is not set, we will exit
+ warn 'Exiting membership_expiry.pl: MembershipExpiryDaysNotice not set'
+ if $verbose;
+ exit;
+}
+
my $admin_adress = C4::Context->preference('KohaAdminEmailAddress');
warn 'getting upcoming membership expires' if $verbose;
-my $upcoming_mem_expires = C4::Members::GetUpcomingMembershipExpires();
-warn 'found ' . scalar( @$upcoming_mem_expires ) . ' soon expiring members'
+my $upcoming_mem_expires = Koha::Patrons->search_upcoming_membership_expires(
+ {
+ ( $branch ? ( 'me.branchcode' => $branch ) : () ),
+ before => $before,
+ after => $after,
+ }
+);
+warn 'found ' . $upcoming_mem_expires->count . ' soon expiring members'
if $verbose;
# main loop
-foreach my $recent ( @$upcoming_mem_expires ) {
- my $from_address = $recent->{'branchemail'} || $admin_adress;
- 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;
-
- $letter = parse_letter({
- letter => $letter,
- borrowernumber => $recent->{'borrowernumber'},
- firstname => $recent->{'firstname'},
- categorycode => $recent->{'categorycode'},
- branchcode => $recent->{'branchcode'},
- });
- if ($letter) {
- if ($nomail) {
- print $letter->{'content'};
- } else {
- C4::Letters::EnqueueLetter({
- letter => $letter,
- borrowernumber => $recent->{'borrowernumber'},
- from_address => $from_address,
- message_transport_type => 'email',
- });
- }
- }
-}
-
-=head1 SUBROUTINES
-
-=head2 parse_letter
-
-=cut
-
-sub parse_letter {
- my $params = shift;
- foreach my $required ( qw( letter borrowernumber ) ) {
- return unless exists $params->{$required};
- }
- my $letter = C4::Letters::GetPreparedLetter (
- module => 'members',
- letter_code => 'MEMBERSHIP_EXPIRY',
- tables => {
- 'borrowers', $params->{'borrowernumber'},
- 'branches', $params->{'branchcode'}
+$letter_type = 'MEMBERSHIP_EXPIRY' if !$letter_type;
+while ( my $recent = $upcoming_mem_expires->next ) {
+ my $from_address = $recent->library->branchemail || $admin_adress;
+ my $letter = C4::Letters::GetPreparedLetter(
+ module => 'members',
+ letter_code => $letter_type,
+ branchcode => $recent->branchcode,
+ lang => $recent->lang,
+ tables => {
+ borrowers => $recent->borrowernumber,
+ branches => $recent->branchcode,
},
);
+ last if !$letter; # Letters.pm already warned, just exit
+ if( $nomail ) {
+ print $letter->{'content'}."\n";
+ } else {
+ C4::Letters::EnqueueLetter({
+ letter => $letter,
+ borrowernumber => $recent->borrowernumber,
+ from_address => $from_address,
+ message_transport_type => 'email',
+ });
+ }
}