tuto

Guide Technique : Ajouter une Nouvelle Règle de Promotion Basée sur la Quantité d’un Taxon dans Sylius

avatar
Lilian
6 septembre 2024
blog-img

Dans cet article, nous allons passer en revue les étapes pour ajouter une nouvelle règle de promotion dans Sylius, basée sur la quantité minimale de produits appartenant à un taxon spécifique. Cette règle appliquera une réduction si le panier contient une quantité définie d'articles associés à un ou plusieurs taxons.


Création du Formulaire pour l'administrateur

La configuration de la règle se fait via un formulaire personnalisé où l'utilisateur peut spécifier la quantité minimale et sélectionner les taxons concernés via un champ autocomplété.

Le fichier se situe dans src/Form/Type/Rule/NomDeLaConfigurationType.php.


Exemple de code pour :


<?php

namespace App\Form\Type\Rule;

use Sylius\Bundle\TaxonomyBundle\Form\Type\TaxonAutocompleteChoiceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\FormBuilderInterface;
use Sylius\Bundle\CoreBundle\Form\DataTransformer\TaxonsToCodesTransformer;

class QuantityTaxonConfigurationType extends AbstractType
{
    private TaxonsToCodesTransformer $taxonsToCodesTransformer;

    public function __construct(TaxonsToCodesTransformer $taxonsToCodesTransformer)
    {
        $this->taxonsToCodesTransformer = $taxonsToCodesTransformer;
    }

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('quantity', IntegerType::class, [
                'label' => 'Quantité minimum',
            ])
            ->add('taxons', TaxonAutocompleteChoiceType::class, [
                'label' => 'sylius.form.promotion_rule.has_taxon.taxons',
                'multiple' => true, // Permet de sélectionner plusieurs taxons
            ]);

        // Ajout du ModelTransformer pour transformer les taxons en codes
        $builder->get('taxons')->addModelTransformer($this->taxonsToCodesTransformer);
    }

    public function getBlockPrefix(): string
    {
        return 'app_promotion_rule_quantity_taxon_configuration';
    }
}


Explication du Code :


  • TaxonAutocompleteChoiceType : Ce champ permet à l'utilisateur de sélectionner des taxons via un champ d'autocomplétion.


  • TaxonsToCodesTransformer : Ce transformateur convertit les objets Taxon en leurs codes lors de la soumission du formulaire, ce qui permet d'utiliser ces codes dans la logique de la règle.




Création de la Classe qui implémente la règle


La première étape consiste à créer une classe personnalisée qui implémente l'interface RuleCheckerInterface. Cette classe est responsable de vérifier si les conditions de la promotion sont remplies.

Le fichier se situe dans src/Promotion/Checker/Rule/NomDeLaRegleChecker.php.


Exemple de code :


<?php

namespace App\Promotion\Checker\Rule; 

use Sylius\Component\Core\Model\OrderInterface;
use Sylius\Component\Promotion\Checker\Rule\RuleCheckerInterface;
use Sylius\Component\Promotion\Model\PromotionSubjectInterface;

class QuantityTaxonRuleChecker implements RuleCheckerInterface
{
    const TYPE = 'quantity_taxon';

    public function isEligible(PromotionSubjectInterface $subject, array $configuration): bool
    {
        if (!$subject instanceof OrderInterface) {
            return false;
        }

        $taxons = $configuration['taxons']; // Liste des codes de taxons
        $requiredQuantity = $configuration['quantity'];

        $totalQuantity = 0;

        foreach ($subject->getItems() as $item) {
            // Obtenir le taxon principal du produit
            $productTaxon = $item->getProduct()->getMainTaxon();

            // Vérifier si le produit appartient à l'un des taxons de la liste
            if ($productTaxon && in_array($productTaxon->getCode(), $taxons, true)) {
                $totalQuantity += $item->getQuantity();
            }
        }

        return $totalQuantity >= $requiredQuantity;
    }
}


Explication du Code :


  • isEligible : Cette méthode vérifie si le panier contient au moins la quantité requise d'articles appartenant à un ou plusieurs taxons spécifiques.
  • Vérification des taxons : La méthode compare le code des taxons configurés à celui des produits dans le panier.


Configuration des Services


Après avoir créé la règle et le formulaire, vous devez enregistrer ces services dans la configuration de Sylius via config/services.yaml.


Exemple de configuration :


services:
    app.promotion_rule_checker.quantity_taxon:
        class: App\Promotion\Checker\Rule\QuantityTaxonRuleChecker
        tags:
            - { name: sylius.promotion_rule_checker, type: quantity_taxon, form_type: App\Form\Type\Rule\QuantityTaxonConfigurationType, label: 'Total taxon' }

    app.form.type.promotion_rule.quantity_taxon_configuration:
        class: App\Form\Type\Rule\QuantityTaxonConfigurationType
        arguments:
            $taxonsToCodesTransformer: '@sylius.form.type.data_transformer.taxons_to_codes'
        tags:
            - { name: form.type }


Explication :


  • app.promotion_rule_checker.quantity_taxon : Cette ligne enregistre la règle personnalisée dans Sylius sous le type quantity_taxon. Elle associe également la classe de formulaire qui permet de configurer la règle.
  • app.form.type.promotion_rule.quantity_taxon_configuration : Cette ligne enregistre le formulaire de configuration en injectant le TaxonsToCodesTransformer pour transformer les taxons en codes.

Utilisation de la Nouvelle Règle dans l'Administration de Sylius


Une fois la règle et le formulaire correctement configurés et enregistrés, vous pouvez créer une nouvelle promotion via l'interface d'administration de Sylius. Dans la section des règles de promotion, vous pourrez choisir la règle Total taxon et configurer les taxons et la quantité minimum.

  • Quantité minimum : La quantité d'articles appartenant aux taxons sélectionnés qui doit être atteinte pour que la promotion soit appliquée.
  • Taxons : Les taxons pour lesquels la promotion est applicable.

Conclusion


Ce guide explique comment ajouter une nouvelle règle de promotion dans Sylius basée sur la quantité d'articles d'un taxon. Nous avons couvert la création de la classe de vérification, la configuration du formulaire, et l'enregistrement des services dans Sylius. Grâce à ces étapes, vous pouvez personnaliser davantage les règles de promotion pour mieux répondre aux besoins de votre boutique.

Tags :