diff options
Diffstat (limited to 'FS')
| -rw-r--r-- | FS/FS/tax_rate.pm | 50 | 
1 files changed, 28 insertions, 22 deletions
diff --git a/FS/FS/tax_rate.pm b/FS/FS/tax_rate.pm index e146bd6a9..721d5f583 100644 --- a/FS/FS/tax_rate.pm +++ b/FS/FS/tax_rate.pm @@ -785,7 +785,8 @@ sub batch_import {    } -  for (grep { !exists($delete{$_}) } keys %insert) { +  my @replace = grep { exists($delete{$_}) } keys %insert; +  for (@replace) {      if ( $job ) {  # progress bar        if ( time - $min_sec > $last ) {          my $error = $job->update_statustext( @@ -799,20 +800,35 @@ sub batch_import {        }      } -    my $tax_rate = new FS::tax_rate( $insert{$_} ); -    my $error = $tax_rate->insert; +    my $old = qsearchs( 'tax_rate', $delete{$_} ); -    if ( $error ) { -      $dbh->rollback if $oldAutoCommit; -      my $hashref = $insert{$_}; -      $line = join(", ", map { "$_ => ". $hashref->{$_} } keys(%$hashref) ); -      return "can't insert tax_rate for $line: $error"; +    if ( $old ) { + +      my $new = new FS::tax_rate({ $old->hash, %{$insert{$_}}, 'manual' => ''  }); +      $new->taxnum($old->taxnum); +      my $error = $new->replace($old); + +      if ( $error ) { +        $dbh->rollback if $oldAutoCommit; +        my $hashref = $insert{$_}; +        $line = join(", ", map { "$_ => ". $hashref->{$_} } keys(%$hashref) ); +        return "can't replace tax_rate for $line: $error"; +      } + +      $imported++; + +    } else { + +      $old = delete $delete{$_}; +      warn "WARNING: can't find tax_rate to replace (inserting instead and continuing) for: ". +        #join(" ", map { "$_ => ". $old->{$_} } @fields); +        join(" ", map { "$_ => ". $old->{$_} } keys(%$old) );      }      $imported++;    } -  for (grep { exists($delete{$_}) } keys %insert) { +  for (grep { !exists($delete{$_}) } keys %insert) {      if ( $job ) {  # progress bar        if ( time - $min_sec > $last ) {          my $error = $job->update_statustext( @@ -826,27 +842,17 @@ sub batch_import {        }      } -    my $old = qsearchs( 'tax_rate', $delete{$_} ); -    unless ($old) { -      $dbh->rollback if $oldAutoCommit; -      $old = $delete{$_}; -      return "can't find tax_rate to replace for: ". -        #join(" ", map { "$_ => ". $old->{$_} } @fields); -        join(" ", map { "$_ => ". $old->{$_} } keys(%$old) ); -    } -    my $new = new FS::tax_rate({ $old->hash, %{$insert{$_}}, 'manual' => ''  }); -    $new->taxnum($old->taxnum); -    my $error = $new->replace($old); +    my $tax_rate = new FS::tax_rate( $insert{$_} ); +    my $error = $tax_rate->insert;      if ( $error ) {        $dbh->rollback if $oldAutoCommit;        my $hashref = $insert{$_};        $line = join(", ", map { "$_ => ". $hashref->{$_} } keys(%$hashref) ); -      return "can't replace tax_rate for $line: $error"; +      return "can't insert tax_rate for $line: $error";      }      $imported++; -    $imported++;    }    for (grep { !exists($insert{$_}) } keys %delete) {  | 
