- Модуль: sale
- Путь к файлу: ~/bitrix/modules/sale/lib/controller/action/entity/updatebasketitemaction.php
- Класс: BitrixSaleControllerActionEntityUpdateBasketItemAction
- Вызов: UpdateBasketItemAction::updateBasketItem
public function updateBasketItem(int $id, array $fields): SaleResult
{
$result = new SaleResult();
$registry = SaleRegistry::getInstance(SaleRegistry::REGISTRY_TYPE_ORDER);
/** @var SaleBasket $basketClass */
$basketClass = $registry->getBasketClassName();
$basketIterator = $basketClass::getList([
'select' => ['ORDER_ID', 'FUSER_ID', 'LID'],
'filter' => [
'=ID' => $id
]
]);
$fields = $this->prepareBasketFields($fields);
if ($basketItemData = $basketIterator->fetch())
{
if (empty($basketItemData['ORDER_ID']))
{
$basket = $this->getBasket($basketItemData['FUSER_ID'], $basketItemData['LID']);
if ($basket && !$basket->isEmpty())
{
$basketItem = $basket->getItemByBasketCode($id);
foreach ($fields as $fieldName => $fieldValue)
{
$setFieldResult = $basketItem->setField($fieldName, $fieldValue);
if (!$setFieldResult->isSuccess())
{
/** @var MainError $error */
foreach ($setFieldResult->getErrors() as $error)
{
$result->addError(
new MainError(
$error->getMessage(),
SaleControllerErrorEnumeration::UPDATE_BASKET_ITEM_ACTION_SET_FIELD
)
);
}
}
}
$checkQuantityResult = $this->checkQuantity($basket);
if (!$checkQuantityResult->isSuccess())
{
foreach ($checkQuantityResult->getErrors() as $error)
{
$result->addError(
new MainError(
$error->getMessage(),
SaleControllerErrorEnumeration::UPDATE_BASKET_ITEM_ACTION_CHECK_QUANTITY
)
);
}
}
if ($result->isSuccess())
{
$saveResult = $basket->save();
if ($saveResult->isSuccess())
{
$result->setData([
'basket' => $basket,
'basketItem' => $basketItem,
]);
}
else
{
/** @var MainError $error */
foreach ($saveResult->getErrors() as $error)
{
$result->addError(
new MainError(
$error->getMessage(),
SaleControllerErrorEnumeration::UPDATE_BASKET_ITEM_ACTION_SAVE_BASKET
)
);
}
}
}
}
else
{
$result->addError(
new MainError(
'basket item load error',
SaleControllerErrorEnumeration::UPDATE_BASKET_ITEM_ACTION_BASKET_LOAD
)
);
}
}
else
{
$result->addError(
new MainError(
'there is order with this basket item',
SaleControllerErrorEnumeration::UPDATE_BASKET_ITEM_ACTION_ORDER_EXIST
)
);
}
}
else
{
$result->addError(
new MainError(
'basket item with id '.$id.' is not exists',
SaleControllerErrorEnumeration::UPDATE_BASKET_ITEM_ACTION_BASKET_ITEM_NOT_EXIST
)
);
}
return $result;
}