GetQuantityInformationPerSourceBySkus.php 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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\InventoryGroupedProductAdminUi\Model;
  8. use Magento\Framework\Api\SearchCriteriaBuilderFactory;
  9. use Magento\InventoryApi\Api\Data\SourceItemInterface;
  10. use Magento\InventoryApi\Api\SourceItemRepositoryInterface;
  11. use Magento\InventoryApi\Api\SourceRepositoryInterface;
  12. /**
  13. * Load source items data by skus.
  14. */
  15. class GetQuantityInformationPerSourceBySkus
  16. {
  17. /**
  18. * @var SourceItemRepositoryInterface
  19. */
  20. private $sourceItemRepository;
  21. /**
  22. * @var SearchCriteriaBuilderFactory
  23. */
  24. private $searchCriteriaBuilderFactory;
  25. /**
  26. * @var SourceRepositoryInterface
  27. */
  28. private $sourceRepository;
  29. /**
  30. * @param SourceItemRepositoryInterface $sourceItemRepository
  31. * @param SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory
  32. * @param SourceRepositoryInterface $sourceRepository
  33. */
  34. public function __construct(
  35. SourceItemRepositoryInterface $sourceItemRepository,
  36. SearchCriteriaBuilderFactory $searchCriteriaBuilderFactory,
  37. SourceRepositoryInterface $sourceRepository
  38. ) {
  39. $this->sourceItemRepository = $sourceItemRepository;
  40. $this->searchCriteriaBuilderFactory = $searchCriteriaBuilderFactory;
  41. $this->sourceRepository = $sourceRepository;
  42. }
  43. /**
  44. * @param array $skus
  45. * @return array
  46. */
  47. public function execute(array $skus): array
  48. {
  49. $sourceItemsInformation = [];
  50. $searchCriteriaBuilder = $this->searchCriteriaBuilderFactory->create();
  51. $searchCriteria = $searchCriteriaBuilder->addFilter(SourceItemInterface::SKU, $skus, 'in')->create();
  52. $sourceItems = $this->sourceItemRepository->getList($searchCriteria)->getItems();
  53. foreach ($sourceItems as $sourceItem) {
  54. $source = $this->sourceRepository->get($sourceItem->getSourceCode());
  55. $sourceItemsInformation[$sourceItem['sku']][] = [
  56. SourceItemInterface::SOURCE_CODE => $sourceItem->getSourceCode(),
  57. SourceItemInterface::QUANTITY => $sourceItem->getQuantity(),
  58. 'source_name' => $source->getName(),
  59. SourceItemInterface::STATUS => $sourceItem->getStatus(),
  60. ];
  61. }
  62. return $sourceItemsInformation;
  63. }
  64. }