send email on signup server signups (closes: Bug#386)
[freeside.git] / FS / FS / cust_bill.pm
index 943c7b3..1f402fc 100644 (file)
@@ -1,7 +1,7 @@
 package FS::cust_bill;
 
 use strict;
-use vars qw( @ISA $conf $invoice_template $money_char );
+use vars qw( @ISA $conf $money_char );
 use vars qw( $lpr $invoice_from $smtpmachine );
 use vars qw( $processor );
 use vars qw( $xaction $E_NoErr );
@@ -30,21 +30,6 @@ $FS::UID::callback{'FS::cust_bill'} = sub {
 
   $money_char = $conf->config('money_char') || '$';  
 
-  my @invoice_template = $conf->config('invoice_template')
-    or die "cannot load config file invoice_template";
-  $invoice_lines = 0;
-  foreach ( grep /invoice_lines\(\d+\)/, @invoice_template ) { #kludgy
-    /invoice_lines\((\d+)\)/;
-    $invoice_lines += $1;
-  }
-  die "no invoice_lines() functions in template?" unless $invoice_lines;
-  $invoice_template = new Text::Template (
-    TYPE   => 'ARRAY',
-    SOURCE => [ map "$_\n", @invoice_template ],
-  ) or die "can't create new Text::Template object: $Text::Template::ERROR";
-  $invoice_template->compile()
-    or die "can't compile template: $Text::Template::ERROR";
-
   $lpr = $conf->config('lpr');
   $invoice_from = $conf->config('invoice_from');
   $smtpmachine = $conf->config('smtpmachine');
@@ -383,12 +368,13 @@ emails or print.  See L<FS::cust_main_invoice>.
 =cut
 
 sub send {
-  my $self = shift;
+  my($self,$template) = @_;
 
   #my @print_text = $cust_bill->print_text; #( date )
   my @invoicing_list = $self->cust_main->invoicing_list;
   if ( grep { $_ ne 'POST' } @invoicing_list ) { #email invoice
-    $ENV{SMTPHOSTS} = $smtpmachine;
+    #false laziness w/FS::cust_pay::delete & fs_signup_server
+    #$ENV{SMTPHOSTS} = $smtpmachine;
     $ENV{MAILADDRESS} = $invoice_from;
     my $header = new Mail::Header ( [
       "From: $invoice_from",
@@ -400,12 +386,14 @@ sub send {
     ] );
     my $message = new Mail::Internet (
       'Header' => $header,
-      'Body' => [ $self->print_text ], #( date)
+      'Body' => [ $self->print_text('', $template) ], #( date)
     );
-    $message->smtpsend
-      or return "(customer # ". $self->custnum. ") can't send invoice email".
-                " for ". join(', ', grep { $_ ne 'POST' } @invoicing_list ).
-                " to server $smtpmachine!";
+    $!=0;
+    $message->smtpsend( Host => $smtpmachine )
+      or $message->smtpsend( Host => $smtpmachine, Debug => 1 )
+        or return "(customer # ". $self->custnum. ") can't send invoice email".
+                  " to ". join(', ', grep { $_ ne 'POST' } @invoicing_list ).
+                  " via server $smtpmachine with SMTP: $!";
 
   #} elsif ( grep { $_ eq 'POST' } @invoicing_list ) {
   } elsif ( ! @invoicing_list || grep { $_ eq 'POST' } @invoicing_list ) {
@@ -470,7 +458,7 @@ sub realtime_card {
   my($payname, $payfirst, $paylast);
   if ( $cust_main->payname ) {
     $payname = $cust_main->payname;
-    $payname =~ /^\s*([\w \,\.\-\']*\w)?\s+([\w\,\.\-\']+)$/
+    $payname =~ /^\s*([\w \,\.\-\']*)?\s+([\w\,\.\-\']+)$/
       or do {
               #$dbh->rollback if $oldAutoCommit;
               return "Illegal payname $payname";
@@ -490,6 +478,19 @@ sub realtime_card {
   my $email = $invoicing_list[0];
 
   my( $action1, $action2 ) = split(/\s*\,\s*/, $bop_action );
+
+  my $description = 'Internet Services';
+  if ( $conf->exists('business-onlinepayment-description') ) {
+    my $dtempl = $conf->config('business-onlinepayment-description');
+
+    my $agent = $self->cust_main->agent->agent;
+    my $pkgs = join(', ',
+      map { $_->cust_pkg->part_pkg->pkg }
+        grep { $_->pkgnum } $self->cust_bill_pkg
+    );
+    $description = eval qq("$dtempl");
+
+  }
   
   my $transaction =
     new Business::OnlinePayment( $bop_processor, @bop_options );
@@ -498,7 +499,7 @@ sub realtime_card {
     'login'          => $bop_login,
     'password'       => $bop_password,
     'action'         => $action1,
-    'description'    => 'Internet Services',
+    'description'    => $description,
     'amount'         => $amount,
     'invoice_number' => $self->invnum,
     'customer_id'    => $self->custnum,
@@ -532,7 +533,7 @@ sub realtime_card {
       order_number   => $ordernum,
       amount         => $amount,
       authorization  => $auth,
-      description    => 'Internet Services',
+      description    => $description,
     );
 
     $capture->submit();
@@ -699,7 +700,7 @@ L<Time::Local> and L<Date::Parse> for conversion functions.
 
 sub print_text {
 
-  my( $self, $today ) = ( shift, shift );
+  my( $self, $today, $template ) = @_;
   $today ||= time;
 #  my $invnum = $self->invnum;
   my $cust_main = qsearchs('cust_main', { 'custnum', $self->custnum } );
@@ -808,8 +809,25 @@ sub print_text {
   push @buf,['Balance Due', $money_char. 
     sprintf("%10.2f", $balance_due ) ];
 
+  #create the template
+  my $templatefile = 'invoice_template';
+  $templatefile .= "_$template" if $template;
+  my @invoice_template = $conf->config($templatefile)
+  or die "cannot load config file $templatefile";
+  $invoice_lines = 0;
+  foreach ( grep /invoice_lines\(\d+\)/, @invoice_template ) { #kludgy
+    /invoice_lines\((\d+)\)/;
+    $invoice_lines += $1;
+  }
+  die "no invoice_lines() functions in template?" unless $invoice_lines;
+  my $invoice_template = new Text::Template (
+    TYPE   => 'ARRAY',
+    SOURCE => [ map "$_\n", @invoice_template ],
+  ) or die "can't create new Text::Template object: $Text::Template::ERROR";
+  $invoice_template->compile()
+    or die "can't compile template: $Text::Template::ERROR";
+
   #setup template variables
-  
   package FS::cust_bill::_template; #!
   use vars qw( $invnum $date $page $total_pages @address $overdue @buf );
 
@@ -844,13 +862,13 @@ sub print_text {
   $FS::cust_bill::_template::address[$l++] = $cust_main->country
     unless $cust_main->country eq 'US';
 
-  #overdue? (variable for the template)
-  $FS::cust_bill::_template::overdue = ( 
-    $balance_due > 0
-    && $today > $self->_date 
-#    && $self->printed > 1
-    && $self->printed > 0
-  );
+       #  #overdue? (variable for the template)
+       #  $FS::cust_bill::_template::overdue = ( 
+       #    $balance_due > 0
+       #    && $today > $self->_date 
+       ##    && $self->printed > 1
+       #    && $self->printed > 0
+       #  );
 
   #and subroutine for the template
 
@@ -861,7 +879,9 @@ sub print_text {
     }
     ( 1 .. $lines );
   }
-    
+
+
+  #and fill it in
   $FS::cust_bill::_template::page = 1;
   my $lines;
   my @collect;
@@ -880,7 +900,7 @@ sub print_text {
 
 =head1 VERSION
 
-$Id: cust_bill.pm,v 1.19 2002-02-12 18:56:16 ivan Exp $
+$Id: cust_bill.pm,v 1.26 2002-04-07 06:23:29 ivan Exp $
 
 =head1 BUGS