Submitted by besky on
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 !
Personne n'a de solution à me
Permalien Soumis par besky le 25 Novembre, 2014 - 11:23
Personne n'a de solution à me proposer ? Même une piste ?
Merci !
bonjour
Permalien Soumis par biokstef le 28 Novembre, 2014 - 14:20
bonjour
le module schedule pourra t'aider.
Bonjour Biokstef et merci
Permalien Soumis par besky le 28 Novembre, 2014 - 18:10
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
salut
Permalien Soumis par biokstef le 28 Novembre, 2014 - 20:01
salut
je dois t'avouer que c'est pas facile ce que tu veux faire mais je cherche .tiens ce module la job-schedule
Salut biokstef pardon pour le
Permalien Soumis par besky le 2 Décembre, 2014 - 19:10
Salut biokstef pardon pour le temps de réponse et merci de ton aide !
Ça m'a l'air très intéressant ce module je vais tester ça dès que possible et je te tiens au courant.
Bonne soirée !
Je sens que je m'approche de
Permalien Soumis par besky le 29 Décembre, 2014 - 14:52
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 !
il y a un composant de rules
Permalien Soumis par biokstef le 29 Décembre, 2014 - 16:30
il y a un composant de rules qui est Rules Scheduler Active le,il te sera utile.
Bonjour Biokstef,
Permalien Soumis par besky le 29 Décembre, 2014 - 16:38
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,
Permalien Soumis par besky le 17 Mai, 2015 - 14:58
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.