X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2FFS%2Fprospect_main.pm;h=c54c569c36a51811242dcd58da55c287e61ccc0d;hp=79b3f674873f127165ecab17ecf31fb6b193e7d9;hb=121510b6337b7f75f25d583730a65f3fc63bbfbe;hpb=99e332001fc0a3483bc999d51f5e01ed2efec5f6 diff --git a/FS/FS/prospect_main.pm b/FS/FS/prospect_main.pm index 79b3f6748..c54c569c3 100644 --- a/FS/FS/prospect_main.pm +++ b/FS/FS/prospect_main.pm @@ -5,7 +5,7 @@ use strict; use vars qw( $DEBUG @location_fields ); use Scalar::Util qw( blessed ); use FS::Conf; -use FS::Record qw( dbh qsearch ); # qsearchs ); +use FS::Record qw( dbh qsearch qsearchs ); use FS::cust_location; use FS::cust_main; @@ -243,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; @@ -269,16 +270,54 @@ 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; } +=item contact_firstlast + +If this prospect has a company, returns the empty string. If not, returns the +first contact's first and last name. + +Primarily intended for use in quotation substitutions, like the FS::cust_main +method of the same name. + +=cut + +sub contact_firstlast { + my $self = shift; + return '' if $self->company; + my @contacts = $self->contact; + #return '' unless @contacts; + warn $contacts[0]->first; + warn $contacts[0]->get('last'); + $contacts[0]->first. ' '. $contacts[0]->get('last'); +} + =item contact Returns the contacts (see L) associated with this prospect. +=cut + +sub contact { + my $self = shift; + my $search = { + table => 'contact', + addl_from => ' JOIN prospect_contact USING (contactnum)', + extra_sql => ' WHERE prospect_contact.prospectnum = '.$self->prospectnum, + }; + + #classnum argument like FS::cust_main->contact? + + qsearch($search); +} + =item cust_location Returns the locations (see L) associated with this prospect. @@ -287,8 +326,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 @@ -299,6 +343,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. @@ -314,10 +388,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) @@ -325,7 +396,7 @@ 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 ) @@ -339,11 +410,11 @@ sub convert_cust_main { $cust_main->set('last', 'Unknown'); } - #v3 payby - $cust_main->payby('BILL'); - $cust_main->paydate('12/2037'); + #v3 payby no longer allowed + #$cust_main->payby('BILL'); + #$cust_main->paydate('12/2037'); - $cust_main->insert( {}, \@invoicing_list, + $cust_main->insert( {}, 'prospectnum' => $self->prospectnum, ) or $cust_main; @@ -370,15 +441,18 @@ sub search { my @where = (); my $orderby; - ## - # parse agent - ## - + #agent if ( $params->{'agentnum'} =~ /^(\d+)$/ and $1 ) { push @where, "prospect_main.agentnum = $1"; } + #refnum + if ( $params->{'refnum'} =~ /^(\d+)$/ and $1 ) { + push @where, + "prospect_main.refnum = $1"; + } + ## # setup queries, subs, etc. for the search ## @@ -405,6 +479,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