Sith/eboutic
Julien Constant ee437649f0 Revert "Merge branch 'master' into taiste"
This reverts commit 4303d51c0a, reversing
changes made to d16bf12611.
2023-10-10 15:47:02 +02:00
..
migrations Mise à jour de Black vers la version 23.3 (#629) 2023-04-22 15:32:31 +02:00
static/eboutic Implémentation 3DSv2 + résolution bugs eboutic + amélioration pages admin (#558) 2023-01-09 20:53:12 +01:00
templates/eboutic Revert "Merge branch 'master' into taiste" 2023-10-10 15:47:02 +02:00
tests Fix deprecation warnings 2022-08-03 21:48:37 +02:00
__init__.py [FIX] Broken link in readme and license fix (& update) (#591) 2023-04-04 18:39:45 +02:00
admin.py Mise à jour de mars (#586) 2023-04-04 19:17:44 +02:00
converters.py refonte de la boutique en ligne 2022-10-30 12:33:21 +01:00
forms.py [Eboutic] Fix double quote issue & improved user experience on small screen (#522) 2022-12-16 00:37:07 +01:00
models.py [FIX] Broken link in readme and license fix (& update) (#591) 2023-04-04 18:39:45 +02:00
README.md refonte de la boutique en ligne 2022-10-30 12:33:21 +01:00
tests.py Speed up tests (#638) 2023-05-02 11:00:23 +02:00
urls.py integration of 3D secure v2 for eboutic bank payment 2022-11-30 22:52:56 +01:00
views.py [UPDATE] Bump cryptography from 37.0.4 to 40.0.1 (#594) 2023-04-20 14:43:46 +02:00

Eboutic

Aperçu général

L'application eboutic contient les vues, les templates et les modèles nécessaires pour le fonctionnement de la boutique en ligne. L'utilisateur peut acheter des produits en ligne et payer soit par carte bancaire soit avec l'argent qu'il possède sur son compte AE.

On effectue ici une séparation entre plusieurs types de produits :

  • les recharges de compte (Refilling) qui permettent de rajouter de l'argent sur le compte. Un panier contenant un élément de ce type ne pourra être payé que par carte bancaire.
  • Les cotisations (Subscription) qui permettent à un utilisateur de cotiser à l'AE. Seul un utilisateur ayant déjà été cotisant pourra acheter ce produit. Les primo-cotisants doivent s'adresser directement à un membre du bureau.
  • Les produits normaux (badges, écussons, billets pour les soirées...)

Les utilisateurs cotisants ne peuvent pas voir les produits des non-cotisants et vice-versa. Ce n'est pas la manière la plus satisfaisante de procéder, mais c'est celle qui touchait le moins aux tables déjà en place. Les produits avec une limite d'âge ne seront pas visibles par les utilisateurs ayant un âge inférieur.

Le comportement de cette application dépend directement de celui des applications core et counter. Les modèles de l'application Subscription sont également utilisés. N'hésitez donc pas à vous pencher sur le fonctionnement des modules susnommés afin de comprendre comment celui-ci marche.

Les vues

Cette application contient les vues suivantes :

  • eboutic_main (GET) : la vue retournant la page principale de la boutique en ligne. Cette vue effectue un filtrage des produits à montrer à l'utilisateur en fonction de ce qu'il a le droit d'acheter. Si cette vue est appelée lors d'une redirection parce qu'une erreur est survenue au cours de la navigation sur la boutique, il est possible de donner les messages d'erreur à donner à l'utilisateur dans la session avec la clef "errors".
  • payment_result (GET) : retourne une page assez simple disant à l'utilisateur si son paiement a échoué ou réussi. Cette vue est appelée par redirection lorsque l'utilisateur paye son panier avec son argent du compte AE.
  • EbouticCommand (POST) : traite la soumission d'un panier par l'utilisateur. Lors de l'appel de cette vue, la requête doit contenir un cookie avec l'état du panier à valider. Ce panier doit strictement être de la forme :
[
  {"id": <int>, "name": <str>, "quantity": <int>, "unit_price": <float>},
  {"id": <int>, "name": <str>, "quantity": <int>, "unit_price": <float>},
  <etc.>
]

Si le panier est mal formaté ou contient des valeurs invalides, une redirection est faite vers eboutic_main.

  • pay_with_sith (POST) : paie le panier avec l'argent présent sur le compte AE. Redirige vers payment_result.
  • ETransactionAutoAnswer (GET) : vue destinée à communiquer avec le service de paiement bancaire pour valider ou non le paiement de l'utilisateur.

Les templates

  • eboutic_payment_result.jinja : très court template contenant juste un message pour dire à l'utilisateur si son achat s'est bien déroulé. Retourné par la vue payment_result.
  • eboutic_makecommand.jinja : template contenant un résumé du panier et deux boutons, un pour payer avec le site AE et l'autre pour payer par carte bancaire. Retourné par la vue EbouticCommand
  • eboutic_main.jinja : le plus gros template de cette application. Contient une interface pour que l'utilisateur puisse consulter les produits et remplir son panier. Les opérations de remplissage du panier se font entièrement côté client. À chaque clic pour ajouter ou retirer un élément du panier, le script JS (AlpineJS, plus précisément) édite en même temps un cookie. Au moment de la validation du panier, ce cookie est envoyé au serveur pour vérifier que la commande est valide et payer.

Les modèles

  • Basket : représente le panier d'un utilisateur. Un objet Basket est créé quand l'utilisateur soumet son panier et supprimé quand le paiement est validé. Si le paiement n'est pas validé, le panier est conservé en base de données afin d'avoir une trace si l'utilisateur a quand même été débité et qu'il n'a pas reçu ses produits à cause d'une erreur de synchronisation.
  • Invoice : Un peu comme un panier, mais pour quand une transaction a été validée.
  • AbstractBaseItem : modèle utilisé pour être hérité par BasketItem et InvoiceItem. Me demandez pas pourquoi product_id est un IntegerField plutôt qu'une clef étrangère, moi aussi je trouve ça complètement con. Le prix unitaire est indiqué dans ce modèle même si ça fait une redondance avec le modèle Product afin de garder le prix que l'élément avait au moment de sa vente, même si le prix du produit de base est modifié.
  • BasketItem : représente un élément présent dans le panier de l'utilisateur.
  • InvoiceItem : représente un élément vendu.