X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Fedit%2Fcust_main.cgi;h=e9d131a782a9aec48ba2579302b27decac456017;hb=8dc1a901bc08cd1d24f5d2e7643273b28d850796;hp=efe04fa7fe95182716f7671967427988ff7ffb79;hpb=aa1cf7baab0b0d06af3eacd29c06d982e401da89;p=freeside.git diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index efe04fa7f..e9d131a78 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -1,22 +1,21 @@ -<% include('/elements/header.html', - "Customer $action", +<& /elements/header.html, + $title, '', ' onUnload="myclose()"' #hmm, in billing.html -) %> +&> -<% include('/elements/error.html') %> +<& /elements/error.html &> <FORM NAME = "CustomerForm" METHOD = "POST" ACTION = "<% popurl(1) %>process/cust_main.cgi" -%# STYLE = "margin-bottom: 0" -%# STYLE="margin-top: 0; margin-bottom: 0"> > -<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>"> +<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>"> +<INPUT TYPE="hidden" NAME="prospectnum" VALUE="<% $prospectnum %>"> % if ( $custnum ) { - Customer #<B><% $cust_main->display_custnum %></B> - + <% mt('Customer #') |h %><B><% $cust_main->display_custnum %></B> - <B><FONT COLOR="#<% $cust_main->statuscolor %>"> <% ucfirst($cust_main->status) %> </FONT></B> @@ -24,143 +23,117 @@ % } %# agent, agent_custid, refnum (advertising source), referral_custnum -<% include('cust_main/top_misc.html', $cust_main, 'custnum' => $custnum ) %> +%# better section title for this? +<FONT CLASS="fsinnerbox-title"><% mt('Basics') |h %></FONT> +<& cust_main/top_misc.html, $cust_main, 'custnum' => $custnum &> %# birthdate -% if ( $conf->exists('cust_main-enable_birthdate') ) { +% if ( $conf->config('national_id-country') +% || $conf->exists('cust_main-enable_birthdate') +% || $conf->exists('cust_main-enable_anniversary_date') +% ) +% { <BR> - <% include('cust_main/birthdate.html', $cust_main) %> + <& cust_main/birthdate.html, $cust_main &> % } - -%# latitude and longitude -% if ( $conf->exists('cust_main-require_censustract') ) { -% my ($latitude, $longitude) = $cust_main->service_coordinates; -% $latitude ||= $conf->config('company_latitude') || ''; -% $longitude ||= $conf->config('company_longitude') || ''; - <INPUT NAME="latitude" TYPE="hidden" VALUE="<% $latitude |h %>"> - <INPUT NAME="longitude" TYPE="hidden" VALUE="<% $longitude |h %>"> +% my $has_ship_address = ''; +% if ( $cgi->param('error') ) { +% $has_ship_address = !$same; +% } elsif ( $cust_main->custnum ) { +% $has_ship_address = $cust_main->has_ship_address; % } - -%# contact info - -% my $same_checked = ''; -% my $ship_disabled = ''; -% my @ship_style = (); -% unless ( $cust_main->ship_last && $same ne 'Y' ) { -% $same_checked = 'CHECKED'; -% $ship_disabled = 'DISABLED'; -% push @ship_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($_) ); -% } -% } - <BR> -<FONT SIZE="+1"><B>Billing address</B></FONT> - -<% include('cust_main/contact.html', - 'cust_main' => $cust_main, - 'pre' => '', - 'onchange' => 'bill_changed(this)', - 'disabled' => '', - 'ss' => $ss, - 'stateid' => $stateid, - 'same_checked' => $same_checked, #for address2 "Unit #" labeling - ) -%> +<TABLE> <TR> + <TD STYLE="width:650px"> +%#; padding-right:2px; vertical-align:top"> + <FONT CLASS="fsinnerbox-title"><% mt('Billing address') |h %></FONT> + <TABLE CLASS="fsinnerbox" WIDTH="100%"> + <& cust_main/before_bill_location.html, $cust_main &> + <& /elements/location.html, + object => $cust_main->bill_location, + prefix => 'bill_', + enable_censustract => 1, + enable_district => 1, + enable_coords => 1, + &> + <& cust_main/after_bill_location.html, $cust_main &> + </TABLE> + </TD> +</TR> +<TR><TD STYLE="height:40px"></TD></TR> +<TR> + <TD STYLE="width:650px"> + <FONT CLASS="fsinnerbox-title"><% mt('Service address') |h %></FONT> + <INPUT TYPE="checkbox" + NAME="same" + ID="same" + onclick="samechanged(this)" + onkeyup="samechanged(this)" + VALUE="Y" + <% $has_ship_address ? '' : 'CHECKED' %> + ><% mt('same as billing address') |h %> + <DIV CLASS="fsinnerbox"> + <TABLE ID="table_ship_location" WIDTH="100%"> + <& cust_main/before_ship_location.html, $cust_main &> + <& /elements/location.html, + object => $cust_main->ship_location, + prefix => 'ship_', + enable_censustract => 1, + enable_district => 1, + enable_coords => 1, + &> +% unless ($conf->exists('invoice-ship_address')) { #it's always on, so hide per-cust config + <TR> + <TD COLSPAN="8"> + <% include('/elements/checkbox.html', + 'field' => 'invoice_ship_address', + 'value' => 'Y', + 'curr_value' => $cust_main->invoice_ship_address, + 'postfix' => emt('Include service address on invoices'), + ) %> + </TD> + </TR> +% } + </TABLE> + </DIV> + </TD> +</TR></TABLE> <SCRIPT> -function bill_changed(what) { - if ( what.form.same.checked ) { -% for (qw( last first company address1 address2 city zip daytime night fax )) { - what.form.ship_<%$_%>.value = what.form.<%$_%>.value; -% } - - what.form.ship_country.selectedIndex = what.form.country.selectedIndex; - - function fix_ship_city() { - what.form.ship_city_select.selectedIndex = what.form.city_select.selectedIndex; - what.form.ship_city.style.display = what.form.city.style.display; - what.form.ship_city_select.style.display = what.form.city_select.style.display; - } - - function fix_ship_county() { - what.form.ship_county.selectedIndex = what.form.county.selectedIndex; - ship_county_changed(what.form.ship_county, fix_ship_city ); - } - - function fix_ship_state() { - what.form.ship_state.selectedIndex = what.form.state.selectedIndex; - ship_state_changed(what.form.ship_state, fix_ship_county ); - } - - ship_country_changed(what.form.ship_country, fix_ship_state ); - - } -} function samechanged(what) { +%# not display = 'none', because we still want it to take up space +%# document.getElementById('table_ship_location').style.visibility = +%# what.checked ? 'hidden' : 'visible'; + var t1 = document.getElementById('table_ship_location'); if ( what.checked ) { - bill_changed(what); - -% my @fields = qw( last first company address1 address2 city city_select county state zip country daytime night fax ); -% for (@fields) { - what.form.ship_<%$_%>.disabled = true; - what.form.ship_<%$_%>.style.backgroundColor = '#dddddd'; -% } - -% if ( $conf->exists('cust_main-require_address2') ) { - document.getElementById('address2_required').style.visibility = ''; - document.getElementById('address2_label').style.visibility = ''; - document.getElementById('ship_address2_required').style.visibility = 'hidden'; - document.getElementById('ship_address2_label').style.visibility = 'hidden'; -% } - - } else { - -% for (@fields) { - what.form.ship_<%$_%>.disabled = false; - what.form.ship_<%$_%>.style.backgroundColor = '#ffffff'; -% } - -% if ( $conf->exists('cust_main-require_address2') ) { - document.getElementById('address2_required').style.visibility = 'hidden'; - document.getElementById('address2_label').style.visibility = 'hidden'; - document.getElementById('ship_address2_required').style.visibility = ''; - document.getElementById('ship_address2_label').style.visibility = ''; -% } - + t1.style.visibility = 'hidden'; + } + else { + t1.style.visibility = 'visible' } } +samechanged(document.getElementById('same')); </SCRIPT> <BR> -<FONT SIZE="+1"><B>Service address</B></FONT> -(<INPUT TYPE="checkbox" NAME="same" VALUE="Y" onClick="samechanged(this)" <%$same_checked%>>same as billing address) -<% include('cust_main/contact.html', +<& cust_main/contacts_new.html, 'cust_main' => $cust_main, - 'pre' => 'ship_', - 'onchange' => '', - 'disabled' => $ship_disabled, - 'style' => \@ship_style - ) -%> +&> %# billing info -<% include( 'cust_main/billing.html', $cust_main, +<& cust_main/billing.html, $cust_main, 'payinfo' => $payinfo, 'invoicing_list' => \@invoicing_list, - ) -%> +&> +<BR> % my $ro_comments = $conf->exists('cust_main-use_comments')?'':'readonly'; % if (!$ro_comments || $cust_main->comments) { - <BR>Comments - <% &ntable("#cccccc") %> + <BR> + <FONT CLASS="fsinnerbox-title"><% mt('Comments') |h %></FONT> + <TABLE CLASS="fsinnerbox"> <TR> <TD> <TEXTAREA NAME = "comments" @@ -177,25 +150,28 @@ function samechanged(what) { % unless ( $custnum ) { - <% include('cust_main/first_pkg.html', $cust_main, + <& cust_main/first_pkg.html, $cust_main, 'pkgpart_svcpart' => $pkgpart_svcpart, - #svc_acct + 'disable_empty' => + scalar( $cgi->param('lock_pkgpart') =~ /^(\d+)$/ ), 'username' => $username, 'password' => $password, 'popnum' => $popnum, 'saved_domsvc' => $saved_domsvc, %svc_phone, - ) - %> + %svc_dsl, + &> % } +<INPUT TYPE="hidden" NAME="locationnum" VALUE="<% $locationnum %>"> + <INPUT TYPE="hidden" NAME="usernum" VALUE="<% $cust_main->usernum %>"> %# cust_main/bottomfixup.js % foreach my $hidden ( -% 'payauto', -% 'payinfo', 'payinfo1', 'payinfo2', 'paytype', +% 'payauto', 'billday', +% 'payinfo', 'payinfo1', 'payinfo2', 'payinfo3', 'paytype', % 'payname', 'paystate', 'exp_month', 'exp_year', 'paycvv', % 'paystart_month', 'paystart_year', 'payissue', % 'payip', @@ -204,18 +180,19 @@ function samechanged(what) { <INPUT TYPE="hidden" NAME="<% $hidden %>" VALUE=""> % } -<% include('cust_main/bottomfixup.html') %> +<& cust_main/bottomfixup.html, 'custnum' => $custnum &> <BR> <INPUT TYPE = "button" NAME = "submitButton" ID = "submitButton" - VALUE = "<% $custnum ? "Apply Changes" : "Add Customer" %>" + VALUE = "<% $custnum ? emt("Apply changes") : emt("Add Customer") %>" onClick = "this.disabled=true; bottomfixup(this.form);" > +<BR><BR> </FORM> -<% include('/elements/footer.html') %> +<& /elements/footer.html &> <%init> @@ -231,31 +208,63 @@ my $conf = new FS::Conf; #get record 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 = ''; +my $same = ''; + +$m->comp('/elements/handle_uri_query', 'secure'=>1); if ( $cgi->param('error') ) { + $same = ($cgi->param('same') || '') eq 'Y'; + # false laziness w/ edit/process/cust_main.cgi + my %locations; + for my $pre (qw(bill ship)) { + my %hash; + foreach ( FS::cust_main->location_fields ) { + $hash{$_} = scalar($cgi->param($pre.'_'.$_)); + } + $hash{'custnum'} = $cgi->param('custnum'); + $locations{$pre} = qsearchs('cust_location', \%hash) + || FS::cust_location->new( \%hash ); + } + if ( $same ) { + $locations{ship} = $locations{bill}; + } + $cust_main = new FS::cust_main ( { - map { $_, scalar($cgi->param($_)) } fields('cust_main') + map { ( $_, scalar($cgi->param($_)) ) } (fields('cust_main')), + map { ( "ship_$_", '' ) } (FS::cust_main->location_fields) } ); + for my $pre (qw(bill ship)) { + $cust_main->set($pre.'_location', $locations{$pre}); + $cust_main->set($pre.'_locationnum', $locations{$pre}->locationnum); + } + $custnum = $cust_main->custnum; die "access denied" unless $curuser->access_right($custnum ? 'Edit customer' : 'New customer'); @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 + $cust_main->national_id( $cgi->param('national_id1') || $cgi->param('national_id2') ); + + $prospectnum = $cgi->param('prospectnum') || ''; + $pkgpart_svcpart = $cgi->param('pkgpart_svcpart') || ''; + $locationnum = $cgi->param('locationnum') || ''; + #svc_acct $username = $cgi->param('username'); $password = $cgi->param('_password'); @@ -271,6 +280,10 @@ if ( $cgi->param('error') ) { $svc_phone{$_} = $cgi->param($_) foreach qw( countrycode phonenum sip_password pin phone_name ); + #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 die "access denied" @@ -279,7 +292,8 @@ if ( $cgi->param('error') ) { my( $query ) = $cgi->keywords; $query =~ /^(\d+)$/; $custnum=$1; - $cust_main = qsearchs('cust_main', { 'custnum' => $custnum } ); + $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; @@ -287,7 +301,7 @@ if ( $cgi->param('error') ) { $cust_main->paycvv($paycvv); } @invoicing_list = $cust_main->invoicing_list; - $ss = $cust_main->masked('ss'); + $ss = $conf->exists('unmask_ss') ? $cust_main->ss : $cust_main->masked('ss'); $stateid = $cust_main->masked('stateid'); $payinfo = $cust_main->paymask; @@ -298,6 +312,8 @@ if ( $cgi->param('error') ) { $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 = (); @@ -307,14 +323,77 @@ if ( $cgi->param('error') ) { $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 ); + } + else { + my $countrydefault = $conf->config('countrydefault') || 'US'; + my $statedefault = $conf->config('statedefault') || 'CA'; + $cust_main->set('bill_location', + FS::cust_location->new( { + country => $countrydefault, + state => $statedefault, + coord_auto => 'Y', + } ) + ); + $cust_main->set('ship_location', + FS::cust_location->new( { + country => $countrydefault, + state => $statedefault, + coord_auto => 'Y', + } ) + ); + } + + 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 $error = $cgi->param('error'); -$cgi->delete_all(); -$cgi->param('error', $error); +my %keep = map { $_=>1 } qw( error tagnum lock_agentnum lock_pkgpart ); +$cgi->delete( grep { !$keep{$_} && $_ !~ /^tax_/ } $cgi->param ); -my $action = $custnum ? 'Edit' : 'Add'; -$action .= ": ". $cust_main->name if $custnum; +my $title = $custnum ? 'Edit Customer' : 'Add Customer'; +$title = mt($title); +$title .= ": ". $cust_main->name if $custnum; my $r = qq!<font color="#ff0000">*</font> !;