diff options
author | Mark Wells <mark@freeside.biz> | 2015-10-30 16:07:37 -0700 |
---|---|---|
committer | Mark Wells <mark@freeside.biz> | 2015-10-30 16:07:37 -0700 |
commit | c40f5c44646f53c43e2fed784d19c3cecdd7f8c7 (patch) | |
tree | 4a1ba0e21c50a01225df19e089102d13d4c366d4 | |
parent | f2057c70368bbb0acbc098baabc14e44d8e57d56 (diff) |
address standardization, part 2new_standardization
-rwxr-xr-x | httemplate/edit/cust_main.cgi | 12 | ||||
-rw-r--r-- | httemplate/edit/cust_main/bottomfixup.js | 3 | ||||
-rw-r--r-- | httemplate/elements/location.html | 82 |
3 files changed, 61 insertions, 36 deletions
diff --git a/httemplate/edit/cust_main.cgi b/httemplate/edit/cust_main.cgi index 2593201..ee8d1b1 100755 --- a/httemplate/edit/cust_main.cgi +++ b/httemplate/edit/cust_main.cgi @@ -107,12 +107,14 @@ function samechanged(what) { } } -% if ( ! $has_ship_address ) { - $('#ship_location').hide(); -% } - $().ready( function() { - window.bill_location = new Location($('fieldset#bill_location')); + window.bill_location = new Location($('fieldset#bill_location'), 'bill_'); + window.ship_location = new Location($('fieldset#ship_location'), 'ship_'); + + if ($('#same').prop('checked')) { + $('#ship_location').hide(); + } + }); </SCRIPT> diff --git a/httemplate/edit/cust_main/bottomfixup.js b/httemplate/edit/cust_main/bottomfixup.js index 97816aa..48da4e3 100644 --- a/httemplate/edit/cust_main/bottomfixup.js +++ b/httemplate/edit/cust_main/bottomfixup.js @@ -5,7 +5,8 @@ my $conf = new FS::Conf; my $company_latitude = $conf->config('company_latitude'); my $company_longitude = $conf->config('company_longitude'); -my @fixups = ('standardize_locations'); +my @fixups = (); +# 'standardize_locations'); push @fixups, 'confirm_censustract_bill', 'confirm_censustract_ship' if $conf->exists('cust_main-require_censustract'); diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index d4c0f14..7055545 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -271,9 +271,10 @@ Example: % } %# Placeholders <& hidden.html, field => $pre.'cachenum', value => '' &> -<& hidden.html, field => $pre.'addr_clean', value => '' &> +<& hidden.html, field => $pre.'addr_clean', value => $object->get('addr_clean') &> <SCRIPT TYPE="text/javascript"> +// XXX some of this should go away after address standardization changes... <&| /elements/onload.js &> var clear_coords_ids = [ '<%$pre%>latitude', @@ -328,11 +329,16 @@ Example: </&> -function Location(fieldset) { +% if (! $m->notes('location_js') ) { +% $m->notes('location_js', 1); + +function Location(fieldset, prefix) { if ( typeof fieldset == 'String' ) { fieldset = $('#' + fieldset); } this.fieldset = $(fieldset); + this.prefix = prefix || ''; + var errorbox = document.createElement('DIV'); errorbox.className = 'error'; fieldset.append(errorbox); // after the <table> @@ -343,8 +349,12 @@ function Location(fieldset) { }); this.errorbox = $(errorbox); // so we can find it - var img_tick = $('<IMG SRC="http://localhost/freeside/images/tick.png">'); - var img_wait = $('<IMG SRC="http://localhost/freeside/images/wait-orange.gif">'); + var img_tick = $('<IMG SRC="<% $fsurl %>images/tick.png">'); + var img_wait = $('<IMG SRC="<% $fsurl %>images/wait-orange.gif">'); + + if ( $('#' + prefix + 'addr_clean').prop('value') ) { + $(errorbox).append(img_tick); + } // get/set the serialized (URL parameter string) contents of the form fields this.value = function(newvalue) { @@ -365,51 +375,63 @@ function Location(fieldset) { return this.fieldset.serialize(); }; - // send a standardization request and do something with the result + // send a standardization request and push the result into this.value() this.standardize = function(callback) { this.errorbox.empty(); this.errorbox.append(img_wait); $.ajax({ type: 'POST', url: '<% $fsurl %>misc/address_standardize.cgi', - success: callback, + success: this.value.bind(this), data: this.value() }); }; - // check if required fields are filled, and if so, standardize - var standardize_if_ready = function() { - var loc = this; - var ready = true; - var required_fields = this.fieldset.find(':data(required)'); - for ( var i = 0; ready && i < required_fields.length; i++ ) { - if ( required_fields[i].prop('value').length == 0 ) { - ready = false; - } - } + var location_change_timer; - if ( ready ) { - // pass the "value" method, prebound to the location object - this.standardize( this.value.bind(loc) ); - } - }; + // check if required fields are filled, and if so, wait 2 seconds, then + // call "standardize" + var standardize_if_ready = function( ev ) { + // pull the location object back out + var loc = ev.data; - // event handler; the Location object is passed in event.data - var location_change_timer; - var location_changed = function( ev ) { if ( location_change_timer ) { + console.log("reset timer..."); window.clearTimeout(location_change_timer); } - location_change_timer = window.setTimeout( - standardize_if_ready.bind(ev.data), - 2000 - ); + + // require address1 and either (zip) or (city and state) + // before trying to standardize + var ready = + $('#' + loc.prefix + 'address1').val() + && ( + ( $('#' + loc.prefix + 'city').val() + && $('#' + loc.prefix + 'state').val() + ) + || $('#' + loc.prefix + 'zip').val() + ) + ; + + if ( ready ) { + console.log("start timer..."); + location_change_timer = window.setTimeout( loc.standardize.bind(loc), + 2000 ); + } }; - fieldset.find('input').on('change', this, location_changed); - fieldset.find('select').on('change', this, location_changed); + // event handler; the Location object is passed in event.data + var location_changed = standardize_if_ready; + + // bind only to the fields that are used in standardization + // (so that it's possible to manually edit coords, etc.) + var onchange_fields = + [ 'address1', 'address2', 'city', 'state', 'zip', 'country' ]; + for ( var i = 0; i < onchange_fields.length; i++ ) { + $('#' + prefix + onchange_fields[i]).on('change', this, location_changed); + } } +% } </SCRIPT> <%init> |