use FS::svc_phone;
use FS::svc_hardware;
use FS::part_referral;
+use Business::CreditCard 0.35;
$DEBUG = 0;
agentnum => $param->{'agentnum'},
refnum => $param->{'refnum'},
pkgpart => $param->{'pkgpart'},
+ validate_cc => $param->{'validate_cc'},
#'fields' => [qw( cust_pkg.setup dayphone first last address1 address2
# city state zip comments )],
'format' => $param->{'format'},
my $agentnum = $param->{agentnum};
my $refnum = $param->{refnum};
my $pkgpart = $param->{pkgpart};
+ my $validate_cc = $param->{validate_cc};
my $format = $param->{'format'};
my %svc_x = ();
my %bill_location = ();
my %ship_location = ();
+ my $cust_payby = '';
foreach my $field ( @fields ) {
if ( $field =~ /^cust_pkg\.(pkgpart|setup|bill|susp|adjourn|expire|cancel)$/ ) {
if ( $cust_main{'payinfo'} =~ /^\s*(\d+\@[\d\.]+)\s*$/ ) {
- $cust_main{'payby'} = 'CHEK';
- $cust_main{'payinfo'} = $1;
+ delete $cust_main{'payinfo'};
- } else {
+ $cust_payby = new FS::cust_payby {
+ 'payby' => 'CHEK',
+ 'payinfo' => $1,
+ };
+
+ } elsif ($cust_main{'payinfo'} =~ /^\s*([AD]?)(.*)\s*$/) {
- $cust_main{'payby'} = 'CARD';
+ delete $cust_main{'payinfo'};
- if ($cust_main{'payinfo'} =~ /^\s*([AD]?)(.*)\s*$/) {
- $cust_main{'payby'} = 'DCRD' if $1 eq 'D';
- $cust_main{'payinfo'} = $2;
+ ## validate credit card if requested
+ if ($validate_cc) {
+ validate($2)
+ or return "Invalid card($2) for customer ".$cust_main{'first'}." ".$cust_main{'last'};
+ return "Unknown card type for customer ".$cust_main{'first'}." ".$cust_main{'last'}
+ if cardtype($2) eq "Unknown";
}
+ $cust_payby = new FS::cust_payby {
+ 'payby' => ($1 eq 'D') ? 'DCRD' : 'CARD',
+ 'payinfo' => $2,
+ 'paycvv' => delete $cust_main{'paycvv'},
+ 'paydate' => delete $cust_main{'paydate'},
+ 'payname' => $cust_main{'first'}. ' '. $cust_main{'last'},
+ };
+
}
}
$hash{$cust_pkg} = \@svc_x;
}
- my $error = $cust_main->insert( \%hash, $invoicing_list );
+ my %options = ('invoicing_list' => $invoicing_list);
+ $options{'cust_payby'} = [ $cust_payby ] if $cust_payby;
+
+ my $error = $cust_main->insert( \%hash, %options );
if ( $error ) {
$dbh->rollback if $oldAutoCommit;