summaryrefslogtreecommitdiff
path: root/FS/FS/state.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2020-04-14 12:25:04 -0700
committerIvan Kohler <ivan@freeside.biz>2020-04-14 12:25:04 -0700
commitddd18808f81fe695ac854e8ef54fe88635ec6d3b (patch)
tree2f2944a9e9b900fe17e27c24d7e94a3eb074da7c /FS/FS/state.pm
parent449e2f9cd2b2d1da7a64f3a63b9a37bed1807075 (diff)
remove need for old Locale::SubCountry
Diffstat (limited to 'FS/FS/state.pm')
-rw-r--r--FS/FS/state.pm87
1 files changed, 73 insertions, 14 deletions
diff --git a/FS/FS/state.pm b/FS/FS/state.pm
index 671a93b..fa8cef5 100644
--- a/FS/FS/state.pm
+++ b/FS/FS/state.pm
@@ -76,29 +76,87 @@ sub check {
=cut
+our %state2fips = (
+ 'AL' => '01',
+ 'AK' => '02',
+ 'AZ' => '04',
+ 'AR' => '05',
+ 'CA' => '06',
+ 'CO' => '08',
+ 'CT' => '09',
+ 'DE' => '10',
+ 'DC' => '11',
+ 'FL' => '12',
+ 'GA' => '13',
+ 'HI' => '15',
+ 'ID' => '16',
+ 'IL' => '17',
+ 'IN' => '18',
+ 'IA' => '19',
+ 'KS' => '20',
+ 'KY' => '21',
+ 'LA' => '22',
+ 'ME' => '23',
+ 'MD' => '24',
+ 'MA' => '25',
+ 'MI' => '26',
+ 'MN' => '27',
+ 'MS' => '28',
+ 'MO' => '29',
+ 'MT' => '30',
+ 'NE' => '31',
+ 'NV' => '32',
+ 'NH' => '33',
+ 'NJ' => '34',
+ 'NM' => '35',
+ 'NY' => '36',
+ 'NC' => '37',
+ 'ND' => '38',
+ 'OH' => '39',
+ 'OK' => '40',
+ 'OR' => '41',
+ 'PA' => '42',
+ 'RI' => '44',
+ 'SC' => '45',
+ 'SD' => '46',
+ 'TN' => '47',
+ 'TX' => '48',
+ 'UT' => '49',
+ 'VT' => '50',
+ 'VA' => '51',
+ 'WA' => '53',
+ 'WV' => '54',
+ 'WI' => '55',
+ 'WY' => '56',
+
+ 'AS' => '60', #American Samoa
+ 'GU' => '66', #Guam
+ 'MP' => '69', #Northern Mariana Islands
+ 'PR' => '72', #Puerto Rico
+ 'VI' => '78', #Virgin Islands
+);
+
sub _upgrade_data {
- warn "Updating state and country codes...\n";
+ # we only need U.S. state codes at this point (for FCC 477 reporting)
+ warn "Updating state FIPS codes...\n";
my %existing;
- foreach my $state (qsearch('state')) {
+ foreach my $state ( qsearch('state', {'country'=>'US'}) ) {
$existing{$state->country} ||= {};
$existing{$state->country}{$state->state} = $state;
}
- my $world = Locale::SubCountry::World->new;
- foreach my $country_code ($world->all_codes) {
+ foreach my $country_code ('US') {
my $country = Locale::SubCountry->new($country_code);
next unless $country->has_sub_countries;
$existing{$country} ||= {};
foreach my $state_code ($country->all_codes) {
- my $fips = $country->FIPS10_4_code($state_code);
- # we really only need U.S. state codes at this point, so if there's
- # no FIPS code, ignore it.
- next if !$fips or $fips eq 'unknown' or $fips =~ /\W/;
+ my $fips = $state2fips{$state_code} || next;
my $this_state = $existing{$country_code}{$state_code};
if ($this_state) {
if ($this_state->fips ne $fips) { # this should never happen...
- $this_state->set(fips => $fips);
- my $error = $this_state->replace;
- die "error updating $country_code/$state_code:\n$error\n" if $error;
+ die "guru meditation #414: State FIPS codes shouldn't change";
+ #$this_state->set(fips => $fips);
+ #my $error = $this_state->replace;
+ #die "error updating $country_code/$state_code:\n$error\n" if $error;
}
delete $existing{$country_code}{$state_code};
} else {
@@ -113,9 +171,10 @@ sub _upgrade_data {
}
# clean up states that no longer exist (does this ever happen?)
foreach my $state (values %{ $existing{$country_code} }) {
- my $error = $state->delete;
- die "error removing expired state ".$state->country.'/'.$state->state.
- "\n$error\n" if $error;
+ die "guru meditation #415: State that no longer exists?";
+ #my $error = $state->delete;
+ #die "error removing expired state ".$state->country.'/'.$state->state.
+ # "\n$error\n" if $error;
}
} # foreach $country_code
'';