From ae362d637c6ec2db80184d5ae6c30b1f5dc3271c Mon Sep 17 00:00:00 2001 From: Mark Wells Date: Mon, 6 Jun 2016 16:27:01 -0700 Subject: [PATCH] on 4.x upgrade, migrate existing customer-contact links before assigning them as invoice destinations, #25536 --- FS/FS/contact.pm | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm index f6d9d0329..fd3e9d770 100644 --- a/FS/FS/contact.pm +++ b/FS/FS/contact.pm @@ -112,10 +112,10 @@ sub table { 'contact'; } Adds this record to the database. If there is an error, returns the error, otherwise returns false. -If the object has an C field, L records will -be created for each (comma-separated) email address in that field. If any of -these coincide with an existing email address, this contact will be merged with -the contact with that address. +If the object has an C field, L records +will be created for each (comma-separated) email address in that field. If +any of these coincide with an existing email address, this contact will be +merged with the contact with that address. Then, if the object has any fields named C an L record will be created for each of them. Those fields @@ -206,6 +206,10 @@ sub insert { } my $cust_contact = ''; + # if $self->custnum was set, then the customer-specific properties + # (custnum, classnum, invoice_dest, selfservice_access, comment) are in + # pseudo-fields, and are now in %link_hash. otherwise, ignore all those + # fields. if ( $custnum ) { my %hash = ( 'contactnum' => $self->contactnum, 'custnum' => $custnum, @@ -337,6 +341,8 @@ sub delete { } } + # if $self->custnum was set, then we're removing the contact from this + # customer. if ( $self->custnum ) { my $cust_contact = qsearchs('cust_contact', { 'contactnum' => $self->contactnum, @@ -438,6 +444,10 @@ sub replace { } my $cust_contact = ''; + # if $self->custnum was set, then the customer-specific properties + # (custnum, classnum, invoice_dest, selfservice_access, comment) are in + # pseudo-fields, and are now in %link_hash. otherwise, ignore all those + # fields. if ( $custnum ) { my %hash = ( 'contactnum' => $self->contactnum, 'custnum' => $custnum, @@ -943,6 +953,20 @@ use FS::upgrade_journal; sub _upgrade_data { #class method my ($class, %opts) = @_; + # before anything else, migrate contact.custnum to cust_contact records + unless ( FS::upgrade_journal->is_done('contact_invoice_dest') ) { + + local($skip_fuzzyfiles) = 1; + + foreach my $contact (qsearch('contact', {})) { + my $error = $contact->replace; + die $error if $error; + } + + FS::upgrade_journal->set_done('contact_invoice_dest'); + } + + # always migrate cust_main_invoice records over local $FS::cust_main::import = 1; # override require_phone and such my $search = FS::Cursor->new('cust_main_invoice', {}); @@ -975,18 +999,6 @@ sub _upgrade_data { #class method } } - unless ( FS::upgrade_journal->is_done('contact_invoice_dest') ) { - - local($skip_fuzzyfiles) = 1; - - foreach my $contact (qsearch('contact', {})) { - my $error = $contact->replace; - die $error if $error; - } - - FS::upgrade_journal->set_done('contact_invoice_dest'); - } - } =back -- 2.11.0