Estoy intentando implementar la funcionalidad de la Directiva Ómnibus para mostrar el precio más bajo de un producto en los últimos 30 días. He intentado hacer un override en la clase Product.php para añadir una propiedad y un método que, en teoría, debería calcular este precio y luego mostrarlo en la ficha del producto.
Pero me encuentro con varios problemas. Para empezar, el override no parece persistir los datos correctamente o la lógica de la base de datos es más compleja de lo que pensaba. Cuando intento acceder a lowest_price_30_days en mi plantilla Smarty, está vacío o no es el valor correcto. Aquí está el snippet que intenté:
// override/classes/Product.php
class Product extends ProductCore
{
public $lowest_price_30_days;
public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
{
parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
self::$definition['fields']['lowest_price_30_days'] = [
'type' => self::TYPE_FLOAT,
'validate' => 'isPrice',
'required' => false
];
}
public function getPrice($id_shop = null, $id_product_attribute = null, $id_customer = null, $quantity = 1, $decimals = 6, $divisor = null, $only_reduc = false, $id_specific_price_output = null, $with_ecotax = true, $use_tax = true, $id_zone = null, $id_country = null, $id_state = null, $id_currency = null, $id_group = null, $id_cart = null, $real_quantity = 0)
{
// Esto es un intento simplificado, pero la tabla 'product_history' no existe
// y el cálculo real es mucho más complejo para el histórico.
$this->lowest_price_30_days = (float)Db::getInstance()->getValue('SELECT MIN(price) FROM '._DB_PREFIX_.'product_history WHERE id_product = '.(int)$this->id.' AND date_add >= DATE_SUB(NOW(), INTERVAL 30 DAY)');
return parent::getPrice($id_shop, $id_product_attribute, $id_customer, $quantity, $decimals, $divisor, $only_reduc, $id_specific_price_output, $with_ecotax, $use_tax, $id_zone, $id_country, $id_state, $id_currency, $id_group, $id_cart, $real_quantity);
}
}
Sé que 'product_history' no existe, era solo una idea para ver cómo intentar acceder a datos históricos. El problema es que no sé cómo registrar los cambios de precio o cómo recuperar el precio mínimo de los últimos 30 días de forma eficiente sin sobrecargar la base de datos o el rendimiento. ¿Alguna idea de cómo abordar esto sin romper PrestaShop?