RT# 82137 - Added ability for processing fee to be pain on seperate invoice.
[freeside.git] / FS / FS / cust_pay.pm
index 5031793..c0a2541 100644 (file)
@@ -241,6 +241,8 @@ sub insert {
   local $FS::UID::AutoCommit = 0;
   my $dbh = dbh;
 
+  my $conf = new FS::Conf;
+
   my $cust_bill;
   if ( $self->invnum ) {
     $cust_bill = qsearchs('cust_bill', { 'invnum' => $self->invnum } )
@@ -393,6 +395,8 @@ sub insert {
 
   $dbh->commit or die $dbh->errstr if $oldAutoCommit;
 
+  $self->{'processing_fee'} = $options{'processing-fee'};
+
   #payment receipt
   my $trigger = $conf->config('payment_receipt-trigger', 
                               $self->cust_main->agentnum) || 'cust_pay';
@@ -650,6 +654,8 @@ sub send_receipt {
 
   return '' unless $conf->config_bool('payment_receipt', $cust_main->agentnum);
 
+  return '' if ($conf->config_bool('allow_payment_receipt_noemail', $cust_main->agentnum) && $cust_main->paymentreceipt_noemail);
+
   my @invoicing_list = $cust_main->invoicing_list_emailonly;
   return '' unless @invoicing_list;
 
@@ -662,53 +668,77 @@ sub send_receipt {
        || ! $cust_bill
      )
   {
-    my $msgnum = $conf->config('payment_receipt_msgnum', $cust_main->agentnum);
-    if ( $msgnum ) {
-
-      my %substitutions = ();
-      $substitutions{invnum} = $opt->{cust_bill}->invnum if $opt->{cust_bill};
-
-      my $msg_template = qsearchs('msg_template',{ msgnum => $msgnum});
-      unless ($msg_template) {
-        warn "send_receipt could not load msg_template";
-        return;
-      }
-
-      my $cust_msg = $msg_template->prepare(
-          'cust_main'     => $cust_main,
-          'object'        => $self,
-          'from_config'   => 'payment_receipt_from',
-          'substitutions' => \%substitutions,
-          'msgtype'       => 'receipt',
+      $error = $self->send_message_receipt(
+        'cust_main' => $cust_main,
+        'cust_bill' => $opt->{cust_bill},
+        'msgnum'    => $conf->config('payment_receipt_msgnum', $cust_main->agentnum)
       );
-      $error = $cust_msg ? $cust_msg->insert : 'error preparing msg_template';
-      if ($error) {
-        warn "send_receipt: $error";
-        return;
-      }
+  #not manual and no noemail flag (here or on the customer)
+  } elsif ( ! $opt->{'noemail'} && ! $cust_main->invoice_noemail ) {
 
+    # 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_msg::process_send',
+        'job'     => 'FS::cust_bill::queueable_email',
         'paynum'  => $self->paynum,
         'custnum' => $cust_main->custnum,
       };
-      $error = $queue->insert( $cust_msg->custmsgnum );
 
-    } else {
+      my %opt = (
+        'invnum'      => $cust_bill->invnum,
+        'no_coupon'   => 1,
+      );
 
-      warn "payment_receipt is on, but no payment_receipt_msgnum\n";
+      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);
     }
 
-  #not manual and no noemail flag (here or on the customer)
-  } elsif ( ! $opt->{'noemail'} && ! $cust_main->invoice_noemail ) {
 
-    # 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);
+
+  }
+
+  warn "send_receipt: $error\n" if $error;
+}
+
+=item send_message_receipt
+
+sends out a message receipt.
+$error = $self->send_message_receipt(
+        'cust_main' => $cust_main,
+        'cust_bill' => $opt->{cust_bill},
+        'msgnum'    => $conf->config('payment_receipt_msgnum', $cust_main->agentnum)
+      );
+
+=cut
+
+sub send_message_receipt {
+  my ($self, %opt) = @_;
+  my $cust_main = $opt{'cust_main'};
+  my $cust_bill = $opt{'cust_bill'};
+  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;
+      $substitutions{'processing_fee'} = $self->{'processing_fee'};
+
 
       my $msg_template = qsearchs('msg_template',{ msgnum => $msgnum});
       unless ($msg_template) {
@@ -726,7 +756,7 @@ sub send_receipt {
       $error = $cust_msg ? $cust_msg->insert : 'error preparing msg_template';
       if ($error) {
         warn "send_receipt: $error";
-        return;
+        return $error;
       }
 
       my $queue = new FS::queue {
@@ -736,36 +766,12 @@ sub send_receipt {
       };
       $error = $queue->insert( $cust_msg->custmsgnum );
 
+    } else {
+      warn "payment_receipt is on, but no payment_receipt_msgnum\n";
+      $error = "payment_receipt is on, but no payment_receipt_msgnum";
     }
-    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;
+  return $error;
 }
 
 =item cust_bill_pay