use FS::Record qw( qsearchs );
use FS::cust_main;
use FS::svc_acct;
+use FS::svc_broadband;
use FS::svc_external;
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'};
@fields = qw( agent_custid refnum
last first address1 address2 city state zip country
daytime night
- ship_last ship_first ship_company ship_address1 ship_address2
+ ship_last ship_first ship_address1 ship_address2
ship_city ship_state ship_zip ship_country
payinfo paycvv paydate
invoicing_list
customer_options
);
$payby = 'BILL';
+ } elsif ( $format =~ /^svc_broadband/ ) {
+ @fields = qw( agent_custid refnum
+ last first company address1 address2 city state zip country
+ daytime night
+ ship_last ship_first ship_company ship_address1 ship_address2
+ ship_city ship_state ship_zip ship_country
+ payinfo paycvv paydate
+ invoicing_list
+ cust_pkg.pkgpart cust_pkg.bill
+ );
+ push @fields, map "svc_broadband.$_", qw( ip_addr mac_addr sectornum );
+ $payby = 'BILL';
} elsif ( $format =~ /^svc_external/ ) {
@fields = qw( agent_custid refnum
last first company address1 address2 city state zip country
$svc_x{$1} = shift @columns;
+ } elsif ( $field =~ /^svc_broadband\.(ip_addr|mac_addr|sectornum)$/ ) {
+
+ $svc_x{$1} = shift @columns;
+
} elsif ( $field =~ /^svc_external\.(id|title)$/ ) {
$svc_x{$1} = shift @columns;
}
if ( defined $cust_main{'payinfo'} && length $cust_main{'payinfo'} ) {
- $cust_main{'payby'} = 'CARD';
- if ($cust_main{'payinfo'} =~ /\s*([AD]?)(.*)\s*$/) {
- $cust_main{'payby'} = 'DCRD' if $1 eq 'D';
- $cust_main{'payinfo'} = $2;
+
+ if ( $cust_main{'payinfo'} =~ /^\s*(\d+\@[\d\.]+)\s*$/ ) {
+
+ $cust_main{'payby'} = 'CHEK';
+ $cust_main{'payinfo'} = $1;
+
+ } else {
+
+ $cust_main{'payby'} = 'CARD';
+
+ if ($cust_main{'payinfo'} =~ /^\s*([AD]?)(.*)\s*$/) {
+
+ ## 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_main{'payby'} = 'DCRD' if $1 eq 'D';
+ $cust_main{'payinfo'} = $2;
+ }
+
}
+
}
$cust_main{$_} = parse_datetime($cust_main{$_})
$svcdb = 'svc_acct';
} elsif ( $svc_x{'id'} || $svc_x{'title'} ) {
$svcdb = 'svc_external';
+ } elsif ( $svc_x{ip_addr} || $svc_x{mac_addr} ) {
+ $svcdb = 'svc_broadband';
}
my $svc_phone = '';