<& /elements/header.html, $title &> % foreach my $partname (@partnames) { % $cgi->param('parts', $partname); % $cgi->param('type', 'csv'); % my $header = ".header_$partname"; % my $data = $parts{$partname}; <& $header &> % foreach my $row (@$data) { % foreach my $item (@$row) { % } % }
<% $parttitle{$partname} %> Download
<% $item %>
% } # foreach $partname <& /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 @partnames = grep /^\w+$/, $cgi->param('parts'); foreach my $partname (@partnames) { my $method = "report_$partname"; $parts{$partname} ||= 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 $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; } <%def .header_fixed_broadband> Census Tract Technology Speed (Mbps) Subscriptions Down Up Total Consumer <%def .header_fixed_voice> Census Tract VoIP? Lines/Subscriptions Total Consumer <%def .header_local_phone> 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_mobile_broadband> %# unimplemented State Speed (Mbps) Subscriptions Down Up Total Consumer <%def .header_mobile_voice> %# unimplemented State Subscriptions Total Direct