• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/delivery/requests/manager.php
  • Класс: BitrixSaleDeliveryRequestsManager
  • Вызов: Manager::updateShipmentsFromDeliveryRequest
static function updateShipmentsFromDeliveryRequest($requestId, array $shipmentIds)
{
	$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;
	}

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

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

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

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

	if (empty($shipmentIds))
	{
		$result->addError(
			new MainError(
				Loc::getMessage(
					'SALE_DLVR_REQ_MNGR_ERROR_SHP_UPD',
					array('#REQUEST_LINK#' => Helper::getRequestViewLink($requestId))
		)));
		return $result;
	}

	$deliveryRequestHandler = self::getDeliveryRequestHandlerByRequestId($requestId);

	if (!$deliveryRequestHandler)
	{
		$result->addError(
			new MainError(
				Loc::getMessage(
					'SALE_DLVR_REQ_MNGR_ERROR_SHP_UPD',
					array('#REQUEST_LINK#' => Helper::getRequestViewLink($requestId))
				).'. '.
				Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_REQ_OBJ')
		));

		return $result;
	}

	$res = $deliveryRequestHandler->updateShipments($requestId, $shipmentIds);
	$result->addResults($res->getResults());

	if (!$res->isSuccess())
	{
		$result->addErrors($res->getErrors());
		return $result;
	}

	$results = $res->getResults();

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

	$resultsFinal = array();

	foreach ($results as $res)
	{
		if ($res instanceof ShipmentResult)
		{
			$resultsFinal[] = self::processShipmentResult($res, $requestId);
		}
		elseif ($res instanceof RequestResult)
		{
			$reqShpResults = $res->getShipmentResults();

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

				if ($shpRes->isSuccess())
				{
					$shpInternalId = intval($shpRes->getInternalId());
					//Unset mark about changed shipments
					self::unSetMarkerShipmentChanged($shpInternalId);

					$dbRes = self::saveShipmentResult($shpRes->getInternalId(), $shpRes);

					if (!$dbRes->isSuccess())
						$shpRes->addErrors($dbRes->getErrors());
				}

				$resultsFinal[] = $shpRes;
			}
		}
		else
		{
			$result->addError(
				new MainError(
					Loc::getMessage('SALE_DLVR_REQ_MNGR_RES_WRONG_UPD')
			));

			continue;
		}
	}

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