use vars qw( $bop_processor $bop_login $bop_password $bop_action @bop_options );
use vars qw( $invoice_lines @buf ); #yuck
use Date::Format;
-use Mail::Internet;
+use Mail::Internet 1.44;
use Mail::Header;
use Text::Template;
use FS::Record qw( qsearch qsearchs );
#my @print_text = $cust_bill->print_text; #( date )
my @invoicing_list = $self->cust_main->invoicing_list;
if ( grep { $_ ne 'POST' } @invoicing_list ) { #email invoice
- #false laziness w/FS::cust_pay::delete
+ #false laziness w/FS::cust_pay::delete & fs_signup_server && ::realtime_card
#$ENV{SMTPHOSTS} = $smtpmachine;
$ENV{MAILADDRESS} = $invoice_from;
my $header = new Mail::Header ( [
my($payname, $payfirst, $paylast);
if ( $cust_main->payname ) {
$payname = $cust_main->payname;
- $payname =~ /^\s*([\w \,\.\-\']*)?\s+([\w\,\.\-\']+)$/
+ $payname =~ /^\s*([\w \,\.\-\']*)?\s+([\w\,\.\-\']+)\s*$/
or do {
#$dbh->rollback if $oldAutoCommit;
return "Illegal payname $payname";
($payfirst, $paylast) = ($1, $2);
} else {
$payfirst = $cust_main->getfield('first');
- $paylast = $cust_main->getfield('first');
+ $paylast = $cust_main->getfield('last');
$payname = "$payfirst $paylast";
}
if ( $conf->exists('business-onlinepayment-description') ) {
my $dtempl = $conf->config('business-onlinepayment-description');
- my $agent = $self->cust_main->agent->agent;
+ my $agent_obj = $cust_main->agent
+ or die "can't retreive agent for $cust_main (agentnum ".
+ $cust_main->agentnum. ")";
+ my $agent = $agent_obj->agent;
my $pkgs = join(', ',
map { $_->cust_pkg->part_pkg->pkg }
grep { $_->pkgnum } $self->cust_bill_pkg
'expiration' => $exp,
'referer' => 'http://cleanwhisker.420.am/',
'email' => $email,
+ 'phone' => $cust_main->daytime || $cust_main->night,
);
$transaction->submit();
}
#} elsif ( $options{'report_badcard'} ) {
} else {
- return "$processor error, invnum #". $self->invnum. ': '.
- $transaction->result_code. ": ". $transaction->error_message;
+
+ my $perror = "$processor error, invnum #". $self->invnum. ': '.
+ $transaction->result_code. ": ". $transaction->error_message;
+
+ if ( $conf->exists('emaildecline')
+ && grep { $_ ne 'POST' } $cust_main->invoicing_list
+ ) {
+ my @templ = $conf->config('declinetemplate');
+ my $template = new Text::Template (
+ TYPE => 'ARRAY',
+ SOURCE => [ map "$_\n", @templ ],
+ ) or return "($perror) can't create template: $Text::Template::ERROR";
+ $template->compile()
+ or return "($perror) can't compile template: $Text::Template::ERROR";
+
+ my $error = $transaction->error_message;
+
+ #false laziness w/FS::cust_pay::delete & fs_signup_server && ::send
+ $ENV{MAILADDRESS} = $invoice_from;
+ my $header = new Mail::Header ( [
+ "From: $invoice_from",
+ "To: ". join(', ', grep { $_ ne 'POST' } $cust_main->invoicing_list ),
+ "Sender: $invoice_from",
+ "Reply-To: $invoice_from",
+ "Date: ". time2str("%a, %d %b %Y %X %z", time),
+ "Subject: Your credit card could not be processed",
+ ] );
+ my $message = new Mail::Internet (
+ 'Header' => $header,
+ 'Body' => [ $template->fill_in() ],
+ );
+ $!=0;
+ $message->smtpsend( Host => $smtpmachine )
+ or $message->smtpsend( Host => $smtpmachine, Debug => 1 )
+ or return "($perror) (customer # ". $self->custnum.
+ ") can't send card decline email to ".
+ join(', ', grep { $_ ne 'POST' } $cust_main->invoicing_list ).
+ " via server $smtpmachine with SMTP: $!";
+ }
+
+ return $perror;
}
}
my @invoice_template = $conf->config($templatefile)
or die "cannot load config file $templatefile";
$invoice_lines = 0;
+ my $wasfunc = 0;
foreach ( grep /invoice_lines\(\d+\)/, @invoice_template ) { #kludgy
/invoice_lines\((\d+)\)/;
$invoice_lines += $1;
+ $wasfunc=1;
}
- die "no invoice_lines() functions in template?" unless $invoice_lines;
+ die "no invoice_lines() functions in template?" unless $wasfunc;
my $invoice_template = new Text::Template (
TYPE => 'ARRAY',
SOURCE => [ map "$_\n", @invoice_template ],
$date = $self->_date;
$page = 1;
- $total_pages =
- int( scalar(@FS::cust_bill::buf) / $FS::cust_bill::invoice_lines );
- $total_pages++
- if scalar(@FS::cust_bill::buf) % $FS::cust_bill::invoice_lines;
-
+ if ( $FS::cust_bill::invoice_lines ) {
+ $total_pages =
+ int( scalar(@FS::cust_bill::buf) / $FS::cust_bill::invoice_lines );
+ $total_pages++
+ if scalar(@FS::cust_bill::buf) % $FS::cust_bill::invoice_lines;
+ } else {
+ $total_pages = 1;
+ }
#format address (variable for the template)
my $l = 0;
#and subroutine for the template
sub FS::cust_bill::_template::invoice_lines {
- my $lines = shift;
+ my $lines = shift or return @buf;
map {
scalar(@buf) ? shift @buf : [ '', '' ];
}
=head1 VERSION
-$Id: cust_bill.pm,v 1.25 2002-04-06 22:32:43 ivan Exp $
+$Id: cust_bill.pm,v 1.35 2002-05-18 09:51:30 ivan Exp $
=head1 BUGS