NG auth: autocreate records for external users, RT#21563
[freeside.git] / httemplate / search / 477partIA_detail.html
1 <& 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 state) ) {
27   $search_hash{$_} = $cgi->param($_) if $cgi->param($_);
28 }
29 $search_hash{'country'} = 'US';
30
31 $search_hash{'classnum'} = [ $cgi->param('classnum') ];
32
33 my @column_option = grep { /^\d+/ } $cgi->param('part1_column_option')
34   if $cgi->param('part1_column_option');
35
36 my @row_option = grep { /^\d+/ } $cgi->param('part1_row_option')
37   if $cgi->param('part1_row_option');
38
39 my @technology_option = &FS::Report::FCC_477::parse_technology_option($cgi);
40
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 => $_ },
45                       });
46             $part_pkg_report_option ? $part_pkg_report_option->name
47                                     : 'no such report option';
48           } @column_option
49     )
50   : ( 'all packages' );
51
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',
56                                     'hashref' => {},
57                                     'extra_sql' => "WHERE $where",
58                                  })
59                         ) :
60                         ();
61
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);
66
67 if ($cgi->param('_type') eq 'xml') {
68   #rotate data pi/2
69   my @temp = @column_option;
70   @column_option = @row_option;
71   @row_option = @temp;
72 }
73
74 my $query = 'SELECT '. join(' UNION ALL SELECT ',@row_option);
75 my $count_query = 'SELECT '. scalar(@row_option);
76
77 my $xml_element = 'OOPS, I was never set';
78 my $rowchar = 101; # 'e' -- rows are columns! (pi/2)
79
80 my $value = sub {
81   my ($rowref, $column) = (shift, shift);
82   my $row = $rowref->[0];
83
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] || '',
90                         );
91
92     my ( $count, $residential ) = FS::cust_pkg->fcc_477_count(
93       { %search_hash, 'report_option' => join(',', @report_option) }
94     );
95
96     my $percentage = sprintf('%.2f', $count ? 100 * $residential / $count : 0);
97     my $return = $count;
98
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';
103     } else {
104       $return .= "<BR>$percentage% residential";
105     }
106
107     return $return;
108   } else {
109     return '<FONT SIZE="+1" COLOR="#ff0000">Bad call to column_value</FONT>';
110   }
111 };
112
113 my @fields = map { my $ci = $_; sub { &{$value}(shift, $ci); } }
114             ( 'name', (0 .. $#column_option) );
115 shift @fields if $cgi->param('_type') eq 'xml';
116
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; },
127 );
128
129 </%init>