У клиента хитрая система скидок и наценок, стандартными средствами реализовать не получилось, потому вещается событие которое на последнем этапе
AddEventHandler("sale", "OnOrderSave", "MetizHandlerOrderSave");
пересчитывает итоговую цену, скидку и соответвенно НДС
значение налога меняю так:
$res = CSaleOrderTax::GetList(array(), array('ORDER_ID' => $Order_ID));
$data = $res->Fetch();
$TAX_RATE = $allSumNew * floatval($data['VALUE'])/100;
CSaleOrderTax::Update($data['ID'], array('VALUE_MONEY' => $TAX_RATE));
после этого меняю данные самого заказа
CSaleOrder::Update($Order_ID,
array(
'DISCOUNT_VALUE' => $allSum - $allSumNew,
'PRICE' => $allSumNew,
'TAX_VALUE' => $TAX_RATE
));
в итоге, в таблице `b_sale_order` вижу, что меняется только итоговая сумма (PRICE), скидка остается = 0, TAX_VALUE тоже не меняется, хотя CSaleOrderTax::GetList показывает, что значение мы поменяли. Подскажите, как правильно изменить значение DISCOUNT_VALUE (можно конечно прямым запросом к БД, но не хотелось бы, вдруг когда-нибудь названия полей поменяются)
$allSum - первоначальная цена, и она всегда больше либо равна $allSumNew, т.к. считается всегда с максимальной наценкой от базовой цены в каталоге и потом уже в зависимости от условий может применяться скидка.
AddEventHandler("sale", "OnOrderSave", "MetizHandlerOrderSave");
пересчитывает итоговую цену, скидку и соответвенно НДС
значение налога меняю так:
$res = CSaleOrderTax::GetList(array(), array('ORDER_ID' => $Order_ID));
$data = $res->Fetch();
$TAX_RATE = $allSumNew * floatval($data['VALUE'])/100;
CSaleOrderTax::Update($data['ID'], array('VALUE_MONEY' => $TAX_RATE));
после этого меняю данные самого заказа
CSaleOrder::Update($Order_ID,
array(
'DISCOUNT_VALUE' => $allSum - $allSumNew,
'PRICE' => $allSumNew,
'TAX_VALUE' => $TAX_RATE
));
в итоге, в таблице `b_sale_order` вижу, что меняется только итоговая сумма (PRICE), скидка остается = 0, TAX_VALUE тоже не меняется, хотя CSaleOrderTax::GetList показывает, что значение мы поменяли. Подскажите, как правильно изменить значение DISCOUNT_VALUE (можно конечно прямым запросом к БД, но не хотелось бы, вдруг когда-нибудь названия полей поменяются)
$allSum - первоначальная цена, и она всегда больше либо равна $allSumNew, т.к. считается всегда с максимальной наценкой от базовой цены в каталоге и потом уже в зависимости от условий может применяться скидка.