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