[freeside-commits] freeside/httemplate/elements tr-select-cust_location.html, NONE, 1.1 location.html, 1.1, 1.2

Ivan,,, ivan at wavetail.420.am
Fri Jan 9 16:43:08 PST 2009


Update of /home/cvs/cvsroot/freeside/httemplate/elements
In directory wavetail.420.am:/tmp/cvs-serv22996/httemplate/elements

Modified Files:
	location.html 
Added Files:
	tr-select-cust_location.html 
Log Message:
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

--- NEW FILE: tr-select-cust_location.html ---
<%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>

Index: location.html
===================================================================
RCS file: /home/cvs/cvsroot/freeside/httemplate/elements/location.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- location.html	9 Jan 2009 04:06:25 -0000	1.1
+++ location.html	10 Jan 2009 00:43:05 -0000	1.2
@@ -20,6 +20,7 @@
   <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 @@
   <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 @@
   <TD>
     <INPUT TYPE     = "text"
            NAME     = "<%$pre%>city"
+           ID       = "<%$pre%>city"
            VALUE    = "<% $object->get($pre.'city') |h %>"
            onChange = "<% $onchange %>"
            <% $disabled %>
@@ -66,6 +69,7 @@
   <TD>
     <INPUT TYPE     = "text"
            NAME     = "<%$pre%>zip"
+           ID       = "<%$pre%>zip"
            VALUE    = "<% $object->get($pre.'zip') |h %>"
            SIZE     = 10
            onChange = "<% $onchange %>"



More information about the freeside-commits mailing list