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

(-)a/misc/cronjobs/overdue_notices.pl (-57 / +76 lines)
Lines 39-45 use C4::Context; Link Here
39
use C4::Dates qw/format_date/;
39
use C4::Dates qw/format_date/;
40
use C4::Debug;
40
use C4::Debug;
41
use C4::Letters;
41
use C4::Letters;
42
use C4::Overdues qw(GetFine);
42
use C4::Overdues qw(GetFine GetOverdueMessageTransportTypes);
43
use C4::Budgets qw(GetCurrency);
43
use C4::Budgets qw(GetCurrency);
44
44
45
=head1 NAME
45
=head1 NAME
Lines 430-435 END_SQL Link Here
430
    # my $outfile = 'overdues_' . ( $mybranch || $branchcode || 'default' );
430
    # my $outfile = 'overdues_' . ( $mybranch || $branchcode || 'default' );
431
    while ( my $overdue_rules = $rqoverduerules->fetchrow_hashref ) {
431
    while ( my $overdue_rules = $rqoverduerules->fetchrow_hashref ) {
432
      PERIOD: foreach my $i ( 1 .. 3 ) {
432
      PERIOD: foreach my $i ( 1 .. 3 ) {
433
            my $print_sent = 0; # We never sent a print notice
433
434
434
            $verbose and warn "branch '$branchcode', pass $i\n";
435
            $verbose and warn "branch '$branchcode', pass $i\n";
435
            my $mindays = $overdue_rules->{"delay$i"};    # the notice will be sent after mindays days (grace period)
436
            my $mindays = $overdue_rules->{"delay$i"};    # the notice will be sent after mindays days (grace period)
Lines 451-457 END_SQL Link Here
451
            # <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
452
            # <date> <itemcount> <firstname> <lastname> <address1> <address2> <address3> <city> <postcode> <country>
452
453
453
            my $borrower_sql = <<'END_SQL';
454
            my $borrower_sql = <<'END_SQL';
454
SELECT distinct(issues.borrowernumber), firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email
455
SELECT distinct(issues.borrowernumber), firstname, surname, address, address2, city, zipcode, country, email, emailpro, B_email, smsalertnumber
455
FROM   issues,borrowers,categories
456
FROM   issues,borrowers,categories
456
WHERE  issues.borrowernumber=borrowers.borrowernumber
457
WHERE  issues.borrowernumber=borrowers.borrowernumber
457
AND    borrowers.categorycode=categories.categorycode
458
AND    borrowers.categorycode=categories.categorycode
Lines 540-604 END_SQL Link Here
540
                }
541
                }
541
                $sth2->finish;
542
                $sth2->finish;
542
543
543
                $letter = parse_letter(
544
                my @message_transport_types = @{ GetOverdueMessageTransportTypes( $branchcode, $overdue_rules->{categorycode}, $i) };
544
                    {   letter_code     => $overdue_rules->{"letter$i"},
545
                @message_transport_types = @{ GetOverdueMessageTransportTypes( q{}, $overdue_rules->{categorycode}, $i) }
545
                        borrowernumber  => $borrowernumber,
546
                    unless @message_transport_types;
546
                        branchcode      => $branchcode,
547
547
                        items           => \@items,
548
                for my $mtt ( @message_transport_types ) {
548
                        substitute      => {    # this appears to be a hack to overcome incomplete features in this code.
549
549
                                            bib             => $branch_details->{'branchname'}, # maybe 'bib' is a typo for 'lib<rary>'?
550
                    my $letter = parse_letter(
550
                                            'items.content' => $titles,
551
                        {   letter_code     => $overdue_rules->{"letter$i"},
551
                                            'count'         => $itemcount,
552
                            borrowernumber  => $borrowernumber,
552
                                           }
553
                            branchcode      => $branchcode,
554
                            items           => \@items,
555
                            substitute      => {    # this appears to be a hack to overcome incomplete features in this code.
556
                                                bib             => $branch_details->{'branchname'}, # maybe 'bib' is a typo for 'lib<rary>'?
557
                                                'items.content' => $titles,
558
                                                'count'         => $itemcount,
559
                                               },
560
                            message_transport_type => $mtt,
561
                        }
562
                    );
563
                    unless ($letter) {
564
                        $verbose and warn "Message '$overdue_rules->{letter$i}' content not found";
565
566
                        # might as well skip while PERIOD, no other borrowers are going to work.
567
                        # FIXME : Does this mean a letter must be defined in order to trigger a debar ?
568
                        next PERIOD;
553
                    }
569
                    }
554
                );
555
                unless ($letter) {
556
                    $verbose and warn "Message '$overdue_rules->{letter$i}' content not found";
557
570
558
                    # might as well skip while PERIOD, no other borrowers are going to work.
571
                    if ( $exceededPrintNoticesMaxLines ) {
559
                    # FIXME : Does this mean a letter must be defined in order to trigger a debar ?
572
                      $letter->{'content'} .= "List too long for form; please check your account online for a complete list of your overdue items.";
560
                    next PERIOD;
573
                    }
561
                }
562
                
563
                if ( $exceededPrintNoticesMaxLines ) {
564
                  $letter->{'content'} .= "List too long for form; please check your account online for a complete list of your overdue items.";
565
                }
566
574
567
                my @misses = grep { /./ } map { /^([^>]*)[>]+/; ( $1 || '' ); } split /\</, $letter->{'content'};
575
                    my @misses = grep { /./ } map { /^([^>]*)[>]+/; ( $1 || '' ); } split /\</, $letter->{'content'};
568
                if (@misses) {
576
                    if (@misses) {
569
                    $verbose and warn "The following terms were not matched and replaced: \n\t" . join "\n\t", @misses;
577
                        $verbose and warn "The following terms were not matched and replaced: \n\t" . join "\n\t", @misses;
570
                }
578
                    }
571
                $letter->{'content'} =~ s/\<[^<>]*?\>//g;    # Now that we've warned about them, remove them.
579
                    $letter->{'content'} =~ s/\<[^<>]*?\>//g;    # Now that we've warned about them, remove them.
572
                $letter->{'content'} =~ s/\<[^<>]*?\>//g;    # 2nd pass for the double nesting.
580
                    $letter->{'content'} =~ s/\<[^<>]*?\>//g;    # 2nd pass for the double nesting.
573
581
574
                if ( !$nomail && scalar @emails_to_use ) {
582
                    if ($nomail) {
575
                    C4::Letters::EnqueueLetter(
583
                        push @output_chunks,
576
                        {   letter                 => $letter,
584
                          prepare_letter_for_printing(
577
                            borrowernumber         => $borrowernumber,
585
                          {   letter         => $letter,
578
                            message_transport_type => 'email',
586
                              borrowernumber => $borrowernumber,
579
                            from_address           => $admin_email_address,
587
                              firstname      => $data->{'firstname'},
580
                            to_address             => join(',', @emails_to_use),
588
                              lastname       => $data->{'surname'},
589
                              address1       => $data->{'address'},
590
                              address2       => $data->{'address2'},
591
                              city           => $data->{'city'},
592
                              postcode       => $data->{'zipcode'},
593
                              country        => $data->{'country'},
594
                              email          => $notice_email,
595
                              itemcount      => $itemcount,
596
                              titles         => $titles,
597
                              outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : '',
598
                            }
599
                          );
600
                    } else {
601
                        if ( ($mtt eq 'email' and not scalar @emails_to_use) or ($mtt eq 'sms' and not $data->{smsalertnumber}) ) {
602
                            # email or sms is requested but not exist, do a print.
603
                            $mtt = 'print';
581
                        }
604
                        }
582
                    );
605
                        unless ( $mtt eq 'print' and $print_sent == 1 ) {
583
                } else {
606
                            # Just sent a print if not already done.
584
                    # if not sent by email then print
607
                            C4::Letters::EnqueueLetter(
585
                    push @output_chunks,
608
                                {   letter                 => $letter,
586
                      prepare_letter_for_printing(
609
                                    borrowernumber         => $borrowernumber,
587
                        {   letter         => $letter,
610
                                    message_transport_type => $mtt,
588
                            borrowernumber => $borrowernumber,
611
                                    from_address           => $admin_email_address,
589
                            firstname      => $data->{'firstname'},
612
                                    to_address             => join(',', @emails_to_use),
590
                            lastname       => $data->{'surname'},
613
                                }
591
                            address1       => $data->{'address'},
614
                            );
592
                            address2       => $data->{'address2'},
615
                            # A print notice should be sent only once per overdue level.
593
                            city           => $data->{'city'},
616
                            # Without this check, a print could be sent twice or more if the library checks sms and email and print and the patron has no email or sms number.
594
                            postcode       => $data->{'zipcode'},
617
                            $print_sent = 1 if $mtt eq 'print';
595
                            country        => $data->{'country'},
596
                            email          => $notice_email,
597
                            itemcount      => $itemcount,
598
                            titles         => $titles,
599
                            outputformat   => defined $csvfilename ? 'csv' : defined $htmlfilename ? 'html' : '',
600
                        }
618
                        }
601
                      );
619
                    }
602
                }
620
                }
603
            }
621
            }
604
            $sth->finish;
622
            $sth->finish;
Lines 722-727 sub parse_letter { Link Here
722
        tables => \%tables,
740
        tables => \%tables,
723
        substitute => $substitute,
741
        substitute => $substitute,
724
        repeat => { item => \@item_tables },
742
        repeat => { item => \@item_tables },
743
        message_transport_type => $params->{message_transport_type},
725
    );
744
    );
726
}
745
}
727
746
Lines 751-756 sub prepare_letter_for_printing { Link Here
751
    }
770
    }
752
771
753
    my $return;
772
    my $return;
773
    chomp $params->{titles};
754
    if ( exists $params->{'outputformat'} && $params->{'outputformat'} eq 'csv' ) {
774
    if ( exists $params->{'outputformat'} && $params->{'outputformat'} eq 'csv' ) {
755
        if ($csv->combine(
775
        if ($csv->combine(
756
                $params->{'firstname'}, $params->{'lastname'}, $params->{'address1'},  $params->{'address2'}, $params->{'postcode'},
776
                $params->{'firstname'}, $params->{'lastname'}, $params->{'address1'},  $params->{'address2'}, $params->{'postcode'},
757
- 

Return to bug 10832