added new way to select areas for shipping note

This commit is contained in:
Luca Haid
2025-04-28 13:37:58 +02:00
parent a076cf6b9c
commit fee73ab5f2
2 changed files with 23 additions and 5 deletions

View File

@@ -452,15 +452,25 @@ class WarehouseShippingNoteController extends TTCrud {
}
$parsedDisplayNameParts[] = $part;
}
$out[] = ['value' => $entry['lat'] . "," . $entry['lon'], 'text' => implode(',', $parsedDisplayNameParts)];
if (!empty($out)) {
foreach ($out as $key => $value) {
if ($value['text'] === implode(',', $parsedDisplayNameParts)) {
continue 2;
}
}
}
$out[] = ['value' => $entry['lat'] . "," . $entry['lon'] . (!isset($entry['house_number']) ? ", area" : ""), 'text' => implode(',', $parsedDisplayNameParts)];
}
self::returnJson($out);
}
protected function geoReverseAction() {
$lat = $this->request->lat;
$lon = $this->request->lon;
$url = "https://nominatim.haid.in/reverse?lat=$lat&lon=$lon&format=json";
$url = "https://nominatim.haid.in/reverse?lat=$lat&lon=$lon&format=json&addressdetails=1";
$data = json_decode(file_get_contents($url), true);
self::returnJson(is_array($data) ? $data : ['data' => $data]);
}
@@ -468,6 +478,7 @@ class WarehouseShippingNoteController extends TTCrud {
//TODO: export this to an api class for openstreetmap
protected function getDistanceAction() {
$this->request->to = str_replace("Gebiet ", "", $this->request->to);
$filename = TEMP_DIR . "/OpenStreetMap/" . urlencode($this->request->from) . "-" . urlencode($this->request->to) . ".json";
if (file_exists($filename)) {

View File

@@ -163,14 +163,21 @@ Vue.component('warehouse-shipping-note-modal', {
},
watch: {
geoAddr: async function() {
const [lat, lon] = this.geoAddr.split(',');
if (!this.geoAddr) return;
const areaMode = this.geoAddr.includes(', area');
const [lat, lon] = this.geoAddr.replace(', area', '').split(',');
const { address } = (await axios.get(`${window.TT_CONFIG["BASE_PATH"]}/WarehouseShippingNote/geoReverse?lat=${lat}&lon=${lon}`)).data;
if (areaMode === false) {
const addrKey = ['road', 'village', 'hamlet', 'residential', 'city'].find(k => address[k]);
this.shippingNote.deliveryAddressLine = addrKey ? `${address[addrKey]}${address["house_number"] ? ` ${address["house_number"]}` : ''}` : '';
} else if (areaMode === true) {
this.shippingNote.deliveryAddressLine = 'Gebiet';
this.shippingNote.deliveryAddressName = `Gebiet ${address["village"] ?? address.residential ?? address.city ?? address["town"]}`;
}
this.shippingNote.deliveryAddressPLZ = address["postcode"];
this.shippingNote.deliveryAddressCity = address["village"] ?? address.city ?? address["town"];
this.shippingNote.deliveryAddressCity = address["village"] ?? address.residential ?? address.city ?? address["town"];
this.updateKilometer().then();
},
selectedBillingAddress: async function() {
@@ -223,7 +230,7 @@ Vue.component('warehouse-shipping-note-modal', {
this.hoursLoading = false;
},
async updateKilometer(carId) {
if (!carId || carId === '0') return this.$refs.hoursManager.updateField('kilometerCount', null);
if (!carId || carId === '0' && this.$refs.hoursManager) return this.$refs.hoursManager?.updateField('kilometerCount', null);
this.hoursLoading = true;
const delAddr = this.shippingNote.deliveryAddressLine + ' ' + this.shippingNote.deliveryAddressPLZ + ' ' + this.shippingNote.deliveryAddressCity;
const {data} = await axios.get(window.TT_CONFIG["BASE_PATH"] + '/WarehouseShippingNote/getDistance?from=Xinon%20GmbH&to=' + delAddr);