1 % if ( $cgi->param('_type') eq 'xml' ) {
2 % my @cols = qw(a b c d);
3 % for ( my $row = 0; $row < scalar(@rows); $row++ ) {
5 % if ( exists($data[$col][$row]) and $data[$col][$row] > 0 ) {
6 <PartII_<% $row + 1 %><% $cols[$col] %>>\
7 <% $data[$col][$row] %>\
8 </PartII_<% $row + 1 %><% $cols[$col] %>>
12 % } else { # HTML mode
13 % # fake up the search-html.html header
16 <TR><TD VALIGN="bottom"><BR></TD></TR>
18 <TABLE CLASS="grid" CELLSPACING=0>
20 % foreach (@row1_headers) {
25 % foreach my $rowhead (@rows) {
26 <TR CLASS="row<%$row % 2%>">
27 <TD STYLE="text-align: left; font-weight: bold"><% $rowhead %></TD>
28 % for my $col (0..3) {
30 % if ( exists($data[$col][$row]) ) {
31 <% $data[$col][$row] %>
44 my $curuser = $FS::CurrentUser::CurrentUser;
47 unless $curuser->access_right('List packages');
51 $search_hash{'agentnum'} = $cgi->param('agentnum');
52 $search_hash{'state'} = $cgi->param('state');
53 $search_hash{'classnum'} = [ $cgi->param('classnum') ];
54 $search_hash{'status'} = 'active';
57 foreach ($cgi->param('part2a_row_option')) {
58 push @row_option, (/^\d+$/ ? $_ : undef);
61 my $is_residential = "AND COALESCE(cust_main.company, '') = ''";
62 my $has_report_option = sub {
64 defined($row_option[$_]) ?
66 SELECT 1 FROM part_pkg_option
67 WHERE part_pkg_option.pkgpart = part_pkg.pkgpart
68 AND optionname = 'report_option_" . $row_option[$_]."'
74 # an arrayref for each column
76 # get the skeleton of the query
77 my $sql_query = FS::cust_pkg->search(\%search_hash);
78 my $from_where = $sql_query->{'count_query'};
79 $from_where =~ s/^SELECT COUNT\(\*\) //;
82 my $query_ds0 = "SELECT SUM(COALESCE(part_pkg.fcc_ds0s, pkg_class.fcc_ds0s, 0))
83 $from_where AND fcc_voip_class = '4'"; # 4 = Local Exchange
85 my $total_lines = FS::Record->scalar_sql($query_ds0);
86 # always return zero for the number of resold lines, until an actual ILEC
87 # starts using this report
98 $has_report_option->(0), # LD carrier
99 ($has_report_option->(0))[0] . $is_residential,
100 $has_report_option->(1..7),
103 if ( $total_lines > 0 ) {
104 foreach (@row_conds) {
105 my $sql = $query_ds0 . $_;
106 my $lines = FS::Record->scalar_sql($sql);
107 my $percent = sprintf('%.3f', 100 * $lines / $total_lines);
108 push @{ $data[0] }, $percent;
116 '% residential and LD',
120 '% UNE-P replacement',