[freeside-commits] branch master updated. 2c55b855a1d9de4684d6e1a910db5de5c56f9482

Mark Wells mark at 420.am
Tue Mar 1 15:45:55 PST 2016


The branch, master has been updated
       via  2c55b855a1d9de4684d6e1a910db5de5c56f9482 (commit)
      from  f281f4ed265bc5207aea4e6d17ce69af901d481d (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 2c55b855a1d9de4684d6e1a910db5de5c56f9482
Author: Mark Wells <mark at freeside.biz>
Date:   Tue Mar 1 15:43:14 2016 -0800

    track taxes created by Washington sales tax lookup so they can be updated in place, #40645

diff --git a/FS/FS/Schema.pm b/FS/FS/Schema.pm
index d20385e..3d271b7 100644
--- a/FS/FS/Schema.pm
+++ b/FS/FS/Schema.pm
@@ -2256,6 +2256,7 @@ sub tables_hashref {
         'taxname',  'varchar', 'NULL', $char_d, '', '', 
         'setuptax',    'char', 'NULL',       1, '', '', # Y = setup tax exempt
         'recurtax',    'char', 'NULL',       1, '', '', # Y = recur tax exempt
+        'source',   'varchar', 'NULL', $char_d, '', '',
       ],
       'primary_key' => 'taxnum',
       'unique' => [],
diff --git a/FS/FS/Upgrade.pm b/FS/FS/Upgrade.pm
index 59167a7..0ac7a4e 100644
--- a/FS/FS/Upgrade.pm
+++ b/FS/FS/Upgrade.pm
@@ -452,6 +452,9 @@ sub upgrade_data {
 
     #populate tax statuses
     'tax_status' => [],
+
+    #mark certain taxes as system-maintained
+    'cust_main_county' => [],
   ;
 
   \%hash;
diff --git a/FS/FS/cust_main_county.pm b/FS/FS/cust_main_county.pm
index 652ff33..3c355e8 100644
--- a/FS/FS/cust_main_county.pm
+++ b/FS/FS/cust_main_county.pm
@@ -12,6 +12,7 @@ use FS::cust_pkg;
 use FS::part_pkg;
 use FS::cust_tax_exempt;
 use FS::cust_tax_exempt_pkg;
+use FS::upgrade_journal;
 
 @EXPORT_OK = qw( regionselector );
 
@@ -78,6 +79,9 @@ currently supported:
 
 =item recurtax - if 'Y', this tax does not apply to recurring fees
 
+=item source - the tax lookup method that created this tax record. For records
+created manually, this will be null.
+
 =back
 
 =head1 METHODS
@@ -132,6 +136,7 @@ sub check {
     || $self->ut_textn('taxname')
     || $self->ut_enum('setuptax', [ '', 'Y' ] )
     || $self->ut_enum('recurtax', [ '', 'Y' ] )
+    || $self->ut_textn('source')
     || $self->SUPER::check
     ;
 
@@ -674,6 +679,31 @@ END
 
 }
 
+sub _upgrade_data {
+  my $class = shift;
+  # assume taxes in Washington with district numbers, and null name, or 
+  # named 'sales tax', are looked up via the wa_sales method. mark them.
+  my $journal = 'cust_main_county__source_wa_sales';
+  if (!FS::upgrade_journal->is_done($journal)) {
+    my @taxes = qsearch({
+        'table'     => 'cust_main_county',
+        'extra_sql' => " WHERE tax > 0 AND country = 'US' AND state = 'WA'".
+                       " AND district IS NOT NULL AND ( taxname IS NULL OR ".
+                       " taxname ~* 'sales tax' )",
+    });
+    if ( @taxes ) {
+      warn "Flagging Washington state sales taxes: ".scalar(@taxes)." records.\n";
+      foreach (@taxes) {
+        $_->set('source', 'wa_sales');
+        my $error = $_->replace;
+        die $error if $error;
+      }
+    }
+    FS::upgrade_journal->set_done($journal);
+  }
+  '';
+}
+
 =back
 
 =head1 BUGS
diff --git a/FS/FS/geocode_Mixin.pm b/FS/FS/geocode_Mixin.pm
index bc8c118..8d0c7ea 100644
--- a/FS/FS/geocode_Mixin.pm
+++ b/FS/FS/geocode_Mixin.pm
@@ -248,6 +248,8 @@ Queueable function to update the tax district code using the selected method
 
 =cut
 
+# this is run from the job queue so I'm not transactionizing it.
+
 sub process_district_update {
   my $class = shift;
   my $id = shift;
@@ -273,15 +275,20 @@ sub process_district_update {
 
     my %hash = map { $_ => $tax_info->{$_} } 
       qw( district city county state country );
-    $hash{'taxname'} = '';
-
-    my $old = qsearchs('cust_main_county', \%hash);
-    if ( $old ) {
-      my $new = new FS::cust_main_county { $old->hash, %$tax_info };
-      warn "updating tax rate for district ".$tax_info->{'district'} if $DEBUG;
-      $error = $new->replace($old);
-    }
-    else {
+    $hash{'source'} = $method; # apply the update only to taxes we maintain
+
+    my @old = qsearch('cust_main_county', \%hash);
+    if ( @old ) {
+      foreach my $cust_main_county (@old) {
+        warn "updating tax rate #".$cust_main_county->taxnum.
+          " for district ".$tax_info->{'district'} if $DEBUG;
+        # update the tax rate only
+        $cust_main_county->set('tax', $tax_info->{'tax'});
+        $error ||= $cust_main_county->replace;
+      }
+    } else {
+      # make a new tax record, and mark it so we can find it later
+      $tax_info->{'source'} = $method;
       my $new = new FS::cust_main_county $tax_info;
       warn "creating tax rate for district ".$tax_info->{'district'} if $DEBUG;
       $error = $new->insert;

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

Summary of changes:
 FS/FS/Schema.pm           |    1 +
 FS/FS/Upgrade.pm          |    3 +++
 FS/FS/cust_main_county.pm |   30 ++++++++++++++++++++++++++++++
 FS/FS/geocode_Mixin.pm    |   25 ++++++++++++++++---------
 4 files changed, 50 insertions(+), 9 deletions(-)




More information about the freeside-commits mailing list