julianbaros Posted August 7, 2019 Share Posted August 7, 2019 (edited) Bonjour, Je fais appel à vous car je bloque sur un problème. Je suis en train de mettre en place les retours produits sur mon site et cela fonctionne, seulement j'aimerais aller un peu plus loin dans la configuration. Je m'explique, j'ai ajouté des États de retour pour les produits et chaque fois que je change d'état pour la demande de retour cela envoi un mail au client et jusque là cela me convient. Ce qui ne me convient plus c'est le contenu du mail. Je souhaiterais pouvoir envoyer un mail différent adapté à chaque état de retour comme le fait Prestashop avec les États de commande. J'ai identifié la partie de code qui génère l'envoi de ce mail, à savoir dans le fichier \controllers\admin\AdminReturnController.php : if ($orderReturn->save()) { $orderReturnState = new OrderReturnState($orderReturn->state); $vars = array( '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{id_order_return}' => $id_order_return, '{state_order_return}' => (isset($orderReturnState->name[(int)$order->id_lang]) ? $orderReturnState->name[(int)$order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')])); Mail::Send((int)$order->id_lang, 'order_return_state', Mail::l('Your order return status has changed', $order->id_lang), $vars, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int)$order->id_shop); if (Tools::isSubmit('submitAddorder_returnAndStay')) { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token.'&updateorder_return&id_order_return='.(int)$id_order_return); } else { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); } } Je voudrais rajouter dans la condition if au moment de l'enregistrement de l'État, la vérification de l'État du retour pour envoyer le mail qui correspondra. Bien sur il faudra faire la modification dans un override. J'ai essayé ceci, mais cela ne fonctionne pas, est-ce qu'il faut déclarer avant ma variable ? et si oui j'aimerais savoir où svp ? if ($orderReturn->save() && id_order_return_state == 6) { $orderReturnState = new OrderReturnState($orderReturn->state); $vars = array( '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{id_order_return}' => $id_order_return, '{state_order_return}' => (isset($orderReturnState->name[(int)$order->id_lang]) ? $orderReturnState->name[(int)$order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')])); Mail::Send((int)$order->id_lang, 'order_return_state', Mail::l('Your order return status has changed', $order->id_lang), $vars, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int)$order->id_shop); if (Tools::isSubmit('submitAddorder_returnAndStay')) { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token.'&updateorder_return&id_order_return='.(int)$id_order_return); } else { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); } } Le but après et de faire des elseif pour tous mes états. Auriez-vous une idée svp ? Si ce n'est pas clair, n'hésitez pas à me poser des questions ! Vous en remerciant par avance. Julien Edited August 7, 2019 by julianbaros (see edit history) Link to comment Share on other sites More sharing options...
joseantgv Posted August 7, 2019 Share Posted August 7, 2019 Bonjour Julien, Plus facile : if ($orderReturn->save()) { $orderReturnState = new OrderReturnState($orderReturn->state); $vars = array( '{lastname}' => $customer->lastname, '{firstname}' => $customer->firstname, '{id_order_return}' => $id_order_return, '{state_order_return}' => (isset($orderReturnState->name[(int)$order->id_lang]) ? $orderReturnState->name[(int)$order->id_lang] : $orderReturnState->name[(int)Configuration::get('PS_LANG_DEFAULT')])); if ($orderReturn->state == 6) { $template = 'template_name_1'; } elseif ($orderReturn->state == 7) { $template = 'template_name_2'; } else { $template = 'template_name_3'; } Mail::Send((int)$order->id_lang, $template, Mail::l('Your order return status has changed', $order->id_lang), $vars, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int)$order->id_shop); if (Tools::isSubmit('submitAddorder_returnAndStay')) { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token.'&updateorder_return&id_order_return='.(int)$id_order_return); } else { Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); } } Bien sûr, vous devrez définir vos IDs de statut et vos noms de templates. Vous pouvez faire de même pour changer le Sujet du mail. 1 Link to comment Share on other sites More sharing options...
julianbaros Posted August 7, 2019 Author Share Posted August 7, 2019 (edited) Bonjour joseantgv, j'ai fait les tests avec ta modification, cela marche impeccable, c'est exactement ce que je cherchais à faire. Pour les IDs il suffira que je fasse un elseif pour chaque modèle de mail que je veux si j'ai bien compris et si je veux changer les Sujet de mail, je créé une autre variable sous $template et je mets le nom de ma variable dans la fonction Mail::send ? Merci beaucoup, je t'ai même mis un ❤ pour ta réactivité et la qualité de ta réponse. Tu m'as enlevé une énorme épine du pied :D. Bonne journée à toi. Je passe en résolu. Julien Edited August 7, 2019 by julianbaros (see edit history) 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