X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=bin%2Fconvert-477-options;h=be37b4133b7bb9f799ade56b6b53d9a0dcaf5ba9;hp=48a52642190f8b3144e0ef247a2d69111c327f08;hb=1f2021c9b76da7cc59e2a981fbac6b24312876d2;hpb=8fdc0ea36474cfb3d1389f41691c14598559cbe7 diff --git a/bin/convert-477-options b/bin/convert-477-options index 48a526421..be37b4133 100755 --- a/bin/convert-477-options +++ b/bin/convert-477-options @@ -60,36 +60,45 @@ my @voip_option = ( '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'}})) { @@ -103,26 +112,32 @@ 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"; }