Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Public Member Functions | Data Fields | Protected Member Functions | Protected Attributes
Grouped Class Reference
Inheritance diagram for Grouped:
AbstractType Backend

Public Member Functions

 __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)
 
 getRelationInfo ()
 
 getChildrenIds ($parentId, $required=true)
 
 getParentIdsByChild ($childId)
 
 getAssociatedProducts ($product)
 
 flushAssociatedProductsCache ($product)
 
 addStatusFilter ($status, $product)
 
 setSaleableStatus ($product)
 
 getStatusFilters ($product)
 
 getProductsToPurchaseByReqGroups ($product)
 
 processBuyRequest ($product, $buyRequest)
 
 hasWeight ()
 
 deleteTypeSpecificData (\Magento\Catalog\Model\Product $product)
 
 beforeSave ($product)
 
 getChildrenMsrp (\Magento\Catalog\Model\Product $product)
 
- Public Member Functions inherited from AbstractType
 deleteTypeSpecificData (\Magento\Catalog\Model\Product $product)
 
 __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\Framework\Serialize\Serializer\Json $serializer=null)
 
 setTypeId ($typeId)
 
 getRelationInfo ()
 
 getChildrenIds ($parentId, $required=true)
 
 getParentIdsByChild ($childId)
 
 getSetAttributes ($product)
 
 attributesCompare ($attributeOne, $attributeTwo)
 
 getEditableAttributes ($product)
 
 getAttributeById ($attributeId, $product)
 
 isVirtual ($product)
 
 isSalable ($product)
 
 processConfiguration (\Magento\Framework\DataObject $buyRequest, $product, $processMode=self::PROCESS_MODE_LITE)
 
 prepareForCartAdvanced (\Magento\Framework\DataObject $buyRequest, $product, $processMode=null)
 
 prepareForCart (\Magento\Framework\DataObject $buyRequest, $product)
 
 addFileQueue ($queueOptions)
 
 getSpecifyOptionMessage ()
 
 checkProductBuyState ($product)
 
 getOrderOptions ($product)
 
 save ($product)
 
 beforeSave ($product)
 
 isComposite ($product)
 
 canConfigure ($product)
 
 canUseQtyDecimals ()
 
 getSku ($product)
 
 getOptionSku ($product, $sku='')
 
 getWeight ($product)
 
 hasOptions ($product)
 
 updateQtyOption ($options, \Magento\Framework\DataObject $option, $value, $product)
 
 hasRequiredOptions ($product)
 
 getStoreFilter ($product)
 
 setStoreFilter ($store, $product)
 
 getForceChildItemQtyChanges ($product)
 
 prepareQuoteItemQty ($qty, $product)
 
 assignProductToOption ($optionProduct, $option, $product)
 
 setConfig ($config)
 
 getSearchableData ($product)
 
 getProductsToPurchaseByReqGroups ($product)
 
 processBuyRequest ($product, $buyRequest)
 
 checkProductConfiguration ($product, $buyRequest)
 
 hasWeight ()
 
 setImageFromChildProduct (\Magento\Catalog\Model\Product $product)
 
 getIdentities (\Magento\Catalog\Model\Product $product)
 
 getAssociatedProducts ($product)
 
 isPossibleBuyFromList ($product)
 

Data Fields

const TYPE_CODE = 'grouped'
 
- Data Fields inherited from AbstractType
const CALCULATE_CHILD = 0
 
const CALCULATE_PARENT = 1
 
const SHIPMENT_SEPARATELY = 1
 
const SHIPMENT_TOGETHER = 0
 
const PROCESS_MODE_FULL = 'full'
 
const PROCESS_MODE_LITE = 'lite'
 
const OPTION_PREFIX = 'option_'
 

Protected Member Functions

 getProductInfo (\Magento\Framework\DataObject $buyRequest, $product, $isStrictProcessMode)
 
 _prepareProduct (\Magento\Framework\DataObject $buyRequest, $product, $processMode)
 
- Protected Member Functions inherited from AbstractType
 _isStrictProcessMode ($processMode)
 
 _prepareOptions (\Magento\Framework\DataObject $buyRequest, $product, $processMode)
 
 _removeNotApplicableAttributes ($product)
 

Protected Attributes

 $_keyAssociatedProducts = '_cache_instance_associated_products'
 
 $_keyAssociatedProductIds = '_cache_instance_associated_product_ids'
 
 $_keyStatusFilters = '_cache_instance_status_filters'
 
 $_isComposite = true
 
 $_canConfigure = true
 
 $_catalogProductStatus
 
 $_storeManager
 
 $productLinks
 
 $_appState
 
 $msrpData
 
- Protected Attributes inherited from AbstractType
 $_typeId
 
 $_editableAttributes
 
 $_isComposite = false
 
 $_canConfigure = false
 
 $_canUseQtyDecimals = true
 
 $_fileQueue = []
 
 $_filesystem
 
 $_fileStorageDb
 
 $_cacheProductSetAttributes = '_cache_instance_product_set_attributes'
 
 $_coreRegistry
 
 $_eventManager
 
 $_logger
 
 $_catalogProductType
 
 $_eavConfig
 
 $_catalogProductOption
 
 $productRepository
 
 $serializer
 

Detailed Description

@SuppressWarnings(PHPMD.CouplingBetweenObjects) @api

Since
100.0.2

Definition at line 17 of file Grouped.php.

Constructor & Destructor Documentation

◆ __construct()

__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 
)
Parameters
\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 | null$serializer@SuppressWarnings(PHPMD.ExcessiveParameterList)

Definition at line 105 of file Grouped.php.

121  {
122  $this->productLinks = $catalogProductLink;
123  $this->_storeManager = $storeManager;
124  $this->_catalogProductStatus = $catalogProductStatus;
125  $this->_appState = $appState;
126  $this->msrpData = $msrpData;
127  parent::__construct(
128  $catalogProductOption,
129  $eavConfig,
130  $catalogProductType,
131  $eventManager,
132  $fileStorageDb,
133  $filesystem,
134  $coreRegistry,
135  $logger,
138  );
139  }
$storeManager
$logger
$filesystem

Member Function Documentation

◆ _prepareProduct()

_prepareProduct ( \Magento\Framework\DataObject  $buyRequest,
  $product,
  $processMode 
)
protected

Prepare product and its configuration to be added to some products list. Perform standard preparation process and add logic specific to Grouped product type.

Parameters
\Magento\Framework\DataObject$buyRequest
\Magento\Catalog\Model\Product$product
string$processMode
Returns
\Magento\Framework\Phrase|array|string @SuppressWarnings(PHPMD.CyclomaticComplexity) @SuppressWarnings(PHPMD.NPathComplexity)

Definition at line 362 of file Grouped.php.

363  {
364  $products = [];
365  $associatedProductsInfo = [];
366  $isStrictProcessMode = $this->_isStrictProcessMode($processMode);
367  $productsInfo = $this->getProductInfo($buyRequest, $product, $isStrictProcessMode);
368  if (is_string($productsInfo)) {
369  return $productsInfo;
370  }
371  $associatedProducts = !$isStrictProcessMode || !empty($productsInfo)
373  : false;
374 
375  foreach ($associatedProducts as $subProduct) {
376  $qty = $productsInfo[$subProduct->getId()];
377  if (!is_numeric($qty) || empty($qty)) {
378  continue;
379  }
380 
381  $_result = $subProduct->getTypeInstance()->_prepareProduct($buyRequest, $subProduct, $processMode);
382 
383  if (is_string($_result)) {
384  return $_result;
385  } elseif (!isset($_result[0])) {
386  return __('Cannot process the item.')->render();
387  }
388 
389  if ($isStrictProcessMode) {
390  $_result[0]->setCartQty($qty);
391  $_result[0]->addCustomOption('product_type', self::TYPE_CODE, $product);
392  $_result[0]->addCustomOption(
393  'info_buyRequest',
394  $this->serializer->serialize(
395  [
396  'super_product_config' => [
397  'product_type' => self::TYPE_CODE,
398  'product_id' => $product->getId(),
399  ],
400  ]
401  )
402  );
403  $products[] = $_result[0];
404  } else {
405  $associatedProductsInfo[] = [$subProduct->getId() => $qty];
406  $product->addCustomOption('associated_product_' . $subProduct->getId(), $qty);
407  }
408  }
409 
410  if (!$isStrictProcessMode || count($associatedProductsInfo)) {
411  $product->addCustomOption('product_type', self::TYPE_CODE, $product);
412  $product->addCustomOption('info_buyRequest', $this->serializer->serialize($buyRequest->getData()));
413 
414  $products[] = $product;
415  }
416 
417  if (count($products)) {
418  return $products;
419  }
420 
421  return __('Please specify the quantity of product(s).')->render();
422  }
elseif(isset( $params[ 'redirect_parent']))
Definition: iframe.phtml:17
return false
Definition: gallery.phtml:36
__()
Definition: __.php:13
getProductInfo(\Magento\Framework\DataObject $buyRequest, $product, $isStrictProcessMode)
Definition: Grouped.php:331
foreach($product->getExtensionAttributes() ->getBundleProductOptions() as $option) $buyRequest

◆ addStatusFilter()

addStatusFilter (   $status,
  $product 
)

Add status filter to collection

Parameters
int$status
\Magento\Catalog\Model\Product$product
Returns
$this

Definition at line 245 of file Grouped.php.

246  {
247  $statusFilters = $product->getData($this->_keyStatusFilters);
248  if (!is_array($statusFilters)) {
249  $statusFilters = [];
250  }
251 
252  $statusFilters[] = $status;
253  $product->setData($this->_keyStatusFilters, $statusFilters);
254 
255  return $this;
256  }
$status
Definition: order_status.php:8

◆ beforeSave()

beforeSave (   $product)

{}

Definition at line 478 of file Grouped.php.

479  {
480  //clear cached associated links
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');
484  }
485  return parent::beforeSave($product);
486  }

◆ deleteTypeSpecificData()

deleteTypeSpecificData ( \Magento\Catalog\Model\Product  $product)

Delete data specific for Grouped product type

Parameters
\Magento\Catalog\Model\Product$product
Returns
void @SuppressWarnings(PHPMD.UnusedFormalParameter)

Definition at line 471 of file Grouped.php.

472  {
473  }

◆ flushAssociatedProductsCache()

flushAssociatedProductsCache (   $product)
Parameters
\Magento\Catalog\Model\Product$product
Returns
\Magento\Catalog\Model\Product
Since
100.1.0

Definition at line 233 of file Grouped.php.

234  {
235  return $product->unsData($this->_keyAssociatedProducts);
236  }

◆ getAssociatedProducts()

getAssociatedProducts (   $product)

Retrieve array of associated products

Parameters
\Magento\Catalog\Model\Product$product
Returns
array

Definition at line 201 of file Grouped.php.

202  {
203  if (!$product->hasData($this->_keyAssociatedProducts)) {
204  $associatedProducts = [];
205 
206  $this->setSaleableStatus($product);
207 
208  $collection = $this->getAssociatedProductCollection(
209  $product
210  )->addAttributeToSelect(
211  ['name', 'price', 'special_price', 'special_from_date', 'special_to_date', 'tax_class_id']
212  )->addFilterByRequiredOptions()->setPositionOrder()->addStoreFilter(
213  $this->getStoreFilter($product)
214  )->addAttributeToFilter(
215  'status',
216  ['in' => $this->getStatusFilters($product)]
217  );
218 
219  foreach ($collection as $item) {
220  $associatedProducts[] = $item;
221  }
222 
223  $product->setData($this->_keyAssociatedProducts, $associatedProducts);
224  }
225  return $product->getData($this->_keyAssociatedProducts);
226  }

◆ getChildrenIds()

getChildrenIds (   $parentId,
  $required = true 
)

Retrieve Required children ids Return grouped array, ex array( group => array(ids) )

Parameters
int$parentId
bool$required
Returns
array

@SuppressWarnings(PHPMD.UnusedFormalParameter)

Definition at line 173 of file Grouped.php.

174  {
175  return $this->productLinks->getChildrenIds(
176  $parentId,
177  \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
178  );
179  }

◆ getChildrenMsrp()

getChildrenMsrp ( \Magento\Catalog\Model\Product  $product)
Parameters
\Magento\Catalog\Model\Product$product
Returns
int

Definition at line 492 of file Grouped.php.

493  {
494  $prices = [];
495  foreach ($this->getAssociatedProducts($product) as $item) {
496  if ($item->getMsrp() !== null) {
497  $prices[] = $item->getMsrp();
498  }
499  }
500  return $prices ? min($prices) : 0;
501  }

◆ getParentIdsByChild()

getParentIdsByChild (   $childId)

Retrieve parent ids array by requested child

Parameters
int | array$childId
Returns
array

Definition at line 187 of file Grouped.php.

188  {
189  return $this->productLinks->getParentIdsByChild(
190  $childId,
191  \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
192  );
193  }

◆ getProductInfo()

getProductInfo ( \Magento\Framework\DataObject  $buyRequest,
  $product,
  $isStrictProcessMode 
)
protected
Parameters
\Magento\Framework\DataObject$buyRequest
\Magento\Catalog\Model\Product$product
bool$isStrictProcessMode
Returns
array|string

Definition at line 331 of file Grouped.php.

332  {
333  $productsInfo = $buyRequest->getSuperGroup() ?: [];
334  $associatedProducts = $this->getAssociatedProducts($product);
335 
336  if (!is_array($productsInfo)) {
337  return __('Please specify the quantity of product(s).')->render();
338  }
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();
343  }
344  $productsInfo[$subProduct->getId()] = intval($subProduct->getQty());
345  }
346  }
347 
348  return $productsInfo;
349  }
__()
Definition: __.php:13
foreach($product->getExtensionAttributes() ->getBundleProductOptions() as $option) $buyRequest

◆ getProductsToPurchaseByReqGroups()

getProductsToPurchaseByReqGroups (   $product)

Retrieve products divided into groups required to purchase At least one product in each group has to be purchased

Parameters
\Magento\Catalog\Model\Product$product
Returns
array

Definition at line 431 of file Grouped.php.

◆ getRelationInfo()

getRelationInfo ( )

Return relation info about used products

Returns
\Magento\Framework\DataObject Object with information data

Definition at line 146 of file Grouped.php.

147  {
148  $info = new \Magento\Framework\DataObject();
149  $info->setTable(
150  'catalog_product_link'
151  )->setParentFieldName(
152  'product_id'
153  )->setChildFieldName(
154  'linked_product_id'
155  )->setWhere(
156  'link_type_id=' . \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
157  );
158  return $info;
159  }
foreach( $_productCollection as $_product)() ?>" class $info
Definition: listing.phtml:52

◆ getStatusFilters()

getStatusFilters (   $product)

Return all assigned status filters

Parameters
\Magento\Catalog\Model\Product$product
Returns
array

Definition at line 276 of file Grouped.php.

277  {
278  if (!$product->hasData($this->_keyStatusFilters)) {
279  return [
280  \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED,
281  \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED,
282  ];
283  }
284  return $product->getData($this->_keyStatusFilters);
285  }

◆ hasWeight()

hasWeight ( )

Check that product of this type has weight

Returns
bool

Definition at line 459 of file Grouped.php.

460  {
461  return false;
462  }

◆ processBuyRequest()

processBuyRequest (   $product,
  $buyRequest 
)

Prepare selected qty for grouped product's options

Parameters
\Magento\Catalog\Model\Product$product
\Magento\Framework\DataObject$buyRequest
Returns
array @SuppressWarnings(PHPMD.UnusedFormalParameter)

Definition at line 444 of file Grouped.php.

445  {
446  $superGroup = $buyRequest->getSuperGroup();
447  $superGroup = is_array($superGroup) ? array_filter($superGroup, 'intval') : [];
448 
449  $options = ['super_group' => $superGroup];
450 
451  return $options;
452  }
foreach($product->getExtensionAttributes() ->getBundleProductOptions() as $option) $buyRequest

◆ setSaleableStatus()

setSaleableStatus (   $product)

Set only saleable filter

Parameters
\Magento\Catalog\Model\Product$product
Returns
$this

Definition at line 264 of file Grouped.php.

265  {
266  $product->setData($this->_keyStatusFilters, $this->_catalogProductStatus->getSaleableStatusIds());
267  return $this;
268  }

Field Documentation

◆ $_appState

$_appState
protected

Definition at line 80 of file Grouped.php.

◆ $_canConfigure

$_canConfigure = true
protected

Definition at line 54 of file Grouped.php.

◆ $_catalogProductStatus

$_catalogProductStatus
protected

Definition at line 61 of file Grouped.php.

◆ $_isComposite

$_isComposite = true
protected

Definition at line 47 of file Grouped.php.

◆ $_keyAssociatedProductIds

$_keyAssociatedProductIds = '_cache_instance_associated_product_ids'
protected

Definition at line 33 of file Grouped.php.

◆ $_keyAssociatedProducts

$_keyAssociatedProducts = '_cache_instance_associated_products'
protected

Definition at line 26 of file Grouped.php.

◆ $_keyStatusFilters

$_keyStatusFilters = '_cache_instance_status_filters'
protected

Definition at line 40 of file Grouped.php.

◆ $_storeManager

$_storeManager
protected

Definition at line 68 of file Grouped.php.

◆ $msrpData

$msrpData
protected

Definition at line 85 of file Grouped.php.

◆ $productLinks

$productLinks
protected

Definition at line 75 of file Grouped.php.

◆ TYPE_CODE

const TYPE_CODE = 'grouped'

Definition at line 19 of file Grouped.php.


The documentation for this class was generated from the following file: