Erweiterungen
This commit is contained in:
@@ -174,14 +174,8 @@ public class AddJobView extends Main {
|
|||||||
// Adressvalidierung
|
// Adressvalidierung
|
||||||
private final Map<String, AddressValidationResult> addressValidationResults = new HashMap<>();
|
private final Map<String, AddressValidationResult> addressValidationResults = new HashMap<>();
|
||||||
private RouteCalculationResult routeCalculationResult;
|
private RouteCalculationResult routeCalculationResult;
|
||||||
private String lastPickupStreet = "";
|
private boolean addressesDirty = true; // true = Adressen müssen validiert werden
|
||||||
private String lastPickupHouseNumber = "";
|
private boolean validationDialogOpen = false; // true = Dialog ist gerade geöffnet
|
||||||
private String lastPickupZip = "";
|
|
||||||
private String lastPickupCity = "";
|
|
||||||
private String lastDeliveryStreet = "";
|
|
||||||
private String lastDeliveryHouseNumber = "";
|
|
||||||
private String lastDeliveryZip = "";
|
|
||||||
private String lastDeliveryCity = "";
|
|
||||||
private TabSheet tabSheet;
|
private TabSheet tabSheet;
|
||||||
|
|
||||||
public AddJobView(AddJobService addJobService, AddCustomerService addCustomerService,
|
public AddJobView(AddJobService addJobService, AddCustomerService addCustomerService,
|
||||||
@@ -240,6 +234,10 @@ public class AddJobView extends Main {
|
|||||||
savePickupAddress.setValue(true);
|
savePickupAddress.setValue(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Streckeninformationen zurücksetzen, da sich die Abholadresse ändert
|
||||||
|
resetRouteInformation();
|
||||||
|
|
||||||
Customer c = customerLabelToEntity.get(selected);
|
Customer c = customerLabelToEntity.get(selected);
|
||||||
if (c == null)
|
if (c == null)
|
||||||
return;
|
return;
|
||||||
@@ -421,6 +419,9 @@ public class AddJobView extends Main {
|
|||||||
submitButton = new Button("Auftrag anlegen", event -> submit());
|
submitButton = new Button("Auftrag anlegen", event -> submit());
|
||||||
submitButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
submitButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
||||||
submitButton.setEnabled(false);
|
submitButton.setEnabled(false);
|
||||||
|
|
||||||
|
// Listener für Adressänderungen registrieren
|
||||||
|
setupAddressChangeListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Testdaten entfernt
|
// Testdaten entfernt
|
||||||
@@ -973,6 +974,9 @@ public class AddJobView extends Main {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Streckeninformationen zurücksetzen, da sich die Adresse ändert
|
||||||
|
resetRouteInformation();
|
||||||
|
|
||||||
// Find the first customer with this company name
|
// Find the first customer with this company name
|
||||||
Optional<Customer> matchingCustomer = allCustomers.stream()
|
Optional<Customer> matchingCustomer = allCustomers.stream()
|
||||||
.filter(c -> selectedCompany.equals(c.getCompanyName())).findFirst();
|
.filter(c -> selectedCompany.equals(c.getCompanyName())).findFirst();
|
||||||
@@ -1041,6 +1045,9 @@ public class AddJobView extends Main {
|
|||||||
String customValue = event.getDetail();
|
String customValue = event.getDetail();
|
||||||
companyField.setValue(customValue);
|
companyField.setValue(customValue);
|
||||||
|
|
||||||
|
// Streckeninformationen zurücksetzen
|
||||||
|
resetRouteInformation();
|
||||||
|
|
||||||
// Reactivate save checkbox for custom values
|
// Reactivate save checkbox for custom values
|
||||||
if (isPickup) {
|
if (isPickup) {
|
||||||
savePickupAddress.setValue(true);
|
savePickupAddress.setValue(true);
|
||||||
@@ -1833,6 +1840,9 @@ public class AddJobView extends Main {
|
|||||||
* Leert alle Felder im Formular
|
* Leert alle Felder im Formular
|
||||||
*/
|
*/
|
||||||
private void clearAllFields() {
|
private void clearAllFields() {
|
||||||
|
// Streckeninformationen zurücksetzen
|
||||||
|
resetRouteInformation();
|
||||||
|
|
||||||
// Customer selection
|
// Customer selection
|
||||||
customerSelection.clear();
|
customerSelection.clear();
|
||||||
|
|
||||||
@@ -2732,60 +2742,70 @@ public class AddJobView extends Main {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.debug("Tab-Wechsel von Adress-Tab zu '{}' - addressesDirty={}", selectedTab.getLabel(), addressesDirty);
|
||||||
|
|
||||||
|
// Wenn der Validierungsdialog gerade geöffnet ist, nichts tun
|
||||||
|
if (validationDialogOpen) {
|
||||||
|
log.debug("Validierungsdialog ist geöffnet - ignoriere Tab-Wechsel");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Prüfen, ob Adressen geändert wurden
|
// Prüfen, ob Adressen geändert wurden
|
||||||
boolean pickupChanged = hasPickupAddressChanged();
|
boolean pickupChanged = hasPickupAddressChanged();
|
||||||
boolean deliveryChanged = hasDeliveryAddressChanged();
|
boolean deliveryChanged = hasDeliveryAddressChanged();
|
||||||
|
|
||||||
|
log.debug("Adressänderung: pickupChanged={}, deliveryChanged={}", pickupChanged, deliveryChanged);
|
||||||
|
|
||||||
if (!pickupChanged && !deliveryChanged) {
|
if (!pickupChanged && !deliveryChanged) {
|
||||||
// Adressen nicht geändert, nichts zu tun
|
// Adressen nicht geändert, nichts zu tun
|
||||||
|
log.debug("Keine Adressänderung - Dialog wird nicht angezeigt");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tab-Wechsel vorübergehend verhindern, indem wir zurück zum Adress-Tab
|
// Tab-Wechsel vorübergehend verhindern
|
||||||
// wechseln
|
// Flag setzen, Dialog anzeigen, und Tab zurücksetzen
|
||||||
// Der Dialog wird angezeigt und bei Bestätigung wird der Tab gewechselt
|
validationDialogOpen = true;
|
||||||
event.unregisterListener();
|
|
||||||
tabSheet.setSelectedTab(addressesTab);
|
tabSheet.setSelectedTab(addressesTab);
|
||||||
|
|
||||||
// Validierungsdialog anzeigen
|
// Validierungsdialog anzeigen
|
||||||
|
log.debug("Zeige Validierungsdialog an");
|
||||||
showAddressValidationDialog(selectedTab);
|
showAddressValidationDialog(selectedTab);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prüft, ob sich die Abholadresse geändert hat.
|
* Prüft, ob die Abholadresse gültig ist (Pflichtfelder ausgefüllt).
|
||||||
*/
|
*/
|
||||||
private boolean hasPickupAddressChanged() {
|
private boolean hasPickupAddressChanged() {
|
||||||
String currentStreet = getValueOrEmpty(pickupStreet);
|
String currentStreet = getValueOrEmpty(pickupStreet);
|
||||||
String currentHouseNumber = getValueOrEmpty(pickupHouseNumber);
|
|
||||||
String currentZip = getValueOrEmpty(pickupZip);
|
String currentZip = getValueOrEmpty(pickupZip);
|
||||||
String currentCity = getValueOrEmpty(pickupCity);
|
String currentCity = getValueOrEmpty(pickupCity);
|
||||||
|
|
||||||
boolean changed = !currentStreet.equals(lastPickupStreet) || !currentHouseNumber.equals(lastPickupHouseNumber)
|
// Nur true zurückgeben, wenn alle Pflichtfelder ausgefüllt sind und Validierung
|
||||||
|| !currentZip.equals(lastPickupZip) || !currentCity.equals(lastPickupCity);
|
// nötig ist
|
||||||
|
return addressesDirty && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
||||||
return changed && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prüft, ob sich die Lieferadresse geändert hat.
|
* Prüft, ob die Lieferadresse gültig ist (Pflichtfelder ausgefüllt).
|
||||||
*/
|
*/
|
||||||
private boolean hasDeliveryAddressChanged() {
|
private boolean hasDeliveryAddressChanged() {
|
||||||
String currentStreet = getValueOrEmpty(deliveryStreet);
|
String currentStreet = getValueOrEmpty(deliveryStreet);
|
||||||
String currentHouseNumber = getValueOrEmpty(deliveryHouseNumber);
|
|
||||||
String currentZip = getValueOrEmpty(deliveryZip);
|
String currentZip = getValueOrEmpty(deliveryZip);
|
||||||
String currentCity = getValueOrEmpty(deliveryCity);
|
String currentCity = getValueOrEmpty(deliveryCity);
|
||||||
|
|
||||||
boolean changed = !currentStreet.equals(lastDeliveryStreet)
|
// Nur true zurückgeben, wenn alle Pflichtfelder ausgefüllt sind und Validierung
|
||||||
|| !currentHouseNumber.equals(lastDeliveryHouseNumber) || !currentZip.equals(lastDeliveryZip)
|
// nötig ist
|
||||||
|| !currentCity.equals(lastDeliveryCity);
|
return addressesDirty && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
||||||
|
|
||||||
return changed && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getValueOrEmpty(TextField field) {
|
private String getValueOrEmpty(TextField field) {
|
||||||
return field.getValue() != null ? field.getValue().trim() : "";
|
return field.getValue() != null ? field.getValue().trim() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getComboValueOrEmpty(ComboBox<String> field) {
|
||||||
|
return field.getValue() != null ? field.getValue().trim() : "";
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zeigt den Adressvalidierungsdialog an. Die Prüfung erfolgt im Hintergrund und
|
* Zeigt den Adressvalidierungsdialog an. Die Prüfung erfolgt im Hintergrund und
|
||||||
* der Dialog wird aktualisiert, sobald die Ergebnisse vorliegen.
|
* der Dialog wird aktualisiert, sobald die Ergebnisse vorliegen.
|
||||||
@@ -2841,6 +2861,8 @@ public class AddJobView extends Main {
|
|||||||
final Button cancelButton = new Button("Zurück", e -> {
|
final Button cancelButton = new Button("Zurück", e -> {
|
||||||
dialog.close();
|
dialog.close();
|
||||||
// Im Adress-Tab bleiben
|
// Im Adress-Tab bleiben
|
||||||
|
validationDialogOpen = false;
|
||||||
|
log.debug("Dialog geschlossen (Zurück), validationDialogOpen=false");
|
||||||
});
|
});
|
||||||
cancelButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
|
cancelButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
|
||||||
|
|
||||||
@@ -2848,8 +2870,10 @@ public class AddJobView extends Main {
|
|||||||
dialog.close();
|
dialog.close();
|
||||||
// Zum Ziel-Tab wechseln
|
// Zum Ziel-Tab wechseln
|
||||||
tabSheet.setSelectedTab(targetTab);
|
tabSheet.setSelectedTab(targetTab);
|
||||||
// Gespeicherte Adressen aktualisieren
|
// Adressen als validiert markieren
|
||||||
saveCurrentAddresses();
|
markAddressesAsValidated();
|
||||||
|
validationDialogOpen = false;
|
||||||
|
log.debug("Dialog geschlossen (Weiter), validationDialogOpen=false");
|
||||||
});
|
});
|
||||||
continueButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
continueButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
||||||
|
|
||||||
@@ -3047,18 +3071,11 @@ public class AddJobView extends Main {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Speichert die aktuellen Adressen als "zuletzt geprüft".
|
* Markiert die Adressen als validiert (nach erfolgreicher Prüfung).
|
||||||
*/
|
*/
|
||||||
private void saveCurrentAddresses() {
|
private void markAddressesAsValidated() {
|
||||||
lastPickupStreet = getValueOrEmpty(pickupStreet);
|
addressesDirty = false;
|
||||||
lastPickupHouseNumber = getValueOrEmpty(pickupHouseNumber);
|
log.debug("Adressen als validiert markiert");
|
||||||
lastPickupZip = getValueOrEmpty(pickupZip);
|
|
||||||
lastPickupCity = getValueOrEmpty(pickupCity);
|
|
||||||
|
|
||||||
lastDeliveryStreet = getValueOrEmpty(deliveryStreet);
|
|
||||||
lastDeliveryHouseNumber = getValueOrEmpty(deliveryHouseNumber);
|
|
||||||
lastDeliveryZip = getValueOrEmpty(deliveryZip);
|
|
||||||
lastDeliveryCity = getValueOrEmpty(deliveryCity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -3106,4 +3123,86 @@ public class AddJobView extends Main {
|
|||||||
: 0.0;
|
: 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registriert ValueChangeListener für alle Adressfelder, um bei Änderungen die
|
||||||
|
* Streckeninformationen zurückzusetzen.
|
||||||
|
*/
|
||||||
|
private void setupAddressChangeListeners() {
|
||||||
|
// Abholadress-Felder
|
||||||
|
pickupCompany.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pickupStreet.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pickupHouseNumber.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pickupZip.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
pickupCity.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Lieferadress-Felder
|
||||||
|
deliveryCompany.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deliveryStreet.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deliveryHouseNumber.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deliveryZip.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deliveryCity.addValueChangeListener(e -> {
|
||||||
|
if (e.isFromClient()) {
|
||||||
|
resetRouteInformation();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setzt alle Streckeninformationen zurück, wenn sich Adressdaten ändern. Dies
|
||||||
|
* bewirkt, dass der Validierungsdialog beim Tab-Wechsel erneut angezeigt wird.
|
||||||
|
*/
|
||||||
|
private void resetRouteInformation() {
|
||||||
|
// Flag setzen, dass Adressen geändert wurden
|
||||||
|
addressesDirty = true;
|
||||||
|
|
||||||
|
// Routenberechnung zurücksetzen
|
||||||
|
routeCalculationResult = null;
|
||||||
|
|
||||||
|
// Validierungsergebnisse zurücksetzen
|
||||||
|
addressValidationResults.clear();
|
||||||
|
|
||||||
|
// Route-Info-Box im Preis-Tab verstecken
|
||||||
|
if (routeInfoBox != null) {
|
||||||
|
routeInfoBox.setVisible(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Streckeninformationen zurückgesetzt aufgrund von Adressänderungen");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user