X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fcust_location.pm;h=73821cc146c93b5523f216ac8bc8c5e6b86644b1;hb=c564754d5f17c616782fb27432e6b056bd8fa00d;hp=fee77a8b106b3eb730f9d6fc88e026cedb089e9a;hpb=d8dcec0a073b96794328195d4327e28b56996705;p=freeside.git diff --git a/FS/FS/cust_location.pm b/FS/FS/cust_location.pm index fee77a8b1..73821cc14 100644 --- a/FS/FS/cust_location.pm +++ b/FS/FS/cust_location.pm @@ -252,7 +252,7 @@ sub insert { } if ( $self->censustract ) { - $self->set('censusyear' => $conf->config('census_year') || 2012); + $self->set('censusyear' => $conf->config('census_legacy') || 2020); } my $oldAutoCommit = $FS::UID::AutoCommit; @@ -265,8 +265,15 @@ sub insert { return $error; } - #false laziness with cust_main, will go away eventually - if ( !$import and $conf->config('tax_district_method') ) { + # If using tax_district_method, for rows in state of Washington, + # without a tax district already specified, queue a job to find + # the tax district + if ( + !$import + && !$self->district + && lc $self->state eq 'wa' + && $conf->config('tax_district_method') + ) { my $queue = new FS::queue { 'job' => 'FS::geocode_Mixin::process_district_update' @@ -412,10 +419,13 @@ sub check { ; return $error if $error; if ( $self->censustract ne '' ) { - $self->censustract =~ /^\s*(\d{9})\.?(\d{2})\s*$/ - or return "Illegal census tract: ". $self->censustract; - - $self->censustract("$1.$2"); + if ( $self->censustract =~ /^\s*(\d{9})\.?(\d{2})\s*$/ ) { #old + $self->censustract("$1.$2"); + } elsif ($self->censustract =~ /^\s*(\d{15})\s*$/ ) { #new + $self->censustract($1); + } else { + return "Illegal census tract: ". $self->censustract; + } } #yikes... this is ancient, pre-dates cust_location and will be harder to @@ -436,6 +446,26 @@ sub check { && $conf->exists('prospect_main-alt_address_format') && ! $self->location_kind; + # Do not allow bad tax district values in cust_location when + # using Washington State district sales tax calculation - would result + # in incorrect or missing sales tax on invoices. + my $tax_district_method = FS::Conf->new->config('tax_district_method'); + if ( + $tax_district_method + && $tax_district_method eq 'wa_sales' + && $self->district + ) { + my $cust_main_county = qsearchs( + cust_main_county => { district => $self->district } + ); + unless ( ref $cust_main_county ) { + return sprintf ( + 'WA State tax district %s does not exist in tax table', + $self->district + ); + } + } + unless ( $import or qsearch('cust_main_county', { 'country' => $self->country, 'state' => '', @@ -852,7 +882,7 @@ sub process_censustract_update { qsearchs( 'cust_location', { locationnum => $locationnum }) or die "locationnum '$locationnum' not found!\n"; - my $new_year = $conf->config('census_year') or return; + my $new_year = $conf->config('census_legacy') || 2020; my $loc = FS::GeocodeCache->new( $cust_location->location_hash ); $loc->set_censustract; my $error = $loc->get('censustract_error'); @@ -990,7 +1020,11 @@ sub _upgrade_data { die "$error (fixing whitespace in $field, locationnum ".$location->locationnum.')' if $error; - if ( $use_districts ) { + if ( + $use_districts + && !$location->district + && lc $location->state eq 'wa' + ) { my $queue = new FS::queue { 'job' => 'FS::geocode_Mixin::process_district_update' };