Jump to content

soucis avec les mails sensés être envoyés au marchant


Recommended Posts

Bonjour,

J'ai téléchargé le module ps_emailAlerts et je l'ai installé.

2 soucis

  • le marchant ne reçoit pas le mail lors d'une nouvelle commande (il a bien la notification dans le BO mais n'a pas forcément son BO toujours ouvert)
  • le mail pour un produit en rupture de stock est envoyé à chaque employé au lieu d'être envoyé au mail renseigné (j'ai donc désactivé cela en attendant de régler le souci)

Les mails pour le marchand devraient arriver à l'adresse renseignée dans le dernier cadre (image ci-dessous) mais ce n'est pas le cas.

Côté client, par contre, aucun souci.

Une idée pour régler le soucis? Je précise que j'ai téléchargé le zip du module (dézippé et renommé avant de rezipper) V2.2.1 car, prestashop n'étant pas sur le net chez nous, je ne savais pas le prendre directement...

image.png

 

En faisant des tests, je remarque que ce module ne sert finalement pas et que ça se joue au niveau des déclinaisons de produits pour l'envoie de mail en cas de stock bas. Le souci est qu'il envoie un mail à tous les employés. Moi, je voudrais qu'il envoie un mail à l'adresse du marchand, celle choisie dans les paramètres avancés -> email (cf ci-dessous) et pas à tous les employés.

Comment je peux faire cela? Car on est 3 super admin au service ICT mais on s'en moque de savoir que tel produit est quasi épuisé, on ne gère pas ça...

image.png.fe19dbee2a8d130d70007e4d67278111.png

Edited by Laetitia Bordon (see edit history)

Share this post


Link to post
Share on other sites

  • Laetitia Bordon changed the title to soucis avec les mails sensés être envoyés au marchant

Pour l'envoi de mail à partir du module de gestion des stocks (catalog->stocks), voilà ce que j'ai fait pour que ça fonctionne :

Dans src/Core/Stock/StockManager.php (à partir de la ligne 309) :

J'ai mis en commentaires toute la partie d'envoi de mail aux employés.

J'ai repris juste la fonction Mail mail, en changeant $email par (string) $configuration['PS_SHOP_EMAIL'] (pour envoyer le mail à l'adresse mail du Shop renseignée dans advanced parameters -> emails, partie envoyer les email à).

// get emails on employees who have right to run stock page

        /*$emails = array();
        $employees = Employee::getEmployees();
        foreach ($employees as $employeeData) {
            $employee = new Employee($employeeData['id_employee']);
            if (Access::isGranted('ROLE_MOD_TAB_ADMINSTOCKMANAGEMENT_READ', $employee->id_profile)) {
                $emails[] = $employee->email;
            }
        }
        // Send 1 email by merchant mail, because Mail::Send doesn't work with an array of recipients

        foreach ($emails as $email) {
            Mail::Send(
                $idLang,
                'productoutofstock',
                Mail::l('Product out of stock', $idLang),
                $templateVars,
                $email,
                null,
                (string) $configuration['PS_SHOP_EMAIL'],
                (string) $configuration['PS_SHOP_NAME'],
                null,
                null,
                dirname(__FILE__) . '/mails/',
                false,
                $idShop
            );
        }*/

        Mail::Send(
                $idLang,
                'productoutofstock',
                Mail::l('Product out of stock', $idLang),
                $templateVars,
                (string) $configuration['PS_SHOP_EMAIL'],
                null,
                (string) $configuration['PS_SHOP_EMAIL'],
                (string) $configuration['PS_SHOP_NAME'],
                null,
                null,
                dirname(__FILE__) . '/mails/',
                false,
                $idShop
            );

Reste à trouver la même fonction quand on change les déclinaisons de produits dans la fiche produit (Si je met une déclinaison à 0, ça enregistre bien mais ça n'envoie pas le mail) et celle quand on crée une commande (pour notifier la nouvelle commande par mail au marchand)

Edited by Laetitia Bordon (see edit history)

Share this post


Link to post
Share on other sites

Bon, j'avance.

L'envoi de la confirmation de commande par mail au client se fait dans classes/PaymentModule.php.

Du coup, si l'email est valide, je copie le mail envoyé au client et j'adapte pour l'envoyer aussi au marchand. 

Pour ça, j'ai créé un nouveau sujet (New order) et j'ai fait une copie des mails order_conf que j'ai renommé en new_order.

Share this post


Link to post
Share on other sites

4 hours ago, Laetitia Bordon said:

Bon, j'avance.

L'envoi de la confirmation de commande par mail au client se fait dans classes/PaymentModule.php.

Du coup, si l'email est valide, je copie le mail envoyé au client et j'adapte pour l'envoyer aussi au marchand. 

Pour ça, j'ai créé un nouveau sujet (New order) et j'ai fait une copie des mails order_conf que j'ai renommé en new_order.

Bonjour, 

En lisant votre sujet, j'ai lu quelque chose sur lequel vous pourriez m'aider. 

Sachant que les mails s'envoient, au client et j'en reçoit la copie également ! Cependant je souhaiterai envoyer la facture et seulement la facture (de façon automatique toujours) à moi même et au client (ce qui ce fait actuellement) mais aussi à sa comptable (deuxième adresse email qui sera dans la base de données).  

Auriez vous donc une idée ou pise de comment faire ? 

 

Merci de votre réponse, 

CDT

Share this post


Link to post
Share on other sites

@sparkss : il faut que vous récupériez le mail de la comptable en db (et éventuellement son nom prénom si présent).

Ensuite, dans classes/PaymentModule.php, vous avez ça qui envoie le mail au client

Mail::Send( 
  (int) $order->id_lang, 
  'order_conf', //template du mail
  Context::getContext()->getTranslator()->trans( 
    'Order confirmation', //sujet du mail
    array(), 
    'Emails.Subject', 
    $orderLanguage->locale 
  ), 
  $data, 
  $this->context->customer->email, //email du destinataire
  $this->context->customer->firstname . ' ' . $this->context->customer->lastname, //nom prénom du destinataire
  null, 
  null, 
  $file_attachement, //fichiers joints
  null, 
  _PS_MAIL_DIR_, 
  false, 
  (int) $order->id_shop 
);

Vous faites un copier - coller de cette fonction et vous remplacez $this->context->customer->email par le mail de la comptable et la ligne du dessous par son nom prénom.

Si vous avez un template exprès pour la comptable et un sujet adapté, vous pouvez remplacer 'order_conf'  et 'Order confirmation' par les vôtres.

Attention à ce que le sujet soit dans les fichiers de traduction EmailsSubject.xlf et le template dans chaque langue là où sont les emails.

Mail::Send est dans la condition if (Validate::isEmail($this->context->customer->email)) {}.Attention à mettre le mail pour la comptable dedans aussi...

 

Edited by Laetitia Bordon (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

On 3/26/2021 at 7:37 AM, Laetitia Bordon said:

@sparkss : il faut que vous récupériez le mail de la comptable en db (et éventuellement son nom prénom si présent).

Ensuite, dans classes/PaymentModule.php, vous avez ça qui envoie le mail au client

Mail::Send( 
  (int) $order->id_lang, 
  'order_conf', //template du mail
  Context::getContext()->getTranslator()->trans( 
    'Order confirmation', //sujet du mail
    array(), 
    'Emails.Subject', 
    $orderLanguage->locale 
  ), 
  $data, 
  $this->context->customer->email, //email du destinataire
  $this->context->customer->firstname . ' ' . $this->context->customer->lastname, //nom prénom du destinataire
  null, 
  null, 
  $file_attachement, //fichiers joints
  null, 
  _PS_MAIL_DIR_, 
  false, 
  (int) $order->id_shop 
);

Vous faites un copier - coller de cette fonction et vous remplacez $this->context->customer->email par le mail de la comptable et la ligne du dessous par son nom prénom.

Si vous avez un template exprès pour la comptable et un sujet adapté, vous pouvez remplacer 'order_conf'  et 'Order confirmation' par les vôtres.

Attention à ce que le sujet soit dans les fichiers de traduction EmailsSubject.xlf et le template dans chaque langue là où sont les emails.

Mail::Send est dans la condition if (Validate::isEmail($this->context->customer->email)) {}.Attention à mettre le mail pour la comptable dedans aussi...

 

Je vous remercie de votre réponse et tout les détails apportés, je vais essayer tout ça et je reviens vers vous pour vous dire.

 

CDT

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

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