Если честно, к Д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
Комментариев нет:
Отправить комментарий