InlineEdit.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  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\Source;
  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\SourceInterface;
  18. use Magento\InventoryApi\Api\SourceRepositoryInterface;
  19. use Magento\Framework\App\Action\HttpPostActionInterface;
  20. use Magento\InventoryAdminUi\Model\Source\SourceCoordinatesDataProcessor;
  21. /**
  22. * InlineEdit Controller
  23. */
  24. class InlineEdit extends Action implements HttpPostActionInterface
  25. {
  26. /**
  27. * @see _isAllowed()
  28. */
  29. const ADMIN_RESOURCE = 'Magento_InventoryApi::source';
  30. /**
  31. * @var DataObjectHelper
  32. */
  33. private $dataObjectHelper;
  34. /**
  35. * @var SourceRepositoryInterface
  36. */
  37. private $sourceRepository;
  38. /**
  39. * @var SourceCoordinatesDataProcessor
  40. */
  41. private $sourceCoordinatesDataProcessor;
  42. /**
  43. * @param Context $context
  44. * @param DataObjectHelper $dataObjectHelper
  45. * @param SourceRepositoryInterface $sourceRepository
  46. * @param SourceCoordinatesDataProcessor $sourceCoordinatesDataProcessor
  47. */
  48. public function __construct(
  49. Context $context,
  50. DataObjectHelper $dataObjectHelper,
  51. SourceRepositoryInterface $sourceRepository,
  52. SourceCoordinatesDataProcessor $sourceCoordinatesDataProcessor
  53. ) {
  54. parent::__construct($context);
  55. $this->dataObjectHelper = $dataObjectHelper;
  56. $this->sourceRepository = $sourceRepository;
  57. $this->sourceCoordinatesDataProcessor = $sourceCoordinatesDataProcessor;
  58. }
  59. /**
  60. * @inheritdoc
  61. */
  62. public function execute(): ResultInterface
  63. {
  64. $errorMessages = [];
  65. $request = $this->getRequest();
  66. $requestData = $request->getParam('items', []);
  67. if ($request->isXmlHttpRequest() && $request->isPost() && $requestData) {
  68. foreach ($requestData as $itemData) {
  69. try {
  70. $sourceCode = $itemData[SourceInterface::SOURCE_CODE];
  71. $itemData = $this->sourceCoordinatesDataProcessor->execute($itemData);
  72. $source = $this->sourceRepository->get($sourceCode);
  73. $this->dataObjectHelper->populateWithArray($source, $itemData, SourceInterface::class);
  74. $this->sourceRepository->save($source);
  75. } catch (NoSuchEntityException $e) {
  76. $errorMessages[] = __(
  77. '[ID: %value] The Source does not exist.',
  78. ['value' => $sourceCode]
  79. );
  80. } catch (ValidationException $e) {
  81. foreach ($e->getErrors() as $localizedError) {
  82. $errorMessages[] = __('[ID: %value] %message', [
  83. 'value' => $sourceCode,
  84. 'message' => $localizedError->getMessage()
  85. ]);
  86. }
  87. } catch (CouldNotSaveException $e) {
  88. $errorMessages[] = __(
  89. '[ID: %value] %message',
  90. [
  91. 'value' => $sourceCode,
  92. 'message' => $e->getMessage()
  93. ]
  94. );
  95. }
  96. }
  97. } else {
  98. $errorMessages[] = __('Please correct the sent data.');
  99. }
  100. /** @var Json $resultJson */
  101. $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON);
  102. $resultJson->setData([
  103. 'messages' => $errorMessages,
  104. 'error' => count($errorMessages),
  105. ]);
  106. return $resultJson;
  107. }
  108. }