• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/discount/discountmanager.php
  • Класс: BitrixCatalogDiscountDiscountManager
  • Вызов: DiscountManager::loadFromDatabase
static function loadFromDatabase(int $id, array $discount)
{
	$select = [];
	if (!isset($discount['NAME']))
		$select['NAME'] = true;
	if (empty($discount['CONDITIONS']))
		$select['CONDITIONS_LIST'] = true;
	if (empty($discount['UNPACK']))
		$select['UNPACK'] = true;
	if (empty($discount['USE_COUPONS']))
		$discount['USE_COUPONS'] = (!empty($discount['COUPON']) ? 'Y' : 'N');
	if (!isset($discount['SORT']))
		$select['SORT'] = true;
	if (!isset($discount['PRIORITY']))
		$select['PRIORITY'] = true;
	if (!isset($discount['LAST_DISCOUNT']))
		$select['LAST_DISCOUNT'] = true;

	if (
		!isset($discount['TYPE'])
		|| ($discount['TYPE'] != CatalogDiscountTable::TYPE_DISCOUNT && $discount['TYPE'] != CatalogDiscountTable::TYPE_DISCOUNT_SAVE)
	)
		$select['TYPE'] = true;
	if (!isset($discount['VALUE_TYPE']))
	{
		$select['VALUE_TYPE'] = true;
		$select['VALUE'] = true;
		$select['MAX_DISCOUNT'] = true;
		$select['CURRENCY'] = true;
	}
	else
	{
		if (!isset($discount['VALUE']))
			$select['VALUE'] = true;
		if (!isset($discount['CURRENCY']))
			$select['CURRENCY'] = true;
		if ($discount['VALUE_TYPE'] == CatalogDiscountTable::VALUE_TYPE_PERCENT && !isset($discount['MAX_VALUE']))
			$select['MAX_DISCOUNT'] = true;
	}
	$selectKeys = array_keys($select);

	if (!empty($select))
	{
		$discountIterator = CatalogDiscountTable::getList([
			'select' => $selectKeys,
			'filter' => ['=ID' => $id]
		]);
		$loadData = $discountIterator->fetch();
		if (empty($loadData))
			return false;
		$discount = array_merge($loadData, $discount);
		if (isset($discount['CONDITIONS_LIST']))
		{
			$discount['CONDITIONS'] = $discount['CONDITIONS_LIST'];
			unset($discount['CONDITIONS_LIST']);
		}
		if (isset($discount['MAX_DISCOUNT']))
		{
			$discount['MAX_VALUE'] = $discount['MAX_DISCOUNT'];
			unset($discount['MAX_DISCOUNT']);
		}
		unset($loadData, $discountIterator);
	}
	$discount['DISCOUNT_ID'] = $id;
	if (empty($discount['MODULE_ID']))
		$discount['MODULE_ID'] = 'catalog';
	if (array_key_exists('HANDLERS', $discount))
	{
		if (!empty($discount['HANDLERS']['MODULES']) && empty($discount['MODULES']))
			$discount['MODULES'] = $discount['HANDLERS']['MODULES'];
		unset($discount['HANDLERS']);
	}
	if (empty($discount['MODULES']))
	{
		$discount['MODULES'] = [];

		$conn = MainApplication::getConnection();
		$helper = $conn->getSqlHelper();
		/** @noinspection SqlResolve */
		$moduleIterator = $conn->query(
			'select MODULE_ID from '.$helper->quote('b_catalog_discount_module').' where '.$helper->quote('DISCOUNT_ID').' = '.$id
		);
		while ($module = $moduleIterator->fetch())
			$discount['MODULES'][] = $module['MODULE_ID'];
		unset($module, $moduleIterator, $helper, $conn);
		if (!in_array('catalog', $discount['MODULES']))
			$discount['MODULES'][] = 'catalog';
	}
	self::$typeCache[$id] = $discount['TYPE'];

	return $discount;
}