' onUnload="myclose()"'
) %>
+<% include('/elements/init_overlib.html') %>
+
<% include('/elements/error.html') %>
<FORM NAME="topform" STYLE="margin-bottom: 0">
<INPUT TYPE="hidden" NAME="custnum" VALUE="<% $custnum %>">
-% if ( $custnum ) {
- Customer #<B><% $custnum %></B> -
+% if ( $custnum ) {
+ Customer #<B><% $cust_main->display_custnum %></B> -
<B><FONT COLOR="#<% $cust_main->statuscolor %>">
<% ucfirst($cust_main->status) %>
</FONT></B>
<BR><BR>
% }
-
<% &ntable("#cccccc") %>
-<!-- agent -->
-
+%# agent
<% include('/elements/tr-select-agent.html',
'curr_value' => $cust_main->agentnum,
'label' => "<B>${r}Agent</B>",
)
%>
-<!-- referral (advertising source) -->
-%
+%# agent_custid
+% if ( $conf->exists('cust_main-edit_agent_custid') ) {
+
+ <TR>
+ <TD ALIGN="right">Customer identifier</TD>
+ <TD><INPUT TYPE="text" NAME="agent_custid" VALUE="<% $cust_main->agent_custid %>"></TD>
+ </TR>
+
+% } else {
+
+ <INPUT TYPE="hidden" NAME="agent_custid" VALUE="<% $cust_main->agent_custid %>">
+
+% }
+
+%# referral (advertising source)
%my $refnum = $cust_main->refnum || $conf->config('referraldefault') || 0;
%if ( $custnum && ! $conf->exists('editreferrals') ) {
-%
-
<INPUT TYPE="hidden" NAME="refnum" VALUE="<% $refnum %>">
-% } else {
+% } else {
<% include('/elements/tr-select-part_referral.html',
'curr_value' => $refnum
% }
-<!-- referring customer -->
-%
+%# referring customer
%my $referring_cust_main = '';
%if ( $cust_main->referral_custnum
% and $referring_cust_main =
% qsearchs('cust_main', { custnum => $cust_main->referral_custnum } )
%) {
-%
-
<TR>
<TD ALIGN="right">Referring customer</TD>
)
%>
+<% include( '/elements/xmlhttp.html',
+ 'url' => $p.'misc/xmlhttp-cust_main-address_standardize.html',
+ 'subs' => [ 'address_standardize' ],
+ #'method' => 'POST', #could get too long?
+ )
+%>
+
<SCRIPT>
function bottomfixup(what) {
+ //i don't think we need to copy things between two forms anymore, modern
+ //browsers are fine with DIVs inside FORMs
+
var topvars = new Array(
'birthdate',
- 'custnum', 'agentnum', 'refnum', 'referral_custnum',
+ 'custnum', 'agentnum', 'agent_custid', 'refnum', 'referral_custnum',
'last', 'first', 'ss', 'company',
'address1', 'address2', 'city',
'ship_county', 'ship_state', 'ship_zip', 'ship_country',
'ship_daytime','ship_night', 'ship_fax',
+ 'geocode',
+
'select' // XXX key
);
'tax',
'invoicing_list', 'invoicing_list_POST', 'invoicing_list_FAX',
'invoice_terms',
- 'spool_cdr'
+ 'spool_cdr',
+ 'squelch_cdr'
);
for ( f=0; f < topvars.length; f++ ) {
);
}
+ //this part does USPS address correction
+
+ // XXX should this be first and should we update the form fields that are
+ // displayed???
+
+ //var state_el = document.bottomform.elements['state'];
+
+ //address_standardize(
+ var cust_main = new Array(
+ 'company', document.bottomform.elements['company'].value,
+ 'address1', document.bottomform.elements['address1'].value,
+ 'address2', document.bottomform.elements['address2'].value,
+ 'city', document.bottomform.elements['city'].value,
+ 'state', document.bottomform.elements['state'].value,
+ //'state', state_el.options[ state_el.selectedIndex ].value,
+ 'zip', document.bottomform.elements['zip'].value,
+
+ 'ship_company', document.bottomform.elements['ship_company'].value,
+ 'ship_address1', document.bottomform.elements['ship_address1'].value,
+ 'ship_address2', document.bottomform.elements['ship_address2'].value,
+ 'ship_city', document.bottomform.elements['ship_city'].value,
+ 'ship_state', document.bottomform.elements['ship_state'].value,
+ //'ship_state', state_el.options[ state_el.selectedIndex ].value,
+ 'ship_zip', document.bottomform.elements['ship_zip'].value
+ );
+
+ address_standardize( cust_main, update_address );
+
+}
+
+var standardize_address;
+
+function update_address(arg) {
+
+ var argsHash = eval('(' + arg + ')');
+
+ var changed = argsHash['address_standardized'];
+ var ship_changed = argsHash['ship_address_standardized'];
+ var error = argsHash['error'];
+ var ship_error = argsHash['ship_error'];
+
+ //yay closures
+ standardize_address = function () {
+
+ if ( changed ) {
+ document.bottomform.elements['company'].value = argsHash['new_company'];
+ document.bottomform.elements['address1'].value = argsHash['new_address1'];
+ document.bottomform.elements['address2'].value = argsHash['new_address2'];
+ document.bottomform.elements['city'].value = argsHash['new_city'];
+ document.bottomform.elements['state'].value = argsHash['new_state'];
+ //'state', state_el.options[ state_el.selectedIndex ].value,
+ document.bottomform.elements['zip'].value = argsHash['new_zip'];
+ }
+
+ if ( ship_changed ) {
+ document.bottomform.elements['ship_company'].value = argsHash['new_ship_company'];
+ document.bottomform.elements['ship_address1'].value = argsHash['new_ship_address1'];
+ document.bottomform.elements['ship_address2'].value = argsHash['new_ship_address2'];
+ document.bottomform.elements['ship_city'].value = argsHash['new_ship_city'];
+ document.bottomform.elements['ship_state'].value = argsHash['new_ship_state'];
+ //'state', state_el.options[ state_el.selectedIndex ].value,
+ document.bottomform.elements['ship_zip'].value = argsHash['new_ship_zip'];
+ }
+
+ }
+
+% if ( $conf->exists('enable_taxproducts') ) {
+
+ if ( <% $taxpre %>error ) {
+
+ if ( document.bottomform.elements['country'].value == 'CA' ||
+ document.bottomform.elements['country'].value == 'US'
+ )
+ {
+
+ var url = "cust_main/choose_tax_location.html?data_vendor=cch-zip;city="+document.bottomform.elements['city'].value+";state="+document.bottomform.elements['state'].value+";zip="+document.bottomform.elements['zip'].value+";country="+document.bottomform.elements['country'].value+";";
+ // popup a chooser
+ OLgetAJAX( url, update_geocode, 300 );
+
+ } else {
+
+ document.bottomform.elements['geocode'].value = 'DEFAULT';
+ document.bottomform.submit();
+
+ }
+
+ } else
+
+% }
+
+ if ( changed || ship_changed ) {
+
+% if ( $conf->exists('cust_main-auto_standardize_address') ) {
+
+ standardize_address();
+ document.bottomform.submit();
+
+% } else {
+
+ // popup a confirmation popup
+
+ var confirm_change =
+ '<CENTER><BR><B>Confirm address standardization</B><BR><BR>' +
+ '<TABLE>';
+
+ if ( changed ) {
+
+ confirm_change = confirm_change +
+ '<TR><TH>Entered billing address</TH>' +
+ '<TH>Standardized billing address</TH></TR>';
+ // + '<TR><TD> </TD><TD> </TD></TR>';
+
+ if ( argsHash['company'] || argsHash['new_company'] ) {
+ confirm_change = confirm_change +
+ '<TR><TD>' + argsHash['company'] +
+ '</TD><TD>' + argsHash['new_company'] + '</TD></TR>';
+ }
+
+ confirm_change = confirm_change +
+ '<TR><TD>' + argsHash['address1'] +
+ '</TD><TD>' + argsHash['new_address1'] + '</TD></TR>' +
+ '<TR><TD>' + argsHash['address2'] +
+ '</TD><TD>' + argsHash['new_address2'] + '</TD></TR>' +
+ '<TR><TD>' + argsHash['city'] + ', ' + argsHash['state'] + ' ' + argsHash['zip'] +
+ '</TD><TD>' + argsHash['new_city'] + ', ' + argsHash['new_state'] + ' ' + argsHash['new_zip'] + '</TD></TR>' +
+ '<TR><TD> </TD><TD> </TD></TR>';
+
+ }
+
+ if ( ship_changed ) {
+
+ confirm_change = confirm_change +
+ '<TR><TH>Entered service address</TH>' +
+ '<TH>Standardized service address</TH></TR>';
+ // + '<TR><TD> </TD><TD> </TD></TR>';
+
+ if ( argsHash['ship_company'] || argsHash['new_ship_company'] ) {
+ confirm_change = confirm_change +
+ '<TR><TD>' + argsHash['ship_company'] +
+ '</TD><TD>' + argsHash['new_ship_company'] + '</TD></TR>';
+ }
+
+ confirm_change = confirm_change +
+ '<TR><TD>' + argsHash['ship_address1'] +
+ '</TD><TD>' + argsHash['new_ship_address1'] + '</TD></TR>' +
+ '<TR><TD>' + argsHash['ship_address2'] +
+ '</TD><TD>' + argsHash['new_ship_address2'] + '</TD></TR>' +
+ '<TR><TD>' + argsHash['ship_city'] + ', ' + argsHash['ship_state'] + ' ' + argsHash['ship_zip'] +
+ '</TD><TD>' + argsHash['new_ship_city'] + ', ' + argsHash['new_ship_state'] + ' ' + argsHash['new_ship_zip'] + '</TD></TR>' +
+ '<TR><TD> </TD><TD> </TD></TR>';
+
+ }
+
+ var addresses = 'address';
+ var height = 268;
+ if ( changed && ship_changed ) {
+ addresses = 'addresses';
+ height = 396; // #what
+ }
+
+ confirm_change = confirm_change +
+ '<TR><TD>' +
+ '<BUTTON TYPE="button" onClick="document.bottomform.submit();"><IMG SRC="<%$p%>images/error.png" ALT=""> Use entered ' + addresses + '</BUTTON>' +
+ '</TD><TD>' +
+ '<BUTTON TYPE="button" onClick="standardize_address(); document.bottomform.submit();"><IMG SRC="<%$p%>images/tick.png" ALT=""> Use standardized ' + addresses + '</BUTTON>' +
+ '</TD></TR>' +
+ '<TR><TD COLSPAN=2 ALIGN="center">' +
+ '<BUTTON TYPE="button" onClick="document.bottomform.submitButton.disabled=false; parent.cClick();"><IMG SRC="<%$p%>images/cross.png" ALT=""> Cancel submission</BUTTON></TD></TR>' +
+
+ '</TABLE></CENTER>';
+
+ overlib( confirm_change, CAPTION, 'Confirm address standardization', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, height, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
+
+% }
+
+ } else {
+
+ document.bottomform.submit();
+
+ }
+
+}
+
+function update_geocode() {
+
+ //yay closures
+ set_geocode = function (what) {
+
+ //alert(what.options[what.selectedIndex].value);
+ var argsHash = eval('(' + what.options[what.selectedIndex].value + ')');
+ document.bottomform.elements['city'].value = argsHash['city'];
+ document.bottomform.elements['state'].value = argsHash['state'];
+ document.bottomform.elements['zip'].value = argsHash['zip'];
+ document.bottomform.elements['geocode'].value = argsHash['geocode'];
+
+ }
+
+ // popup a chooser
+
+ overlib( OLresponseAJAX, CAPTION, 'Select tax location', STICKY, AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', TEXTSIZE, 3 );
+
}
function copyelement(from, to) {
</SCRIPT>
-<FORM ACTION="<% popurl(1) %>process/cust_main.cgi" METHOD=POST NAME="bottomform" onSubmit="document.bottomform.submit.disabled=true; bottomfixup(this.form);" STYLE="margin-top: 0; margin-bottom: 0">
+<FORM ACTION="<% popurl(1) %>process/cust_main.cgi" METHOD=POST NAME="bottomform" STYLE="margin-top: 0; margin-bottom: 0">
% foreach my $hidden (
% 'birthdate',
%
-% 'custnum', 'agentnum', 'refnum', 'referral_custnum',
+% 'custnum', 'agentnum', 'agent_custid', 'refnum', 'referral_custnum',
% 'last', 'first', 'ss', 'company',
% 'address1', 'address2', 'city',
% 'county', 'state', 'zip', 'country',
% 'ship_county', 'ship_state', 'ship_zip', 'ship_country',
% 'ship_daytime','ship_night', 'ship_fax',
%
+% 'geocode',
+%
% 'select', #XXX key
%
% 'payauto',
% 'tax',
% 'invoicing_list', 'invoicing_list_POST', 'invoicing_list_FAX',
% 'invoice_terms',
-% 'spool_cdr'
+% 'spool_cdr',
+% 'squelch_cdr'
% ) {
%
%
% #false laziness, copied from FS::cust_pkg::order
% my $pkgpart;
+% my $agentnum = '';
% my @agents = $FS::CurrentUser::CurrentUser->agents;
% if ( scalar(@agents) == 1 ) {
% # $pkgpart->{PKGPART} is true iff $custnum may purchase PKGPART
% $pkgpart = $agents[0]->pkgpart_hashref;
+% $agentnum = $agents[0]->agentnum;
% } else {
% #can't know (agent not chosen), so, allow all
+% $agentnum = '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
+% $pkgpart->{$_}++ foreach keys %{ $agent->pkgpart_hashref }
% }
% }
% #eslaf
%
-% my @part_pkg = grep { $_->svcpart('svc_acct') && $pkgpart->{ $_->pkgpart } }
+% my @part_pkg = grep { $_->svcpart('svc_acct')
+% && ( $pkgpart->{ $_->pkgpart }
+% || $agentnum eq 'all'
+% || ( $agentnum ne 'all'
+% && $agentnum
+% && $_->agentnum
+% && $_->agentnum == $agentnum
+% )
+% )
+% }
% qsearch( 'part_pkg', { 'disabled' => '' }, '', 'ORDER BY pkg' ); # case?
%
% if ( @part_pkg ) {
<INPUT TYPE="hidden" NAME="otaker" VALUE="<% $cust_main->otaker %>">
<BR>
-<INPUT TYPE="submit" NAME="submit" VALUE="<% $custnum ? "Apply Changes" : "Add Customer" %>">
+<INPUT TYPE="button" NAME="submitButton" ID="submitButton" VALUE="<% $custnum ? "Apply Changes" : "Add Customer" %>" onClick="document.bottomform.submitButton.disabled=true; bottomfixup(this.form);">
<BR>
</FORM>
my $conf = new FS::Conf;
+my $taxpre = $conf->exists('tax-ship_address') ? 'ship_' : '';
#get record
my($custnum, $username, $password, $popnum, $cust_main, $saved_pkgpart, $saved_domsvc);