PrestaShop no puede detectar automáticamente los cambios en el stock cuando se actualiza desde un ERP. Esto puede ser un problema si necesitas enviar alertas por email cuando el stock de un producto vuelve a estar disponible. En este post, te explico cómo puedes solucionar este problema creando un script personalizado y configurando un cron job.
¿Por Qué Necesitamos un Script Personalizado?
Cuando actualizas el stock de tus productos desde un ERP, PrestaShop no puede detectar estos cambios por sí mismo. Como resultado, los emails de aviso sobre la disponibilidad de stock no se envían automáticamente. Para solucionar esto, debemos crear un script personalizado que se encargue de verificar el stock y enviar las alertas por email.
Pasos para Configurar Alertas por Email de Disponibilidad de Stock
1. Configura el modulo Mail alerts
https://addons.prestashop.com/es/emails-notificaciones/24547-mail-alerts.html
Este modulo es el encargado de registrar los emails por falta de stock, debes tener activa la opción «Disponibilidad del producto», esto te activará un formulario para suscribirse a productos sin stock.
2. Crea el Script Personalizado
Primero, necesitas crear un script PHP que verifique el stock de tus productos y envíe un email si hay productos que vuelven a estar disponibles. Colocar el script en la raíz de la tienda.
Este sería el código PHP:
0 AND ps.`id_supplier` = s.`id_supplier`
LEFT OUTER JOIN `'._DB_PREFIX_.'supplier` AS s2
ON p.`id_supplier` > 0 AND p.`id_supplier` = s2.`id_supplier`
GROUP BY
mco.`id_customer`,
mco.`customer_email`,
mco.`id_product`,
mco.`id_product_attribute`
ORDER BY
'.($order === false ? 'mco.`id_product` ASC, mco.`id_product_attribute` ASC' : $order.' '.$order_desc);
$rows = Db::getInstance()->ExecuteS($sql_mails);
$data = array();
foreach ($rows as $row) {
$id_product = (int) $row['id_product'];
$id_product_attribute = (int) $row['id_product_attribute'];
$stock = getStockAvailable($id_product, $id_product_attribute);
if ($stock > 0) {
echo "Aviso enviado para producto: ".$id_product.", variacion: ".$id_product_attribute."
";
//Enviar email
MailAlert::sendCustomerAlert($id_product, $id_product_attribute);
$cant++;
}
}
if($cant==0){
echo "No hay nuevos avisos
";
}
}
function getStockAvailable($id_product, $id_product_attribute) {
$sql = 'SELECT quantity FROM `'._DB_PREFIX_.'stock_available` WHERE id_product='.$id_product.' AND id_product_attribute='.$id_product_attribute;
return Db::getInstance()->getValue($sql);
}
getSqlMails();
2. Configura el Cron Job
Para ejecutar el script de manera regular, necesitarás configurar un cron job en tu servidor. Esto asegura que el script se ejecute automáticamente a intervalos definidos.
Pasos para configurar el cron job:
•Accede al panel de control de tu servidor (por ejemplo, cPanel o Plesk).
•Encuentra la sección de “Cron Jobs”.
•Añade una nueva tarea cron. Configura la frecuencia con la que deseas que se ejecute el script (por ejemplo, cada hora).
Ejemplo de configuración del cron job:
0 * * * *
3. Verifica el Funcionamiento
Una vez que el cron job esté configurado, es importante verificar que todo funcione correctamente. Revisa los logs y asegúrate de que los emails se envíen como se espera.