| Current Path : /var/www/clients/client3/web2/web/setup/src/Magento/Setup/Fixtures/ |
| Current File : /var/www/clients/client3/web2/web/setup/src/Magento/Setup/Fixtures/CatalogPriceRulesFixture.php |
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Setup\Fixtures;
/**
* Fixture for generating catalog price rules
*
* Support the following format:
* <!-- Number of catalog price rules -->
* <catalog_price_rules>{int}</catalog_price_rules>
*
* @see setup/performance-toolkit/profiles/ce/small.xml
*/
class CatalogPriceRulesFixture extends Fixture
{
/**
* @var int
*/
protected $priority = 90;
/**
* {@inheritdoc}
* @SuppressWarnings(PHPMD)
*/
public function execute()
{
$catalogPriceRulesCount = $this->fixtureModel->getValue('catalog_price_rules', 0);
if (!$catalogPriceRulesCount) {
return;
}
$this->fixtureModel->resetObjectManager();
/** @var \Magento\Store\Model\StoreManager $storeManager */
$storeManager = $this->fixtureModel->getObjectManager()->create(\Magento\Store\Model\StoreManager::class);
/** @var $category \Magento\Catalog\Model\Category */
$category = $this->fixtureModel->getObjectManager()->get(\Magento\Catalog\Model\Category::class);
/** @var $model \Magento\CatalogRule\Model\Rule*/
$model = $this->fixtureModel->getObjectManager()->get(\Magento\CatalogRule\Model\Rule::class);
/** @var \Magento\Framework\EntityManager\MetadataPool $metadataPool */
$metadataPool = $this->fixtureModel->getObjectManager()
->get(\Magento\Framework\EntityManager\MetadataPool::class);
$metadata = $metadataPool->getMetadata(\Magento\CatalogRule\Api\Data\RuleInterface::class);
//Get all websites
$categoriesArray = [];
$websites = $storeManager->getWebsites();
foreach ($websites as $website) {
//Get all groups
$websiteGroups = $website->getGroups();
foreach ($websiteGroups as $websiteGroup) {
$websiteGroupRootCategory = $websiteGroup->getRootCategoryId();
$category->load($websiteGroupRootCategory);
$categoryResource = $category->getResource();
//Get all categories
$resultsCategories = $categoryResource->getAllChildren($category);
foreach ($resultsCategories as $resultsCategory) {
$category->load($resultsCategory);
$structure = explode('/', $category->getPath());
if (count($structure) > 2) {
$categoriesArray[] = [$category->getId(), $website->getId()];
}
}
}
}
asort($categoriesArray);
$categoriesArray = array_values($categoriesArray);
$linkField = $metadata->getLinkField();
$idField = $metadata->getIdentifierField();
for ($i = 0; $i < $catalogPriceRulesCount; $i++) {
$ruleName = sprintf('Catalog Price Rule %1$d', $i);
$data = [
$idField => null,
$linkField => null,
'name' => $ruleName,
'description' => '',
'is_active' => '1',
'website_ids' => $categoriesArray[$i % count($categoriesArray)][1],
'customer_group_ids' => [
0 => '0',
1 => '1',
2 => '2',
3 => '3',
],
'from_date' => '',
'to_date' => '',
'sort_order' => '',
'rule' => [
'conditions' => [
1 => [
'type' => \Magento\CatalogRule\Model\Rule\Condition\Combine::class,
'aggregator' => 'all',
'value' => '1',
'new_child' => '',
],
'1--1' => [
'type' => \Magento\CatalogRule\Model\Rule\Condition\Product::class,
'attribute' => 'category_ids',
'operator' => '==',
'value' => $categoriesArray[$i % count($categoriesArray)][0],
],
],
],
'simple_action' => 'by_percent',
'discount_amount' => '15',
'stop_rules_processing' => '0',
'page' => '1',
'limit' => '20',
'in_banners' => '1',
'banner_id' => [
'from' => '',
'to' => '',
],
'banner_name' => '',
'visible_in' => '',
'banner_is_enabled' => '',
'related_banners' => [],
];
if (isset($data['simple_action']) && $data['simple_action'] == 'by_percent'
&& isset($data['discount_amount'])
) {
$data['discount_amount'] = min(100, $data['discount_amount']);
}
if (isset($data['rule']['conditions'])) {
$data['conditions'] = $data['rule']['conditions'];
}
if (isset($data['rule']['actions'])) {
$data['actions'] = $data['rule']['actions'];
}
unset($data['rule']);
$model->loadPost($data);
$useAutoGeneration = (int)!empty($data['use_auto_generation']);
$model->setUseAutoGeneration($useAutoGeneration);
$model->save();
}
}
/**
* {@inheritdoc}
*/
public function getActionTitle()
{
return 'Generating catalog price rules';
}
/**
* {@inheritdoc}
*/
public function introduceParamLabels()
{
return [
'catalog_price_rules' => 'Catalog Price Rules'
];
}
}