per-agent disable_previous_balance, #15863
[freeside.git] / FS / FS / tax_rate_location.pm
index 65bef7b..1a6c47d 100644 (file)
@@ -3,6 +3,7 @@ package FS::tax_rate_location;
 use strict;
 use base qw( FS::Record );
 use FS::Record qw( qsearch qsearchs dbh );
+use FS::Misc qw( csv_from_fixed );
 
 =head1 NAME
 
@@ -124,11 +125,18 @@ sub check {
   ;
   return $error if $error;
 
-  my $t = qsearchs( 'tax_rate_location',
-                    { map { $_ => $self->$_ } qw( data_vendor geocode ) },
-                  );
+  my $t;
+  $t = qsearchs( 'tax_rate_location',
+                 { disabled => '',
+                   ( map { $_ => $self->$_ } qw( data_vendor geocode ) ),
+                 },
+               )
+    unless $self->disabled;
 
-  return "geocode already in use for this vendor"
+  $t = $self->by_key( $self->taxratelocationnum )
+    if ( !$t && $self->taxratelocationnum );
+
+  return "geocode ". $self->geocode. " already in use for this vendor"
     if ( $t && $t->taxratelocationnum != $self->taxratelocationnum );
 
   return "may only be disabled"
@@ -143,6 +151,37 @@ sub check {
 
 =back
 
+=head1 CLASS METHODS
+
+=item location_sql KEY => VALUE, ...
+
+Returns an SQL fragment identifying matching tax_rate_location /
+cust_bill_pkg_tax_rate_location records.
+
+Parameters are county, state, city and locationtaxid
+
+=cut
+
+sub location_sql {
+  my($class, %param) = @_;
+
+  my %pn = (
+   'city'          => 'tax_rate_location.city',
+   'county'        => 'tax_rate_location.county',
+   'state'         => 'tax_rate_location.state',
+   'locationtaxid' => 'cust_bill_pkg_tax_rate_location.locationtaxid',
+  );
+
+  my %ph = map { $pn{$_} => dbh->quote($param{$_}) } keys %pn;
+
+  join( ' AND ',
+    map { "( $_ = $ph{$_} OR $ph{$_} = '' AND $_ IS NULL)" } keys %ph
+  );
+
+}
+
+=back
+
 =head1 SUBROUTINES
 
 =over 4
@@ -193,7 +232,7 @@ sub batch_import {
       if (exists($hash->{'actionflag'}) && $hash->{'actionflag'} eq 'D') {
         delete($hash->{actionflag});
 
-        $hash->{deleted} = '';
+        $hash->{disabled} = '';
         my $tax_rate_location = qsearchs('tax_rate_location', $hash);
         return "Can't find tax_rate_location to delete: ".
                join(" ", map { "$_ => ". $hash->{$_} } @fields)
@@ -278,7 +317,7 @@ sub batch_import {
 
       if ( $error ) {
         $dbh->rollback if $oldAutoCommit;
-        return "can't insert tax_rate for $line: $error";
+        return "can't insert tax_rate_location for $line: $error";
       }
 
     }