link new tax report to cust_credit_bill_pkg for credits, RT#12332
[freeside.git] / httemplate / search / 477partIA_detail.html
1 <% include( 'elements/search.html',
2                   'html_init'        => $html_init,
3                   'name'             => 'lines',
4                   'query'            => $query,
5                   'count_query'      => $count_query,
6                   'really_disable_download' => 1,
7                   'disable_download' => 1,
8                   'nohtmlheader'     => 1,
9                   'disable_total'    => 1,
10                   'header'           => [ '', @column_option_name ],
11                   'xml_elements'     => [ @xml_elements ],
12                   'xml_omit_empty'   => 1,
13                   'fields'           => [  @fields ],
14               )
15 %>
16 <%init>
17
18 my $curuser = $FS::CurrentUser::CurrentUser;
19
20 die "access denied"
21   unless $curuser->access_right('List packages');
22
23 my %opt = @_;
24 my %search_hash = ();
25   
26 for ( qw(agentnum magic classnum) ) {
27   $search_hash{$_} = $cgi->param($_) if $cgi->param($_);
28 }
29
30 my @column_option = grep { /^\d+/ } $cgi->param('part1_column_option')
31   if $cgi->param('part1_column_option');
32
33 my @row_option = grep { /^\d+/ } $cgi->param('part1_row_option')
34   if $cgi->param('part1_row_option');
35
36 my @technology_option = &FS::Report::FCC_477::parse_technology_option($cgi);
37
38 my @column_option_name = scalar(@column_option)
39   ? ( map { my $part_pkg_report_option = 
40               qsearchs({ 'table' => 'part_pkg_report_option',
41                          'hashref' => { num => $_ },
42                       });
43             $part_pkg_report_option ? $part_pkg_report_option->name
44                                     : 'no such report option';
45           } @column_option
46     )
47   : ( 'all packages' );
48
49 my $where = join(' OR ', map { "num = $_" } @row_option );
50 my %row_option_name = $where ?
51                         ( map { $_->num => $_->name }
52                           qsearch({ 'table' => 'part_pkg_report_option',
53                                     'hashref' => {},
54                                     'extra_sql' => "WHERE $where",
55                                  })
56                         ) :
57                         ();
58
59 my $tech_code = $opt{tech_code};
60 my $technology = $FS::Report::FCC_477::technology[$tech_code] || 'unknown';
61 my $html_init = "<H2>Part IA $technology breakdown by speeds</H2>";
62 my $xml_prefix = 'PartIA_'. chr(65 + $tech_code);
63
64 if ($cgi->param('_type') eq 'xml') {
65   #rotate data pi/2
66   my @temp = @column_option;
67   @column_option = @row_option;
68   @row_option = @temp;
69 }
70
71 my $query = 'SELECT '. join(' UNION ALL SELECT ',@row_option);
72 my $count_query = 'SELECT '. scalar(@row_option);
73
74 my $xml_element = 'OOPS, I was never set';
75 my $rowchar = 101; # 'e' -- rows are columns! (pi/2)
76
77 my $value = sub {
78   my ($rowref, $column) = (shift, shift);
79   my $row = $rowref->[0];
80
81   if ($column eq 'name') {
82     return $row_option_name{$row} || 'no such report option';
83   } elsif ( $column =~ /^(\d+)$/ ) {
84     my @report_option = ( $row || '',
85                           $column_option[$column] || '',
86                           $technology_option[$tech_code] || '',
87                         );
88
89     my ( $count, $residential ) = FS::cust_pkg->fcc_477_count(
90       { %search_hash, 'report_option' => join(',', @report_option) }
91     );
92
93     my $percentage = sprintf('%.2f', $count ? 100 * $residential / $count : 0);
94     my $return = $count;
95
96     if ($cgi->param('_type') eq 'xml') {
97       $rowchar++ if $column == 0;
98       $xml_element = $xml_prefix. chr($rowchar). ($column+1);
99       $return = '' if $count == 0 and $cgi->param('_type') eq 'xml';
100     } else {
101       $return .= "<BR>$percentage% residential";
102     }
103
104     return $return;
105   } else {
106     return '<FONT SIZE="+1" COLOR="#ff0000">Bad call to column_value</FONT>';
107   }
108 };
109
110 my @fields = map { my $ci = $_; sub { &{$value}(shift, $ci); } }
111             ( 'name', (0 .. $#column_option) );
112 shift @fields if $cgi->param('_type') eq 'xml';
113
114 my @xml_elements = (  # -- columns are rows! (pi/2)
115   sub { return $xml_element; },
116   sub { return $xml_element; },
117   sub { return $xml_element; },
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 );
125
126 </%init>