diff options
| author | ivan <ivan> | 2009-01-10 00:43:06 +0000 | 
|---|---|---|
| committer | ivan <ivan> | 2009-01-10 00:43:06 +0000 | 
| commit | a661ced3f9f678a645780eaa0b183d2de5f100fa (patch) | |
| tree | ba08ec5dd9af23f31a2366aafd0bcca599fae8f2 /httemplate/elements | |
| parent | 20bddf47a41b6d064b3cfa4c41e55c157cf0c3de (diff) | |
more work on package service addresses:  hide locations when they're all the default, config to show them anyway / finish implementing package ordering, fix all the state/county weirdness when changing the location dropdown. RT#4499
Diffstat (limited to 'httemplate/elements')
| -rw-r--r-- | httemplate/elements/location.html | 4 | ||||
| -rw-r--r-- | httemplate/elements/tr-select-cust_location.html | 176 | 
2 files changed, 180 insertions, 0 deletions
diff --git a/httemplate/elements/location.html b/httemplate/elements/location.html index bf340894a..f21b8ad01 100644 --- a/httemplate/elements/location.html +++ b/httemplate/elements/location.html @@ -20,6 +20,7 @@ Example:    <TD COLSPAN=7>      <INPUT TYPE     = "text"             NAME     = "<%$pre%>address1" +           ID       = "<%$pre%>address1"             VALUE    = "<% $object->get($pre.'address1') |h %>"             SIZE     = 70             onChange = "<% $onchange %>" @@ -34,6 +35,7 @@ Example:    <TD COLSPAN=7>      <INPUT TYPE     = "text"             NAME     = "<%$pre%>address2" +           ID       = "<%$pre%>address2"             VALUE    = "<% $object->get($pre.'address2') |h %>"             SIZE     = 70             onChange = "<% $onchange %>" @@ -48,6 +50,7 @@ Example:    <TD>      <INPUT TYPE     = "text"             NAME     = "<%$pre%>city" +           ID       = "<%$pre%>city"             VALUE    = "<% $object->get($pre.'city') |h %>"             onChange = "<% $onchange %>"             <% $disabled %> @@ -66,6 +69,7 @@ Example:    <TD>      <INPUT TYPE     = "text"             NAME     = "<%$pre%>zip" +           ID       = "<%$pre%>zip"             VALUE    = "<% $object->get($pre.'zip') |h %>"             SIZE     = 10             onChange = "<% $onchange %>" diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html new file mode 100644 index 000000000..b62c65c03 --- /dev/null +++ b/httemplate/elements/tr-select-cust_location.html @@ -0,0 +1,176 @@ +<%doc> + +Example: + +  include('/elements/tr-select-cust_location.html', +            'cgi'       => $cgi, +            'cust_main' => $cust_main, +         ) + +</%doc> + +<% include('/elements/xmlhttp.html', +              'url'  => $p.'misc/location.cgi', +              'subs' => [ 'get_location' ], +           ) +%> + +<SCRIPT TYPE="text/javascript"> + +  function locationnum_changed(what) { +    var locationnum = what.options[what.selectedIndex].value; +    if ( locationnum == -1 ) { + +%     for (@location_fields) {  +        what.form.<%$_%>.disabled = false; +        what.form.<%$_%>.style.backgroundColor = '#ffffff'; +%     }  + +      what.form.address1.value = ''; +      what.form.address2.value = ''; +      what.form.city.value = ''; +      what.form.zip.value = ''; + +      changeSelect(what.form.country, <% $countrydefault |js_string %>); + +      country_changed( what.form.country, +                       fix_state_factory( <% $statedefault |js_string %>, +                                          '' +                                        ) +                     ); + +    } else { + +      if ( locationnum == 0 ) { +        what.form.address1.value = <% $cust_main->address1 |js_string %>; +        what.form.address2.value = <% $cust_main->address2 |js_string %>; +        what.form.city.value = <% $cust_main->city |js_string %>; +        what.form.zip.value = <% $cust_main->zip |js_string %>; + +        changeSelect(what.form.country, <% $cust_main->country | js_string %> ); + +        country_changed( what.form.country, +                         fix_state_factory( <% $cust_main->state | js_string %>, +                                            <% $cust_main->county | js_string %> +                                          ) +                       ); + +      } else { +        get_location( locationnum, update_location ); +      }  + +%#sleep/wait until dropdowns are updated? +%     for (@location_fields) {  +        what.form.<%$_%>.disabled = true; +        what.form.<%$_%>.style.backgroundColor = '#dddddd'; +%     }  + +    } +  } + +  function fix_state_factory (state, county) { +    function fix_state() { +      var state_el = document.getElementById('state'); +      changeSelect(state_el, state); +      state_changed(state_el, fix_county_factory(county) ); +    } +    return fix_state; +  } + +  function fix_county_factory(county) { +    function fix_county() { +      var county_el = document.getElementById('county'); +      if ( county.length > 0 ) { +        changeSelect(county_el, county ); +      } else { +        county_el.selectedIndex = 0; +      } +    } +    return fix_county; +  } + +  function changeSelect(what, value) { +    for ( var i=0; i<what.length; i++) { +      if ( what.options[i].value == value ) { +        what.selectedIndex = i; +      } +    } +  } + +  function update_location( string ) { +    var hash = eval('('+string+')'); +    document.getElementById('address1').value = hash['address1']; +    document.getElementById('address2').value = hash['address2']; +    document.getElementById('city').value     = hash['city']; +    document.getElementById('zip').value      = hash['zip']; + +    var country_el = document.getElementById('country'); + +    changeSelect( country_el, hash['country'] ); + +    country_changed( country_el, +                     fix_state_factory( hash['state'], +                                        hash['county'] +                                      ) +                   ); +  } + +</SCRIPT> + +<TR> +  <TH ALIGN="right">Service location</TH> +  <TD COLSPAN=7> +    <SELECT NAME="locationnum" onChange="locationnum_changed(this);"> +      <OPTION VALUE="">(default service address) +%     foreach my $loc ( $cust_main->cust_location ) { +        <OPTION VALUE="<% $loc->locationnum %>" +                <% $locationnum == $loc->locationnum ? 'SELECTED' : '' %> +        ><% $loc->line |h %> +%     } +      <OPTION VALUE="-1" +              <% $locationnum == -1 ? 'SELECTED' : '' %> +      >Add new location +    </SELECT> +  </TD> +</TR> + +<% include('/elements/location.html', +             'object'       => $cust_location, +             #'onchange' ?  probably not +             'disabled'     => ( $locationnum == -1 ? '' : 'DISABLED' ), +             'no_asterisks' => 1, +          ) +%> + +<%once> + +my @location_fields = qw( address1 address2 city county state zip country ); + +</%once> +<%init> + +my $conf = new FS::Conf; +my $countrydefault = $conf->config('countrydefault') || 'US'; +my $statedefault = $conf->config('statedefault') +                   || ($countrydefault eq 'US' ? 'CA' : ''); + +my %opt = @_; +my $cgi       = $opt{'cgi'}; +my $cust_main = $opt{'cust_main'}; + +$cgi->param('locationnum') =~ /^(\-?\d*)$/ or die "illegal locationnum"; +my $locationnum = $1; +my $cust_location; +if ( $locationnum && $locationnum != -1 ) { +  $cust_location = qsearchs('cust_location', { 'locationnum' => $locationnum } ) +    or die "unknown locationnum"; +} else { +  $cust_location = new FS::cust_location; +  if ( $cgi->param('error') && $locationnum == -1 ) { +    $cust_location->$_( $cgi->param($_) ) foreach @location_fields; +  } else { +    $cust_location->$_( $cust_main->$_() ) foreach @location_fields; +  } +} + +</%init>  | 
