6 declare(strict_types=1);
19 use Magento\InventoryApi\Api\Data\SourceInterfaceFactory;
37 private $sourceFactory;
42 private $sourceRepository;
47 private $sourceHydrator;
57 SourceInterfaceFactory $sourceFactory,
61 parent::__construct($context);
64 $this->sourceHydrator = $sourceHydrator;
72 $resultRedirect = $this->resultRedirectFactory->create();
77 $this->messageManager->addErrorMessage(
__(
'Wrong request.'));
78 $this->processRedirectAfterFailureSave($resultRedirect);
79 return $resultRedirect;
84 $source = (
null !== $sourceCodeQueryParam)
85 ? $this->sourceRepository->get($sourceCodeQueryParam)
86 : $this->sourceFactory->create();
90 $this->messageManager->addSuccessMessage(
__(
'The Source has been saved.'));
91 $this->processRedirectAfterSuccessSave($resultRedirect,
$source->getSourceCode());
93 $this->messageManager->addErrorMessage(
__(
'The Source does not exist.'));
94 $this->processRedirectAfterFailureSave($resultRedirect);
96 foreach ($e->
getErrors() as $localizedError) {
97 $this->messageManager->addErrorMessage($localizedError->getMessage());
100 $this->processRedirectAfterFailureSave($resultRedirect, $sourceCodeQueryParam ?? $sourceCodeQueryParam);
102 $this->messageManager->addErrorMessage($e->getMessage());
104 $this->processRedirectAfterFailureSave($resultRedirect, $sourceCodeQueryParam ?? $sourceCodeQueryParam);
105 }
catch (Exception $e) {
106 $this->messageManager->addErrorMessage(
__(
'Could not save Source.'));
108 $this->processRedirectAfterFailureSave($resultRedirect, $sourceCodeQueryParam ?? $sourceCodeQueryParam);
110 return $resultRedirect;
122 $this->_eventManager->dispatch(
123 'controller_action_inventory_populate_source_with_data',
130 $this->sourceRepository->save(
$source);
132 $this->_eventManager->dispatch(
133 'controller_action_inventory_source_save_after',
146 private function processRedirectAfterSuccessSave(Redirect $resultRedirect,
string $sourceCode)
149 $resultRedirect->setPath(
'*/*/edit', [
154 $resultRedirect->setPath(
'*/*/new', [
158 $resultRedirect->setPath(
'*/*/');
167 private function processRedirectAfterFailureSave(Redirect $resultRedirect,
string $sourceCode =
null)
170 $resultRedirect->setPath(
'*/*/new');
172 $resultRedirect->setPath(
'*/*/edit', [
elseif(isset( $params[ 'redirect_parent']))
__construct(Context $context, SourceInterfaceFactory $sourceFactory, SourceRepositoryInterface $sourceRepository, SourceHydrator $sourceHydrator)