• Модуль: 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;
}