Удалил и заново прописал на событии OnSaleOrderBeforeSaved .
Не понятно, что было, но факт - отгрузки в наличии.
У меня нет $order->refreshOrderPrice(), но посмотрев как сделано в более новых версиях вижу что это просто обертка 2 методов:
Код |
---|
$basket = $order->getBasket();
$taxPrice = !$order->isUsedVat() ? $order->getField('TAX_PRICE') : 0;
$price = $basket->getPrice()+$taxPrice;
$order->setField("PRICE", $price);
|
смотрю что получается: получается фигня. да я добавляю дополнительную стоимость доставки, но сумма для оплаты не пересчитывается, скидки не пресчитываются.
пробовал добавить:
Код |
---|
if(intval($propertyValue)>0){
$shipmentCollection = $order->getShipmentCollection();
foreach ($shipmentCollection as $shipment) {
if ($shipment->isSystem()) {continue;}
$shipment->setExtraServices([$propertyValue => 'Y']);
$resCalc = \Bitrix\Sale\Delivery\Services\Manager::calculateDeliveryPrice($shipment, $shipment->getField("DELIVERY_ID"));
if ($resCalc->isSuccess()) {
$arShipments1 = $resCalc->getExtraServicesPrice();
$service = \Bitrix\Sale\Delivery\Services\Manager::getById($shipment->getField("DELIVERY_ID"));
$deliveryData = [
'DELIVERY_ID' => $service['ID'],
'DELIVERY_NAME' => $service['NAME'],
'ALLOW_DELIVERY' => 'N',
'PRICE_DELIVERY' => $arShipments1,
'BASE_PRICE_DELIVERY' => $arShipments1,
'CUSTOM_PRICE_DELIVERY' => 'N',
'CURRENCY' => $order->getCurrency(),
];
$shipment->setFields($deliveryData);
}
$propertyValue61 = $orderProperties->getItemByOrderPropertyId(61);
$propertyValue61->setField('VALUE', '');
}
$shipmentCollection->calculateDelivery();
$discount = $order->getDiscount();
\Bitrix\Sale\DiscountCouponsManager::clearApply(true);
\Bitrix\Sale\DiscountCouponsManager::useSavedCouponsForApply(true);
$discount->setOrderRefresh(true);
$discount->setApplyResult(array());
if (!($basket = $order->getBasket())) {
throw new \Bitrix\Main\ObjectNotFoundException('Entity "Basket" not found');
}
$basket->refreshData(array('PRICE', 'COUPONS'));
$discount->calculate();
$taxPrice = !$order->isUsedVat() ? $order->getField('TAX_PRICE') : 0;
$price = $basket->getPrice()+$taxPrice;
$order->setField("PRICE", $price);
$order->doFinalAction(true);
}
|
никак. Что я упускаю?