Skip to content

Правильное сохранение заказа. Расчет всех возможных скидок и генерация всех событий связанных с оформлением заказ

Sergey edited this page Jul 23, 2015 · 1 revision

Для создания заказа в котором будут учтены все скидки на товары, а так же выполнены события:

  • OnSaleCalculateOrderShoppingCart
  • OnSaleCalculateOrderPersonType
  • OnSaleCalculateOrderProps
  • OnSaleCalculateOrderDelivery
  • OnSaleCalculateOrderPaySystem
  • OnSaleCalculateOrderDiscount
  • OnSaleCalculateOrderShoppingCartTax
  • OnSaleCalculateOrderDeliveryTax
  • OnSaleCalculateOrder
  • OnSetCouponList
  • OnDoBasketOrder
  • OnOrderSave
$arErrors = array();
$arWarnings = array();
// Данный метод вызывает события из списка вплоть до OnSaleCalculateOrder
// $arShoppingCart - может содержать не всю корзину, а только те элементы которые необходимо добавить.
$arOrderDat = CSaleOrder::DoCalculateOrder(
    $siteId,
    $userId,
    $arShoppingCart, 
    $personTypeId,
    $arOrderPropsValues,
    $deliveryId,
    $paySystemId,
    $arOptions,
    $arErrors,
    $arWarnings
);
$arOrderFields = array(
    "LID" => $arOrderDat['LID'],
    "PERSON_TYPE_ID" => $arOrderDat['PERSON_TYPE_ID'],
    "PAYED" => "N",
    "CANCELED" => "N",
    "STATUS_ID" => "N",
    "PRICE" => $arOrderDat['PRICE'],
    "CURRENCY" => $arOrderDat['CURRENCY'],
    "USER_ID" => $arOrderDat['USER_ID'],
    "USER_DESCRIPTION" => "",
    "ADDITIONAL_INFO" => ""
);
//Создание заказа и привязка корзин к заказу
$ORDER_ID = CSaleOrder::DoSaveOrder($arOrderDat, $arOrderFields, 0, $errors, $arCoupons, $arStoreBarcodeOrderFormData, $bSaveBarcodes);
//Применение скидок на товары в корзинах
$arOrder = array(
    'SITE_ID' => $siteId,
    'USER_ID' => $USER->GetID(),
    'BASKET_ITEMS' => $arShoppingCart
);
$arOptions = array();
$arErrors = array();
CSaleDiscount::DoProcessOrder($arOrder, $arOptions, $arErrors);
Clone this wiki locally