• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/activity/provider/wait.php
  • Класс: Bitrix\Crm\Activity\Provider\Wait
  • Вызов: Wait::complete
static function complete(array $bindings, array $options = array())
{
	$entityMap = array();
	foreach($bindings as $binding)
	{
		$ownerTypeID = isset($binding['OWNER_TYPE_ID']) ? (int)$binding['OWNER_TYPE_ID'] : 0;
		$ownerID = isset($binding['OWNER_ID']) ? (int)$binding['OWNER_ID'] : 0;
		//if(!(\CCrmOwnerType::IsDefined($ownerTypeID) && $ownerID > 0))
		if(!($ownerID > 0
			&& ($ownerTypeID === \CCrmOwnerType::Deal || $ownerTypeID === \CCrmOwnerType::Lead))
		)
		{
			continue;
		}

		if(!isset($entityMap[$ownerTypeID]))
		{
			$entityMap[$ownerTypeID] = array();
		}
		$entityMap[$ownerTypeID][] = $ownerID;
	}

	$activityIDs = array();
	foreach($entityMap as $ownerTypeID => $ownerIDs)
	{
		$query = new Query(ActivityTable::getEntity());
		$query->addSelect('ID');
		$query->addFilter('=COMPLETED', 'N');
		$query->addFilter('=PROVIDER_ID', self::PROVIDER_ID);
		$query->addOrder('ID', 'ASC');

		if(count($ownerIDs) > 1)
		{
			$query->registerRuntimeField(
				'',
				new ReferenceField('B',
					ActivityBindingTable::getEntity(),
					array(
						'=ref.ACTIVITY_ID' => 'this.ID',
						'@ref.OWNER_ID' => new SqlExpression(implode(', ', $ownerIDs)),
						'=ref.OWNER_TYPE_ID' => new SqlExpression($ownerTypeID)
					),
					array('join_type' => 'INNER')
				)
			);
		}
		else
		{
			$query->registerRuntimeField(
				'',
				new ReferenceField('B',
					ActivityBindingTable::getEntity(),
					array(
						'=ref.ACTIVITY_ID' => 'this.ID',
						'=ref.OWNER_ID' => new SqlExpression($ownerIDs[0]),
						'=ref.OWNER_TYPE_ID' => new SqlExpression($ownerTypeID)
					),
					array('join_type' => 'INNER')
				)
			);
		}


		$dbResult = $query->exec();
		while($fields = $dbResult->fetch())
		{
			$activityIDs[] = (int)$fields['ID'];
		}
	}

	if(isset($options['SKIP_RECENT']) && $options['SKIP_RECENT'] === true)
	{
		//Removing of recent activity ID.
		array_pop($activityIDs);
	}

	foreach($activityIDs as $activityID)
	{
		\CCrmActivity::Complete(
			$activityID,
			true,
			array('REGISTER_SONET_EVENT' => true)
		);
	}
}