X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=httemplate%2Fsearch%2F477.html;h=9a412612119dad052ec2e5ff7eb5e355a2e70efb;hp=6f5fcdf3b1f69cd8f2fe79e7b4aedbcfd3beb60f;hb=HEAD;hpb=2b10c0594ff2ab9ce37d9f8af9c154d3bedde731 diff --git a/httemplate/search/477.html b/httemplate/search/477.html old mode 100755 new mode 100644 index 6f5fcdf3b..9a4126121 --- a/httemplate/search/477.html +++ b/httemplate/search/477.html @@ -1,108 +1,313 @@ -% if ( $type eq 'xml' ) { - - -% } else { #html -<& /elements/header.html, "FCC Form 477 Results - $state" &> - - - - -% $cgi->param('_type', $type ); - -
- Download full results
-% $cgi->param('_type', 'xml'); - as XML file
- -% $cgi->param('_type', 'html-print'); - as printable copy - -
-% } #html -% foreach my $part ( @parts ) { -% if ( $part{$part} ) { -% -% if ( $part eq 'V' ) { -% next unless ( $part{'IIA'} || $part{'IIB'} ); -% } -% -% if ( $part eq 'VI_census' ) { -% next unless $part{'IA'}; +<& /elements/header.html, $title &> + +% foreach my $partname (@partnames) { +% my $this_part = $parts{$partname}; +% $cgi->param('parts', $partname); +% $cgi->param('type', 'csv'); + + +% my $header = ".header_$partname"; +% $header .= '_old' if $partname eq 'fbd' && $date < 1569826800; #9/30/2019 +% # ( halfway between the two filing "as of" dates when it changed + +% my $data = $this_part->{data}; +% my $error = $this_part->{error}; + + <& $header &> + +% my $rownum = 0; +% foreach my $row (@$data) { +% my %eh; # error hash +% if ( $error->[$rownum] ) { +% %eh = %{ $error->[$rownum] }; % } -% -% my @reports = (); -% if ( $part eq 'IA' ) { -% for ( my $tech = 0; $tech < scalar(@technology_option); $tech++ ) { -% next unless $technology_option[$tech]; -% my $url = &{$url_mangler}($part); -% if ( $type eq 'xml' ) { -<<% 'Part_IA_'. chr(65 + $tech) %>> -% } -<& "477part${part}_summary.html", 'tech_code' => $tech, 'url' => $url &> -<& "477part${part}_detail.html", 'tech_code' => $tech, 'url' => $url &> -% if ( $type eq 'xml' ) { -> -% } -% } + > +% my $first = 1; +% foreach my $item (@$row) { + +% } #foreach $item +% # display errors +% if ( keys %eh ) { + +% } # if there are errors + +% $rownum++; +% } #foreach $row +
+ <% $part_titles->{$partname} %> +% if ( $this_part->{num_errors} > 0 ) { +% # show error heading while it contains errors + + <% emt('This section contains [quant,_1,error].', $this_part->{num_errors}) %> + +% } + Download +
+% if ($first and $part_link{$partname}) { + "><% $item || '(empty)' %> +% $first = 0; % } else { -% if ( $type eq 'xml' ) { -<<% 'Part_'. $part %>> -% } -% my $url = &{$url_mangler}($part); -<& "477part${part}.html", 'url' => $url &> -% if ( $type eq 'xml' ) { -> -% } + <% $item %> % } -% } -% } -% -% if ( $type eq 'xml' ) { - -% } else { +
    +% foreach my $key (sort keys %eh) { +
  • <% $eh{$key} %>
  • +% } +
+% } # foreach $partname <& /elements/footer.html &> -% } <%init> - -my $curuser = $FS::CurrentUser::CurrentUser; - die "access denied" - unless $curuser->access_right('List packages'); - -my $state = uc($cgi->param('state')); -$state =~ /^[A-Z]{2}$/ or die "illegal state: $state"; - -my %part = map { $_ => 1 } grep { /^\w+$/ } $cgi->param('part'); -my $type = $cgi->param('_type') || 'html'; -my $xlsname = '477report'; -my @technology_option = &FS::Report::FCC_477::parse_technology_option($cgi,1); + unless $FS::CurrentUser::CurrentUser->access_right('List packages'); -# save upload and download mappings -my @download = $cgi->param('part1_column_option'); -my @upload = $cgi->param('part1_row_option'); -for(my $i=0; $i < scalar(@download); $i++) { - &FS::Report::FCC_477::save_fcc477map("part1_column_option_$i",$download[$i]); +my %parts; +my %part_link; +# load from cache if possible +my $session; +if ( $cgi->param('session') =~ /^(\d+)$/ ) { + $session = $1; + %parts = %{ $m->cache->get($session) }; +} else { + $session = sprintf('%010d%06d', time, int(rand(1000000))); + $cgi->param('session', $session); } -for(my $i=0; $i < scalar(@upload); $i++) { - &FS::Report::FCC_477::save_fcc477map("part1_row_option_$i",$upload[$i]); + +my $agentnum; +if ($cgi->param('agentnum') =~ /^(\d+)$/ ) { + $agentnum = $1; } +my $date = parse_datetime($cgi->param('date')) || time; +my @partnames = grep /^\w+$/, $cgi->param('parts'); +my $ignore_quantity = ($cgi->param('ignore_quantity') ? 1 : 0); -my @part2a_row_option = $cgi->param('part2a_row_option'); -for(my $i=0; $i < scalar(@part2a_row_option); $i++) { - &FS::Report::FCC_477::save_fcc477map("part2a_row_option_$i",$part2a_row_option[$i]); +foreach my $partname (@partnames) { + $parts{$partname} ||= FS::Report::FCC_477->report( $partname, + date => $date, + agentnum => $agentnum, + ignore_quantity => $ignore_quantity, + ); # includes error, detail, and data parts + my $detail_table = FS::Report::FCC_477->part_table($partname); + if ($detail_table eq 'cust_pkg') { + my $link = popurl(1).'477_cust_pkg.html?477part='.$partname.";date=$date;"; + if ($agentnum) { + $link .= "agentnum=$agentnum;"; + } + $part_link{$partname} = $link; + } # don't include detail links to deploy_blocks, that's pointless } +$m->cache->set($session, \%parts, '1h'); + +my $title = 'FCC Form 477 Data - ' . time2str('%b %o, %Y', $date); + +if ( $cgi->param('type') eq 'csv' ) { + my $partname = $partnames[0]; # ignore any beyond the first + my $data = $parts{$partname}->{data}; + my $csv = Text::CSV_XS->new({ eol => "\r\n" }); # i think -my @part2b_row_option = $cgi->param('part2b_row_option'); -for(my $i=0; $i < scalar(@part2b_row_option); $i++) { - &FS::Report::FCC_477::save_fcc477map("part2b_row_option_$i",$part2b_row_option[$i]); + my $filename = time2str('%Y-%m-%d', $date) . '-'. $partname . '.csv'; + http_header('Content-Type' => 'text/csv'); + http_header('Content-Disposition' => qq(attachment;filename="$filename")); + + $m->clear_buffer; + + foreach my $row (@$data) { + $csv->combine(@$row); + $m->print($csv->string); + } + $m->abort; } -my $url_mangler = sub { - my $part = shift; - my $url = $cgi->url('-path_info' => 1, '-full' => 1); - $url =~ s/477\./477part$part./; - $url; -}; -my @parts = qw( IA IIA IIB IV V VI_census ); +my $part_titles = FS::Report::FCC_477->parts; +<%def .header_fbd_old> + + Census Block + DBA Name + Technology + Consumer? + Advertised Speed (Mbps) + Business? + Contractual Speed (Mbps) + + + Down + Up + Down + Up + + +<%def .header_fbd> + + Census Block + DBA Name + Technology + Consumer? + Advertised Speed (Mbps) + Business? + + + Down + Up + + +<%def .header_fbs> + + Census Tract + Technology + Speed (Mbps) + Subscriptions + + + Down + Up + Total + Consumer + + +<%def .header_fvs> + + Census Tract + VoIP? + Lines/Subscriptions + + + Total + Consumer + + +<%def .header_lts> + + State + Wholesale + End User Lines + + + VGEs + UNE-Ls + + Total + With Broadband + Consumer + Business + + Local Loop + + Special Media + + + + + +LD + + +LD + + Owned + UNE-L + Resale + + Fiber + Coaxial + Wireless + + +<%def .header_voip> + + State + VoIP OTT + VoIP Non-OTT + + + Total + Consumer + + Total + Consumer + Bundled + Media Type + + + Copper + Fiber + Coaxial + Wireless + Other + + +<%def .header_mbs> +%# unimplemented + + State + Speed (Mbps) + Subscriptions + + + Down + Up + Total + Consumer + + +<%def .header_mvs> +%# unimplemented + + State + Subscriptions + + + Total + Direct + + +