- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/ml/model/dealscoring.php
- Класс: Bitrix\Crm\Ml\Model\DealScoring
- Вызов: DealScoring::getUserFieldFeatures
static function getUserFieldFeatures($dealId)
{
static $fieldTypes;
if (is_null($fieldTypes))
{
$fieldTypes = [];
$dealUserType = new CCrmUserType(
$GLOBALS['USER_FIELD_MANAGER'],
CCrmDeal::GetUserFieldEntityID()
);
$fieldTypes = array_map(
static fn($field) => $field["USER_TYPE_ID"],
$dealUserType->GetFields()
);
}
$fieldValues = DealTable::getList([
"select" => ["UF_*"],
"filter" => [
"=ID" => $dealId
]
])->fetch();
if (!is_array($fieldTypes) || count($fieldTypes) === 0)
{
return false;
}
$result = [];
foreach ($fieldTypes as $fieldName => $type)
{
switch ($type)
{
case "enumeration":
case "string":
$result[$fieldName] = "";
break;
case "boolean":
$result[$fieldName] = "N";
break;
case "integer":
case "double":
$result[$fieldName] = "";
break;
case "date":
$result[$fieldName."_DAY_OF_WEEK"] = "";
$result[$fieldName."_MONTH"] = "";
break;
case "datetime":
$result[$fieldName."_DAY_OF_WEEK"] = "";
$result[$fieldName."_MONTH"] = "";
$result[$fieldName."_TIME"] = "";
break;
default:
$result[$fieldName."_FILLED"] = "N";
break;
}
}
foreach ($fieldValues as $fieldName => $value)
{
$fieldType = $fieldTypes[$fieldName];
if (!$fieldType)
{
continue;
}
if ($fieldType === "string" || $fieldType === "enumeration")
{
if (is_array($value))
{
$value = implode(" ", $value);
}
$result[$fieldName] = FeatureBuilder::clearText($value);
}
else if ($fieldType === "boolean")
{
if (is_array($value) && count($value) > 0)
{
$value = $value[0];
}
$result[$fieldName] = $value ? "Y" : "N";
}
else if ($fieldType === "integer" || $fieldType === "double")
{
if (is_array($value) && count($value) > 0)
{
$value = $value[0];
}
$result[$fieldName] = $value !== "" ? (int)$value : "";
}
else if ($fieldType === "date")
{
if (is_array($value) && count($value) > 0)
{
$value = $value[0];
}
$result[$fieldName."_DAY_OF_WEEK"] = $value instanceof Date ? FeatureBuilder::getDayOfWeek($value) : "";
$result[$fieldName."_MONTH"] = $value instanceof Date ? FeatureBuilder::getMonth($value) : "";
}
else if ($fieldType === "datetime")
{
if (is_array($value) && count($value) > 0)
{
$value = $value[0];
}
$result[$fieldName."_DAY_OF_WEEK"] = $value instanceof DateTime ? FeatureBuilder::getDayOfWeek($value) : "";
$result[$fieldName."_MONTH"] = $value instanceof DateTime ? FeatureBuilder::getMonth($value) : "";
$result[$fieldName."_TIME"] = $value instanceof DateTime ? FeatureBuilder::getTimeMnemonic($value) : "";
}
else
{
$result[$fieldName."_FILLED"] =empty($value) ? "N" : "Y";
}
}
return $result;
}