- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/Reservation/Strategy/ReserveQuantityEqualProductQuantityStrategy.php
- Класс: Bitrix\Crm\Reservation\Strategy\ReserveQuantityEqualProductQuantityStrategy
- Вызов: ReserveQuantityEqualProductQuantityStrategy::reservation
public function reservation(int $ownerTypeId, int $ownerId): ReservationResult
{
$result = new ReservationResult();
$rows = $this->getProductRows($ownerTypeId, $ownerId);
foreach ($rows as $row)
{
$rowId = (int)$row['ID'];
$quantity = (float)$row['QUANTITY'];
if ($row['RESERVE_ID'])
{
$reserveInfo = $result->addReserveInfo(
$rowId,
$quantity,
0
);
$reserveInfo->setStoreId($row['RESERVE_STORE_ID']);
$reserveInfo->setDateReserveEnd((string)$row['RESERVE_DATE_RESERVE_END']);
if ($row['RESERVE_IS_AUTO'] !== 'Y')
{
continue;
}
$reserveQuantity = (float)$row['RESERVE_QUANTITY'];
if ($reserveQuantity === $quantity)
{
continue;
}
$saveResult = $this->saveCrmReserve([
'ID' => $row['RESERVE_ID'],
'RESERVE_QUANTITY' => $quantity,
]);
$reserveInfo->setDeltaReserveQuantity($quantity - $reserveQuantity);
}
else
{
$saveResult = $this->saveCrmReserve([
'ROW_ID' => $rowId,
'RESERVE_QUANTITY' => $quantity,
'STORE_ID' => $this->defaultStoreId,
'DATE_RESERVE_END' => $this->defaultDateReserveEnd,
'IS_AUTO' => 'Y',
]);
$reserveInfo = $result->addReserveInfo(
$rowId,
$quantity,
$quantity
);
$reserveInfo->setStoreId($this->defaultStoreId);
$reserveInfo->setDateReserveEnd((string)$this->defaultDateReserveEnd);
}
$result->addErrors($saveResult->getErrors());
}
return $result;
}