-
Notifications
You must be signed in to change notification settings - Fork 248
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #150 from magento-engcom/msi-inventory-mapping
Introduce API interfaces for Assigning Stocks to Sales channels #151
- Loading branch information
Showing
32 changed files
with
1,214 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventoryApi\Api\Data; | ||
|
||
/** | ||
* TODO: temporal fix of extension classes generation during installation | ||
* Extension class for @see \Magento\InventoryApi\Api\Data\StockInterface | ||
*/ | ||
class StockExtension extends \Magento\Framework\Api\AbstractSimpleObject implements StockExtensionInterface | ||
{ | ||
/** | ||
* @return \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[]|null | ||
*/ | ||
public function getSalesChannels() | ||
{ | ||
return $this->_get('sales_channels'); | ||
} | ||
|
||
/** | ||
* @param \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[] $salesChannels | ||
* @return $this | ||
*/ | ||
public function setSalesChannels($salesChannels) | ||
{ | ||
$this->setData('sales_channels', $salesChannels); | ||
return $this; | ||
} | ||
} |
26 changes: 26 additions & 0 deletions
26
app/code/Magento/InventoryApi/Api/Data/StockExtensionInterface.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventoryApi\Api\Data; | ||
|
||
/** | ||
* TODO: temporal fix of extension classes generation during installation | ||
* ExtensionInterface class for @see \Magento\InventoryApi\Api\Data\StockInterface | ||
*/ | ||
interface StockExtensionInterface extends \Magento\Framework\Api\ExtensionAttributesInterface | ||
{ | ||
/** | ||
* @return \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[]|null | ||
*/ | ||
public function getSalesChannels(); | ||
|
||
/** | ||
* @param \Magento\InventorySalesApi\Api\Data\SalesChannelInterface[] $salesChannels | ||
* @return $this | ||
*/ | ||
public function setSalesChannels($salesChannels); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
app/code/Magento/InventorySales/Model/GetAssignedSalesChannelsForStock.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventorySales\Model; | ||
|
||
use Magento\InventorySales\Model\ResourceModel\GetAssignedSalesChannelsDataForStock; | ||
use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory; | ||
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface; | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
class GetAssignedSalesChannelsForStock implements GetAssignedSalesChannelsForStockInterface | ||
{ | ||
/** | ||
* @var GetAssignedSalesChannelsDataForStock | ||
*/ | ||
private $getAssignedSalesChannelsDataForStock; | ||
|
||
/** | ||
* @var SalesChannelInterfaceFactory | ||
*/ | ||
private $salesChannelFactory; | ||
|
||
/** | ||
* @param GetAssignedSalesChannelsDataForStock $getAssignedSalesChannelsDataForStock | ||
* @param SalesChannelInterfaceFactory $salesChannelFactory | ||
*/ | ||
public function __construct( | ||
GetAssignedSalesChannelsDataForStock $getAssignedSalesChannelsDataForStock, | ||
SalesChannelInterfaceFactory $salesChannelFactory | ||
) { | ||
$this->getAssignedSalesChannelsDataForStock = $getAssignedSalesChannelsDataForStock; | ||
$this->salesChannelFactory = $salesChannelFactory; | ||
} | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
public function execute(int $stockId) : array | ||
{ | ||
$salesChannelsData = $this->getAssignedSalesChannelsDataForStock->execute($stockId); | ||
|
||
$salesChannels = []; | ||
foreach ($salesChannelsData as $salesChannelData) { | ||
/** @var SalesChannelInterface $salesChannel */ | ||
$salesChannel = $this->salesChannelFactory->create(); | ||
$salesChannel->setType($salesChannelData[SalesChannelInterface::TYPE]); | ||
$salesChannel->setCode($salesChannelData[SalesChannelInterface::CODE]); | ||
$salesChannels[] = $salesChannel; | ||
} | ||
return $salesChannels; | ||
} | ||
} |
27 changes: 27 additions & 0 deletions
27
app/code/Magento/InventorySales/Model/GetAssignedSalesChannelsForStockInterface.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventorySales\Model; | ||
|
||
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface; | ||
|
||
/** | ||
* Get assigned Sales Channels for Stock (Service Provider Interface - SPI) | ||
* Provide own implementation of this interface if you would like to replace channels management strategy | ||
* | ||
* @api | ||
*/ | ||
interface GetAssignedSalesChannelsForStockInterface | ||
{ | ||
/** | ||
* Get linked sales channels for Stock | ||
* | ||
* @param int $stockId | ||
* @return SalesChannelInterface[] | ||
*/ | ||
public function execute(int $stockId): array; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
26 changes: 26 additions & 0 deletions
26
app/code/Magento/InventorySales/Model/ReplaceSalesChannelsForStockInterface.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventorySales\Model; | ||
|
||
/** | ||
* Implementation of links replacement between Stock and Sales Channels (Service Provider Interface - SPI) | ||
* Provide own implementation of this interface if you would like to replace channels management strategy | ||
* | ||
* @api | ||
*/ | ||
interface ReplaceSalesChannelsForStockInterface | ||
{ | ||
/** | ||
* Replace Sales Channels for Stock | ||
* | ||
* @param array $salesChannels | ||
* @param int $stockId | ||
* @return void | ||
*/ | ||
public function execute(array $salesChannels, int $stockId); | ||
} |
49 changes: 49 additions & 0 deletions
49
app/code/Magento/InventorySales/Model/ResourceModel/GetAssignedSalesChannelsDataForStock.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventorySales\Model\ResourceModel; | ||
|
||
use Magento\Framework\App\ResourceConnection; | ||
use Magento\InventorySales\Setup\Operation\CreateSalesChannelTable; | ||
|
||
/** | ||
* Provides linked sales channels by given stock id | ||
*/ | ||
class GetAssignedSalesChannelsDataForStock | ||
{ | ||
/** | ||
* @var ResourceConnection | ||
*/ | ||
private $resourceConnection; | ||
|
||
/** | ||
* @param ResourceConnection $resourceConnection | ||
*/ | ||
public function __construct( | ||
ResourceConnection $resourceConnection | ||
) { | ||
$this->resourceConnection = $resourceConnection; | ||
} | ||
|
||
/** | ||
* Given a stock id, return array of sales channels assigned to it | ||
* | ||
* @param int $stockId | ||
* @return array | ||
*/ | ||
public function execute(int $stockId): array | ||
{ | ||
$connection = $this->resourceConnection->getConnection(); | ||
$tableName = $this->resourceConnection->getTableName(CreateSalesChannelTable::TABLE_NAME_SALES_CHANNEL); | ||
|
||
$select = $connection->select() | ||
->from($tableName) | ||
->where(CreateSalesChannelTable::STOCK_ID . ' = ?', $stockId); | ||
|
||
return $connection->fetchAll($select); | ||
} | ||
} |
63 changes: 63 additions & 0 deletions
63
app/code/Magento/InventorySales/Model/ResourceModel/ReplaceSalesChannelsDataForStock.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventorySales\Model\ResourceModel; | ||
|
||
use Magento\Framework\App\ResourceConnection; | ||
use Magento\InventorySales\Model\ReplaceSalesChannelsForStockInterface; | ||
use Magento\InventorySales\Setup\Operation\CreateSalesChannelTable; | ||
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface; | ||
|
||
/** | ||
* Implementation of links replacement between Stock and Sales Channels for specific db layer | ||
* | ||
* There is no additional business logic on SPI (Service Provider Interface) level so could use resource model as | ||
* SPI implementation directly | ||
*/ | ||
class ReplaceSalesChannelsDataForStock implements ReplaceSalesChannelsForStockInterface | ||
{ | ||
/** | ||
* @var ResourceConnection | ||
*/ | ||
private $resourceConnection; | ||
|
||
/** | ||
* @param ResourceConnection $resourceConnection | ||
*/ | ||
public function __construct( | ||
ResourceConnection $resourceConnection | ||
) { | ||
$this->resourceConnection = $resourceConnection; | ||
} | ||
|
||
/** | ||
* Replace Sales Channels for Stock | ||
* | ||
* @param SalesChannelInterface[] $salesChannels | ||
* @param int $stockId | ||
* @return void | ||
*/ | ||
public function execute(array $salesChannels, int $stockId) | ||
{ | ||
$connection = $this->resourceConnection->getConnection(); | ||
$tableName = $this->resourceConnection->getTableName(CreateSalesChannelTable::TABLE_NAME_SALES_CHANNEL); | ||
|
||
$connection->delete($tableName, [CreateSalesChannelTable::STOCK_ID . ' = ?' => $stockId]); | ||
|
||
if (count($salesChannels)) { | ||
$salesChannelsToInsert = []; | ||
foreach ($salesChannels as $salesChannel) { | ||
$salesChannelsToInsert[] = [ | ||
SalesChannelInterface::TYPE => $salesChannel->getType(), | ||
SalesChannelInterface::CODE => $salesChannel->getCode(), | ||
CreateSalesChannelTable::STOCK_ID => $stockId, | ||
]; | ||
} | ||
$connection->insertMultiple($tableName, $salesChannelsToInsert); | ||
} | ||
} | ||
} |
56 changes: 56 additions & 0 deletions
56
app/code/Magento/InventorySales/Model/ResourceModel/StockIdResolver.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
<?php | ||
/** | ||
* Copyright © Magento, Inc. All rights reserved. | ||
* See COPYING.txt for license details. | ||
*/ | ||
declare(strict_types=1); | ||
|
||
namespace Magento\InventorySales\Model\ResourceModel; | ||
|
||
use Magento\Framework\App\ResourceConnection; | ||
use Magento\Framework\Exception\NoSuchEntityException; | ||
use Magento\InventorySales\Setup\Operation\CreateSalesChannelTable; | ||
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface; | ||
|
||
/** | ||
* This resource model is responsible for retrieving Stock items by sales channel type and code | ||
* Used by Service Contracts that are agnostic to the Data Access Layer | ||
*/ | ||
class StockIdResolver | ||
{ | ||
/** | ||
* @var ResourceConnection | ||
*/ | ||
private $resourceConnection; | ||
|
||
/** | ||
* @param ResourceConnection $resourceConnection | ||
*/ | ||
public function __construct( | ||
ResourceConnection $resourceConnection | ||
) { | ||
$this->resourceConnection = $resourceConnection; | ||
} | ||
|
||
/** | ||
* Returns the linked stock id by given a sales channel type and code | ||
* | ||
* @param string $type | ||
* @param string $code | ||
* @throws NoSuchEntityException | ||
* @return int|null | ||
*/ | ||
public function resolve(string $type, string $code) | ||
{ | ||
$connection = $this->resourceConnection->getConnection(); | ||
$tableName = $this->resourceConnection->getTableName(CreateSalesChannelTable::TABLE_NAME_SALES_CHANNEL); | ||
|
||
$select = $connection->select() | ||
->from($tableName, CreateSalesChannelTable::STOCK_ID) | ||
->where(SalesChannelInterface::TYPE . ' = ?', $type) | ||
->where(SalesChannelInterface::CODE . ' = ?', $code); | ||
|
||
$stockId = $connection->fetchOne($select); | ||
return false === $stockId ? null : (int)$stockId; | ||
} | ||
} |
Oops, something went wrong.