Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@
<label translate="true">Priority</label>
</settings>
</column>
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction">
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction" sortOrder="100">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="editUrlPath" xsi:type="string">inventory/source/edit</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@
</editor>
</settings>
</column>
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction">
<actionsColumn name="actions" class="Magento\Backend\Ui\Component\Listing\Column\EditAction" sortOrder="100">
<argument name="data" xsi:type="array">
<item name="config" xsi:type="array">
<item name="editUrlPath" xsi:type="string">inventory/stock/edit</item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,37 @@

namespace Magento\InventorySales\Plugin\Inventory\Ui\StockDataProvider;

use Magento\CatalogInventory\Model\Stock\StockRepository;
use Magento\Inventory\Ui\DataProvider\StockDataProvider;
use Magento\InventorySales\Model\GetAssignedSalesChannelsForStockInterface;

/**
* Customize stock form. Add sales channels data
*/
class SalesChannels
{
/**
* @var GetAssignedSalesChannelsForStockInterface
*/
private $getAssignedSalesChannelsForStock;

/**
* @var StockRepository
*/
private $stockRepository;

/**
* @param GetAssignedSalesChannelsForStockInterface $getAssignedSalesChannelsForStock
* @param StockRepository $stockRepository
*/
public function __construct(
GetAssignedSalesChannelsForStockInterface $getAssignedSalesChannelsForStock,
StockRepository $stockRepository
) {
$this->getAssignedSalesChannelsForStock = $getAssignedSalesChannelsForStock;
$this->stockRepository = $stockRepository;
}

/**
* @param StockDataProvider $subject
* @param array $data
Expand All @@ -23,26 +47,30 @@ public function afterGetData(StockDataProvider $subject, array $data): array
{
if ('inventory_stock_form_data_source' === $subject->getName()) {
foreach ($data as &$stockData) {
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock();
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock($stockData['general']);
}
unset($stockData);
} elseif ($data['totalRecords'] > 0) {
foreach ($data['items'] as &$stockData) {
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock();
$stockData['sales_channels'] = $this->getSalesChannelsDataForStock($stockData);
}
unset($stockData);
}
return $data;
}

/**
* @param array $stock
* @return array
*/
private function getSalesChannelsDataForStock(): array
private function getSalesChannelsDataForStock(array $stock): array
{
// @todo: replace on real data
return [
'websites' => ['base'],
];
$salesChannelsData = [];
foreach ($stock['extension_attributes'] as $salesChannels) {
foreach ($salesChannels as $salesChannel) {
$salesChannelsData[$salesChannel['type']][] = $salesChannel['code'];
}
}
return $salesChannelsData;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,38 +7,70 @@

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

use Magento\InventorySales\Ui\SalesChannelNameResolverInterface;
use Magento\Ui\Component\Listing\Columns\Column;
use Magento\Framework\View\Element\UiComponentFactory;
use Magento\Framework\View\Element\UiComponent\ContextInterface;

/**
* Add grid column for sales channels
*/
class SalesChannels extends Column
{
/**
* Prepare column value
* @var SalesChannelNameResolverInterface
*/
private $salesChannelNameResolver;

/**
* @param ContextInterface $context
* @param UiComponentFactory $uiComponentFactory
* @param SalesChannelNameResolverInterface $salesChannelNameResolver
* @param array $components
* @param array $data
*/
public function __construct(
ContextInterface $context,
UiComponentFactory $uiComponentFactory,
SalesChannelNameResolverInterface $salesChannelNameResolver,
array $components = [],
array $data = []
) {
parent::__construct($context, $uiComponentFactory, $components, $data);
$this->salesChannelNameResolver = $salesChannelNameResolver;
}

/**
* Prepare sales value
*
* @param array $salesChannelData
* @return string
* @return array
*/
private function prepareStockChannelData(array $salesChannelData)
private function prepareSalesChannelData(array $salesChannelData): array
{
$websiteData = '';
foreach ($salesChannelData as $key => $channelData) {
$websiteData .= $key . ': ' . implode(',', $channelData);
$preparedChannelData = [];
foreach ($salesChannelData as $type => $salesChannel) {
foreach ($salesChannel as $key => $code) {
$preparedChannelData[$type][$key] = [
'name' => $this->salesChannelNameResolver->resolve($type, $code),
'code' => $code,
];
}
}
return $websiteData;
return $preparedChannelData;
}

/**
* @inheritdoc
* Prepare data source
*
* @param array $dataSource
* @return array
*/
public function prepareDataSource(array $dataSource)
{
if ($dataSource['data']['totalRecords'] > 0) {
foreach ($dataSource['data']['items'] as &$row) {
if (isset($row['sales_channels'])) {
$row['sales_channels'] = $this->prepareStockChannelData($row['sales_channels']);
}
$row['sales_channels'] = $this->prepareSalesChannelData($row['sales_channels']);
}
}
unset($row);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\InventorySales\Ui;

/**
* Resolve sales channel name by type and code
*/
interface SalesChannelNameResolverInterface
{
/**
* Resolve sales channel name by type and code
*
* @param string $type
* @param string $code
* @return string
*/
public function resolve(string $type, string $code): string;
}
41 changes: 41 additions & 0 deletions app/code/Magento/InventorySales/Ui/WebsiteNameResolver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
declare(strict_types=1);

namespace Magento\InventorySales\Ui;

use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
use Magento\Store\Api\WebsiteRepositoryInterface;

/**
* {@inheritdoc}
*
* In default implementation works only with website
*/
class WebsiteNameResolver implements SalesChannelNameResolverInterface
{
/**
* @var WebsiteRepositoryInterface
*/
private $websiteRepository;

/**
* @param WebsiteRepositoryInterface $websiteRepository
*/
public function __construct(
WebsiteRepositoryInterface $websiteRepository
) {
$this->websiteRepository = $websiteRepository;
}

/**
* @inheritdoc
*/
public function resolve(string $type, string $code): string
{
return SalesChannelInterface::TYPE_WEBSITE === $code ? $this->websiteRepository->get($code)->getName() : $code;
}
}
4 changes: 4 additions & 0 deletions app/code/Magento/InventorySales/etc/di.xml
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,13 @@
<preference for="Magento\InventorySalesApi\Api\Data\SalesChannelInterface" type="Magento\InventorySales\Model\SalesChannel"/>
<preference for="Magento\InventorySales\Model\GetAssignedSalesChannelsForStockInterface" type="Magento\InventorySales\Model\GetAssignedSalesChannelsForStock"/>
<preference for="Magento\InventorySales\Model\ReplaceSalesChannelsForStockInterface" type="Magento\InventorySales\Model\ResourceModel\ReplaceSalesChannelsDataForStock"/>
<preference for="Magento\InventorySales\Ui\SalesChannelNameResolverInterface" type="Magento\InventorySales\Ui\WebsiteNameResolver"/>
<type name="Magento\InventoryApi\Api\StockRepositoryInterface">
<plugin name="load_sales_channels_on_get_list" type="Magento\InventorySales\Plugin\Inventory\StockRepository\LoadSalesChannelsOnGetListPlugin"/>
<plugin name="load_sales_channels_on_get" type="Magento\InventorySales\Plugin\Inventory\StockRepository\LoadSalesChannelsOnGetPlugin"/>
<plugin name="save_sales_channels_links" type="Magento\InventorySales\Plugin\Inventory\StockRepository\SaveSalesChannelsLinksPlugin"/>
</type>
<type name="Magento\Inventory\Ui\DataProvider\StockDataProvider">
<plugin name="sales_channel_data" type="Magento\InventorySales\Plugin\Inventory\Ui\StockDataProvider\SalesChannels" />
</type>
</config>
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<opened>true</opened>
<dataScope>sales_channels</dataScope>
</settings>
<field name="websites" formElement="multiselect" sortOrder="20">
<field name="website" formElement="multiselect" sortOrder="20">
<settings>
<dataType>text</dataType>
<label translate="true">Websites</label>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,13 @@
-->
<listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
<columns name="inventory_stock_listing_columns">
<column name="sales_channels" class="Magento\InventorySales\Ui\Component\Listing\Column\SalesChannels" sortOrder="30">
<column name="sales_channels"
class="Magento\InventorySales\Ui\Component\Listing\Column\SalesChannels"
component="Magento_InventorySales/js/stock/grid/cell/sales-channels"
sortOrder="40">
<settings>
<label translate="true">Sales Channels</label>
</settings>
</column>
</columns>
</listing>
</listing>
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
define([
'Magento_Ui/js/grid/columns/column',
'mage/template',
'text!Magento_InventorySales/template/stock/grid/cell/sales-channel-content.html'
], function (Column, mageTemplate, channelTemplate) {
'use strict';

return Column.extend({
defaults: {
bodyTmpl: 'Magento_InventorySales/stock/grid/cell/sales-channel-cell.html'
},

/**
* render all sales channel records and return complete html
* each over all sales channels and render html for each channel
*
* @param {Object} records contains all results
* @returns {String} return rendered html content
*/
renderRecords: function (records) {
var salesChannels = records['sales_channels'],
htmlContent = '',
channelType;

if (typeof salesChannels !== 'object') {
throw new Error(
'Provided wrong salesChannel type ' + typeof salesChannels + ' the correct type would be object.'
);
}

for (channelType in salesChannels) {
htmlContent += mageTemplate(
channelTemplate,
{
data: {
channelType: channelType.charAt(0).toUpperCase() + channelType.slice(1),
values: salesChannels[channelType]
}
}
);
}

return htmlContent;
}
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="sales-grid-cell data-grid-cell-content" html="$col.renderRecords($row())"/>
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!--
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
-->
<div class="sales-channel-content">
<strong>
<%- data.channelType %>:
</strong>
<span>
<% _.each(data.values, function(value, key) { %>
<% var separator = ((data.values.length -1) != key) ? ', ' : ''; %>
<%- value.name %> (<%- value.code %>)<%- separator %>
<% }); %>
</span>
</div>