Configurez les règles métier de la boutique
Apprenez à finaliser la configuration métier de votre boutique Sylius en mettant en place les taxes, les modes de livraison, les moyens de paiement et les groupes de clients, toujours à partir de fixtures YAML cohérentes avec l'administration.
< Code de départ >
Aujourd'hui, je voudrais que tu te charges de la configuration "métier" de notre client.
J'entends par configuration métier tout ce qui concerne le business de notre client :
- les moyens de paiement qu'il accepte
- les méthodes de livraison qu'il propose
- les taxes applicables à son commerce
- la segmentation de ses clients
Ce sera ton objectif du jour : définir les méthodes de paiement, de livraison, les taxes et les groupes de clients...
✅ Exactement !
❌ Non, nous allons continuer sur le fichier de fixtures afin d'avoir une configuration de référence pertinente.
Je te propose de commencer par les groupes de clients (Customer Group).
NewFashion souhaite s'en servir pour proposer des avantages exclusifs à ses employés. Ils auront donc deux groupes :
- Les clients (customer)
- Les employés (employee)
✅ Exactement ! Même si le code promo "fuite", il ne sera utilisable que par le groupe de clients pour lequel il aura été paramétré.
❌ Sylius permet d'affecter un prix par canal, mais pas par groupe de clients.
Par contre, il est possible de générer un code de réduction exclusif à un groupe de clients, ce qui répond parfaitement au besoin ici.
À toi de jouer : ajoute une fixture customer_group à la suite du fichier config/packages/fixtures/shop_configuration.yaml
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... customer_group: options: custom: customer: code: 'customer' name: 'Clients' employee: code: 'employee' name: 'Employés'
C'est bien ça ! Relance la suite de fixtures, et vérifie la page des groupes de client
Parfait, ajoutons à présent des clients.
Il nous faudrait un client traditionnel et un employé pour tester correctement les groupes.
Toutefois, deux clients c'est trop peu pour être représentatif.
Heureusement, il est possible de générer des clients aléatoires très simplement, à l'aide du paramètre random :
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... shop_user: options: random: 20 custom: - email: 'sylius@example.com' first_name: 'John' last_name: 'Doe' password: 'sylius' customer_group: 'employee' - email: 'shop@example.com' first_name: 'Jane' last_name: 'Doe' password: 'sylius' customer_group: 'customer'
Tu pourras ensuite vérifier la liste des clients
Et si tu veux essayer les deux comptes sur la boutique :
- pour l'employé John Doe, ce sera /
- et pour la cliente Jane, ce sera /
Alors passons aux choses sérieuses : les moyens de paiement 💰
NewFashion est en cours de négociation avec plusieurs PSP (prestataires de services de paiement).
Je sors justement d'un point avec eux, ils ont encore du monde à rencontrer :
L'enjeu est stratégique : chacun de ces PSP permet d'assurer les paiements via CB, Apple Pay, Google Pay, Klarna...
Et ce n'est pas tout ! Ils envisagent d'en choisir deux, et de répartir les flux de paiement équitablement, le but étant d'avoir un PSP de secours si l'un des deux devient indisponible.
En conclusion... nous ne savons pas encore quel PSP implémenter...
Pas du tout !
Nous configurerons les PSP choisis une autre fois, mais rien ne nous empêche d'ajouter un moyen de paiement "déconnecté" en attendant, par exemple par chèque ou par virement :
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... payment_method: options: custom: bank_check: code: 'bank_check' name: 'Chèque' description: 'Paiement par chèque' enabled: true gatewayName: 'Offline' gatewayFactory: 'offline' channels: - 'FR_SHOP' - 'BE_SHOP' - 'CH_SHOP'
Comme d'habitude, relance tes fixtures, puis vérifie la page des moyens de paiement
Ok, passons à la configuration des taxes.
Chaque pays ayant sa propre TVA, nous allons définir les taux à appliquer sur les produits de la boutique :
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... tax_category: options: custom: vat_standard_rate: code: 'vat_standard_rate' name: 'TVA - taux normal' tax_rate: options: custom: fr_vat_standard_rate: code: 'fr_vat_standard_rate' name: 'TVA - taux normal' zone: 'FR' category: 'vat_standard_rate' amount: 0.2 be_vat_standard_rate: code: 'be_vat_standard_rate' name: 'TVA - taux normal' zone: 'BE' category: 'vat_standard_rate' amount: 0.21 ch_vat_standard_rate: code: 'ch_vat_standard_rate' name: 'TVA - taux normal' zone: 'CH' category: 'vat_standard_rate' amount: 0.081
Après avoir relancé tes fixtures, tu devrais voir apparaître la liste des taux de taxe
Bien, passons aux méthodes de livraison.
Ici, nous allons simplement définir une méthode par pays.
Pas besoin de définir les tarifs : ils seront fixés aléatoirement, ce qui est suffisant dans le cadre de nos fixtures.
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... shipping_method: options: custom: la_poste: code: 'la_poste' name: 'La Poste' zone: 'FR' bpost: code: 'bpost' name: 'Bpost' zone: 'BE' swiss_post: code: 'swiss_post' name: 'La Poste Suisse' zone: 'CH'
Tu peux contrôler ensuite la page des modes de livraison
Passons aux promotions 🎁
NewFashion souhaite configurer deux promotions permanentes :
- 10% de réduction pour les nouveaux clients
- 20% de réduction pour les employés, utilisable à volonté
Voilà comment procéder pour l'offre 10% :
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... promotion: options: custom: welcome: code: 'welcome' name: 'Welcome 10' channels: - 'FR_SHOP' - 'BE_SHOP' - 'CH_SHOP' exclusive: true coupon_based: true coupons: - code: 'WELCOME10' per_customer_usage_limit: 1 reusable_from_cancelled_orders: true rules: - type: 'customer_group' configuration: group_code: 'customer' - type: 'nth_order' configuration: nth: 1 actions: - type: 'order_percentage_discount' configuration: percentage: 10.00
Je te laisse vérifier sur la page des promotions que l'offre "Welcome 10" est bien présente.
Alors, il ne reste plus qu'à ajouter l'offre à 20 % pour les employés :
# config/packages/fixtures/shop_configuration.yaml sylius_fixtures: suites: app: # ... fixtures: # ... promotion: options: custom: # ... team: code: 'team' name: 'Team 20' channels: - 'FR_SHOP' - 'BE_SHOP' - 'CH_SHOP' exclusive: true coupon_based: true coupons: - { code: 'TEAM20' } rules: - type: 'customer_group' configuration: group_code: 'employee' actions: - type: 'order_percentage_discount' configuration: percentage: 20.00
Si tout se passe bien, tu devrais voir l'offre "Team 20", toujours sur la page des promotions
Impeccable, la configuration est suffisante pour être représentative du business de notre client !
Dernière étape : donner vie à sa boutique en y ajoutant des produits, et même un historique de commandes factice !
Ce sera l'objet de notre prochain échange, d'ici là je te souhaite une bonne fin de journée 👋