- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/kanban/entity/order.php
- Класс: Bitrix\Crm\Kanban\Entity\Order
- Вызов: Order::prepareEntityFields
protected function prepareEntityFields(array $orders): array
{
static $currencies = [];
static $personTypes = [];
if(empty($orders))
{
return $orders;
}
$ids = array_keys($orders);
if (empty($currencies))
{
$currencies = \CCrmCurrencyHelper::PrepareListItems();
}
if (empty($personTypes))
{
$personTypes = PersonType::load(SITE_ID);
}
$orderClientRaw = OrderContactCompanyTable::getList([
'filter' => [
'=ORDER_ID' => $ids
]
]);
while ($orderClient = $orderClientRaw->fetch())
{
$orderId = $orderClient['ORDER_ID'];
if ((int)$orderClient['ENTITY_TYPE_ID'] === \CCrmOwnerType::Contact)
{
if (empty($orders[$orderId]['CONTACT_ID']) || $orderClient['IS_PRIMARY'] === 'Y')
{
$orders[$orderId]['CONTACT_ID'] = $orderClient['ENTITY_ID'];
}
}
elseif ((int)$orderClient['ENTITY_TYPE_ID'] === \CCrmOwnerType::Company)
{
$orders[$orderId]['COMPANY_ID'] = $orderClient['ENTITY_ID'];
}
}
$paymentRaw = Payment::getList([
'filter' => [
'=ORDER_ID' => $ids
]
]);
while ($payment = $paymentRaw->fetch())
{
$orderId = $payment['ORDER_ID'];
$orders[$orderId]['PAYMENT'][$payment['ID']] = $payment;
}
$shipmentRaw = Shipment::getList([
'filter' => [
'=ORDER_ID' => $ids,
'SYSTEM' => 'N'
]
]);
while ($shipment = $shipmentRaw->fetch())
{
$orderId = $shipment['ORDER_ID'];
$orders[$orderId]['SHIPMENT'][$shipment['ID']] = $shipment;
}
$markersRaw = EntityMarker::getList([
'filter' => [
'=ENTITY_TYPE' => EntityMarker::ENTITY_TYPE_ORDER,
'=ENTITY_ID' => $ids,
'=SUCCESS' => 'N',
],
'select' => ['MESSAGE', 'ENTITY_ID']
]);
$markers = [];
while ($marker = $markersRaw->fetch())
{
$markers[$marker['ENTITY_ID']][] = $marker['MESSAGE'];
}
if (!empty($markers))
{
foreach ($markers as $orderId => $marker )
{
if (count($marker) > 1)
{
$value = implode('
', $marker);
}
else
{
$value = $marker[0];
}
$orders[$orderId]['PROBLEM_NOTIFICATION'] = $value;
}
}
$enumVariants = [];
$enumPropertyVariantRaw = PropertyVariant::getList([
'select' => ['VALUE', 'NAME', 'ORDER_PROPS_ID']
]);
while ($variant = $enumPropertyVariantRaw->fetch())
{
$enumVariants[$variant['ORDER_PROPS_ID']][$variant['VALUE']] = $variant['NAME'];
}
$propertyValuesRaw = PropertyValue::getList([
'filter' => [
'=ORDER_ID' => $ids
],
'select' => ['TYPE' => 'PROPERTY.TYPE', 'VALUE', 'ORDER_PROPS_ID', 'ORDER_ID']
]);
while ($propertyValue = $propertyValuesRaw->fetch())
{
$value = $propertyValue['VALUE'];
$currentPropertyId = $propertyValue['ORDER_PROPS_ID'];
if ($propertyValue['TYPE'] === 'ENUM')
{
$valueNameList = [];
if (is_array($value))
{
foreach ($value as $currentValue)
{
$valueNameList[] = $enumVariants[$currentPropertyId][$currentValue];
}
}
else
{
$valueNameList[] = $enumVariants[$currentPropertyId][$value];
}
$orders[$propertyValue['ORDER_ID']]['PROPERTY_'.$currentPropertyId] = implode(', ', $valueNameList);
}
if ($propertyValue['TYPE'] === 'Y/N')
{
$value = ($value === 'Y') ? 'Y' : 'N';
$orders[$propertyValue['ORDER_ID']]['PROPERTY_'.$currentPropertyId] = Loc::getMessage('CRM_KANBAN_CHAR_' . $value);
}
else
{
$orders[$propertyValue['ORDER_ID']]['PROPERTY_'.$currentPropertyId] = $value;
}
}
foreach ($orders as &$order)
{
if (isset($order['PERSON_TYPE_ID']))
{
$type = $personTypes[$order['PERSON_TYPE_ID']];
$order['PERSON_TYPE_ID'] = $type['NAME'];
}
$order['CURRENCY_ID'] = $order['CURRENCY'];
$order['USER'] = $order['USER_ID'] ?? null;
$order['CURRENCY'] = $currencies[$order['CURRENCY']];
$order['TITLE'] = Loc::getMessage('CRM_KANBAN_ORDER_TITLE', [
'#ACCOUNT_NUMBER#' => $order['ACCOUNT_NUMBER']
]);
}
return $orders;
}