Hola @raquelstore, tus compañeros @mateocart y @pabloweb88 han dado en el clavo. La lógica de un override en save() de CartRule es para gestionar el ciclo de vida del propio cupón, no su uso o caducidad respecto a un cliente. PrestaShop 1.7.8.11, al igual que sus predecesores, carece de un sistema nativo para rastrear cupones no utilizados o a punto de caducar en relación con clientes específicos.
Para una funcionalidad de recordatorio, necesitas un sistema que:
- Identifique cupones que cumplen ciertas condiciones (activos, fecha de caducidad cercana, etc.).
- Determine qué clientes son elegibles para recibir el recordatorio (han recibido el cupón y no lo han usado).
- Se ejecute de forma programada (tarea cron).
Aquí tienes un ejemplo de cómo podrías empezar a buscar cupones específicos que expiran pronto, en una tarea cron de un módulo personalizado. Esto es solo una parte de la lógica, ya que enlazarlo con el cliente que recibió el cupón es lo más complejo si no hay una asignación directa en la base de datos:
class MyVoucherReminderModule extends Module
{
// ... constructor y métodos de instalación ...
public function hookActionSchedulerDaily($params)
{
// Este hook se ejecuta diariamente (si tienes el módulo ps_cronjobs configurado)
$thresholdDays = 7; // Recordar 7 días antes de la caducidad
$sql = 'SELECT cr.id_cart_rule, cr.code, cr.name, cr.date_to
FROM '._DB_PREFIX_.'cart_rule cr
WHERE cr.active = 1
Como ves, la implementación es bastante compleja porque implica lógica de negocio, manejo de base de datos y envío de correos. Si quieres una solución sin tener que desarrollar y mantener un módulo completo, lo más eficiente para tu PrestaShop 1.7.8.11 y evitar futuras roturas es utilizar un módulo para recordatorio sobre el código que ya esté preparado para estas funciones y sea compatible con las versiones actuales.