[freeside-commits] branch FREESIDE_4_BRANCH updated. 55c64419cb3bd874df204c0192f8f6ff06cbf11e

Christopher Burger burgerc at freeside.biz
Tue Jan 22 08:45:34 PST 2019


The branch, FREESIDE_4_BRANCH has been updated
       via  55c64419cb3bd874df204c0192f8f6ff06cbf11e (commit)
       via  1595ded97f613dd951072f936c95c88a470de14e (commit)
       via  aa42058ce7c389b491de3389e65306dfe1b52894 (commit)
       via  f2fc2590baf357d179126fc2ad0ea8a9348ac945 (commit)
      from  a0a446d2f9b98e706bd221159f9212fa0cac0af8 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 55c64419cb3bd874df204c0192f8f6ff06cbf11e
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Tue Jan 22 10:59:45 2019 -0500

    RT# 79352 - keep original email if all new emails are attached to other contacts on contact replace.

diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index c024232f0..5c7e29eba 100644
--- a/FS/FS/contact.pm
+++ b/FS/FS/contact.pm
@@ -468,6 +468,13 @@ sub replace {
 
     }
 
+    ## were all emails duplicates?  if so reset original emails
+    if (scalar @contact_emails < 1 && scalar (keys %contact_nums) > 1) {
+      foreach (qsearch('contact_email', {'contactnum' => $self->contactnum})) {
+        push @contact_emails, $_->emailaddress;
+      }
+    }
+
     my $emails = join(' , ', @contact_emails);
     $self->emailaddress($emails);
 

commit 1595ded97f613dd951072f936c95c88a470de14e
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jan 21 21:37:38 2019 -0500

    RT# 79352 - fixed so contact replace would not add duplicate cust_contacts.

diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index b10e43f85..c024232f0 100644
--- a/FS/FS/contact.pm
+++ b/FS/FS/contact.pm
@@ -449,7 +449,8 @@ sub replace {
   ## if found, just add that contact to cust_contact with link_hash credentials
   ## as email can not be tied to two contacts.
   my @contact_emails = ();
-  my @contact_nums = ($self->contactnum,);
+  my %contact_nums = ();
+  $contact_nums{$self->contactnum} = '1' if $self->contactnum;
   if ( $self->get('emailaddress') =~ /\S/ ) {
 
     foreach my $email ( split(/\s*,\s*/, $self->get('emailaddress') ) ) {
@@ -462,7 +463,7 @@ sub replace {
         push @contact_emails, $email;
       }
       else {
-        push @contact_nums, $contact->contactnum;
+        $contact_nums{$contact->contactnum} = '1';
       }
 
     }
@@ -488,9 +489,9 @@ sub replace {
   # fields.
   if ( $custnum ) {
 
-    foreach my $contactnum (@contact_nums) {
+    foreach my $contactnum (keys %contact_nums) {
 
-      my %hash = ( 'contactnum' => $contactnum, #$self->contactnum,
+      my %hash = ( 'contactnum' => $contactnum,
                    'custnum'    => $custnum,
                  );
       my $error;

commit aa42058ce7c389b491de3389e65306dfe1b52894
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jan 21 20:10:36 2019 -0500

    RT# 79352 - update contact insert to search email list for existing contacts and attach those contacts to current customer on insert

diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index 2c208c5e7..b10e43f85 100644
--- a/FS/FS/contact.pm
+++ b/FS/FS/contact.pm
@@ -160,44 +160,42 @@ sub insert {
     $self->$_('');
   }
 
-  #look for an existing contact with this email address
+
+  ## check for an existing contact with this email address other than current customer
+  ## if found, just add that contact to cust_contact with link_hash credentials
+  ## as email can not be tied to two contacts.
+  my $no_new_contact;
   my $existing_contact = '';
+  my @contact_emails = ();
+  my %contact_nums = ();
+  $contact_nums{$self->contactnum} = '1' if $self->contactnum;
+
   if ( $self->get('emailaddress') =~ /\S/ ) {
-  
-    my %existing_contact = ();
 
     foreach my $email ( split(/\s*,\s*/, $self->get('emailaddress') ) ) {
  
-      my $contact_email = qsearchs('contact_email', { emailaddress=>$email } )
-        or next;
+      my $contact_email = qsearchs('contact_email', { emailaddress=>$email } );
+        unless ($contact_email) { push @contact_emails, $email; next; }
 
       my $contact = $contact_email->contact;
-      $existing_contact{ $contact->contactnum } = $contact;
+      if ($contact->contactnum eq $self->contactnum) {
+        push @contact_emails, $email;
+      }
+      else {
+        $contact_nums{$contact->contactnum} = '1';
+      }
 
     }
 
-    if ( scalar( keys %existing_contact ) > 1 ) {
-      $dbh->rollback if $oldAutoCommit;
-      return 'Multiple email addresses specified '.
-             ' that already belong to separate contacts';
-    } elsif ( scalar( keys %existing_contact ) ) {
-      ($existing_contact) = values %existing_contact;
-    }
+    my $emails = join(' , ', @contact_emails);
+    $self->emailaddress($emails);
+
+    $no_new_contact = '1' unless $self->emailaddress;
 
   }
 
   my $error;
-  if ( $existing_contact ) {
-
-    $self->$_($existing_contact->$_())
-      for qw( contactnum _password _password_encoding );
-    $error = $self->SUPER::replace($existing_contact);
-
-  } else {
-
-    $error = $self->SUPER::insert;
-
-  }
+  $error = $self->SUPER::insert unless $no_new_contact;
 
   if ( $error ) {
     $dbh->rollback if $oldAutoCommit;
@@ -210,20 +208,22 @@ sub insert {
   # pseudo-fields, and are now in %link_hash. otherwise, ignore all those
   # fields.
   if ( $custnum ) {
-    my %hash = ( 'contactnum' => $self->contactnum,
-                 'custnum'    => $custnum,
-               );
-    $cust_contact =  qsearchs('cust_contact', \%hash )
-                  || new FS::cust_contact { %hash, %link_hash };
-    my $error = $cust_contact->custcontactnum ? $cust_contact->replace
+    foreach my $contactnum (keys %contact_nums) {
+      my %hash = ( 'contactnum' => $contactnum,
+                   'custnum'    => $custnum,
+                 );
+      $cust_contact =  qsearchs('cust_contact', \%hash )
+                    || new FS::cust_contact { %hash, %link_hash };
+      my $error = $cust_contact->custcontactnum ? $cust_contact->replace
                                               : $cust_contact->insert;
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
+      if ( $error ) {
+        $dbh->rollback if $oldAutoCommit;
+        return $error;
+      }
     }
   }
 
-  if ( $prospectnum ) {
+  if ( $prospectnum && !$no_new_contact) {
     my %hash = ( 'contactnum'  => $self->contactnum,
                  'prospectnum' => $prospectnum,
                );
@@ -238,6 +238,7 @@ sub insert {
     }
   }
 
+  unless ($no_new_contact) {
   foreach my $pf ( grep { /^phonetypenum(\d+)$/ && $self->get($_) =~ /\S/ }
                         keys %{ $self->hashref } ) {
     $pf =~ /^phonetypenum(\d+)$/ or die "wtf (daily, the)";
@@ -256,6 +257,7 @@ sub insert {
       return $error;
     }
   }
+  }
 
   if ( $self->get('emailaddress') =~ /\S/ ) {
 

commit f2fc2590baf357d179126fc2ad0ea8a9348ac945
Author: Christopher Burger <burgerc at freeside.biz>
Date:   Mon Jan 21 14:12:14 2019 -0500

    RT# 79352 - updated contact replace to attach existing contact to customer

diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index 1801545b1..2c208c5e7 100644
--- a/FS/FS/contact.pm
+++ b/FS/FS/contact.pm
@@ -443,6 +443,33 @@ sub replace {
     $self->$_('');
   }
 
+  ## check for an existing contact with this email address other than current customer
+  ## if found, just add that contact to cust_contact with link_hash credentials
+  ## as email can not be tied to two contacts.
+  my @contact_emails = ();
+  my @contact_nums = ($self->contactnum,);
+  if ( $self->get('emailaddress') =~ /\S/ ) {
+
+    foreach my $email ( split(/\s*,\s*/, $self->get('emailaddress') ) ) {
+
+      my $contact_email = qsearchs('contact_email', { emailaddress=>$email } );
+        unless ($contact_email) { push @contact_emails, $email; next; }
+
+      my $contact = $contact_email->contact;
+      if ($contact->contactnum eq $self->contactnum) {
+        push @contact_emails, $email;
+      }
+      else {
+        push @contact_nums, $contact->contactnum;
+      }
+
+    }
+
+    my $emails = join(' , ', @contact_emails);
+    $self->emailaddress($emails);
+
+  }
+
   my $error = $self->SUPER::replace($old);
   if ( $old->_password ne $self->_password ) {
     $error ||= $self->insert_password_history;
@@ -458,20 +485,24 @@ sub replace {
   # pseudo-fields, and are now in %link_hash. otherwise, ignore all those
   # fields.
   if ( $custnum ) {
-    my %hash = ( 'contactnum' => $self->contactnum,
-                 'custnum'    => $custnum,
-               );
-    my $error;
-    if ( $cust_contact = qsearchs('cust_contact', \%hash ) ) {
-      $cust_contact->$_($link_hash{$_}) for keys %link_hash;
-      $error = $cust_contact->replace;
-    } else {
-      $cust_contact = new FS::cust_contact { %hash, %link_hash };
-      $error = $cust_contact->insert;
-    }
-    if ( $error ) {
-      $dbh->rollback if $oldAutoCommit;
-      return $error;
+
+    foreach my $contactnum (@contact_nums) {
+
+      my %hash = ( 'contactnum' => $contactnum, #$self->contactnum,
+                   'custnum'    => $custnum,
+                 );
+      my $error;
+      if ( $cust_contact = qsearchs('cust_contact', \%hash ) ) {
+        $cust_contact->$_($link_hash{$_}) for keys %link_hash;
+        $error = $cust_contact->replace;
+      } else {
+        $cust_contact = new FS::cust_contact { %hash, %link_hash };
+        $error = $cust_contact->insert;
+      }
+      if ( $error ) {
+        $dbh->rollback if $oldAutoCommit;
+        return $error;
+      }
     }
   }
 

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/contact.pm | 137 ++++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 89 insertions(+), 48 deletions(-)




More information about the freeside-commits mailing list