Adhésion en ligne Drupalfr.org

Créé le 02/11/2014

Dernière mise à jour le 21/12/2014

Je me suis récemment penché sur la question de mettre en place les adhésions en ligne pour l'association Drupal francophone Drupal.fr. Je vous propose un petit tour des voies explorées.

Edit : il s'agit ici de présenter des solutions explorées en réponse à une problématique qui ne correspondra pas nécessairement à l'implémentation réelle faite sur le site drupalfr.org. Par exemple, l'adhésion entreprise sera certainement gérée autrement et avec un fonctionnement différent.

Cahier des charges

  • Adhésion individuelle : 20€
  • Adhésion entreprise : 30€ X nombre d'employé(s) de l'entreprise plafonné à 2000€

Membership

Utilisation du module Membership Entity et de son intégration dans Drupal commerce Membership Entity Commerce.

Le module Membership Entity permet de définir des types d'adhésion avec période de renouvellement, taxonomie associée possible, ainsi que d'autres fonctionnalités.

A priori, c'est ce qu'il faut, sauf que je n'ai pas réussi à faire fonctionner l'intégration dans Drupal commerce. Son intégration dans Drupal commerce rajoute un type de produit ainsi qu'un type d'élément de commande. Sauf que le type de produit ne comporte pas le champ prix commerce_price ajouté automatiquement lorsque l'on crée de nouveaux types de produit via l'interface par exemple.

Du coup derrière Drupal commerce n'arrive pas à fonctionner et des erreurs surviennent.

EDIT : Après un autre test avec la dernière version de développement du module Membership Entity Commerce, le type de produit comporte bien le champ commerce_price et tout fonctionne.

Registration

Utilisation du module Registration et de son intégration dans Drupal commerce Commerce Registration (ambigu avec Registration Commerce).

Registration défini un nouveau type d'entité, les registrations qui fonctionnent avec des champs de type "registration reference", une fois un champ registration reference attaché à une entité, cela va ajouter un formulaire avec les champs du type de registration référencé lors de la visualisation de l'entité. Très pratique pour des inscriptions à des événements par exemple.

Mais je n'ai pas plus insisté dans cette voie car je pense que le cas d'utilisation du module est vraiment des événements ou de l'inscription rattachée à du contenu ce qui n'est pas vraiment ce qui est souhaité.

Drupal commerce + Rules

Utilisation de Drupal Commerce, de Rules et de Commerce Customizable Products.

Adhésion Drupalfr : structure entitées
Légende

Schéma de la structure des entités pour la gestion des adhésions sur drupalfr.org.

La structure des différentes entités est schématisée. Le module Commerce Customizable Products permet de créer facilement via le backoffice de nouveaux types d'éléments de commande. Il faut jouer sur les options du widget d'ajout au panier pour proposer soit un élément de commande de type adhésion individuelle, soit un élément de commande de type adhésion entreprise.

Il faut désormais faire appel à Rules pour y adjoindre la logique que nous voulons exécuter. Certaines parties de la logique peuvent ou doivent être extraites dans des composants pour favoriser la réutilisabilité ou bien par nécessité, Besoin de pouvoir mélanger actions et conditions dans un certain ordre par exemple.

Adhésion individuelle

Règle :

  • Événement : fin du processus de commande
  • Condition (facultative) :  la commande contient des adhésions individuelles, test via les types de produits ou via les types d'éléments de commande (deuxième option non testée)
  • Action :
    • boucler sur les éléments de la commande :
      • pour chaque élément de commande de type adhésion individuelle :
        • donner le rôle adhérent à l'utilisateur référencé via le champ situé dans l'élément de commande,
        • définir la valeur de sa date de fin d'adhésion à la date actuelle + 1 an

Adhésion entreprise

Même principe que l'adhésion individuelle, sauf qu'ici la difficulté va être au niveau du calcul du prix. Une règle pour la fin du processus de commande quasi identique à celle pour l'adhésion individuelle que je ne détaille donc pas.

Une règle pour le calcul du prix :

  • Événement : calcul du prix de vente d'un produit (Calculating the sell price of a product)
  • Conditions :
    • l'élément de commande est de type adhésion entreprise (ce qui permet d'avoir accès à la deuxième condition),
    • l'entité référencée par le champ référence à une entité du type d'élément de commande (voir schéma) possède un champ nombre d'employé(s) (ce qui permet d'avoir accès au champ nombre d'employé(s) dans le calcul),
  • Actions :
    • Multiplier le prix unitaire par : la valeur du champ nombre d'employé(s),
    • Si le prix est supérieur à 2000€ :
      • Fixer le prix à un certain montant : 2000€

La partie en rouge a besoin d'être extraite dans un composant de Rules car il est nécessaire d'effectuer un test, or nous sommes déjà dans la partie actions de la règle de calcul du prix pour l'adhésion entreprise. Ce composant va être une Rule avec en paramètre l'élément de commande.

Conclusion

Une autre voie possible à explorer serait de passer par des modules qui se grefferait sur le module Payment, mais n'ayant encore pas eu l'occasion de me servir de ce module et préférant plutôt Drupal commerce, je me suis orienté vers ce dernier spontanément.

Avec des modules "standards", il est donc possible de s'en sortir et de faire ce qu'on veut via l'interface graphique, ce qui garantie une maintenabilité aisée. De plus cela évite d'avoir à utiliser des modules peu utilisés et donc de risquer une migration tardif de ces modules sous Drupal 8.

Commentaires

Soumis par JRMC (non vérifié) le mer, 05/20/2015 - 21:05 - Permalien

Bonsoir Florent, je réagis par rapport au prix individuel, franchement 20 € c'est pas une somme exorbitante. Pour ton mode de fonctionnement, je trouve ça bien ficelé, je ne suis pas le mieux placé techniquement pour apporter des idées. En tout cas, je découvre Commerce Registration, bon à savoir.

Ajouter un commentaire