Работа с заказом в Битрикс 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();