Bitrix (1с-Битрикс) если цена купона больше цены корзины/создание собственного правила корзины
ВАЖНО! Посмотрите видео, там описано как нужно настраивать!
Между 9:30 и 11:30 - я тупанул, простите:) но времени нет перезаписывать)
Ссылка на проблему на форуме с 2011 года - https://dev.1c-bitrix.ru/community/forums/forum6/topic38923/
Помните что файлы могут быть в /bitrix/ и /local/.
Код в init.php :
Между 9:30 и 11:30 - я тупанул, простите:) но времени нет перезаписывать)
Ссылка на проблему на форуме с 2011 года - https://dev.1c-bitrix.ru/community/forums/forum6/topic38923/
Архив для скачивания файлов: Скачать
Помните что файлы могут быть в /bitrix/ и /local/.
Код в init.php :
Bitrix\Main\Loader::includeModule('catalog'); AddEventHandler("sale", "OnCondSaleActionsControlBuildList", Array("DiscountForCoupon", "GetControlDescr")); // Действия class DiscountForCoupon extends CGlobalCondCtrlComplex { protected static $handlerDisallow = false; public static function GetClassName() { return __CLASS__; } public static function GetControlID() { return array('SaleActionCoupon'); } public static function GetControlShow($arParams) { $arControls = static::GetControls(); $arResult = array( 'controlgroup' => true, 'group' => false, 'label' => 'Специальная проверка', 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'children' => array() ); foreach ($arControls as &$arOneControl) { $arResult['children'][] = array( 'controlId' => $arOneControl['ID'], 'group' => false, 'label' => $arOneControl['LABEL'], 'showIn' => static::GetShowIn($arParams['SHOW_IN_GROUPS']), 'control' => array( array( 'id' => 'prefix', 'type' => 'prefix', 'text' => $arOneControl['PREFIX'] ), static::GetLogicAtom($arOneControl['LOGIC']), static::GetValueAtom($arOneControl['JS_VALUE']) ) ); } if (isset($arOneControl)) unset($arOneControl); return $arResult; } public static function GetControls($strControlID = false) { $arControlList = array( 'SaleActionCoupon' => array( 'ID' => 'SaleActionCoupon', 'FIELD' => 'BASKET_PRICE_IN', 'FIELD_TYPE' => 'text', 'LABEL' => 'Сумма корзины', 'PREFIX' => 'Сумма корзины', 'LOGIC' => static::GetLogic(array( /*BT_COND_LOGIC_EQ, BT_COND_LOGIC_NOT_EQ, BT_COND_LOGIC_GR, BT_COND_LOGIC_LS,*/ BT_COND_LOGIC_EGR, BT_COND_LOGIC_ELS )), 'JS_VALUE' => array( 'type' => 'input', /*'type' => 'select', 'values' => array( 'Y' => "Да", 'N' => "Нет", )*/ ), 'PHP_VALUE' => '' ), ); foreach ($arControlList as &$control) { if (!isset($control['PARENT'])) $control['PARENT'] = true; $control['MULTIPLE'] = 'N'; } unset($control); if ($strControlID === false) { return $arControlList; } elseif (isset($arControlList[$strControlID])) { return $arControlList[$strControlID]; } else { return false; } } public static function Generate($arOneCondition, $arParams, $arControl, $arSubs = false) { // if($arOneCondition['logic']=='EqGr') EqGr - больше либо равно , EqLs - меньше либо равно $strResult = 'DiscountForCoupon::BasketCheck("'.$arOneCondition['logic'].'",'.$arOneCondition['value'].')'; return $strResult; } public static function BasketCheck($logic,$value) { if (self::$handlerDisallow) return; self::$handlerDisallow = true; $basket = \Bitrix\Sale\Basket::loadItemsForFUser( \CSaleBasket::GetBasketUserID(), "s1")->getOrderableItems(); $discounts = \Bitrix\Sale\Discount::buildFromBasket($basket, new \Bitrix\Sale\Discount\Context\Fuser($basket->getFUserId(true))); $discounts->calculate(); $arBasketDiscounts = $discounts->getApplyResult(true); $priceSum = 0; $basketItems = $basket->getBasketItems(); foreach ($basketItems as $basketItem ) { $basketCode = $basketItem->getBasketCode(); if (isset($arBasketDiscounts["PRICES"]['BASKET'][$basketCode])) { $priceSum += $arBasketDiscounts["PRICES"]['BASKET'][$basketCode]["PRICE"]*$basketItem->getQuantity(); } else { $priceSum += $basketItem->getFinalPrice(); } } //$priceSum = $basket->getPrice(); if($logic=="EqGr"){ if($priceSum>=$value){ self::$handlerDisallow = false; return true; } self::$handlerDisallow = false; return false; }else{ if($priceSum<=$value){ self::$handlerDisallow = false; return true; } self::$handlerDisallow = false; return false; } self::$handlerDisallow = false; return true; } }