GetSourcesAssignedToStockOrderedByPriority.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Inventory\Model\Source\Command;
  8. use Magento\Framework\Api\SearchCriteriaBuilder;
  9. use Magento\Framework\Api\SortOrderBuilder;
  10. use Magento\Framework\Exception\LocalizedException;
  11. use Magento\InventoryApi\Api\Data\StockSourceLinkInterface;
  12. use Magento\InventoryApi\Api\GetSourcesAssignedToStockOrderedByPriorityInterface;
  13. use Magento\InventoryApi\Api\GetStockSourceLinksInterface;
  14. use Magento\InventoryApi\Api\SourceRepositoryInterface;
  15. use Psr\Log\LoggerInterface;
  16. /**
  17. * @inheritdoc
  18. */
  19. class GetSourcesAssignedToStockOrderedByPriority implements GetSourcesAssignedToStockOrderedByPriorityInterface
  20. {
  21. /**
  22. * @var SearchCriteriaBuilder
  23. */
  24. private $searchCriteriaBuilder;
  25. /**
  26. * @var SourceRepositoryInterface
  27. */
  28. private $sourceRepository;
  29. /**
  30. * @var GetStockSourceLinksInterface
  31. */
  32. private $getStockSourceLinks;
  33. /**
  34. * @var LoggerInterface
  35. */
  36. private $logger;
  37. /**
  38. * @var SortOrderBuilder
  39. */
  40. private $sortOrderBuilder;
  41. /**
  42. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  43. * @param SourceRepositoryInterface $sourceRepository
  44. * @param GetStockSourceLinksInterface $getStockSourceLinks
  45. * @param SortOrderBuilder $sortOrderBuilder
  46. * @param LoggerInterface $logger
  47. */
  48. public function __construct(
  49. SearchCriteriaBuilder $searchCriteriaBuilder,
  50. SourceRepositoryInterface $sourceRepository,
  51. GetStockSourceLinksInterface $getStockSourceLinks,
  52. SortOrderBuilder $sortOrderBuilder,
  53. LoggerInterface $logger
  54. ) {
  55. $this->searchCriteriaBuilder = $searchCriteriaBuilder;
  56. $this->sourceRepository = $sourceRepository;
  57. $this->getStockSourceLinks = $getStockSourceLinks;
  58. $this->logger = $logger;
  59. $this->sortOrderBuilder = $sortOrderBuilder;
  60. }
  61. /**
  62. * @inheritdoc
  63. */
  64. public function execute(int $stockId): array
  65. {
  66. try {
  67. $stockSourceLinks = $this->getStockSourceLinks($stockId);
  68. $sources = [];
  69. foreach ($stockSourceLinks as $link) {
  70. $sources[] = $this->sourceRepository->get($link->getSourceCode());
  71. }
  72. return $sources;
  73. } catch (\Exception $e) {
  74. $this->logger->error($e->getMessage());
  75. throw new LocalizedException(__('Could not load Sources for Stock'), $e);
  76. }
  77. }
  78. /**
  79. * Get all stock-source links by given stockId
  80. *
  81. * @param int $stockId
  82. * @return array
  83. */
  84. private function getStockSourceLinks(int $stockId): array
  85. {
  86. $sortOrder = $this->sortOrderBuilder
  87. ->setField(StockSourceLinkInterface::PRIORITY)
  88. ->setAscendingDirection()
  89. ->create();
  90. $searchCriteria = $this->searchCriteriaBuilder
  91. ->addFilter(StockSourceLinkInterface::STOCK_ID, $stockId)
  92. ->addSortOrder($sortOrder)
  93. ->create();
  94. $searchResult = $this->getStockSourceLinks->execute($searchCriteria);
  95. return $searchResult->getItems();
  96. }
  97. }