X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fpart_export%2Fsqlmail.pm;h=8ccad3c7e4449b36f8b9f2080e8625f706b40a4c;hb=ab9f512842cf99736a92d8f3c1031e45bacc26fb;hp=0c0cb367b6d207e0ab221f704842a0b3850523b7;hpb=6eedae5614eee808d0e0c4b9d9b3fe7d1217b776;p=freeside.git diff --git a/FS/FS/part_export/sqlmail.pm b/FS/FS/part_export/sqlmail.pm index 0c0cb367b..8ccad3c7e 100644 --- a/FS/FS/part_export/sqlmail.pm +++ b/FS/FS/part_export/sqlmail.pm @@ -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') {