¡Hola a todos!
Estoy intentando replicar un sistema de códigos de descuento similar al que se ve a menudo en campañas de Facebook. La idea es que los códigos tengan una lógica de validación más específica, como un único uso por cliente o que solo sean válidos si el cliente proviene de una campaña particular. El problema es que PrestaShop, en su configuración estándar, no ofrece estas opciones de forma nativa para CartRule.
He intentado crear un override en override/classes/CartRule.php para añadir un campo y una lógica de validación, pero no consigo que el campo se guarde correctamente ni que la validación sea estable. Siento que estoy forzando demasiado la clase base y que se romperá con cualquier actualización.
Aquí tenéis un fragmento de mi intento. La idea era añadir is_facebook_exclusive y luego usarlo en checkValidity, pero el campo no se guarda y no sé cómo enganchar la definición correctamente para que persista en la base de datos:
// override/classes/CartRule.php
class CartRule extends CartRuleCore
{
public $is_facebook_exclusive; // Queremos que este campo se guarde y se cargue
public function checkValidity(Context $context, $use_cache = true)
{
// Asumiendo que $this->is_facebook_exclusive se carga correctamente
if ($this->is_facebook_exclusive && !$this->isUserFromFacebookCampaign($context->customer->id)) {
// Lógica para verificar si el usuario es de la campaña de Facebook
return false;
¿Alguna idea de cómo puedo hacer esto de forma más robusta sin que sea un dolor de cabeza en el futuro?