summaryrefslogtreecommitdiff
path: root/FS/FS/prospect_main.pm
diff options
context:
space:
mode:
authorIvan Kohler <ivan@freeside.biz>2014-09-16 06:41:00 -0700
committerIvan Kohler <ivan@freeside.biz>2014-09-16 06:41:00 -0700
commitd2acdd4d53071f9e0f9718e14532cb009cda1a85 (patch)
treed37bee5fe01624661dbd500aae4bb46b30283a2c /FS/FS/prospect_main.pm
parenta1c723188509e9e251b233672e68327bb4ad42e7 (diff)
convert prospects to customers via quotations, RT#20688
Diffstat (limited to 'FS/FS/prospect_main.pm')
-rw-r--r--FS/FS/prospect_main.pm53
1 files changed, 51 insertions, 2 deletions
diff --git a/FS/FS/prospect_main.pm b/FS/FS/prospect_main.pm
index 55b12f2..5148143 100644
--- a/FS/FS/prospect_main.pm
+++ b/FS/FS/prospect_main.pm
@@ -6,6 +6,7 @@ use vars qw( $DEBUG @location_fields );
use Scalar::Util qw( blessed );
use FS::Record qw( dbh qsearch ); # qsearchs );
use FS::cust_location;
+use FS::cust_main;
$DEBUG = 0;
@@ -78,7 +79,11 @@ primary key
=item agentnum
-Agent
+Agent (see L<FS::agent>)
+
+=item refnum
+
+Referral (see L<FS::part_referral>)
=item company
@@ -237,7 +242,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_key( 'refnum', 'part_referral', 'refnum' )
|| $self->ut_textn('company')
;
return $error if $error;
@@ -292,6 +298,49 @@ Returns the qualifications (see L<FS::qual>) associated with this prospect.
Returns the agent (see L<FS::agent>) 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 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 ) ),
+ };
+
+ #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');
+ }
+
+ $cust_main->insert( {}, \@invoicing_list,
+ 'prospectnum' => $self->prospectnum,
+ )
+ or $cust_main;
+}
+
=item search HASHREF
(Class method)