use Storable qw(thaw);
use Data::Dumper;
use MIME::Base64;
-use Date::Parse;
use File::Slurp qw( slurp );
+use FS::Misc::DateTime qw( parse_datetime );
use FS::UID qw( dbh );
use FS::Record qw( qsearchs );
use FS::cust_main;
file => $file, #filename
type => $type, #csv or xls
format => $format, #extended, extended-plus_company, svc_external,
- # or svc_external_svc_phone
+ #extended-plus_company_and_options
+ #extended-plus_options, or svc_external_svc_phone
agentnum => $agentnum,
refnum => $refnum,
pkgpart => $pkgpart,
svc_acct.username svc_acct._password
);
$payby = 'BILL';
+ } elsif ( $format eq 'extended-plus_options' ) {
+ @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_city ship_state ship_zip ship_country
+ payinfo paycvv paydate
+ invoicing_list
+ cust_pkg.pkgpart
+ svc_acct.username svc_acct._password
+ customer_options
+ );
+ $payby = 'BILL';
} elsif ( $format eq 'extended-plus_company' ) {
@fields = qw( agent_custid refnum
last first company address1 address2 city state zip country
svc_acct.username svc_acct._password
);
$payby = 'BILL';
+ } elsif ( $format eq 'extended-plus_company_and_options' ) {
+ @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
+ svc_acct.username svc_acct._password
+ customer_options
+ );
+ $payby = 'BILL';
} elsif ( $format =~ /^svc_external/ ) {
@fields = qw( agent_custid refnum
last first company address1 address2 city state zip country
my $oldAutoCommit = $FS::UID::AutoCommit;
local $FS::UID::AutoCommit = 0;
my $dbh = dbh;
+
+ #implies ignore_expired_card
+ local($FS::cust_main::import) = 1;
+ local($FS::cust_main::import) = 1;
my $line;
my $row = 0;
if ( $field =~ /^cust_pkg\.(pkgpart|setup|bill|susp|adjourn|expire|cancel)$/ ) {
- #$cust_pkg{$1} = str2time( shift @$columns );
+ #$cust_pkg{$1} = parse_datetime( shift @$columns );
if ( $1 eq 'pkgpart' ) {
$cust_pkg{$1} = shift @columns;
} elsif ( $1 eq 'setup' ) {
- $billtime = str2time(shift @columns);
+ $billtime = parse_datetime(shift @columns);
} else {
- $cust_pkg{$1} = str2time( shift @columns );
+ $cust_pkg{$1} = parse_datetime( shift @columns );
}
} elsif ( $field =~ /^svc_acct\.(username|_password)$/ ) {
}
}
- $cust_main{'payby'} = 'CARD'
- if defined $cust_main{'payinfo'}
- && length $cust_main{'payinfo'};
+ 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;
+ }
+ }
my $invoicing_list = $cust_main{'invoicing_list'}
? [ delete $cust_main{'invoicing_list'} ]
: [];
+ my $customer_options = delete $cust_main{customer_options};
+ $cust_main{tax} = 'Y' if $customer_options =~ /taxexempt/i;
+ push @$invoicing_list, 'POST' if $customer_options =~ /postalinvoice/i;
+
my $cust_main = new FS::cust_main ( \%cust_main );
use Tie::RefHash;
tie my %hash, 'Tie::RefHash'; #this part is important
if ( $cust_pkg{'pkgpart'} ) {
+
+ unless ( $cust_pkg{'pkgpart'} =~ /^\d+$/ ) {
+ $dbh->rollback if $oldAutoCommit;
+ return 'illegal pkgpart: '. $cust_pkg{'pkgpart'};
+ }
+
my $cust_pkg = new FS::cust_pkg ( \%cust_pkg );
my @svc_x = ();