Ibexa Commerce 4.6 : créer une remise catalogue de 10 % — REX complet

Ibexa Commerce 4.6 : créer une remise catalogue de 10 % — REX complet

Après les types de produits et les variantes, cette étape ajoute une vraie promotion à notre boutique de démonstration Ibexa Commerce 4.6.32. L’objectif est simple : appliquer automatiquement 10 % de remise au T-shirt et à ses six variantes, puis vérifier que le calcul reste correct dans le panier.

Ce que nous allons obtenir

  • une règle personnalisée demo_tshirt_10_percent ;
  • une remise de type catalogue ;
  • le produit parent IBEXA-TSHIRT comme cible ;
  • un prix passant de 29,90 € à 26,91 € HT ;
  • une remise visible dans le catalogue, la fiche produit et le panier.
Promotion catalogue Ibexa Commerce

Remise catalogue ou remise panier ?

La différence est importante :

Type Moment du calcul Exemple
Catalogue Avant l’ajout au panier, directement sur le prix du produit -10 % sur un T-shirt
Panier Sur le panier selon son contenu ou le client -20 € dès 150 € d’achat

Ici, nous voulons que le client voie immédiatement le prix promotionnel. Nous utilisons donc une remise catalogue.

1. Installer les composants Discounts

Dans notre installation Commerce 4.6.32, les composants de remise étaient optionnels. Nous avons installé exactement les versions compatibles :

composer require ibexa/discounts:4.6.32 ibexa/discounts-codes:4.6.32

Les recettes Symfony Flex ajoutent les bundles, les routes, la configuration Messenger et les ressources nécessaires.

Sur une instance existante, il faut examiner le SQL avant de l’exécuter. Nous avons appliqué uniquement les tables Messenger et ibexa_discount*, sans lancer aveuglément une mise à jour globale du schéma.

2. Décrire la promotion avec une migration

Nous avons séparé cette démonstration des migrations d’installation standard dans src/Migrations/Demo/12_tshirt_catalog_discount.yaml.

- type: product_discount
  mode: create
  identifier: demo_tshirt_10_percent
  name: "T-shirt developer -10%"
  discount_type: catalog
  enabled: true
  priority: 10
  percentage: 10
  label: "-10%"
  conditions:
    - type: is_product_in_array
      product_codes:
        - IBEXA-TSHIRT

Le point essentiel est la cible : IBEXA-TSHIRT est le produit parent. Ibexa applique ensuite la règle à ses variantes, notamment IBEXA-TSHIRT-BLACK-M. Il n’est donc pas nécessaire d’énumérer les six variantes.

3. Exécuter et réindexer

Après la migration, l’index des remises doit être reconstruit :

php bin/console ibexa:migrations:migrate
php bin/console ibexa:discounts:reindex

La réindexation rend la règle disponible au moteur de prix du storefront.

4. Vérifier la fiche produit

La fiche affiche maintenant le prix d’origine, le prix remisé et le badge -10 %. Nous avons ajouté une indication visuelle pour expliquer que le calcul est effectué avant l’ajout au panier.

Prix remisé sur la fiche produit

Cette amélioration de thème reste une présentation. La remise elle-même est calculée par Ibexa Commerce : elle ne vient pas du CSS ni d’un prix saisi en dur.

5. Prouver le calcul dans le panier

Nous avons ajouté la variante noire en taille M au panier. L’API retourne un prix original de 2 990 centimes et un montant remisé de 2 691 centimes. Le DiscountStamp contient également :

  • l’identifiant demo_tshirt_10_percent ;
  • le type catalog ;
  • le pourcentage 10 ;
  • la cible IBEXA-TSHIRT.
Remise catalogue dans le panier Ibexa Commerce

Le calcul affiché est cohérent :

29,90 € - 2,99 € = 26,91 € HT
TVA 20 %          =  5,38 €
Total TTC         = 32,29 €

Ce que cette étape valide

Cette démonstration ne se limite pas à un badge promotionnel. Elle valide toute la chaîne : règle persistée, ciblage du parent, héritage par les variantes, indexation, prix storefront et calcul du panier.

Le prochain exercice logique sera différent : créer une remise panier, éventuellement activée par un code promotionnel, afin de comparer concrètement les deux mécanismes.