Jump to content

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


julianbaros

Recommended Posts

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)
Link to comment
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
Link to comment
Share on other sites

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)
Link to comment
Share on other sites

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...