- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/delivery/requests/manager.php
- Класс: BitrixSaleDeliveryRequestsManager
- Вызов: Manager::deleteShipmentsFromDeliveryRequest
static function deleteShipmentsFromDeliveryRequest($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;
}
if (!($deliveryRequestHandler = self::getDeliveryRequestHandlerByRequestId($requestId)))
{
$result->addError(
new MainError(
Loc::getMessage(
'SALE_DLVR_REQ_MNGR_ERROR_REQ_OBJ'
)));
return $result;
}
$checkResults = self::checkShipmentIdsBeforeDelete($shipmentIds);
foreach ($checkResults as $res)
{
if (!$res->isSuccess())
{
$result->addErrors($res->getErrors());
unset($shipmentIds[array_search($res->getInternalId(), $shipmentIds)]);
}
}
if (empty($shipmentIds))
return $result;
$res = $deliveryRequestHandler->deleteShipments($requestId, $shipmentIds);
$result->setResults($res->getResults());
if (!$res->isSuccess())
{
$result->addErrors($res->getErrors());
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;
}
$con = MainApplication::getConnection();
/** @var ShipmentResult $shpRes */
foreach ($results as $resId => $shpRes)
{
if (!($shpRes instanceof ShipmentResult))
{
$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_ERROR_ANSW_TYPE').' "'.get_class($shpRes).'"'));
continue;
}
if ($shpRes->isSuccess())
{
$shpId = intval($shpRes->getInternalId());
if ($shpId <= 0)
{
$result->addError(new MainError(Loc::getMessage('SALE_DLVR_REQ_MNGR_SHP_ID_LESS_ZERO')));
continue;
}
$con->queryExecute("DELETE FROM ".ShipmentTable::getTableName()." WHERE REQUEST_ID=".intval($requestId)." AND SHIPMENT_ID=".intval($shpId));
//Unset mark about changed shipment
self::unSetMarkerShipmentChanged($shpId);
//If there is no more shipments in this request
if (!ShipmentTable::getList(array('filter' => array('=REQUEST_ID' => $requestId)))->fetch())
{
$res = RequestTable::delete($requestId);
if ($res->isSuccess())
{
$result->addMessage(
new Message(
Loc::getMessage(
'SALE_DLVR_REQ_MNGR_EMPTY_REQ_DELETED',
array('#REQUEST_ID#' => $requestId)
)));
}
else
{
$result->addError(
new MainError(
Loc::getMessage(
'SALE_DLVR_REQ_MNGR_EMPTY_REQ_NOT_DELETED',
array('#REQUEST_LINK#' => Helper::getRequestViewLink($requestId))
).implode('; ',$result->getErrorMessages())
));
}
}
}
$results[$resId] = $shpRes;
}
$result->setResults($results);
return $result;
}