diff -u b/modules/promotion/src/Plugin/Commerce/PromotionOffer/BuyXGetY.php b/modules/promotion/src/Plugin/Commerce/PromotionOffer/BuyXGetY.php --- b/modules/promotion/src/Plugin/Commerce/PromotionOffer/BuyXGetY.php +++ b/modules/promotion/src/Plugin/Commerce/PromotionOffer/BuyXGetY.php @@ -4,6 +4,7 @@ use Drupal\commerce\ConditionGroup; use Drupal\commerce\ConditionManagerInterface; +use Drupal\commerce\Context; use Drupal\commerce\Plugin\Commerce\Condition\PurchasableEntityConditionInterface; use Drupal\commerce\PurchasableEntityInterface; use Drupal\commerce_order\Adjustment; @@ -11,6 +12,7 @@ use Drupal\commerce_order\PriceSplitterInterface; use Drupal\commerce_price\Calculator; use Drupal\commerce_price\Price; +use Drupal\commerce_price\Resolver\ChainPriceResolverInterface; use Drupal\commerce_price\RounderInterface; use Drupal\commerce_promotion\Entity\PromotionInterface; use Drupal\Component\Utility\Html; @@ -48,6 +50,13 @@ protected $conditionManager; /** + * The chain base price resolver. + * + * @var \Drupal\commerce_price\Resolver\ChainPriceResolverInterface + */ + protected $chainPriceResolver; + + /** * The entity type manager. * * @var \Drupal\Core\Entity\EntityTypeManagerInterface @@ -69,13 +78,16 @@ * The splitter. * @param \Drupal\commerce\ConditionManagerInterface $condition_manager * The condition manager. + * @param \Drupal\commerce_price\Resolver\ChainPriceResolverInterface $chain_price_resolver + * The chain price resolver. * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager * The entity type manager. */ - public function __construct(array $configuration, $plugin_id, $plugin_definition, RounderInterface $rounder, PriceSplitterInterface $splitter, ConditionManagerInterface $condition_manager, EntityTypeManagerInterface $entity_type_manager) { + public function __construct(array $configuration, $plugin_id, $plugin_definition, RounderInterface $rounder, PriceSplitterInterface $splitter, ConditionManagerInterface $condition_manager, ChainPriceResolverInterface $chain_price_resolver, EntityTypeManagerInterface $entity_type_manager) { parent::__construct($configuration, $plugin_id, $plugin_definition, $rounder, $splitter); $this->conditionManager = $condition_manager; + $this->chainPriceResolver = $chain_price_resolver; $this->entityTypeManager = $entity_type_manager; } @@ -90,6 +102,7 @@ $container->get('commerce_price.rounder'), $container->get('commerce_order.price_splitter'), $container->get('plugin.manager.commerce_condition'), + $container->get('commerce_price.chain_price_resolver'), $container->get('entity_type.manager') ); } @@ -324,6 +337,11 @@ } if ($order_item->isNew()) { + $time = $order->getCalculationDate()->format('U'); + $context = new Context($order->getCustomer(), $order->getStore(), $time); + $unit_price = $this->chainPriceResolver->resolve($get_purchasable_entity, $order_item->getQuantity(), $context); + $order_item->setUnitPrice($unit_price); + $order_item->set('order_id', $order->id()); $order_item->save(); $order->addItem($order_item); $order_items = $order->getItems(); @@ -389,6 +407,7 @@ * @param array $condition_configuration * The condition configuration. * + * * @return \Drupal\commerce\ConditionGroup * The condition group. */