[freeside-commits] branch master updated. f84f4970c03fa01779fc94cdc9dbada9f314b0cc
Mark Wells
mark at 420.am
Wed Oct 22 11:57:48 PDT 2014
The branch, master has been updated
via f84f4970c03fa01779fc94cdc9dbada9f314b0cc (commit)
via 70322c9412a97ab97582d76baeae00b9117c8a12 (commit)
from e47e15d130dc68ce1bcf6caa2a60b6788b115049 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit f84f4970c03fa01779fc94cdc9dbada9f314b0cc
Author: Mark Wells <mark at freeside.biz>
Date: Wed Oct 22 11:57:33 2014 -0700
make NENA2 export more lenient about street addresses, #14049
diff --git a/FS/FS/part_export/nena2.pm b/FS/FS/part_export/nena2.pm
index 8d59425..36f0293 100644
--- a/FS/FS/part_export/nena2.pm
+++ b/FS/FS/part_export/nena2.pm
@@ -237,27 +237,61 @@ sub data {
$hash{calling_number} = $2;
# street address
+ # some cleanup:
+ my $full_address = $cust_location->address1;
+ my $address2 = $cust_location->address2;
+ if (length($address2)) {
+ # correct 'Sp', 'Sp.', 'sp ', etc. to the word SPACE for convenience
+ $address2 =~ s/^sp\b\.? ?/SPACE /i;
+ # and join it to $full_address with a space, not a comma
+ $full_address .= ' ' . $address2;
+ }
+
my $location_hash = Geo::StreetAddress::US->parse_address(
- uc( join(', ', $cust_location->address1,
- $cust_location->address2,
- $cust_location->city,
- $cust_location->state,
- $cust_location->zip
+ uc( join(', ', $full_address,
+ $cust_location->city,
+ $cust_location->state,
+ $cust_location->zip
) )
);
- $hash{house_number} = $location_hash->{number};
- $hash{house_number_suffix} = ''; # we don't support this, do we?
- $hash{prefix_directional} = $location_hash->{prefix};
- $hash{street_name} = $location_hash->{street};
- $hash{street_suffix} = $location_hash->{type};
- $hash{post_directional} = $location_hash->{suffix};
- $hash{community_name} = $location_hash->{city};
- $hash{state} = $location_hash->{state};
- if ($location_hash->{sec_unit_type}) {
- $hash{location} = $location_hash->{sec_unit_type} . ' ' .
- $location_hash->{sec_unit_num};
+ if ( !$location_hash and length($address2) ) {
+ # then parsing failed. Try again without the address2.
+ $location_hash = Geo::StreetAddress::US->parse_address(
+ uc( join(', ',
+ $cust_location->address1,
+ $cust_location->city,
+ $cust_location->state,
+ $cust_location->zip
+ ) )
+ );
+ # this should not produce an address with sec_unit_type,
+ # so 'location' will be set to address2
+ }
+ if ( $location_hash ) {
+ # then store it
+ $hash{house_number} = $location_hash->{number};
+ $hash{house_number_suffix} = ''; # we don't support this, do we?
+ $hash{prefix_directional} = $location_hash->{prefix};
+ $hash{street_name} = $location_hash->{street};
+ $hash{street_suffix} = $location_hash->{type};
+ $hash{post_directional} = $location_hash->{suffix};
+ $hash{community_name} = $location_hash->{city};
+ $hash{state} = $location_hash->{state};
+ if ($location_hash->{sec_unit_type}) {
+ $hash{location} = $location_hash->{sec_unit_type} . ' ' .
+ $location_hash->{sec_unit_num};
+ } else {
+ $hash{location} = $address2;
+ }
} else {
- $hash{location} = $cust_location->address2;
+ # then it still wouldn't parse; happens when the address has no house
+ # number (which is allowed in NENA 2 format). so just put all the
+ # information we have into the record. (Parse::FixedLength will trim
+ # it to fit if necessary.)
+ $hash{street_name} = uc($cust_location->address1);
+ $hash{location} = uc($address2);
+ $hash{community_name} = uc($cust_location->city);
+ $hash{state} = uc($cust_location->state);
}
# customer name and class
commit 70322c9412a97ab97582d76baeae00b9117c8a12
Author: Mark Wells <mark at freeside.biz>
Date: Wed Oct 22 11:57:32 2014 -0700
ensure relocate export always runs exactly once, #14049
diff --git a/FS/FS/cust_svc.pm b/FS/FS/cust_svc.pm
index f499bef..96409c3 100644
--- a/FS/FS/cust_svc.pm
+++ b/FS/FS/cust_svc.pm
@@ -334,15 +334,34 @@ sub replace {
#trigger a relocate export on location changes
if ( $new->cust_pkg->locationnum != $old->cust_pkg->locationnum ) {
- $error ||= $new->svc_x->export('relocate',
- $new->cust_pkg->cust_location,
- $old->cust_pkg->cust_location,
+ my $svc_x = $new->svc_x;
+ if ( $svc_x->locationnum ) {
+ if ( $svc_x->locationnum == $old->cust_pkg->locationnum ) {
+ # in this case, set the service location to be the same as the new
+ # package location
+ $svc_x->set('locationnum', $new->cust_pkg->locationnum);
+ # and replace it, which triggers a relocate export so we don't
+ # need to
+ $error ||= $svc_x->replace;
+ } else {
+ # the service already has a different location from its package
+ # so don't change it
+ }
+ } else {
+ # the service doesn't have a locationnum (either isn't of a type
+ # that has the locationnum field, or the locationnum is null and
+ # defaults to cust_pkg->locationnum)
+ # so just trigger the export here
+ $error ||= $new->svc_x->export('relocate',
+ $new->cust_pkg->cust_location,
+ $old->cust_pkg->cust_location,
);
- }
+ } # if ($svc_x->locationnum)
+ } # if this is a location change
if ( $error ) {
$dbh->rollback if $oldAutoCommit;
- return $error if $error;
+ return $error if $error
}
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
-----------------------------------------------------------------------
Summary of changes:
FS/FS/cust_svc.pm | 29 +++++++++++++++----
FS/FS/part_export/nena2.pm | 68 +++++++++++++++++++++++++++++++++-----------
2 files changed, 75 insertions(+), 22 deletions(-)
More information about the freeside-commits
mailing list