X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_pkg%2FImport.pm;h=93bd88d7b6293f89c0948b322535ab1f405c1af1;hb=f228534e7bc57e615657d6a8b9c09069f34f914e;hp=96c6272b74c07b9518189fb64ca6855304b6b743;hpb=d7dd43d69c648433cd34f26a339465452082a097;p=freeside.git diff --git a/FS/FS/cust_pkg/Import.pm b/FS/FS/cust_pkg/Import.pm index 96c6272b7..93bd88d7b 100644 --- a/FS/FS/cust_pkg/Import.pm +++ b/FS/FS/cust_pkg/Import.pm @@ -105,6 +105,7 @@ my %formatfields = ( '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 { @@ -116,7 +117,9 @@ 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) { my $cust_location = FS::cust_location->new({ 'custnum' => $record->custnum, @@ -130,18 +133,73 @@ my %import_options = ( 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') ) + ) + { + + local($FS::part_pkg::skip_pkg_svc_hack) = 1; + + 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; + + #not ->pkg_svc, we want to ignore links and clone the actual package def + foreach my $pkg_svc ( $part_pkg->_pkg_svc ) { + my $c_pkg_svc = new FS::pkg_svc { $pkg_svc->hash }; + $c_pkg_svc->pkgsvcnum(''); + $c_pkg_svc->pkgpart( $custom_part_pkg->pkgpart ); + my $error = $c_pkg_svc->insert; + 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 ) { my $ff = $formatfields->{$svc_x}; if ( grep $param->{"$svc_x.$_"}, @$ff ) { + my $svc = "FS::$svc_x"->new( { 'pkgnum' => $record->pkgnum, 'svcpart' => $record->part_pkg->svcpart($svc_x),