[Koha-patches] [PATCH] Bug 6835 - Ability to specify types of email address in overdue_notices.pl

alex.arnaud at biblibre.com alex.arnaud at biblibre.com
Fri Sep 2 11:53:48 CEST 2011


From: Alex Arnaud <alex.arnaud at biblibre.com>

---
 C4/Members.pm                    |   30 ++++++++++++++++++++++++++++++
 misc/cronjobs/overdue_notices.pl |   25 +++++++++++++++++++++++--
 2 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/C4/Members.pm b/C4/Members.pm
index dcc168b..4a0fcbc 100644
--- a/C4/Members.pm
+++ b/C4/Members.pm
@@ -59,6 +59,7 @@ BEGIN {
 		&getidcity
 
                 &GetFirstValidEmailAddress
+		&GetValidEmailAddresses
 
 		&GetAge 
 		&GetCities 
@@ -1361,6 +1362,35 @@ sub GetFirstValidEmailAddress {
     }
 }
 
+=head2 GetValidEmailAddresses
+
+  $email = GetValidEmailAddresses($borrowernumber);
+
+Return all the valid email address for a borrower, given the borrowernumber. Returns an hash.
+
+=cut
+
+sub GetValidEmailAddresses {
+    my $borrowernumber = shift;
+    my $dbh = C4::Context->dbh;
+    my $sth = $dbh->prepare( "SELECT email, emailpro, B_email FROM borrowers where borrowernumber = ? ");
+    $sth->execute( $borrowernumber );
+    my $data = $sth->fetchrow_hashref;
+    my %mailhash;
+
+    if ($data->{'email'}) {
+       $mailhash{'email'} = $data->{'email'};
+    } 
+    if ($data->{'emailpro'}) {
+       $mailhash{'emailpro'} = $data->{'emailpro'};
+    } 
+    if ($data->{'B_email'}) {
+       $mailhash{'B_email'} = $data->{'B_email'};
+    } 
+    return \%mailhash;
+}
+
+
 =head2 GetExpiryDate 
 
   $expirydate = GetExpiryDate($categorycode, $dateenrolled);
diff --git a/misc/cronjobs/overdue_notices.pl b/misc/cronjobs/overdue_notices.pl
index 37774b5..6ba76f8 100755
--- a/misc/cronjobs/overdue_notices.pl
+++ b/misc/cronjobs/overdue_notices.pl
@@ -47,7 +47,7 @@ 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 +60,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 +144,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 +257,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 +281,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;
@@ -458,6 +466,18 @@ END_SQL
                     $address1, $address2, $city, $postcode, $country, $email,
                     $longest_issue ) = $sth->fetchrow )
             {
+                @emails_to_use = ();
+                if (@emails && !$nomail) {
+                    my $validemails = C4::Members::GetValidEmailAddresses($borrowernumber);
+                    foreach (@emails) {
+                        push @emails_to_use, $validemails->{$_} if (defined $validemails->{$_});
+                    }
+                    $email = 1 if (@emails_to_use);
+                } else {
+                    $email=C4::Members::GetFirstValidEmailAddress($borrowernumber);
+                    push @emails_to_use, $email;
+                }
+
                 $verbose and warn "borrower $firstname, $lastname ($borrowernumber) has $itemcount items triggering level $i.";
     
                 my $letter = C4::Letters::getletter( 'circulation', $overdue_rules->{"letter$i"} );
@@ -539,12 +559,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.0.4



More information about the Koha-patches mailing list