Erweiterungen
This commit is contained in:
@@ -174,14 +174,8 @@ public class AddJobView extends Main {
|
||||
// Adressvalidierung
|
||||
private final Map<String, AddressValidationResult> addressValidationResults = new HashMap<>();
|
||||
private RouteCalculationResult routeCalculationResult;
|
||||
private String lastPickupStreet = "";
|
||||
private String lastPickupHouseNumber = "";
|
||||
private String lastPickupZip = "";
|
||||
private String lastPickupCity = "";
|
||||
private String lastDeliveryStreet = "";
|
||||
private String lastDeliveryHouseNumber = "";
|
||||
private String lastDeliveryZip = "";
|
||||
private String lastDeliveryCity = "";
|
||||
private boolean addressesDirty = true; // true = Adressen müssen validiert werden
|
||||
private boolean validationDialogOpen = false; // true = Dialog ist gerade geöffnet
|
||||
private TabSheet tabSheet;
|
||||
|
||||
public AddJobView(AddJobService addJobService, AddCustomerService addCustomerService,
|
||||
@@ -240,6 +234,10 @@ public class AddJobView extends Main {
|
||||
savePickupAddress.setValue(true);
|
||||
return;
|
||||
}
|
||||
|
||||
// Streckeninformationen zurücksetzen, da sich die Abholadresse ändert
|
||||
resetRouteInformation();
|
||||
|
||||
Customer c = customerLabelToEntity.get(selected);
|
||||
if (c == null)
|
||||
return;
|
||||
@@ -421,6 +419,9 @@ public class AddJobView extends Main {
|
||||
submitButton = new Button("Auftrag anlegen", event -> submit());
|
||||
submitButton.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
|
||||
submitButton.setEnabled(false);
|
||||
|
||||
// Listener für Adressänderungen registrieren
|
||||
setupAddressChangeListeners();
|
||||
}
|
||||
|
||||
// Testdaten entfernt
|
||||
@@ -973,6 +974,9 @@ public class AddJobView extends Main {
|
||||
return;
|
||||
}
|
||||
|
||||
// Streckeninformationen zurücksetzen, da sich die Adresse ändert
|
||||
resetRouteInformation();
|
||||
|
||||
// Find the first customer with this company name
|
||||
Optional<Customer> matchingCustomer = allCustomers.stream()
|
||||
.filter(c -> selectedCompany.equals(c.getCompanyName())).findFirst();
|
||||
@@ -1041,6 +1045,9 @@ public class AddJobView extends Main {
|
||||
String customValue = event.getDetail();
|
||||
companyField.setValue(customValue);
|
||||
|
||||
// Streckeninformationen zurücksetzen
|
||||
resetRouteInformation();
|
||||
|
||||
// Reactivate save checkbox for custom values
|
||||
if (isPickup) {
|
||||
savePickupAddress.setValue(true);
|
||||
@@ -1833,6 +1840,9 @@ public class AddJobView extends Main {
|
||||
* Leert alle Felder im Formular
|
||||
*/
|
||||
private void clearAllFields() {
|
||||
// Streckeninformationen zurücksetzen
|
||||
resetRouteInformation();
|
||||
|
||||
// Customer selection
|
||||
customerSelection.clear();
|
||||
|
||||
@@ -2732,60 +2742,70 @@ public class AddJobView extends Main {
|
||||
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
|
||||
boolean pickupChanged = hasPickupAddressChanged();
|
||||
boolean deliveryChanged = hasDeliveryAddressChanged();
|
||||
|
||||
log.debug("Adressänderung: pickupChanged={}, deliveryChanged={}", pickupChanged, deliveryChanged);
|
||||
|
||||
if (!pickupChanged && !deliveryChanged) {
|
||||
// Adressen nicht geändert, nichts zu tun
|
||||
log.debug("Keine Adressänderung - Dialog wird nicht angezeigt");
|
||||
return;
|
||||
}
|
||||
|
||||
// Tab-Wechsel vorübergehend verhindern, indem wir zurück zum Adress-Tab
|
||||
// wechseln
|
||||
// Der Dialog wird angezeigt und bei Bestätigung wird der Tab gewechselt
|
||||
event.unregisterListener();
|
||||
// Tab-Wechsel vorübergehend verhindern
|
||||
// Flag setzen, Dialog anzeigen, und Tab zurücksetzen
|
||||
validationDialogOpen = true;
|
||||
tabSheet.setSelectedTab(addressesTab);
|
||||
|
||||
// Validierungsdialog anzeigen
|
||||
log.debug("Zeige Validierungsdialog an");
|
||||
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() {
|
||||
String currentStreet = getValueOrEmpty(pickupStreet);
|
||||
String currentHouseNumber = getValueOrEmpty(pickupHouseNumber);
|
||||
String currentZip = getValueOrEmpty(pickupZip);
|
||||
String currentCity = getValueOrEmpty(pickupCity);
|
||||
|
||||
boolean changed = !currentStreet.equals(lastPickupStreet) || !currentHouseNumber.equals(lastPickupHouseNumber)
|
||||
|| !currentZip.equals(lastPickupZip) || !currentCity.equals(lastPickupCity);
|
||||
|
||||
return changed && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
||||
// Nur true zurückgeben, wenn alle Pflichtfelder ausgefüllt sind und Validierung
|
||||
// nötig ist
|
||||
return addressesDirty && !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() {
|
||||
String currentStreet = getValueOrEmpty(deliveryStreet);
|
||||
String currentHouseNumber = getValueOrEmpty(deliveryHouseNumber);
|
||||
String currentZip = getValueOrEmpty(deliveryZip);
|
||||
String currentCity = getValueOrEmpty(deliveryCity);
|
||||
|
||||
boolean changed = !currentStreet.equals(lastDeliveryStreet)
|
||||
|| !currentHouseNumber.equals(lastDeliveryHouseNumber) || !currentZip.equals(lastDeliveryZip)
|
||||
|| !currentCity.equals(lastDeliveryCity);
|
||||
|
||||
return changed && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
||||
// Nur true zurückgeben, wenn alle Pflichtfelder ausgefüllt sind und Validierung
|
||||
// nötig ist
|
||||
return addressesDirty && !currentStreet.isEmpty() && !currentZip.isEmpty() && !currentCity.isEmpty();
|
||||
}
|
||||
|
||||
private String getValueOrEmpty(TextField field) {
|
||||
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
|
||||
* 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 -> {
|
||||
dialog.close();
|
||||
// Im Adress-Tab bleiben
|
||||
validationDialogOpen = false;
|
||||
log.debug("Dialog geschlossen (Zurück), validationDialogOpen=false");
|
||||
});
|
||||
cancelButton.addThemeVariants(ButtonVariant.LUMO_TERTIARY);
|
||||
|
||||
@@ -2848,8 +2870,10 @@ public class AddJobView extends Main {
|
||||
dialog.close();
|
||||
// Zum Ziel-Tab wechseln
|
||||
tabSheet.setSelectedTab(targetTab);
|
||||
// Gespeicherte Adressen aktualisieren
|
||||
saveCurrentAddresses();
|
||||
// Adressen als validiert markieren
|
||||
markAddressesAsValidated();
|
||||
validationDialogOpen = false;
|
||||
log.debug("Dialog geschlossen (Weiter), validationDialogOpen=false");
|
||||
});
|
||||
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() {
|
||||
lastPickupStreet = getValueOrEmpty(pickupStreet);
|
||||
lastPickupHouseNumber = getValueOrEmpty(pickupHouseNumber);
|
||||
lastPickupZip = getValueOrEmpty(pickupZip);
|
||||
lastPickupCity = getValueOrEmpty(pickupCity);
|
||||
|
||||
lastDeliveryStreet = getValueOrEmpty(deliveryStreet);
|
||||
lastDeliveryHouseNumber = getValueOrEmpty(deliveryHouseNumber);
|
||||
lastDeliveryZip = getValueOrEmpty(deliveryZip);
|
||||
lastDeliveryCity = getValueOrEmpty(deliveryCity);
|
||||
private void markAddressesAsValidated() {
|
||||
addressesDirty = false;
|
||||
log.debug("Adressen als validiert markiert");
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3106,4 +3123,86 @@ public class AddJobView extends Main {
|
||||
: 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