'media:Other'
);
-my %num_to_formkey = map { $_->formvalue => $_->formkey }
- qsearch('fcc477map', {});
+my %num_to_formkey; # o2m
+foreach ( qsearch('fcc477map', {}) ) {
+ push @{ $num_to_formkey{$_->formvalue} ||= [] }, $_->formkey;
+}
sub report_option_to_fcc_option {
my $report_option_num = shift;
- my $formkey = $num_to_formkey{$report_option_num}
+ my $formkeys = $num_to_formkey{$report_option_num}
or return;
- if ($formkey =~ /^part1_column_option_(\d+)/) {
- #download speed
- return (broadband_downstream => $min_download_speed[$1]);
- } elsif ($formkey =~ /^part1_row_option_(\d+)/) {
- #upload speed
- return (broadband_upstream => $min_upload_speed[$1]);
- } elsif ($formkey =~ /^part1_technology_option_(\d+)/) {
- #broadband tech
- return (is_broadband => 1,
- media => $media_type[$1],
- technology => $technology[$1]);
- } elsif ($formkey =~ /^part2a_row_option_(\d+)/) {
- #local phone options
- return (media => 'Copper', # sensible default
- split(':', $phone_option[$1])
- );
- } elsif ($formkey =~ /^part2b_row_option_(\d+)/) {
- #VoIP options (are all media types)
- return (split(':', $voip_option[$1]));
- } else {
- warn "can't parse option with formkey '$formkey'\n";
- return;
+ my @return;
+ foreach my $formkey (@$formkeys) {
+ if ($formkey =~ /^part1_column_option_(\d+)/) {
+ #download speed
+ push @return, (broadband_downstream => $min_download_speed[$1]);
+ } elsif ($formkey =~ /^part1_row_option_(\d+)/) {
+ #upload speed
+ push @return, (broadband_upstream => $min_upload_speed[$1]);
+ } elsif ($formkey =~ /^part1_technology_option_(\d+)/) {
+ #broadband tech
+ push @return,
+ (is_broadband => 1,
+ media => $media_type[$1],
+ technology => $technology[$1]);
+ } elsif ($formkey =~ /^part2a_row_option_(\d+)/) {
+ #local phone options
+ push @return,
+ (media => 'Copper', # sensible default
+ split(':', $phone_option[$1])
+ );
+ } elsif ($formkey =~ /^part2b_row_option_(\d+)/) {
+ #VoIP options (are all media types)
+ push @return, (split(':', $voip_option[$1]));
+ } elsif ($formkey =~ /^part5_report_option/) {
+ # ignore this
+ } else {
+ warn "can't parse option with formkey '$formkey'\n";
+ }
}
+ @return;
}
for my $part_pkg (qsearch('part_pkg', { freq => {op => '!=', value => '0'}})) {
push @fcc_opts, report_option_to_fcc_option($num);
}
# other special stuff:
- # FCC voice class (VoIP OTT, VoIP + broadband)
- if ($part_pkg->fcc_voip_class == 1) {
- push @fcc_opts, 'is_voip' => 1;
- } elsif ( $part_pkg->fcc_voip_class == 2) {
- push @fcc_opts, 'is_voip' => 1, 'is_broadband' => 1;
- }
- # DS0 equivalent lines
- if ( $part_pkg->fcc_ds0s ) {
- if ($part_pkg->fcc_voip_class) {
- # there's no such thing as a VoIP DS0 equivalent, but this is
- # what we used the field for
- push @fcc_opts, 'voip_lines' => $part_pkg->fcc_ds0s;
+ # FCC voice class (VoIP OTT, VoIP + broadband, Wholesale VoIP, Local
+ # Exchange) and DS0 equivalent lines
+ my $sessions = $part_pkg->fcc_ds0s;
+
+ if ( $sessions ) { # then this is a voice package of some kind
+ if ($part_pkg->fcc_voip_class == 1) {
+ # VoIP OTT (connection not included)
+ push @fcc_opts, 'is_voip' => 1, 'voip_ott' => 1,
+ 'voip_sessions' => $sessions;
+ } elsif ( $part_pkg->fcc_voip_class == 2) {
+ # VoIP non-OTT; do not set is_broadband since the connection is not
+ # necessarily general Internet access
+ push @fcc_opts, 'is_voip' => 1,
+ 'voip_sessions' => $sessions;
+ } elsif ( $part_pkg->fcc_voip_class == 3 ) {
+ # wholesale VoIP; apparently no longer reportable?
} else {
- push @fcc_opts, 'phone_lines' => $part_pkg->fcc_ds0s, 'is_phone' => 1;
+ # local exchange telephone
+ push @fcc_opts, 'is_phone' => 1,
+ 'phone_lines' => $sessions;
}
}
my %fcc_opts = @fcc_opts;
#print map {"\t$_\t".$fcc_opts{$_}."\n"} keys %fcc_opts;
- my $error = $part_pkg->process_fcc_options(\%fcc_opts);
+ my $error = $part_pkg->set_fcc_options(\%fcc_opts);
if ( $error ) {
die "$error\n";
}