combine ticket notification scrips, #15353
[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) ) {
27   $search_hash{$_} = $cgi->param($_) if $cgi->param($_);
28 }
29
30 $search_hash{'classnum'} = [ $cgi->param('classnum') ];
31
32 my @column_option = grep { /^\d+/ } $cgi->param('part1_column_option')
33   if $cgi->param('part1_column_option');
34
35 my @row_option = grep { /^\d+/ } $cgi->param('part1_row_option')
36   if $cgi->param('part1_row_option');
37
38 my @technology_option = &FS::Report::FCC_477::parse_technology_option($cgi);
39
40 my @column_option_name = scalar(@column_option)
41   ? ( map { my $part_pkg_report_option = 
42               qsearchs({ 'table' => 'part_pkg_report_option',
43                          'hashref' => { num => $_ },
44                       });
45             $part_pkg_report_option ? $part_pkg_report_option->name
46                                     : 'no such report option';
47           } @column_option
48     )
49   : ( 'all packages' );
50
51 my $where = join(' OR ', map { "num = $_" } @row_option );
52 my %row_option_name = $where ?
53                         ( map { $_->num => $_->name }
54                           qsearch({ 'table' => 'part_pkg_report_option',
55                                     'hashref' => {},
56                                     'extra_sql' => "WHERE $where",
57                                  })
58                         ) :
59                         ();
60
61 my $tech_code = $opt{tech_code};
62 my $technology = $FS::Report::FCC_477::technology[$tech_code] || 'unknown';
63 my $html_init = "<H2>Part IA $technology breakdown by speeds</H2>";
64 my $xml_prefix = 'PartIA_'. chr(65 + $tech_code);
65
66 if ($cgi->param('_type') eq 'xml') {
67   #rotate data pi/2
68   my @temp = @column_option;
69   @column_option = @row_option;
70   @row_option = @temp;
71 }
72
73 my $query = 'SELECT '. join(' UNION ALL SELECT ',@row_option);
74 my $count_query = 'SELECT '. scalar(@row_option);
75
76 my $xml_element = 'OOPS, I was never set';
77 my $rowchar = 101; # 'e' -- rows are columns! (pi/2)
78
79 my $value = sub {
80   my ($rowref, $column) = (shift, shift);
81   my $row = $rowref->[0];
82
83   if ($column eq 'name') {
84     return $row_option_name{$row} || 'no such report option';
85   } elsif ( $column =~ /^(\d+)$/ ) {
86     my @report_option = ( $row || '',
87                           $column_option[$column] || '',
88                           $technology_option[$tech_code] || '',
89                         );
90
91     my ( $count, $residential ) = FS::cust_pkg->fcc_477_count(
92       { %search_hash, 'report_option' => join(',', @report_option) }
93     );
94
95     my $percentage = sprintf('%.2f', $count ? 100 * $residential / $count : 0);
96     my $return = $count;
97
98     if ($cgi->param('_type') eq 'xml') {
99       $rowchar++ if $column == 0;
100       $xml_element = $xml_prefix. chr($rowchar). ($column+1);
101       $return = '' if $count == 0 and $cgi->param('_type') eq 'xml';
102     } else {
103       $return .= "<BR>$percentage% residential";
104     }
105
106     return $return;
107   } else {
108     return '<FONT SIZE="+1" COLOR="#ff0000">Bad call to column_value</FONT>';
109   }
110 };
111
112 my @fields = map { my $ci = $_; sub { &{$value}(shift, $ci); } }
113             ( 'name', (0 .. $#column_option) );
114 shift @fields if $cgi->param('_type') eq 'xml';
115
116 my @xml_elements = (  # -- columns are rows! (pi/2)
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   sub { return $xml_element; },
125   sub { return $xml_element; },
126 );
127
128 </%init>