X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_pkg%2FImport.pm;h=dfe62fb8437337777897a4c2e2debb9d919a1109;hb=a8f897874a93d7acfba75833de9c0629e076b752;hp=7a4b9d50ccd6e766d77e8e81319fde9f7f56e028;hpb=b1d445f94514a29e5d4753839798b0291d89aee3;p=freeside.git diff --git a/FS/FS/cust_pkg/Import.pm b/FS/FS/cust_pkg/Import.pm index 7a4b9d50c..dfe62fb84 100644 --- a/FS/FS/cust_pkg/Import.pm +++ b/FS/FS/cust_pkg/Import.pm @@ -12,6 +12,7 @@ use FS::cust_main; use FS::svc_acct; use FS::svc_external; use FS::svc_phone; +use FS::svc_domain; $DEBUG = 0; @@ -102,9 +103,11 @@ sub process_batch_import { my %formatfields = ( 'default' => [], - 'svc_acct' => [qw( username _password )], + 'all_dates' => [], + 'svc_acct' => [qw( username _password domsvc )], 'svc_phone' => [qw( countrycode phonenum sip_password pin )], 'svc_external' => [qw( id title )], + 'location' => [qw( address1 address2 city state zip country )], ); sub _formatfields { @@ -114,22 +117,56 @@ sub _formatfields { my %import_options = ( 'table' => 'cust_pkg', + 'preinsert_callback' => sub { + my($record, $param) = @_; + my @location_params = grep /^location\./, keys %$param; + if (@location_params) { + my $cust_location = FS::cust_location->new({ + 'custnum' => $record->custnum, + }); + foreach my $p (@location_params) { + $p =~ /^location.(\w+)$/; + $cust_location->set($1, $param->{$p}); + } + + my $error = $cust_location->find_or_insert; # this avoids duplicates + return "error creating location: $error" if $error; + $record->set('locationnum', $cust_location->locationnum); + } + ''; + }, + 'postinsert_callback' => sub { my( $record, $param ) = @_; my $formatfields = _formatfields; - foreach my $svc_x ( grep { $_ ne 'default' } keys %$formatfields ) { + foreach my $svc_x ( grep /^svc/, keys %$formatfields ) { my $ff = $formatfields->{$svc_x}; if ( grep $param->{"$svc_x.$_"}, @$ff ) { - my $svc_x = "FS::$svc_x"->new( { + my $svc = "FS::$svc_x"->new( { 'pkgnum' => $record->pkgnum, 'svcpart' => $record->part_pkg->svcpart($svc_x), map { $_ => $param->{"$svc_x.$_"} } @$ff } ); - my $error = $svc_x->insert; - return $error if $error; + + #this whole thing should be turned into a callback or config to turn on + if ( $svc_x eq 'svc_acct' && $svc->username =~ /\@/ ) { + my($username, $domain) = split(/\@/, $svc->username); + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + || new FS::svc_domain { 'svcpart' => 1, + 'domain' => $domain, }; + unless ( $svc_domain->svcnum ) { + my $error = $svc_domain->insert; + return "error auto-inserting domain: $error" if $error; + } + $svc->username($username); + $svc->domsvc($svc_domain->svcnum); + } + + my $error = $svc->insert; + return "error inserting service: $error" if $error; } } @@ -154,8 +191,9 @@ sub batch_import { my $format = delete $opt->{'format'}; my @fields = (); - if ( $format =~ /^(.*)-agent_custid$/ ) { + if ( $format =~ /^(.*)-agent_custid(-agent_pkgid)?$/ ) { $format = $1; + my $agent_pkgid = $2; @fields = ( sub { my( $self, $value ) = @_; # $conf, $param @@ -166,15 +204,35 @@ sub batch_import { $self->custnum($cust_main->custnum) if $cust_main; }, ); + push @fields, 'agent_pkgid' if $agent_pkgid; } else { @fields = ( 'custnum' ); } + if ( $format =~ /^(.*)-locationnum$/ ) { + $format = $1; + push @fields, 'locationnum'; + } + push @fields, ( 'pkgpart', 'discountnum' ); - foreach my $field ( - qw( start_date setup bill last_bill susp adjourn cancel expire ) - ) { + my @date_fields = (); + if ( $format =~ /all_dates/ ) { + @date_fields = qw( + order_date + start_date setup bill last_bill susp adjourn + resume + cancel expire + contract_end dundate + ); + } else { + @date_fields = qw( + start_date setup bill last_bill susp adjourn + cancel expire + ); + } + + foreach my $field (@date_fields) { push @fields, sub { my( $self, $value ) = @_; # $conf, $param #->$field has undesirable effects