X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fgeocode_Mixin.pm;h=c1b9f865b7cde9f3b4d31c145cf8a5c519c4dd26;hb=5af515ac6bdc6ff88860c618207660eac48c276a;hp=cf45a92ee4820e15deb3774666b2d2af3a0eb464;hpb=eec4949e2c8f09a0b89331437186b77c4db6ff38;p=freeside.git diff --git a/FS/FS/geocode_Mixin.pm b/FS/FS/geocode_Mixin.pm index cf45a92ee..c1b9f865b 100644 --- a/FS/FS/geocode_Mixin.pm +++ b/FS/FS/geocode_Mixin.pm @@ -5,6 +5,7 @@ use vars qw( $DEBUG $me ); use Carp; use Locale::Country; use FS::Record qw( qsearchs qsearch ); +use FS::Conf; use FS::cust_pkg; use FS::cust_location; use FS::cust_tax_location; @@ -37,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 @@ -50,7 +52,8 @@ sub location_hash { map { my $method = ($_ eq 'geocode') ? $_ : $prefix.$_; $_ => $self->get($method); } - qw( address1 address2 city county state zip country geocode ); + qw( address1 address2 city county state zip country geocode + location_type location_number location_kind ); } =item location_label [ OPTION => VALUE ... ] @@ -82,7 +85,7 @@ sub location_label { my $ds = $opt{double_space} || ' '; my $line = ''; my $cydefault = - $opt{'countrydefault'} || FS::conf->new->config('countrydefault') || 'US'; + $opt{'countrydefault'} || FS::Conf->new->config('countrydefault') || 'US'; my $prefix = $self->has_ship_address ? 'ship_' : ''; my $notfirst = 0; @@ -92,6 +95,26 @@ sub location_label { if $self->$method; $notfirst++; } + + my $lt = $self->get($prefix.'location_type'); + if ( $lt ) { + 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{$lt} || $lt ); + } + + $line .= ' '. &$escape($self->get($prefix.'location_number')) + if $self->get($prefix.'location_number'); + $notfirst = 0; foreach (qw ( city county state zip ) ) { my $method = "$prefix$_"; @@ -122,7 +145,7 @@ sub geocode { return $geocode if $geocode; my $prefix = - ( FS::conf->new->exists('tax-ship_address') && $self->has_ship_address ) + ( FS::Conf->new->exists('tax-ship_address') && $self->has_ship_address ) ? 'ship_' : ''; @@ -132,7 +155,8 @@ sub geocode { $zip ||= ''; $plus4 ||= ''; #CCH specific location stuff - my $extra_sql = "AND plus4lo <= '$plus4' AND plus4hi >= '$plus4'"; + my $extra_sql = $plus4 ? "AND plus4lo <= '$plus4' AND plus4hi >= '$plus4'" + : ''; my @cust_tax_location = qsearch( { @@ -145,6 +169,11 @@ sub geocode { $geocode = $cust_tax_location[0]->geocode if scalar(@cust_tax_location); + warn "WARNING: customer ". $self->custnum. + ": multiple locations for zip ". $self->get("${prefix}zip"). + "; using arbitrary geocode $geocode\n" + if scalar(@cust_tax_location) > 1; + $geocode; }