diff options
author | Mark Wells <mark@freeside.biz> | 2013-02-14 17:04:42 -0800 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2013-02-14 17:04:42 -0800 |
commit | 8a537c7d535a26aec3b5ae38eddc7a813a42a270 (patch) | |
tree | aba84149ffae752cc97a48ad61f691db40dba2b1 | |
parent | e55892bdf6dc95710a19876087690a9664421215 (diff) |
don't create duplicate locations when ship and bill addresses are the same, #940
-rw-r--r-- | FS/FS/cust_main/Location.pm | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/FS/FS/cust_main/Location.pm b/FS/FS/cust_main/Location.pm index ba3513b2f..bd0af5348 100644 --- a/FS/FS/cust_main/Location.pm +++ b/FS/FS/cust_main/Location.pm @@ -167,15 +167,29 @@ sub _upgrade_data { $cust_main->set(bill_locationnum => $bill_location->locationnum); if ( $cust_main->get('ship_address1') ) { - my $ship_location = FS::cust_location->new( - { - custnum => $custnum, - map { $_ => $cust_main->get("ship_$_") } location_fields() + # detect duplicates + my $same = 1; + my $ship_location; + foreach (location_fields()) { + if ( length($cust_main->get("ship_$_")) and + $cust_main->get($_) ne $cust_main->get("ship_$_") ) { + $same = 0; } - ); - $error = $ship_location->insert; - die "error migrating service address for customer $custnum: $error" - if $error; + } + + if ( $same ) { + $ship_location = $bill_location; + } else { + $ship_location = FS::cust_location->new( + { + custnum => $custnum, + map { $_ => $cust_main->get("ship_$_") } location_fields() + } + ); + $error = $ship_location->insert; + die "error migrating service address for customer $custnum: $error" + if $error; + } $cust_main->set(ship_locationnum => $ship_location->locationnum); |