• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/service/worktime/violation/fixedscheduleviolationbuilder.php
  • Класс: BitrixTimemanServiceWorktimeViolationFixedScheduleViolationBuilder
  • Вызов: FixedScheduleViolationBuilder::findActiveUsers
protected function findActiveUsers(Schedule $schedule, $checkingEntityCode)
{
	/** @var UserCollection $userCollection */
	$userCollection = new UserCollection();
	if (EntityCodesHelper::getAllUsersCode() === $checkingEntityCode)
	{
		return $this->scheduleProvider->findActiveUsers($schedule);
	}
	$users = $this->scheduleProvider->findActiveScheduleUserIds($schedule);

	if (EntityCodesHelper::isUser($checkingEntityCode))
	{
		if (in_array(EntityCodesHelper::getUserId($checkingEntityCode), $users, true))
		{
			$user = $this->scheduleProvider->getUsersBaseQuery()
				->where('ID', EntityCodesHelper::getUserId($checkingEntityCode))
				->exec()
				->fetchObject();
			if ($user)
			{
				$userCollection->add($user);
			}
		}
	}
	elseif (EntityCodesHelper::isDepartment($checkingEntityCode))
	{
		$includedUsers = [];
		$depId = EntityCodesHelper::getDepartmentId($checkingEntityCode);
		$departmentsIds = $this->departmentRepository->getAllChildDepartmentsIds($depId);
		$departmentsIds[] = [$depId];
		foreach ($departmentsIds as $departmentId)
		{
			$depUserIds = $this->departmentRepository->getUsersOfDepartment($departmentId);
			foreach ($userCollection->getAll() as $user)
			{
				if (in_array($user->getId(), $depUserIds, true))
				{
					$includedUsers[$user->getId()] = true;
				}
			}
		}
		$includedUsers = array_keys($includedUsers);
		foreach ($userCollection->getAll() as $user)
		{
			if (!in_array($user->getId(), $includedUsers, true))
			{
				$userCollection->removeByPrimary($user->getId());
			}
		}
	}
	return $userCollection;
}