Я применяю индивидуальную цену к продукту, используя следующий метод:
Использовал событие «checkout_cart_product_add_after» и создал для него функцию соответственно.
В этой функции я использовал метод $ item-> setCustomPrice ($ value).
Товар добавлен в корзину по специальной цене, и все правильно. Включая применяемый налог и итоги.
Однако, когда я обновляю то же количество товара в корзине и устанавливаю другую пользовательскую цену, дела идут не так хорошо.
Я использую событие «checkout_cart_save_after», делаю то же самое, что упоминал ранее, и у меня возникают следующие проблемы:
Если я выберу следующую опцию «Налог» в бэк-офисе Magento «Показать цены на товары в каталоге: включая налоги», цена не изменится.
Если я не укажу налог на цены по каталогу, цена будет обновлена. Тем не менее, итоги все еще используют старую таможенную цену.
Я не знаю, использую ли я неправильное событие для этого. На данный момент я чувствую, что мое единственное решение — удалить продукт и добавить его в корзину по новой цене. Что я считаю, это не правильный путь.
Заранее спасибо всем, кто нашел время, чтобы взглянуть на этот вопрос.
Если мне не ясно с моей проблемой, я рад прояснить любые вопросы.
редактировать
Я добавлю еще несколько деталей, которые могут помочь:
FOREACH($observer->getCart()->getQuote()->getAllVisibleItems() AS $item){
$productPrice = $item->getProduct()->getPrice();
$discountValue = 20; //This will be a custom value that I load with a Web Service
$value = $productPrice - ($productPrice * $discountValue / 100);
$item->setCustomPrice($value);
$item->setOriginalCustomPrice($value);
}
Это работает при моем первом обновлении Custom Price, а не при обновлении моей корзины, как упоминалось ранее.
Вам нужно использовать как событие наблюдателя checkout_cart_product_add_after, так и checkout_cart_update_items_after
checkout_cart_update_items_after это событие сработало при обновлении кол-во в корзине. Так что вам нужно использовать это событие также.
Это должно исправить вашу проблему:
$item->setCustomPrice($value);
$item->setOriginalCustomPrice($value);