reverted: --- b/modules/promotion/src/PromotionOrderProcessor.php +++ a/modules/promotion/src/PromotionOrderProcessor.php @@ -14,11 +14,11 @@ class PromotionOrderProcessor implements OrderProcessorInterface { /** + * The promotion storage. - * The entity type manager. * + * @var \Drupal\commerce_promotion\PromotionStorageInterface - * @var \Drupal\Core\Entity\EntityTypeManagerInterface */ + protected $promotionStorage; - protected $entityTypeManager; /** * The language manager. @@ -36,7 +36,7 @@ * The language manager. */ public function __construct(EntityTypeManagerInterface $entity_type_manager, LanguageManagerInterface $language_manager) { + $this->promotionStorage = $entity_type_manager->getStorage('commerce_promotion'); - $this->entityTypeManager = $entity_type_manager; $this->languageManager = $language_manager; } @@ -56,27 +56,22 @@ $content_langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); /** @var \Drupal\commerce_promotion\Entity\CouponInterface[] $coupons */ $coupons = $order->get('coupons')->referencedEntities(); - // Collect the promotions to apply. - $promotions_to_apply = []; foreach ($coupons as $index => $coupon) { $promotion = $coupon->getPromotion(); $promotion->apply($order); } // Non-coupon promotions are loaded and applied separately. + $promotions = $this->promotionStorage->loadAvailable($order); + foreach ($promotions as $promotion) { + if ($promotion->applies($order)) { + // Ensure the promotion is in the right language, to ensure promotions + // adjustments labels are correctly translated. + if ($promotion->hasTranslation($content_langcode)) { + $promotion = $promotion->getTranslation($content_langcode); + } + $promotion->apply($order); - /** @var \Drupal\commerce_promotion\PromotionStorageInterface $promotion_storage */ - $promotion_storage = $this->entityTypeManager->getStorage('commerce_promotion'); - $promotions = $promotion_storage->loadAvailable($order); - foreach ($promotions as $key => $promotion) { - if (!$promotion->applies($order)) { - continue; } - // Ensure the promotion is in the right language, to ensure promotions - // adjustments labels are correctly translated. - if ($promotion->hasTranslation($content_langcode)) { - $promotion = $promotion->getTranslation($content_langcode); - } - $promotion->apply($order); } }