summaryrefslogtreecommitdiff
path: root/FS
diff options
context:
space:
mode:
Diffstat (limited to 'FS')
-rw-r--r--FS/FS/AccessRight.pm2
-rw-r--r--FS/FS/cust_main/Location.pm30
2 files changed, 24 insertions, 8 deletions
diff --git a/FS/FS/AccessRight.pm b/FS/FS/AccessRight.pm
index bd8a889e2..50fb0e3cb 100644
--- a/FS/FS/AccessRight.pm
+++ b/FS/FS/AccessRight.pm
@@ -342,6 +342,8 @@ tie my %rights, 'Tie::IxHash',
'Edit package definitions',
{ rightname=>'Edit global package definitions', global=>1 },
+ 'Bulk edit package definitions',
+
'Edit billing events',
{ rightname=>'Edit global billing events', global=>1 },
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);