G
N
I
D
A
O
L

Разные значения НДС по группам пользователей

Обработчики для изменения значения НДС при добавлении товаров в корзину, а так же при оформлении заказа ( два события )
AddEventHandler("sale", "OnBeforeBasketAdd", "myBeforeBasketAddHandler");
function myBeforeBasketAddHandler(&$arFields)
{
if (!empty($arFields["PRODUCT_ID"])) {
$productId = $arFields["PRODUCT_ID"];


$arSelect = array("NAME", "ID", "XML_ID", 'IBLOCK_ID', "DETAIL_PAGE_URL", "CATALOG_GROUP_" . TYPE_PRICE_ID);
$arFilter = array("ID" => $productId, 'IBLOCK_ID' => IBLOCK_ID_CATALOG);
$res = CIBlockElement::GetList(array('SORT' => 'ASC'), $arFilter, false, false, $arSelect);
if ($element = $res->GetNext()) {
if ($element['CATALOG_QUANTITY'] == 0) {
$arFields["QUANTITY"] = 1;
$arFields["CUSTOM_PRICE"] = 'Y';
$arFields["PRICE"] = 0;

} else {
$removeNDS = UserProfileController::removeNDS();
if ($removeNDS == true) {
$arFields['CATALOG_VAT'] = 0;
$arFields["CUSTOM_PRICE"] = 'Y';
$arFields["PRICE"] = $element['CATALOG_PRICE_' . TYPE_PRICE_ID];
}

}


}
}


}

addEventHandler("sale", "OnSaleOrderBeforeSaved", ["OrderEventer", "onOrderSave"]);
addEventHandler("sale", "OnSaleOrderSaved", ["OrderEventer", "OnSaleOrderSaved"]); class OrderEventer
{
public static function OnSaleOrderSaved($ENTITY, $VALUES, $isNew)
{

$order = $ENTITY;
$arOrder = CSaleOrder::GetByID($order->getId());
if (UserProfileController::removeNDS($arOrder['USER_ID'])) {

$taxes = $order->getTax();
$taxesRes = $taxes->resetTaxList();


$basket = Sale\Basket::loadItemsForOrder($order);
$basketItems = $basket->getBasketItems();
foreach ($basket as $basketItem) {
$basketItem->setField('VAT_RATE', 0);
$basketItem->save();
}
$basket->save();
}

}

public static function onOrderSave($ENTITY, $VALUES)
{
$order = $ENTITY;

$arOrder = CSaleOrder::GetByID($order->getId());
if (UserProfileController::removeNDS($arOrder['USER_ID'])) {
$taxes = $order->getTax();
$taxesRes = $taxes->resetTaxList();
$order->setField('TAX_VALUE', 0);
$basket = Sale\Basket::loadItemsForOrder($order);
$basketItems = $basket->getBasketItems();
foreach ($basket as $basketItem) {
$basketItem->setField('VAT_RATE', 0);
$basketItem->save();
}
$basket->save();
}
}
}