Erweiterungen

This commit is contained in:
2025-08-14 20:03:46 +02:00
parent 8b5c22d0b7
commit 2ef3a5d7d2
5 changed files with 9 additions and 18 deletions

View File

@@ -43,7 +43,6 @@ public final class MainLayout extends AppLayout {
} }
private Div createHeader() { private Div createHeader() {
// TODO Replace with real application logo and name
var appLogo = VaadinIcon.CUBES.create(); var appLogo = VaadinIcon.CUBES.create();
appLogo.addClassNames(TextColor.PRIMARY, IconSize.LARGE); appLogo.addClassNames(TextColor.PRIMARY, IconSize.LARGE);
@@ -86,7 +85,7 @@ public final class MainLayout extends AppLayout {
SideNavItem statistics = new SideNavItem("Statistik", "6", new Icon(VaadinIcon.COG)); SideNavItem statistics = new SideNavItem("Statistik", "6", new Icon(VaadinIcon.COG));
verwaltungContent.add(jobs, customers, appUsers, devices, invoices, statistics); verwaltungContent.add(jobs, customers, appUsers, devices, invoices, statistics);
verwaltungDetails.setContent(verwaltungContent); verwaltungDetails.add(verwaltungContent);
// Create Details component for "Verwaltung" with collapsible list // Create Details component for "Verwaltung" with collapsible list
Details userDetails = new Details(); Details userDetails = new Details();
@@ -104,7 +103,7 @@ public final class MainLayout extends AppLayout {
SideNavItem imprint = new SideNavItem("Impressum", "9", new Icon(VaadinIcon.COG)); SideNavItem imprint = new SideNavItem("Impressum", "9", new Icon(VaadinIcon.COG));
userContent.add(profile, myInvoices, imprint); userContent.add(profile, myInvoices, imprint);
userDetails.setContent(userContent); userDetails.add(userContent);
// Create a vertical layout to hold both regular menu items and collapsible sections // Create a vertical layout to hold both regular menu items and collapsible sections
VerticalLayout navContainer = new VerticalLayout(); VerticalLayout navContainer = new VerticalLayout();

View File

@@ -68,8 +68,7 @@ public class AddJobService {
copy.setHeightMm(ci.getHeightMm()); copy.setHeightMm(ci.getHeightMm());
return copy; return copy;
}).toList(); }).toList();
var savedItems = cargoItemRepository.saveAll(itemsWithJob); cargoItemRepository.saveAll(itemsWithJob);
var cargoIds = savedItems.stream().map(CargoItem::getId).toList();
modified = true; modified = true;
// Tasks separat speichern und referenzieren // Tasks separat speichern und referenzieren
if (transientTasks != null && !transientTasks.isEmpty()) { if (transientTasks != null && !transientTasks.isEmpty()) {
@@ -78,8 +77,7 @@ public class AddJobService {
.filter(te -> te.getText() != null && !te.getText().isBlank()) .filter(te -> te.getText() != null && !te.getText().isBlank())
.peek(te -> te.setJobId(jobId)) .peek(te -> te.setJobId(jobId))
.toList(); .toList();
var savedTasks = taskRepository.saveAll(prepared); taskRepository.saveAll(prepared);
var taskIds = savedTasks.stream().map(de.assecutor.votianlt.model.TaskEntry::getId).toList();
modified = true; modified = true;
} }
} }
@@ -169,7 +167,8 @@ public class AddJobService {
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss"))); LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss")));
} }
Job savedDraft = jobRepository.save(draftJob); jobRepository.save(draftJob);
log.info("Entwurf automatisch gespeichert für Benutzer: {}", currentUser); log.info("Entwurf automatisch gespeichert für Benutzer: {}", currentUser);
} catch (Exception e) { } catch (Exception e) {

View File

@@ -2,7 +2,6 @@ package de.assecutor.votianlt.pages.service;
import de.assecutor.votianlt.model.Customer; import de.assecutor.votianlt.model.Customer;
import de.assecutor.votianlt.pages.domain.CustomerRepository; import de.assecutor.votianlt.pages.domain.CustomerRepository;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;

View File

@@ -12,21 +12,20 @@ import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.PageTitle; import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route; import com.vaadin.flow.router.Route;
import com.vaadin.flow.server.auth.AnonymousAllowed; import com.vaadin.flow.server.auth.AnonymousAllowed;
import de.assecutor.votianlt.pages.service.RegisterService;
import de.assecutor.votianlt.pages.service.UserService; import de.assecutor.votianlt.pages.service.UserService;
import java.time.Clock;
@Route("register") @Route("register")
@PageTitle("Bei VotianLT registrieren") @PageTitle("Bei VotianLT registrieren")
@AnonymousAllowed @AnonymousAllowed
public class RegisterView extends VerticalLayout { public class RegisterView extends VerticalLayout {
private final UserService userService;
private TextField emailField; private TextField emailField;
private PasswordField passwordField; private PasswordField passwordField;
private PasswordField confirmPasswordField; private PasswordField confirmPasswordField;
private Button submitButton; private Button submitButton;
public RegisterView() { public RegisterView(UserService userService) {
this.userService = userService;
// Layout-Konfiguration für vollständige Zentrierung // Layout-Konfiguration für vollständige Zentrierung
setSizeFull(); setSizeFull();
setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER); setJustifyContentMode(FlexComponent.JustifyContentMode.CENTER);

View File

@@ -3,16 +3,11 @@ package de.assecutor.votianlt.security;
import de.assecutor.votianlt.model.User; import de.assecutor.votianlt.model.User;
import de.assecutor.votianlt.pages.service.UserService; import de.assecutor.votianlt.pages.service.UserService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Collections;
@Service @Service
public class UserDetailsServiceImpl implements UserDetailsService { public class UserDetailsServiceImpl implements UserDetailsService {