- Модуль: 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;
}