- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/delivery/requests/manager.php
- Класс: BitrixSaleDeliveryRequestsManager
- Вызов: Manager::createDeliveryRequest
static function createDeliveryRequest($deliveryId, array $shipmentIds, array $additional = array())
{
$result = new Result();
if (!($deliveryRequestHandler = self::getDeliveryRequestHandlerByDeliveryId($deliveryId)))
{
$result->addError(
new MainError(
Loc::getMessage(
'SALE_DLVR_REQ_MNGR_ERROR_NOT_SUPPORT',
array('#DELIVERY_LINK#' => Helper::getDeliveryEditLink($deliveryId))
)));
self::sendOnCreateDeliveryRequestEvent($result, $deliveryId, $shipmentIds, $additional);
return $result;
}
/** @var ShipmentResult[] $checkResults */
$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')));
self::sendOnCreateDeliveryRequestEvent($result, $deliveryId, $shipmentIds, $additional);
return $result;
}
$handlerResult = $deliveryRequestHandler->create($shipmentIds, $additional);
if ($handlerResult->isSuccess())
{
$result->addResults($handlerResult->getResults());
}
else
{
$result->addErrors($handlerResult->getErrors());
foreach ($handlerResult->getShipmentResults() as $sRes)
{
$result->addResult(self::processShipmentResult($sRes));
}
self::sendOnCreateDeliveryRequestEvent($result, $deliveryId, $shipmentIds, $additional);
return $result;
}
$results = $result->getResults();
if (!is_array($results) || empty($results))
{
$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_RES_UNKNOWN')));
self::sendOnCreateDeliveryRequestEvent($result, $deliveryId, $shipmentIds, $additional);
return $result;
}
/** @var ShipmentResult|RequestResult $requestResult */
foreach ($results as $resId => $requestResult)
{
if ($requestResult instanceof ShipmentResult)
{
$requestResult = self::processShipmentResult($requestResult);
}
elseif ($requestResult instanceof RequestResult)
{
$requestId = 0;
/** @var RequestResult $requestResult*/
if ($requestResult->isSuccess())
{
$handlerResultData = $handlerResult->getData();
$res = RequestTable::add(array(
'DELIVERY_ID' => $deliveryRequestHandler->getHandlingDeliveryServiceId(),
'EXTERNAL_ID' => $requestResult->getExternalId(),
'CREATED_BY' => ($GLOBALS['USER'] instanceof CUser && (int)$GLOBALS['USER']->GetID() > 0)
? (int)$GLOBALS['USER']->GetID()
: null,
'STATUS' => Manager::STATUS_SENT,
'EXTERNAL_STATUS' => $handlerResultData['STATUS'] ?? null,
'EXTERNAL_STATUS_SEMANTIC' => $handlerResultData['STATUS_SEMANTIC'] ?? null,
'EXTERNAL_PROPERTIES' => (isset($handlerResultData['PROPERTIES']) && is_array($handlerResultData['PROPERTIES']))
? $handlerResultData['PROPERTIES']
: [],
));
if (!$res->isSuccess())
{
$requestResult->addErrors($res->getErrors());
continue;
}
$requestId = $res->getId();
if ($requestId > 0)
{
$requestResult->setInternalId($requestId);
}
}
$shipmentsResults = $requestResult->getShipmentResults();
if (empty($shipmentsResults))
continue;
foreach ($shipmentsResults as $sResIdx => $shipmentResult)
{
$shipmentsResults[$sResIdx] = self::processShipmentResult($shipmentResult, $requestId);
}
$requestResult->setResults($shipmentsResults);
}
else
{
$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_ANSW_TYPE').' "'.get_class($requestResult).'"'));
continue;
}
$results[$resId] = $requestResult;
}
$result->setResults($results);
self::sendOnCreateDeliveryRequestEvent($result, $deliveryId, $shipmentIds, $additional);
return $result;
}