- Модуль: tasks
- Путь к файлу: ~/bitrix/modules/tasks/classes/general/tasks_report_helper.php
- Класс: CTasksReportHelper
- Вызов: CTasksReportHelper::appendMoneyUserFieldsAsSeparated
static function appendMoneyUserFieldsAsSeparated(BitrixMainEntityBase $entity)
{
/** @global CDatabase $DB */
global $DB;
// Advanced fields for datetime user fields
$moneyFields = array();
foreach($entity->getFields() as $field)
{
if (in_array($field->getName(), array('LEAD_BY', 'COMPANY_BY', 'CONTACT_BY'), true)
&& $field instanceof BitrixMainEntityReferenceField)
{
self::appendMoneyUserFieldsAsSeparated($field->getRefEntity());
}
else if ($field instanceof BitrixMainEntityExpressionField)
{
$arUF = self::detectUserField($field);
if ($arUF['isUF'])
{
$ufDataType = self::getUserFieldDataType($arUF);
$fieldName = $arUF['ufInfo']['FIELD_NAME'];
if ($ufDataType === 'money')
{
$moneyFields[] = array(
'def' => array(
'data_type' => 'float',
'expression' => array(
"(IFNULL(IF(".
"LOCATE('|', %s) > 0, ".
"CAST(SUBSTR(%s, 1, LOCATE('|', %s) - 1) AS DECIMAL(18,2)), ".
"CAST(%s AS DECIMAL(18,2))".
"), 0))", $fieldName, $fieldName, $fieldName, $fieldName
)
),
'name' => $fieldName.self::UF_MONEY_NUMBER_POSTFIX
);
$moneyFields[] = array(
'def' => array(
'data_type' => 'string',
'expression' => array(
"(IFNULL(IF(LOCATE('|', %s) > 0, SUBSTR(%s, LOCATE('|', %s) + 1), NULL), ''))",
$fieldName, $fieldName, $fieldName
)
),
'name' => $fieldName.self::UF_MONEY_CURRENCY_POSTFIX
);
}
}
}
}
foreach ($moneyFields as $fieldInfo)
{
if (!$entity->hasField($fieldInfo['name']))
{
$entity->addField($fieldInfo['def'], $fieldInfo['name']);
}
}
}