vendor/shopware/core/Checkout/Cart/CartCalculator.php line 35

  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Cart;
  3. use Shopware\Core\Framework\Log\Package;
  4. use Shopware\Core\Profiling\Profiler;
  5. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  6. /**
  7.  * @internal
  8.  * This class is used to recalculate a modified shopping cart. For this it uses the CartRuleLoader class.
  9.  * The rule loader recalculates the cart and validates the current rules.
  10.  */
  11. #[Package('checkout')]
  12. class CartCalculator
  13. {
  14.     public function __construct(private readonly CartRuleLoader $cartRuleLoader)
  15.     {
  16.     }
  17.     public function calculate(Cart $cartSalesChannelContext $context): Cart
  18.     {
  19.         return Profiler::trace('cart-calculation', function () use ($cart$context) {
  20.             // validate cart against the context rules
  21.             $cart $this->cartRuleLoader
  22.                 ->loadByCart($context$cart, new CartBehavior($context->getPermissions()))
  23.                 ->getCart();
  24.             $cart->markUnmodified();
  25.             foreach ($cart->getLineItems()->getFlat() as $lineItem) {
  26.                 $lineItem->markUnmodified();
  27.             }
  28.             return $cart;
  29.         });
  30.     }
  31. }