17 class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
106 \
Magento\Catalog\Model\Product\Option $catalogProductOption,
108 \
Magento\Catalog\Model\Product\Type $catalogProductType,
109 \
Magento\Framework\Event\ManagerInterface $eventManager,
110 \
Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb,
112 \
Magento\Framework\Registry $coreRegistry,
113 \Psr\Log\LoggerInterface
$logger,
117 \
Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus,
122 $this->productLinks = $catalogProductLink;
124 $this->_catalogProductStatus = $catalogProductStatus;
125 $this->_appState = $appState;
128 $catalogProductOption,
148 $info = new \Magento\Framework\DataObject();
150 'catalog_product_link' 151 )->setParentFieldName(
153 )->setChildFieldName(
175 return $this->productLinks->getChildrenIds(
189 return $this->productLinks->getParentIdsByChild(
203 if (!
$product->hasData($this->_keyAssociatedProducts)) {
204 $associatedProducts = [];
208 $collection = $this->getAssociatedProductCollection(
210 )->addAttributeToSelect(
211 [
'name',
'price',
'special_price',
'special_from_date',
'special_to_date',
'tax_class_id']
212 )->addFilterByRequiredOptions()->setPositionOrder()->addStoreFilter(
214 )->addAttributeToFilter(
220 $associatedProducts[] =
$item;
223 $product->setData($this->_keyAssociatedProducts, $associatedProducts);
225 return $product->getData($this->_keyAssociatedProducts);
235 return $product->unsData($this->_keyAssociatedProducts);
247 $statusFilters =
$product->getData($this->_keyStatusFilters);
248 if (!is_array($statusFilters)) {
253 $product->setData($this->_keyStatusFilters, $statusFilters);
266 $product->setData($this->_keyStatusFilters, $this->_catalogProductStatus->getSaleableStatusIds());
278 if (!
$product->hasData($this->_keyStatusFilters)) {
280 \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED,
281 \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED,
284 return $product->getData($this->_keyStatusFilters);
293 public function getAssociatedProductIds(
$product)
295 if (!
$product->hasData($this->_keyAssociatedProductIds)) {
303 return $product->getData($this->_keyAssociatedProductIds);
312 public function getAssociatedProductCollection(
$product)
320 )->setIsStrongMode();
333 $productsInfo =
$buyRequest->getSuperGroup() ?: [];
336 if (!is_array($productsInfo)) {
337 return __(
'Please specify the quantity of product(s).')->render();
339 foreach ($associatedProducts as $subProduct) {
340 if (!isset($productsInfo[$subProduct->getId()])) {
341 if ($isStrictProcessMode && !$subProduct->getQty()) {
342 return __(
'Please specify the quantity of product(s).')->render();
344 $productsInfo[$subProduct->getId()] = intval($subProduct->getQty());
348 return $productsInfo;
365 $associatedProductsInfo = [];
368 if (is_string($productsInfo)) {
369 return $productsInfo;
371 $associatedProducts = !$isStrictProcessMode || !empty($productsInfo)
375 foreach ($associatedProducts as $subProduct) {
376 $qty = $productsInfo[$subProduct->getId()];
377 if (!is_numeric($qty) || empty($qty)) {
381 $_result = $subProduct->getTypeInstance()->_prepareProduct(
$buyRequest, $subProduct, $processMode);
383 if (is_string($_result)) {
385 }
elseif (!isset($_result[0])) {
386 return __(
'Cannot process the item.')->render();
389 if ($isStrictProcessMode) {
390 $_result[0]->setCartQty($qty);
391 $_result[0]->addCustomOption(
'product_type', self::TYPE_CODE,
$product);
392 $_result[0]->addCustomOption(
394 $this->serializer->serialize(
396 'super_product_config' => [
397 'product_type' => self::TYPE_CODE,
405 $associatedProductsInfo[] = [$subProduct->getId() => $qty];
406 $product->addCustomOption(
'associated_product_' . $subProduct->getId(), $qty);
410 if (!$isStrictProcessMode || count($associatedProductsInfo)) {
412 $product->addCustomOption(
'info_buyRequest', $this->serializer->serialize(
$buyRequest->getData()));
421 return __(
'Please specify the quantity of product(s).')->render();
447 $superGroup = is_array($superGroup) ? array_filter($superGroup,
'intval') : [];
449 $options = [
'super_group' => $superGroup];
481 $product->unsetData($this->_keyAssociatedProducts);
482 if (
$product->hasData(
'product_options') && !empty(
$product->getData(
'product_options'))) {
483 throw new \Exception(
'Custom options for grouped product type are not supported');
485 return parent::beforeSave(
$product);
496 if (
$item->getMsrp() !==
null) {
processBuyRequest($product, $buyRequest)
elseif(isset( $params[ 'redirect_parent']))
getChildrenMsrp(\Magento\Catalog\Model\Product $product)
getAssociatedProducts($product)
_isStrictProcessMode($processMode)
__construct(\Magento\Catalog\Model\Product\Option $catalogProductOption, \Magento\Eav\Model\Config $eavConfig, \Magento\Catalog\Model\Product\Type $catalogProductType, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb, \Magento\Framework\Filesystem $filesystem, \Magento\Framework\Registry $coreRegistry, \Psr\Log\LoggerInterface $logger, ProductRepositoryInterface $productRepository, \Magento\GroupedProduct\Model\ResourceModel\Product\Link $catalogProductLink, \Magento\Store\Model\StoreManagerInterface $storeManager, \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus, \Magento\Framework\App\State $appState, \Magento\Msrp\Helper\Data $msrpData, \Magento\Framework\Serialize\Serializer\Json $serializer=null)
addStatusFilter($status, $product)
setSaleableStatus($product)
flushAssociatedProductsCache($product)
getProductsToPurchaseByReqGroups($product)
_prepareProduct(\Magento\Framework\DataObject $buyRequest, $product, $processMode)
getProductInfo(\Magento\Framework\DataObject $buyRequest, $product, $isStrictProcessMode)
getStatusFilters($product)
foreach($product->getExtensionAttributes() ->getBundleProductOptions() as $option) $buyRequest
$_keyAssociatedProductIds
getParentIdsByChild($childId)
getChildrenIds($parentId, $required=true)
foreach( $_productCollection as $_product)() ?>" class $info
deleteTypeSpecificData(\Magento\Catalog\Model\Product $product)