5 include( '/elements/location.html',
6 'object' => $cust_location
7 'prefix' => $pre, # prefixed to form field names
8 'onchange' => $javascript,
9 'geocode' => $geocode, #passed through
10 'censustract' => $censustract, #passed through
11 'no_asterisks' => 0, #set true to disable the red asterisks next
13 'address1_label' => 'Address', #label for address
14 'enable_coords' => 1, #show latitude/longitude fields
15 'enable_district' => 1, #show tax district field
16 'enable_censustract' => 1, #show censustract field
22 % if ( $opt{'alt_format'} ) {
25 <<%$th%> ALIGN="right">Location kind</<%$th%>>
27 <% include('/elements/select.html',
29 'field' => 'location_kind',
30 'id' => 'location_kind',
31 'disabled' => $disabled,
33 'options' => \@location_kind_options,
34 'labels' => $location_kind_labels,
35 'curr_value' => scalar($cgi->param('location_kind'))
36 || $object->get('location_kind'),
44 % if ( $label_prefix eq '_location' ) {
47 <TD ALIGN="right" ><% $opt{'locationname_label'} || emt('Location ID') %></TD>
50 NAME = "<%$pre%>locationname"
51 ID = "<%$pre%>locationname"
52 VALUE = "<% $object->get('locationname') |h %>"
54 onChange = "<% $onchange %>"
63 <INPUT TYPE = "hidden"
64 NAME = "<%$pre%>locationname"
65 ID = "<%$pre%>locationname"
66 VALUE = "<% $object->get('locationname') |h %>"
72 <<%$th%> STYLE="width:16ex" ALIGN="right"><%$r%><% $opt{'address1_label'} || emt('Address') %></<%$th%>>
75 NAME = "<%$pre%>address1"
76 ID = "<%$pre%>address1"
77 VALUE = "<% $object->get('address1') |h %>"
79 onChange = "<% $onchange %>"
86 % if ( ! $opt{'alt_format'} ) { #regular format
89 <TD ALIGN="right"><FONT ID="<% $pre %>address2_required" color="#ff0000" <% $address2_label_style %>>*</FONT> <FONT ID="<% $pre %>address2_label" <% $address2_label_style %>><B>Unit #</B></FONT></TD>
92 NAME = "<%$pre%>address2"
93 ID = "<%$pre%>address2"
94 VALUE = "<% $object->get('address2') |h %>"
96 onChange = "<% $onchange %>"
103 % } else { # alternate format
105 <INPUT TYPE = "hidden"
106 NAME = "<%$pre%>address2"
107 VALUE = "<% $object->get('address2') |h %>"
111 <<%$th%> ALIGN="right">Unit type and #</<%$th%>>
114 % my $location_type = scalar($cgi->param('location_type'))
115 % || $object->get('location_type');
116 % #my $location_number = scalar($cgi->param('location_number'))
117 % # || $object->get($pre.'location_number');
119 % if ( $object->get($pre.'address2') && ! $location_type ) {
122 % if ( 1 ) { #ikano, switch on via config
123 % tie my %location_types, 'Tie::IxHash',
124 % FS::part_export::ikano->location_types;
125 <% include('/elements/select.html',
127 'field' => 'location_type',
128 'id' => 'location_type',
129 'disabled' => $disabled,
131 'options' => [ keys %location_types ],
132 'labels' => \%location_types,
133 'curr_value' => $location_type,
134 'onchange' => 'location_type_changed',
137 <SCRIPT TYPE="text/javascript">
138 function location_type_changed (what) {
139 if ( what.options[what.selectedIndex].value == '' ) {
140 what.form.location_number.disabled = true;
141 what.form.location_number.style.backgroundColor = '#dddddd';
143 what.form.location_number.disabled = false;
144 what.form.location_number.style.backgroundColor = '#ffffff';
150 NAME = "location_type"
152 VALUE = "<% $location_type |h %>"
160 NAME = "location_number"
161 ID = "location_number"
162 VALUE = "<% scalar($cgi->param('location_number')) || $object->get('location_number') |h %>"
164 <% $disabled || ($location_type ? '' : 'DISABLED') %>
168 % #XXX i don't work so well when the dropdown is changed :/ i probably need to be triggered by "default service address"
169 % $alt_err =~ s/(ship_)?address2/'<B>'.encode_entities($object->get($1.'address2')).'<\/B>'/e;
180 <<%$th%> ALIGN="right"><%$r%><% mt('City') |h %></<%$th%>>
181 <TD WIDTH="1"><% include('/elements/city.html', %select_hash, 'text_style' => \@style ) %></TD>
182 <<%$th%> ALIGN="right" WIDTH="1" ID="<%$pre%>countylabel" <%$county_style%>><%$r%>County</<%$th%>>
183 <TD WIDTH="1"><% include('/elements/select-county.html', %select_hash ) %></TD>
184 <<%$th%> ALIGN="right" WIDTH="1"><%$r%><% mt('State') |h %></<%$th%>>
186 <% include('/elements/select-state.html', %select_hash ) %>
188 <<%$th%> ALIGN="right" WIDTH="1"><%$r%><% mt('Zip') |h %></<%$th%>>
193 VALUE = "<% $object->get('zip') |h %>"
195 onChange = "<% $onchange %>"
203 <<%$th%> ALIGN="right"><%$r%><% mt('Country') |h %></<%$th%>>
204 <TD COLSPAN=6><% include('/elements/select-country.html', %select_hash ) %></TD>
207 % if ( $opt{enable_coords} ) {
209 <TD ALIGN="right"><% mt('Latitude') |h %></TD>
212 NAME = "<%$pre%>latitude"
213 ID = "<%$pre%>latitude"
214 VALUE = "<% $object->get('latitude') |h %>"
218 <% mt('Longitude') |h %>
220 NAME = "<%$pre%>longitude"
221 ID = "<%$pre%>longitude"
222 VALUE = "<% $object->get('longitude') |h %>"
229 % foreach (qw(latitude longitude)) {
230 <INPUT TYPE="hidden" NAME="<% $_ %>" ID="<% $_ %>" VALUE="<% $object->get($_) |h%>">
233 <INPUT TYPE="hidden" NAME="<%$pre%>coord_auto" VALUE="<% $object->coord_auto %>">
235 <INPUT TYPE="hidden" NAME="<%$pre%>geocode" VALUE="<% $object->geocode %>">
236 <INPUT TYPE="hidden" NAME="<%$pre%>censustract" VALUE="<% $object->censustract %>">
237 <INPUT TYPE="hidden" NAME="<%$pre%>censusyear" VALUE="<% $object->censusyear %>">
238 % if ( $opt{enable_censustract} ) {
240 <TD ALIGN="right">Census tract</TD>
242 <INPUT TYPE="text" SIZE=15
243 ID="<% $pre %>enter_censustract"
244 NAME="<% $pre %>enter_censustract"
245 VALUE="<% $object->censustract |h %>">
250 % if ( $opt{enable_district} and $conf->config('tax_district_method') ) {
252 <TD ALIGN="right">Tax district</TD>
254 <INPUT TYPE="text" SIZE=15
255 NAME="<%$pre%>district"
256 ID="<%$pre%>district"
257 VALUE="<% $object->district |h %>">
262 <INPUT TYPE="hidden" ID="<%$pre%>" NAME="<%$pre%>district" VALUE="<% $object->district %>">
265 %# For address standardization:
266 %# keep a clean copy of the address so we know if we need
268 % foreach (qw(address1 city state country zip latitude
269 % longitude censustract district addr_clean) ) {
270 <INPUT TYPE="hidden" NAME="old_<%$pre.$_%>" ID="old_<%$pre.$_%>" VALUE="<% $object->get($_) |h%>">
273 <INPUT TYPE="hidden" NAME="<%$pre%>cachenum" VALUE="">
274 <INPUT TYPE="hidden" NAME="<%$pre%>addr_clean" VALUE="">
276 <SCRIPT TYPE="text/javascript">
277 <&| /elements/onload.js &>
278 var clear_coords_ids = [
281 '<%$pre%>enter_censustract',
282 '<%$pre%>censustract',
285 function clear_coords() {
286 for (var i=0; i < clear_coords_ids.length; i++) {
287 var el = document.getElementById(clear_coords_ids[i]);
293 var clear_coords_on_change = [
301 for (var i=0; i < clear_coords_on_change.length; i++) {
302 var el = document.getElementById(clear_coords_on_change[i]);
303 if ( el.addEventListener ) {
304 el.addEventListener('change', clear_coords);
305 } else if ( el.attachEvent ) {
306 el.attachEvent('onchange', clear_coords);
316 my $pre = $opt{'prefix'};
317 my $object = $opt{'object'};
318 my $onchange = $opt{'onchange'};
319 my $disabled = $opt{'disabled'};
321 my $r = $opt{'no_asterisks'} ? '' : qq!<font color="#ff0000">*</font> !;
323 my $conf = new FS::Conf;
324 my $countrydefault = $conf->config('countrydefault') || 'US';
325 my $statedefault = $conf->config('statedefault')
326 || ($countrydefault eq 'US' ? 'CA' : '');
327 my $label_prefix = $conf->config('cust_location-label_prefix');
329 $object ||= FS::cust_location->new({
330 'country' => $countrydefault,
331 'state' => $statedefault,
334 my $alt_err = ($opt{'alt_format'} && !$disabled) ? $object->alternize : '';
337 push @style, 'background-color: #dddddd' if $disabled;
339 my @address2_label_style = ();
340 push @address2_label_style, 'visibility:hidden'
342 || ! $conf->exists('cust_main-require_address2')
343 || ( !$pre && !$opt{'same_checked'} );
345 my @counties = counties( $object->get('state'),
346 $object->get('country'),
348 my @county_style = ();
349 push @county_style, 'display:none' # 'visibility:hidden'
350 unless scalar(@counties) > 1;
354 ? 'STYLE="'. join(';', @style). '"'
356 my $address2_label_style =
357 scalar(@address2_label_style)
358 ? 'STYLE="'. join(';', @address2_label_style). '"'
361 scalar(@county_style)
362 ? 'STYLE="'. join(';', @county_style). '"'
366 'city' => $object->get('city'),
367 'county' => $object->get('county'),
368 'state' => $object->get('state'),
369 'country' => $object->get('country'),
371 'onchange' => $onchange,
372 'disabled' => $disabled,
376 my $th = $opt{'no_bold'} ? 'TD' : 'TH';
378 my @location_kind_options = ( '', 'R', 'B' );
379 my $location_kind_labels = { '' => '', 'R' => 'Residential', 'B' => 'Business' };