From 96b1390850fcee9c0e9191b026b0e7b055aa9c10 Mon Sep 17 00:00:00 2001
From: Alex Arnaud <alex.arnaud@biblibre.com>
Date: Fri, 2 Sep 2011 11:40:40 +0200
Subject: [PATCH] Bug 6835 - Ability to specify types of email address in
 overdue_notices.pl

 Adds the -email option to overdue_notices.pl, which is repeatable

 -email value can be:
   - 'email'
   - 'emailpro' or
   - 'B_email'

- perltidy done
- in production for a BibLibre customer
- validated by the customer

Signed-off-by: Claire Hernandez <claire.hernandez@biblibre.com>
---
 misc/cronjobs/overdue_notices.pl |   42 +++++++++++++++++++++++++++++++++++---
 1 file changed, 39 insertions(+), 3 deletions(-)

diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl
index cb9ffa2..18670f5 100755
--- a/misc/cronjobs/overdue_notices.pl
+++ b/misc/cronjobs/overdue_notices.pl
@@ -47,7 +47,10 @@ overdue_notices.pl - prepare messages to be sent to patrons for overdue items
 
 =head1 SYNOPSIS
 
-overdue_notices.pl [ -n ] [ -library <branchcode> ] [ -library <branchcode>...] [ -max <number of days> ] [ -csv [ <filename> ] ] [ -itemscontent <field list> ]
+overdue_notices.pl 
+  [ -n ][ -library <branchcode> ][ -library <branchcode> ... ]
+  [ -max <number of days> ][ -csv [<filename>] ][ -itemscontent <field list> ]
+  [ -email <email_type> ... ]
 
  Options:
    -help                          brief help message
@@ -60,6 +63,7 @@ overdue_notices.pl [ -n ] [ -library <branchcode> ] [ -library <branchcode>...]
    -itemscontent <list of fields> item information in templates
    -borcat       <categorycode>   category code that must be included
    -borcatout    <categorycode>   category code that must be excluded
+   -email        <email_type>     type of email that will be used. Can be 'email', 'emailpro' or 'B_email'. Repeatable.
 
 =head1 OPTIONS
 
@@ -143,6 +147,10 @@ Default items.content lists only those items that fall in the
 range of the currently processing notice.
 Choose list-all to include all overdue items in the list (limited by B<-max> setting).
 
+=item B<-email>
+
+Allows to specify which type of email will be used. Can be email, emailpro or B_email. Repeatable.
+
 =back
 
 =head1 DESCRIPTION
@@ -252,6 +260,8 @@ my $verbose = 0;
 my $nomail  = 0;
 my $MAX     = 90;
 my @branchcodes; # Branch(es) passed as parameter
+my @emails_to_use;    # Emails to use for messaging
+my @emails;           # Emails given in command-line parameters
 my $csvfilename;
 my $htmlfilename;
 my $triggered = 0;
@@ -274,6 +284,7 @@ GetOptions(
     't|triggered'             => \$triggered,
     'borcat=s'      => \@myborcat,
     'borcatout=s'   => \@myborcatout,
+    'email=s' => \@emails,
 ) or pod2usage(2);
 pod2usage(1) if $help;
 pod2usage( -verbose => 2 ) if $man;
@@ -459,6 +470,30 @@ END_SQL
                     ) = $sth->fetchrow )
             {
                 $verbose and warn "borrower $firstname, $lastname ($borrowernumber) has items triggering level $i.";
+                @emails_to_use = ();
+                if ( @emails && !$nomail ) {
+                    my $memberinfos = C4::Members::GetMember(borrowernumber => $borrowernumber);
+                    foreach (@emails) {
+                        push @emails_to_use, $memberinfos->{$_}
+                          if ( defined $memberinfos->{$_} );
+                    }
+                    $email = 1 if (@emails_to_use);
+                }
+                else {
+                    $email =
+                      C4::Members::GetFirstValidEmailAddress($borrowernumber);
+                    push @emails_to_use, $email;
+                }
+
+                my $letter = C4::Letters::getletter( 'circulation', $overdue_rules->{"letter$i"}, $branchcode );
+
+                unless ($letter) {
+                    $verbose and warn "Message '$overdue_rules->{letter$i}' content not found";
+    
+                    # might as well skip while PERIOD, no other borrowers are going to work.
+                    # FIXME : Does this mean a letter must be defined in order to trigger a debar ?
+                    next PERIOD;
+                }
     
                 if ( $overdue_rules->{"debarred$i"} ) {
     
@@ -488,7 +523,7 @@ END_SQL
                 }
                 $sth2->finish;
 
-                my $letter = parse_letter(
+                $letter = parse_letter(
                     {   letter_code     => $overdue_rules->{"letter$i"},
                         borrowernumber  => $borrowernumber,
                         branchcode      => $branchcode,
@@ -538,12 +573,13 @@ END_SQL
                         }
                       );
                 } else {
-                    if ($email) {
+                    if (scalar(@emails_to_use) > 0 ) {
                         C4::Letters::EnqueueLetter(
                             {   letter                 => $letter,
                                 borrowernumber         => $borrowernumber,
                                 message_transport_type => 'email',
                                 from_address           => $admin_email_address,
+                                to_address             => join(',', @emails_to_use),
                             }
                         );
                     } else {
-- 
1.7.9.5