<& /elements/header.html, $title &> % foreach my $partnum (@partnums) { % $cgi->param('parts', $partnum); % $cgi->param('type', 'csv'); % my $header = ".header$partnum"; % my $data = $parts{$partnum}; <& $header &> % #XXX column headings % foreach my $row (@$data) { % foreach my $item (@$row) { % } % }
Part <% $partnum %> Download
<% $item %>
% } # foreach $partnum <& /elements/footer.html &> <%init> die "access denied" unless $FS::CurrentUser::CurrentUser->access_right('List packages'); my %parts; # 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 @partnums = grep /^\d+$/, $cgi->param('parts'); foreach my $partnum (@partnums) { my $method = "part$partnum"; $parts{$partnum} ||= FS::Report::FCC_477->$method( date => $date, agentnum => $agentnum ); } $m->cache->set($session, \%parts, '1h'); my $title = 'FCC Form 477 Data - ' . time2str('%b %o, %Y', $date); if ( $cgi->param('type') eq 'csv' ) { my $partnum = $partnums[0]; # ignore any beyond the first my $data = $parts{$partnum}; my $csv = Text::CSV_XS->new({ eol => "\r\n" }); # i think my $filename = time2str('%Y-%m-%d', $date) . '-part' . $partnum . '.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; } <%def .header6> Census Tract Technology Speed (Mbps) Subscriptions Down Up Total Consumer <%def .header7> State Speed (Mbps) Subscriptions Down Up Total Consumer <%def .header8> State Subscriptions Total Direct <%def .header9> 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 .header10> State VoIP OTT VoIP Non-OTT Total Consumer Total Consumer Bundled Media Type Copper Fiber Coaxial Wireless Other <%def .header11> Census Tract VoIP? Lines/Subscriptions Total Consumer