- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/helpers/admin/blocks/orderbasketshipment.php
- Класс: BitrixSaleHelpersAdminBlocksOrderBasketShipment
- Вызов: OrderBasketShipment::modifyFromRequest
public function modifyFromRequest($data, $request)
{
// recovery on delete
foreach ($data['ITEMS'] as $code => $item)
{
$basketCode = $item['BASKET_ID'];
if (!isset($request[$basketCode]))
{
$data['UNSHIPPED_PRODUCTS'][$code] = $data['ITEMS'][$code];
unset($data['ITEMS'][$code]);
}
}
// recovery on add
foreach ($data['UNSHIPPED_PRODUCTS'] as $code => $item)
{
$basketCode = $item['BASKET_ID'];
if (isset($request[$basketCode]))
{
$data['ITEMS'][$code] = $data['UNSHIPPED_PRODUCTS'][$code];
unset($data['UNSHIPPED_PRODUCTS'][$code]);
}
}
// recovery barcode info
if ($request)
{
foreach ($request as $basketCode => $product)
{
$basket = $this->order->getBasket();
/** @var BitrixSaleBasketItem $basketItem */
$basketItem = $basket->getItemById($product['BASKET_ID']);
if ($basketItem && $basketItem->isBundleChild())
{
$parentBasketItem = $basketItem->getParentBasketItem();
foreach ($data['ITEMS'][$parentBasketItem->getId()]['SET_ITEMS'] as $id => $setItem)
{
if ($setItem['PRODUCT_ID'] == $product['PRODUCT_ID'])
{
$item = &$data['ITEMS'][$parentBasketItem->getId()]['SET_ITEMS'][$id];
break;
}
}
}
else
{
$item = &$data['ITEMS'][$product['BASKET_ID']];
}
$item['AMOUNT'] = $product['AMOUNT'];
$item['QUANTITY'] = $product['QUANTITY'];
if ($product['BARCODE_INFO'])
{
foreach ($product['BARCODE_INFO'] as $id => $info)
{
$storeId = $info['STORE_ID'];
if (!isset($item['BARCODE_INFO'][$storeId]))
{
$item['BARCODE_INFO'][$storeId] = array();
if ($basketItem->isBundleParent())
{
$item['BARCODE_INFO'][$storeId][0] = array();
$item['BARCODE_INFO'][$storeId][0]['QUANTITY'] = $info['QUANTITY'];
}
if ($info['BARCODE'])
{
foreach ($info['BARCODE'] as $barcode)
{
$item['BARCODE_INFO'][$storeId][] = array(
'ID' => (int)$barcode['ID'],
'BARCODE' => (string)$barcode['VALUE'],
'MARKING_CODE' => (string)$barcode['MARKING_CODE'],
'QUANTITY' => ($basketItem->isbarcodeMulti()) ? 1 : $info['QUANTITY']
);
}
}
}
else
{
foreach ($item['BARCODE_INFO'][$storeId] as &$barcodeInfo)
{
if ($info['BARCODE'])
{
$barcode = array_shift($info['BARCODE']);
$barcodeInfo['ID'] = (int)$barcode['ID'];
$barcodeInfo['BARCODE'] = (string)$barcode['VALUE'];
$barcodeInfo['MARKING_CODE'] = (string)$barcode['MARKING_CODE'];
}
$barcodeInfo['QUANTITY'] = ($basketItem->isbarcodeMulti()) ? 1 : $info['QUANTITY'];
}
unset($barcodeInfo);
}
}
}
}
}
unset($item);
return $data;
}