defaliz Posted Saturday at 03:43 PM Share Posted Saturday at 03:43 PM (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 Tuesday at 05:04 PM by defaliz (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted Saturday at 03:51 PM Share Posted Saturday at 03:51 PM 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 Saturday at 05:45 PM Author Share Posted Saturday at 05:45 PM 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 Saturday at 05:52 PM Share Posted Saturday at 05:52 PM 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 Saturday at 06:08 PM Author Share Posted Saturday at 06:08 PM 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 Saturday at 06:24 PM Author Share Posted Saturday at 06:24 PM 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 Sunday at 09:16 AM Author Share Posted Sunday at 09:16 AM (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 Sunday at 09:21 AM by defaliz (see edit history) Link to comment Share on other sites More sharing options...
CHRISCOM Posted Monday at 03:49 PM Share Posted Monday at 03:49 PM Bonjour, vous avez développé un module pour utiliser cette fonction ? Link to comment Share on other sites More sharing options...
defaliz Posted Monday at 04:47 PM Author Share Posted Monday at 04:47 PM 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 Tuesday at 01:10 PM Share Posted Tuesday at 01:10 PM 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 Tuesday at 02:05 PM Author Share Posted Tuesday at 02:05 PM 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