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')")
|
||||
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(
|
||||
employeeStoreRepository.findActiveByStoreStoreIdOrderByEmployeeEmployeeIdAsc(storeId).stream()
|
||||
employees.stream()
|
||||
.filter(this::isAssignableEmployee)
|
||||
.map(this::toEmployeeOption)
|
||||
.distinct()
|
||||
.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")
|
||||
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());
|
||||
}
|
||||
|
||||
@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
|
||||
void getStoreEmployeesExcludesInactiveStaffUsers() {
|
||||
StoreLocation store = new StoreLocation();
|
||||
|
||||
@@ -121,4 +121,12 @@ public class DropdownApi {
|
||||
}
|
||||
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(() -> {
|
||||
try {
|
||||
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(() -> {
|
||||
cbEmployee.setItems(FXCollections.observableArrayList(employees));
|
||||
applySelectedEmployee();
|
||||
|
||||
@@ -427,9 +427,12 @@ public class AppointmentDialogController {
|
||||
new Thread(() -> {
|
||||
try {
|
||||
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(() -> {
|
||||
cbEmployee.setItems(FXCollections.observableArrayList(employees));
|
||||
applySelectedEmployee();
|
||||
|
||||
Reference in New Issue
Block a user