• Модуль: timeman
  • Путь к файлу: ~/bitrix/modules/timeman/lib/helper/form/schedule/scheduleformhelper.php
  • Класс: BitrixTimemanHelperFormScheduleScheduleFormHelper
  • Вызов: ScheduleFormHelper::findSchedulesByAssignmentsCodes
private function findSchedulesByAssignmentsCodes(array $codesToCheck, $showingSchedule)
{
	$schedulesCollection = new ScheduleCollection();
	if (empty($codesToCheck))
	{
		return $schedulesCollection;
	}
	$allPossibleCodes = $this->extendWithParentDepartmentCodes($codesToCheck);

	/** @var BitrixTimemanModelScheduleAssignmentUserScheduleUser[] $userAssignments */
	$userAssignments = $this->scheduleRepository->findUserAssignmentsByIds(
		EntityCodesHelper::extractUserIdsFromEntityCodes($allPossibleCodes),
		$showingSchedule ? $showingSchedule->getId() : null
	);

	foreach ($userAssignments as $userAssignment)
	{
		$schedule = $schedulesCollection->getByPrimary($userAssignment->getScheduleId());
		if (!$schedule)
		{
			$schedule = new Schedule(false);
			$schedule->setId($userAssignment->getScheduleId());
			$schedulesCollection->add($schedule);
		}
		$schedule->addToUserAssignments($userAssignment);
	}

	/** @var ScheduleDepartment[] $departmentAssignments */
	$departmentAssignments = $this->scheduleRepository->findDepartmentAssignmentsByIds(
		EntityCodesHelper::extractDepartmentIdsFromEntityCodes($allPossibleCodes),
		$showingSchedule ? $showingSchedule->getId() : null
	);
	foreach ($departmentAssignments as $departmentAssignment)
	{
		$schedule = $schedulesCollection->getByPrimary($departmentAssignment->getScheduleId());
		if (!$schedule)
		{
			$schedule = new Schedule(false);
			$schedule->setId($departmentAssignment->getScheduleId());
			$schedulesCollection->add($schedule);
		}
		$schedule->addToDepartmentAssignments($departmentAssignment);
	}

	$filter = Query::filter()->where('IS_FOR_ALL_USERS', true);
	if ($showingSchedule)
	{
		$filter->whereNot('ID', $showingSchedule->getId());
	}
	$forAllUsers = $this->scheduleRepository->findAllBy(
		['ID', 'NAME', 'IS_FOR_ALL_USERS', 'DEPARTMENT_ASSIGNMENTS', 'USER_ASSIGNMENTS',],
		$filter
	);
	foreach ($forAllUsers->getAll() as $scheduleForAllUsers)
	{
		$schedule = $schedulesCollection->getByPrimary($scheduleForAllUsers->getId());
		if (!$schedule)
		{
			$schedulesCollection->add($scheduleForAllUsers);
		}
		else
		{
			$schedule->setIsForAllUsers(true);
			$schedule->setName($scheduleForAllUsers->getName());
		}
	}

	$needExtraIds = array_diff($schedulesCollection->getIdList(), $forAllUsers->getIdList());
	if (count($needExtraIds) > 0)
	{
		$schedulesWithExtraData = $this->scheduleRepository->findAllBy(
			['ID', 'NAME', 'IS_FOR_ALL_USERS'],
			Query::filter()
				->whereIn('ID', $needExtraIds)
		);
		foreach ($schedulesWithExtraData->getAll() as $item)
		{
			$schedulesCollection->getByPrimary($item->getId())
				->setIsForAllUsers($item->getIsForAllUsers());
			$schedulesCollection->getByPrimary($item->getId())
				->setName($item->getName());
		}
	}
	return $schedulesCollection;
}