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