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