Allow cross-store staff selection
This commit is contained in:
@@ -156,13 +156,20 @@ public class DropdownController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/stores/{storeId}/employees")
|
@GetMapping({"/stores/{storeId}/employees", "/employees"})
|
||||||
@PreAuthorize("hasAnyRole('CUSTOMER', 'STAFF', 'ADMIN')")
|
@PreAuthorize("hasAnyRole('CUSTOMER', 'STAFF', 'ADMIN')")
|
||||||
public ResponseEntity<List<DropdownOption>> getStoreEmployees(@PathVariable Long storeId) {
|
public ResponseEntity<List<DropdownOption>> getStoreEmployees(@PathVariable(required = false) Long storeId) {
|
||||||
|
List<EmployeeStore> employees;
|
||||||
|
if (storeId == null || storeId == 0) {
|
||||||
|
employees = employeeStoreRepository.findActiveAllOrderByEmployeeEmployeeIdAsc();
|
||||||
|
} else {
|
||||||
|
employees = employeeStoreRepository.findActiveByStoreStoreIdOrderByEmployeeEmployeeIdAsc(storeId);
|
||||||
|
}
|
||||||
return ResponseEntity.ok(
|
return ResponseEntity.ok(
|
||||||
employeeStoreRepository.findActiveByStoreStoreIdOrderByEmployeeEmployeeIdAsc(storeId).stream()
|
employees.stream()
|
||||||
.filter(this::isAssignableEmployee)
|
.filter(this::isAssignableEmployee)
|
||||||
.map(this::toEmployeeOption)
|
.map(this::toEmployeeOption)
|
||||||
|
.distinct()
|
||||||
.collect(Collectors.toList())
|
.collect(Collectors.toList())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,4 +15,7 @@ public interface EmployeeStoreRepository extends JpaRepository<EmployeeStore, Em
|
|||||||
|
|
||||||
@Query("SELECT es FROM EmployeeStore es WHERE es.store.storeId = :storeId AND es.employee.isActive = true ORDER BY es.employee.employeeId ASC")
|
@Query("SELECT es FROM EmployeeStore es WHERE es.store.storeId = :storeId AND es.employee.isActive = true ORDER BY es.employee.employeeId ASC")
|
||||||
List<EmployeeStore> findActiveByStoreStoreIdOrderByEmployeeEmployeeIdAsc(@Param("storeId") Long storeId);
|
List<EmployeeStore> findActiveByStoreStoreIdOrderByEmployeeEmployeeIdAsc(@Param("storeId") Long storeId);
|
||||||
|
|
||||||
|
@Query("SELECT es FROM EmployeeStore es WHERE es.employee.isActive = true ORDER BY es.employee.employeeId ASC")
|
||||||
|
List<EmployeeStore> findActiveAllOrderByEmployeeEmployeeIdAsc();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -125,6 +125,33 @@ class DropdownControllerTest {
|
|||||||
assertEquals(Long.valueOf(7L), response.getBody().get(0).getId());
|
assertEquals(Long.valueOf(7L), response.getBody().get(0).getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void getStoreEmployeesReturnsAllStaffWhenStoreIdIsNull() {
|
||||||
|
StoreLocation store = new StoreLocation();
|
||||||
|
store.setStoreId(1L);
|
||||||
|
|
||||||
|
Employee staffEmployee = new Employee();
|
||||||
|
staffEmployee.setEmployeeId(7L);
|
||||||
|
staffEmployee.setUserId(7L);
|
||||||
|
staffEmployee.setFirstName("Alex");
|
||||||
|
staffEmployee.setLastName("Jones");
|
||||||
|
staffEmployee.setIsActive(true);
|
||||||
|
|
||||||
|
User staffUser = new User();
|
||||||
|
staffUser.setId(7L);
|
||||||
|
staffUser.setRole(User.Role.STAFF);
|
||||||
|
staffUser.setActive(true);
|
||||||
|
|
||||||
|
when(employeeStoreRepository.findActiveAllOrderByEmployeeEmployeeIdAsc())
|
||||||
|
.thenReturn(List.of(new EmployeeStore(staffEmployee, store)));
|
||||||
|
when(userRepository.findById(7L)).thenReturn(Optional.of(staffUser));
|
||||||
|
|
||||||
|
var response = controller.getStoreEmployees(null);
|
||||||
|
|
||||||
|
assertEquals(1, response.getBody().size());
|
||||||
|
assertEquals(Long.valueOf(7L), response.getBody().get(0).getId());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void getStoreEmployeesExcludesInactiveStaffUsers() {
|
void getStoreEmployeesExcludesInactiveStaffUsers() {
|
||||||
StoreLocation store = new StoreLocation();
|
StoreLocation store = new StoreLocation();
|
||||||
|
|||||||
@@ -121,4 +121,12 @@ public class DropdownApi {
|
|||||||
}
|
}
|
||||||
return apiClient.getObjectMapper().readValue(response, new TypeReference<List<DropdownOption>>() {});
|
return apiClient.getObjectMapper().readValue(response, new TypeReference<List<DropdownOption>>() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<DropdownOption> getEmployees() throws Exception {
|
||||||
|
String response = apiClient.getRawResponse("/api/v1/dropdowns/employees");
|
||||||
|
if (response == null || response.isEmpty()) {
|
||||||
|
throw new IllegalStateException("Empty response from all employees endpoint");
|
||||||
|
}
|
||||||
|
return apiClient.getObjectMapper().readValue(response, new TypeReference<List<DropdownOption>>() {});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,12 @@ public class AdoptionDialogController {
|
|||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
Long storeId = UserSession.getInstance().getStoreId();
|
Long storeId = UserSession.getInstance().getStoreId();
|
||||||
List<DropdownOption> employees = storeId != null && storeId > 0 ? DropdownApi.getInstance().getStoreEmployees(storeId) : List.of();
|
List<DropdownOption> employees;
|
||||||
|
if (storeId != null && storeId > 0) {
|
||||||
|
employees = DropdownApi.getInstance().getStoreEmployees(storeId);
|
||||||
|
} else {
|
||||||
|
employees = DropdownApi.getInstance().getEmployees();
|
||||||
|
}
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
cbEmployee.setItems(FXCollections.observableArrayList(employees));
|
cbEmployee.setItems(FXCollections.observableArrayList(employees));
|
||||||
applySelectedEmployee();
|
applySelectedEmployee();
|
||||||
|
|||||||
@@ -427,9 +427,12 @@ public class AppointmentDialogController {
|
|||||||
new Thread(() -> {
|
new Thread(() -> {
|
||||||
try {
|
try {
|
||||||
Long storeId = UserSession.getInstance().getStoreId();
|
Long storeId = UserSession.getInstance().getStoreId();
|
||||||
List<DropdownOption> employees = storeId != null && storeId > 0
|
List<DropdownOption> employees;
|
||||||
? DropdownApi.getInstance().getStoreEmployees(storeId)
|
if (storeId != null && storeId > 0) {
|
||||||
: List.of();
|
employees = DropdownApi.getInstance().getStoreEmployees(storeId);
|
||||||
|
} else {
|
||||||
|
employees = DropdownApi.getInstance().getEmployees();
|
||||||
|
}
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
cbEmployee.setItems(FXCollections.observableArrayList(employees));
|
cbEmployee.setItems(FXCollections.observableArrayList(employees));
|
||||||
applySelectedEmployee();
|
applySelectedEmployee();
|
||||||
|
|||||||
Reference in New Issue
Block a user