1 <& elements/search.html,
2 'html_init' => $html_init,
5 'count_query' => $count_query,
6 'really_disable_download' => 1,
7 'disable_download' => 1,
10 'header' => [ '', @column_option_name ],
11 'xml_elements' => [ @xml_elements ],
12 'xml_omit_empty' => 1,
13 'fields' => [ @fields ],
18 my $curuser = $FS::CurrentUser::CurrentUser;
21 unless $curuser->access_right('List packages');
26 for ( qw(agentnum magic state) ) {
27 $search_hash{$_} = $cgi->param($_) if $cgi->param($_);
29 $search_hash{'country'} = 'US';
31 $search_hash{'classnum'} = [ $cgi->param('classnum') ];
33 my @column_option = grep { /^\d+/ } $cgi->param('part1_column_option')
34 if $cgi->param('part1_column_option');
36 my @row_option = grep { /^\d+/ } $cgi->param('part1_row_option')
37 if $cgi->param('part1_row_option');
39 my @technology_option = &FS::Report::FCC_477::parse_technology_option($cgi);
41 my @column_option_name = scalar(@column_option)
42 ? ( map { my $part_pkg_report_option =
43 qsearchs({ 'table' => 'part_pkg_report_option',
44 'hashref' => { num => $_ },
46 $part_pkg_report_option ? $part_pkg_report_option->name
47 : 'no such report option';
52 my $where = join(' OR ', map { "num = $_" } @row_option );
53 my %row_option_name = $where ?
54 ( map { $_->num => $_->name }
55 qsearch({ 'table' => 'part_pkg_report_option',
57 'extra_sql' => "WHERE $where",
62 my $tech_code = $opt{tech_code};
63 my $technology = $FS::Report::FCC_477::technology[$tech_code] || 'unknown';
64 my $html_init = "<H2>Part IA $technology breakdown by speeds</H2>";
65 my $xml_prefix = 'PartIA_'. chr(65 + $tech_code);
67 if ($cgi->param('_type') eq 'xml') {
69 my @temp = @column_option;
70 @column_option = @row_option;
74 my $query = 'SELECT '. join(' UNION ALL SELECT ',@row_option);
75 my $count_query = 'SELECT '. scalar(@row_option);
77 my $xml_element = 'OOPS, I was never set';
78 my $rowchar = 101; # 'e' -- rows are columns! (pi/2)
81 my ($rowref, $column) = (shift, shift);
82 my $row = $rowref->[0];
84 if ($column eq 'name') {
85 return $row_option_name{$row} || 'no such report option';
86 } elsif ( $column =~ /^(\d+)$/ ) {
87 my @report_option = ( $row || '',
88 $column_option[$column] || '',
89 $technology_option[$tech_code] || '',
92 my ( $count, $residential ) = FS::cust_pkg->fcc_477_count(
93 { %search_hash, 'report_option' => join(',', @report_option) }
96 my $percentage = sprintf('%.2f', $count ? 100 * $residential / $count : 0);
99 if ($cgi->param('_type') eq 'xml') {
100 $rowchar++ if $column == 0;
101 $xml_element = $xml_prefix. chr($rowchar). ($column+1);
102 $return = '' if $count == 0 and $cgi->param('_type') eq 'xml';
104 $return .= "<BR>$percentage% residential";
109 return '<FONT SIZE="+1" COLOR="#ff0000">Bad call to column_value</FONT>';
113 my @fields = map { my $ci = $_; sub { &{$value}(shift, $ci); } }
114 ( 'name', (0 .. $#column_option) );
115 shift @fields if $cgi->param('_type') eq 'xml';
117 my @xml_elements = ( # -- columns are rows! (pi/2)
118 sub { return $xml_element; },
119 sub { return $xml_element; },
120 sub { return $xml_element; },
121 sub { return $xml_element; },
122 sub { return $xml_element; },
123 sub { return $xml_element; },
124 sub { return $xml_element; },
125 sub { return $xml_element; },
126 sub { return $xml_element; },