mirror of
https://github.com/st-tu-dresden-praktikum/swt23w23
synced 2024-07-19 21:04:36 +02:00
Add working filtration of orders for admin
This commit is contained in:
parent
d6abbdcfa2
commit
ea78ec93b7
|
@ -1,16 +1,11 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
// SPDX-FileCopyrightText: 2023 swt23w23
|
||||
// SPDX-FileCopyrightText: 2023-2024 swt23w23
|
||||
package catering.order;
|
||||
|
||||
import catering.catalog.Rentable;
|
||||
import org.salespointframework.inventory.UniqueInventory;
|
||||
import org.salespointframework.inventory.UniqueInventoryItem;
|
||||
import org.salespointframework.order.Order;
|
||||
import org.salespointframework.quantity.Quantity;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.util.Streamable;
|
||||
import org.springframework.data.repository.Repository;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
public interface CustomOrderRepository extends Repository<CustomOrder, Order.OrderIdentifier>{
|
||||
|
|
|
@ -8,6 +8,7 @@ import catering.catalog.Rentable;
|
|||
import catering.staff.Employee;
|
||||
import catering.staff.JobType;
|
||||
import catering.staff.StaffManagement;
|
||||
import jakarta.validation.Valid;
|
||||
import org.salespointframework.catalog.Product;
|
||||
import org.salespointframework.inventory.UniqueInventory;
|
||||
import org.salespointframework.inventory.UniqueInventoryItem;
|
||||
|
@ -60,25 +61,29 @@ public class OrderController {
|
|||
model.addAttribute("total", myOrders.size());
|
||||
model.addAttribute("cancelled", OrderStatus.CANCELED);
|
||||
model.addAttribute("completed", OrderStatus.COMPLETED);
|
||||
model.addAttribute("form", new OrderQueryForm());
|
||||
return "orders";
|
||||
}
|
||||
|
||||
@GetMapping("/allOrders")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String orders(Model model) {
|
||||
List<CustomOrder> myOrders = orderManagement.findAll(Pageable.unpaged()).stream().collect(Collectors.toList());
|
||||
|
||||
public String ordersForAdmin(Model model, @Valid @ModelAttribute("form") OrderQueryForm form) {
|
||||
List<CustomOrder> myOrders;
|
||||
myOrders = form.getOrderStatus()
|
||||
.map(orderManagement::findBy)
|
||||
.orElse(orderManagement.findAll(Pageable.unpaged()))
|
||||
.stream().collect(Collectors.toList());
|
||||
model.addAttribute("orders", myOrders);
|
||||
model.addAttribute("total", myOrders.size());
|
||||
model.addAttribute("cancelled", OrderStatus.CANCELED);
|
||||
model.addAttribute("completed", OrderStatus.COMPLETED);
|
||||
model.addAttribute("form", form);
|
||||
return "orders";
|
||||
}
|
||||
|
||||
// For Theo: filters orders by day
|
||||
@GetMapping("/allOrders/{day}")
|
||||
@PreAuthorize("hasRole('ADMIN')")
|
||||
public String orders(@PathVariable String day, Model model) {
|
||||
public String ordersForAdmin(@PathVariable String day, Model model) {
|
||||
// Obtains an instance of LocalDate from a text string such as 2007-12-03.
|
||||
LocalDate date = LocalDate.parse(day);
|
||||
|
||||
|
@ -88,6 +93,7 @@ public class OrderController {
|
|||
|
||||
model.addAttribute("orders", myOrders);
|
||||
model.addAttribute("total", myOrders.size());
|
||||
model.addAttribute("form", new OrderQueryForm());
|
||||
return "orders";
|
||||
}
|
||||
|
||||
|
|
28
src/main/java/catering/order/OrderQueryForm.java
Normal file
28
src/main/java/catering/order/OrderQueryForm.java
Normal file
|
@ -0,0 +1,28 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
// SPDX-FileCopyrightText: 2023-2024 swt23w23
|
||||
package catering.order;
|
||||
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import org.salespointframework.order.OrderStatus;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
class OrderQueryForm {
|
||||
private @NotNull Optional<OrderStatus> orderStatus = Optional.empty();
|
||||
|
||||
public Optional<OrderStatus> getOrderStatus() {
|
||||
return orderStatus;
|
||||
}
|
||||
|
||||
public void setOrderStatus(Optional<OrderStatus> orderStatus) {
|
||||
this.orderStatus = orderStatus;
|
||||
}
|
||||
|
||||
public static OrderQueryForm of(CustomOrder order) {
|
||||
OrderQueryForm form = new OrderQueryForm();
|
||||
form.setOrderStatus(Optional.of(order.getOrderStatus()));
|
||||
return form;
|
||||
|
||||
}
|
||||
}
|
|
@ -10,6 +10,15 @@ SPDX-FileCopyrightText: 2023 swt23w23
|
|||
<body>
|
||||
<div layout:fragment="content">
|
||||
<div> <!--th:unless"${cart.empty}"-->
|
||||
<form sec:authorize="hasRole('ADMIN')" method="get" th:action="@{/allOrders}" th:object="${form}" class="mb-3">
|
||||
<label class="form-label">Bestellungsstatus</label>
|
||||
<select class="form-select" for="orderStatus" th:field="*{orderStatus}" th:errorclass="is-invalid">
|
||||
<option selected name="orderStatus" th:value="${null}" th:text="any"></option>
|
||||
<option th:each="orderStatus : ${T(org.salespointframework.order.OrderStatus).values()}" name="orderStatus" th:value="${orderStatus}" th:text="${orderStatus.toString().replace('_','-').toLowerCase()}"/>
|
||||
</select>
|
||||
<div th:if="${#fields.hasErrors('orderStatus')}" class="invalid-feedback">Ungültiger Buchungsstatus.</div>
|
||||
<button class="btn btn-primary" type="submit" th:text="${'suchen'}"></button>
|
||||
</form>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Von</th>
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.salespointframework.inventory.UniqueInventory;
|
|||
import org.salespointframework.inventory.UniqueInventoryItem;
|
||||
import org.salespointframework.order.CartItem;
|
||||
import org.salespointframework.order.OrderManagement;
|
||||
import org.salespointframework.order.OrderStatus;
|
||||
import org.salespointframework.quantity.Quantity;
|
||||
import org.salespointframework.useraccount.Password;
|
||||
import org.salespointframework.useraccount.Role;
|
||||
|
@ -103,6 +104,11 @@ public class OrderControllerIntegrationTests {
|
|||
.andExpect(content().string(containsString("Menge")))
|
||||
.andExpect(model().attributeExists("orders"));
|
||||
|
||||
mvc.perform(get("/myOrders").param("orderStatus", OrderStatus.COMPLETED.toString()).with(user("andi").roles("CUSTOMER")))
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().string(containsString("Menge")))
|
||||
.andExpect(model().attributeExists("orders"));
|
||||
|
||||
mvc.perform(get("/myOrders").with(user("admin").roles("CUSTOMER"))) // WTF SPRING!11!!!!
|
||||
.andExpect(status().isOk())
|
||||
.andExpect(content().string(containsString("0")));
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
// SPDX-FileCopyrightText: 2023 swt23w23
|
||||
// SPDX-FileCopyrightText: 2023-2024 swt23w23
|
||||
package catering.order;
|
||||
|
||||
import catering.catalog.Rentable;
|
||||
|
@ -7,6 +7,7 @@ import org.junit.jupiter.api.*;
|
|||
import org.salespointframework.inventory.UniqueInventory;
|
||||
import org.salespointframework.inventory.UniqueInventoryItem;
|
||||
import org.salespointframework.order.OrderManagement;
|
||||
import org.salespointframework.order.OrderStatus;
|
||||
import org.salespointframework.quantity.Quantity;
|
||||
import org.salespointframework.useraccount.UserAccount;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
@ -111,4 +112,13 @@ public class OrderControllerUnitTests {
|
|||
customOrderRepository)
|
||||
).isEqualTo(Quantity.of(7));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(5)
|
||||
void ordersByOrderStatus() {
|
||||
assertThat(orderManagement.findBy(OrderStatus.PAID).stream().toList()).hasSize(0);
|
||||
assertThat(orderManagement.findBy(OrderStatus.OPEN).stream().toList()).hasSize(0);
|
||||
assertThat(orderManagement.findBy(OrderStatus.COMPLETED).stream().toList()).hasSize(2);
|
||||
assertThat(orderManagement.findBy(OrderStatus.CANCELED).stream().toList()).hasSize(0);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue