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