Jump to content
julianbaros

[ Résolu ] Modifier l'envoi de mail avec la fonction Mail::Send en fonction des conditions de retour du produit avec condition if

Recommended Posts

Posted (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 by julianbaros (see edit history)

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites
Posted (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 by julianbaros (see edit history)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More