3namespace Bitrix\Im\V2\Integration\HumanResources;
5use Bitrix\HumanResources\Builder\Structure\NodeDataBuilder;
6use Bitrix\HumanResources\Config\Feature;
7use Bitrix\HumanResources\Config\Storage;
8use Bitrix\HumanResources\Item\NodeRelation;
9use Bitrix\HumanResources\Service\Container;
10use Bitrix\HumanResources\Type\AccessCodeType;
11use Bitrix\HumanResources\Type\RelationEntitySubtype;
12use Bitrix\HumanResources\Type\RelationEntityType;
14use Bitrix\Im\V2\Result;
15use Bitrix\Main\Loader;
16use Bitrix\Main\UI\EntitySelector\Converter;
29 return Loader::includeModule(
'humanresources')
30 && Storage::instance()->isCompanyStructureConverted()
31 && Feature::instance()->isCrossFunctionalTeamsAvailable()
37 $entities = static::convertEntities($entities);
43 if (str_starts_with(
$entity,
'U'))
45 $users[] = (int)mb_substr(
$entity, 1);
47 if (static::isStructureNode(
$entity))
53 return [$users, $structureNodes];
58 return Loader::includeModule(
'humanresources')
59 && Storage::instance()->isCompanyStructureConverted()
67 if (empty($structureNodeIds))
72 if (!Loader::includeModule(
'humanresources'))
77 $nodeRelationService = Container::getNodeRelationService();
79 foreach ($structureNodeIds as $structureNodeId)
82 $nodeRelationService->linkEntityToNodeByAccessCode(
84 RelationEntityType::CHAT,
86 RelationEntitySubtype::fromChatType($this->chat->getType()),
102 if (empty($structureNodeIds))
107 if (!Loader::includeModule(
'humanresources'))
112 $nodeRelationService = Container::getNodeRelationService();
114 foreach ($structureNodeIds as $structureNodeId)
117 $nodeRelationService->unlinkEntityFromNodeByAccessCode(
119 RelationEntityType::CHAT,
120 $this->chat->getId(),
136 if (!Loader::includeModule(
'humanresources'))
141 $nodeRelationRepository = Container::getNodeRelationRepository();
145 $nodeRelationRepository->deleteRelationByEntityTypeAndEntityIds(
146 RelationEntityType::CHAT,
147 [(
int)$this->chat->getId()],
160 if (!Loader::includeModule(
'ui'))
165 return Converter::convertToFinderCodes($entities);
175 if (!Loader::includeModule(
'humanresources'))
180 $nodeRelationService = Container::getNodeRelationService();
182 $links = $nodeRelationService->findAllRelationsByEntityTypeAndEntityId(
183 RelationEntityType::CHAT,
184 $this->chat->getId(),
187 foreach ($links as $link)
189 if ($link->node ===
null)
194 if ($link->node->isDepartment())
196 $accessCodes[] = $link->withChildNodes
197 ? str_replace(
'D',
'DR', $link->node->accessCode)
198 : $link->node->accessCode;
200 if ($link->node->isTeam())
202 $accessCodes[] = $link->withChildNodes
203 ? AccessCodeType::HrTeamRecursiveType->buildAccessCode($link->nodeId)
204 : AccessCodeType::HrTeamType->buildAccessCode($link->nodeId);
211 private static function isStructureNode(
string $entity): bool
213 if (!Loader::includeModule(
'humanresources'))
219 ...AccessCodeType::getIntranetDepartmentTypesPrefixes(),
220 ...AccessCodeType::getTeamTypesPrefixes(),
222 foreach ($prefixes as $prefix)
224 if (str_starts_with(
$entity, $prefix))
unlink(array $structureNodeIds)
static splitEntities(array $entities)
static isTeamsAvailable()
static convertEntities(array $entities)
link(array $structureNodeIds)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)