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

(-)a/misc/cronjobs/advance_notices.pl (-112 / +132 lines)
Lines 333-339 UPCOMINGITEM: foreach my $upcoming ( @$upcoming_dues ) { Link Here
333
333
334
# Now, run through all the people that want digests and send them
334
# Now, run through all the people that want digests and send them
335
335
336
$sth = $dbh->prepare(<<'END_SQL');
336
my $sth_digest = $dbh->prepare(<<'END_SQL');
337
SELECT biblio.*, items.*, issues.*
337
SELECT biblio.*, items.*, issues.*
338
  FROM issues,items,biblio
338
  FROM issues,items,biblio
339
  WHERE items.itemnumber=issues.itemnumber
339
  WHERE items.itemnumber=issues.itemnumber
Lines 341-459 SELECT biblio.*, items.*, issues.* Link Here
341
    AND issues.borrowernumber = ?
341
    AND issues.borrowernumber = ?
342
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
342
    AND (TO_DAYS(date_due)-TO_DAYS(NOW()) = ?)
343
END_SQL
343
END_SQL
344
PATRON: while ( my ( $borrowernumber, $digest ) = each %$upcoming_digest ) {
345
    @letters = ();
346
    my $count = $digest->{count};
347
    my $from_address = $digest->{email};
348
349
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
350
                                                                                  message_name   => 'advance_notice' } );
351
    next PATRON unless $borrower_preferences; # how could this happen?
352
353
344
354
    my $letter_type = 'PREDUEDGST';
345
send_digests({
355
346
    sth => $sth_digest,
356
    $sth->execute($borrowernumber,$borrower_preferences->{'days_in_advance'});
347
    digests => $upcoming_digest,
357
    my $titles = "";
348
    letter_code => 'PREDUEDGST',
358
    while ( my $item_info = $sth->fetchrow_hashref()) {
349
    get_item_info => sub {
359
        $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
350
        my $params = shift;
351
        $params->{sth}->execute($params->{borrowernumber},
352
                      $params->{borrower_preferences}->{'days_in_advance'});
353
        return sub {
354
            $params->{sth}->fetchrow_hashref;
355
        };
360
    }
356
    }
361
357
});
362
    ## Get branch info for borrowers home library.
358
363
    my %branch_info = get_branch_info( $borrowernumber );
359
send_digests({
364
360
    sth => $sth_digest,
365
    foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) {
361
    digest => $due_digest,
366
        my $letter = parse_letter(
362
    letter_code => 'DUEGST',
367
            {
363
    get_item_info => sub {
368
                letter_code    => $letter_type,
364
        my $params = shift;
369
                borrowernumber => $borrowernumber,
365
        $params->{sth}->execute($params->{borrowernumber}, 0);
370
                substitute     => {
366
        return sub {
371
                    count           => $count,
367
            $params->{sth}->fetchrow_hashref;
372
                    'items.content' => $titles,
368
        };
373
                    %branch_info,
374
                },
375
                branchcode             => $branch_info{"branches.branchcode"},
376
                message_transport_type => $transport,
377
            }
378
          )
379
          or warn "no letter of type '$letter_type' found for borrowernumber $borrowernumber. Please see sample_notices.sql";
380
        push @letters, $letter if $letter;
381
    }
369
    }
382
370
});
383
    if ( @letters ) {
384
      if ($nomail) {
385
        for my $letter ( @letters ) {
386
            local $, = "\f";
387
            print $letter->{'content'};
388
        }
389
      }
390
      else {
391
        for my $letter ( @letters ) {
392
            C4::Letters::EnqueueLetter( { letter                 => $letter,
393
                                          borrowernumber         => $borrowernumber,
394
                                          from_address           => $from_address,
395
                                          message_transport_type => $letter->{message_transport_type} } );
396
        }
397
      }
398
    }
399
}
400
401
# Now, run through all the people that want digests and send them
402
PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) {
403
    @letters = ();
404
    my $count = $digest->{count};
405
    my $from_address = $digest->{email};
406
407
    my $borrower_preferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $borrowernumber,
408
                                                                                  message_name   => 'item_due' } );
409
    next PATRON unless $borrower_preferences; # how could this happen?
410
411
    my $letter_type = 'DUEDGST';
412
    $sth->execute($borrowernumber,'0');
413
    my $titles = "";
414
    while ( my $item_info = $sth->fetchrow_hashref()) {
415
        $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
416
    }
417
418
    ## Get branch info for borrowers home library.
419
    my %branch_info = get_branch_info( $borrowernumber );
420
421
    for my $transport ( keys %{ $borrower_preferences->{'transports'} } ) {
422
        my $letter = parse_letter(
423
            {
424
                letter_code    => $letter_type,
425
                borrowernumber => $borrowernumber,
426
                substitute     => {
427
                    count           => $count,
428
                    'items.content' => $titles,
429
                    %branch_info,
430
                },
431
                branchcode             => $branch_info{"branches.branchcode"},
432
                message_transport_type => $transport,
433
            }
434
          )
435
          or warn "no letter of type '$letter_type' found for borrowernumber $borrowernumber. Please see sample_notices.sql";
436
        push @letters, $letter if $letter;
437
    }
438
439
    if ( @letters ) {
440
      if ($nomail) {
441
        for my $letter ( @letters ) {
442
            local $, = "\f";
443
            print $letter->{'content'};
444
        }
445
      }
446
      else {
447
        for my $letter ( @letters ) {
448
            C4::Letters::EnqueueLetter( { letter                 => $letter,
449
                                          borrowernumber         => $borrowernumber,
450
                                          from_address           => $from_address,
451
                                          message_transport_type => $letter->{message_transport_type} } );
452
        }
453
      }
454
    }
455
456
}
457
371
458
=head1 METHODS
372
=head1 METHODS
459
373
Lines 463-468 PATRON: while ( my ( $borrowernumber, $digest ) = each %$due_digest ) { Link Here
463
377
464
sub parse_letter {
378
sub parse_letter {
465
    my $params = shift;
379
    my $params = shift;
380
466
    foreach my $required ( qw( letter_code borrowernumber ) ) {
381
    foreach my $required ( qw( letter_code borrowernumber ) ) {
467
        return unless exists $params->{$required};
382
        return unless exists $params->{$required};
468
    }
383
    }
Lines 511-516 sub get_branch_info { Link Here
511
    return %branch_info;
426
    return %branch_info;
512
}
427
}
513
428
429
=head2 send_digests
430
431
    send_digests({
432
        digests => ...,
433
        sth => ...,
434
        letter_code => ...,
435
        get_item_info => ...,
436
    })
437
438
Enqueue digested letters (or print them if -n was passed at command line).
439
440
Parameters:
441
442
=over 4
443
444
=item C<$digests>
445
446
Reference to the array of digested messages.
447
448
=item C<$sth>
449
450
Prepared statement handle for fetching overdue issues.
451
452
=item C<$letter_code>
453
454
String that denote the letter code.
455
456
=item C<$get_item_info>
457
458
Subroutine for executing prepared statement.  Takes parameters $sth,
459
$borrowernumber and $borrower_parameters and return a generator
460
function that produce the matching rows.
461
462
=back
463
464
=cut
465
466
sub send_digests {
467
    my $params = shift;
468
469
    PATRON: while ( my ( $borrowernumber, $digest ) = each %{$params->{digests}} ) {
470
        @letters = ();
471
        my $count = $digest->{count};
472
        my $from_address = $digest->{email};
473
474
        my $borrower_preferences =
475
            C4::Members::Messaging::GetMessagingPreferences(
476
                {
477
                    borrowernumber => $borrowernumber,
478
                    message_name   => 'advance_notice'
479
                }
480
            );
481
482
        next PATRON unless $borrower_preferences; # how could this happen?
483
484
        my $next_item_info = $params->{get_item_info}->({
485
            sth => $params->{sth},
486
            borrowernumber => $borrowernumber,
487
            borrower_preferences => $borrower_preferences
488
        });
489
        my $titles = "";
490
        while ( my $item_info = $next_item_info->()) {
491
            $titles .= C4::Letters::get_item_content( { item => $item_info, item_content_fields => \@item_content_fields } );
492
        }
493
494
        ## Get branch info for borrowers home library.
495
        my %branch_info = get_branch_info( $borrowernumber );
496
497
        foreach my $transport ( keys %{ $borrower_preferences->{'transports'} } ) {
498
            my $letter = parse_letter(
499
                {
500
                    letter_code    => $params->{letter_code},
501
                    borrowernumber => $borrowernumber,
502
                    substitute     => {
503
                        count           => $count,
504
                        'items.content' => $titles,
505
                        %branch_info,
506
                    },
507
                    branchcode             => $branch_info{"branches.branchcode"},
508
                    message_transport_type => $transport,
509
                }
510
                )
511
                or warn "no letter of type '$params->{letter_type}' found for borrowernumber $borrowernumber. Please see sample_notices.sql";
512
            push @letters, $letter if $letter;
513
        }
514
515
        if ( @letters ) {
516
            if ($nomail) {
517
                for my $letter ( @letters ) {
518
                    local $, = "\f";
519
                    print $letter->{'content'};
520
                }
521
            }
522
            else {
523
                for my $letter ( @letters ) {
524
                    C4::Letters::EnqueueLetter( { letter                 => $letter,
525
                                                  borrowernumber         => $borrowernumber,
526
                                                  from_address           => $from_address,
527
                                                  message_transport_type => $letter->{message_transport_type} } );
528
                }
529
            }
530
        }
531
    }
532
}
533
534
514
1;
535
1;
515
536
516
__END__
537
__END__
517
- 

Return to bug 20478