diff options
author | Christopher Burger <burgerc@freeside.biz> | 2018-07-27 08:05:10 -0400 |
---|---|---|
committer | Christopher Burger <burgerc@freeside.biz> | 2018-07-31 08:16:24 -0400 |
commit | 2c013c551506131e70b5d7339f07258861f20300 (patch) | |
tree | 457013ff7d4d95a1127c544f1aa3077d354ed6aa /FS/FS | |
parent | ff2f162d30fc9485464694e714fcb02b1b767f3d (diff) |
RT# 78356 - added speed test fields for broadband service and new modifier to get speed from fcc_477 form in package
Diffstat (limited to 'FS/FS')
-rw-r--r-- | FS/FS/Schema.pm | 3 | ||||
-rw-r--r-- | FS/FS/cust_pkg.pm | 18 | ||||
-rw-r--r-- | FS/FS/part_export/saisei.pm | 77 | ||||
-rw-r--r-- | FS/FS/part_svc.pm | 4 | ||||
-rw-r--r-- | FS/FS/part_svc_column.pm | 2 | ||||
-rwxr-xr-x | FS/FS/svc_broadband.pm | 15 |
6 files changed, 93 insertions, 26 deletions
diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm index 22fa395..5a604bc 100644 --- a/FS/FS/Schema.pm +++ b/FS/FS/Schema.pm @@ -4855,6 +4855,9 @@ sub tables_hashref { 'suid', 'int', 'NULL', '', '', '', 'shared_svcnum', 'int', 'NULL', '', '', '', 'serviceid', 'varchar', 'NULL', 64, '', '',#srvexport/reportfields + 'speed_test_up', 'int', 'NULL', '', '', '', + 'speed_test_down', 'int', 'NULL', '', '', '', + 'speed_test_latency', 'int', 'NULL', '', '', '', ], 'primary_key' => 'svcnum', 'unique' => [ [ 'ip_addr' ], [ 'mac_addr' ] ], diff --git a/FS/FS/cust_pkg.pm b/FS/FS/cust_pkg.pm index 399d13e..63fc663 100644 --- a/FS/FS/cust_pkg.pm +++ b/FS/FS/cust_pkg.pm @@ -5464,6 +5464,24 @@ sub fcc_477_count { } +=item fcc_477_record + +Returns a fcc_477 record based on option name. + +=cut + +sub fcc_477_record { + my ($self, $option_name) = @_; + + my $fcc_record = qsearchs({ + 'table' => 'part_pkg_fcc_option', + 'hashref' => { 'pkgpart' => $self->{Hash}->{pkgpart}, 'fccoptionname' => $option_name, }, + }); + + return ( $fcc_record ); + +} + =item tax_locationnum_sql Returns an SQL expression for the tax location for a package, based diff --git a/FS/FS/part_export/saisei.pm b/FS/FS/part_export/saisei.pm index 2fc1127..617a732 100644 --- a/FS/FS/part_export/saisei.pm +++ b/FS/FS/part_export/saisei.pm @@ -128,9 +128,7 @@ END sub _export_insert { my ($self, $svc_broadband) = @_; - my $service_part = FS::Record::qsearchs( 'part_svc', { 'svcpart' => $svc_broadband->{Hash}->{svcpart} } ); - my $rateplan_name = $service_part->{Hash}->{svc}; - $rateplan_name =~ s/\s/_/g; + my $rateplan_name = $self->get_rateplan_name($svc_broadband); # check for existing rate plan my $existing_rateplan; @@ -217,15 +215,15 @@ sub _export_insert { sub _export_replace { my ($self, $svc_broadband) = @_; + $self->_export_insert($svc_broadband); return ''; } sub _export_delete { my ($self, $svc_broadband) = @_; - my $service_part = FS::Record::qsearchs( 'part_svc', { 'svcpart' => $svc_broadband->{Hash}->{svcpart} } ); - my $rateplan_name = $service_part->{Hash}->{svc}; - $rateplan_name =~ s/\s/_/g; + my $rateplan_name = $self->get_rateplan_name($svc_broadband); + my $username = $svc_broadband->{Hash}->{svcnum}; ## untie host to user @@ -247,25 +245,49 @@ sub _export_unsuspend { sub export_partsvc { my ($self, $svc_part) = @_; - my $rateplan_name = $svc_part->{Hash}->{svc}; - $rateplan_name =~ s/\s/_/g; - my $speeddown = $svc_part->{Hash}->{svc_broadband__speed_down}; - my $speedup = $svc_part->{Hash}->{svc_broadband__speed_up}; + my $fcc_477_speeds; + if ($svc_part->{Hash}->{svc_broadband__speed_down} eq "down" || $svc_part->{Hash}->{svc_broadband__speed_up} eq "up") { + for my $type (qw( down up )) { + my $speed_type = "broadband_".$type."stream"; + foreach my $pkg_svc (FS::Record::qsearch({ + 'table' => 'pkg_svc', + 'select' => 'pkg_svc.*, part_pkg_fcc_option.fccoptionname, part_pkg_fcc_option.optionvalue', + 'addl_from' => ' LEFT JOIN part_pkg_fcc_option USING (pkgpart) ', + 'extra_sql' => " WHERE pkg_svc.svcpart = ".$svc_part->{Hash}->{svcpart}." AND pkg_svc.quantity > 0 AND part_pkg_fcc_option.fccoptionname = '".$speed_type."'", + })) { $fcc_477_speeds->{ + $pkg_svc->{Hash}->{pkgpart}}->{$speed_type} = $pkg_svc->{Hash}->{optionvalue} * 1000 unless !$pkg_svc->{Hash}->{optionvalue}; } + } + } + else { + $fcc_477_speeds->{1}->{broadband_downstream} = $svc_part->{Hash}->{"svc_broadband__speed_down"}; + $fcc_477_speeds->{1}->{broadband_upstream} = $svc_part->{Hash}->{"svc_broadband__speed_up"}; + } - my $temp_svc = $svc_part->{Hash}; - my $svc_broadband = {}; - map { if ($_ =~ /^svc_broadband__(.*)$/) { $svc_broadband->{Hash}->{$1} = $temp_svc->{$_}; } } keys %$temp_svc; + foreach my $key (keys %$fcc_477_speeds) { - # check for existing rate plan - my $existing_rateplan; - $existing_rateplan = $self->api_get_rateplan($rateplan_name) unless $self->{'__saisei_error'}; + $svc_part->{Hash}->{speed_down} = $fcc_477_speeds->{$key}->{broadband_downstream}; + $svc_part->{Hash}->{speed_up} = $fcc_477_speeds->{$key}->{broadband_upstream}; + $svc_part->{Hash}->{svc_broadband__speed_down} = $fcc_477_speeds->{$key}->{broadband_downstream}; + $svc_part->{Hash}->{svc_broadband__speed_up} = $fcc_477_speeds->{$key}->{broadband_upstream}; - # Modify the existing rate plan with new service data. - $self->api_modify_existing_rateplan($svc_broadband, $rateplan_name) unless ($self->{'__saisei_error'} || !$existing_rateplan); + my $temp_svc = $svc_part->{Hash}; + my $svc_broadband = {}; + map { if ($_ =~ /^svc_broadband__(.*)$/) { $svc_broadband->{Hash}->{$1} = $temp_svc->{$_}; } } keys %$temp_svc; - # if no existing rate plan create one and modify it. - $self->api_create_rateplan($svc_broadband, $rateplan_name) unless $existing_rateplan; - $self->api_modify_rateplan($svc_part, $rateplan_name) unless ($self->{'__saisei_error'} || $existing_rateplan); + my $rateplan_name = $self->get_rateplan_name($svc_broadband, $svc_part->{Hash}->{svc}); + + # check for existing rate plan + my $existing_rateplan; + $existing_rateplan = $self->api_get_rateplan($rateplan_name) unless $self->{'__saisei_error'}; + + # Modify the existing rate plan with new service data. + $self->api_modify_existing_rateplan($svc_broadband, $rateplan_name) unless ($self->{'__saisei_error'} || !$existing_rateplan); + + # if no existing rate plan create one and modify it. + $self->api_create_rateplan($svc_broadband, $rateplan_name) unless $existing_rateplan; + $self->api_modify_rateplan($svc_part, $rateplan_name) unless ($self->{'__saisei_error'} || $existing_rateplan); + + } return $self->api_error; @@ -310,6 +332,19 @@ sub export_tower_sector { return $self->api_error; } +## creates the rateplan name +sub get_rateplan_name { + my ($self, $svc_broadband, $svc_name) = @_; + + my $service_part = FS::Record::qsearchs( 'part_svc', { 'svcpart' => $svc_broadband->{Hash}->{svcpart} } ) unless $svc_name; + my $service_name = $svc_name ? $svc_name : $service_part->{Hash}->{svc}; + + my $rateplan_name = $service_name . " " . $svc_broadband->{Hash}->{speed_down} . "-" . $svc_broadband->{Hash}->{speed_up}; + $rateplan_name =~ s/\s/_/g; + + return $rateplan_name; +} + =head1 Saisei API These methods allow access to the Saisei API using the credentials diff --git a/FS/FS/part_svc.pm b/FS/FS/part_svc.pm index 3415595..b82996e 100644 --- a/FS/FS/part_svc.pm +++ b/FS/FS/part_svc.pm @@ -873,10 +873,10 @@ sub process { map { my $f = $svcdb.'__'.$_; my $flag = $param->{ $f.'_flag' } || ''; #silence warnings - if ( $flag =~ /^[MAH]$/ ) { + if ( $flag =~ /^[MAHP]$/ ) { $param->{ $f } = delete( $param->{ $f.'_classnum' } ); } - if ( ( $flag =~ /^[MAHS]$/ or $_ eq 'usergroup' ) + if ( ( $flag =~ /^[MAHSP]$/ or $_ eq 'usergroup' ) and ref($param->{ $f }) ) { $param->{ $f } = join(',', @{ $param->{ $f } }); } diff --git a/FS/FS/part_svc_column.pm b/FS/FS/part_svc_column.pm index 75a2dfb..e055af3 100644 --- a/FS/FS/part_svc_column.pm +++ b/FS/FS/part_svc_column.pm @@ -97,7 +97,7 @@ sub check { ; return $error if $error; - $self->columnflag =~ /^([DFSMAHX]?)$/ + $self->columnflag =~ /^([DFSMAHXP]?)$/ or return "illegal columnflag ". $self->columnflag; $self->columnflag(uc($1)); diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm index b2fc272..bbd4a49 100755 --- a/FS/FS/svc_broadband.pm +++ b/FS/FS/svc_broadband.pm @@ -107,8 +107,16 @@ sub table_info { 'fields' => { 'svcnum' => 'Service', 'description' => 'Descriptive label', - 'speed_down' => 'Download speed (Kbps)', - 'speed_up' => 'Upload speed (Kbps)', + 'speed_up' => { + 'label' => 'Upload speed (Kbps)', + 'type' => 'fcc_477_speed', + 'def_info' => 'both upload and download speed must be set to FCC 477 information if using that modifier', + }, + 'speed_down' => { + 'label' => 'Download speed (Kbps)', + 'type' => 'fcc_477_speed', + 'def_info' => 'both upload and download speed must be set to FCC 477 information if using that modifier', + }, 'ip_addr' => 'IP address', 'blocknum' => { 'label' => 'Address block', @@ -148,6 +156,9 @@ sub table_info { disable_inventory => 1, }, 'serviceid' => 'Torrus serviceid', #but is should be hidden + 'speed_test_up' => 'Speed test download (Kbps)', + 'speed_test_down' => 'Speed test upload (Kbps)', + 'speed_test_latency' => 'Speed test latency (ms)', }, }; } |