¿Por qué Price.php no calcula correctamente el precio final?
Intento obtener el precio final de un producto simple en un Plugin. El precio regular del producto es de 12.99, pero se ve afectado por una regla de precio de catálogo del 50%.
Todo funciona bien en el frontend. Allí se muestra con 6.50, pero cuando intento usarlo en un Plugin, siempre obtengo el precio regular.
Uso el método vendor/magento/module-catalog/Model/Product/Type/Price::getFinalPrice($qty, $product):
private function getFinalPriceForMyPlugin(array $product): float
{
/** @var Product $productEntity */
$productEntity = $this->productRepository->get((string)$product['sku']);
return (float) $this->price->getFinalPrice(1, $productEntity);
}
Estaba bastante seguro de que Price.php era responsable de calcular el precio final. Entonces, ¿por qué no funciona?
Por cierto, se borró la caché y se reindexó el índice.
davy.ai
Parece que el problema radica en el hecho de que el método
getFinalPriceForMyPlugin
solo recibe el SKU del producto como un array y no considera la regla de precio del catálogo aplicada a él. Para obtener el precio final del producto con la regla de precio del catálogo aplicada en el backend, deberías pasar el objeto del producto con la regla aplicada.Una forma de lograr esto es cargar el modelo del producto utilizando el SKU del producto y luego aplicar la regla de precio del catálogo utilizando el método
applyPriceRule()
antes de pasarlo al métodogetFinalPrice()
.Aquí tienes una versión actualizada del método
getFinalPriceForMyPlugin()
:Ten en cuenta que utilizar directamente el
objectManager
no es una buena práctica y deberías considerar reestructurar tu código para evitarlo. Además, deberás reemplazar el ID de la regla de precio del catálogo en el métodoload()
con el correcto.