InlineEdit.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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\Controller\Adminhtml\Stock;
  8. use Magento\Backend\App\Action;
  9. use Magento\Backend\App\Action\Context;
  10. use Magento\Framework\Api\DataObjectHelper;
  11. use Magento\Framework\Controller\Result\Json;
  12. use Magento\Framework\Controller\ResultFactory;
  13. use Magento\Framework\Controller\ResultInterface;
  14. use Magento\Framework\Exception\CouldNotSaveException;
  15. use Magento\Framework\Exception\NoSuchEntityException;
  16. use Magento\Framework\Validation\ValidationException;
  17. use Magento\InventoryApi\Api\Data\StockInterface;
  18. use Magento\InventoryApi\Api\StockRepositoryInterface;
  19. use Magento\Framework\App\Action\HttpPostActionInterface;
  20. /**
  21. * InlineEdit Controller
  22. */
  23. class InlineEdit extends Action implements HttpPostActionInterface
  24. {
  25. /**
  26. * @see _isAllowed()
  27. */
  28. const ADMIN_RESOURCE = 'Magento_InventoryApi::stock';
  29. /**
  30. * @var DataObjectHelper
  31. */
  32. private $dataObjectHelper;
  33. /**
  34. * @var StockRepositoryInterface
  35. */
  36. private $stockRepository;
  37. /**
  38. * @param Context $context
  39. * @param DataObjectHelper $dataObjectHelper
  40. * @param StockRepositoryInterface $stockRepository
  41. */
  42. public function __construct(
  43. Context $context,
  44. DataObjectHelper $dataObjectHelper,
  45. StockRepositoryInterface $stockRepository
  46. ) {
  47. parent::__construct($context);
  48. $this->dataObjectHelper = $dataObjectHelper;
  49. $this->stockRepository = $stockRepository;
  50. }
  51. /**
  52. * @inheritdoc
  53. */
  54. public function execute(): ResultInterface
  55. {
  56. $errorMessages = [];
  57. $request = $this->getRequest();
  58. $requestData = $request->getParam('items', []);
  59. if ($request->isXmlHttpRequest() && $request->isPost() && $requestData) {
  60. foreach ($requestData as $itemData) {
  61. try {
  62. $stockId = (int)$itemData[StockInterface::STOCK_ID];
  63. $stock = $this->stockRepository->get($stockId);
  64. $this->dataObjectHelper->populateWithArray($stock, $itemData, StockInterface::class);
  65. $this->stockRepository->save($stock);
  66. } catch (NoSuchEntityException $e) {
  67. $errorMessages[] = __(
  68. '[ID: %value] The Stock does not exist.',
  69. ['value' => $stockId]
  70. );
  71. } catch (ValidationException $e) {
  72. foreach ($e->getErrors() as $localizedError) {
  73. $errorMessages[] = __('[ID: %value] %message', [
  74. 'value' => $stockId,
  75. 'message' => $localizedError->getMessage()
  76. ]);
  77. }
  78. } catch (CouldNotSaveException $e) {
  79. $errorMessages[] = __('[ID: %value] %message', [
  80. 'value' => $stockId,
  81. 'message' => $e->getMessage()
  82. ]);
  83. }
  84. }
  85. } else {
  86. $errorMessages[] = __('Please correct the sent data.');
  87. }
  88. /** @var Json $resultJson */
  89. $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON);
  90. $resultJson->setData([
  91. 'messages' => $errorMessages,
  92. 'error' => count($errorMessages),
  93. ]);
  94. return $resultJson;
  95. }
  96. }