<?php
//bitrix/php_interface/include/SaleActionDiscount.php
/**
* Добавляет новое действие в правила работы корзины для Маркетинга
*/
use Bitrix\Main\Loader,
Bitrix\Main\Localization\Loc,
Bitrix\Sale;
if (!Loader::includeModule('catalog'))
return;
if (!Loader::includeModule('sale'))
return;
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandlerCompatible("sale", "OnCondSaleActionsControlBuildList", [
"SaleActionDiscountFromDirectory",
"GetControlDescr"
]);
class SaleActionDiscountFromDirectory extends \CSaleActionCtrlBasketGroup {
public static function GetClassName()
{
return __CLASS__;
}
public static function GetControlID()
{
return "DiscountFromDirectory";
}
public static function GetAtoms()
{
return static::GetAtomsEx(false, false);
}
public static function GetControlDescr() {
$description = parent::GetControlDescr();
$description['EXECUTE_MODULE'] = 'all';//Для сохранения в таблицу
$description['SORT'] = 500;
return $description;
}
public static function GetControlShow($arParams) {
$arAtoms = static::GetAtomsEx(false, false);
$boolCurrency = false;
if (static::$boolInit) {
if (isset(static::$arInitParams['CURRENCY'])) {
$arAtoms['Unit']['values']['Cur'] = static::$arInitParams['CURRENCY'];
$boolCurrency = true;
} elseif (isset(static::$arInitParams['SITE_ID'])) {
$strCurrency = Sale\Internals\SiteCurrencyTable::getSiteCurrency(static::$arInitParams['SITE_ID']);
if (!empty($strCurrency)) {
$arAtoms['Unit']['values']['Cur'] = $strCurrency;
$boolCurrency = true;
}
}
}
if (!$boolCurrency) {
unset($arAtoms['Unit']['values']['Cur']);
}
$arResult = array(
'controlId' => static::GetControlID(),
'group' => false,
'label' => 'Применить тип цены',
'defaultText' => 'Скидка',
'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']),
'control' => array(
'Применить тип цены',
$arAtoms['Value'],
)
);
return $arResult;
}
public static function GetAtomsEx($strControlID = false, $boolEx = false) {
$dbPriceType = CCatalogGroup::GetList(
array("SORT" => "ASC"),
array()
);
$price_types = array();
while ($arPriceType = $dbPriceType->Fetch())
{
$price_types[$arPriceType['XML_ID']] = $arPriceType['NAME_LANG'];
}
$boolEx = (true === $boolEx ? true : false);
$arAtomList = array(
'Value' => array(
'JS' => array(
'id' => 'Value',
'name' => 'Value',
'type' => 'select',
'values' => $price_types,
'defaultText' => 'Выберете тип цены',//Loc::getMessage('BT_SALE_ACT_DELIVERY_SELECT_TYPE_DEF'),
'defaultValue' => 'BASE',
'first_option' => '...'
),
'ATOM' => array(
'ID' => 'Value',
'FIELD_TYPE' => 'string',
'FIELD_LENGTH' => 255,
'MULTIPLE' => 'N',
'VALIDATE' => 'list'
)
),
);
if (!$boolEx) {
foreach ($arAtomList as &$arOneAtom) {
$arOneAtom = $arOneAtom['JS'];
}
if (isset($arOneAtom))
unset($arOneAtom);
}
return $arAtomList;
}
public static function GetShowIn($arControls) {
return array(CSaleActionCtrlGroup::GetControlID());
}
/**
* Функция должна вернуть колбэк того что должно быть выполнено при наступлении условий
* @param type $arOneCondition
* @param type $arParams
* @param type $arControl
* @param type $arSubs
* @return string
*/
public static function Generate($arOneCondition, $arParams, $arControl, $arSubs = false) {
$arOneCondition['Value'] = (float) $arOneCondition['Value'];
$actionParams = array(
'VALUE' => $arOneCondition['Value'],
);
//
// //Описываем колбэк
// $mxResult .= 'include_once($_SERVER[\'DOCUMENT_ROOT\'].\'/bitrix/php_interface/include/ActionUserDiscountBalance.php\');' . PHP_EOL;
// $mxResult .= '\bitrix\php_interface\include\ActionsUserDiscountBalans::applyToBonus(' . $arParams['ORDER'] . ', ' . var_export($actionParams, true) . ')';
$mxResult = __CLASS__ . '::applyToPriceType(' . $arParams["ORDER"] . ', ' . 'array(' . "'VALUE' => " . $arOneCondition['Value'] . ')' . ');';
unset($actionParams);
return $mxResult;
}
public static function applyToPriceType(array &$order, array $action) {
foreach ($order['BASKET_ITEMS'] as &$product)
{
$productId = $product['PRODUCT_ID'];
if($product[$action['VALUE']] && is_numeric($product[$action['VALUE']]) || floatval($product[$action['VALUE']]) === 0){
$product['PRICE'] = $product[$action['VALUE']];
}
}
unset($product);
}
} |