Skip to content

Commit fb81eee

Browse files
author
Valeriy Nayda
authored
Merge pull request #150 from magento-engcom/msi-inventory-mapping
Introduce API interfaces for Assigning Stocks to Sales channels #151
2 parents 307de4f + 77d66a0 commit fb81eee

32 files changed

+1214
-17
lines changed
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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\InventoryApi\Api\Data;
9+
10+
/**
11+
* TODO: temporal fix of extension classes generation during installation
12+
* Extension class for @see \Magento\InventoryApi\Api\Data\StockInterface
13+
*/
14+
class StockExtension extends \Magento\Framework\Api\AbstractSimpleObject implements StockExtensionInterface
15+
{
16+
/**
17+
* @return \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[]|null
18+
*/
19+
public function getSalesChannels()
20+
{
21+
return $this->_get('sales_channels');
22+
}
23+
24+
/**
25+
* @param \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[] $salesChannels
26+
* @return $this
27+
*/
28+
public function setSalesChannels($salesChannels)
29+
{
30+
$this->setData('sales_channels', $salesChannels);
31+
return $this;
32+
}
33+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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\InventoryApi\Api\Data;
9+
10+
/**
11+
* TODO: temporal fix of extension classes generation during installation
12+
* ExtensionInterface class for @see \Magento\InventoryApi\Api\Data\StockInterface
13+
*/
14+
interface StockExtensionInterface extends \Magento\Framework\Api\ExtensionAttributesInterface
15+
{
16+
/**
17+
* @return \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[]|null
18+
*/
19+
public function getSalesChannels();
20+
21+
/**
22+
* @param \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[] $salesChannels
23+
* @return $this
24+
*/
25+
public function setSalesChannels($salesChannels);
26+
}

app/code/Magento/InventoryApi/Test/Api/SourceRepository/CreateTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ protected function tearDown()
7272
{
7373
/** @var ResourceConnection $connection */
7474
$connection = Bootstrap::getObjectManager()->get(ResourceConnection::class);
75-
$connection->getConnection()->delete('inventory_source', [
75+
$connection->getConnection()->delete($connection->getTableName('inventory_source'), [
7676
SourceInterface::NAME . ' IN (?)' => ['source-name-1'],
7777
]);
7878
parent::tearDown();

app/code/Magento/InventoryApi/Test/Api/SourceRepository/RegionProcessingTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ protected function tearDown()
8282
{
8383
/** @var ResourceConnection $connection */
8484
$connection = Bootstrap::getObjectManager()->get(ResourceConnection::class);
85-
$connection->getConnection()->delete('inventory_source', [
85+
$connection->getConnection()->delete($connection->getTableName('inventory_source'), [
8686
SourceInterface::NAME . ' IN (?)' => ['source-name-1'],
8787
]);
8888
parent::tearDown();

app/code/Magento/InventoryCatalog/etc/module.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,9 @@
66
*/
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
9-
<module name="Magento_InventoryCatalog" setup_version="1.0.0" />
9+
<module name="Magento_InventoryCatalog" setup_version="2.0.0">
10+
<sequence>
11+
<module name="InventorySales"/>
12+
</sequence>
13+
</module>
1014
</config>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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\Model;
9+
10+
use Magento\InventorySales\Model\ResourceModel\GetAssignedSalesChannelsDataForStock;
11+
use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
12+
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
13+
14+
/**
15+
* @inheritdoc
16+
*/
17+
class GetAssignedSalesChannelsForStock implements GetAssignedSalesChannelsForStockInterface
18+
{
19+
/**
20+
* @var GetAssignedSalesChannelsDataForStock
21+
*/
22+
private $getAssignedSalesChannelsDataForStock;
23+
24+
/**
25+
* @var SalesChannelInterfaceFactory
26+
*/
27+
private $salesChannelFactory;
28+
29+
/**
30+
* @param GetAssignedSalesChannelsDataForStock $getAssignedSalesChannelsDataForStock
31+
* @param SalesChannelInterfaceFactory $salesChannelFactory
32+
*/
33+
public function __construct(
34+
GetAssignedSalesChannelsDataForStock $getAssignedSalesChannelsDataForStock,
35+
SalesChannelInterfaceFactory $salesChannelFactory
36+
) {
37+
$this->getAssignedSalesChannelsDataForStock = $getAssignedSalesChannelsDataForStock;
38+
$this->salesChannelFactory = $salesChannelFactory;
39+
}
40+
41+
/**
42+
* @inheritdoc
43+
*/
44+
public function execute(int $stockId) : array
45+
{
46+
$salesChannelsData = $this->getAssignedSalesChannelsDataForStock->execute($stockId);
47+
48+
$salesChannels = [];
49+
foreach ($salesChannelsData as $salesChannelData) {
50+
/** @var SalesChannelInterface $salesChannel */
51+
$salesChannel = $this->salesChannelFactory->create();
52+
$salesChannel->setType($salesChannelData[SalesChannelInterface::TYPE]);
53+
$salesChannel->setCode($salesChannelData[SalesChannelInterface::CODE]);
54+
$salesChannels[] = $salesChannel;
55+
}
56+
return $salesChannels;
57+
}
58+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
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\Model;
9+
10+
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
11+
12+
/**
13+
* Get assigned Sales Channels for Stock (Service Provider Interface - SPI)
14+
* Provide own implementation of this interface if you would like to replace channels management strategy
15+
*
16+
* @api
17+
*/
18+
interface GetAssignedSalesChannelsForStockInterface
19+
{
20+
/**
21+
* Get linked sales channels for Stock
22+
*
23+
* @param int $stockId
24+
* @return SalesChannelInterface[]
25+
*/
26+
public function execute(int $stockId): array;
27+
}

app/code/Magento/InventorySales/Model/OptionSource/WebsiteSource.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public function toOptionArray(): array
4242
}
4343
$websites[] = [
4444
'value' => $website->getCode(),
45-
'label' => $website->getName()
45+
'label' => $website->getName(),
4646
];
4747
}
4848
return $websites;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
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\Model;
9+
10+
/**
11+
* Implementation of links replacement between Stock and Sales Channels (Service Provider Interface - SPI)
12+
* Provide own implementation of this interface if you would like to replace channels management strategy
13+
*
14+
* @api
15+
*/
16+
interface ReplaceSalesChannelsForStockInterface
17+
{
18+
/**
19+
* Replace Sales Channels for Stock
20+
*
21+
* @param array $salesChannels
22+
* @param int $stockId
23+
* @return void
24+
*/
25+
public function execute(array $salesChannels, int $stockId);
26+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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\Model\ResourceModel;
9+
10+
use Magento\Framework\App\ResourceConnection;
11+
use Magento\InventorySales\Setup\Operation\CreateSalesChannelTable;
12+
13+
/**
14+
* Provides linked sales channels by given stock id
15+
*/
16+
class GetAssignedSalesChannelsDataForStock
17+
{
18+
/**
19+
* @var ResourceConnection
20+
*/
21+
private $resourceConnection;
22+
23+
/**
24+
* @param ResourceConnection $resourceConnection
25+
*/
26+
public function __construct(
27+
ResourceConnection $resourceConnection
28+
) {
29+
$this->resourceConnection = $resourceConnection;
30+
}
31+
32+
/**
33+
* Given a stock id, return array of sales channels assigned to it
34+
*
35+
* @param int $stockId
36+
* @return array
37+
*/
38+
public function execute(int $stockId): array
39+
{
40+
$connection = $this->resourceConnection->getConnection();
41+
$tableName = $this->resourceConnection->getTableName(CreateSalesChannelTable::TABLE_NAME_SALES_CHANNEL);
42+
43+
$select = $connection->select()
44+
->from($tableName)
45+
->where(CreateSalesChannelTable::STOCK_ID . ' = ?', $stockId);
46+
47+
return $connection->fetchAll($select);
48+
}
49+
}

0 commit comments

Comments
 (0)