Erweiterungen

This commit is contained in:
2025-09-09 20:06:27 +02:00
parent 32334657f5
commit 513707e8ea
6 changed files with 14 additions and 79 deletions

View File

@@ -78,7 +78,6 @@ public class AddJobService {
.peek(te -> te.setJobId(jobId)) .peek(te -> te.setJobId(jobId))
.toList(); .toList();
taskRepository.saveAll(prepared); taskRepository.saveAll(prepared);
modified = true;
} }
} }
@@ -95,23 +94,6 @@ public class AddJobService {
} }
} }
/**
* Aktualisiert einen bestehenden Auftrag
*/
public Job updateJob(Job job) {
try {
job.setUpdatedAt(LocalDateTime.now());
Job updatedJob = jobRepository.save(job);
log.info("Auftrag erfolgreich aktualisiert: {}", updatedJob.getJobNumber());
return updatedJob;
} catch (Exception e) {
log.error("Fehler beim Aktualisieren des Auftrags: {}", e.getMessage(), e);
throw new RuntimeException("Auftrag konnte nicht aktualisiert werden: " + e.getMessage());
}
}
/** /**
* Generiert eine eindeutige Auftragsnummer * Generiert eine eindeutige Auftragsnummer
*/ */
@@ -135,48 +117,6 @@ public class AddJobService {
return jobNumber; return jobNumber;
} }
/**
* Speichert einen Auftrag als Entwurf (für automatisches Speichern)
*/
public void saveDraft(Job job) {
try {
// Prüfen ob bereits ein Entwurf für diesen Benutzer existiert
String currentUser = securityService.getCurrentUsername();
List<Job> existingDrafts = jobRepository.findByCreatedByAndIsDraftTrue(currentUser);
Job draftJob;
if (!existingDrafts.isEmpty()) {
// Bestehenden Entwurf aktualisieren
draftJob = existingDrafts.getFirst();
updateJobFromForm(draftJob, job);
draftJob.setUpdatedAt(LocalDateTime.now());
} else {
// Neuen Entwurf erstellen
draftJob = job;
LocalDateTime now = LocalDateTime.now();
draftJob.setCreatedAt(now);
draftJob.setUpdatedAt(now);
draftJob.setStatus(JobStatus.CREATED);
draftJob.setCreatedBy(currentUser);
draftJob.setDraft(true);
// Spezielle Entwurfs-Auftragsnummer
draftJob.setJobNumber("DRAFT_" + currentUser.replace("@", "_") + "_" +
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")));
}
jobRepository.save(draftJob);
log.info("Entwurf automatisch gespeichert für Benutzer: {}", currentUser);
} catch (Exception e) {
log.error("Fehler beim Speichern des Entwurfs: {}", e.getMessage(), e);
throw new RuntimeException("Entwurf konnte nicht gespeichert werden: " + e.getMessage());
}
}
/** /**
* Aktualisiert einen bestehenden Job mit neuen Formulardaten * Aktualisiert einen bestehenden Job mit neuen Formulardaten
*/ */

View File

@@ -35,11 +35,6 @@ public class PasswordResetService {
this.mailUtil = mailUtil; this.mailUtil = mailUtil;
} }
public void initiateReset(String email, UserType userType, String baseUrl) {
// existing typed initiation
initiateResetInternal(email, userType, baseUrl);
}
/** /**
* Initiate reset without asking for user type. Looks up the email in both collections * Initiate reset without asking for user type. Looks up the email in both collections
* and only proceeds if it exists in exactly one of them. Otherwise, it silently returns * and only proceeds if it exists in exactly one of them. Otherwise, it silently returns

View File

@@ -26,9 +26,8 @@ public class ForgetPasswordView extends VerticalLayout implements BeforeEnterObs
private String token; private String token;
private PasswordResetService.UserType userType; private PasswordResetService.UserType userType;
private PasswordField newPassword; private final PasswordField newPassword;
private PasswordField confirmPassword; private final PasswordField confirmPassword;
private Button submit;
public ForgetPasswordView(PasswordResetService passwordResetService) { public ForgetPasswordView(PasswordResetService passwordResetService) {
this.passwordResetService = passwordResetService; this.passwordResetService = passwordResetService;
@@ -49,7 +48,7 @@ public class ForgetPasswordView extends VerticalLayout implements BeforeEnterObs
newPassword = new PasswordField("Neues Passwort"); newPassword = new PasswordField("Neues Passwort");
confirmPassword = new PasswordField("Passwort bestätigen"); confirmPassword = new PasswordField("Passwort bestätigen");
submit = new Button("Passwort speichern", e -> onSubmit()); Button submit = new Button("Passwort speichern", e -> onSubmit());
submit.addThemeVariants(ButtonVariant.LUMO_PRIMARY); submit.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
container.add(title, newPassword, confirmPassword, submit); container.add(title, newPassword, confirmPassword, submit);
@@ -59,8 +58,8 @@ public class ForgetPasswordView extends VerticalLayout implements BeforeEnterObs
@Override @Override
public void beforeEnter(BeforeEnterEvent event) { public void beforeEnter(BeforeEnterEvent event) {
Map<String, java.util.List<String>> params = event.getLocation().getQueryParameters().getParameters(); Map<String, java.util.List<String>> params = event.getLocation().getQueryParameters().getParameters();
String tokenParam = params.getOrDefault("token", java.util.List.of("")) .get(0); String tokenParam = params.getOrDefault("token", java.util.List.of("")).getFirst();
String typeParam = params.getOrDefault("type", java.util.List.of("")) .get(0); String typeParam = params.getOrDefault("type", java.util.List.of("")).getFirst();
this.token = tokenParam != null ? tokenParam.trim() : ""; this.token = tokenParam != null ? tokenParam.trim() : "";
this.userType = "app_user".equalsIgnoreCase(typeParam) ? PasswordResetService.UserType.APP_USER : PasswordResetService.UserType.USERS; this.userType = "app_user".equalsIgnoreCase(typeParam) ? PasswordResetService.UserType.APP_USER : PasswordResetService.UserType.USERS;

View File

@@ -19,10 +19,7 @@ import de.assecutor.votianlt.pages.service.PasswordResetService;
@AnonymousAllowed @AnonymousAllowed
public class ForgotPasswordRequestView extends VerticalLayout { public class ForgotPasswordRequestView extends VerticalLayout {
private final PasswordResetService passwordResetService;
public ForgotPasswordRequestView(PasswordResetService passwordResetService) { public ForgotPasswordRequestView(PasswordResetService passwordResetService) {
this.passwordResetService = passwordResetService;
setSizeFull(); setSizeFull();
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER); setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);

View File

@@ -37,7 +37,7 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
private final TaskRepository taskRepository; private final TaskRepository taskRepository;
private final AppUserService appUserService; private final AppUserService appUserService;
private VerticalLayout content; private final VerticalLayout content;
public JobSummaryView(JobRepository jobRepository, public JobSummaryView(JobRepository jobRepository,
CargoItemRepository cargoItemRepository, CargoItemRepository cargoItemRepository,
@@ -211,7 +211,7 @@ public class JobSummaryView extends Main implements HasUrlParameter<String> {
String wid = ci.getWidthMm() != null ? ci.getWidthMm().intValue() + " mm" : ""; String wid = ci.getWidthMm() != null ? ci.getWidthMm().intValue() + " mm" : "";
String hei = ci.getHeightMm() != null ? ci.getHeightMm().intValue() + " mm" : ""; String hei = ci.getHeightMm() != null ? ci.getHeightMm().intValue() + " mm" : "";
String combined = String.join(" x ", java.util.stream.Stream.of(len, wid, hei) String combined = String.join(" x ", java.util.stream.Stream.of(len, wid, hei)
.filter(s -> s != null && !s.isBlank()).toList()); .filter(s -> !s.isBlank()).toList());
return combined.isBlank() ? "" : combined; return combined.isBlank() ? "" : combined;
} }

View File

@@ -178,13 +178,17 @@ public class RegisterView extends VerticalLayout {
new FormLayout.ResponsiveStep("0", 2) new FormLayout.ResponsiveStep("0", 2)
); );
// Erste Reihe: Zugangsdaten // Firma zuerst, volle Breite
form.add(companyField);
form.setColspan(companyField, 2);
// Zugangsdaten
form.add(emailField, passwordField, confirmPasswordField); form.add(emailField, passwordField, confirmPasswordField);
form.setColspan(emailField, 2); form.setColspan(emailField, 2);
// Personen-/Firmendaten // Personen-/Adressdaten
form.add(firstNameField, lastNameField); form.add(firstNameField, lastNameField);
form.add(phoneField, companyField); form.add(phoneField);
form.add(streetField, houseNumberField); form.add(streetField, houseNumberField);
form.add(zipField, cityField); form.add(zipField, cityField);