From: Mark Wells Date: Wed, 18 Apr 2012 22:51:33 +0000 (-0700) Subject: user confirmation for FFIEC censustract lookups X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=commitdiff_plain;h=7ac86daf67b0a95153b736d5811f9050363f6553 user confirmation for FFIEC censustract lookups --- diff --git a/FS/FS/Misc/Geo.pm b/FS/FS/Misc/Geo.pm index c8290e7ed..733c298f9 100644 --- a/FS/FS/Misc/Geo.pm +++ b/FS/FS/Misc/Geo.pm @@ -132,7 +132,7 @@ sub get_censustract_ffiec { } #unless ($res->code eq '200') - die "FFIEC Geocoding error: $error" if $error; + die "FFIEC Geocoding error: $error\n" if $error; $return->{'statecode'} . $return->{'countycode'} . $return->{'tractcode'}; } @@ -291,7 +291,7 @@ sub standardize_usps { UserID => $userid, Password => $password, Testing => 0, - } ) or die "error starting USPS WebTools"; + } ) or die "error starting USPS WebTools\n"; my($zip5, $zip4) = split('-',$location->{'zip'}); @@ -312,7 +312,7 @@ sub standardize_usps { warn $verifier->response if $DEBUG > 1; - die "USPS WebTools error: ".$verifier->{error}{description} + die "USPS WebTools error: ".$verifier->{error}{description} ."\n" if $verifier->is_error; my $zip = $hash->{Zip5}; @@ -354,20 +354,19 @@ sub standardize_teleatlas { return $location; } - if ( my $path = $conf->config('teleatlas-path') ) { - local @INC = (@INC, $path); - } - my $userid = $conf->config('teleatlas-userid') - or die "no teleatlas-userid configured"; - my $password = $conf->config('teleatlas-password') - or die "no teleatlas-password configured"; - + my $path = $conf->config('teleatlas-path') || ''; local @INC = (@INC, $path); eval "use $class;"; if ( $@ ) { die "Loading $class failed:\n$@". "\nMake sure the TeleAtlas Perl SDK is installed correctly.\n"; } + + my $userid = $conf->config('teleatlas-userid') + or die "no teleatlas-userid configured\n"; + my $password = $conf->config('teleatlas-password') + or die "no teleatlas-password configured\n"; + my $tool = $class->new($userid, $password); my $match = $tool->findAddress( @@ -390,7 +389,8 @@ sub standardize_teleatlas { zip => $match->{STD_ZIP}.'-'.$match->{STD_P4}, latitude => $match->{MAT_LAT}, longitude => $match->{MAT_LON}, - censustract => $match->{FIPS_ST}.$match->{FIPS_CTY}.$match->{CEN_TRCT}, + censustract => $match->{FIPS_ST}.$match->{FIPS_CTY}. + sprintf('%04.2f',$match->{CEN_TRCT}), addr_clean => 'Y', }; } diff --git a/httemplate/edit/cust_main/bottomfixup.js b/httemplate/edit/cust_main/bottomfixup.js index 40bcbd521..4e1108727 100644 --- a/httemplate/edit/cust_main/bottomfixup.js +++ b/httemplate/edit/cust_main/bottomfixup.js @@ -7,8 +7,7 @@ my $company_longitude = $conf->config('company_longitude'); my @fixups = ('copy_payby_fields', 'standardize_locations'); -#push @fixups, 'fetch_censustract' -# if $conf->exists('cust_main-require_censustract'); +push @fixups, 'confirm_censustract'; push @fixups, 'check_unique' if $conf->exists('cust_main-check_unique') and !$opt{'custnum'}; @@ -95,6 +94,35 @@ function copyelement(from, to) { //alert(from + " (" + from.type + "): " + to.name + " => " + to.value); } +% # the value in 'censustract' is the confirmed censustract; if it's set, +% # do nothing here +function confirm_censustract() { + var cf = document.CustomerForm; + if ( cf.elements['censustract'].value == '' ) { + var address_info = form_address_info(); + address_info['ship_latitude'] = cf.elements['ship_latitude'].value; + address_info['ship_longitude'] = cf.elements['ship_longitude'].value; + OLpostAJAX( + '<%$p%>/misc/confirm-censustract.html', + 'q=' + encodeURIComponent(JSON.stringify(address_info)), + function() { + overlib( OLresponseAJAX, CAPTION, 'Confirm censustract', STICKY, + AUTOSTATUSCAP, CLOSETEXT, '', MIDX, 0, MIDY, 0, DRAGGABLE, WIDTH, + 576, HEIGHT, 268, BGCOLOR, '#333399', CGCOLOR, '#333399', + TEXTSIZE, 3 ); + }, + 0); + } else submit_continue(); +} + +%# called from confirm-censustract.html +function set_censustract(tract, year) { + var cf = document.CustomerForm; + cf.elements['censustract'].value = tract; + cf.elements['censusyear'].value = year; + submit_continue(); +} + function check_unique() { var search_hash = new Object; % foreach ($conf->config('cust_main-check_unique')) { diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index 053e0e50b..f3640510a 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -203,8 +203,9 @@ Example: % if ( $pre eq 'ship_' && $conf->exists('cust_main-require_censustract') ) { <<%$th%> ALIGN="right">Census tract
(automatic)> - + + % } else { @@ -225,7 +226,7 @@ Example: %# to re-standardize % foreach (qw(address1 city state country zip latitude % longitude censustract addr_clean) ) { - + % } %# Placeholders diff --git a/httemplate/elements/standardize_locations.js b/httemplate/elements/standardize_locations.js index 77683b9d3..ee4c5e7f3 100644 --- a/httemplate/elements/standardize_locations.js +++ b/httemplate/elements/standardize_locations.js @@ -1,14 +1,8 @@ -function standardize_locations() { - - var startup_msg = '

Verifying address...

'; - overlib(startup_msg, WIDTH, 444, HEIGHT, 168, CAPTION, 'Please wait...', STICKY, AUTOSTATUSCAP, CLOSECLICK, MIDX, 0, MIDY, 0); +function form_address_info() { var cf = document.<% $formname %>; - var state_el = cf.elements['<% $main_prefix %>state']; var ship_state_el = cf.elements['<% $ship_prefix %>state']; - - var changed = false; // have any of the address fields been changed? - var address_info = { + return { % if ( $onlyship ) { 'onlyship': 1, % } else { @@ -26,7 +20,7 @@ function standardize_locations() { 'ship_company': cf.elements['<% $ship_prefix %>company'].value, % } % if ( $withcensus ) { - 'ship_censustract': cf.elements['censustract'].value, + 'ship_censustract': cf.elements['enter_censustract'].value, % } 'ship_address1': cf.elements['<% $ship_prefix %>address1'].value, 'ship_address2': cf.elements['<% $ship_prefix %>address2'].value, @@ -35,6 +29,16 @@ function standardize_locations() { 'ship_zip': cf.elements['<% $ship_prefix %>zip'].value, 'ship_country': cf.elements['<% $ship_prefix %>country'].value, }; +} + +function standardize_locations() { + + var startup_msg = '

Verifying address...

'; + overlib(startup_msg, WIDTH, 444, HEIGHT, 168, CAPTION, 'Please wait...', STICKY, AUTOSTATUSCAP, CLOSECLICK, MIDX, 0, MIDY, 0); + var cf = document.<% $formname %>; + var address_info = form_address_info(); + + var changed = false; // have any of the address fields been changed? // clear coord_auto fields if the user has changed the coordinates % for my $pre ($ship_prefix, $onlyship ? () : $main_prefix) { @@ -72,16 +76,31 @@ function standardize_locations() { } } +% # If address hasn't been changed, auto-confirm the existing value of +% # censustract so that we don't ask the user to confirm it again. + + if ( !changed ) { + cf.elements['<% $main_prefix %>censustract'].value = + address_info['ship_censustract']; + } + +% if ( $conf->config('address_standardize_method') ) { if ( changed ) { address_standardize(JSON.stringify(address_info), confirm_standardize); } else { cf.elements['ship_addr_clean'].value = 'Y'; -% if ( !$onlyship ) { +% if ( !$onlyship ) { cf.elements['addr_clean'].value = 'Y'; -% } +% } post_standardization(); } + +% } else { + + post_standardization(); + +% } # if address_standardize_method } var returned; @@ -157,22 +176,33 @@ function replace_address() { setselect(cf.elements['<% $ship_prefix %>state'], newaddr['ship_state']); cf.elements['<% $ship_prefix %>zip'].value = newaddr['ship_zip']; cf.elements['<% $ship_prefix %>addr_clean'].value = 'Y'; -% if ( $withcensus ) { - cf.elements['<% $main_prefix %>censustract'].value = newaddr['ship_censustract'] -% } if ( cf.elements['<% $ship_prefix %>coord_auto'].value ) { cf.elements['<% $ship_prefix %>latitude'].value = newaddr['latitude']; cf.elements['<% $ship_prefix %>longitude'].value = newaddr['longitude']; } } +% if ( $withcensus ) { +% # then set the censustract if address_standardize provided one. + if ( ship_clean && newaddr['ship_censustract'] ) { + cf.elements['<% $main_prefix %>censustract'].value = newaddr['ship_censustract']; + } +% } post_standardization(); } -function post_standardization() { - +function confirm_manual_address() { +%# not much to do in this case, just confirm the censustract +% if ( $withcensus ) { var cf = document.<% $formname %>; + cf.elements['<% $main_prefix %>censustract'].value = + cf.elements['<% $main_prefix %>enter_censustract'].value; +% } + post_standardization(); +} + +function post_standardization() { % if ( $conf->exists('enable_taxproducts') ) { diff --git a/httemplate/misc/confirm-address_standardize.html b/httemplate/misc/confirm-address_standardize.html index 1f94dd917..24363ea4e 100644 --- a/httemplate/misc/confirm-address_standardize.html +++ b/httemplate/misc/confirm-address_standardize.html @@ -51,7 +51,7 @@ Confirm address standardization % } <% $old{$pre.'address1'} %> - <% $new{$pre.'error'} %> + <% $new{$pre.'error'} %> <% $old{$pre.'address2'} %> @@ -62,7 +62,8 @@ Confirm address standardization % } #if error % } # for $pre -% if ( $old{'ship_censustract'} or $new{'ship_censustract'} ) { +%# only do this part if address standardization provided a censustract +% if ( $new{'ship_censustract'} ) { Entered census tract Calculated census tract @@ -82,7 +83,7 @@ Confirm address standardization % if ( $new{error} or $new{ship_error} ) { - @@ -94,7 +95,7 @@ Confirm address standardization % else { - diff --git a/httemplate/misc/confirm-censustract.html b/httemplate/misc/confirm-censustract.html new file mode 100644 index 000000000..ae0ae3a6a --- /dev/null +++ b/httemplate/misc/confirm-censustract.html @@ -0,0 +1,78 @@ +

+% if ( $error ) { +Census tract error +% } +% else { +Confirm census tract +% } +
+% my $querystring = "census_year=$year&latitude=".$cache->get('latitude').'&longitude='.$cache->get('longitude'); +Map service module location
+% $querystring = "census_year=$year&zip_code=".$cache->get('zip'); +Map zip code center
+
+ + + + + + + +% if ( $error ) { + +% } else { + +% } + + + + + + + + +
Entered census tractCalculated census tract
<% $old_tract %><% $error %><% $new_tract %>
+ + + +
+ +
+<%init> + +local $SIG{__DIE__}; #disable Mason error trap + +my $DEBUG = 0; + +my $conf = new FS::Conf; + +warn $cgi->param('q') if $DEBUG; + +my $q = decode_json($cgi->param('q')) + or die "bad argument '".$cgi->param('q')."'"; + +my %location = ( + map { $_ => $q->{'ship_'.$_} } + qw( company address1 address2 city state zip country latitude longitude ) +); + +my $old_tract = $q->{'ship_censustract'}; +my $cache = eval { FS::GeocodeCache->new(%location) }; +$cache->set_censustract; +my $year = FS::Conf->new->config('census_year'); +my $new_tract = $cache->get('censustract'); +my $error = $cache->get('censustract_error'); + +warn Dumper($cache) if $DEBUG; + + diff --git a/httemplate/misc/xmlhttp-address_standardize.html b/httemplate/misc/xmlhttp-address_standardize.html index c2d6d7a80..f53c35fca 100644 --- a/httemplate/misc/xmlhttp-address_standardize.html +++ b/httemplate/misc/xmlhttp-address_standardize.html @@ -25,8 +25,8 @@ foreach my $pre ( '', 'ship_' ) { }; my $cache = eval { FS::GeocodeCache->standardize($location) }; - $cache->set_censustract if $pre; $cache->set_coord; + # don't do set_censustract here, though censustract may be set by now foreach ( keys(%$cache) ) { $new{$pre.$_} = $cache->get($_);