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

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

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

	foreach ($event->getResults() as $eventResult)
	{
		if ($eventResult->getType() == MainEventResult::ERROR)
		{
			$eventResultData = $eventResult->getParameters();
			if ($eventResultData instanceof ResultError)
			{
				return $result->addError($eventResultData);
			}
		}
	}

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

	$shipmentItem = $this->getCollection()->getShipmentItem();
	$basketItem = $shipmentItem->getBasketItem();

	/** @var ReserveQuantityCollection $reserveCollection */
	$reserveCollection = $basketItem->getReserveQuantityCollection();

	if ($reserveCollection && $shipmentItem->getReservedQuantity() > 0)
	{
		$storeIdTo = Configuration::getDefaultStoreId();
		$storeIdFrom = $this->getStoreId();

		if ($storeIdFrom === $storeIdTo)
		{
			return $result;
		}

		$reserveTo = $reserveFrom = null;

		/** @var ReserveQuantity $reserve */
		foreach ($reserveCollection as $reserve)
		{
			if ($reserve->getStoreId() === $storeIdFrom)
			{
				$reserveFrom = $reserve;
			}
			elseif ($reserve->getStoreId() === $storeIdTo)
			{
				$reserveTo = $reserve;
			}

			if ($reserveTo && $reserveFrom)
			{
				break;
			}
		}

		$delta = $this->getQuantity();

		if ($reserveFrom)
		{
			$settableQuantity = $reserveFrom->getQuantity() - $delta;
			if ($settableQuantity > 0)
			{
				$reserveFrom->setField('QUANTITY', $settableQuantity);
			}
			else
			{
				$reserveFrom->delete();
			}
		}

		if (!$reserveTo)
		{
			$reserveTo = $reserveCollection->create();
			$reserveTo->setStoreId($storeIdTo);
		}

		$reserveTo->setQuantity($reserveTo->getQuantity() + $delta);
	}

	$event = new MainEvent('sale', "OnSaleShipmentItemStoreEntityDeleted", array(
		'ENTITY' => $this,
		'VALUES' => $this->fields->getOriginalValues(),
	));
	$event->send();

	foreach ($event->getResults() as $eventResult)
	{
		if ($eventResult->getType() == MainEventResult::ERROR)
		{
			$eventResultData = $eventResult->getParameters();
			if ($eventResultData instanceof ResultError)
			{
				$result->addError($eventResultData);
			}
		}
	}

	return $result;
}