22 private array $accessCodes;
23 private NodeRepository $nodeRepository;
30 if (!Loader::includeModule(
'humanresources'))
35 $this->accessCodes = $accessCodes;
36 $this->nodeRepository = Container::getNodeRepository();
48 $userIds = $this->getDepartmentUserIds();
51 return array_unique($userIds);
61 private function getDepartmentUserIds():
array
64 $departmentIdsWithoutRecursive = array_map(
65 static fn(
string $departmentId):
string => str_replace(
"DR",
"D", $departmentId),
69 $nodeCollection = $this->nodeRepository->findAllByAccessCodes($departmentIdsWithoutRecursive);
76 foreach ($nodeCollection as $node)
78 $departmentId = $this->getEntityIdByAccessCode($node->accessCode);
79 $withAllChildNodes = in_array(
"DR{$departmentId}", $this->accessCodes,
true);
81 $memberCollectionByNode = Container::getNodeMemberService()->getAllEmployees(
86 $memberIdsByNode = array_map(
87 static fn(NodeMember $member) => $member->entityId,
88 $memberCollectionByNode->getItemMap()
91 $userIds = [...$userIds, ...$memberIdsByNode];
94 return array_unique($userIds);
97 private function getEntityIdByAccessCode(
string $accessCode): int
99 return (
new AccessCode($accessCode))->getEntityId();
104 $ids = array_map(
static fn(
string $code):
int => (
new AccessCode(
$code))->getEntityId(), $this->accessCodes);
106 return array_filter(array_unique($ids));
114 $users = array_filter($this->accessCodes, $this->getFilter(AccessCode::TYPE_USER));
115 return new static(...$users);
123 $departments = array_filter($this->accessCodes, $this->getFilter(AccessCode::TYPE_DEPARTMENT));
124 return new static(...$departments);
127 private function getFilter(
string $entityType): Closure
129 return static fn (
string $code): bool => (new
AccessCode(
$code))->getEntityType() === $entityType;