StockSaveProcessor.php 3.1 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\InventoryAdminUi\Model\Stock;
  8. use Magento\Framework\Api\DataObjectHelper;
  9. use Magento\Framework\App\RequestInterface;
  10. use Magento\Framework\EntityManager\EventManager;
  11. use Magento\InventoryApi\Api\Data\StockInterface;
  12. use Magento\InventoryApi\Api\Data\StockInterfaceFactory;
  13. use Magento\InventoryApi\Api\StockRepositoryInterface;
  14. /**
  15. * Save stock processor for save stock controller
  16. */
  17. class StockSaveProcessor
  18. {
  19. /**
  20. * @var StockInterfaceFactory
  21. */
  22. private $stockFactory;
  23. /**
  24. * @var StockRepositoryInterface
  25. */
  26. private $stockRepository;
  27. /**
  28. * @var StockSourceLinkProcessor
  29. */
  30. private $stockSourceLinkProcessor;
  31. /**
  32. * @var DataObjectHelper
  33. */
  34. private $dataObjectHelper;
  35. /**
  36. * @var EventManager
  37. */
  38. private $eventManager;
  39. /**
  40. * @param StockInterfaceFactory $stockFactory
  41. * @param StockRepositoryInterface $stockRepository
  42. * @param StockSourceLinkProcessor $stockSourceLinkProcessor
  43. * @param DataObjectHelper $dataObjectHelper
  44. * @param EventManager $eventManager
  45. */
  46. public function __construct(
  47. StockInterfaceFactory $stockFactory,
  48. StockRepositoryInterface $stockRepository,
  49. StockSourceLinkProcessor $stockSourceLinkProcessor,
  50. DataObjectHelper $dataObjectHelper,
  51. EventManager $eventManager
  52. ) {
  53. $this->stockFactory = $stockFactory;
  54. $this->stockRepository = $stockRepository;
  55. $this->stockSourceLinkProcessor = $stockSourceLinkProcessor;
  56. $this->dataObjectHelper = $dataObjectHelper;
  57. $this->eventManager = $eventManager;
  58. }
  59. /**
  60. * Save stock process action
  61. *
  62. * @param int|null $stockId
  63. * @param RequestInterface $request
  64. * @return int
  65. */
  66. public function process($stockId, RequestInterface $request): int
  67. {
  68. if (null === $stockId) {
  69. $stock = $this->stockFactory->create();
  70. } else {
  71. $stock = $this->stockRepository->get($stockId);
  72. }
  73. $requestData = $request->getParams();
  74. $this->dataObjectHelper->populateWithArray($stock, $requestData['general'], StockInterface::class);
  75. $this->eventManager->dispatch(
  76. 'controller_action_inventory_populate_stock_with_data',
  77. [
  78. 'request' => $request,
  79. 'stock' => $stock,
  80. ]
  81. );
  82. $stockId = $this->stockRepository->save($stock);
  83. $this->eventManager->dispatch(
  84. 'save_stock_controller_processor_after_save',
  85. [
  86. 'request' => $request,
  87. 'stock' => $stock,
  88. ]
  89. );
  90. $assignedSources =
  91. isset($requestData['sources']['assigned_sources'])
  92. && is_array($requestData['sources']['assigned_sources'])
  93. ? $requestData['sources']['assigned_sources']
  94. : [];
  95. $this->stockSourceLinkProcessor->process($stockId, $assignedSources);
  96. return $stockId;
  97. }
  98. }