This commit was generated by cvs2svn to compensate for changes in r2523,
[freeside.git] / FS / FS / part_export / sqlmail.pm
index 0c0cb36..8ccad3c 100644 (file)
@@ -1,9 +1,10 @@
 package FS::part_export::sqlmail;
 
 use vars qw(@ISA);
+use Digest::MD5 qw(md5_hex);
 use FS::Record qw(qsearchs);
 use FS::part_export;
-use Digest::MD5 qw(md5_hex);
+use FS::svc_domain;
 
 @ISA = qw(FS::part_export);
 
@@ -115,17 +116,19 @@ sub sqlmail_replace {
   my %attrs = @_;
   map { $attrs{$_} = $attrs{$_} ? qq!'$attrs{$_}'! : 'NULL'; } keys(%attrs);
 
-  my $query = sprintf('UPDATE %s SET %s WHERE svcnum = %s',
-                      $table, join(', ', map {"$_ = $attrs{$_}"} keys(%attrs)),
-                      $oldsvcnum);
-
-  my $rv = $dbh->do($query) or die $dbh->errstr;
-
-  if ($rv == 0) {
+  my $query = "SELECT COUNT(*) FROM $table WHERE svcnum = $oldsvcnum";
+  my $result = $dbh->selectrow_arrayref($query) or die $dbh->errstr;
+  
+  if (@$result[0] == 0) {
     $query = sprintf("INSERT INTO %s (%s) values (%s)",
                      $table, join(",", keys(%attrs)),
                      join(',', values(%attrs)));
     $dbh->do($query) or die $dbh->errstr;
+  } else {
+    $query = sprintf('UPDATE %s SET %s WHERE svcnum = %s',
+                     $table, join(', ', map {"$_ = $attrs{$_}"} keys(%attrs)),
+                     $oldsvcnum);
+    $dbh->do($query) or die $dbh->errstr;
   }
 
   $dbh->disconnect;
@@ -142,7 +145,7 @@ sub update_values {
   # Update records to conform to a particular server_type.
 
   my ($self, $svc, $svcdb) = (shift,shift,shift);
-  my $svchash = $svc->hashref or return '';
+  my $svchash = { %{$svc->hashref} } or return ''; # We need a copy.
 
   if ($svcdb eq 'svc_acct') {
     if ($self->option('server_type') eq 'courier_crypt') {