vendor/shopware/core/Content/Product/ProductMaxPurchaseCalculator.php line 30
<?php declare(strict_types=1);namespace Shopware\Core\Content\Product;use Shopware\Core\Framework\DataAbstractionLayer\Entity;use Shopware\Core\Framework\Log\Package;use Shopware\Core\Framework\Plugin\Exception\DecorationPatternException;use Shopware\Core\System\SalesChannel\SalesChannelContext;use Shopware\Core\System\SystemConfig\SystemConfigService;#[Package('inventory')]class ProductMaxPurchaseCalculator extends AbstractProductMaxPurchaseCalculator{/*** @internal*/public function __construct(private readonly SystemConfigService $systemConfigService){}public function getDecorated(): AbstractProductMaxPurchaseCalculator{throw new DecorationPatternException(self::class);}public function calculate(Entity $product, SalesChannelContext $context): int{$fallback = $this->systemConfigService->getInt('core.cart.maxQuantity',$context->getSalesChannel()->getId());$max = $product->get('maxPurchase') ?? $fallback;if ($product->get('isCloseout') && $product->get('availableStock') < $max) {$max = (int) $product->get('availableStock');}$steps = $product->get('purchaseSteps') ?? 1;$min = $product->get('minPurchase') ?? 1;// the amount of times the purchase step is fitting in between min and max added to the minimum$max = \floor(($max - $min) / $steps) * $steps + $min;return (int) \max($max, 0);}}