diff options
author | ivan <ivan> | 2011-12-13 05:09:32 +0000 |
---|---|---|
committer | ivan <ivan> | 2011-12-13 05:09:32 +0000 |
commit | 8cbe016ac2c28cd209c48f053f361573368e7988 (patch) | |
tree | 5a39513e71f4e9528f71fa298c2abf8b8dbd07db /FS/FS/geocode_Mixin.pm | |
parent | ea1b65c11b8781160b5a76a77e1ee8108e528048 (diff) |
add latitude/longitude to prospects, customers and package locations, RT#15539
Diffstat (limited to 'FS/FS/geocode_Mixin.pm')
-rw-r--r-- | FS/FS/geocode_Mixin.pm | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/FS/FS/geocode_Mixin.pm b/FS/FS/geocode_Mixin.pm index c1b9f86..9ac8e7a 100644 --- a/FS/FS/geocode_Mixin.pm +++ b/FS/FS/geocode_Mixin.pm @@ -4,6 +4,7 @@ use strict; use vars qw( $DEBUG $me ); use Carp; use Locale::Country; +use Geo::Coder::Googlev3; #compile time for now, until others are supported use FS::Record qw( qsearchs qsearch ); use FS::Conf; use FS::cust_pkg; @@ -131,6 +132,36 @@ sub location_label { $line; } +=item set_coord + +=cut + +sub set_coord { + my $self = shift; + my $pre = scalar(@_) ? shift : ''; + + #my $module = FS::Conf->new->config('geocode_module') || 'Geo::Coder::Googlev3'; + + my $geocoder = Geo::Coder::Googlev3->new; + my $location = $geocoder->geocode( location => + $self->get($pre.'address1'). ','. + ( $self->get($pre.'address2') ? $self->get($pre.'address2').',' : '' ). + $self->get($pre.'city'). ','. + $self->get($pre.'state'). ','. + code2country($self->get($pre.'country')) + ); + + #errors? + + my $geo_loc = $location->{'geometry'}{'location'} or return; + if ( $geo_loc->{'lat'} && $geo_loc->{'lng'} ) { + $self->set($pre.'latitude', $geo_loc->{'lat'} ); + $self->set($pre.'longitude', $geo_loc->{'lng'} ); + $self->set($pre.'coord_auto', 'Y'); + } + +} + =item geocode DATA_VENDOR Returns a value for the customer location as encoded by DATA_VENDOR. |