+ 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.
+
+=cut
+
+sub agent {
+ my $self = shift;
+ qsearchs( 'agent', { 'agentnum' => $self->agentnum } );
+}
+
+=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 convert_cust_main {
+ my $self = shift;
+
+ 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;