Задать вопрос
CheBurashka3345
@CheBurashka3345

Как реализовать привязку купона к заказу в Битрикс?

При оформление заказа необходимо добавлять каждый товар в свою отгрузку, при этом весь функционал купонов скидок должен сохраниться?

Проблема в том что при удаление отгрузки или элемента из отгрузки в событии onSaleComponentOrderCreated (работает с объектом а не созданным заказом) слетает привязка купона к заказу. т.е. он выполняется но не проставляется в самом заказе

Событие onSaleComponentOrderCreated работает в sale.order.ajax, т.е. заказ существует только как объект
/** @var Sale\ShipmentCollection $shipmentCollection */
			$shipmentCollection = $order->getShipmentCollection();
            $service = Sale\Delivery\Services\Manager::getById(Sale\Delivery\Services\EmptyDeliveryService::getEmptyDeliveryServiceId());
            /** @var Sale\Shipment $shipment */
            foreach ($shipmentCollection as $shipment)
            {

                if($shipment->isSystem())
                    continue;

                $shipmentItemCollection = $shipment->getShipmentItemCollection();
                $firstProduct = true;
                if($shipmentItemCollection->count() > 1)
                {
                    //Проход по всем товарам отгрузки и добавление новых отгрузок
                    /** @var Sale\ShipmentItem $item */
                    foreach ($shipmentItemCollection as $key=>$item)
                    {
                        $basketItem = $item->getBasketItem();

                        if($basketItem->isBundleChild())
                            continue;

                        if($firstProduct == true)
                        {   //Первый продукт не удаляем из отгрузки
                            $firstProduct = false;
                            continue;
                        }
                        $item->delete();

                        $newShipment = $shipmentCollection->createItem();
                        $newShipmentItemCollection = $newShipment->getShipmentItemCollection();
                        $newShipment->setField('CURRENCY', $order->getCurrency());
                        /** @var Sale\ShipmentItem $shipmentItem */
                        $shipmentItem = $newShipmentItemCollection->createItem($basketItem);
                        $shipmentItem->setQuantity($basketItem->getQuantity());

                        $newShipment->setFields(array(
                            'DELIVERY_ID' => $service['ID'],
                            'DELIVERY_NAME' => $service['NAME'],
                            'CURRENCY' => $order->getCurrency()
                        ));
                    }
                }
            }
  • Вопрос задан
  • 1019 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ответы на вопрос 1
CheBurashka3345
@CheBurashka3345 Автор вопроса
Нашлась причина такого поведение, а именно:

1. необходимо производить пересчет скидки и корзины метод
$order->getDiscount()->calculate();
2. class Discount метод loadShipment

if ($this->isOrderNew())
{
     foreach ($orderShipmentList as $shipment)
    {
           if ($shipment->isSystem())
                 continue;


                 if (!$loadDelivery)
                 {
                          $this->shipment = $shipment;
                          $loadDelivery = true;
                 }
                 else
                 {
                          $result->addError(new Main\Entity\EntityError(
                          Loc::getMessage('BX_SALE_DISCOUNT_ERR_TOO_MANY_SHIPMENT'),
                                  self::ERROR_ID
                          ));


                           return $result;
                 }
   }
}


Что говорит о том что новый (создаваемый) заказ только с одной отгрузкой пересчитается.

Что говорит ТП Битрикс - 23.07.2018

На основе информации из данного обращения была создана заявка в отдел разработок.
Сроки реализации устанавливаются в отделе разработок и зависят от текущего плана работ. Назвать какой-то срок решения сейчас нет возможности.
"При выполнение $shipment->delete(); и применении в корзине Купонов - В созданном заказе нет привязки к Купонам."
Номер заявки: 102288
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы