X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=FS%2FFS%2Fprospect_main.pm;h=b160343de5239f2c0a261c5ca3b213688965adf3;hb=42e878b29ae26943d7dc3acfbb7f095a56ae0a2f;hp=a18c8ff6744c73a80e1924c2206c9907a6891819;hpb=a858c1b8461b92b6f9daaa1b508b1c2cfc1f0f23;p=freeside.git diff --git a/FS/FS/prospect_main.pm b/FS/FS/prospect_main.pm index a18c8ff67..b160343de 100644 --- a/FS/FS/prospect_main.pm +++ b/FS/FS/prospect_main.pm @@ -1,14 +1,13 @@ package FS::prospect_main; +use base qw( FS::Quotable_Mixin FS::o2m_Common FS::Record ); use strict; -use base qw( FS::Quotable_Mixin FS::o2m_Common FS::Record ); use vars qw( $DEBUG @location_fields ); use Scalar::Util qw( blessed ); -use FS::Record qw( dbh qsearch qsearchs ); -use FS::agent; +use FS::Conf; +use FS::Record qw( dbh qsearch ); # qsearchs ); use FS::cust_location; -use FS::contact; -use FS::qual; +use FS::cust_main; $DEBUG = 0; @@ -81,7 +80,11 @@ primary key =item agentnum -Agent +Agent (see L) + +=item refnum + +Referral (see L) =item company @@ -240,7 +243,8 @@ sub check { my $error = $self->ut_numbern('prospectnum') - || $self->ut_foreign_key('agentnum', 'agent', 'agentnum' ) + || $self->ut_foreign_key( 'agentnum', 'agent', 'agentnum' ) + || $self->ut_foreign_keyn( 'refnum', 'part_referral', 'refnum' ) || $self->ut_textn('company') ; return $error if $error; @@ -275,13 +279,6 @@ sub name { Returns the contacts (see L) associated with this prospect. -=cut - -sub contact { - my $self = shift; - qsearch( 'contact', { 'prospectnum' => $self->prospectnum } ); -} - =item cust_location Returns the locations (see L) associated with this prospect. @@ -298,22 +295,58 @@ sub cust_location { Returns the qualifications (see L) associated with this prospect. -=cut - -sub qual { - my $self = shift; - qsearch( 'qual', { 'prospectnum' => $self->prospectnum } ); -} - =item agent Returns the agent (see L) for this customer. +=item convert_cust_main + +Converts this prospect to a customer. + +If there is an error, returns an error message, otherwise, returns the +newly-created FS::cust_main object. + =cut -sub agent { +sub convert_cust_main { my $self = shift; - qsearchs( 'agent', { 'agentnum' => $self->agentnum } ); + + my @cust_location = $self->cust_location; + #the interface only allows one, so we're just gonna go with that for now + + my @contact = $self->contact; + + #XXX define one contact type as "billing", then we could pick just that one + my @invoicing_list = map $_->emailaddress, map $_->contact_email, @contact; + + #XXX i'm not compatible with cust_main-require_phone (which is kind of a + # pre-contact thing anyway) + + my $cust_main = new FS::cust_main { + 'bill_location' => $cust_location[0], + 'ship_location' => $cust_location[0], + ( map { $_ => $self->$_ } qw( agentnum refnum company ) ), + }; + + $cust_main->refnum( FS::Conf->new->config('referraldefault') || 1 ) + unless $cust_main->refnum; + + #XXX again, arbitrary, if one contact was "billing", that would be better + if ( $contact[0] ) { + $cust_main->set($_, $contact[0]->get($_)) foreach qw( first last ); + } else { + $cust_main->set('first', 'Unknown'); + $cust_main->set('last', 'Unknown'); + } + + #v3 payby + $cust_main->payby('BILL'); + $cust_main->paydate('12/2037'); + + $cust_main->insert( {}, \@invoicing_list, + 'prospectnum' => $self->prospectnum, + ) + or $cust_main; } =item search HASHREF @@ -372,6 +405,11 @@ sub search { } +# stub this so that calling ->cust_bill doesn't return an empty string +sub cust_bill { + return; +} + =back =head1 BUGS