- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/activity/entity/todo.php
- Класс: Bitrix\Crm\Activity\Entity\ToDo
- Вызов: ToDo::save
public function save(array $options = []): Result
{
$result = new Result();
if ($this->getDescription() === '')
{
$result->addError(new Error(Loc::getMessage('CRM_TODO_ENTITY_ACTIVITY_EMPTY_DESCRIPTION'), 'ERROR_EMPTY_DESCRIPTION'));
return $result;
}
$fields = [
'DESCRIPTION' => $this->getDescription(),
'SUBJECT' => $this->getSubjectFromDescription($this->getDescription()),
'CALENDAR_EVENT_ID' => $this->getCalendarEventId(),
'RESPONSIBLE_ID' => $this->getResponsibleId(),
];
if ($this->getDeadline())
{
$fields['START_TIME'] = $this->getDeadline()->toString();
$fields['END_TIME'] = $this->getDeadline()->toString();
}
if (!is_null($this->getAutocompleteRule()))
{
$fields['AUTOCOMPLETE_RULE'] = $this->getAutocompleteRule();
}
$parentActivityBindings = [];
if ($this->getParentActivityId())
{
if ($this->isParentActivityCompleted($this->getParentActivityId()))
{
$result->addError(new Error(Loc::getMessage('CRM_TODO_ENTITY_ACTIVITY_PARENT_ACTIVITY_RESTRICT'), 'ERROR_PARENT_ACTIVITY_RESTRICT'));
return $result;
}
$parentActivityBindings = CCrmActivity::GetBindings($this->getParentActivityId());
if ($this->isParentActivityValid($parentActivityBindings))
{
$fields['ASSOCIATED_ENTITY_ID'] = $this->getParentActivityId();
}
}
if (!is_null($this->getStorageElementIds()))
{
$fields['STORAGE_TYPE_ID'] = StorageType::Disk;
$fields['STORAGE_ELEMENT_IDS'] = $this->getStorageElementIds();
}
$fields = array_merge($fields, $this->getAdditionalFields());
if($this->checkPermissions && !CCrmActivity::CheckUpdatePermission($this->getOwner()->getEntityTypeId(), $this->getOwner()->getEntityId()))
{
$result->addError(\Bitrix\Crm\Controller\ErrorCode::getAccessDeniedError());
return $result;
}
if ($this->getId())
{
$existedActivity = CCrmActivity::GetList(
[],
[
'=ID' => $this->getId(),
'CHECK_PERMISSIONS' => 'N',
],
false,
false,
[
'ID',
'COMPLETED',
'PROVIDER_ID',
]
)->Fetch();
if (!$existedActivity)
{
$result->addError(\Bitrix\Crm\Controller\ErrorCode::getNotFoundError());
return $result;
}
if ($existedActivity['COMPLETED'] === 'Y')
{
$result->addError(
new Error(Loc::getMessage("CRM_TODO_ENTITY_ACTIVITY_ALREADY_COMPLETED"), 'CAN_NOT_UPDATE_COMPLETED_TODO'),
);
return $result;
}
if ($existedActivity['PROVIDER_ID'] !== \Bitrix\Crm\Activity\Provider\ToDo::getId())
{
$result->addError(\Bitrix\Crm\Controller\ErrorCode::getNotFoundError());
return $result;
}
$isSuccess = CCrmActivity::Update($this->getId(), $fields, $this->checkPermissions, true, $options);
if (!$isSuccess)
{
foreach (CCrmActivity::GetErrorMessages() as $errorMessage)
{
$result->addError(new Error($errorMessage));
}
}
}
else
{
$fields['BINDINGS'] = empty($parentActivityBindings)
? [
[
'OWNER_TYPE_ID' => $this->owner->getEntityTypeId(),
'OWNER_ID' => $this->owner->getEntityId(),
],
]
: $parentActivityBindings;
$provider = new \Bitrix\Crm\Activity\Provider\ToDo();
$result = $provider->createActivity(\Bitrix\Crm\Activity\Provider\ToDo::PROVIDER_TYPE_ID_DEFAULT, $fields, $options);
if ($result->isSuccess())
{
$this->id = (int)$result->getData()['id'];
if ($this->getParentActivityId())
{
// close parent activity
if (!CCrmActivity::Complete($this->getParentActivityId(), true, ['REGISTER_SONET_EVENT' => true]))
{
$result->addError(new Error(implode(', ', CCrmActivity::GetErrorMessages()), 'CAN_NOT_COMPLETE'));
}
}
}
}
return $result;
}