GetSourceItemsDataBySku.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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\InventoryCatalogAdminUi\Model;
  8. use Magento\InventoryApi\Api\Data\SourceItemInterface;
  9. use Magento\InventoryApi\Api\SourceItemRepositoryInterface;
  10. use Magento\InventoryApi\Api\SourceRepositoryInterface;
  11. use Magento\InventoryApi\Api\Data\SourceInterface;
  12. use Magento\Framework\Api\SearchCriteriaBuilder;
  13. class GetSourceItemsDataBySku
  14. {
  15. /**
  16. * @var SourceItemRepositoryInterface
  17. */
  18. private $sourceItemRepository;
  19. /**
  20. * @var SourceRepositoryInterface
  21. */
  22. private $sourceRepository;
  23. /**
  24. * @var SearchCriteriaBuilder
  25. */
  26. private $searchCriteriaBuilder;
  27. /**
  28. * @param SourceItemRepositoryInterface $sourceItemRepository
  29. * @param SourceRepositoryInterface $sourceRepository
  30. * @param SearchCriteriaBuilder $searchCriteriaBuilder
  31. * @SuppressWarnings(PHPMD.LongVariable)
  32. */
  33. public function __construct(
  34. SourceItemRepositoryInterface $sourceItemRepository,
  35. SourceRepositoryInterface $sourceRepository,
  36. SearchCriteriaBuilder $searchCriteriaBuilder
  37. ) {
  38. $this->sourceItemRepository = $sourceItemRepository;
  39. $this->sourceRepository = $sourceRepository;
  40. $this->searchCriteriaBuilder = $searchCriteriaBuilder;
  41. }
  42. /**
  43. * @param string $sku
  44. * @return array
  45. * @throws \Magento\Framework\Exception\NoSuchEntityException
  46. */
  47. public function execute(string $sku): array
  48. {
  49. $sourceItemsData = [];
  50. $searchCriteria = $this->searchCriteriaBuilder
  51. ->addFilter(SourceItemInterface::SKU, $sku)
  52. ->create();
  53. $sourceItems = $this->sourceItemRepository->getList($searchCriteria)->getItems();
  54. $sourcesCache = [];
  55. foreach ($sourceItems as $sourceItem) {
  56. $sourceCode = $sourceItem->getSourceCode();
  57. if (!isset($sourcesCache[$sourceCode])) {
  58. $sourcesCache[$sourceCode] = $this->sourceRepository->get($sourceCode);
  59. }
  60. $source = $sourcesCache[$sourceCode];
  61. $sourceItemsData[] = [
  62. SourceItemInterface::SOURCE_CODE => $sourceItem->getSourceCode(),
  63. SourceItemInterface::QUANTITY => $sourceItem->getQuantity(),
  64. SourceItemInterface::STATUS => $sourceItem->getStatus(),
  65. SourceInterface::NAME => $source->getName(),
  66. 'source_status' => $source->isEnabled(),
  67. ];
  68. }
  69. return $sourceItemsData;
  70. }
  71. }