Как вручную проверить правила акции в 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" не существует, доступные сервисные услуги: ""
Любая идея ?
Большое спасибо