Skip to content

Commit d33c139

Browse files
author
Valeriy Nayda
authored
Merge pull request magento#221 from magento-engcom/199_assign_main_website_to_default_stock
magento#199 - Assign main website to default stock
2 parents 91795d5 + 5bd6991 commit d33c139

File tree

9 files changed

+195
-26
lines changed

9 files changed

+195
-26
lines changed

app/code/Magento/Inventory/composer.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
"description": "N/A",
44
"require": {
55
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
6-
"magento/framework": "100.2.*",
6+
"magento/framework": "100.3.*",
77
"magento/module-inventory-api": "100.0.*",
8-
"magento/module-backend": "100.2.*",
9-
"magento/module-directory": "100.2.*",
10-
"magento/module-shipping": "100.2.*",
11-
"magento/module-ui": "100.2.*"
8+
"magento/module-backend": "100.3.*",
9+
"magento/module-directory": "100.3.*",
10+
"magento/module-shipping": "100.3.*",
11+
"magento/module-ui": "100.3.*"
1212
},
1313
"type": "magento2-module",
1414
"version": "100.0.0-dev",

app/code/Magento/InventoryApi/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "N/A",
44
"require": {
55
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
6-
"magento/framework": "100.2.*"
6+
"magento/framework": "100.3.*"
77
},
88
"type": "magento2-module",
99
"version": "100.0.0-dev",

app/code/Magento/InventoryCatalog/composer.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"description": "N/A",
44
"require": {
55
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
6-
"magento/framework": "100.2.*",
6+
"magento/framework": "100.3.*",
77
"magento/module-inventory-api": "100.0.*",
8-
"magento/module-backend": "100.2.*",
9-
"magento/module-catalog": "100.2.*",
10-
"magento/module-directory": "100.2.*",
11-
"magento/module-shipping": "100.2.*",
12-
"magento/module-ui": "100.2.*"
8+
"magento/module-backend": "100.3.*",
9+
"magento/module-catalog": "100.3.*",
10+
"magento/module-directory": "100.3.*",
11+
"magento/module-shipping": "100.3.*",
12+
"magento/module-ui": "100.3.*"
1313
},
1414
"type": "magento2-module",
1515
"version": "100.0.0-dev",

app/code/Magento/InventoryImportExport/composer.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
"description": "N/A",
44
"require": {
55
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
6-
"magento/framework": "100.2.*",
6+
"magento/framework": "100.3.*",
77
"magento/module-inventory-api": "100.0.*",
8-
"magento/module-backend": "100.2.*",
9-
"magento/module-catalog": "100.2.*",
10-
"magento/module-directory": "100.2.*",
11-
"magento/module-shipping": "100.2.*",
12-
"magento/module-ui": "100.2.*"
8+
"magento/module-backend": "100.3.*",
9+
"magento/module-catalog": "100.3.*",
10+
"magento/module-directory": "100.3.*",
11+
"magento/module-shipping": "100.3.*",
12+
"magento/module-ui": "100.3.*"
1313
},
1414
"type": "magento2-module",
1515
"version": "100.0.0-dev",
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\InventorySales\Setup;
9+
10+
use Magento\Framework\Setup\InstallDataInterface;
11+
use Magento\Framework\Setup\ModuleDataSetupInterface;
12+
use Magento\Framework\Setup\ModuleContextInterface;
13+
use Magento\InventorySales\Setup\Operation\AssignWebsiteToDefaultStock;
14+
15+
/**
16+
* Assigns Main website to the Default stock
17+
*/
18+
class InstallData implements InstallDataInterface
19+
{
20+
/**
21+
* @var AssignWebsiteToDefaultStock
22+
*/
23+
private $assignWebsiteToDefaultStock;
24+
25+
/**
26+
* @param AssignWebsiteToDefaultStock $assignWebsiteToDefaultStock
27+
*/
28+
public function __construct(
29+
AssignWebsiteToDefaultStock $assignWebsiteToDefaultStock
30+
) {
31+
$this->assignWebsiteToDefaultStock = $assignWebsiteToDefaultStock;
32+
}
33+
34+
/**
35+
* {@inheritdoc}
36+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
37+
*/
38+
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
39+
{
40+
$this->assignWebsiteToDefaultStock->execute();
41+
}
42+
}
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\InventorySales\Setup\Operation;
9+
10+
use Magento\InventoryApi\Api\StockRepositoryInterface;
11+
use Magento\InventoryCatalog\Api\DefaultStockProviderInterface;
12+
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
13+
use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
14+
use Magento\Store\Model\StoreManagerInterface;
15+
16+
/**
17+
* Assigns Main website to the Default stock
18+
*/
19+
class AssignWebsiteToDefaultStock
20+
{
21+
/**
22+
* @var StockRepositoryInterface
23+
*/
24+
private $stockRepository;
25+
26+
/**
27+
* @var DefaultStockProviderInterface
28+
*/
29+
private $defaultStockProvider;
30+
31+
/**
32+
* @var SalesChannelInterfaceFactory
33+
*/
34+
private $salesChannelFactory;
35+
36+
/**
37+
* @var StoreManagerInterface
38+
*/
39+
private $storeManager;
40+
41+
/**
42+
* @param StockRepositoryInterface $stockRepository
43+
* @param DefaultStockProviderInterface $defaultStockProvider
44+
* @param SalesChannelInterfaceFactory $salesChannelFactory
45+
* @param StoreManagerInterface $storeManager
46+
*/
47+
public function __construct(
48+
StockRepositoryInterface $stockRepository,
49+
DefaultStockProviderInterface $defaultStockProvider,
50+
SalesChannelInterfaceFactory $salesChannelFactory,
51+
StoreManagerInterface $storeManager
52+
) {
53+
$this->stockRepository = $stockRepository;
54+
$this->defaultStockProvider = $defaultStockProvider;
55+
$this->salesChannelFactory = $salesChannelFactory;
56+
$this->storeManager = $storeManager;
57+
}
58+
59+
/**
60+
* @inheritdoc
61+
* @throws \Magento\Framework\Exception\NoSuchEntityException
62+
* @throws \Magento\Framework\Exception\CouldNotSaveException
63+
* @throws \Magento\Framework\Validation\ValidationException
64+
* @throws \Magento\Framework\Exception\LocalizedException
65+
*/
66+
public function execute()
67+
{
68+
$websiteCode = $this->storeManager->getWebsite()->getCode();
69+
70+
$defaultStockId = $this->defaultStockProvider->getId();
71+
$defaultStock = $this->stockRepository->get($defaultStockId);
72+
73+
$extensionAttributes = $defaultStock->getExtensionAttributes();
74+
$salesChannels = $extensionAttributes->getSalesChannels();
75+
$salesChannels[] = $this->createSalesChannelByWebsiteCode($websiteCode);
76+
77+
$extensionAttributes->setSalesChannels($salesChannels);
78+
$this->stockRepository->save($defaultStock);
79+
}
80+
81+
/**
82+
* Create the sales channel by given website code
83+
*
84+
* @param string $websiteCode
85+
* @return SalesChannelInterface
86+
*/
87+
private function createSalesChannelByWebsiteCode(string $websiteCode): SalesChannelInterface
88+
{
89+
$salesChannel = $this->salesChannelFactory->create();
90+
$salesChannel->setCode($websiteCode);
91+
$salesChannel->setType(SalesChannelInterface::TYPE_WEBSITE);
92+
return $salesChannel;
93+
}
94+
}

app/code/Magento/InventorySales/Test/Integration/Website/AssignWebsiteToDefaultStockTest.php

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\InventoryApi\Api\StockRepositoryInterface;
1111
use Magento\InventoryCatalog\Api\DefaultStockProviderInterface;
1212
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
13+
use Magento\Store\Model\StoreManagerInterface;
1314
use Magento\Store\Model\Website;
1415
use Magento\Store\Model\WebsiteFactory;
1516
use Magento\TestFramework\Helper\Bootstrap;
@@ -32,11 +33,37 @@ class AssignWebsiteToDefaultStockTest extends TestCase
3233
*/
3334
private $defaultStockProvider;
3435

36+
/**
37+
* @var StoreManagerInterface
38+
*/
39+
private $storeManager;
40+
3541
protected function setUp()
3642
{
3743
$this->websiteFactory = Bootstrap::getObjectManager()->get(WebsiteFactory::class);
3844
$this->stockRepository = Bootstrap::getObjectManager()->get(StockRepositoryInterface::class);
3945
$this->defaultStockProvider = Bootstrap::getObjectManager()->get(DefaultStockProviderInterface::class);
46+
$this->storeManager = Bootstrap::getObjectManager()->get(StoreManagerInterface::class);
47+
}
48+
49+
/**
50+
* Test if Main website is associated to Default stock
51+
*/
52+
public function testIfWebsiteIsAssignedToDefaultStock()
53+
{
54+
$websiteCode = $this->storeManager->getWebsite()->getCode();
55+
56+
$defaultStockId = $this->defaultStockProvider->getId();
57+
$defaultStock = $this->stockRepository->get($defaultStockId);
58+
59+
$extensionAttributes = $defaultStock->getExtensionAttributes();
60+
$salesChannels = $extensionAttributes->getSalesChannels();
61+
self::assertContainsOnlyInstancesOf(SalesChannelInterface::class, $salesChannels);
62+
self::assertCount(1, $salesChannels);
63+
64+
$salesChannel = reset($salesChannels);
65+
self::assertEquals($websiteCode, $salesChannel->getCode());
66+
self::assertEquals(SalesChannelInterface::TYPE_WEBSITE, $salesChannel->getType());
4067
}
4168

4269
/**
@@ -59,10 +86,15 @@ public function testCreateWebsiteIfSalesChannelsAreEmpty()
5986
$extensionAttributes = $defaultStock->getExtensionAttributes();
6087
$salesChannels = $extensionAttributes->getSalesChannels();
6188
self::assertContainsOnlyInstancesOf(SalesChannelInterface::class, $salesChannels);
62-
self::assertCount(1, $salesChannels);
6389

64-
$salesChannel = reset($salesChannels);
65-
self::assertEquals($website->getCode(), $salesChannel->getCode());
66-
self::assertEquals(SalesChannelInterface::TYPE_WEBSITE, $salesChannel->getType());
90+
$salesChannelsOfCreatedWebsite = array_filter($salesChannels, function ($aSalesChannel) use ($websiteCode) {
91+
return $aSalesChannel->getCode() === $websiteCode;
92+
});
93+
94+
self::assertCount(1, $salesChannelsOfCreatedWebsite);
95+
96+
$aSalesChannelOfCreatedWebsite = reset($salesChannelsOfCreatedWebsite);
97+
self::assertEquals($website->getCode(), $aSalesChannelOfCreatedWebsite->getCode());
98+
self::assertEquals(SalesChannelInterface::TYPE_WEBSITE, $aSalesChannelOfCreatedWebsite->getType());
6799
}
68100
}

app/code/Magento/InventorySales/composer.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@
33
"description": "N/A",
44
"require": {
55
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
6-
"magento/framework": "100.2.*",
7-
"magento/module-ui": "100.2.*",
8-
"magento/module-inventory-sales-api": "100.0.*"
6+
"magento/framework": "100.3.*",
7+
"magento/module-ui": "100.3.*",
8+
"magento/module-inventory-sales-api": "100.0.*",
9+
"magento/module-store": "100.3.*"
910
},
1011
"type": "magento2-module",
1112
"version": "100.0.0-dev",

app/code/Magento/InventorySalesApi/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"description": "N/A",
44
"require": {
55
"php": "7.0.2|7.0.4|~7.0.6|~7.1.0",
6-
"magento/framework": "100.2.*"
6+
"magento/framework": "100.3.*"
77
},
88
"type": "magento2-module",
99
"version": "100.0.0-dev",

0 commit comments

Comments
 (0)