merge NG auth, RT#21563
[freeside.git] / FS / FS / cust_main / Location.pm
index 8e30bb6..bd0af53 100644 (file)
@@ -18,7 +18,8 @@ BEGIN {
     no strict 'refs';
     @location_fields = 
       qw( address1 address2 city county state zip country district
-        latitude longitude coord_auto censustract censusyear geocode );
+        latitude longitude coord_auto censustract censusyear geocode
+        addr_clean );
 
     foreach my $f (@location_fields) {
       *{"FS::cust_main::Location::$f"} = sub {
@@ -166,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);