• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/timeline/dealcontroller.php
  • Класс: Bitrix\Crm\Timeline\DealController
  • Вызов: DealController::prepareHistoryDataModel
public function prepareHistoryDataModel(array $data, array $options = null)
{
	$typeID = isset($data['TYPE_ID']) ? (int)$data['TYPE_ID'] : TimelineType::UNDEFINED;
	$typeCategoryId = (int)($data['TYPE_CATEGORY_ID'] ?? LogMessageType::UNDEFINED);
	$settings = $data['SETTINGS'] ?? [];
	$base = $settings['BASE'] ?? [];
	$culture = Main\Context::getCurrent()->getCulture();
	$associatedEntityTypeID = isset($data['ASSOCIATED_ENTITY_TYPE_ID'])
		? (int)$data['ASSOCIATED_ENTITY_TYPE_ID']
		: \CCrmOwnerType::Deal;

	if (isset($settings[SignDocument::DOCUMENT_DATA_KEY]))
	{
		$data[SignDocument::DOCUMENT_DATA_KEY] = $settings[SignDocument::DOCUMENT_DATA_KEY];
	}

	if (isset($settings[SignDocument::MESSAGE_DATA_KEY]))
	{
		$data[SignDocument::MESSAGE_DATA_KEY] = $settings[SignDocument::MESSAGE_DATA_KEY];
	}

	if($typeID === TimelineType::CREATION)
	{
		$data['TITLE'] =  Loc::getMessage('CRM_DEAL_CREATION');

		if($associatedEntityTypeID === \CCrmOwnerType::SuspendedDeal)
		{
			$data['LEGEND'] = Loc::getMessage('CRM_DEAL_MOVING_TO_RECYCLEBIN');
		}
		else
		{
			$entityTypeId = $base['ENTITY_TYPE_ID'] ?? 0;
			$caption = $entityTypeId <= 0
				? ''
				: Loc::getMessage(sprintf('CRM_DEAL_BASE_CAPTION_%s', \CCrmOwnerType::ResolveName($entityTypeId)));
			$this->applySettingsBaseData($data, $base, $caption);

			$order = $settings['ORDER'] ?? null;
			if ($order)
			{
				$orderId = $order['ENTITY_ID'];
				$order = Order::load($orderId);
				if ($order)
				{
					$data['ASSOCIATED_ENTITY']['ORDER']['ID'] = $orderId;
					$data['ASSOCIATED_ENTITY']['ORDER']['SHOW_URL'] = Crm\Service\Sale\EntityLinkBuilder\EntityLinkBuilder::getInstance()->getOrderDetailsLink(
						$orderId,
						Crm\Service\Sale\EntityLinkBuilder\Context::getShopForcedContext()
					);
					$data['ASSOCIATED_ENTITY']['ORDER']['SUM'] = \CCrmCurrency::MoneyToString(
						$order->getPrice(),
						$order->getCurrency()
					);
					$data['ASSOCIATED_ENTITY']['ORDER']['ORDER_DATE'] = \FormatDate(
						$culture->getLongDateFormat(), $order->getDateInsert()->getTimestamp()
					);
					$data['ASSOCIATED_ENTITY']['ORDER']['FIELD_VALUES'] = $order->getFieldValues();
				}
			}
		}
		unset($data['SETTINGS']);
	}
	elseif($typeID === TimelineType::MODIFICATION)
	{
		$fieldName = isset($settings['FIELD']) ? $settings['FIELD'] : '';
		if($fieldName === 'STAGE_ID')
		{
			$data['TITLE'] =  Loc::getMessage('CRM_DEAL_MODIFICATION_STAGE');
			$data['START_NAME'] = isset($settings['START_NAME']) ? $settings['START_NAME'] : $settings['START'];
			$data['FINISH_NAME'] = isset($settings['FINISH_NAME']) ? $settings['FINISH_NAME'] : $settings['FINISH'];
		}
		if ($fieldName === 'CATEGORY_ID')
		{
			$data['TITLE'] =  Loc::getMessage('CRM_DEAL_MODIFICATION_CATEGORY');
			$data['START_CATEGORY_NAME'] = $settings['START_CATEGORY_NAME'];
			$data['FINISH_CATEGORY_NAME'] = $settings['FINISH_CATEGORY_NAME'];
			$data['START_STAGE_NAME'] = $settings['START_STAGE_NAME'];
			$data['FINISH_STAGE_NAME'] = $settings['FINISH_STAGE_NAME'];
		}
		if($fieldName === 'IS_MANUAL_OPPORTUNITY')
		{
			$data['TITLE'] =  Loc::getMessage('CRM_DEAL_MODIFICATION_IS_MANUAL_OPPORTUNITY');
			$data['START_NAME'] = isset($settings['START_NAME']) ? $settings['START_NAME'] : $settings['START'];
			$data['FINISH_NAME'] = isset($settings['FINISH_NAME']) ? $settings['FINISH_NAME'] : $settings['FINISH'];
			$data['START'] = $settings['START'];
			$data['FINISH'] = $settings['FINISH'];
		}
		$data['MODIFIED_FIELD'] = $fieldName;
		unset($data['SETTINGS']);
	}
	elseif($typeID === TimelineType::CONVERSION)
	{
		$data['TITLE'] =  Loc::getMessage('CRM_DEAL_CREATION_BASED_ON');
		$entities = isset($settings['ENTITIES']) && is_array($settings['ENTITIES'])
			? $settings['ENTITIES'] : array();

		$entityInfos = array();
		foreach($entities as $entityData)
		{
			$entityTypeID = isset($entityData['ENTITY_TYPE_ID']) ? (int)$entityData['ENTITY_TYPE_ID'] : 0;
			$entityID = isset($entityData['ENTITY_ID']) ? (int)$entityData['ENTITY_ID'] : 0;

			if(\CCrmOwnerType::IsDefined($entityTypeID))
			{
				\CCrmOwnerType::TryGetEntityInfo($entityTypeID, $entityID, $entityInfo, false);
				$entityInfo['ENTITY_TYPE_ID'] = $entityTypeID;
				$entityInfo['ENTITY_ID'] = $entityID;
				$entityInfos[] = $entityInfo;
			}
		}

		$data['ENTITIES'] = $entityInfos;
		unset($data['SETTINGS']);
	}
	elseif($typeID === TimelineType::RESTORATION)
	{
		$data['TITLE'] =  Loc::getMessage('CRM_DEAL_RESTORATION');
	}
	elseif (
		$typeID === TimelineType::FINAL_SUMMARY
		|| $typeID === TimelineType::FINAL_SUMMARY_DOCUMENTS
	)
	{
		$entityId = (int)$data['ASSOCIATED_ENTITY_ID'];

		/** @var PaymentDocumentsRepository */
		$repository = ServiceLocator::getInstance()->get('crm.entity.paymentDocumentsRepository');
		$result = $repository->getDocumentsForEntity($associatedEntityTypeID, $entityId);
		if ($result->isSuccess())
		{
			$data['RESULT']['TIMELINE_SUMMARY_OPTIONS'] = $result->getData();
		}
	}
	elseif ($typeID === TimelineType::PRODUCT_COMPILATION)
	{
		if (isset($settings['COMPILATION_CREATION_DATE']))
		{
			$settings['COMPILATION_CREATION_DATE'] = FormatDate(
				Main\Context::getCurrent()->getCulture()->getLongDateFormat(),
				$settings['COMPILATION_CREATION_DATE']
			);
		}
		elseif (
			isset($data['TYPE_CATEGORY_ID'])
			&& (int)$data['TYPE_CATEGORY_ID'] === ProductCompilationType::NEW_DEAL_CREATED
		)
		{
			$newDealId = $settings['NEW_DEAL_ID'];
			$entityInfo = [];
			\CCrmOwnerType::TryGetEntityInfo(
				\CCrmOwnerType::Deal,
				$newDealId,
				$entityInfo,
				false
			);
			$data['NEW_DEAL_DATA'] = $entityInfo;
		}

		$data = array_merge($data, $settings);
	}
	elseif ($typeID === TimelineType::LOG_MESSAGE)
	{
		$this->applySettingsBaseData($data, $base);
	}

	return parent::prepareHistoryDataModel($data, $options);
}