[freeside-commits] freeside/FS/FS svc_phone.pm, 1.24, 1.25 cust_main.pm, 1.497, 1.498 location_Mixin.pm, 1.1, 1.2 cust_location.pm, 1.6, 1.7

Ivan,,, ivan at wavetail.420.am
Fri Mar 12 13:29:06 PST 2010


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

Modified Files:
	svc_phone.pm cust_main.pm location_Mixin.pm cust_location.pm 
Log Message:
finishing e911/svc_phone location, RT#7047

Index: cust_location.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_location.pm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -w -d -r1.6 -r1.7
--- cust_location.pm	28 Dec 2009 19:18:18 -0000	1.6
+++ cust_location.pm	12 Mar 2010 21:29:04 -0000	1.7
@@ -234,6 +234,20 @@
   $self->location_label;
 }
 
+=item location_hash
+
+Returns a list of key/value pairs, with the following keys: address1, adddress2,
+city, county, state, zip, country.
+
+=cut
+
+#geocode?  not yet set
+
+sub location_hash {
+  my $self = shift;
+  map { $_ => $self->$_ } qw( address1 address2 city county state zip country );
+}
+
 =back
 
 =head1 BUGS

Index: svc_phone.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/svc_phone.pm,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -w -d -r1.24 -r1.25
--- svc_phone.pm	12 Mar 2010 03:36:35 -0000	1.24
+++ svc_phone.pm	12 Mar 2010 21:29:04 -0000	1.25
@@ -2,7 +2,9 @@
 
 use strict;
 use base qw( FS::svc_Domain_Mixin FS::location_Mixin FS::svc_Common );
-use vars qw( @pw_set $conf );
+use vars qw( $DEBUG $me @pw_set $conf );
+use Data::Dumper;
+use Scalar::Util qw( blessed );
 use FS::Conf;
 use FS::Record qw( qsearch qsearchs dbh );
 use FS::Msgcat qw(gettext);
@@ -12,6 +14,9 @@
 use FS::svc_domain;
 use FS::cust_location;
 
+$me = '[' . __PACKAGE__ . ']';
+$DEBUG = 0;
+
 #avoid l 1 and o O 0
 @pw_set = ( 'a'..'k', 'm','n', 'p-z', 'A'..'N', 'P'..'Z' , '2'..'9' );
 
@@ -179,12 +184,54 @@
 
 =item insert
 
-Adds this record to the database.  If there is an error, returns the error,
-otherwise returns false.
+Adds this phone number to the database.  If there is an error, returns the
+error, otherwise returns false.
 
 =cut
 
-# the insert method can be inherited from FS::Record
+sub insert {
+  my $self = shift;
+  my %options = @_;
+
+  if ( $DEBUG ) {
+    warn "[$me] insert called on $self: ". Dumper($self).
+         "\nwith options: ". Dumper(%options);
+  }
+
+  local $SIG{HUP} = 'IGNORE';
+  local $SIG{INT} = 'IGNORE';
+  local $SIG{QUIT} = 'IGNORE';
+  local $SIG{TERM} = 'IGNORE';
+  local $SIG{TSTP} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE';
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  #false laziness w/cust_pkg.pm... move this to location_Mixin?  that would
+  #make it more of a base class than a mixin... :)
+  if ( $options{'cust_location'}
+         && ( ! $self->locationnum || $self->locationnum == -1 ) ) {
+    my $error = $options{'cust_location'}->insert;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return "inserting cust_location (transaction rolled back): $error";
+    }
+    $self->locationnum( $options{'cust_location'}->locationnum );
+  }
+  #what about on-the-fly edits?  if the ui supports it?
+
+  my $error = $self->SUPER::insert(%options);
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error;
+  }
+
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+  '';
+
+}
 
 =item delete
 
@@ -234,7 +281,53 @@
 
 =cut
 
-# the replace method can be inherited from FS::Record
+sub replace {
+  my $new = shift;
+
+  my $old = ( blessed($_[0]) && $_[0]->isa('FS::Record') )
+              ? shift
+              : $new->replace_old;
+
+  my %options = @_;
+
+  if ( $DEBUG ) {
+    warn "[$me] replacing $old with $new\n".
+         "\nwith options: ". Dumper(%options);
+  }
+
+  local $SIG{HUP} = 'IGNORE';
+  local $SIG{INT} = 'IGNORE';
+  local $SIG{QUIT} = 'IGNORE';
+  local $SIG{TERM} = 'IGNORE';
+  local $SIG{TSTP} = 'IGNORE';
+  local $SIG{PIPE} = 'IGNORE';
+
+  my $oldAutoCommit = $FS::UID::AutoCommit;
+  local $FS::UID::AutoCommit = 0;
+  my $dbh = dbh;
+
+  #false laziness w/cust_pkg.pm... move this to location_Mixin?  that would
+  #make it more of a base class than a mixin... :)
+  if ( $options{'cust_location'}
+         && ( ! $new->locationnum || $new->locationnum == -1 ) ) {
+    my $error = $options{'cust_location'}->insert;
+    if ( $error ) {
+      $dbh->rollback if $oldAutoCommit;
+      return "inserting cust_location (transaction rolled back): $error";
+    }
+    $new->locationnum( $options{'cust_location'}->locationnum );
+  }
+  #what about on-the-fly edits?  if the ui supports it?
+
+  my $error = $new->SUPER::replace($old, %options);
+  if ( $error ) {
+    $dbh->rollback if $oldAutoCommit;
+    return $error if $error;
+  }
+
+  $dbh->commit or die $dbh->errstr if $oldAutoCommit;
+  ''; #no error
+}
 
 =item suspend
 
@@ -275,6 +368,8 @@
   }
   $self->phonenum($phonenum);
 
+  $self->locationnum('') if !$self->locationnum || $self->locationnum == -1;
+
   my $error = 
     $self->ut_numbern('svcnum')
     || $self->ut_numbern('countrycode')
@@ -414,6 +509,17 @@
   qsearch('phone_device', { 'svcnum' => $self->svcnum } );
 }
 
+#override location_Mixin version cause we want to try the cust_pkg location
+#in between us and cust_main
+# XXX what to do in the unlinked case???  return a pseudo-object that returns
+# empty fields?
+sub cust_location_or_main {
+  my $self = shift;
+  return $self->cust_location if $self->locationnum;
+  my $cust_pkg = $self->cust_svc->cust_pkg;
+  $cust_pkg ? $cust_pkg->cust_location_or_main : '';
+}
+
 =back
 
 =head1 BUGS

Index: location_Mixin.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/location_Mixin.pm,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -w -d -r1.1 -r1.2
--- location_Mixin.pm	12 Mar 2010 03:36:35 -0000	1.1
+++ location_Mixin.pm	12 Mar 2010 21:29:04 -0000	1.2
@@ -40,4 +40,18 @@
   $object->location_label(@_);
 }
 
+=item location_hash
+
+Returns a hash of values for the location, either from the location object,
+the cust_main shipping address, or the cust_main address, whichever is present
+first.
+
+=cut
+
+sub location_hash {
+  my $self = shift;
+  my $object = $self->cust_location_or_main;
+  $object->location_hash(@_);
+}
+
 1;

Index: cust_main.pm
===================================================================
RCS file: /home/cvs/cvsroot/freeside/FS/FS/cust_main.pm,v
retrieving revision 1.497
retrieving revision 1.498
diff -u -w -d -r1.497 -r1.498
--- cust_main.pm	9 Mar 2010 02:39:06 -0000	1.497
+++ cust_main.pm	12 Mar 2010 21:29:04 -0000	1.498
@@ -1912,6 +1912,25 @@
   scalar( grep { $self->getfield("ship_$_") ne '' } $self->addr_fields );
 }
 
+=item location_hash
+
+Returns a list of key/value pairs, with the following keys: address1, adddress2,
+city, county, state, zip, country.  The shipping address is used if present.
+
+=cut
+
+#geocode?  dependent on tax-ship_address config, not available in cust_location
+#mostly.  not yet then.
+
+sub location_hash {
+  my $self = shift;
+  my $prefix = $self->has_ship_address ? 'ship_' : '';
+
+  map { $_ => $self->get($prefix.$_) }
+      qw( address1 address2 city county state zip country geocode );
+      #fields that cust_location has
+}
+
 =item all_pkgs [ EXTRA_QSEARCH_PARAMS_HASHREF ]
 
 Returns all packages (see L<FS::cust_pkg>) for this customer.



More information about the freeside-commits mailing list