- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/shipment.php
- Класс: BitrixSaleShipment
- Вызов: Shipment::syncQuantityAfterModify
protected function syncQuantityAfterModify(BasketItem $basketItem, $value = null, $oldValue = null)
{
$result = new Result();
/** @var ShipmentItemCollection $shipmentItemCollection */
$shipmentItemCollection = $this->getShipmentItemCollection();
$shipmentItem = $shipmentItemCollection->getItemByBasketCode($basketItem->getBasketCode());
if ($value === 0)
{
if ($shipmentItem !== null)
{
$shipmentItem->setFieldNoDemand('QUANTITY', 0);
}
return $result;
}
if ($shipmentItem === null)
{
$shipmentItem = $shipmentItemCollection->createItem($basketItem);
}
$deltaQuantity = $value - $oldValue;
if ($deltaQuantity > 0) // plus
{
$shipmentItem->setFieldNoDemand(
"QUANTITY",
$shipmentItem->getField("QUANTITY") + $deltaQuantity
);
if (
Configuration::isEnableAutomaticReservation()
&& $this->needReservation()
)
{
InternalsCatalogProvider::tryReserveShipmentItem($shipmentItem);
}
}
else // minus
{
if (floatval($shipmentItem->getField("QUANTITY")) <= 0)
{
return new Result();
}
if ($value != 0 && roundEx($shipmentItem->getField("QUANTITY"), SALE_VALUE_PRECISION) < roundEx(-$deltaQuantity, SALE_VALUE_PRECISION))
{
$result->addError(
new ResultError(
str_replace(
array("#NAME#", "#QUANTITY#", "#DELTA_QUANTITY#"),
array($basketItem->getField("NAME"), $shipmentItem->getField("QUANTITY"), abs($deltaQuantity)),
Loc::getMessage('SALE_SHIPMENT_SYSTEM_QUANTITY_ERROR')
),
'SALE_SHIPMENT_SYSTEM_QUANTITY_ERROR'
)
);
return $result;
}
if ($value > 0)
{
$shipmentItem->setFieldNoDemand(
"QUANTITY",
$shipmentItem->getField("QUANTITY") + $deltaQuantity
);
if (
Configuration::isEnableAutomaticReservation()
&& $this->needReservation()
)
{
InternalsCatalogProvider::tryReserveShipmentItem($shipmentItem);
}
}
}
return $result;
}