• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/requests/manager.php
  • Класс: BitrixSaleDeliveryRequestsManager
  • Вызов: Manager::updateDeliveryRequest
static function updateDeliveryRequest($requestId, array $fields, bool $overwriteProperties = false): Result
{
	$result = new Result();

	if (empty($requestId))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_REQ_ID')));
		return $result;
	}

	if (isset($fields['EXTERNAL_PROPERTIES']) && !is_array($fields['EXTERNAL_PROPERTIES']))
	{
		unset($fields['EXTERNAL_PROPERTIES']);
	}

	if (
		$overwriteProperties === false
		&& isset($fields['EXTERNAL_PROPERTIES'])
		&& ($existingRequestFields = RequestTable::getById($requestId)->fetch())
	)
	{
		$existingProperties = array_column(
			is_null($existingRequestFields['EXTERNAL_PROPERTIES'])
				? []
				: $existingRequestFields['EXTERNAL_PROPERTIES'],
			null,
			'NAME'
		);
		$newProperties = array_column(
			$fields['EXTERNAL_PROPERTIES'],
			null,
			'NAME'
		);

		$fields['EXTERNAL_PROPERTIES'] = array_values(array_merge($existingProperties, $newProperties));
	}

 		$updateResult = RequestTable::update(
		$requestId,
		array_intersect_key(
			$fields,
			array_flip([
				'STATUS',
				'EXTERNAL_STATUS',
				'EXTERNAL_STATUS_SEMANTIC',
				'EXTERNAL_PROPERTIES',
			])
		)
	);
	if (!$updateResult->isSuccess())
	{
		$result->addErrors($updateResult->getErrors());
	}

	(new MainEvent(
		'sale',
		self::REQUEST_UPDATED_EVENT_CODE,
		[
			'REQUEST_ID' => $requestId,
			'FIELDS' => $fields,
			'RESULT' => $result,
		]
	))->send();

	if ($result->isSuccess() && Loader::includeModule('pull'))
	{
		CPullWatch::AddToStack(
			'SALE_DELIVERY_REQUEST',
			[
				'module_id' => 'sale',
				'command' => 'onDeliveryRequestUpdate',
				'params' => [
					'ID' => $requestId,
				]
			]
		);
	}

	return $result;
}