This commit is contained in:
Denis Natusch 2023-11-28 09:48:06 +01:00
parent c398c12592
commit 26aab5082a
No known key found for this signature in database
GPG key ID: 5E57BD8EDACFA985
4 changed files with 66 additions and 18 deletions

View file

@ -7,7 +7,10 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import jakarta.validation.Valid;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.validation.Errors;
@Controller @Controller
public class StaffController { public class StaffController {
@ -22,9 +25,26 @@ public class StaffController {
@PreAuthorize("hasRole('ADMIN')") @PreAuthorize("hasRole('ADMIN')")
public String getStaff(Model model) { public String getStaff(Model model) {
model.addAttribute("staff", staffManagement.findAll()); model.addAttribute("staff", staffManagement.findAll());
model.addAttribute("form", StaffForm.empty());
return "staff"; return "staff";
} }
public String getStaff(Model model, StaffForm form) {
model.addAttribute("staff", staffManagement.findAll());
model.addAttribute("form", form);
return "staff";
}
@PostMapping("/staff")
@PreAuthorize("hasRole('ADMIN')")
public String addEmployee(@Valid StaffForm form, Errors result, Model model) {
if (result.hasErrors()){
return getStaff(model, form);
}
staffManagement.save(new Employee(form.getName(), form.getJob()));
return "redirect:/staff";
}
@PostMapping("/staff/remove") @PostMapping("/staff/remove")
@PreAuthorize("hasRole('ADMIN')") @PreAuthorize("hasRole('ADMIN')")
public String removeEmployee(@RequestParam("id") Employee employee, Model model) { public String removeEmployee(@RequestParam("id") Employee employee, Model model) {
@ -32,25 +52,22 @@ public class StaffController {
return "redirect:/staff"; return "redirect:/staff";
} }
@PostMapping("/staff/add")
@PreAuthorize("hasRole('ADMIN')")
public String addEmployee(@RequestParam String name, @RequestParam JobType job) {
staffManagement.save(new Employee(name, job));
return "redirect:/staff";
}
@GetMapping("/staff/edit/{id}") @GetMapping("/staff/edit/{id}")
@PreAuthorize("hasRole('ADMIN')") @PreAuthorize("hasRole('ADMIN')")
public String editEmployee(@PathVariable("id") Employee employee, Model model) { public String editEmployee(@PathVariable("id") Employee employee, Model model) {
model.addAttribute("employee", employee); model.addAttribute("employee", employee);
model.addAttribute("form", new StaffForm(employee.getName(), employee.getJob()));
return "edit-staff"; return "edit-staff";
} }
@PostMapping("/staff/edit/{id}") @PostMapping("/staff/edit/{id}")
@PreAuthorize("hasRole('ADMIN')") @PreAuthorize("hasRole('ADMIN')")
public String updateEmployee(@PathVariable("id") Employee employee, @RequestParam String name, @RequestParam JobType job) { public String updateEmployee(@PathVariable("id") Employee employee, @Valid StaffForm form, Errors result) {
employee.setJob(job); if (result.hasErrors()){
employee.setName(name); return "staff/edit/" + employee.getId();
}
employee.setJob(form.getJob());
employee.setName(form.getName());
staffManagement.save(employee); staffManagement.save(employee);
return "redirect:/staff"; return "redirect:/staff";
} }

View file

@ -0,0 +1,28 @@
package catering.staff;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
public class StaffForm {
private final @NotEmpty String name;
private final @NotNull JobType job;
public StaffForm(String name, JobType job) {
this.name = name;
this.job = job;
}
public String getName() {
return name;
}
public JobType getJob() {
return job;
}
public static StaffForm empty() {
return new StaffForm("", JobType.SERVICE);
}
}

View file

@ -7,17 +7,18 @@
</head> </head>
<body> <body>
<div layout:fragment="content"> <div layout:fragment="content">
<form th:object="${employee}" method="post"> <form th:object="${form}" method="post">
<input type="hidden" th:field="*{id}" />
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="name">Name:</label> <label class="form-label" for="name">Name:</label>
<input class="form-control" type="text" th:field="*{name}" required /> <input class="form-control" type="text" th:field="*{name}" th:errorclass="is-invalid" required/>
<div th:if="${#fields.hasErrors('name')}" class="invalid-feedback">Ungültiger Name</div>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="job">Beruf:</label> <label class="form-label" for="job">Beruf:</label>
<select name="job" class="form-select"> <select th:field="*{job}" class="form-select">
<option th:each="type : ${T(catering.staff.JobType).values()}" th:value="${type}" th:selected="${type.name() == employee.job.name()}" th:text="${type}" required></option> <option th:each="type : ${T(catering.staff.JobType).values()}" th:value="${type}" th:selected="${type.name() == form.job.name()}" th:text="${type}" required></option>
</select> </select>
<div th:if="${#fields.hasErrors('job')}" class="invalid-feedback">Ungültiger Job</div>
</div> </div>
<button class="btn btn-primary" type="submit">Speichern</button> <button class="btn btn-primary" type="submit">Speichern</button>
<a th:href="@{/staff}"><button type="button" class="btn btn-danger">Abbrechen</button></a> <a th:href="@{/staff}"><button type="button" class="btn btn-danger">Abbrechen</button></a>

View file

@ -37,16 +37,18 @@
</div> </div>
<div> <div>
<h2>Personal Hinzufügen</h2> <h2>Personal Hinzufügen</h2>
<form action="/staff/add" method="post"> <form th:object="${form}" th:action="@{/staff}" method="post">
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="name">Name</label> <label class="form-label" for="name">Name</label>
<input class="form-control" type="text" name="name" required /> <input class="form-control" type="text" th:field="*{name}" th:errorclass="is-invalid" required>
<div th:if="${#fields.hasErrors('name')}" class="invalid-feedback">Ungültiger Name</div>
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="form-label" for="job">Beruf:</label> <label class="form-label" for="job">Beruf:</label>
<select name="job" class="form-select"> <select th:field="*{job}" class="form-select" th:errorclass="is-invalid">
<option th:each="type : ${T(catering.staff.JobType).values()}" th:value="${type}" th:text="${type}" required></option> <option th:each="type : ${T(catering.staff.JobType).values()}" th:value="${type}" th:text="${type}" required></option>
</select> </select>
<div th:if="${#fields.hasErrors('job')}" class="invalid-feedback">Ungültiger Job</div>
</div> </div>
<button class="btn btn-primary" type="submit">Hinzufügen</button> <button class="btn btn-primary" type="submit">Hinzufügen</button>
</form> </form>