diff options
| -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 25932019e..ee8d1b18d 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 97816aad7..48da4e32f 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 d4c0f14d4..705554567 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> | 
