Erweiterungen
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user