REST API, RT#28181
[freeside.git] / FS / FS / prospect_main.pm
index 5a4048f..55b12f2 100644 (file)
@@ -1,17 +1,51 @@
 package FS::prospect_main;
+use base qw( FS::Quotable_Mixin FS::o2m_Common FS::Record );
 
 use strict;
-use base qw( FS::o2m_Common FS::Record );
-use vars qw( $DEBUG );
+use vars qw( $DEBUG @location_fields );
 use Scalar::Util qw( blessed );
-use FS::Record qw( dbh qsearch ); #qsearchs );
-use FS::agent;
+use FS::Record qw( dbh qsearch ); # qsearchs );
 use FS::cust_location;
-use FS::contact;
-use FS::qual;
 
 $DEBUG = 0;
 
+#started as false laziness w/cust_main/Location.pm
+
+use Carp qw(carp);
+
+my $init = 0;
+BEGIN {
+  # set up accessors for location fields
+  if (!$init) {
+    no strict 'refs';
+    @location_fields = 
+      qw( address1 address2 city county state zip country district
+        latitude longitude coord_auto censustract censusyear geocode
+        addr_clean );
+
+    foreach my $f (@location_fields) {
+      *{"FS::prospect_main::$f"} = sub {
+        carp "WARNING: tried to set cust_main.$f with accessor" if (@_ > 1);
+        my @cust_location = shift->cust_location or return '';
+        #arbitrarily picking the first because the UI only lets you add one
+        $cust_location[0]->$f
+      };
+    }
+    $init++;
+  }
+}
+
+#debugging shim--probably a performance hit, so remove this at some point
+sub get {
+  my $self = shift;
+  my $field = shift;
+  if ( $DEBUG and grep { $_ eq $field } @location_fields ) {
+    carp "WARNING: tried to get() location field $field";
+    $self->$field;
+  }
+  $self->FS::Record::get($field);
+}
+
 =head1 NAME
 
 FS::prospect_main - Object methods for prospect_main records
@@ -208,11 +242,20 @@ sub check {
   ;
   return $error if $error;
 
+  my $company = $self->company;
+  $company =~ s/^\s+//; 
+  $company =~ s/\s+$//; 
+  $company =~ s/\s+/ /g;
+  $self->company($company);
+
   $self->SUPER::check;
 }
 
 =item name
 
+Returns a name for this prospect, as a string (company name for commercial
+prospects, contact name for residential prospects).
+
 =cut
 
 sub name {
@@ -229,13 +272,6 @@ sub name {
 
 Returns the contacts (see L<FS::contact>) associated with this prospect.
 
-=cut
-
-sub contact {
-  my $self = shift;
-  qsearch( 'contact', { 'prospectnum' => $self->prospectnum } );
-}
-
 =item cust_location
 
 Returns the locations (see L<FS::cust_location>) associated with this prospect.
@@ -244,20 +280,17 @@ Returns the locations (see L<FS::cust_location>) associated with this prospect.
 
 sub cust_location {
   my $self = shift;
-  qsearch( 'cust_location', { 'prospectnum' => $self->prospectnum } );
+  qsearch( 'cust_location', { 'prospectnum' => $self->prospectnum,
+                              'custnum'     => '' } );
 }
 
 =item qual
 
 Returns the qualifications (see L<FS::qual>) associated with this prospect.
 
-=cut
-
-sub qual {
-  my $self = shift;
-  qsearch( 'qual', { 'prospectnum' => $self->prospectnum } );
-}
+=item agent
 
+Returns the agent (see L<FS::agent>) for this customer.
 
 =item search HASHREF