X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=httemplate%2Felements%2Ftr-select-cust_location.html;h=47a917dbdeb07bb7be9addecdab471427ce02d0a;hb=d4114381c5d95e8acd0d0fc2bbc2b3528bde2ecf;hp=d7566262e9587a341f476b3fec48d2ead5d418c4;hpb=eddffe5c35507f37ed83c2529626c9be5f81a516;p=freeside.git diff --git a/httemplate/elements/tr-select-cust_location.html b/httemplate/elements/tr-select-cust_location.html index d7566262e..47a917dbd 100644 --- a/httemplate/elements/tr-select-cust_location.html +++ b/httemplate/elements/tr-select-cust_location.html @@ -11,7 +11,6 @@ Example: #optional 'empty_label' => '(default service address)', - 'disable_empty' => 0, #1 to disable ) @@ -32,6 +31,24 @@ Example: else what.form.<%$_%>.value = ''; if( ftype != 'SELECT') what.form.<%$_%>.style.backgroundColor = '#dddddd'; % } + if(what.form.enter_censustract) { + what.form.enter_censustract.disabled = true; + } + } + + function location_clear(what) { +% for (grep { $_ ne 'location_number' } @location_fields, 'city_select') { + var ftype = what.form.<%$_%>.tagName; + if( ftype == 'INPUT' ) what.form.<%$_%>.value = ''; +% } + if(what.form.enter_censustract) { + what.form.enter_censustract.value = ''; + } +% if ( $opt{'alt_format'} ) { + changeSelect(what.form.location_kind, ''); + changeSelect(what.form.location_type, ''); + what.form.location_number.value = ''; +% } } function location_enable(what) { @@ -39,24 +56,27 @@ Example: what.form.<%$_%>.disabled = false; var ftype = what.form.<%$_%>.tagName; if( ftype != 'SELECT') what.form.<%$_%>.style.backgroundColor = '#ffffff'; - if( ftype == 'INPUT' ) what.form.<%$_%>.value = ''; % } - - if ( what.form.location_type.options[what.form.location_type.selectedIndex].value ) { + if(what.form.enter_censustract) { + what.form.enter_censustract.disabled = false; + } +% if ( $opt{'alt_format'} ) { + if ( what.form.location_type && + what.form.location_type.options[what.form.location_type.selectedIndex].value ) { what.form.location_number.disabled = false; what.form.location_number.style.backgroundColor = '#ffffff'; - } - what.form.location_number.value = ''; + } +% } } function locationnum_changed(what) { var locationnum = what.options[what.selectedIndex].value; - if ( locationnum == -2 ) { + if ( locationnum == -2 ) { //(not required) location_disable(what); return; } - if ( locationnum == -1 ) { - location_enable(what); + if ( locationnum == -1 ) { //Add new location + location_clear(what); changeSelect(what.form.country, <% $countrydefault |js_string %>); @@ -65,28 +85,34 @@ Example: '' ) ); + + location_enable(what); return; } + if ( locationnum == -3 ) { //service address location for qualificaitons + what.form.address1.value = <% $cust_location->address1 |js_string %>; + what.form.address2.value = <% $cust_location->address2 |js_string %>; + what.form.city.value = <% $cust_location->city |js_string %>; + what.form.zip.value = <% $cust_location->zip |js_string %>; +% if ( $opt{'alt_format'} ) { + what.form.location_number.value = <% $cust_location->location_number |js_string %>; + changeSelect(what.form.location_kind, <% $cust_location->location_kind |js_string %> ); + changeSelect(what.form.location_type, <% $cust_location->location_type |js_string %> ); +% } - if ( locationnum == 0 ) { -% if ( $cust_main ) { - what.form.address1.value = <% $cust_main->get($prefix.'address1') |js_string %>; - what.form.address2.value = <% $cust_main->get($prefix.'address2') |js_string %>; - what.form.city.value = <% $cust_main->get($prefix.'city') |js_string %>; - what.form.zip.value = <% $cust_main->get($prefix.'zip') |js_string %>; - - changeSelect(what.form.country, <% $cust_main->get($prefix.'country') | js_string %> ); + changeSelect(what.form.country, <% $cust_location->country | js_string %> ); country_changed( what.form.country, - fix_state_factory( <% $cust_main->get($prefix.'state') | js_string %>, - <% $cust_main->get($prefix.'county') | js_string %> + fix_state_factory( <% $cust_location->state | js_string %>, + <% $cust_location->county | js_string %> ) ); -% } + location_enable(what); + return; + } - } else { - get_location( locationnum, update_location ); - } +%# default service address is now just another location + get_location( locationnum, update_location ); % if ( $editable ) { if ( locationnum == 0 ) { @@ -136,18 +162,16 @@ Example: } } + var location_fields = <% encode_json(\@location_fields) %>; 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, + var hash = JSON.parse(string); + for(var i = 0; i < location_fields.length; i++) { + var f = location_fields[i]; + if (hash[f] && document.getElementById(f)) { + document.getElementById(f).value = hash[f]; + } + } + country_changed( document.getElementById('country'), fix_state_factory( hash['state'], hash['county'] ) @@ -157,27 +181,16 @@ Example: - <<%$th%> ALIGN="right"><% $opt{'label'} || 'Service location' %>> + <<%$th%> ALIGN="right"><% $opt{'label'} || emt('Service location') %>> - + + <& /elements/select-cust_location.html, + %opt, + 'curr_value' => $locationnum, + 'cust_location' => \@cust_location, + 'onchange' => 'locationnum_changed(this);', + &> + @@ -188,9 +201,13 @@ Example: 'no_asterisks' => 1, 'no_bold' => $opt{'no_bold'}, 'alt_format' => $opt{'alt_format'}, + 'enable_coords'=> 1, + 'enable_censustract' => 1, ) %> - + <%init> my $conf = new FS::Conf; @@ -203,8 +220,7 @@ my $cgi = $opt{'cgi'}; my $cust_pkg = $opt{'cust_pkg'}; my $cust_main = $opt{'cust_main'}; my $prospect_main = $opt{'prospect_main'}; - -my $prefix = ($cust_main && length($cust_main->ship_last)) ? 'ship_' : ''; +die "cust_main or prospect_main required" unless $cust_main or $prospect_main; my $locationnum = ''; if ( $cgi->param('error') ) { @@ -216,9 +232,9 @@ if ( $cgi->param('error') ) { } elsif ($prospect_main) { my @cust_location = $prospect_main->cust_location; $locationnum = $cust_location[0]->locationnum if scalar(@cust_location)==1; - } else { #? + } else { #$cust_main $cgi->param('locationnum') =~ /^(\-?\d*)$/ or die "illegal locationnum"; - $locationnum = $1; + $locationnum = $1 || $cust_main->ship_locationnum; } } @@ -227,36 +243,42 @@ if ( $cgi->param('error') ) { my $editable = $cust_main ? 0 : 1; #could use explicit control my $addnew = $cust_main ? 1 : ( $locationnum>0 ? 0 : 1 ); -my @location_fields = qw( address1 address2 city county state zip country ); +my @location_fields = FS::cust_main->location_fields; if ( $opt{'alt_format'} ) { push @location_fields, qw( location_type location_number location_kind ); } -my $cust_location; +my $cust_location; #the one that shows by default in the location edit space if ( $locationnum && $locationnum > 0 ) { $cust_location = qsearchs('cust_location', { 'locationnum' => $locationnum } ) or die "unknown locationnum"; } else { $cust_location = new FS::cust_location; - if ( $locationnum == -1 ) { + if ( $locationnum == -1 || $locationnum == -3 ) { $cust_location->$_( $cgi->param($_) ) foreach @location_fields; } elsif ( $cust_pkg && $cust_pkg->locationnum ) { my $pkg_location = $cust_pkg->cust_location; $cust_location->$_( $pkg_location->$_ ) foreach @location_fields; $opt{'empty_label'} ||= 'package address: '.$pkg_location->line; } elsif ( $cust_main ) { - $cust_location->$_( $cust_main->get($prefix.$_) ) foreach @location_fields; + $cust_location = $cust_main->ship_location; #I think } } +$cust_location->coord_auto('Y'); + my $location_sort = sub { + #enabled w/label_prefix _location # $a->locationname cmp $b->locationname + # or $a->country cmp $b->country + or lc($a->state) cmp lc($b->state) or lc($a->city) cmp lc($b->city) + or lc($a->county) cmp lc($b->county) or lc($a->address1) cmp lc($b->address1) or lc($a->address2) cmp lc($b->address2) }; -my @cust_location = (); +my @cust_location; push @cust_location, $cust_main->cust_location if $cust_main; push @cust_location, $prospect_main->cust_location if $prospect_main; push @cust_location, $cust_location @@ -265,16 +287,27 @@ push @cust_location, $cust_location @cust_location = sort $location_sort grep !$_->disabled, @cust_location; +$cust_location = $cust_location[0] + if ( $prospect_main ) + && !$opt{'is_optional'} + && @cust_location; + my $disabled = ( $locationnum < 0 || ( $editable && $locationnum ) - || ( ( $prospect_main || $opt{'disable_empty'} ) + || ( $prospect_main && !$opt{'is_optional'} && !@cust_location && $addnew ) ) ? '' : 'DISABLED'; +if ( $cust_main && $opt{'alt_format'} && ! @cust_location ) { + $cust_location->locationnum(-3); + $cust_location->alternize; + push @cust_location, $cust_location; +} + my $th = $opt{'no_bold'} ? 'TD' : 'TH';