1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-10 13:12:50 +01:00
invoiceninja/resources/views/partials/google_geocode.blade.php
2018-04-25 16:21:07 +03:00

111 lines
3.4 KiB
PHP

<script src="https://maps.googleapis.com/maps/api/js?key={{ env('GOOGLE_MAPS_API_KEY') }}"></script>
<script type="text/javascript">
var countries = {!! \Cache::get('countries') !!};
var countryMap = {};
for (var i=0; i<countries.length; i++) {
var country = countries[i];
countryMap[country.id] = country;
}
$(function() {
showGeocodePlaceholder();
showGeocodePlaceholder(true);
$('#billing_address').change(function() {
showGeocodePlaceholder();
});
$('#shipping_address').change(function() {
showGeocodePlaceholder(true);
});
})
function showGeocodePlaceholder(isShipping) {
var postalCodeField = 'postal_code';
if (isShipping) {
postalCodeField = 'shipping_' + postalCodeField;
}
var placeholder = hasCityOrState(isShipping) ? '' : {!! json_encode(trans('texts.autofills_city_state')) !!};
$('#' + postalCodeField).attr('placeholder', placeholder);
}
function hasCityOrState(isShipping) {
var cityField = 'city';
var stateField = 'state';
if (isShipping) {
cityField = 'shipping_' + cityField;
stateField = 'shipping_' + stateField;
}
if ($('#' + cityField).val() || $('#' + stateField).val()) {
return true;
}
}
function lookupPostalCode(isShipping) {
var cityField = 'city';
var stateField = 'state';
var postalCodeField = 'postal_code';
var countryField = 'country_id';
if (isShipping) {
cityField = 'shipping_' + cityField;
stateField = 'shipping_' + stateField;
postalCodeField = 'shipping_' + postalCodeField;
countryField = 'shipping_' + countryField;
}
if (hasCityOrState(isShipping)) {
return;
}
var postalCode = $('#' + postalCodeField).val();
var countryId = $('#' + countryField).val() || {{ $account->getCountryId() }};
var countryCode = countryMap[countryId].iso_3166_2;
if (! postalCode || postalCode.length < 5) {
return;
}
$('#' + cityField).attr('placeholder', {!! json_encode(trans('texts.loading') . '...') !!});
var geocoder = new google.maps.Geocoder;
geocoder.geocode({
componentRestrictions: {
country: countryCode,
postalCode: postalCode,
}
}, function(results, status) {
if (status == 'OK') {
if (! results.length) {
return;
}
//console.log('Address: ' + results[0].formatted_address);
var components = results[0].address_components;
for (var i=0; i<components.length; i++) {
//console.log(component);
var component = components[i];
if (component.types.indexOf('locality') >= 0
|| component.types.indexOf('neighborhood') >= 0) {
if (! $('#' + cityField).val()) {
$('#' + cityField).val(component.long_name);
}
} else if (component.types.indexOf('administrative_area_level_1') >= 0
|| component.types.indexOf('postal_town') >= 0) {
if (! $('#' + stateField).val()) {
$('#' + stateField).val(component.short_name);
}
}
}
$('#' + cityField).attr('placeholder', '');
} else {
$('#' + cityField).attr('placeholder', {!! json_encode(trans('texts.no_match_found')) !!});
}
showGeocodePlaceholder(isShipping);
});
}
</script>