11 use Magento\Catalog\Model\ProductFactory;
12 use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory;
13 use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory as AttributeSetCollectionFactory;
48 private $descriptionConfig;
53 private $shortDescriptionConfig;
58 private $productFactory;
63 private $productGenerator;
68 private $defaultAttributeSetId;
73 private $attributeCollectionFactory;
78 private $attributeSetCollectionFactory;
83 private $descriptionGeneratorFactory;
88 private $productsAmountProvider;
93 private $websiteCategoryProvider;
98 private $priceProvider;
114 ProductFactory $productFactory,
116 CollectionFactory $attributeCollectionFactory,
117 AttributeSetCollectionFactory $attributeSetCollectionFactory,
125 $this->productGenerator = $productGenerator;
126 $this->attributeCollectionFactory = $attributeCollectionFactory;
127 $this->attributeSetCollectionFactory = $attributeSetCollectionFactory;
128 $this->descriptionGeneratorFactory = $descriptionGeneratorFactory;
129 $this->productsAmountProvider = $productsAmountProvider;
130 $this->websiteCategoryProvider = $websiteCategoryProvider;
131 $this->priceProvider = $priceProvider;
139 return 'Generating simple products';
148 'simple_products' =>
'Simple products' 158 $simpleProductsCount = $this->productsAmountProvider->getAmount(
159 $this->fixtureModel->getValue(
'simple_products', 0),
160 $this->getSkuPattern()
163 if (!$simpleProductsCount) {
167 $defaultAttributeSets = $this->getDefaultAttributeSets();
168 $searchTermsConfig = $this->getSearchTerms();
171 $descriptionGenerator = $this->descriptionGeneratorFactory->create(
172 $this->getDescriptionConfig(),
174 $simpleProductsCount,
175 'Full simple product Description %s' 179 $shortDescriptionGenerator = $this->descriptionGeneratorFactory->create(
180 $this->getShortDescriptionConfig(),
182 $simpleProductsCount,
183 'Short simple product Description %s' 186 $additionalAttributeSets = $this->getAdditionalAttributeSets();
189 $attributeSetCount = count(array_keys($defaultAttributeSets));
190 if ($attributeSetCount > ((
$index - 1) % (
int)$this->fixtureModel->getValue(
'categories', 30))) {
191 return array_keys($defaultAttributeSets)[mt_rand(0, count(array_keys($defaultAttributeSets)) - 1)];
193 $customSetsAmount = count($additionalAttributeSets);
194 return $customSetsAmount
195 ? $additionalAttributeSets[
$index % count($additionalAttributeSets)][
'attribute_set_id']
196 : $this->getDefaultAttributeSetId();
200 $additionalAttributes =
function (
204 $defaultAttributeSets,
205 $additionalAttributeSets
220 return sprintf(
'Simple Product %s',
$productId);
223 return sprintf($this->getSkuPattern(),
$productId);
225 'price' =>
function (
$index, $entityNumber) {
226 return $this->priceProvider->getPrice($entityNumber);
229 return sprintf(
'simple-product-%s',
$productId);
231 'description' =>
function (
$index) use ($descriptionGenerator) {
232 return $descriptionGenerator->generate(
$index);
234 'short_description' =>
function (
$index) use ($shortDescriptionGenerator) {
235 return $shortDescriptionGenerator->generate(
$index);
237 'website_ids' =>
function (
$index, $entityNumber) {
238 return $this->websiteCategoryProvider->getWebsiteIds(
$index);
240 'category_ids' =>
function (
$index, $entityNumber) {
241 return $this->websiteCategoryProvider->getCategoryId(
$index);
244 'additional_attributes' => $additionalAttributes,
245 'status' =>
function () {
249 $this->productGenerator->generate($simpleProductsCount, $fixtureMap);
257 private function getSkuPattern()
267 private function getDefaultAttributeSetId()
269 if (
null === $this->defaultAttributeSetId) {
270 $this->defaultAttributeSetId = (int)$this->productFactory->create()->getDefaultAttributeSetId();
273 return $this->defaultAttributeSetId;
282 private function getDefaultAttributeSets()
284 $attributeSets = $this->fixtureModel->getValue(
'attribute_sets',
null);
287 if ($attributeSets !==
null && array_key_exists(
'attribute_set', $attributeSets)) {
312 $attributes[$this->getDefaultAttributeSetId()] = [];
322 private function getSearchTerms()
324 $searchTerms = $this->fixtureModel->getValue(
'search_terms', []);
325 if (!empty($searchTerms)) {
326 $searchTerms = array_key_exists(0, $searchTerms[
'search_term'])
327 ? $searchTerms[
'search_term'] : [$searchTerms[
'search_term']];
338 private function getDescriptionConfig()
340 if (
null === $this->descriptionConfig) {
341 $this->descriptionConfig = $this->readDescriptionConfig(
'description');
344 return $this->descriptionConfig;
352 private function getShortDescriptionConfig()
354 if (
null === $this->shortDescriptionConfig) {
355 $this->shortDescriptionConfig = $this->readDescriptionConfig(
'short-description');
358 return $this->shortDescriptionConfig;
367 private function readDescriptionConfig($configSrc)
369 $configData = $this->fixtureModel->getValue($configSrc, []);
383 private function getAdditionalAttributeSets()
386 $sets = $this->attributeSetCollectionFactory->create();
389 return $sets->getData();
__construct(FixtureModel $fixtureModel, ProductFactory $productFactory, ProductGenerator $productGenerator, CollectionFactory $attributeCollectionFactory, AttributeSetCollectionFactory $attributeSetCollectionFactory, SearchTermDescriptionGeneratorFactory $descriptionGeneratorFactory, WebsiteCategoryProvider $websiteCategoryProvider, ProductsAmountProvider $productsAmountProvider, PriceProvider $priceProvider)