Skip to content

Commit 21082cd

Browse files
author
Valeriy Nayda
committed
MSI: Integrate the Sales Channel output to the Manage Stock view
1 parent b533c11 commit 21082cd

File tree

9 files changed

+61
-46
lines changed

9 files changed

+61
-46
lines changed

app/code/Magento/Inventory/view/adminhtml/ui_component/inventory_source_listing.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@
268268
<label translate="true">Priority</label>
269269
</settings>
270270
</column>
271-
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction">
271+
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction" sortOrder="100">
272272
<argument name="data" xsi:type="array">
273273
<item name="config" xsi:type="array">
274274
<item name="editUrlPath" xsi:type="string">inventory/source/edit</item>

app/code/Magento/Inventory/view/adminhtml/ui_component/inventory_stock_listing.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
</editor>
119119
</settings>
120120
</column>
121-
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction">
121+
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction" sortOrder="100">
122122
<argument name="data" xsi:type="array">
123123
<item name="config" xsi:type="array">
124124
<item name="editUrlPath" xsi:type="string">inventory/stock/edit</item>

app/code/Magento/InventorySales/Plugin/Inventory/Ui/StockDataProvider/SalesChannels.php

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,22 @@ class SalesChannels
1919
/**
2020
* @var GetAssignedSalesChannelsForStockInterface
2121
*/
22-
23-
private $channelsByStock;
22+
private $getAssignedSalesChannelsForStock;
2423

2524
/**
2625
* @var StockRepository
2726
*/
2827
private $stockRepository;
2928

3029
/**
31-
* SalesChannels constructor.
32-
* @param GetAssignedSalesChannelsForStockInterface $channelsByStock
30+
* @param GetAssignedSalesChannelsForStockInterface $getAssignedSalesChannelsForStock
3331
* @param StockRepository $stockRepository
3432
*/
3533
public function __construct(
36-
GetAssignedSalesChannelsForStockInterface $channelsByStock,
34+
GetAssignedSalesChannelsForStockInterface $getAssignedSalesChannelsForStock,
3735
StockRepository $stockRepository
3836
) {
39-
$this->channelsByStock = $channelsByStock;
37+
$this->getAssignedSalesChannelsForStock = $getAssignedSalesChannelsForStock;
4038
$this->stockRepository = $stockRepository;
4139
}
4240

@@ -49,32 +47,30 @@ public function afterGetData(StockDataProvider $subject, array $data): array
4947
{
5048
if ('inventory_stock_form_data_source' === $subject->getName()) {
5149
foreach ($data as &$stockData) {
52-
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock($data);
50+
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock($stockData['general']);
5351
}
5452
unset($stockData);
5553
} elseif ($data['totalRecords'] > 0) {
5654
foreach ($data['items'] as &$stockData) {
57-
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock($data);
55+
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock($stockData);
5856
}
5957
unset($stockData);
6058
}
6159
return $data;
6260
}
6361

6462
/**
65-
* @param bool $data
63+
* @param array $stock
6664
* @return array
6765
*/
68-
private function getSalesChannelsDataForStock($data): array
66+
private function getSalesChannelsDataForStock(array $stock): array
6967
{
70-
$stockData = [];
71-
foreach ($data['items'] as $stock) {
72-
foreach ($stock['extension_attributes'] as $salesChannels) {
73-
foreach ($salesChannels as $salesChannel) {
74-
$stockData[$salesChannel['type']][] = $salesChannel['code'];
75-
}
68+
$salesChannelsData = [];
69+
foreach ($stock['extension_attributes'] as $salesChannels) {
70+
foreach ($salesChannels as $salesChannel) {
71+
$salesChannelsData[$salesChannel['type']][] = $salesChannel['code'];
7672
}
7773
}
78-
return $stockData;
74+
return $salesChannelsData;
7975
}
8076
}

app/code/Magento/InventorySales/Ui/Component/Listing/Column/SalesChannels.php

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Magento\InventorySales\Ui\Component\Listing\Column;
99

10-
use Magento\InventorySales\Ui\SalesChannelNameResolver;
10+
use Magento\InventorySales\Ui\SalesChannelNameResolverInterface;
1111
use Magento\Ui\Component\Listing\Columns\Column;
1212
use Magento\Framework\View\Element\UiComponentFactory;
1313
use Magento\Framework\View\Element\UiComponent\ContextInterface;
@@ -18,45 +18,46 @@
1818
class SalesChannels extends Column
1919
{
2020
/**
21-
* @var SalesChannelNameResolver
21+
* @var SalesChannelNameResolverInterface
2222
*/
2323
private $salesChannelNameResolver;
2424

2525
/**
26-
* SalesChannels constructor.
27-
* @param SalesChannelNameResolver $salesChannelNameResolver
2826
* @param ContextInterface $context
2927
* @param UiComponentFactory $uiComponentFactory
28+
* @param SalesChannelNameResolverInterface $salesChannelNameResolver
3029
* @param array $components
3130
* @param array $data
3231
*/
3332
public function __construct(
34-
SalesChannelNameResolver $salesChannelNameResolver,
3533
ContextInterface $context,
3634
UiComponentFactory $uiComponentFactory,
35+
SalesChannelNameResolverInterface $salesChannelNameResolver,
3736
array $components = [],
3837
array $data = []
3938
) {
40-
$this->salesChannelNameResolver = $salesChannelNameResolver;
4139
parent::__construct($context, $uiComponentFactory, $components, $data);
40+
$this->salesChannelNameResolver = $salesChannelNameResolver;
4241
}
4342

4443
/**
45-
* Prepare column value
44+
* Prepare sales value
4645
*
4746
* @param array $salesChannelData
4847
* @return array
4948
*/
5049
private function prepareSalesChannelData(array $salesChannelData): array
5150
{
52-
$refactoredChannelData = [];
51+
$preparedChannelData = [];
5352
foreach ($salesChannelData as $type => $salesChannel) {
5453
foreach ($salesChannel as $key => $code) {
55-
$refactoredChannelData[$type][$key]['name'] = $this->salesChannelNameResolver->resolve($type, $code);
56-
$refactoredChannelData[$type][$key]['code'] = $code;
54+
$preparedChannelData[$type][$key] = [
55+
'name' => $this->salesChannelNameResolver->resolve($type, $code),
56+
'code' => $code,
57+
];
5758
}
5859
}
59-
return $refactoredChannelData;
60+
return $preparedChannelData;
6061
}
6162

6263
/**
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
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\Ui;
9+
10+
/**
11+
* Resolve sales channel name by type and code
12+
*/
13+
interface SalesChannelNameResolverInterface
14+
{
15+
/**
16+
* Resolve sales channel name by type and code
17+
*
18+
* @param string $type
19+
* @param string $code
20+
* @return string
21+
*/
22+
public function resolve(string $type, string $code): string;
23+
}

app/code/Magento/InventorySales/Ui/SalesChannelNameResolver.php renamed to app/code/Magento/InventorySales/Ui/WebsiteNameResolver.php

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,40 +7,35 @@
77

88
namespace Magento\InventorySales\Ui;
99

10+
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
1011
use Magento\Store\Api\WebsiteRepositoryInterface;
1112

1213
/**
13-
* Add grid column for sales channels
14+
* {@inheritdoc}
15+
*
16+
* In default implementation works only with website
1417
*/
15-
class SalesChannelNameResolver
18+
class WebsiteNameResolver implements SalesChannelNameResolverInterface
1619
{
1720
/**
1821
* @var WebsiteRepositoryInterface
1922
*/
2023
private $websiteRepository;
2124

2225
/**
23-
* SalesChannelNameResolver constructor.
2426
* @param WebsiteRepositoryInterface $websiteRepository
2527
*/
2628
public function __construct(
2729
WebsiteRepositoryInterface $websiteRepository
28-
)
29-
{
30+
) {
3031
$this->websiteRepository = $websiteRepository;
3132
}
3233

3334
/**
34-
* resolve the name by providing the code
35-
*
36-
* @param string $type
37-
* @param string $code
38-
* @return string
39-
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
35+
* @inheritdoc
4036
*/
4137
public function resolve(string $type, string $code): string
4238
{
43-
$name = $this->websiteRepository->get($code)->getName();
44-
return $name;
39+
return SalesChannelInterface::TYPE_WEBSITE === $code ? $this->websiteRepository->get($code)->getName() : $code;
4540
}
4641
}

app/code/Magento/InventorySales/etc/di.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
<preference for="Magento\InventorySalesApi\Api\Data\SalesChannelInterface" type="Magento\InventorySales\Model\SalesChannel"/>
1111
<preference for="Magento\InventorySales\Model\GetAssignedSalesChannelsForStockInterface" type="Magento\InventorySales\Model\GetAssignedSalesChannelsForStock"/>
1212
<preference for="Magento\InventorySales\Model\ReplaceSalesChannelsForStockInterface" type="Magento\InventorySales\Model\ResourceModel\ReplaceSalesChannelsDataForStock"/>
13+
<preference for="Magento\InventorySales\Ui\SalesChannelNameResolverInterface" type="Magento\InventorySales\Ui\WebsiteNameResolver"/>
1314
<type name="Magento\InventoryApi\Api\StockRepositoryInterface">
1415
<plugin name="load_sales_channels_on_get_list" type="Magento\InventorySales\Plugin\Inventory\StockRepository\LoadSalesChannelsOnGetListPlugin"/>
1516
<plugin name="load_sales_channels_on_get" type="Magento\InventorySales\Plugin\Inventory\StockRepository\LoadSalesChannelsOnGetPlugin"/>
1617
<plugin name="save_sales_channels_links" type="Magento\InventorySales\Plugin\Inventory\StockRepository\SaveSalesChannelsLinksPlugin"/>
1718
</type>
1819
<type name="Magento\Inventory\Ui\DataProvider\StockDataProvider">
1920
<plugin name="sales_channel_data" type="Magento\InventorySales\Plugin\Inventory\Ui\StockDataProvider\SalesChannels" />
20-
<plugin name="data_after_saveplugin" type="Magento\InventorySales\Plugin\Inventory\StockRepository\SalesChannel\SaveSalesChannelsLinksPlugin" />
2121
</type>
2222
</config>

app/code/Magento/InventorySales/view/adminhtml/ui_component/inventory_stock_form.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<opened>true</opened>
1919
<dataScope>sales_channels</dataScope>
2020
</settings>
21-
<field name="websites" formElement="multiselect" sortOrder="20">
21+
<field name="website" formElement="multiselect" sortOrder="20">
2222
<settings>
2323
<dataType>text</dataType>
2424
<label translate="true">Websites</label>

app/code/Magento/InventorySales/view/adminhtml/ui_component/inventory_stock_listing.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<column name="sales_channels"
1111
class="Magento\InventorySales\Ui\Component\Listing\Column\SalesChannels"
1212
component="Magento_InventorySales/js/stock/grid/cell/sales-channels"
13-
sortOrder="30">
13+
sortOrder="40">
1414
<settings>
1515
<label translate="true">Sales Channels</label>
1616
</settings>

0 commit comments

Comments
 (0)