multiple state links in FCC report, RT#13922
[freeside.git] / FS / FS / Report / FCC_477.pm
1 package FS::Report::FCC_477;
2 use base qw( FS::Report );
3
4 use strict;
5 use vars qw( @upload @download @technology @part2aoption @part2boption
6              %states
7            );
8 use FS::Record qw( dbh );
9
10 =head1 NAME
11
12 FS::Report::FCC_477 - Routines for FCC Form 477 reports
13
14 =head1 SYNOPSIS
15
16 =head1 BUGS
17
18 Documentation.
19
20 =head1 SEE ALSO
21
22 =cut
23
24 @upload = qw(
25  <200kpbs
26  200-768kpbs
27  768kbps-1.5mbps
28  1.5-3mpbs
29  3-6mbps
30  6-10mbps
31  10-25mbps
32  25-100mbps
33  >100bmps
34 );
35
36 @download = qw(
37  200-768kpbs
38  768kbps-1.5mbps
39  1.5-3mpbs
40  3-6mbps
41  6-10mbps
42  10-25mbps
43  25-100mbps
44  >100bmps
45 );
46
47 @technology = (
48   'Asymetric xDSL',
49   'Symetric xDSL',
50   'Other Wireline',
51   'Cable Modem',
52   'Optical Carrier',
53   'Satellite',
54   'Terrestrial Fixed Wireless',
55   'Terrestrial Mobile Wireless',
56   'Electric Power Line',
57   'Other Technology',
58 );
59
60 @part2aoption = (
61  'LD carrier',
62  'owned loops',
63  'unswitched UNE loops',
64  'UNE-P',
65  'UNE-P replacement',
66  'FTTP',
67  'coax',
68  'wireless',
69 );
70
71 @part2boption = (
72  'nomadic',
73  'copper',
74  'FTTP',
75  'coax',
76  'wireless',
77  'other broadband',
78 );
79
80 #from the select at http://www.ffiec.gov/census/default.aspx
81 %states = (
82   '01' => 'ALABAMA (AL)',
83   '02' => 'ALASKA (AK)',
84   '04' => 'ARIZONA (AZ)',
85   '05' => 'ARKANSAS (AR)',
86   '06' => 'CALIFORNIA (CA)',
87   '08' => 'COLORADO (CO)',
88
89   '09' => 'CONNECTICUT (CT)',
90   '10' => 'DELAWARE (DE)',
91   '11' => 'DISTRICT OF COLUMBIA (DC)',
92   '12' => 'FLORIDA (FL)',
93   '13' => 'GEORGIA (GA)',
94   '15' => 'HAWAII (HI)',
95
96   '16' => 'IDAHO (ID)',
97   '17' => 'ILLINOIS (IL)',
98   '18' => 'INDIANA (IN)',
99   '19' => 'IOWA (IA)',
100   '20' => 'KANSAS (KS)',
101   '21' => 'KENTUCKY (KY)',
102
103   '22' => 'LOUISIANA (LA)',
104   '23' => 'MAINE (ME)',
105   '24' => 'MARYLAND (MD)',
106   '25' => 'MASSACHUSETTS (MA)',
107   '26' => 'MICHIGAN (MI)',
108   '27' => 'MINNESOTA (MN)',
109
110   '28' => 'MISSISSIPPI (MS)',
111   '29' => 'MISSOURI (MO)',
112   '30' => 'MONTANA (MT)',
113   '31' => 'NEBRASKA (NE)',
114   '32' => 'NEVADA (NV)',
115   '33' => 'NEW HAMPSHIRE (NH)',
116
117   '34' => 'NEW JERSEY (NJ)',
118   '35' => 'NEW MEXICO (NM)',
119   '36' => 'NEW YORK (NY)',
120   '37' => 'NORTH CAROLINA (NC)',
121   '38' => 'NORTH DAKOTA (ND)',
122   '39' => 'OHIO (OH)',
123
124   '40' => 'OKLAHOMA (OK)',
125   '41' => 'OREGON (OR)',
126   '42' => 'PENNSYLVANIA (PA)',
127   '44' => 'RHODE ISLAND (RI)',
128   '45' => 'SOUTH CAROLINA (SC)',
129   '46' => 'SOUTH DAKOTA (SD)',
130
131   '47' => 'TENNESSEE (TN)',
132   '48' => 'TEXAS (TX)',
133   '49' => 'UTAH (UT)',
134   '50' => 'VERMONT (VT)',
135   '51' => 'VIRGINIA (VA)',
136   '53' => 'WASHINGTON (WA)',
137
138   '54' => 'WEST VIRGINIA (WV)',
139   '55' => 'WISCONSIN (WI)',
140   '56' => 'WYOMING (WY)',
141   '72' => 'PUERTO RICO (PR)',
142 );
143
144 sub restore_fcc477map {
145     my $key = shift;
146     FS::Record::scalar_sql('',"select formvalue from fcc477map where formkey = ?",$key);
147 }
148
149 sub save_fcc477map {
150     my $key = shift;
151     my $value = shift;
152
153     # lame, particularly lack of transactions
154
155     my $sql = "delete from fcc477map where formkey = ?";
156     my $sth = dbh->prepare($sql) or die dbh->errstr;
157     $sth->execute($key) or die "Error removing FCC 477 form defaults: " . $sth->errstr;
158
159     $sql = "insert into fcc477map (formkey,formvalue) values (?,?)";
160     $sth = dbh->prepare($sql) or die dbh->errstr;
161     $sth->execute($key,$value) or die "Error setting FCC 477 form defaults: " . $sth->errstr;
162
163     '';
164 }
165
166 sub parse_technology_option {
167   my $cgi = shift;
168   my $save = shift;
169   my @result = ();
170   my $i = 0;
171   for (my $i = 0; $i < scalar(@technology); $i++) {
172     my $value = $cgi->param("part1_technology_option_$i"); #lame
173     save_fcc477map("part1_technology_option_$i",$value) 
174         if $save && $value =~ /^\d+$/;
175     push @result, $value =~ /^\d+$/ ? $value : 0;
176   }
177   return (@result);
178 }
179
180 sub statenum2state {
181   my $num = shift;
182   $states{$num};
183 }
184
185 #sub statenum2abbr {
186 #  my $num = shift;
187 #  $states{$num} =~ /\((\w\w)\)$/ or return '';
188 #  $1;
189 #}
190
191 1;