Если честно, к Д7 у меня несколько неоднозначное отношение. В некоторых местах я попискиваю от восторга, а в некоторых хочется топать ногами и ругаться неприличными словами.
Однако, несмотря на, код становится чище и структурированнее, платформа дорабатывается и растёт.
Сегодняшняя задача такая: получить Отгрузки указанного Заказа и понять, какие Товары в каждой из этих Отгрузок.
Как известно, у одного Заказа может быть несколько Отгрузок. То есть, если заказ целиком не готов, то можно его разделить на парочку посылок и отправлять частями и даже например разными службами доставки или вообще - оплачивать по частям.
Для тестов создаём заказ с несколькими товарами. В админке радостно делим заказ на парочку отгрузок (у меня получились с айдишками 169 и 172), в одну из которых пихаем часть товаров, а в другую - оставшиеся.
Получить список отгрузок можно разными способами, но если мы хотим получить Отгрузки какого-то непосредственного Заказа, то легче всего спросить сам Заказ:
Коллекция Отгрузок - по факту это список объектов Отгрузок, у неё есть свой итератор, поэтому можно к ней обратиться с помощью foreach.
Для каждого объекта Отгрузки нам надо получить Коллекцию Товаров в ней.
Коллекция Товаров - это список объектов Товаров, который также можно просто перебрать, получая их свойства.
То есть для нашего случая получаем вот такую картинку:
* Да, у меня в офисе есть цветные фломастеры и карандаши!
И например вот такой код:
Кстати, по Д7 много полезного можно почерпнуть из статей mr.cappuccino
Битрикс D7
Однако, несмотря на, код становится чище и структурированнее, платформа дорабатывается и растёт.
Сегодняшняя задача такая: получить Отгрузки указанного Заказа и понять, какие Товары в каждой из этих Отгрузок.
Как известно, у одного Заказа может быть несколько Отгрузок. То есть, если заказ целиком не готов, то можно его разделить на парочку посылок и отправлять частями и даже например разными службами доставки или вообще - оплачивать по частям.
Для тестов создаём заказ с несколькими товарами. В админке радостно делим заказ на парочку отгрузок (у меня получились с айдишками 169 и 172), в одну из которых пихаем часть товаров, а в другую - оставшиеся.
Получить список отгрузок можно разными способами, но если мы хотим получить Отгрузки какого-то непосредственного Заказа, то легче всего спросить сам Заказ:
//заводим объект заказа $order = \Bitrix\Sale\Order::load($order_id); //и получаем Коллекцию Отгрузок текущего Заказа $shipmentCollection = $order->getShipmentCollection();
Коллекция Отгрузок - по факту это список объектов Отгрузок, у неё есть свой итератор, поэтому можно к ней обратиться с помощью foreach.
Для каждого объекта Отгрузки нам надо получить Коллекцию Товаров в ней.
Коллекция Товаров - это список объектов Товаров, который также можно просто перебрать, получая их свойства.
То есть для нашего случая получаем вот такую картинку:
* Да, у меня в офисе есть цветные фломастеры и карандаши!
И например вот такой код:
foreach($shipmentCollection as $shipment)
{
$shipment_id = $shipment->getId();
//пропускаем системные
if ($shipment->isSystem())
continue;
$arShipments[$shipment_id] = array(
'ID' => $shipment_id,
'ACCOUNT_NUMBER' => $shipment->getField('ACCOUNT_NUMBER'),
'ORDER_ID' => $shipment->getField('ORDER_ID'),
'DELIVERY_ID' => $shipment->getField('DELIVERY_ID'),
'PRICE_DELIVERY' => (float)$shipment->getField('PRICE_DELIVERY'),
'BASKET' => array(),
);
//получаем Коллекцию Товаров в Корзине каждой Отгрузки
$shipmentItemCollection = $shipment->getShipmentItemCollection();
foreach($shipmentItemCollection as $item)
{
//объект Товара в корзине Отгрузки
$basketItem = $item->getBasketItem();
//не учитываем товары, которые нельзя купить или которые отложены
if (!$basketItem->canBuy() || $basketItem->isDelay())
continue;
$arItem = array(
'PRODUCT_ID' => $basketItem->getProductId(),
'NAME' => $basketItem->getField('NAME'),
'PRICE' => $basketItem->getPrice(), // за единицу
'FINAL_PRICE' => $basketItem->getFinalPrice(), // сумма
'QUANTITY' => $basketItem->getQuantity(),
'WEIGHT' => $basketItem->getWeight(),
);
$arShipments[$shipment_id]['BASKET'][$arItem['PRODUCT_ID']] = $arItem;
}
}
Кстати, по Д7 много полезного можно почерпнуть из статей mr.cappuccino
Битрикс D7



Комментариев нет:
Отправить комментарий