$order = Order::create($siteId, $userID);
$order->setPersonTypeId(4);
$order->setField('CURRENCY', $currencyCode);
// содаем корзину
$basket = Bitrix\Sale\Basket::create($siteId);
// проубю тут применянить купон
Bitrix\Sale\DiscountCouponsManager::add('CUPON');
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(),
// тут убрал цену
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
]);
}
$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"),
));
/*
// получаем объект скидок для корзины
$oDiscounts = Bitrix\Sale\Discount::loadByBasket($basket);
// обновляем поля в корзине
$basket->refreshData(['PRICE','COUPONS']);
// пересчёт скидок для корзины
$oDiscounts->calculate();
// получаем результаты расчёта скидок для корзины
$result = $oDiscounts->getApplyResult();*/
// хочу посмотреть товары со скидкой
// проубю тут применянить купон
\Bitrix\Sale\DiscountCouponsManager::init(
\Bitrix\Sale\DiscountCouponsManager::MODE_ORDER,
[
"userId" => "78215"
]
);
\Bitrix\Sale\DiscountCouponsManager::add('CUPON');
$discounts = $order->getDiscount();
$discounts->calculate();
foreach ($basket as $basketItem) {
echo $basketItem->getField('NAME') . ' - ' . $basketItem->getQuantity() . ' цена ' . $basketItem->getPrice() . " итого " . $basketItem->getFinalPrice() . ' <br />';
}
$order->doFinalAction(true);
$arLocation = \Bitrix\Sale\Location\LocationTable::getByCode($locationId)->fetch();
$propertyCollection = $order->getPropertyCollection();
$locationProperty = $propertyCollection->getDeliveryLocation();
$locationProperty->setValue($arLocation["CODE"]);
// $zipProperty = $propertyCollection->getDeliveryLocationZip();
//$zipProperty->setValue("101000");
// по ID LOCATION в свойствах заказа
$somePropValue = $propertyCollection->getItemByOrderPropertyId(4);
// пробую установить
$somePropValue->setValue("101000");
<?
$products = [1 => ["id" => 226256, "quantity" => 1]];
// есть код местоположения, Москва
$locationId = '0000073738';
// офорлеем
$siteId = Context::getCurrent()->getSite();
$currencyCode = CurrencyManager::getBaseCurrency();
// содаем корзину
$basket = Bitrix\Sale\Basket::create($siteId);
foreach ($products as $product) {
$item = $basket->createItem('catalog', $product['id']);
unset($product["id"]);
$item->setFields([
'QUANTITY' => $product['quantity'],
'CURRENCY' => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
'LID' => \Bitrix\Main\Context::getCurrent()->getSite(),
'PRODUCT_PROVIDER_CLASS' => 'CCatalogProductProvider',
'WEIGHT' => 5000,
]);
}
// пока пишем тестового пользвателя
$order = Bitrix\Sale\Order::create($siteId, 67020);
$order->setPersonTypeId(1);
$order->setBasket($basket);
// дополняем заказ метоположением заказа
$arLocation = \Bitrix\Sale\Location\LocationTable::getByCode($locationId)->fetch();
$propertyCollection = $order->getPropertyCollection();
$locationProperty = $propertyCollection->getDeliveryLocation();
$locationProperty->setValue($arLocation["CODE"]);
$zipProperty = $propertyCollection->getDeliveryLocationZip();
$zipProperty->setValue("101000");
// Создаём одну отгрузку и получаем доставки
$shipmentCollection = $order->getShipmentCollection();
$shipment = $shipmentCollection->createItem();
$shipmentItemCollection = $shipment->getShipmentItemCollection();
$shipment->setField('CURRENCY', $order->getCurrency());
foreach ($order->getBasket() as $item) {
$shipmentItem = $shipmentItemCollection->createItem($item);
$shipmentItem->setQuantity($item->getQuantity());
}
//проверка доступности отгрузки и получение списка доставок
$mode = \Bitrix\Sale\Services\Base\RestrictionManager::MODE_CLIENT;
$deliveryList = \Bitrix\Sale\Delivery\Services\Manager::getRestrictedList($shipment, $mode);
$resultDelivery = [];
$restrictionParams = ['ID' => 'ID'];
// дополнительно фильтрую отгрузки по доступности города
foreach ($deliveryList as $delivery) {
if (Bitrix\Sale\Delivery\Restrictions\ByLocation::check($locationId, $restrictionParams, $delivery['ID'])) {
$resultDelivery[] = $delivery;
echo "<br>";
print_r($delivery);
}
}
?>
$zipProperty = $propertyCollection->getDeliveryLocationZip();
$zipProperty->setValue("101000");
onfailure: function (data, response) {
console.log(response.data);
дописал ваш код в конец, убрал добавления купонов, оставил в одном месте
В вардампе ничего нет, ошибок нет : /