Работа с заказом в Битрикс D7

use Bitrix\Sale;

Заказ Sale\Order

Получить заказ можно следующим образом

/** $orderId заказа */
$order = Sale\Order::load($orderId);

/** $accountNumber номер заказа  */
$order = Sale\Order::loadByAccountNumber($accountNumber);

Получить поля заказа

/** Статус заказа  */
$order->getField("STATUS_ID");
/** Сумма заказа  */
$order->getField('PRICE');

/** Список всех доступных полей */
$order->getAvailableFields();

Для полей имеется ряд геттеров

$order->getId();
/** ID сайта */
$order->getSiteId();
/** Дата добавления, объект \Bitrix\Main\Type\DateTime */
$order->getDateInsert();
/** ID типа плательщика */
$order->getPersonTypeId();
/** ID пользователя */
$order->getUserId();
/** Сумма заказа */
$order->getPrice();
/** Сумма без скидки */
$order->getBasePrice();
/** Оплаченная сумма */
$order->getSumPaid();
/** Стоимость доставки */
$order->getDeliveryPrice();
/** Размер скидки */
$order->getDiscountPrice();
/** Валюта заказа */
$order->getCurrency();

Для изменения полей есть метод setField

/** Смена  статуса заказа */
$order->setField('STATUS_ID', 'F');
$order->setField('USER_DESCRIPTION', 'Комментарий пользователя');

/** Чтобы изменить поле, без трансляции событий изменения */
$order->setFieldNoDemand('TRACKING_NUMBER', '49586');

/** Сохранение заказа */
$result = $order->save();
if (!$result->isSuccess()) {
    var_dump($result->getErrors());
}

Чтобы применить изменения, нужно обязательно сохранить заказ $order->save();

Методы состояния заказа, возвращает true или false

/** Заказ оплачен */
$order->isPaid();
/** Доставка разрешена */
$order->isAllowDelivery();
/** Заказ отгружен */
$order->isDeducted();
/** Аналог isDeducted */
$order->isShipped();
/** Заказ отменен */
$order->isCanceled();

/** Проблема с заказом */
$order->isMarked();
/** Внешний заказ */
$order->isExternal();
/** Новый заказ */
$order->isNew();
/** В заказе произошли изменения */
$order->isChanged();

Заказ имеет связи с вспомогательными объектами:

  • товары заказа Sale\Basket
  • отгрузки Sale\ShipmentCollection
  • оплаты Sale\PaymentCollection
  • свойства заказа Sale\PropertyValueCollection

Товары заказа Sale\Basket

Получение корзины и добавление корзины к заказу

/** Получить корзину заказа */
$basket = $order->getBasket();

/** Установить корзину в заказ */
$order->setBasket($basket);

foreach ($basket as $basketItem) {
    echo $basketItem->getName();
}

Геттеры корзины битрикс

/** ID товара */
$basket->getProductId();
/** Цена с учетом скидок */
$basket->getPrice();
/** Цена без учета скидок */
$basket->getBasePrice();
/** Величина скидки */
$basket->getDiscountPrice();
/** Количество товара */
$basket->getQuantity();
/** Вес корзины */
$basket->getWeight();

Отгрузка Sale\ShipmentCollection

Получение коллекции отгрузок

$shipmentCollection = $order->getShipmentCollection();

Оплата Sale\PaymentCollection

$paymentCollection = $order->getPaymentCollection();

Свойства заказа Sale\PropertyValueCollection

Получение коллекции свойств заказа битрикс

$propertyCollection = $order->getPropertyCollection();

Получение значений свойств

/** массив ['properties' => [], 'groups' => []]; */
$arResult = $propertyCollection->getArray();
/** массив групп */
$arResult = $propertyCollection->getGroups();
/** массив свойств группы */
$arResult = $propertyCollection->getGroupProperties($groupId);

У свойст есть штатное назначение (телефон, емейл, адрес и т.д.) их можно получить следующим образом

/** IS_EMAIL */
$emailProp = $propertyCollection->getUserEmail();
/** IS_PAYER */
$nameProp = $propertyCollection->getPayerName();
/** IS_LOCATION */
$locProp = $propertyCollection->getDeliveryLocation();
/** IS_LOCATION4TAX */
$taxLocProp = $propertyCollection->getTaxLocation();
/** IS_PROFILE_NAME */
$profNameProp = $propertyCollection->getProfileName();
/** IS_ZIP */
$zipProp = $propertyCollection->getDeliveryLocationZip();
/** IS_PHONE */
$phoneProp = $propertyCollection->getPhone();
/** IS_ADDRESS */
$addrProp = $propertyCollection->getAddress();

Получение свойства по id

$prop = $propertyCollection->getItemByOrderPropertyId($orderPropertyId);

Получение свойства по коду через перебор всех свойст

foreach ($propertyCollection as $propertyItem) {
    if ($propertyItem->getField('CODE') === 'PROP_CODE') {
        $propertyItem->setValue('value');
    }
}

Полученная переменна это экземпляр класса \Bitrix\Sale\PropertyValue

/** полуичить значение свойства */
$prop->getValue();
/** html форматированное значение */
$prop->getViewHtml();

Для изменения свойства

$prop->setValue('value');
$order->save();