Error alertas disponibilidad de stock con ERP

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:

				
					<?php

$basedir = dirname(__FILE__);

require_once (dirname(__FILE__).'/config/config.inc.php');
require_once (dirname(__FILE__).'/init.php');
include_once (dirname(__FILE__).'/modules/ps_emailalerts/MailAlert.php');


function getSqlMails($order = false, $order_desc = false)
{
    // Get mails by product and attribute
    $cant=0;
    $sql_mails = '
        SELECT 
            mco.`id_customer`, 
            mco.`customer_email`, 
            mco.`id_product`, 
            mco.`id_product_attribute`,
            m.`name` AS manufacturer,
            s.`name` AS supplier,
            s2.`name` AS supplier2
        FROM 
            `'._DB_PREFIX_.'mailalert_customer_oos` AS mco
        INNER JOIN `'._DB_PREFIX_.'product` AS p
            ON p.`id_product` = mco.`id_product`
        LEFT OUTER JOIN `'._DB_PREFIX_.'manufacturer` AS m
            ON m.`id_manufacturer` = p.`id_manufacturer`
        LEFT OUTER JOIN `'._DB_PREFIX_.'product_supplier` AS ps
            ON ps.`id_product` = mco.`id_product` 
            AND ps.`id_product_attribute` = mco.`id_product_attribute`
        LEFT OUTER JOIN `'._DB_PREFIX_.'supplier` AS s
            ON ps.`id_supplier` > 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."<br>";
            //Enviar email
            MailAlert::sendCustomerAlert($id_product, $id_product_attribute);
            $cant++;
        }
    }
    if($cant==0){
        echo "<h3>No hay nuevos avisos</h3>";
    }

}


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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *