summaryrefslogtreecommitdiff
path: root/FS/FS
diff options
context:
space:
mode:
authorChristopher Burger <burgerc@freeside.biz>2018-07-27 08:05:10 -0400
committerChristopher Burger <burgerc@freeside.biz>2018-07-31 08:16:24 -0400
commit2c013c551506131e70b5d7339f07258861f20300 (patch)
tree457013ff7d4d95a1127c544f1aa3077d354ed6aa /FS/FS
parentff2f162d30fc9485464694e714fcb02b1b767f3d (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.pm3
-rw-r--r--FS/FS/cust_pkg.pm18
-rw-r--r--FS/FS/part_export/saisei.pm77
-rw-r--r--FS/FS/part_svc.pm4
-rw-r--r--FS/FS/part_svc_column.pm2
-rwxr-xr-xFS/FS/svc_broadband.pm15
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)',
},
};
}