Skip to content

Commit

Permalink
Merge pull request magento#1283 from magento-engcom/MSI-1053
Browse files Browse the repository at this point in the history
MSI-1053: Fix naming for Source Deducation API
  • Loading branch information
maghamed authored Jun 2, 2018
2 parents f4afd20 + d7f51f9 commit 36c638e
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 65 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,13 @@
namespace Magento\InventoryShipping\Model\SourceDeduction\Request;

use Magento\InventorySalesApi\Api\Data\SalesEventInterface;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;

/**
* @inheritdoc
*/
class SourceDeductionRequest implements SourceDeductionRequestInterface
{
/**
* @var int
*/
private $websiteId;

/**
* @var string
*/
Expand All @@ -29,47 +25,56 @@ class SourceDeductionRequest implements SourceDeductionRequestInterface
*/
private $items;

/**
* @var SalesChannelInterface
*/
private $salesChannel;

/**
* @var SalesEventInterface
*/
private $salesEvent;

/**
* @param int $websiteId
* @param string $sourceCode
* @param array $items
* @param SalesChannelInterface $salesChannel
* @param SalesEventInterface $salesEvent
*/
public function __construct(int $websiteId, string $sourceCode, array $items, SalesEventInterface $salesEvent)
{
$this->websiteId = $websiteId;
public function __construct(
string $sourceCode,
array $items,
SalesChannelInterface $salesChannel,
SalesEventInterface $salesEvent
) {
$this->sourceCode = $sourceCode;
$this->items = $items;
$this->salesChannel = $salesChannel;
$this->salesEvent = $salesEvent;
}

/**
* @inheritdoc
*/
public function getWebsiteId(): int
public function getSourceCode(): string
{
return $this->websiteId;
return $this->sourceCode;
}

/**
* @inheritdoc
*/
public function getSourceCode(): string
public function getItems(): array
{
return $this->sourceCode;
return $this->items;
}

/**
* @inheritdoc
*/
public function getItems(): array
public function getSalesChannel(): SalesChannelInterface
{
return $this->items;
return $this->salesChannel;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
namespace Magento\InventoryShipping\Model\SourceDeduction\Request;

use Magento\InventorySalesApi\Api\Data\SalesEventInterface;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;

/**
* Request products in a given Qty, sourceCode and StockId
Expand All @@ -16,11 +17,6 @@
*/
interface SourceDeductionRequestInterface
{
/**
* @return int
*/
public function getWebsiteId(): int;

/**
* @return string
*/
Expand All @@ -31,6 +27,11 @@ public function getSourceCode(): string;
*/
public function getItems(): array;

/**
* @return SalesChannelInterface
*/
public function getSalesChannel(): SalesChannelInterface;

/**
* @return SalesEventInterface
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,9 @@
use Magento\InventoryConfigurationApi\Api\GetStockItemConfigurationInterface;
use Magento\InventoryShipping\Model\GetSourceItemBySourceCodeAndSku;
use Magento\InventoryShipping\Model\SourceDeduction\Request\SourceDeductionRequestInterface;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
use Magento\InventorySalesApi\Api\PlaceReservationsForSalesEventInterface;
use Magento\InventorySalesApi\Api\Data\ItemToSellInterfaceFactory;
use Magento\Store\Api\WebsiteRepositoryInterface;
use Magento\InventorySalesApi\Model\StockByWebsiteIdResolverInterface;
use Magento\InventorySalesApi\Api\StockResolverInterface;
use Magento\Framework\Exception\LocalizedException;

/**
Expand All @@ -40,25 +37,15 @@ class SourceDeductionService implements SourceDeductionServiceInterface
private $getStockItemConfiguration;

/**
* @var StockByWebsiteIdResolverInterface
* @var StockResolverInterface
*/
private $stockByWebsiteIdResolver;

/**
* @var SalesChannelInterfaceFactory
*/
private $salesChannelFactory;
private $stockResolver;

/**
* @var ItemToSellInterfaceFactory
*/
private $itemsToSellFactory;

/**
* @var WebsiteRepositoryInterface
*/
private $websiteRepository;

/**
* @var PlaceReservationsForSalesEventInterface
*/
Expand All @@ -68,29 +55,24 @@ class SourceDeductionService implements SourceDeductionServiceInterface
* @param SourceItemsSaveInterface $sourceItemsSave
* @param GetSourceItemBySourceCodeAndSku $getSourceItemBySourceCodeAndSku
* @param GetStockItemConfigurationInterface $getStockItemConfiguration
* @param StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver
* @param SalesChannelInterfaceFactory $salesChannelFactory
* @param StockResolverInterface $stockResolver
* @param ItemToSellInterfaceFactory $itemsToSellFactory
* @param WebsiteRepositoryInterface $websiteRepository
* @param PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent
* @internal param StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver
*/
public function __construct(
SourceItemsSaveInterface $sourceItemsSave,
GetSourceItemBySourceCodeAndSku $getSourceItemBySourceCodeAndSku,
GetStockItemConfigurationInterface $getStockItemConfiguration,
StockByWebsiteIdResolverInterface $stockByWebsiteIdResolver,
SalesChannelInterfaceFactory $salesChannelFactory,
StockResolverInterface $stockResolver,
ItemToSellInterfaceFactory $itemsToSellFactory,
WebsiteRepositoryInterface $websiteRepository,
PlaceReservationsForSalesEventInterface $placeReservationsForSalesEvent
) {
$this->sourceItemsSave = $sourceItemsSave;
$this->getSourceItemBySourceCodeAndSku = $getSourceItemBySourceCodeAndSku;
$this->getStockItemConfiguration = $getStockItemConfiguration;
$this->salesChannelFactory = $salesChannelFactory;
$this->stockResolver = $stockResolver;
$this->itemsToSellFactory = $itemsToSellFactory;
$this->websiteRepository = $websiteRepository;
$this->stockByWebsiteIdResolver = $stockByWebsiteIdResolver;
$this->placeReservationsForSalesEvent = $placeReservationsForSalesEvent;
}

Expand All @@ -101,9 +83,12 @@ public function execute(SourceDeductionRequestInterface $sourceDeductionRequest)
{
$sourceItemToSave = [];
$sourceCode = $sourceDeductionRequest->getSourceCode();
$websiteId = $sourceDeductionRequest->getWebsiteId();
$salesChannel = $sourceDeductionRequest->getSalesChannel();

$stockId = (int)$this->stockByWebsiteIdResolver->execute((int)$websiteId)->getStockId();
$stockId = (int)$this->stockResolver->get(
$salesChannel->getType(),
$salesChannel->getCode()
)->getStockId();
$itemsToSell = [];
foreach ($sourceDeductionRequest->getItems() as $item) {
$itemSku = $item->getSku();
Expand Down Expand Up @@ -135,13 +120,6 @@ public function execute(SourceDeductionRequestInterface $sourceDeductionRequest)

$salesEvent = $sourceDeductionRequest->getSalesEvent();

$websiteCode = $this->websiteRepository->getById($websiteId)->getCode();
$salesChannel = $this->salesChannelFactory->create([
'data' => [
'type' => SalesChannelInterface::TYPE_WEBSITE,
'code' => $websiteCode
]
]);
$this->placeReservationsForSalesEvent->execute($itemsToSell, $salesChannel, $salesEvent);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
use Magento\InventoryShipping\Model\SourceDeduction\Request\SourceDeductionRequestInterfaceFactory;
use Magento\InventorySourceSelectionApi\Api\Data\SourceSelectionItemInterface;
use Magento\InventorySourceSelectionApi\Api\Data\SourceSelectionResultInterface;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
use Magento\Store\Api\WebsiteRepositoryInterface;

class SourceDeductionRequestsFromSourceSelectionFactory
{
Expand All @@ -27,16 +30,32 @@ class SourceDeductionRequestsFromSourceSelectionFactory
*/
private $itemToDeductFactory;

/**
* @var SalesChannelInterfaceFactory
*/
private $salesChannelFactory;

/**
* @var WebsiteRepositoryInterface
*/
private $websiteRepository;

/**
* @param SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory
* @param ItemToDeductInterfaceFactory $itemToDeductFactory
* @param SalesChannelInterfaceFactory $salesChannelFactory
* @param WebsiteRepositoryInterface $websiteRepository
*/
public function __construct(
SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory,
ItemToDeductInterfaceFactory $itemToDeductFactory
ItemToDeductInterfaceFactory $itemToDeductFactory,
SalesChannelInterfaceFactory $salesChannelFactory,
WebsiteRepositoryInterface $websiteRepository
) {
$this->sourceDeductionRequestFactory = $sourceDeductionRequestFactory;
$this->itemToDeductFactory = $itemToDeductFactory;
$this->salesChannelFactory = $salesChannelFactory;
$this->websiteRepository = $websiteRepository;
}

/**
Expand All @@ -51,12 +70,20 @@ public function create(
int $websiteId
): array {
$sourceDeductionRequests = [];
$websiteCode = $this->websiteRepository->getById($websiteId)->getCode();
$salesChannel = $this->salesChannelFactory->create([
'data' => [
'type' => SalesChannelInterface::TYPE_WEBSITE,
'code' => $websiteCode
]
]);

foreach ($this->getItemsPerSource($sourceSelectionResult->getSourceSelectionItems()) as $sourceCode => $items) {
/** @var SourceDeductionRequestInterface[] $sourceDeductionRequests */
$sourceDeductionRequests[] = $this->sourceDeductionRequestFactory->create([
'websiteId' => $websiteId,
'sourceCode' => $sourceCode,
'items' => $items,
'salesChannel' => $salesChannel,
'salesEvent' => $salesEvent
]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@
use Magento\Framework\Event\ObserverInterface;
use Magento\Framework\Event\Observer as EventObserver;
use Magento\InventorySalesApi\Api\Data\SalesEventInterfaceFactory;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
use Magento\InventoryShipping\Model\SourceDeduction\SourceDeductionServiceInterface;
use Magento\InventoryShipping\Model\SourceDeduction\Request\SourceDeductionRequestInterfaceFactory;
use Magento\InventoryCatalogApi\Api\DefaultSourceProviderInterface;
use Magento\InventoryCatalogApi\Model\IsSingleSourceModeInterface;
use Magento\InventorySalesApi\Api\Data\SalesEventInterface;
use Magento\InventoryShipping\Model\GetItemsToDeduct;
use Magento\Store\Api\WebsiteRepositoryInterface;

/**
* Class SourceDeductionProcessor
Expand All @@ -37,11 +40,21 @@ class SourceDeductionProcessor implements ObserverInterface
*/
private $defaultSourceProvider;

/**
* @var SalesChannelInterfaceFactory
*/
private $salesChannelFactory;

/**
* @var SalesEventInterfaceFactory
*/
private $salesEventFactory;

/**
* @var WebsiteRepositoryInterface
*/
private $websiteRepository;

/**
* @var IsSingleSourceModeInterface
*/
Expand All @@ -56,22 +69,28 @@ class SourceDeductionProcessor implements ObserverInterface
* @param SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory
* @param SourceDeductionServiceInterface $sourceDeductionService
* @param DefaultSourceProviderInterface $defaultSourceProvider
* @param SalesChannelInterfaceFactory $salesChannelFactory
* @param SalesEventInterfaceFactory $salesEventFactory
* @param WebsiteRepositoryInterface $websiteRepository
* @param IsSingleSourceModeInterface $isSingleSourceMode
* @param GetItemsToDeduct $getItemsToDeduct
*/
public function __construct(
SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory,
SourceDeductionServiceInterface $sourceDeductionService,
DefaultSourceProviderInterface $defaultSourceProvider,
SalesChannelInterfaceFactory $salesChannelFactory,
SalesEventInterfaceFactory $salesEventFactory,
WebsiteRepositoryInterface $websiteRepository,
IsSingleSourceModeInterface $isSingleSourceMode,
GetItemsToDeduct $getItemsToDeduct
) {
$this->sourceDeductionRequestFactory = $sourceDeductionRequestFactory;
$this->sourceDeductionService = $sourceDeductionService;
$this->defaultSourceProvider = $defaultSourceProvider;
$this->salesChannelFactory = $salesChannelFactory;
$this->salesEventFactory = $salesEventFactory;
$this->websiteRepository = $websiteRepository;
$this->isSingleSourceMode = $isSingleSourceMode;
$this->getItemsToDeduct = $getItemsToDeduct;
}
Expand All @@ -98,14 +117,6 @@ public function execute(EventObserver $observer)
$sourceCode = $this->defaultSourceProvider->getCode();
}

$websiteId = $shipment->getOrder()->getStore()->getWebsiteId();

$salesEvent = $this->salesEventFactory->create([
'type' => SalesEventInterface::EVENT_SHIPMENT_CREATED,
'objectType' => SalesEventInterface::OBJECT_TYPE_ORDER,
'objectId' => $shipment->getOrderId()
]);

/** @var \Magento\Sales\Model\Order\Shipment\Item $shipmentItem */
foreach ($shipment->getAllItems() as $shipmentItem) {
foreach ($this->getItemsToDeduct->execute($shipmentItem) as $item) {
Expand All @@ -114,10 +125,26 @@ public function execute(EventObserver $observer)
}

if (!empty($shipmentItems)) {
$websiteId = $shipment->getOrder()->getStore()->getWebsiteId();

$salesEvent = $this->salesEventFactory->create([
'type' => SalesEventInterface::EVENT_SHIPMENT_CREATED,
'objectType' => SalesEventInterface::OBJECT_TYPE_ORDER,
'objectId' => $shipment->getOrderId()
]);

$websiteCode = $this->websiteRepository->getById($websiteId)->getCode();
$salesChannel = $this->salesChannelFactory->create([
'data' => [
'type' => SalesChannelInterface::TYPE_WEBSITE,
'code' => $websiteCode
]
]);

$sourceDeductionRequest = $this->sourceDeductionRequestFactory->create([
'websiteId' => $websiteId,
'sourceCode' => $sourceCode,
'items' => $shipmentItems,
'salesChannel' => $salesChannel,
'salesEvent' => $salesEvent
]);

Expand Down

0 comments on commit 36c638e

Please sign in to comment.