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();
|
||||
|
||||
Reference in New Issue
Block a user