Я пытаюсь обновить цену товара в корзине, зависит от итоговой суммы.Я заставил наблюдателя изменить цену перед сохранением корзины.Моя проблема в том, что значения для измененных элементов изменяются не вовремя.Пример:
У меня есть два товара в корзине # 1. Товар - 150 долларов, товар # 2 - 10 долларов. Когда я меняю количество, первый товар в сумме этого предмета устанавливается на 300 долларов (это нормально), однако цена #2 Элемент изменен на 0 (это нормально), но в базе данных я все еще вижу price, base_price, row_total, base_row_total, price_incl_tax, base_price_incl_tax, row_total_incl_tax, base_row_incl_tax
со значениями $ 10.Когда я снова изменяю количество товара № 1, товар № 2 меняет цену на 10 долларов США, но значения в базе данных теперь равны 0. Где и как мне изменить цену, чтобы в базе данных были правильные данные?Вот мой код:
events.xml:
<event name="checkout_cart_save_before">
<observer name="Vendor::save_cart” instance="Vendor\Observer\BeforeCartSaveObserver" shared="false"/>
</event>
Наблюдатель:
public function execute(\Magento\Framework\Event\Observer $observer)
{
$cart = $observer->getCart();
$quote = $this->checkoutSession->getQuote();
$quote->collectTotals();
$quote->setTotalsCollectedFlag(false);
foreach ($quote->getAllVisibleItems() as $item) {
$product = $item->getProduct();
if (!$product->getIsFree()) {
continue;
}
$freeItem = $item;
break;
}
if ($quote->getGrandTotal() > 240) {
$item->setCustomPrice(0)
->setOriginalCustomPrice(0)
->getProduct()->setIsSuperMode(true);
} else {
$product = $freeItem->getProduct();
$defaultProductPrice = $product->getPriceInfo()
->getPrice('regular_price')
->getAmount()
->getBaseAmount();
$item->setConvertedPrice($defaultProductPrice)
->setCustomPrice($defaultProductPrice)
->setOriginalCustomPrice($defaultProductPrice);
$item->setPrice($defaultProductPrice)->setBaseOriginalPrice($item->getProduct()->getPrice());
}
$item->calcRowTotal();
return $this;
}