fix linking of new customer contact to an existing email address, #25536
[freeside.git] / FS / FS / cust_main.pm
index bf5baa9..ee1c15f 100644 (file)
@@ -532,6 +532,7 @@ sub insert {
     foreach my $prospect_contact ( $prospect_main->prospect_contact ) {
       my $cust_contact = new FS::cust_contact {
         'custnum' => $self->custnum,
+        'invoice_dest' => 'Y', # invoice_dest currently not set for prospect contacts
         map { $_ => $prospect_contact->$_() } qw( contactnum classnum comment )
       };
       my $error =  $cust_contact->insert
@@ -554,7 +555,10 @@ sub insert {
         return $error;
       }
     }
-
+    # since we set invoice_dest on all migrated prospect contacts (for now),
+    # don't process invoicing_list.
+    delete $options{'invoicing_list'};
+    $invoicing_list = undef;
   }
 
   warn "  setting contacts\n"
@@ -578,8 +582,7 @@ sub insert {
               custnum       => $self->custnum,
           });
           $cust_contact->set('invoice_dest', 'Y');
-          my $error = $cust_contact->contactnum ?
-                        $cust_contact->replace : $cust_contact->insert;
+          my $error = $cust_contact->insert;
           if ( $error ) {
             $dbh->rollback if $oldAutoCommit;
             return "$error (linking to email address $dest)";
@@ -1991,7 +1994,9 @@ sub cust_payby {
     'hashref'  => { 'custnum' => $self->custnum },
     'order_by' => "ORDER BY payby IN ('CARD','CHEK') DESC, weight ASC",
   };
-  $search->{'extra_sql'} = ' AND payby IN ( ' . join(',', map { dbh->quote($_) } @payby) . ' ) '
+  $search->{'extra_sql'} = ' AND payby IN ( '.
+                               join(',', map dbh->quote($_), @payby).
+                             ' ) '
     if @payby;
 
   qsearch($search);
@@ -2336,6 +2341,8 @@ Removes the I<paycvv> field from the database directly.
 
 If there is an error, returns the error, otherwise returns false.
 
+DEPRECATED.  Use L</remove_cvv_from_cust_payby> instead.
+
 =cut
 
 sub remove_cvv {
@@ -4522,6 +4529,33 @@ PAYBYLOOP:
 
 }
 
+=item remove_cvv_from_cust_payby PAYINFO
+
+Removes paycvv from associated cust_payby with matching PAYINFO.
+
+=cut
+
+sub remove_cvv_from_cust_payby {
+  my ($self,$payinfo) = @_;
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  foreach my $cust_payby ( qsearch('cust_payby',{ custnum => $self->custnum }) ) {
+    next unless $cust_payby->payinfo eq $payinfo; # can't qsearch on payinfo
+    $cust_payby->paycvv('');
+    my $error = $cust_payby->replace;
+    if ($error) {
+      $dbh->rollback if $oldAutoCommit;
+      return $error;
+    }
+  }
+
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+  '';
+}
+
 =back
 
 =head1 CLASS METHODS