RT78131 - Created new method to send message receipts so code does not have to be...
authorChristopher Burger <burgerc@freeside.biz>
Tue, 15 May 2018 17:32:46 +0000 (13:32 -0400)
committerChristopher Burger <burgerc@freeside.biz>
Wed, 16 May 2018 18:17:04 +0000 (14:17 -0400)
Conflicts:
FS/FS/cust_pay.pm

FS/FS/cust_pay.pm

index 7739203..285ab3f 100644 (file)
@@ -664,11 +664,75 @@ sub send_receipt {
        || ! $cust_bill
      )
   {
-    my $msgnum = $conf->config('payment_receipt_msgnum', $cust_main->agentnum);
+    $error = $self->send_message_receipt(
+        'cust_main'      => $cust_main,
+        'cust_bill'      => $opt->{cust_bill},
+        'cust_pkg'       => $opt->{cust_pkg},
+        'invoicing_list' => @invoicing_list,
+        'msgnum'         => $conf->config('payment_receipt_msgnum', $cust_main->agentnum)
+    );
+
+  } elsif ( ! $cust_main->invoice_noemail ) { #not manual
+
+    # check to see if they want to send specific message template as receipt for auto payments
+    if ( $conf->config('payment_receipt_msgnum_auto', $cust_main->agentnum) ) {
+      $error = $self->send_message_receipt(
+        'cust_main' => $cust_main,
+        'cust_bill' => $opt->{cust_bill},
+        'msgnum'    => $conf->config('payment_receipt_msgnum_auto', $cust_main->agentnum),
+      );
+    }
+    else {
+      my $queue = new FS::queue {
+        'job'     => 'FS::cust_bill::queueable_email',
+        'paynum'  => $self->paynum,
+        'custnum' => $cust_main->custnum,
+      };
+
+      my %opt = (
+        'invnum'      => $cust_bill->invnum,
+        'no_coupon'   => 1,
+      );
+
+      if ( my $mode = $conf->config('payment_receipt_statement_mode') ) {
+        $opt{'mode'} = $mode;
+      } else {
+        # backward compatibility, no good fix for this yet as some people may
+        # still have "invoice_latex_statement" and such options
+        $opt{'template'} = 'statement';
+        $opt{'notice_name'} = 'Statement';
+      }
+
+      $error = $queue->insert(%opt);
+    }
+
+
+
+  }
+
+  warn "send_receipt: $error\n" if $error;
+}
+
+=item send_message_receipt
+
+sends out a message receipt.
+send_message_receipt($cust_main, $msgnum);
+
+=cut
+
+sub send_message_receipt {
+  my ($self, %opt) = @_;
+  my $cust_main      = $opt{'cust_main'};
+  my $cust_bill      = $opt{'cust_bill'};
+  my $cust_pkg       = $opt{'cust_pkg'};
+  my @invoicing_list = $opt{'invoicing_list'};
+  my $msgnum         = $opt{'msgnum'};
+  my $error = '';
+
     if ( $msgnum ) {
 
       my %substitutions = ();
-      $substitutions{invnum} = $opt->{cust_bill}->invnum if $opt->{cust_bill};
+      $substitutions{invnum} = $cust_bill->invnum if $cust_bill;
 
       my $queue = new FS::queue {
         'job'     => 'FS::Misc::process_send_email',
@@ -684,7 +748,6 @@ sub send_receipt {
         ),
         'msgtype' => 'receipt', # override msg_template's default
       );
-
     } elsif ( $conf->exists('payment_receipt_email') ) {
 
       my $receipt_template = new Text::Template (
@@ -716,13 +779,13 @@ sub send_receipt {
         'company_name' => $conf->config('company_name', $cust_main->agentnum),
       );
 
-      $fill_in{'invnum'} = $opt->{cust_bill}->invnum if $opt->{cust_bill};
+      $fill_in{'invnum'} = $cust_bill->invnum if $cust_bill;
 
-      if ( $opt->{'cust_pkg'} ) {
-        $fill_in{'pkg'} = $opt->{'cust_pkg'}->part_pkg->pkg;
+      if ( $cust_pkg ) {
+        $fill_in{'pkg'} = $cust_pkg->part_pkg->pkg;
         #setup date, other things?
       }
-
+      
       my $queue = new FS::queue {
         'job'     => 'FS::Misc::process_send_generated_email',
         'paynum'  => $self->paynum,
@@ -735,69 +798,13 @@ sub send_receipt {
         'to'      => \@invoicing_list,
         'subject' => 'Payment receipt',
         'body'    => [ $receipt_template->fill_in( HASH => \%fill_in ) ],
-      );
-
+      );  
     } else {
-
       warn "payment_receipt is on, but no payment_receipt_msgnum\n";
-
-    }
-
-  } elsif ( ! $cust_main->invoice_noemail ) { #not manual
-
-    # check to see if they want to send specific message template as receipt for auto payments
-    my $msgnum = $conf->config('payment_receipt_msgnum_auto', $cust_main->agentnum);
-    if ( $msgnum ) {
-
-      my %substitutions = ();
-      $substitutions{invnum} = $opt->{cust_bill}->invnum if $opt->{cust_bill};
-
-      my $queue = new FS::queue {
-        'job'     => 'FS::Misc::process_send_email',
-        'paynum'  => $self->paynum,
-        'custnum' => $cust_main->custnum,
-      };
-
-      $error = $queue->insert(
-        FS::msg_template->by_key($msgnum)->prepare(
-          'cust_main'     => $cust_main,
-          'object'        => $self,
-          'from_config'   => 'payment_receipt_from',
-          'substitutions' => \%substitutions,
-        ),
-        'msgtype' => 'receipt', # override msg_template's default
-      );
-
-    }
-    else {
-      my $queue = new FS::queue {
-        'job'     => 'FS::cust_bill::queueable_email',
-        'paynum'  => $self->paynum,
-        'custnum' => $cust_main->custnum,
-      };
-
-      my %opt = (
-        'invnum'      => $cust_bill->invnum,
-        'no_coupon'   => 1,
-      );
-
-      if ( my $mode = $conf->config('payment_receipt_statement_mode') ) {
-        $opt{'mode'} = $mode;
-      } else {
-        # backward compatibility, no good fix for this yet as some people may
-        # still have "invoice_latex_statement" and such options
-        $opt{'template'} = 'statement';
-        $opt{'notice_name'} = 'Statement';
-      }
-
-      $error = $queue->insert(%opt);
+      $error = "payment_receipt is on, but no payment_receipt_msgnum";
     }
 
-
-
-  }
-  
-  warn "send_receipt: $error\n" if $error;
+  return $error;
 }
 
 =item cust_bill_pay