49bb8a852d94740af8e7a31f75ef2a0871253bdd
[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   'Asymmetric xDSL',
49   'Symmetric 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   local $SIG{HUP} = 'IGNORE';
154   local $SIG{INT} = 'IGNORE';
155   local $SIG{QUIT} = 'IGNORE';
156   local $SIG{TERM} = 'IGNORE';
157   local $SIG{TSTP} = 'IGNORE';
158   local $SIG{PIPE} = 'IGNORE';
159
160   my $oldAutoCommit = $FS::UID::AutoCommit;
161   local $FS::UID::AutoCommit = 0;
162   my $dbh = dbh;
163
164   # lame (should be normal FS::Record access)
165
166   my $sql = "delete from fcc477map where formkey = ?";
167   my $sth = dbh->prepare($sql) or die dbh->errstr;
168   $sth->execute($key) or do {
169     warn "WARNING: Error removing FCC 477 form defaults: " . $sth->errstr;
170     $dbh->rollback if $oldAutoCommit;
171   };
172
173   $sql = "insert into fcc477map (formkey,formvalue) values (?,?)";
174   $sth = dbh->prepare($sql) or die dbh->errstr;
175   $sth->execute($key,$value) or do {
176     warn "WARNING: Error setting FCC 477 form defaults: " . $sth->errstr;
177     $dbh->rollback if $oldAutoCommit;
178   };
179
180   $dbh->commit or die $dbh->errstr if $oldAutoCommit;
181
182   '';
183 }
184
185 sub parse_technology_option {
186   my $cgi = shift;
187   my $save = shift;
188   my @result = ();
189   my $i = 0;
190   for (my $i = 0; $i < scalar(@technology); $i++) {
191     my $value = $cgi->param("part1_technology_option_$i"); #lame
192     save_fcc477map("part1_technology_option_$i",$value) 
193         if $save && $value =~ /^\d+$/;
194     push @result, $value =~ /^\d+$/ ? $value : 0;
195   }
196   return (@result);
197 }
198
199 sub statenum2state {
200   my $num = shift;
201   $states{$num};
202 }
203
204 #sub statenum2abbr {
205 #  my $num = shift;
206 #  $states{$num} =~ /\((\w\w)\)$/ or return '';
207 #  $1;
208 #}
209
210 1;