View | Details | Raw Unified | Return to bug 28688
Collapse All | Expand All

(-)a/misc/cronjobs/membership_expiry.pl (-7 / +30 lines)
Lines 41-48 Options: Link Here
41
   --before=X               include patrons expiring a number of days BEFORE the date set by the preference
41
   --before=X               include patrons expiring a number of days BEFORE the date set by the preference
42
   --after=X                include patrons expiring a number of days AFTER  the date set by the preference
42
   --after=X                include patrons expiring a number of days AFTER  the date set by the preference
43
   -l --letter <lettercode> use a specific notice rather than the default
43
   -l --letter <lettercode> use a specific notice rather than the default
44
   --active=X               only send notices to active patrons (active within X months)
44
   --active=X               only deal with active patrons (active within X months)
45
   --inactive=X             only send notices to inactive patrons (inactive within X months)
45
   --inactive=X             only deal with inactive patrons (inactive within X months)
46
   --renew                  renew patrons and send notice (instead of expiry notice only)
46
47
47
=head1 DESCRIPTION
48
=head1 DESCRIPTION
48
49
Lines 109-115 Optional parameter to include active patrons only (active within passed number o Link Here
109
=item B<-inactive>
110
=item B<-inactive>
110
111
111
Optional parameter to include inactive patrons only (inactive within passed number of months).
112
Optional parameter to include inactive patrons only (inactive within passed number of months).
112
This allows you to skip active patrons when you renew them automatically (see bug 28688).
113
This allows you to e.g. send expiry warnings only to inactive patrons.
114
115
=item B<-renew>
116
117
Optional parameter to automatically renew patrons instead of sending them an expiry notice.
118
They will be informed by a patron renewal notice.
113
119
114
=back
120
=back
115
121
Lines 171-176 my ( $branch, $letter_type ); Link Here
171
my @where;
177
my @where;
172
my $active;
178
my $active;
173
my $inactive;
179
my $inactive;
180
my $renew;
174
181
175
my $command_line_options = join(" ",@ARGV);
182
my $command_line_options = join(" ",@ARGV);
176
183
Lines 187-192 GetOptions( Link Here
187
    'where=s'        => \@where,
194
    'where=s'        => \@where,
188
    'active:i'       => \$active,
195
    'active:i'       => \$active,
189
    'inactive:i'     => \$inactive,
196
    'inactive:i'     => \$inactive,
197
    'renew'          => \$renew,
190
) or pod2usage(2);
198
) or pod2usage(2);
191
199
192
pod2usage( -verbose => 2 ) if $man;
200
pod2usage( -verbose => 2 ) if $man;
Lines 223-229 warn 'found ' . $upcoming_mem_expires->count . ' soon expiring members' Link Here
223
231
224
# main loop
232
# main loop
225
$letter_type = 'MEMBERSHIP_EXPIRY' if !$letter_type;
233
$letter_type = 'MEMBERSHIP_EXPIRY' if !$letter_type;
226
my ( $count_active, $count_inactive, $count_enqueued ) = ( 0, 0, 0 );
234
my ( $count_active, $count_inactive, $count_renewed, $count_enqueued ) = ( 0, 0, 0, 0 );
235
my $fees = {};
227
while ( my $recent = $upcoming_mem_expires->next ) {
236
while ( my $recent = $upcoming_mem_expires->next ) {
228
    my $patron_active = $recent->is_active({ months => $active // $inactive }); # checked already that only one is defined
237
    my $patron_active = $recent->is_active({ months => $active // $inactive }); # checked already that only one is defined
229
    if( defined($active) && !$patron_active ) {
238
    if( defined($active) && !$patron_active ) {
Lines 233-248 while ( my $recent = $upcoming_mem_expires->next ) { Link Here
233
        $count_active++;
242
        $count_active++;
234
        next;
243
        next;
235
    }
244
    }
245
246
    my ($which_notice, $substitute);
247
    if( $renew ) {
248
        $recent->renew_account;
249
        $which_notice = 'MEMBERSHIP_RENEWED';
250
        $fees->{$recent->branchcode} = $recent->category->enrolmentfee if !exists $fees->{$recent->branchcode};
251
        $substitute->{enrollment_fee} = $fees->{$recent->branchcode} if $fees->{$recent->branchcode} > 0;
252
        $count_renewed++;
253
    } else {
254
        $which_notice = $letter_type;
255
    }
256
236
    my $from_address = $recent->library->from_email_address;
257
    my $from_address = $recent->library->from_email_address;
237
    my $letter =  C4::Letters::GetPreparedLetter(
258
    my $letter =  C4::Letters::GetPreparedLetter(
238
        module      => 'members',
259
        module      => 'members',
239
        letter_code => $letter_type,
260
        letter_code => $which_notice,
240
        branchcode  => $recent->branchcode,
261
        branchcode  => $recent->branchcode,
241
        lang        => $recent->lang,
262
        lang        => $recent->lang,
242
        tables      => {
263
        tables      => {
243
            borrowers => $recent->borrowernumber,
264
            borrowers => $recent->borrowernumber,
244
            branches  => $recent->branchcode,
265
            branches  => $recent->branchcode,
245
        },
266
        },
267
        substitute => $substitute,
246
    );
268
    );
247
    last if !$letter; # Letters.pm already warned, just exit
269
    last if !$letter; # Letters.pm already warned, just exit
248
    if( $nomail ) {
270
    if( $nomail ) {
Lines 261-273 while ( my $recent = $upcoming_mem_expires->next ) { Link Here
261
    if ($recent->smsalertnumber) {
283
    if ($recent->smsalertnumber) {
262
        my $smsletter = C4::Letters::GetPreparedLetter(
284
        my $smsletter = C4::Letters::GetPreparedLetter(
263
            module      => 'members',
285
            module      => 'members',
264
            letter_code => $letter_type,
286
            letter_code => $which_notice,
265
            branchcode  => $recent->branchcode,
287
            branchcode  => $recent->branchcode,
266
            lang        => $recent->lang,
288
            lang        => $recent->lang,
267
            tables      => {
289
            tables      => {
268
                borrowers => $recent->borrowernumber,
290
                borrowers => $recent->borrowernumber,
269
                branches  => $recent->branchcode,
291
                branches  => $recent->branchcode,
270
            },
292
            },
293
            substitute => $substitute,
271
            message_transport_type => 'sms',
294
            message_transport_type => 'sms',
272
        );
295
        );
273
        if ($smsletter) {
296
        if ($smsletter) {
Lines 281-286 while ( my $recent = $upcoming_mem_expires->next ) { Link Here
281
}
304
}
282
305
283
if( $verbose ) {
306
if( $verbose ) {
307
    print "Membership renewed for $count_renewed patrons\n" if $count_renewed;
284
    print "Enqueued notices for $count_enqueued patrons\n";
308
    print "Enqueued notices for $count_enqueued patrons\n";
285
    print "Skipped $count_active active patrons\n" if $count_active;
309
    print "Skipped $count_active active patrons\n" if $count_active;
286
    print "Skipped $count_inactive inactive patrons\n" if $count_inactive;
310
    print "Skipped $count_inactive inactive patrons\n" if $count_inactive;
287
- 

Return to bug 28688