[freeside-commits] freeside/FS/FS Upgrade.pm, 1.52.2.3, 1.52.2.4 Record.pm, 1.226.2.10, 1.226.2.11 svc_broadband.pm, 1.24.2.6, 1.24.2.7 cust_location.pm, 1.11, 1.11.2.1 cust_main.pm, 1.586.2.10, 1.586.2.11 geocode_Mixin.pm, 1.8, 1.8.2.1 Mason.pm, 1.78.2.7, 1.78.2.8 part_svc.pm, 1.42.2.2, 1.42.2.3

Ivan,,, ivan at wavetail.420.am
Mon Dec 12 21:10:24 PST 2011


Update of /home/cvs/cvsroot/freeside/FS/FS
In directory wavetail.420.am:/tmp/cvs-serv15013/FS/FS

Modified Files:
      Tag: FREESIDE_2_3_BRANCH
	Upgrade.pm Record.pm svc_broadband.pm cust_location.pm 
	cust_main.pm geocode_Mixin.pm Mason.pm part_svc.pm 
Log Message:
add latitude/longitude to prospects, customers and package locations, RT#15539

Index: svc_broadband.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/svc_broadband.pm,v
retrieving revision 1.24.2.6
retrieving revision 1.24.2.7
diff -u -w -d -r1.24.2.6 -r1.24.2.7
--- svc_broadband.pm	10 Dec 2011 00:37:03 -0000	1.24.2.6
+++ svc_broadband.pm	13 Dec 2011 05:10:21 -0000	1.24.2.7
@@ -346,10 +346,6 @@
 
   return $x unless ref($x);
 
-  my $nw_coords = $conf->exists('svc_broadband-require-nw-coordinates');
-  my $lat_lower = $nw_coords ? 1 : -90;
-  my $lon_upper = $nw_coords ? -1 : 180;
-
   # remove delimiters
   my $mac_addr = uc($self->get('mac_addr'));
   $mac_addr =~ s/[-: ]//g;
@@ -365,8 +361,8 @@
     || $self->ut_ipn('ip_addr')
     || $self->ut_hexn('mac_addr')
     || $self->ut_hexn('auth_key')
-    || $self->ut_coordn('latitude', $lat_lower, 90)
-    || $self->ut_coordn('longitude', -180, $lon_upper)
+    || $self->ut_coordn('latitude')
+    || $self->ut_coordn('longitude')
     || $self->ut_sfloatn('altitude')
     || $self->ut_textn('vlan_profile')
     || $self->ut_textn('plan_id')
@@ -399,6 +395,17 @@
     }
   }
 
+  if ( $cust_pkg && ! $self->latitude && ! $self->longitude ) {
+    my $l = $cust_pkg->cust_location_or_main;
+    if ( $l->ship_latitude && $l->ship_longitude ) {
+      $self->latitude  = $l->ship_latitude;
+      $self->longitude = $l->ship_longitude;
+    } elsif ( $l->latitude && $l->longitude ) {
+      $self->latitude  = $l->latitude;
+      $self->longitude = $l->longitude;
+    }
+  }
+
   $error = $self->_check_ip_addr;
   return $error if $error;
 

Index: part_svc.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/part_svc.pm,v
retrieving revision 1.42.2.2
retrieving revision 1.42.2.3
diff -u -w -d -r1.42.2.2 -r1.42.2.3
--- part_svc.pm	10 Nov 2011 21:40:21 -0000	1.42.2.2
+++ part_svc.pm	13 Dec 2011 05:10:22 -0000	1.42.2.3
@@ -894,6 +894,21 @@
     die $error if $error;
   }
 
+  my @badlabels = qsearch({
+    'table' => 'part_svc_column',
+    'hashref' => {},
+    'extra_sql' => 'WHERE columnlabel IN ('.
+      "'Descriptive label for this particular device.',".
+      "'IP address.  Leave blank for automatic assignment.',".
+      "'Maximum upload speed for this service in Kbps.  0 denotes unlimited.',".
+      "'Maximum download speed for this service in Kbps.  0 denotes unlimited.')"
+  });
+  foreach my $col ( @badlabels ) {
+    $col->columnlabel('');
+    my $error = $col->replace;
+    die $error if $error;
+  }
+
 }
 
 =head1 BUGS

Index: Upgrade.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Upgrade.pm,v
retrieving revision 1.52.2.3
retrieving revision 1.52.2.4
diff -u -w -d -r1.52.2.3 -r1.52.2.4
--- Upgrade.pm	28 Oct 2011 01:56:57 -0000	1.52.2.3
+++ Upgrade.pm	13 Dec 2011 05:10:21 -0000	1.52.2.4
@@ -47,6 +47,9 @@
     if $conf->exists('payment_receipt_email')
     || $conf->config('payment_receipt_msgnum');
 
+  $conf->touch('geocode-require_nw_coordinates')
+    if $conf->exists('svc_broadband-require-nw-coordinates');
+
   upgrade_overlimit_groups($conf);
   map { upgrade_overlimit_groups($conf,$_->agentnum) } qsearch('agent', {});
   

Index: cust_location.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_location.pm,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -w -d -r1.11 -r1.11.2.1
--- cust_location.pm	22 Mar 2011 06:00:54 -0000	1.11
+++ cust_location.pm	13 Dec 2011 05:10:21 -0000	1.11.2.1
@@ -135,6 +135,9 @@
     || $self->ut_textn('state')
     || $self->ut_country('country')
     || $self->ut_zip('zip', $self->country)
+    || $self->ut_coordn('latitude')
+    || $self->ut_coordn('longitude')
+    || $self->ut_enum('coord_auto', [ '', 'Y' ])
     || $self->ut_alphan('location_type')
     || $self->ut_textn('location_number')
     || $self->ut_enum('location_kind', [ '', 'R', 'B' ] )
@@ -142,6 +145,9 @@
   ;
   return $error if $error;
 
+  $self->set_coord
+    unless $self->latitude && $self->longitude;
+
   return "No prospect or customer!" unless $self->prospectnum || $self->custnum;
   return "Prospect and customer!"       if $self->prospectnum && $self->custnum;
 

Index: cust_main.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_main.pm,v
retrieving revision 1.586.2.10
retrieving revision 1.586.2.11
diff -u -w -d -r1.586.2.10 -r1.586.2.11
--- cust_main.pm	9 Dec 2011 03:20:58 -0000	1.586.2.10
+++ cust_main.pm	13 Dec 2011 05:10:21 -0000	1.586.2.11
@@ -1481,6 +1481,29 @@
       && length($self->get($pre.'zip')) >= 10;
   }
 
+  for my $pre ( grep $old->get($_.'coord_auto'), ( '', 'ship_' ) ) {
+
+    $self->set($pre.'coord_auto', '') && next
+      if $self->get($pre.'latitude') && $self->get($pre.'longitude')
+      && (    $self->get($pre.'latitude')  != $old->get($pre.'latitude')
+           || $self->get($pre.'longitude') != $old->get($pre.'longitude')
+         );
+
+    $self->set_coord($pre)
+      if $old->get($pre.'address1') ne $self->get($pre.'address1')
+      || $old->get($pre.'city')     ne $self->get($pre.'city')
+      || $old->get($pre.'state')    ne $self->get($pre.'state')
+      || $old->get($pre.'country')  ne $self->get($pre.'country');
+
+  }
+
+  $self->set_coord
+    if ! $self->coord_auto && ! $self->latitude && ! $self->longitude;
+
+  $self->set_coord('ship_')
+    if $self->has_ship_address && ! $self->ship_coord_auto
+    && ! $self->ship_latitude && ! $self->ship_longitude;
+
   local($ignore_expired_card) = 1
     if $old->payby  =~ /^(CARD|DCRD)$/
     && $self->payby =~ /^(CARD|DCRD)$/
@@ -1696,6 +1719,9 @@
     || $self->ut_textn('county')
     || $self->ut_textn('state')
     || $self->ut_country('country')
+    || $self->ut_coordn('latitude')
+    || $self->ut_coordn('longitude')
+    || $self->ut_enum('coord_auto', [ '', 'Y' ])
     || $self->ut_anything('comments')
     || $self->ut_numbern('referral_custnum')
     || $self->ut_textn('stateid')
@@ -1710,6 +1736,9 @@
     || $self->ut_enum('locale', [ '', FS::Locales->locales ])
   ;
 
+  $self->set_coord
+    unless $import || ($self->latitude && $self->longitude);
+
   #barf.  need message catalogs.  i18n.  etc.
   $error .= "Please select an advertising source."
     if $error =~ /^Illegal or empty \(numeric\) refnum: /;
@@ -1807,9 +1836,15 @@
       || $self->ut_textn('ship_county')
       || $self->ut_textn('ship_state')
       || $self->ut_country('ship_country')
+      || $self->ut_coordn('ship_latitude')
+      || $self->ut_coordn('ship_longitude')
+      || $self->ut_enum('ship_coord_auto', [ '', 'Y' ] )
     ;
     return $error if $error;
 
+    $self->set_coord('ship_')
+      unless $import || ($self->ship_latitude && $self->ship_longitude);
+
     #false laziness with above
     unless ( qsearchs('cust_main_county', {
       'country' => $self->ship_country,
@@ -2079,6 +2114,7 @@
 sub addr_fields {
   qw( last first company
       address1 address2 city county state zip country
+      latitude longitude
       daytime night fax mobile
     );
 }
@@ -2500,8 +2536,9 @@
       'custnum'  => $self->custnum,
   } );
 
-  foreach (qw( address1 address2 city state zip country payby payinfo paydate
-               payname )) {
+  foreach (qw( address1 address2 city state zip country latitude longitude
+               payby payinfo paydate payname ))
+  {
     $options{$_} = '' unless exists($options{$_});
   }
 

Index: Record.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Record.pm,v
retrieving revision 1.226.2.10
retrieving revision 1.226.2.11
diff -u -w -d -r1.226.2.10 -r1.226.2.11
--- Record.pm	2 Dec 2011 04:12:40 -0000	1.226.2.10
+++ Record.pm	13 Dec 2011 05:10:21 -0000	1.226.2.11
@@ -3,7 +3,7 @@
 use strict;
 use vars qw( $AUTOLOAD @ISA @EXPORT_OK $DEBUG
              %virtual_fields_cache
-             $conf $conf_encryption $money_char
+             $conf $conf_encryption $money_char $lat_lower $lon_upper
              $me
              $nowarn_identical $nowarn_classload
              $no_update_diff $no_check_foreign
@@ -56,18 +56,25 @@
 $conf = '';
 $conf_encryption = '';
 FS::UID->install_callback( sub {
+
   eval "use FS::Conf;";
   die $@ if $@;
   $conf = FS::Conf->new; 
   $conf_encryption = $conf->exists('encryption');
   $money_char = $conf->config('money_char') || '$';
+  my $nw_coords = $conf->exists('geocode-require_nw_coordinates');
+  $lat_lower = $nw_coords ? 1 : -90;
+  $lon_upper = $nw_coords ? -1 : 180;
+
   $File::CounterFile::DEFAULT_DIR = $conf->base_dir . "/counters.". datasrc;
+
   if ( driver_name eq 'Pg' ) {
     eval "use DBD::Pg ':pg_types'";
     die $@ if $@;
   } else {
     eval "sub PG_BYTEA { die 'guru meditation #9: calling PG_BYTEA when not running Pg?'; }";
   }
+
 } );
 
 =head1 NAME
@@ -2511,11 +2518,17 @@
 =cut
 
 sub ut_coord {
-
   my ($self, $field) = (shift, shift);
 
-  my $lower = shift if scalar(@_);
-  my $upper = shift if scalar(@_);
+  my($lower, $upper);
+  if ( $field =~ /latitude/ ) {
+    $lower = $lat_lower;
+    $upper = 90;
+  } elsif ( $field =~ /longitude/ ) {
+    $lower = -180;
+    $upper = $lon_upper;
+  }
+
   my $coord = $self->getfield($field);
   my $neg = $coord =~ s/^(-)//;
 
@@ -2563,7 +2576,7 @@
 
   my ($self, $field) = (shift, shift);
 
-  if ($self->getfield($field) =~ /^$/) {
+  if ($self->getfield($field) =~ /^\s*$/) {
     return '';
   } else {
     return $self->ut_coord($field, @_);

Index: geocode_Mixin.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/geocode_Mixin.pm,v
retrieving revision 1.8
retrieving revision 1.8.2.1
diff -u -w -d -r1.8 -r1.8.2.1
--- geocode_Mixin.pm	19 Jul 2011 21:27:06 -0000	1.8
+++ geocode_Mixin.pm	13 Dec 2011 05:10:22 -0000	1.8.2.1
@@ -4,6 +4,7 @@
 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 @@
   $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.

Index: Mason.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/Mason.pm,v
retrieving revision 1.78.2.7
retrieving revision 1.78.2.8
diff -u -w -d -r1.78.2.7 -r1.78.2.8
--- Mason.pm	10 Dec 2011 00:37:03 -0000	1.78.2.7
+++ Mason.pm	13 Dec 2011 05:10:22 -0000	1.78.2.8
@@ -114,6 +114,8 @@
                                         #selectlayers.html
   use Locale::Country;
   use Business::US::USPS::WebTools::AddressStandardization;
+  use HTML::GoogleMaps;
+  use Geo::GoogleEarth::Pluggable;
   use LWP::UserAgent;
   use Storable qw( nfreeze thaw );
   use FS;



More information about the freeside-commits mailing list