X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fprospect_main.pm;h=67e91cf994fc2b674bdd968736ca075496eb1882;hp=51481437dc43458bf66b8b857992e3a6ca3aa6ff;hb=e0b6fe25cca1e2ff566cc0765f6c9fa24ed66ba8;hpb=d2acdd4d53071f9e0f9718e14532cb009cda1a85 diff --git a/FS/FS/prospect_main.pm b/FS/FS/prospect_main.pm index 51481437d..67e91cf99 100644 --- a/FS/FS/prospect_main.pm +++ b/FS/FS/prospect_main.pm @@ -4,7 +4,8 @@ use base qw( FS::Quotable_Mixin FS::o2m_Common FS::Record ); use strict; use vars qw( $DEBUG @location_fields ); use Scalar::Util qw( blessed ); -use FS::Record qw( dbh qsearch ); # qsearchs ); +use FS::Conf; +use FS::Record qw( dbh qsearch qsearchs ); use FS::cust_location; use FS::cust_main; @@ -242,9 +243,10 @@ sub check { my $error = $self->ut_numbern('prospectnum') - || $self->ut_foreign_key( 'agentnum', 'agent', 'agentnum' ) - || $self->ut_foreign_key( 'refnum', 'part_referral', 'refnum' ) + || $self->ut_foreign_key( 'agentnum', 'agent', 'agentnum' ) + || $self->ut_foreign_keyn( 'refnum', 'part_referral', 'refnum' ) || $self->ut_textn('company') + || $self->ut_foreign_keyn( 'taxstatusnum', 'tax_status', 'taxstatusnum' ) ; return $error if $error; @@ -268,8 +270,11 @@ sub name { my $self = shift; return $self->company if $self->company; - my $contact = ($self->contact)[0]; #first contact? good enough for now - return $contact->line if $contact; + my $prospect_contact = ($self->prospect_contact)[0]; #first contact? good enough for now + my $contact = $prospect_contact->contact if $prospect_contact; + return $contact->line if $prospect_contact && $contact; + + #address? 'Prospect #'. $self->prospectnum; } @@ -286,8 +291,13 @@ Returns the locations (see L) associated with this prospect. sub cust_location { my $self = shift; - qsearch( 'cust_location', { 'prospectnum' => $self->prospectnum, - 'custnum' => '' } ); + qsearch({ + 'table' => 'cust_location', + 'hashref' => { 'prospectnum' => $self->prospectnum, + 'custnum' => '', + }, + 'order_by' => 'ORDER BY country, LOWER(state), LOWER(city), LOWER(county), LOWER(address1), LOWER(address2)', + }); } =item qual @@ -298,6 +308,36 @@ Returns the qualifications (see L) associated with this prospect. Returns the agent (see L) for this customer. +=item tax_status + +Returns the external tax status, as an FS::tax_status object, or the empty +string if there is no tax status. + +=cut + +sub tax_status { + my $self = shift; + if ( $self->taxstatusnum ) { + qsearchs('tax_status', { 'taxstatusnum' => $self->taxstatusnum } ); + } else { + return ''; + } +} + +=item taxstatus + +Returns the tax status code if there is one. + +=cut + +sub taxstatus { + my $self = shift; + my $tax_status = $self->tax_status; + $tax_status + ? $tax_status->taxstatus + : ''; +} + =item convert_cust_main Converts this prospect to a customer. @@ -313,10 +353,7 @@ sub convert_cust_main { 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; + my @contact = map $_->contact, $self->prospect_contact; #XXX i'm not compatible with cust_main-require_phone (which is kind of a # pre-contact thing anyway) @@ -324,9 +361,12 @@ sub convert_cust_main { my $cust_main = new FS::cust_main { 'bill_location' => $cust_location[0], 'ship_location' => $cust_location[0], - ( map { $_ => $self->$_ } qw( agentnum refnum company ) ), + ( map { $_ => $self->$_ } qw( agentnum refnum company taxstatusnum ) ), }; + $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 ); @@ -335,7 +375,11 @@ sub convert_cust_main { $cust_main->set('last', 'Unknown'); } - $cust_main->insert( {}, \@invoicing_list, + #v3 payby no longer allowed + #$cust_main->payby('BILL'); + #$cust_main->paydate('12/2037'); + + $cust_main->insert( {}, 'prospectnum' => $self->prospectnum, ) or $cust_main; @@ -397,6 +441,16 @@ sub search { } +# stub this so that calling ->cust_bill doesn't return an empty string +sub cust_bill { + return; +} + +# XXX should have real localization here eventually +sub locale { + FS::Conf->new->config('locale'); +} + =back =head1 BUGS