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
$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).
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 {
}
}
- 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;
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>
$orderby = "CLASSNUM ASC, $orderby" if $orderby_classnum;
qsearch( 'cust_main_note',
{ 'custnum' => $self->custnum },
- '',
- "ORDER BY $orderby",
- );
+ '',
+ "ORDER BY $orderby",
+ );
}
=item agent
" 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"
use FS::agent;
use FS::cust_location;
use FS::contact;
+use FS::qual;
$DEBUG = 0;
my $contact = ($self->contact)[0]; #first contact? good enough for now
return $contact->line if $contact;
- $self->prospectnum;
+ 'Prospect #'. $self->prospectnum;
}
=item contact
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)
% }
+<INPUT TYPE="hidden" NAME="locationnum" VALUE="<% $locationnum %>">
+
<INPUT TYPE="hidden" NAME="usernum" VALUE="<% $cust_main->usernum %>">
%# cust_main/bottomfixup.js
my %svc_phone = ();
my %svc_dsl = ();
my $prospectnum = '';
+my $locationnum = '';
if ( $cgi->param('error') ) {
$stateid = $cust_main->stateid; # don't mask an entered value on errors
$payinfo = $cust_main->payinfo; # don't mask an entered value on errors
+ $prospectnum = $cgi->param('prospectnum') || '';
+
$pkgpart_svcpart = $cgi->param('pkgpart_svcpart') || '';
+ $locationnum = $cgi->param('locationnum') || '';
+
#svc_acct
$username = $cgi->param('username');
$password = $cgi->param('_password');
my $contact = $contacts[0];
$cust_main->first( $contact->first );
$cust_main->set( 'last', $contact->get('last') );
- #XXX contact phone numbers
-
- #XXX additional/all contacts -> alas (notes for now? add add'l contact support?)
-
- #XXX move all contacts and locations
+ #contact phone numbers?
#location -> address (all prospect quals have location, right?)
my $cust_location = $qual->cust_location;
$cust_main->$_( $cust_location->$_ )
foreach qw( address1 address2 city county state zip country geocode );
- #pkgpart handled by lock_pkgpart below
+ #locationnum -> package order
+ $locationnum = $qual->locationnum;
- #XXX locationnum -> package order
+ #pkgpart handled by lock_pkgpart below
#service telephone & vendor_qual_id -> svc_dsl
$svc_dsl{$_} = $qual->$_
$cust_pkg = new FS::cust_pkg ( {
#later 'custnum' => $custnum,
- 'pkgpart' => $pkgpart,
+ 'pkgpart' => $pkgpart,
+ 'locationnum' => scalar($cgi->param('locationnum')),
} );
#$error ||= $cust_pkg->check;
tie my %hash, 'Tie::RefHash';
%hash = ( $cust_pkg => [ $svc ] ) if $cust_pkg;
$error ||= $new->insert( \%hash, \@invoicing_list,
- 'tax_exemption' => \@tax_exempt,
+ 'tax_exemption'=> \@tax_exempt,
+ 'prospectnum' => scalar($cgi->param('prospectnum')),
);
my $conf = new FS::Conf;
<BR>
% }
% }
-
+<% include('contacts_new.html', $cust_main) %>
<%once>
my $daytime_label = FS::Msgcat::_gettext('daytime') =~ /^(daytime)?$/
--- /dev/null
+% if ( @contacts ) {
+<BR>
+Contacts
+<% ntable("#cccccc",2) %>
+% foreach my $contact ( @contacts ) {
+ <TR>
+ <TD ALIGN="right">Contact</TD>
+ <TD BGCOLOR="#FFFFFF"><% $contact->line %></TD>
+ </TR>
+% }
+</TABLE>
+
+% }
+
+<%init>
+
+my( $cust_main ) = @_;
+#my $conf = new FS::Conf;
+
+my @contacts = $cust_main->cust_contact;
+
+</%init>