56 \
Magento\SalesRule\Model\RuleFactory $ruleFactory =
null 59 $this->ruleFactory = $ruleFactory ?: $this->fixtureModel->getObjectManager()
60 ->get(\
Magento\SalesRule\Model\RuleFactory::class);
69 $this->fixtureModel->resetObjectManager();
70 $this->cartPriceRulesCount = $this->fixtureModel->getValue(
'cart_price_rules', 0);
71 if (!$this->cartPriceRulesCount) {
75 $this->cartRulesAdvancedType = $this->fixtureModel->getValue(
'cart_price_rules_advanced_type',
false);
76 $this->cartPriceRulesProductsFloor = $this->fixtureModel->getValue(
77 'cart_price_rules_floor',
82 $storeManager = $this->fixtureModel->getObjectManager()->create(\
Magento\Store\Model\StoreManager::class);
84 $category = $this->fixtureModel->getObjectManager()->get(\
Magento\Catalog\Model\Category::class);
87 $categoriesArray = [];
91 $websiteGroups =
$website->getGroups();
92 foreach ($websiteGroups as $websiteGroup) {
93 $websiteGroupRootCategory = $websiteGroup->getRootCategoryId();
94 $category->load($websiteGroupRootCategory);
95 $categoryResource =
$category->getResource();
97 $resultsCategories = $categoryResource->getAllChildren(
$category);
98 foreach ($resultsCategories as $resultsCategory) {
100 $structure = explode(
'/',
$category->getPath());
101 if (count($structure) > 2) {
107 asort($categoriesArray);
108 $categoriesArray = array_values($categoriesArray);
110 if ($this->cartRulesAdvancedType ==
false) {
127 'type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class,
128 'aggregator' =>
'all',
133 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class,
134 'attribute' =>
'total_qty',
136 'value' => $this->cartPriceRulesProductsFloor +
$ruleId,
139 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Found::class,
141 'aggregator' =>
'all',
145 'type' => \Magento\SalesRule\Model\Rule\Condition\Product::class,
146 'attribute' =>
'category_ids',
148 'value' => $categoriesArray[
$ruleId % count($categoriesArray)][0],
153 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class,
154 'aggregator' =>
'all',
170 $ruleName = sprintf(
'Cart Price Rule %1$d',
$i);
177 'website_ids' => $categoriesArray[
$i % count($categoriesArray)][1],
178 'customer_group_ids' => [
184 'coupon_type' =>
'1',
186 'uses_per_customer' =>
'',
192 'simple_action' =>
'by_percent',
193 'discount_amount' =>
'10',
194 'discount_qty' =>
'0',
195 'discount_step' =>
'',
196 'apply_to_shipping' =>
'0',
197 'simple_free_shipping' =>
'0',
198 'stop_rules_processing' =>
'0',
199 'reward_points_delta' =>
'',
223 'banner_is_enabled' =>
'',
224 'related_banners' => [],
226 if (isset(
$data[
'simple_action']) &&
$data[
'simple_action'] ==
'by_percent' 227 && isset(
$data[
'discount_amount'])
229 $data[
'discount_amount'] = min(100,
$data[
'discount_amount']);
231 if (isset(
$data[
'rule'][
'conditions'])) {
232 $data[
'conditions'] =
$data[
'rule'][
'conditions'];
234 if (isset(
$data[
'rule'][
'actions'])) {
237 unset(
$data[
'rule']);
239 $model = $ruleFactory->create();
241 $useAutoGeneration = (int)!empty(
$data[
'use_auto_generation']);
242 $model->setUseAutoGeneration($useAutoGeneration);
255 if (
$ruleId < ($this->cartPriceRulesCount - 200)) {
258 'type' => \Magento\SalesRule\Model\Rule\Condition\Product::class,
259 'attribute' =>
'category_ids',
261 'value' => $categoriesArray[(
$ruleId / 4) % count($categoriesArray)][0],
264 $subtotal = [0, 5, 10, 15];
267 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class,
268 'attribute' =>
'base_subtotal',
270 'value' => $subtotal[
$ruleId % 4],
276 'type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class,
277 'aggregator' =>
'all',
282 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Found::class,
283 'aggregator' =>
'all',
287 '1--1--1' => $firstCondition,
288 '1--2' => $secondCondition
292 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class,
293 'aggregator' =>
'all',
301 $regions = [
'Alabama',
'Alaska',
'Arizona',
'Arkansas',
'California',
'Colorado',
'Connecticut',
302 'Delaware',
'District of Columbia',
'Florida',
'Georgia',
'Hawaii',
'Idaho',
'Illinois',
303 'Indiana',
'Iowa',
'Kansas',
'Kentucky',
'Louisiana',
'Maine',
'Maryland',
'Massachusetts',
304 'Michigan',
'Minnesota',
'Mississippi',
'Missouri',
'Montana',
'Nebraska',
'Nevada',
305 'New Hampshire',
'New Jersey',
'New Mexico',
'New York',
'North Carolina',
'North Dakota',
306 'Ohio',
'Oklahoma',
'Oregon',
'Pennsylvania',
'Rhode Island',
'South Carolina',
'South Dakota',
307 'Tennessee',
'Texas',
'Utah',
'Vermont',
'Virginia',
'Washington',
'West Virginia',
308 'Wisconsin',
'Wyoming'];
310 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class,
311 'attribute' =>
'region',
313 'value' => $regions[(
$ruleId / 4) % 50],
316 $subtotals = [0, 5, 10, 15];
319 'type' => \Magento\SalesRule\Model\Rule\Condition\Address::class,
320 'attribute' =>
'base_subtotal',
322 'value' => $subtotals[
$ruleId % 4],
327 'type' => \Magento\SalesRule\Model\Rule\Condition\Combine::class,
328 'aggregator' =>
'all',
332 '1--1' => $firstCondition,
333 '1--2' => $secondCondition
337 'type' => \Magento\SalesRule\Model\Rule\Condition\Product\Combine::class,
338 'aggregator' =>
'all',
356 if (
$i < ($this->cartPriceRulesCount - 200)) {
357 $ruleName = sprintf(
'Cart Price Advanced Catalog Rule %1$d', $j);
359 $ruleName = sprintf(
'Cart Price Advanced Region Rule %1$d', $j);
368 'website_ids' => $categoriesArray[
$i % count($categoriesArray)][1],
369 'customer_group_ids' => [
375 'coupon_type' =>
'1',
377 'uses_per_customer' =>
'',
383 'simple_action' =>
'cart_fixed',
384 'discount_amount' =>
'1',
385 'discount_qty' =>
'0',
386 'discount_step' =>
'',
387 'apply_to_shipping' =>
'0',
388 'simple_free_shipping' =>
'0',
389 'stop_rules_processing' =>
'0',
390 'reward_points_delta' =>
'',
414 'banner_is_enabled' =>
'',
415 'related_banners' => [],
417 if (isset(
$data[
'simple_action']) &&
$data[
'simple_action'] ==
'cart_fixed' 418 && isset(
$data[
'discount_amount'])
420 $data[
'discount_amount'] = min(1,
$data[
'discount_amount']);
422 if (isset(
$data[
'rule'][
'conditions'])) {
423 $data[
'conditions'] =
$data[
'rule'][
'conditions'];
425 if (isset(
$data[
'rule'][
'actions'])) {
428 unset(
$data[
'rule']);
430 $model = $ruleFactory->create();
432 $useAutoGeneration = (int)!empty(
$data[
'use_auto_generation']);
433 $model->setUseAutoGeneration($useAutoGeneration);
443 return 'Generating cart price rules';
452 'cart_price_rules' =>
'Cart Price Rules'
generateAdvancedRules($ruleFactory, $categoriesArray)
generateCondition($ruleId, $categoriesArray)
$cartPriceRulesProductsFloor
generateAdvancedCondition($ruleId, $categoriesArray)
generateRules($ruleFactory, $categoriesArray)
__construct(FixtureModel $fixtureModel, \Magento\SalesRule\Model\RuleFactory $ruleFactory=null)