- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/discount/migration/orderdiscountmigrator.php
- Класс: BitrixSaleDiscountMigrationOrderDiscountMigrator
- Вызов: OrderDiscountMigrator::migrateDiscount
static function migrateDiscount($orderId, array &$data)
{
if (self::$catalogIncluded === null)
self::$catalogIncluded = MainLoader::includeModule('catalog');
if (!self::$catalogIncluded)
return false;
$discountData = array(
'COUPON' => '',
'NAME' => '',
'DISCOUNT_ID' => 0
);
if ($data['DISCOUNT_NAME'] != '')
{
$discountName = array();
if (preg_match('/^[(d+)][ ](.+)$/', $data['DISCOUNT_NAME'], $discountName) == 1)
{
$discountData['NAME'] = $discountName[2];
$discountData['DISCOUNT_ID'] = $discountName[1];
}
unset($discountName);
}
if ($data['DISCOUNT_COUPON'] != '')
{
$discountData['COUPON'] = $data['DISCOUNT_COUPON'];
if (!self::checkMigrateCoupon($discountData['COUPON']))
return false;
if ($discountData['DISCOUNT_ID'] == 0)
{
$discountData['NAME'] = self::$migrateCouponsCache[$discountData['COUPON']]['DISCOUNT_NAME'];
$discountData['DISCOUNT_ID'] = self::$migrateCouponsCache[$discountData['COUPON']]['DISCOUNT_ID'];
}
else
{
if (
self::$migrateCouponsCache[$discountData['COUPON']]['TYPE'] != SaleInternalsDiscountCouponTable::TYPE_ARCHIVED
&& self::$migrateCouponsCache[$discountData['COUPON']]['DISCOUNT_ID'] >= 0
&& $discountData['DISCOUNT_ID'] != self::$migrateCouponsCache[$discountData['COUPON']]['DISCOUNT_ID']
)
$discountData['DISCOUNT_ID'] = 0;
}
}
if ($discountData['DISCOUNT_ID'] == 0)
{
if ($discountData['COUPON'] == '')
return false;
self::createEmptyDiscount($discountData);
}
else
{
self::checkMigrateDiscount($discountData);
}
$saveResult = self::saveMigrateDiscount($discountData);
if (!$saveResult->isSuccess())
return false;
$migrateDiscountData = $saveResult->getData();
unset($saveResult);
$orderDiscountId = $migrateDiscountData['ORDER_DISCOUNT_ID'];
$orderCouponId = 0;
$discountDescr = current($migrateDiscountData['ACTIONS_DESCR']['BASKET']);
if ($discountData['COUPON'] != '')
{
$couponData = self::$migrateCouponsCache[$discountData['COUPON']];
$couponData['ORDER_ID'] = $orderId;
$couponData['ORDER_DISCOUNT_ID'] = $migrateDiscountData['ORDER_DISCOUNT_ID'];
$couponData['DATA']['DISCOUNT_ID'] = $migrateDiscountData['DISCOUNT_ID'];
if (array_key_exists('DISCOUNT_ID', $couponData))
unset($couponData['DISCOUNT_ID']);
if (array_key_exists('DISCOUNT_NAME', $couponData))
unset($couponData['DISCOUNT_NAME']);
$saveResult = SaleOrderDiscount::saveCoupon($couponData);
if (!$saveResult->isSuccess())
return false;
$migrateCoupon = $saveResult->getData();
$orderCouponId = $migrateCoupon['ID'];
}
foreach ($data['ITEMS'] as $basketItem)
{
$applyDescr = $discountDescr;
if ($basketItem['DISCOUNT_VALUE'] != '')
{
if ($applyDescr['TYPE'] == SaleDiscountFormatter::TYPE_SIMPLE)
{
$applyDescr['DESCR'] .= ' ('.$basketItem['DISCOUNT_VALUE'].')';
}
else
{
$valueData = array();
if (preg_match('/^(|+|-)(d+|[.,]d+|d+[.,]d+)s?%$/', $basketItem['DISCOUNT_VALUE'], $valueData) == 1)
{
$applyDescr['RESULT_VALUE'] = (float)$basketItem['DISCOUNT_VALUE'];
$applyDescr['RESULT_UNIT'] = SaleDiscountFormatter::VALUE_TYPE_PERCENT;
}
unset($valueData);
}
}
$ruleRow = array(
'MODULE_ID' => 'catalog',
'ORDER_DISCOUNT_ID' => $orderDiscountId,
'ORDER_ID' => $orderId,
'ENTITY_TYPE' => SaleInternalsOrderRulesTable::ENTITY_TYPE_BASKET_ITEM,
'ENTITY_ID' => $basketItem['ID'],
'ENTITY_VALUE' => $basketItem['ID'],
'COUPON_ID' => $orderCouponId,
'APPLY' => 'Y'
);
$ruleDescr = array(
'MODULE_ID' => 'catalog',
'ORDER_DISCOUNT_ID' => $orderDiscountId,
'ORDER_ID' => $orderId,
'DESCR' => array($applyDescr)
);
$ruleResult = SaleInternalsOrderRulesTable::add($ruleRow);
if ($ruleResult->isSuccess())
{
$ruleDescr['RULE_ID'] = $ruleResult->getId();
$descrResult = SaleInternalsOrderRulesDescrTable::add($ruleDescr);
if (!$descrResult->isSuccess())
return false;
}
else
{
return false;
}
unset($ruleResult);
}
unset($basketItem);
return true;
}