/** * @param \Magento\Bundle\Model\ResourceModel\Selection\Collection $selections * @param bool $skipSaleableCheck * @param \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection * @param int[] $options * @return void * @throws \Magento\Framework\Exception\LocalizedException */ protected function checkSelectionsIsSale($selections, $skipSaleableCheck, $optionsCollection, $options) { foreach ($selections->getItems() as $selection) { if (!$selection->isSalable() && !$skipSaleableCheck) { $_option = $optionsCollection->getItemById($selection->getOptionId()); $optionId = $_option->getId(); if (is_array($options[$optionId]) && count($options[$optionId]) > 1) { $moreSelections = true; } else { $moreSelections = false; } $isMultiSelection = $_option->isMultiSelection(); if ($_option->getRequired() && (!$isMultiSelection || !$moreSelections)) { throw new \Magento\Framework\Exception\LocalizedException(__('The required options you selected are not available.')); } } } }