Как вручную проверить правила акции в Sylius

Я пытаюсь проверить правила акции по заказу.

Я переопределяю обработчик заказов, чтобы изменить способ обработки приоритета продвижения (у некоторых групп клиентов есть особые преимущества, которые являются эксклюзивными).

Я хочу, чтобы лучшая акция была активной, например:

  • Покупатель "ЗОЛОТО", и он дает скидку 10% на каждый заказ.
  • Купон дает ему скидку 30$
  • Заказ 250$

Купон лучше для моего клиента, верно? Но приоритет эксклюзивной акции делает ее выбранной по умолчанию.

Я уже проверил все рекламные акции, существующие в моем Обработчике заказов, чтобы найти лучшее для клиента и применить его. Это работает.

Проблема: я не могу проверить, соответствуют ли правила акции. Поэтому я продвигаю клиентов, которых не следует.

Как я могу получить доступ к PromotionRulesEligibilityChecker? Кажется, он не подключается автоматически, и я не могу получить к нему доступ.

Итак, я попробовал вот так:

      $ruleRegistery = new ServiceRegistry(RuleCheckerInterface::class);
/** @var PromotionRule $rule */
foreach ($promotion->getRules() as $rule) {
       $ruleChecker = $ruleRegistery->get($rule->getType());
       $promotionRulesEligibilityChecker = new \Sylius\Component\Promotion\Checker\Eligibility\PromotionRulesEligibilityChecker($ruleChecker);

       if (!$promotionRulesEligibilityChecker->isEligible($promotionSubject, $promotion)) {
             return false;
       }
}
return true;

ServiceRegistery не знает ни одного типа правила и дает мне:

Сервисный сервис "item_total" не существует, доступные сервисные услуги: ""

Любая идея ?

Большое спасибо

0 ответов

Другие вопросы по тегам