summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wells <mark@freeside.biz>2015-10-30 16:07:37 -0700
committerMark Wells <mark@freeside.biz>2015-10-30 16:07:37 -0700
commitc40f5c44646f53c43e2fed784d19c3cecdd7f8c7 (patch)
tree4a1ba0e21c50a01225df19e089102d13d4c366d4
parentf2057c70368bbb0acbc098baabc14e44d8e57d56 (diff)
address standardization, part 2new_standardization
-rwxr-xr-xhttemplate/edit/cust_main.cgi12
-rw-r--r--httemplate/edit/cust_main/bottomfixup.js3
-rw-r--r--httemplate/elements/location.html82
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>