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;
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;
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;
}
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
Returns the agent (see L<FS::agent>) 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.
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)
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 );
$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;
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
##
}
+# 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