- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/activity/provider/task.php
- Класс: Bitrix\Crm\Activity\Provider\Task
- Вызов: Task::updateAssociatedEntity
static function updateAssociatedEntity(
$entityId,
array $activity,
array $options = array()
)
{
// nasty, very nasty.
$skipResponsibleChange = isset($options['SKIP_RESPONSIBLE_CHANGE']) && $options['SKIP_RESPONSIBLE_CHANGE'] === true;
$skipDeadlineChange = isset($options['SKIP_DEADLINE_CHANGE']) && $options['SKIP_DEADLINE_CHANGE'] === true;
$skipRenew = isset($options['SKIP_RENEW']) && $options['SKIP_RENEW'] === true;
$skipSubject = isset($options['SKIP_SUBJECT']) && $options['SKIP_SUBJECT'] === true;
$responsibleId = isset($activity['RESPONSIBLE_ID']) ? (int)$activity['RESPONSIBLE_ID'] : 0;
$entityId = (int) $entityId;
if ($responsibleId <= 0 || $entityId <= 0 || !Loader::includeModule('tasks'))
{
return false;
}
$itemIterator = \CTasks::getByID($entityId, false);
$task = $itemIterator->fetch();
$taskFields = array();
if (!$skipSubject && isset($activity['SUBJECT']) && $activity['SUBJECT'] !== $task['TITLE'])
{
$taskFields['TITLE'] = $activity['SUBJECT'];
$taskFields['DESCRIPTION'] = $task['DESCRIPTION']; //for TAGS save
}
if (!$skipDeadlineChange && isset($activity['END_TIME'] ))
{
$taskFields['DEADLINE'] = $activity['END_TIME'];
}
if (!$skipResponsibleChange && isset($activity['RESPONSIBLE_ID']))
{
$taskFields['RESPONSIBLE_ID'] = $activity['RESPONSIBLE_ID'];
}
$result = true;
self::lockTask($entityId, self::LOCK_TYPE_UPDATE);
if (!empty($taskFields))
{
$task = new \CTasks();
$result = $task->update($entityId, $taskFields);
}
self::unlockTask($entityId);
if (isset($activity['COMPLETED']))
{
self::lockTask($entityId, self::LOCK_TYPE_COMPLETE);
try
{
$currentUser = isset($options['CURRENT_USER'])
? (int)$options['CURRENT_USER']
: \CCrmSecurityHelper::getCurrentUserID();
$taskItem = \CTaskItem::getInstance($entityId, $currentUser > 0 ? $currentUser : 1);
if($activity['COMPLETED'] === 'Y')
{
$taskItem->complete(['SKIP_ACCESS_CONTROL' => true]);
}
elseif (!$skipRenew)
{
$taskItem->renew(['SKIP_ACCESS_CONTROL' => true]);
}
$result = true;
}
catch (\TasksException $e)
{
$result = false;
}
self::unlockTask($entityId);
}
$updateResult = new Main\Result();
if (!$result)
{
$updateResult->addError(new Main\Error('Failed.'));
}
elseif(isset($activity['COMPLETED'])
&& $activity['COMPLETED'] === 'Y'
&& Crm\Settings\ActivitySettings::getCurrent()->isDeadlineSyncEnabled()
)
{
//Perform synchronization of 'DEADLINE' field
$itemIterator = \CTasks::getByID($entityId, false);
$taskFields = $itemIterator->fetch();
if(is_array($taskFields) && !empty($taskFields['CLOSED_DATE']))
{
$activity['DEADLINE'] = $activity['END_TIME'] = $taskFields['CLOSED_DATE'];
\CCrmActivity::update(
$activity['ID'],
$activity,
false,
true,
array('SKIP_ASSOCIATED_ENTITY' => true, 'REGISTER_SONET_EVENT' => true)
);
\CCrmLiveFeed::syncTaskEvent($activity, $taskFields);
}
}
return $updateResult;
}