% } # foreach $partname
<& /elements/footer.html &>
<%init>
die "access denied"
unless $FS::CurrentUser::CurrentUser->access_right('List packages');
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);
}
my $agentnum;
if ($cgi->param('agentnum') =~ /^(\d+)$/ ) {
$agentnum = $1;
}
my $date = parse_datetime($cgi->param('date')) || time;
my @partnames = grep /^\w+$/, $cgi->param('parts');
foreach my $partname (@partnames) {
$parts{$partname} ||= FS::Report::FCC_477->report( $partname,
date => $date,
agentnum => $agentnum,
);
my $detail_table = FS::Report::FCC_477->part_table($partname);
if ($detail_table eq 'cust_pkg') {
my $link = popurl(1).'cust_pkg.cgi?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};
my $csv = Text::CSV_XS->new({ eol => "\r\n" }); # i think
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 $part_titles = FS::Report::FCC_477->parts;
<%def .header_fbd>
Census Block
DBA Name
Technology
Consumer?
Advertised Speed (Mbps)
Business?
Contractual Speed (Mbps)
Down
Up
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