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