- Модуль: 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;
}