Bug 15629: Koha::Libraries - Remove GetBranchDetail
[koha.git] / C4 / Letters.pm
index 764f238..0d092ac 100644 (file)
@@ -31,10 +31,13 @@ use C4::Log;
 use C4::SMS;
 use C4::Debug;
 use Koha::DateUtils;
+use Koha::SMS::Providers;
+
 use Date::Calc qw( Add_Delta_Days );
 use Encode;
 use Carp;
 use Koha::Email;
+use Koha::DateUtils qw( format_sqldatetime );
 
 use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
 
@@ -417,7 +420,7 @@ sub SendAlerts {
 
 #                    warn "sending issues...";
             my $userenv = C4::Context->userenv;
-            my $branchdetails = GetBranchDetail($_->{'branchcode'});
+            my $library = Koha::Libraries->find( $_->{branchcode} );
             my $letter = GetPreparedLetter (
                 module => 'serial',
                 letter_code => $letter_code,
@@ -438,9 +441,9 @@ sub SendAlerts {
             my %mail = $message->create_message_headers(
                 {
                     to      => $email,
-                    from    => $branchdetails->{'branchemail'},
-                    replyto => $branchdetails->{'branchreplyto'},
-                    sender  => $branchdetails->{'branchreturnpath'},
+                    from    => $library->branchemail,
+                    replyto => $library->branchreplyto,
+                    sender  => $library->branchreturnpath,
                     subject => Encode::encode( "UTF-8", "" . $letter->{title} ),
                     message => $letter->{'is_html'}
                                 ? _wrap_html( Encode::encode( "UTF-8", $letter->{'content'} ),
@@ -546,6 +549,8 @@ sub SendAlerts {
           if C4::Context->preference('ReplytoDefault');
         $mail{'Sender'} = C4::Context->preference('ReturnpathDefault')
           if C4::Context->preference('ReturnpathDefault');
+        $mail{'Bcc'} = $userenv->{emailaddress}
+          if C4::Context->preference("ClaimsBccCopy");
 
         unless ( sendmail(%mail) ) {
             carp $Mail::Sendmail::error;
@@ -566,13 +571,13 @@ sub SendAlerts {
     }
    # send an "account details" notice to a newly created user
     elsif ( $type eq 'members' ) {
-        my $branchdetails = GetBranchDetail($externalid->{'branchcode'});
+        my $library = Koha::Libraries->find( $externalid->{branchcode} )->unblessed;
         my $letter = GetPreparedLetter (
             module => 'members',
             letter_code => $letter_code,
             branchcode => $externalid->{'branchcode'},
             tables => {
-                'branches'    => $branchdetails,
+                'branches'    => $library,
                 'borrowers' => $externalid->{'borrowernumber'},
             },
             substitute => { 'borrowers.password' => $externalid->{'password'} },
@@ -583,9 +588,9 @@ sub SendAlerts {
         my %mail  = $email->create_message_headers(
             {
                 to      => $externalid->{'emailaddr'},
-                from    => $branchdetails->{'branchemail'},
-                replyto => $branchdetails->{'branchreplyto'},
-                sender  => $branchdetails->{'branchreturnpath'},
+                from    => $library->{branchemail},
+                replyto => $library->{branchreplyto},
+                sender  => $library->{branchreturnpath},
                 subject => Encode::encode( "UTF-8", "" . $letter->{'title'} ),
                 message => $letter->{'is_html'}
                             ? _wrap_html( Encode::encode( "UTF-8", $letter->{'content'} ),
@@ -789,36 +794,31 @@ sub _parseletter_sth {
     parameters :
     - $letter : a hash to letter fields (title & content useful)
     - $table : the Koha table to parse.
-    - $values : table record hashref
+    - $values_in : table record hashref
     parse all fields from a table, and replace values in title & content with the appropriate value
     (not exported sub, used only internally)
 
 =cut
 
 sub _parseletter {
-    my ( $letter, $table, $values ) = @_;
+    my ( $letter, $table, $values_in ) = @_;
+
+    # Work on a local copy of $values_in (passed by reference) to avoid side effects
+    # in callers ( by changing / formatting values )
+    my $values = $values_in ? { %$values_in } : {};
 
     if ( $table eq 'borrowers' && $values->{'dateexpiry'} ){
-        my @dateexpiry = split /-/, $values->{'dateexpiry'};
-
-        $values->{'dateexpiry'} = C4::Dates->new(
-            sprintf(
-                '%04d-%02d-%02d',
-                Add_Delta_Days( @dateexpiry,0)
-            ),
-            'iso'
-        )->output();
+        $values->{'dateexpiry'} = format_sqldatetime( $values->{'dateexpiry'} );
     }
 
     if ( $table eq 'reserves' && $values->{'waitingdate'} ) {
         my @waitingdate = split /-/, $values->{'waitingdate'};
 
         $values->{'expirationdate'} = '';
-        if( C4::Context->preference('ExpireReservesMaxPickUpDelay') &&
-        C4::Context->preference('ReservesMaxPickUpDelay') ) {
+        if ( C4::Context->preference('ReservesMaxPickUpDelay') ) {
             my $dt = dt_from_string();
             $dt->add( days => C4::Context->preference('ReservesMaxPickUpDelay') );
-            $values->{'expirationdate'} = output_pref({ dt => $dt, dateonly => 1 });
+            $values->{'expirationdate'} = output_pref( { dt => $dt, dateonly => 1 } );
         }
 
         $values->{'waitingdate'} = output_pref({ dt => dt_from_string( $values->{'waitingdate'} ), dateonly => 1 });
@@ -985,7 +985,14 @@ sub SendQueuedMessages {
             _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
         }
         elsif ( lc( $message->{'message_transport_type'} ) eq 'sms' ) {
-            _send_message_by_sms( $message );
+            if ( C4::Context->preference('SMSSendDriver') eq 'Email' ) {
+                my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} );
+                my $sms_provider = Koha::SMS::Providers->find( $member->{'sms_provider_id'} );
+                $message->{to_address} .= '@' . $sms_provider->domain();
+                _send_message_by_email( $message, $params->{'username'}, $params->{'password'}, $params->{'method'} );
+            } else {
+                _send_message_by_sms( $message );
+            }
         }
     }
     return scalar( @$unsent_messages );
@@ -1199,11 +1206,11 @@ sub _send_message_by_email {
     my $branch_email = undef;
     my $branch_replyto = undef;
     my $branch_returnpath = undef;
-    if ($member){
-        my $branchdetail = GetBranchDetail( $member->{'branchcode'} );
-        $branch_email = $branchdetail->{'branchemail'};
-        $branch_replyto = $branchdetail->{'branchreplyto'};
-        $branch_returnpath = $branchdetail->{'branchreturnpath'};
+    if ($member) {
+        my $library = Koha::Libraries->find( $member->{branchcode} );
+        $branch_email      = $library->branchemail;
+        $branch_replyto    = $library->branchreplyto;
+        $branch_returnpath = $library->branchreturnpath;
     }
     my $email = Koha::Email->new();
     my %sendmail_params = $email->create_message_headers(
@@ -1224,6 +1231,7 @@ sub _send_message_by_email {
     }
 
     _update_message_to_address($message->{'message_id'},$to_address) unless $message->{to_address}; #if initial message address was empty, coming here means that a to address was found and queue should be updated
+
     if ( sendmail( %sendmail_params ) ) {
         _set_message_status( { message_id => $message->{'message_id'},
                 status     => 'sent' } );