diff options
author | ivan <ivan> | 2011-03-27 22:46:38 +0000 |
---|---|---|
committer | ivan <ivan> | 2011-03-27 22:46:38 +0000 |
commit | 8e5fab2148c7dc492b9fffe271c3dcf8df55b01f (patch) | |
tree | c1d46b33a790b21b84c2a2617dc3554e341b6e36 /FS | |
parent | 130940a4115c3b96e4d7b2206bea2ecf8d882d6e (diff) |
better prospect -> customer conversion, RT#7111
Diffstat (limited to 'FS')
-rw-r--r-- | FS/FS/cust_main.pm | 61 | ||||
-rw-r--r-- | FS/FS/prospect_main.pm | 15 |
2 files changed, 65 insertions, 11 deletions
diff --git a/FS/FS/cust_main.pm b/FS/FS/cust_main.pm index b333aa253..973b5b837 100644 --- a/FS/FS/cust_main.pm +++ b/FS/FS/cust_main.pm @@ -67,6 +67,7 @@ use FS::agent_payment_gateway; use FS::banned_pay; use FS::cust_main_note; use FS::cust_attachment; +use FS::contact; # 1 is mostly method/subroutine entry and options # 2 traces progress of some operations @@ -368,7 +369,8 @@ invoicing_list destination to the newly-created svc_acct. Here's an example: $cust_main->insert( {}, [ $email, 'POST' ] ); -Currently available options are: I<depend_jobnum>, I<noexport> and I<tax_exemption>. +Currently available options are: I<depend_jobnum>, I<noexport>, +I<tax_exemption> and I<prospectnum>. If I<depend_jobnum> is set, all provisioning jobs will have a dependancy on the supplied jobnum (they will not run until the specific job completes). @@ -382,6 +384,8 @@ the B<reexport> method.) The I<tax_exemption> option can be set to an arrayref of tax names. FS::cust_main_exemption records will be created and inserted. +If I<prospectnum> is set, moves contacts and locations from that prospect. + =cut sub insert { @@ -480,16 +484,41 @@ sub insert { } } - if ( $invoicing_list ) { - $error = $self->check_invoicing_list( $invoicing_list ); + my $prospectnum = delete $options{'prospectnum'}; + if ( $prospectnum ) { + + warn " moving contacts and locations from prospect $prospectnum\n" + if $DEBUG > 1; + + my $prospect_main = + qsearchs('prospect_main', { 'prospectnum' => $prospectnum } ); + unless ( $prospect_main ) { + $dbh->rollback if $oldAutoCommit; + return "Unknown prospectnum $prospectnum"; + } + $prospect_main->custnum($self->custnum); + $prospect_main->disabled('Y'); + my $error = $prospect_main->replace; if ( $error ) { $dbh->rollback if $oldAutoCommit; - #return "checking invoicing_list (transaction rolled back): $error"; return $error; } - $self->invoicing_list( $invoicing_list ); - } + my @contact = $prospect_main->contact; + my @cust_location = $prospect_main->cust_location; + my @qual = $prospect_main->qual; + + foreach my $r ( @contact, @cust_location, @qual ) { + $r->prospectnum(''); + $r->custnum($self->custnum); + my $error = $r->replace; + if ( $error ) { + $dbh->rollback if $oldAutoCommit; + return $error; + } + } + + } warn " setting cust_main_exemption\n" if $DEBUG > 1; @@ -2033,6 +2062,18 @@ sub cust_location { qsearch('cust_location', { 'custnum' => $self->custnum } ); } +=item cust_contact + +Returns all contacts (see L<FS::contact>) for this customer. + +=cut + +#already used :/ sub contact { +sub cust_contact { + my $self = shift; + qsearch('contact', { 'custnum' => $self->custnum } ); +} + =item unsuspend Unsuspends all unflagged suspended packages (see L</unflagged_suspended_pkgs> @@ -2216,9 +2257,9 @@ sub notes { $orderby = "CLASSNUM ASC, $orderby" if $orderby_classnum; qsearch( 'cust_main_note', { 'custnum' => $self->custnum }, - '', - "ORDER BY $orderby", - ); + '', + "ORDER BY $orderby", + ); } =item agent @@ -4696,7 +4737,7 @@ sub _agent_plandata { " ORDER BY CASE WHEN part_event_condition_option.optionname IS NULL THEN -1 - ELSE ". FS::part_event::Condition->age2seconds_sql('part_event_condition_option.optionvalue'). + ELSE ". FS::part_event::Condition->age2seconds_sql('part_event_condition_option.optionvalue'). " END , part_event.weight". " LIMIT 1" diff --git a/FS/FS/prospect_main.pm b/FS/FS/prospect_main.pm index 079ad2561..5a4048f51 100644 --- a/FS/FS/prospect_main.pm +++ b/FS/FS/prospect_main.pm @@ -8,6 +8,7 @@ use FS::Record qw( dbh qsearch ); #qsearchs ); use FS::agent; use FS::cust_location; use FS::contact; +use FS::qual; $DEBUG = 0; @@ -221,7 +222,7 @@ sub name { my $contact = ($self->contact)[0]; #first contact? good enough for now return $contact->line if $contact; - $self->prospectnum; + 'Prospect #'. $self->prospectnum; } =item contact @@ -246,6 +247,18 @@ sub cust_location { qsearch( 'cust_location', { 'prospectnum' => $self->prospectnum } ); } +=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 search HASHREF (Class method) |