X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fcust_pkg%2FImport.pm;h=b827bcfe1652ae0367dbca3b1080a7aac07a8b0a;hp=cac31f84efc4510292b6f6938fef01db7c08789d;hb=1bc76eeede2fcdea26a9e634409445626f53cdc9;hpb=9837c59915b41af2b7f4d348083a70fa549e10b1 diff --git a/FS/FS/cust_pkg/Import.pm b/FS/FS/cust_pkg/Import.pm index cac31f84e..b827bcfe1 100644 --- a/FS/FS/cust_pkg/Import.pm +++ b/FS/FS/cust_pkg/Import.pm @@ -100,10 +100,12 @@ sub process_batch_import { my %formatfields = ( 'default' => [], + '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 )], + 'quan_price' => [qw( quantity setup_fee recur_fee invoice_details )], ); sub _formatfields { @@ -115,8 +117,11 @@ my %import_options = ( 'preinsert_callback' => sub { my($record, $param) = @_; - my @location_params = grep /^location\./, keys %$param; + + my @location_params = grep { /^location\./ && length($param->{$_}) } + keys %$param; if (@location_params) { +warn join('-', @location_params); my $cust_location = FS::cust_location->new({ 'custnum' => $record->custnum, }); @@ -125,17 +130,57 @@ my %import_options = ( $cust_location->set($1, $param->{$p}); } -warn Dumper $cust_location; # XXX my $error = $cust_location->find_or_insert; # this avoids duplicates return "error creating location: $error" if $error; $record->set('locationnum', $cust_location->locationnum); } + + $record->quantity( $param->{'quan_price.quantity'} ) + if $param->{'quan_price.quantity'} > 0; + + my $s = $param->{'quan_price.setup_fee'}; + my $r = $param->{'quan_price.recur_fee'}; + my $part_pkg = $record->part_pkg; + if ( ( length($s) && $s != $part_pkg->option('setup_fee') ) + or ( length($r) && $r != $part_pkg->option('recur_fee') ) + ) + { + my $custom_part_pkg = $part_pkg->clone; + $custom_part_pkg->disabled('Y'); + my %options = $part_pkg->options; + $options{'setup_fee'} = $s if length($s); + $options{'recur_fee'} = $r if length($r); + my $error = $custom_part_pkg->insert( options=>\%options ); + return "error customizing package: $error" if $error; + $record->pkgpart( $custom_part_pkg->pkgpart ); + } + + ''; }, 'postinsert_callback' => sub { my( $record, $param ) = @_; + if ( $param->{'quan_price.invoice_details'} ) { + + my $weight = 0; + foreach my $detail (split(/\|/, $param->{'quan_price.invoice_details'})) { + + my $cust_pkg_detail = new FS::cust_pkg_detail { + 'pkgnum' => $record->pkgnum, + 'detail' => $detail, + 'detailtype' => 'I', + 'weight' => $weight++, + }; + + my $error = $cust_pkg_detail->insert; + return "error inserting invoice detail: $error" if $error; + + } + + } + my $formatfields = _formatfields; foreach my $svc_x ( grep /^svc/, keys %$formatfields ) { @@ -206,11 +251,76 @@ sub batch_import { @fields = ( 'custnum' ); } + if ( $format =~ /^(.*)-locationnum$/ ) { + $format = $1; + push @fields, 'locationnum'; + } + + if ( $format =~ /^bulk_(.*)$/ ) { + + $format = $1; + + $opt->{'postinsert_callback'} = sub { + my( $record, $param ) = @_; + + my $formatfields = _formatfields; + foreach my $svc_x ( grep /^svc/, keys %$formatfields ) { + + my $ff = $formatfields->{$svc_x}; + + if ( grep $param->{"$svc_x.$_"}, @$ff ) { + + $param->{'svc_phone.phonenum'} =~ /^\s*(\d+)\s*\-\s*(\d+)\s*$/ + or return 'Enter a phone number range, with dash as the separator'; + my($start, $end) = ($1, $2); + if ( length($end) < length($start) ) { + $end = substr($start, 0, length($start) - length($end) ). $end; + } + + foreach my $phonenum ( "$start" .. "$end" ) { + + my $svc = "FS::$svc_x"->new( { + 'pkgnum' => $record->pkgnum, + 'svcpart' => $record->part_pkg->svcpart($svc_x), + map { $_ => $param->{"$svc_x.$_"} } @$ff + } ); + + $svc->phonenum($phonenum); + #$svc->set_default_and_fixed; + my $error = $svc->insert; + return "error inserting service: $error" if $error; + + } + + } + + } + + return ''; #no error + + }; + + } + 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 @@ -218,17 +328,20 @@ sub batch_import { }; } - my $formatfields = _formatfields(); + my @formats = split /-/, $format; + foreach my $f (@formats){ - die "unknown format $format" unless $formatfields->{$format}; + my $formatfields = _formatfields(); + die "unknown format $format" unless $formatfields->{$f}; - foreach my $field ( @{ $formatfields->{$format} } ) { + foreach my $field ( @{ $formatfields->{$f} } ) { - push @fields, sub { - my( $self, $value, $conf, $param ) = @_; - $param->{"$format.$field"} = $value; - }; + push @fields, sub { + my( $self, $value, $conf, $param ) = @_; + $param->{"$f.$field"} = $value; + }; + } } $opt->{'fields'} = \@fields;