X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fedit%2Fcust_main.cgi;h=9e1b4b0706e8e9acbb6226474cf84e9019e45dfa;hb=e310ed83422fee8511df926141a7606676ff1331;hp=a8f202fbb937504b13b46b02daccd4d95f037442;hpb=f1da1afefb2501e1514d267612fafa87f0ac8108;p=freeside.git
diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi
index a8f202fbb..9e1b4b070 100755
--- a/httemplate/edit/cust_main.cgi
+++ b/httemplate/edit/cust_main.cgi
@@ -1,421 +1,386 @@
-<%
+<& /elements/header.html,
+ $title,
+ '',
+ ' onUnload="myclose()"' #hmm, in billing.html
+&>
+
+<& /elements/error.html &>
+
+
-my %agent_search = dbdef->table('agent')->column('disabled')
- ? ( 'disabled' => '' ) : ();
-my @agents = qsearch( 'agent', \%agent_search );
-#die "No agents created!" unless @agents;
-eidiot "You have not created any agents (or all agents are disabled). You must create at least one agent before adding a customer. Go to ". popurl(2). "browse/agent.cgi and create one or more agents." unless @agents;
-my $agentnum = $cust_main->agentnum || $agents[0]->agentnum; #default to first
-
-%>
-
-<% if ( scalar(@agents) == 1 ) { %>
-
-<% } else { %>
- <%=$r%>Agent
- <% foreach my $agent (sort { $a->agent cmp $b->agent; } @agents) { %>
- agentnum==$agentnum) %>><%= $agent->agent %>
- <% } %>
-
-<% } %>
-
-<%
-
-# (referral and referring customer still need to be "template"ized)
-
-#referral
-
-my $refnum = $cust_main->refnum || $conf->config('referraldefault') || 0;
-if ( $custnum && ! $conf->exists('editreferrals') ) {
- print qq! !;
-} else {
- my(@referrals) = qsearch('part_referral',{});
- if ( scalar(@referrals) == 0 ) {
- eidiot "You have not created any advertising sources. You must create at least one advertising source before adding a customer. Go to ". popurl(2). "browse/part_referral.cgi and create one or more advertising sources.";
- } elsif ( scalar(@referrals) == 1 ) {
- $refnum ||= $referrals[0]->refnum;
- print qq! !;
- } else {
- print qq! ${r}Advertising source !;
- print " " unless $refnum;
- my($referral);
- foreach $referral (sort {
- $a->refnum <=> $b->refnum;
- } @referrals) {
- print " refnum==$refnum),
- ">", $referral->refnum, ": ", $referral->referral;
- }
- print " ";
- }
-}
+<& /elements/footer.html &>
-#referring customer
-
-#print qq! Referring Customer: !;
-my $referring_cust_main = '';
-if ( $cust_main->referral_custnum
- and $referring_cust_main =
- qsearchs('cust_main', { custnum => $cust_main->referral_custnum } )
-) {
- print ' Referring Customer: '.
- $cust_main->referral_custnum. ': '.
- ( $referring_cust_main->company
- || $referring_cust_main->last. ', '. $referring_cust_main->first ).
- ' ';
-} elsif ( ! $conf->exists('disable_customer_referrals') ) {
- print ' Referring customer number: ';
-} else {
- print ' ';
-}
+<%init>
-%>
+my $curuser = $FS::CurrentUser::CurrentUser;
-
+#probably redundant given the checks below...
+die "access denied"
+ unless $curuser->access_right('New customer')
+ || $curuser->access_right('Edit customer');
-
-Billing address
-<%= include('cust_main/contact.html', $cust_main, '', 'bill_changed(this)', '' ) %>
+my $conf = new FS::Conf;
-
+#get record
-<% if ( defined $cust_main->dbdef_table->column('ship_last') ) { %>
+my($custnum, $cust_main, $ss, $stateid, $payinfo, @invoicing_list);
+my $same = '';
+my $pkgpart_svcpart = ''; #first_pkg
+my($username, $password, $popnum, $saved_domsvc) = ( '', '', 0, 0 ); #svc_acct
+my %svc_phone = ();
+my %svc_dsl = ();
+my $prospectnum = '';
+my $locationnum = '';
-
+$m->comp('/elements/handle_uri_query', 'secure'=>1);
-<%
- my $checked = '';
- my $disabled = '';
- my $disabledselect = '';
- unless ( $cust_main->ship_last && $same ne 'Y' ) {
- $checked = 'CHECKED';
- $disabled = 'DISABLED style="background-color: #dddddd"';
- foreach (
- qw( last first company address1 address2 city county state zip country
- daytime night fax )
- ) {
- $cust_main->set("ship_$_", $cust_main->get($_) );
- }
- }
-%>
+if ( $cgi->param('error') ) {
-
-Service address
-( >same as billing address)
-<%= include('cust_main/contact.html', $cust_main, 'ship_', '', $disabled ) %>
+ $cust_main = new FS::cust_main ( {
+ map { $_, scalar($cgi->param($_)) } fields('cust_main')
+ } );
-<% } %>
+ $custnum = $cust_main->custnum;
-
+ die "access denied"
+ unless $curuser->access_right($custnum ? 'Edit customer' : 'New customer');
-<%= include('cust_main/billing.html', $cust_main ) %>
+ @invoicing_list = split( /\s*,\s*/, $cgi->param('invoicing_list') );
+ $same = $cgi->param('same');
+ $cust_main->setfield('paid' => $cgi->param('paid')) if $cgi->param('paid');
+ $ss = $cust_main->ss; # don't mask an entered value on errors
+ $stateid = $cust_main->stateid; # don't mask an entered value on errors
+ $payinfo = $cust_main->payinfo; # don't mask an entered value on errors
-
+ #svc_phone
+ $svc_phone{$_} = $cgi->param($_)
+ foreach qw( countrycode phonenum sip_password pin phone_name );
-
-
-<% foreach my $hidden (
- 'custnum', 'agentnum', 'refnum', 'referral_custnum',
- 'last', 'first', 'ss', 'company',
- 'address1', 'address2', 'city',
- 'county', 'state', 'zip', 'country',
- 'daytime', 'night', 'fax',
-
- 'same',
-
- 'ship_last', 'ship_first', 'ship_company',
- 'ship_address1', 'ship_address2', 'ship_city',
- 'ship_county', 'ship_state', 'ship_zip', 'ship_country',
- 'ship_daytime','ship_night', 'ship_fax',
-
- 'select', #XXX key
-
- 'payauto',
- 'payinfo', 'payinfo1', 'payinfo2',
- 'payname', 'exp_month', 'exp_year', 'paycvv',
- 'paystart_month', 'paystart_year', 'payissue',
- 'payip',
-
- 'tax',
- 'invoicing_list', 'invoicing_list_POST', 'invoicing_list_FAX'
- ) {
-%>
-
-<% } %>
-
- Comments
-<%= &ntable("#cccccc") %>
-
-
- <%= $cust_main->comments %>
-
-
-
-
-<%
-
-unless ( $custnum ) {
- # pry the wrong place for this logic. also pretty expensive
- #use FS::part_pkg;
-
- #false laziness, copied from FS::cust_pkg::order
- my $pkgpart;
- if ( scalar(@agents) == 1 ) {
- # $pkgpart->{PKGPART} is true iff $custnum may purchase PKGPART
- my($agent)=qsearchs('agent',{'agentnum'=> $agentnum });
- $pkgpart = $agent->pkgpart_hashref;
- } else {
- #can't know (agent not chosen), so, allow all
- my %typenum;
- foreach my $agent ( @agents ) {
- next if $typenum{$agent->typenum}++;
- #fixed in 5.004_05 #$pkgpart->{$_}++ foreach keys %{ $agent->pkgpart_hashref }
- foreach ( keys %{ $agent->pkgpart_hashref } ) { $pkgpart->{$_}++; } #5.004_04 workaround
- }
- }
- #eslaf
+ #svc_dsl (phonenum came in with svc_phone)
+ $svc_phone{$_} = $cgi->param($_)
+ foreach qw( password isp_chg isp_prev vendor_qual_id );
+
+} elsif ( $cgi->keywords ) { #editing
- my @part_pkg = grep { $_->svcpart('svc_acct') && $pkgpart->{ $_->pkgpart } }
- qsearch( 'part_pkg', { 'disabled' => '' } );
+ die "access denied"
+ unless $curuser->access_right('Edit customer');
+
+ my( $query ) = $cgi->keywords;
+ $query =~ /^(\d+)$/;
+ $custnum=$1;
+ $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } )
+ or die "custnum $custnum not found";
+ if ( $cust_main->dbdef_table->column('paycvv')
+ && length($cust_main->paycvv) ) {
+ my $paycvv = $cust_main->paycvv;
+ $paycvv =~ s/./*/g;
+ $cust_main->paycvv($paycvv);
+ }
+ @invoicing_list = $cust_main->invoicing_list;
+ $ss = $conf->exists('unmask_ss') ? $cust_main->ss : $cust_main->masked('ss');
+ $stateid = $cust_main->masked('stateid');
+ $payinfo = $cust_main->paymask;
- if ( @part_pkg ) {
+} else { #new customer
-# print " First package", &itable("#cccccc", "0 ALIGN=LEFT"),
-#apiabuse & undesirable wrapping
- print " First package", &ntable("#cccccc"),
- qq!!;
+ die "access denied"
+ unless $curuser->access_right('New customer');
- print qq!(none)!;
+ $custnum='';
+ $cust_main = new FS::cust_main ( {} );
+ $cust_main->agentnum( $conf->config('default_agentnum') )
+ if $conf->exists('default_agentnum');
+ $cust_main->otaker( &getotaker );
+ $cust_main->referral_custnum( $cgi->param('referral_custnum') );
+ @invoicing_list = ();
+ push @invoicing_list, 'POST'
+ unless $conf->exists('disablepostalinvoicedefault');
+ $ss = '';
+ $stateid = '';
+ $payinfo = '';
+
+ $cgi->param('tagnum', FS::part_tag->default_tags);
+
+ if ( $cgi->param('qualnum') =~ /^(\d+)$/ ) {
+ my $qualnum = $1;
+ my $qual = qsearchs('qual', { 'qualnum' => $qualnum } )
+ or die "unknown qualnum $qualnum";
+
+ my $prospect_main = $qual->cust_or_prospect;
+ $prospectnum = $prospect_main->prospectnum
+ or die "qualification not on a prospect";
+
+ $cust_main->agentnum( $prospect_main->agentnum );
+ $cust_main->company( $prospect_main->company );
+
+ #first contact? -> name
+ my @contacts = $prospect_main->contact;
+ my $contact = $contacts[0];
+ $cust_main->first( $contact->first );
+ $cust_main->set( 'last', $contact->get('last') );
+ #contact phone numbers?
+
+ #location -> address (all prospect quals have location, right?)
+ my $cust_location = $qual->cust_location;
+ $cust_location->dealternize;
+ $cust_main->$_( $cust_location->$_ )
+ foreach qw( address1 address2 city county state zip country latitude longitude coord_auto geocode );
+
+ #locationnum -> package order
+ $locationnum = $qual->locationnum;
+
+ #pkgpart handled by lock_pkgpart below
+
+ #service telephone & vendor_qual_id -> svc_dsl
+ $svc_dsl{$_} = $qual->$_
+ foreach qw( phonenum vendor_qual_id );
+ }
- foreach my $part_pkg ( @part_pkg ) {
- print qq! pkgpart }, '"';
- $part_pkg->pkgpart. "_". $part_pkg->svcpart('svc_acct'), '"';
- print " SELECTED" if $saved_pkgpart && ( $part_pkg->pkgpart == $saved_pkgpart );
- print ">", $part_pkg->pkg, " - ", $part_pkg->comment;
- }
- print " ";
-
- #false laziness: (mostly) copied from edit/svc_acct.cgi
- #$ulen = $svc_acct->dbdef_table->column('username')->length;
- my $ulen = dbdef->table('svc_acct')->column('username')->length;
- my $ulen2 = $ulen+2;
- my $passwordmax = $conf->config('passwordmax') || 8;
- my $pmax2 = $passwordmax + 2;
- print <Username
-
-Password
-
-(blank to generate)
-END
-
- print 'Access number '
- .
- &FS::svc_acct_pop::popselector($popnum).
- ' '
- ;
+ if ( $cgi->param('lock_pkgpart') =~ /^(\d+)$/ ) {
+ my $pkgpart = $1;
+ my $part_pkg = qsearchs('part_pkg', { 'pkgpart' => $pkgpart } )
+ or die "unknown pkgpart $pkgpart";
+ my $svcpart = $part_pkg->svcpart;
+ $pkgpart_svcpart = $pkgpart.'_'.$svcpart;
}
+
}
-my $otaker = $cust_main->otaker;
-print qq! !,
- qq! !,
- "