diff options
author | ivan <ivan> | 2011-03-13 18:56:03 +0000 |
---|---|---|
committer | ivan <ivan> | 2011-03-13 18:56:03 +0000 |
commit | 528e7e1cb1a6d05f87847bf9fd9b7e0e9fc33f6f (patch) | |
tree | 19e5e3331069417f221569dd4e6b9cd915e0500f /FS | |
parent | d66bff648dd4d7969f50f956b5c1dd06b8159b8c (diff) |
qualification address handling changes, RT#7111
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/geocode_Mixin.pm | 65 | ||||
-rw-r--r-- | FS/FS/part_export/ikano.pm | 13 | ||||
-rw-r--r-- | FS/FS/qual.pm | 4 |
3 files changed, 78 insertions, 4 deletions
diff --git a/FS/FS/geocode_Mixin.pm b/FS/FS/geocode_Mixin.pm index 08e7b8619..498b7cf97 100644 --- a/FS/FS/geocode_Mixin.pm +++ b/FS/FS/geocode_Mixin.pm @@ -38,7 +38,8 @@ and other location fields. =item location_hash Returns a list of key/value pairs, with the following keys: address1, address2, -city, county, state, zip, country. The shipping address is used if present. +city, county, state, zip, country, geocode, location_type, location_number, +location_kind. The shipping address is used if present. =cut @@ -88,12 +89,29 @@ sub location_label { my $prefix = $self->has_ship_address ? 'ship_' : ''; my $notfirst = 0; - foreach (qw ( address1 address2 location_type location_number ) ) { + foreach (qw ( address1 address2 ) ) { my $method = "$prefix$_"; $line .= ($notfirst ? $separator : ''). &$escape($self->$method) if $self->$method; $notfirst++; } + + my %location_type; + if ( 1 ) { #ikano, switch on via config + { no warnings 'void'; + eval { 'use FS::part_export::ikano;' }; + die $@ if $@; + } + %location_type = FS::part_export::ikano->location_types; + } else { + %location_type = (); #? + } + + $line .= ' '. &$escape( $location_type{ $self->get($prefix.'location_type') }) + if $self->get($prefix.'location_type'); + $line .= ' '. &$escape($self->get($prefix.'location_number')) + if $self->get($prefix.'location_number'); + $notfirst = 0; foreach (qw ( city county state zip ) ) { my $method = "$prefix$_"; @@ -150,6 +168,49 @@ sub geocode { $geocode; } +=item alternize + +Attempts to parse data for location_type and location_number from address1 +and address2. + +=cut + +sub alternize { + my $self = shift; + my $prefix = $self->has_ship_address ? 'ship_' : ''; + + return '' if $self->get($prefix.'location_type') + || $self->get($prefix.'location_number'); + + my %parse; + if ( 1 ) { #ikano, switch on via config + { no warnings 'void'; + eval { 'use FS::part_export::ikano;' }; + die $@ if $@; + } + %parse = FS::part_export::ikano->location_types_parse; + } else { + %parse = (); #? + } + + foreach my $from ('address1', 'address2') { + foreach my $parse ( keys %parse ) { + my $value = $self->get($prefix.$from); + if ( $value =~ s/(^|\W+)$parse\W+(\w+)\W*$//i ) { + $self->set($prefix.'location_type', $parse{$parse}); + $self->set($prefix.'location_number', $2); + $self->set($prefix.$from, $value); + return ''; + } + } + } + + #nothing matched, no changes + $self->get($prefix.'address2') + ? "Can't parse unit type and number from ${prefix}address2" + : ''; +} + =back =head1 BUGS diff --git a/FS/FS/part_export/ikano.pm b/FS/FS/part_export/ikano.pm index 153b4a606..b04defafa 100644 --- a/FS/FS/part_export/ikano.pm +++ b/FS/FS/part_export/ikano.pm @@ -51,12 +51,24 @@ sub location_types { 'LOT' => 'Lot', 'RM' => 'Room', 'SLIP' => 'Slip', + 'SUIT' => 'Suite', 'TRLR' => 'Trailer', 'UNIT' => 'Unit', 'WING' => 'Wing', ); } +sub location_types_parse { + my $class = shift; + my %t = $class->location_types; + delete $t{''}; + ( + (map { $_ => $_ } keys %t), + (reverse %t), + 'STE' => 'SUIT', #USPS + ); +} + sub dsl_pull { # we distinguish between invalid new data (return error) versus data that # has legitimately changed (may eventually execute hooks; now just update) @@ -280,6 +292,7 @@ sub qual { my %location_hash = $qual->location_hash; return 'No address provided' unless keys %location_hash; + warn Dumper(\%location_hash); return 'Location kind is required' unless $location_hash{location_kind}; my $svctn = $qual->phonenum; diff --git a/FS/FS/qual.pm b/FS/FS/qual.pm index 98e137c6b..d0b3fbdfe 100644 --- a/FS/FS/qual.pm +++ b/FS/FS/qual.pm @@ -91,7 +91,8 @@ sub insert { if ( $options{'cust_location'} ) { my $cust_location = $options{'cust_location'}; - my $error = $cust_location->insert; + my $method = $cust_location->locationnum ? 'replace' : 'insert'; + my $error = $cust_location->$method(); if ( $error ) { $dbh->rollback if $oldAutoCommit; return $error; @@ -186,7 +187,6 @@ sub part_export { sub location_hash { my $self = shift; - use Data::Dumper; warn Dumper($self); if ( $self->locationnum ) { my $l = qsearchs( 'cust_location', { 'locationnum' => $self->locationnum }); |