Jump to content

[RESOLU] déclenchement email client dans prestashop 1.7.8


defaliz

Recommended Posts

bonjour,

j'ai un transporteur qui a du mal avec les envois de mail vers les clients quand la commande est livrée...

je suis en train d'essayer de régler le problème avec eux...

en attendant j'ai un script python qui passe les états de commandes de "en attente d'expédition" à "livré" régulièrement

dans l'état "livré" il y a un mail au client... mais celui-ci ne part pas car je change l'état directement dans la BD avec mon script et donc prestashop n'en a pas connaissance...

quel est le déclencheur des mails attachés aux état de commandes ?

je vous remercie

Edited by defaliz (see edit history)
Link to comment
Share on other sites

c'est la classe OrderHistory() qui gère les changements d'états et envois de mails.

           // Update the order status
            $new_history = new OrderHistory();
            $new_history->id_order = (int) $order->id;
            $new_history->changeIdOrderState((int) $new_id_order_state, $order, true);
            $new_history->addWithemail(true, $extra_vars);

 

Link to comment
Share on other sites

merci eolia

voici un bout de mon script (php pas python...) en ajoutant la ligne en gras, c'est bon ?

 $history = new OrderHistory();
    $history->id_order = $order->id;
    $history->changeIdOrderState($stateDelivered, $order->id); // Passer à "Livré"

$history->addWithemail(true, $extra_vars);


    // Sauvegarder l'historique de commande
    $history->add();
    echo 'L\'état de la commande a été mis à jour avec succès.';

Link to comment
Share on other sites

bonjour

non, c'est possible mais j'y vais au plus simple...

c'est un script php lancé avec un cron sur le serveur...

j'utilise la fonction mail::send

grosso merdo ça fait comme ça :

$sql = "SELECT id_order FROM ps_orders WHERE current_state = 5  and DATE_ADD >= '2025-01-30%' ";
$orders = Db::getInstance()->executeS($sql);

foreach ($orders as $order) {
    $order_id = $order['id_order'];
    $order_obj = new Order($order_id);
    // Vérifier si l'état de la commande a changé à "livré"
    if ($order_obj->current_state == $delivered_status_id) {
       executeScript($order_obj);
    }
}

function executeScript($order)
{

$customer = new Customer($order->id_customer);
    $email = $customer->email;
    $prenom = $customer->firstname;
    $nom = $customer->lastname;
   Mail::Send(
        (int)$order->id_lang,
        'shipped',
        Mail::l('Order Confirmation', (int)$order->id_lang),
        array(
            '{firstname}' => $customer->firstname,
            '{lastname}' => $customer->lastname,
            '{email}' => $email,
            '{order_name}' => $order->getUniqReference(),
        ),
        $email,
        null,
        null,
        null,
        null,
        _PS_MAIL_DIR_,
        false,
        (int)$order->id_shop
    );
    PrestaShopLogger::addLog('Email de confirmation de livraison envoyé à '.$email.' pour la commande #'.$order->id_order, 1, null, null, null, true);
  
}

Link to comment
Share on other sites

  • defaliz changed the title to [RESOLU] déclenchement email client dans prestashop 1.7.8

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...