[freeside-commits] branch master updated. 087a9d9fbaea3a89db3f93f50fef580a388ce573

Mark Wells mark at 420.am
Mon Mar 21 15:57:26 PDT 2016


The branch, master has been updated
       via  087a9d9fbaea3a89db3f93f50fef580a388ce573 (commit)
      from  8eb2c9d25cdb73d2c97a46244f9d6f5b750b2ab2 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 087a9d9fbaea3a89db3f93f50fef580a388ce573
Author: Mark Wells <mark at freeside.biz>
Date:   Mon Mar 21 15:54:24 2016 -0700

    detect and fix duplicate taxes in Washington sales tax lookup, #40645, #40144

diff --git a/FS/FS/geocode_Mixin.pm b/FS/FS/geocode_Mixin.pm
index 8d0c7ea..a372faa 100644
--- a/FS/FS/geocode_Mixin.pm
+++ b/FS/FS/geocode_Mixin.pm
@@ -279,9 +279,42 @@ sub process_district_update {
 
     my @old = qsearch('cust_main_county', \%hash);
     if ( @old ) {
+      # prune any duplicates rather than updating them
+      my %keep; # key => cust_main_county record
       foreach my $cust_main_county (@old) {
+        my $key = join('.', $cust_main_county->city ,
+                            $cust_main_county->district ,
+                            $cust_main_county->taxclass
+                      );
+        if ( exists $keep{$key} ) {
+          my $disable_this = $cust_main_county;
+          # prefer records that have a tax name
+          if ( $cust_main_county->taxname and not $keep{$key}->taxname ) {
+            $disable_this = $keep{$key};
+            $keep{$key} = $cust_main_county;
+          }
+          # disable by setting the rate to zero, and setting source to null
+          # so it doesn't get auto-updated in the future. don't actually 
+          # delete it, that produces orphan records
+          warn "disabling tax rate #" .
+            $disable_this->taxnum .
+            " because it's a duplicate for $key\n"
+            if $DEBUG;
+          # by setting its rate to zero, and never updating
+          # it again
+          $disable_this->set('tax' => 0);
+          $disable_this->set('source' => '');
+          $error = $disable_this->replace;
+          die $error if $error;
+        }
+
+        $keep{$key} ||= $cust_main_county;
+
+      }
+      foreach my $key (keys %keep) {
+        my $cust_main_county = $keep{$key};
         warn "updating tax rate #".$cust_main_county->taxnum.
-          " for district ".$tax_info->{'district'} if $DEBUG;
+          " for $key" if $DEBUG;
         # update the tax rate only
         $cust_main_county->set('tax', $tax_info->{'tax'});
         $error ||= $cust_main_county->replace;
diff --git a/FS/bin/freeside-tax-district-update b/FS/bin/freeside-tax-district-update
index e32bc9d..af43130 100644
--- a/FS/bin/freeside-tax-district-update
+++ b/FS/bin/freeside-tax-district-update
@@ -23,8 +23,7 @@ my $method = $conf->config('tax_district_method')
 
 my %limit;
 %limit = ( district => '' ) if $opt{'n'};
-my @location = qsearch( 'cust_main', \%limit ),
-               qsearch( 'cust_location', { disabled => '', %limit } );
+my @location = qsearch( 'cust_location', { disabled => '', %limit } );
 
 # breaking the rules somewhat by modifying cust_location records in place 
 # instead of doing a proper package change, but we're not changing the 
@@ -36,10 +35,8 @@ foreach my $location (@location) {
   my $job = FS::queue->new({
       job => 'FS::geocode_Mixin::process_district_update'
     });
-  my $class = ref($location);
-  my $id = $class eq 'FS::cust_main' ? 
-                                  $location->custnum : 
-                                  $location->locationnum;
+  my $class = 'FS::cust_location';
+  my $id = $location->locationnum;
   $error = $job->insert($class, $id);
   if ( $error ) {
     $dbh->rollback;

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/geocode_Mixin.pm              |   35 ++++++++++++++++++++++++++++++++++-
 FS/bin/freeside-tax-district-update |    9 +++------
 2 files changed, 37 insertions(+), 7 deletions(-)




More information about the freeside-commits mailing list