• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/repository/schedule/violationrulesrepository.php
  • Класс: BitrixTimemanRepositoryScheduleViolationRulesRepository
  • Вызов: ViolationRulesRepository::findFirstByScheduleIdAndEntityCode
public function findFirstByScheduleIdAndEntityCode($scheduleId, $entityCode): ?ViolationRules
{
	$possibleEntityCodesForRules = [];
	if (EntityCodesHelper::isUser($entityCode))
	{
		$userId = EntityCodesHelper::getUserId($entityCode);
		$possibleEntityCodesForRules = $this->departmentRepository->buildUserDepartmentsPriorityTrees($userId);
	}
	elseif (EntityCodesHelper::isDepartment($entityCode))
	{
		$departmentId = EntityCodesHelper::getDepartmentId($entityCode);
		$possibleEntityCodesForRules[] = $this->departmentRepository->buildDepartmentsPriorityTree($departmentId);
	}
	$uniqueCodes = [];
	foreach ($possibleEntityCodesForRules as $entityCodeValues)
	{
		$uniqueCodes[] = $entityCodeValues;
	}
	if (empty($uniqueCodes))
	{
		return null;
	}

	$uniqueCodes = array_merge(...$uniqueCodes);
	$uniqueCodes = array_unique($uniqueCodes);
	$violationRulesList = ViolationRulesTable::query()
		->addSelect('*')
		->whereIn('ENTITY_CODE', $uniqueCodes)
		->where('SCHEDULE_ID', $scheduleId)
		->exec()
		->fetchCollection();
	foreach ($possibleEntityCodesForRules as $entitiesCodesTreeByPriority)
	{
		foreach ($entitiesCodesTreeByPriority as $entityCodeFromTree)
		{
			foreach ($violationRulesList as $violationRules)
			{
				if ($violationRules->getEntityCode() === $entityCodeFromTree)
				{
					return $violationRules;
				}
			}
		}
	}

	return null;
}