defaliz Posted February 1 Share Posted February 1 (edited) 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 February 4 by defaliz (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted February 1 Share Posted February 1 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 More sharing options...
defaliz Posted February 1 Author Share Posted February 1 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 More sharing options...
Eolia Posted February 1 Share Posted February 1 oui, mais déclarez $extra_vars à false avant si vous n'en n'avez pas ou écrivez juste: $history->addWithemail(true); Link to comment Share on other sites More sharing options...
defaliz Posted February 1 Author Share Posted February 1 merci, que doit contenir la variable $extra_vars ? j'imagine que au minimum l'email est passé sans cette variable ? Link to comment Share on other sites More sharing options...
defaliz Posted February 1 Author Share Posted February 1 ok ,dans $extra_vars on peut mettre le tracking number par exemple... merci pour l'aide... je verrai demain si les mails ont été envoyé et si oui je passerai en résolu... Link to comment Share on other sites More sharing options...
defaliz Posted February 2 Author Share Posted February 2 (edited) bonjour j'ai eu cette erreur en utilisant la commande $history->addWithemail(true); Erreur : Kernel Container is not available je l'utilise dans un script externe, j'imagine que j'initialise pas bien le contexte ? une idée ? merci Edited February 2 by defaliz (see edit history) Link to comment Share on other sites More sharing options...
WEB-FUSION Posted February 3 Share Posted February 3 Bonjour, vous avez développé un module pour utiliser cette fonction ? Link to comment Share on other sites More sharing options...
defaliz Posted February 3 Author Share Posted February 3 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 More sharing options...
Mediacom87 Posted February 4 Share Posted February 4 Il serait préférable de faire cela dans un module respectant les fonctionnalités de PrestaShop et assurant la sécurité. Link to comment Share on other sites More sharing options...
defaliz Posted February 4 Author Share Posted February 4 Exact, mais comme expliqué en intro de mon post, je pallie un défaut de mon transporteur dont les mails aux clients sont aléatoires... Donc c'est provisoire, pas nécessaire d'ecrire un module... Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now