Нужен хелп, куда копать.
Есть на входе ID клиента, ID доставки, список товаров.
Нужно расчитать стоимость товаров со скидкой.
Я так понял что просто через CCatalogProduct::GetOptimalPrice не выйдет, хотя вроде работало.
CCatalogProduct::GetOptimalPrice($product['id'], $product['quantity'], 8, 'N', '', SITE_ID, $promocode);
начинаю создвать корзину и наполнять товарами
$order = Order::create($siteId, $userID);
$order->setPersonTypeId(4);
//$order->setField('PRICE_DELIVERY', 770);
$order->setField('CURRENCY', $currencyCode);
// содаем корзину
$basket = Bitrix\Sale\Basket::create($siteId);
foreach ($products as $k => $product) {
$optimalPrice = CCatalogProduct::GetOptimalPrice($product['id'], $product['quantity'], 8, 'N', '', SITE_ID,
$promocode);
$item = $basket->createItem('catalog', $product['id']);
$item->setFields([
'QUANTITY' => $product['quantity'],
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
'PRICE' => $optimalPrice['PRICE']['PRICE'], // цена
'CUSTOM_PRICE' => 'Y',
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
]);
// получаем цены доступные для группы 8
$return_products[$k] = [
"name" => $product['name'],
"id" => $product['id'],
"privateId" => $product['privateId'],
"price" => $optimalPrice['PRICE']['PRICE'],
"quantity" => $product['quantity'],
"discount" => 0,
"subtotal" => $optimalPrice['PRICE']['PRICE'] * $product['quantity']
];
}
$order->setBasket($basket);
// Создаём одну отгрузку и устанавливаем способ доставки
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem(
\Bitrix\Sale\Delivery\Services\Manager::getObjectById($deliveryID)
);
$shipmentItemCollection = $shipment->getShipmentItemCollection();
// инициирую и добавляю промокод
/* Bitrix\Sale\DiscountCouponsManager::init();
Bitrix\Sale\DiscountCouponsManager::add($promocode);*/
// наполняем корзину
foreach ($order->getBasket() as $item) {
$shipmentItem = $shipmentItemCollection->createItem($item);
$shipmentItem->setQuantity($item->getQuantity());
}
// Создаём оплату
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem();
$paySystemService = PaySystem\Manager::getObjectById($paymentID);
$payment->setFields(array(
'PAY_SYSTEM_ID' => $paySystemService->getField("PAY_SYSTEM_ID"),
'PAY_SYSTEM_NAME' => $paySystemService->getField("NAME"),
));
// применяем купон
// Bitrix\Sale\DiscountCouponsManager::add('cupon');
// получаем объект скидок для корзины
$oDiscounts = Bitrix\Sale\Discount::loadByBasket($basket);
// обновляем поля в корзине
$basket->refreshData(['PRICE','COUPONS']);
// пересчёт скидок для корзины
$oDiscounts->calculate();
// получаем результаты расчёта скидок для корзины
$result = $oDiscounts->getApplyResult();
// хочу посмотреть товары со скидкой
foreach ($basket as $basketItem) {
echo $basketItem->getField('NAME') . ' - ' . $basketItem->getQuantity() . ' цена ' . $basketItem->getPrice() . " итого " . $basketItem->getFinalPrice() . ' <br />';
}
/*
\Bitrix\Sale\DiscountCouponsManager::init(
\Bitrix\Sale\DiscountCouponsManager::MODE_ORDER,
[
"userId" => $order->getUserId(),
"orderId" => $order->getId()
]
);
\Bitrix\Sale\DiscountCouponsManager::add('CUPON');
$discounts = $order->getDiscount();
$discounts->calculate();*/
$order->doFinalAction(true);
Но скидка не встает, при чем если на этот же товар через сайт добавить купон, то скидка всатет