- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/controller/realizationdocument.php
- Класс: Bitrix\Crm\Controller\RealizationDocument
- Вызов: RealizationDocument::setRealizationAction
public function setRealizationAction(int $id, string $value): void
{
if ($value === 'Y' && !$this->checkModifyPermission($id))
{
return;
}
elseif ($value === 'N' && !$this->checkPermission(ActionDictionary::ACTION_STORE_DOCUMENT_DELETE, $id))
{
return;
}
$shipmentResult = $this->prepareShipment($id);
if (!$shipmentResult->isSuccess())
{
$this->addErrors($shipmentResult->getErrors());
return;
}
$shipmentData = $shipmentResult->getData();
/** @var Crm\Order\Shipment $shipment */
$shipment = $shipmentData['shipment'];
/** @var Crm\Order\Order $order */
$order = $shipmentData['order'];
$delivery = Sale\Delivery\Services\Manager::getById($shipment->getDeliveryId());
$isEmptyDeliveryService = (
$delivery['CLASS_NAME'] === '\\' . Sale\Delivery\Services\EmptyDeliveryService::class
|| is_subclass_of($delivery['CLASS_NAME'], Sale\Delivery\Services\EmptyDeliveryService::class)
);
if ($value === 'N')
{
if ($shipment->isShipped())
{
$this->addError(
new Main\Error(
Main\Localization\Loc::getMessage(
'CRM_CONTROLLER_REALIZATION_DOCUMENT_DELETE_DEDUCTED_ERROR',
[
'#ID#' => htmlspecialcharsbx($shipment->getField('ACCOUNT_NUMBER')),
]
),
self::REALIZATION_CANNOT_DELETE_ERROR_CODE
)
);
}
elseif (
$this->isSetRealizationDocumentTradeBinding($order)
&& $order->getShipmentCollection()->getNotSystemItems()->count() === 1
&& $order->getPaymentCollection()->count() === 0
)
{
$deleteOrder = Crm\Order\Order::delete($order->getId());
if (!$deleteOrder->isSuccess())
{
$this->addErrors($deleteOrder->getErrors());
}
unset($order);
}
elseif ($isEmptyDeliveryService)
{
$deleteShipmentResult = $shipment->delete();
if (!$deleteShipmentResult->isSuccess())
{
$this->addErrors($deleteShipmentResult->getErrors());
}
}
else
{
$setResult = $shipment->setField('IS_REALIZATION', $value);
if (!$setResult->isSuccess())
{
$this->addErrors($setResult->getErrors());
}
}
}
else
{
$setResult = $shipment->setField('IS_REALIZATION', $value);
if (!$setResult->isSuccess())
{
$this->addErrors($setResult->getErrors());
}
}
if (isset($order) && $this->errorCollection->isEmpty())
{
$saveOrderResult = $order->save();
if (!$saveOrderResult->isSuccess())
{
$this->addErrors($saveOrderResult->getErrors());
}
}
}