• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/requests/manager.php
  • Класс: BitrixSaleDeliveryRequestsManager
  • Вызов: Manager::addShipmentsToDeliveryRequest
static function addShipmentsToDeliveryRequest($requestId, array $shipmentIds, array $additional = [])
{
	$result = new Result();

	if (empty($requestId))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_REQ_ID')));
		return $result;
	}

	if (empty($shipmentIds))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_SHP_ID_LIST_EMPTY')));
		return $result;
	}

	if (!($deliveryRequestHandler = self::getDeliveryRequestHandlerByRequestId($requestId)))
	{
		$result->addError(
			new MainError(
				Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_SHP_ADD2').'. '.
				Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_REQ_OBJ',
					"",
					$requestId
		)));
		return $result;
	}

	$checkResults = self::checkShipmentIdsBeforeAdd($shipmentIds);

	foreach ($checkResults as $res)
	{
		if ($res->isSuccess())
			continue;

		$result->addResult(
			self::processShipmentResult(
				$res
			));

		unset($shipmentIds[array_search($res->getInternalId(), $shipmentIds)]);
	}

	if (empty($shipmentIds))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_SHP_ABSENT')));
		return $result;
	}

	$res = $deliveryRequestHandler->addShipments($requestId, $shipmentIds, $additional);

	if ($res->isSuccess())
	{
		$result->addResults($res->getResults());
	}
	else
	{
		$result->addErrors($res->getErrors());

		foreach ($res->getShipmentResults() as $sRes)
			$result->addResult(self::processShipmentResult($sRes));

		return $result;
	}

	$results = $result->getResults();

	if (!is_array($results) || empty($results))
	{
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_RES_UNKNOWN')));
		return $result;
	}

	$successResCount = 0;

	/** @var RequestResult $reqRes */
	foreach ($results as $resId => $reqRes)
	{
		if ($reqRes instanceof ShipmentResult)
		{
			$results[$resId] = self::processShipmentResult($reqRes, $requestId);
		}
		elseif ($reqRes instanceof RequestResult)
		{
			$reqShpResults = $reqRes->getShipmentResults();

			foreach ($reqShpResults as $id => $shpRes)
			{
				$reqShpResults[$id] = self::processShipmentResult($shpRes, $requestId);

				if ($shpRes->isSuccess())
					$successResCount++;
			}

			$reqRes->setResults($reqShpResults);
			$results[$resId] = $reqRes;
		}
		else
		{
			$result->addError(
				new MainError(
					Loc::getMessage(
						'SALE_DLVR_REQ_MNGR_RES_WRONG',
						array(
							'#CLASS_NAME#' => get_class($reqRes),
							'#REQUEST_ID#' => $requestId
						)
					)
				)
			);

			continue;
		}
	}

	if ($successResCount <= 0)
		$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_SHP_ABSENT2')));

	$result->setResults($results);
	return $result;
}