summaryrefslogtreecommitdiff
path: root/FS/FS/contact.pm
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2016-03-09 15:49:53 -0800
committerMark Wells <mark@freeside.biz>2016-03-09 15:49:58 -0800
commitb472074e9b8d1d9ca2e2e38e231bf1f209281286 (patch)
tree6a072ba0a92e92bcf8651e3e0379a8535c796be3 /FS/FS/contact.pm
parentd9f0a98539cd8dd957ea9a4b5d77fbb739d43d2e (diff)
fix contact upgrade for multiple email addresses, #40971, from #25536
Diffstat (limited to 'FS/FS/contact.pm')
-rw-r--r--FS/FS/contact.pm20
1 files changed, 13 insertions, 7 deletions
diff --git a/FS/FS/contact.pm b/FS/FS/contact.pm
index 188d287..592c719 100644
--- a/FS/FS/contact.pm
+++ b/FS/FS/contact.pm
@@ -945,6 +945,7 @@ sub _upgrade_data { #class method
# 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', {});
+ my %custnum_dest;
while (my $cust_main_invoice = $search->fetch) {
my $custnum = $cust_main_invoice->custnum;
my $dest = $cust_main_invoice->dest;
@@ -956,17 +957,22 @@ sub _upgrade_data { #class method
if !$svc_acct;
$dest = $svc_acct->email;
}
+ push @{ $custnum_dest{$custnum} ||= [] }, $dest;
- my $error = $cust_main->replace( invoicing_list => [ $dest ] );
-
+ my $error = $cust_main_invoice->delete;
if ( $error ) {
- die "custnum $custnum, invoice destination $dest, creating contact: $error\n";
+ die "custnum $custnum, cleaning up cust_main_invoice: $error\n";
}
+ }
- $error = $cust_main_invoice->delete;
- die "custnum $custnum, cleaning up cust_main_invoice: $error\n" if $error;
-
- } # while $search->fetch
+ foreach my $custnum (keys %custnum_dest) {
+ my $dests = $custnum_dest{$custnum};
+ my $cust_main = FS::cust_main->by_key($custnum);
+ my $error = $cust_main->replace( invoicing_list => $dests );
+ if ( $error ) {
+ die "custnum $custnum, creating contact: $error\n";
+ }
+ }
unless ( FS::upgrade_journal->is_done('contact_invoice_dest') ) {