• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/shipmentitem.php
  • Класс: BitrixSaleShipmentItem
  • Вызов: ShipmentItem::delete
public function delete()
{
	$result = new Result();

	$shipment = $this->getCollection()->getShipment();

	$oldEntityValues = $this->fields->getOriginalValues();

	$event = new MainEvent('sale', "OnBeforeSaleShipmentItemEntityDeleted", [
			'ENTITY' => $this,
			'VALUES' => $oldEntityValues,
	]);
	$event->send();

	foreach($event->getResults() as $eventResult)
	{
		if($eventResult->getType() == MainEventResult::ERROR)
		{
			$errorMsg = new ResultError(
				Loc::getMessage('SALE_EVENT_ON_BEFORE_SALESHIPMENTITEM_ENTITY_DELETED_ERROR'),
				'SALE_EVENT_ON_BEFORE_SALESHIPMENTITEM_ENTITY_DELETED_ERROR'
			);
			if ($eventResultData = $eventResult->getParameters())
			{
				if (isset($eventResultData) && $eventResultData instanceof ResultError)
				{
					$errorMsg = $eventResultData;
				}
			}

			$result->addError($errorMsg);
		}
	}

	if (!$result->isSuccess())
	{
		return $result;
	}


	if (!$shipment->isSystem())
	{
		if ($shipment->isShipped())
		{
			/** @var BasketItem $basketItem */
			if (!$basketItem = $this->getBasketItem())
			{
				throw new MainObjectNotFoundException('Entity "BasketItem" not found');
			}

			$result->addError(
				new ResultError(
					Loc::getMessage('SALE_SHIPMENT_ITEM_SHIPMENT_ALREADY_SHIPPED_CANNOT_EDIT'),
					'SALE_SHIPMENT_ITEM_SHIPMENT_ALREADY_SHIPPED_CANNOT_EDIT'
				)
			);

			return $result;
		}

		$r = $this->setField("QUANTITY", 0);

		if (!$r->isSuccess())
		{
			return $result->addErrors($r->getErrors());
		}
	}
	elseif ($shipment->isSystem() && $this->getQuantity() > 1e-10)
	{
		throw new ErrorException('System shipment not empty');
	}

	$r = parent::delete();
	if (!$r->isSuccess())
	{
		$result->addErrors($r->getErrors());
	}


	$event = new MainEvent('sale', "OnSaleShipmentItemEntityDeleted", [
			'ENTITY' => $this,
			'VALUES' => $oldEntityValues,
	]);
	$event->send();

	foreach($event->getResults() as $eventResult)
	{
		if($eventResult->getType() == MainEventResult::ERROR)
		{
			$errorMsg = new ResultError(
				Loc::getMessage('SALE_EVENT_ON_SALESHIPMENTITEM_ENTITY_DELETED_ERROR'),
				'SALE_EVENT_ON_SALESHIPMENTITEM_ENTITY_DELETED_ERROR'
			);
			$eventResultData = $eventResult->getParameters();
			if (isset($eventResultData) && $eventResultData instanceof ResultError)
			{
				$errorMsg = $eventResultData;
			}

			$result->addError($errorMsg);
		}
	}

	return $result;
}