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