[Résolu] Envoyer un mail à la date spécifiée lors de la commande

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Sur un site Drupal commerce, le client passe commande d’un cadeau virtuel, il choisit une carte cadeau, rempli un message personnalisé, les coordonnées du bénéficiaire (prénom, mail) et une date d’envoi de la carte cadeau.

La carte cadeau doit être envoyée par mail à la date précisée par le client.

Mon problème :

Comment faire pour que le mail ne soit envoyé qu’à la date précisée par le client

La solution abordée :

Création d’une règle avec le module Rules

- Événement : Dois-je indiquer « Quand une commande est d’abord payée en totalité » ?
- Condition : J’ai ajouté « Entity is of bundle » pour récupérer la variable « date d’envoi » puis « comparaison de données » sur le champ « date d’envoi » en le comparant à la valeur « now ».
- Action : J’ai sélectionné « Envoyer le courriel » et configuré les valeurs de l’email.

Je suis un peu perdu sur le fonctionnement de Rules. L’événement logique pour moi serait l’exécution de la tache cron, suite à quoi il faudrait vérifier qu’un mail est en attente d’envoi et que la date actuelle concorde avec le champ date renseigné lors de la commande.

Cependant il semble qu’il faille absolument placer l’événement « Quand une commande est d’abord payée en totalité » pour pouvoir utiliser les variables de la commande dans les conditions.

Auriez-vous s'il vous plait des solutions à me proposer pour que je puisse effectuer cet envoi de mail selon la date choisie par le client ?

Merci à ceux qui se donneront la peine d’essayer de m’aider !

Forum : 
Version de Drupal : 

Bonjour Biokstef et merci pour ta réponse,

Le module Schedule n'est malheureusement pas développé pour Drupal 7.

Il y a bien le module Scheduler qui propose la planification des publications des nodes, mais ce n'est malheureusement pas la fonction dont j'ai besoin dans le cas présent.

Merci tout de même et n'hésites pas si tu as d'autres suggestions.

Cordialement,
Besky

Je sens que je m'approche de la solution, mais malheureusement je n'arrive pas encore à récupérer les entités de commandes passées à l’exécution du cron pour envoyer un mail si besoin est.

Pour info :

J'ai créé un composant qui vérifie que les conditions pour l'envoi du mail sont toutes remplies.
- L'entité possède un champ "Comment envoyer la carte" et le choix et "Par mail"
- La carte choisie est "..."
- Les champs d'email sont corrects
- L'entité possède un champ "date d'envoi" et la valeur est inférieure à la date actuelle.

Le composant envoi le mail et marque la commande comme "terminée"

J'ai bien entendu créé une règle également réagissant à la finalisation de la commande, qui active le composant.

Lorsque je crée ma commande, si je choisi d'envoyer la carte immédiatement donc à la date et l'heure de la commande, tout fonctionne superbement bien.

Seulement, si je choisis une date plus lointaine, il est évident que le mail ne s’envoie pas. Donc j'ai voulu créer une règle sur l'événement "les taches de maintenance sont exécutées" (l’exécution du cron).

Hors je n'arrives pas à récupérer les commandes déjà passées qui sont en "attente" (statut) de sorte à exécuter le composant sur ces entités la.

J'ai essayé avec Views rules, cependant je n'arrive pas à transmettre les variables dans mon composant. J'ai également essayé un "loop" et d'autres techniques sans succès.

Auriez-vous des pistes à me soumettre pour arriver à envoyer ce fichu mail à la date souhaitée par le client ?

Merci d'avance !

Bonjour Biokstef,

J'ai activé ce composant, mais j'avoue ne pas bien comprendre son fonctionnement. Je vais m'attarder sur la doc, mais si tu pouvais synthétiser le fonctionnement s'il te plait ça serait super !

Merci de ton aide et joyeuses fêtes !

Bonjour,

Au final j'ai résolu mon problème ! Je vais donc vous donner la solution.

Premièrement il est nécessaire d'installer le module "Rules" et le module "Rules scheduler".

Il faut tout d'abord créer un composant Rules, par exemple : "Envoi mail".

Dans ce composant, on choisit comme paramètre "Commande Drupal Commerce".

Dans les conditions, on vérifie que toutes les informations requises à l'envoi du mail sont présentes.

Dans les actions on crée un envoi de mail avec les tokens de l'utilisateur qui a passé la commande. Éventuellement, on ajoute une mise à jour du status de commande pour terminer la commande (puisque le mail, ici une carte cadeau, à été envoyé).

Ensuite on crée une Rule. Comme événement on choisit "Terminer le processus de paiement".

Dans les conditions on vérifie que l'utilisateur souhaite envoyer une carte cadeau (le choix est facultatif en ce qui concerne mon système). On vérifie également que tous les champs nécessaires au mail existent.

Dans les actions, on choisit "Planifier l'évaluation d'un composant", on choisit notre composant "Envoi mail", puis comme date d'envoi, on indique notre champ "date" du parcours de commande. Reste plus qu'à lui attribuer un identifiant de votre choix et à choisir "commerce-order" comme paramètre à transmettre au composant.

Voila ! J'espère avoir été suffisamment clair bien que ce ne soit pas facile à expliquer, d'autant qu'il s'agit d'un besoin assez particulier. N'hésitez pas à me contacter en MP ou sur ce sujet pour de l'aide.