Get.php 3.5 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\InventoryLowQuantityNotification\Model\SourceItemConfiguration;
  8. use Magento\Framework\Api\DataObjectHelper;
  9. use Magento\Framework\Exception\InputException;
  10. use Magento\Framework\Exception\LocalizedException;
  11. use Magento\InventoryLowQuantityNotification\Model\ResourceModel\SourceItemConfiguration\GetData as GetDataModel;
  12. use Magento\InventoryLowQuantityNotificationApi\Api\Data\SourceItemConfigurationInterface;
  13. use Magento\InventoryLowQuantityNotificationApi\Api\Data\SourceItemConfigurationInterfaceFactory;
  14. use Magento\InventoryLowQuantityNotificationApi\Api\GetSourceItemConfigurationInterface;
  15. use Psr\Log\LoggerInterface;
  16. /**
  17. * @inheritdoc
  18. */
  19. class Get implements GetSourceItemConfigurationInterface
  20. {
  21. /**
  22. * @var GetDataModel
  23. */
  24. private $getDataResourceModel;
  25. /**
  26. * @var GetDefaultValues
  27. */
  28. private $getDefaultValues;
  29. /**
  30. * @var SourceItemConfigurationInterfaceFactory
  31. */
  32. private $sourceItemConfigurationFactory;
  33. /**
  34. * @var DataObjectHelper
  35. */
  36. private $dataObjectHelper;
  37. /**
  38. * @var LoggerInterface
  39. */
  40. private $logger;
  41. /**
  42. * @param GetDataModel $getDataResourceModel
  43. * @param GetDefaultValues $getDefaultValues
  44. * @param SourceItemConfigurationInterfaceFactory $sourceItemConfigurationFactory
  45. * @param DataObjectHelper $dataObjectHelper
  46. * @param LoggerInterface $logger
  47. */
  48. public function __construct(
  49. GetDataModel $getDataResourceModel,
  50. GetDefaultValues $getDefaultValues,
  51. SourceItemConfigurationInterfaceFactory $sourceItemConfigurationFactory,
  52. DataObjectHelper $dataObjectHelper,
  53. LoggerInterface $logger
  54. ) {
  55. $this->getDataResourceModel = $getDataResourceModel;
  56. $this->getDefaultValues = $getDefaultValues;
  57. $this->sourceItemConfigurationFactory = $sourceItemConfigurationFactory;
  58. $this->dataObjectHelper = $dataObjectHelper;
  59. $this->logger = $logger;
  60. }
  61. /**
  62. * @inheritdoc
  63. */
  64. public function execute(string $sourceCode, string $sku): SourceItemConfigurationInterface
  65. {
  66. if (empty($sourceCode) || empty($sku)) {
  67. throw new InputException(__('Wrong input data'));
  68. }
  69. try {
  70. return $this->getConfiguration($sourceCode, $sku);
  71. } catch (\Exception $e) {
  72. $this->logger->error($e->getMessage());
  73. throw new LocalizedException(__('Could not load Source Item Configuration.'), $e);
  74. }
  75. }
  76. /**
  77. * @param string $sourceCode
  78. * @param string $sku
  79. * @return SourceItemConfigurationInterface
  80. */
  81. private function getConfiguration(string $sourceCode, string $sku): SourceItemConfigurationInterface
  82. {
  83. $sourceItemConfigurationData = $this->getDataResourceModel->execute($sourceCode, $sku);
  84. if (null === $sourceItemConfigurationData) {
  85. $sourceItemConfigurationData = $this->getDefaultValues->execute($sourceCode, $sku);
  86. }
  87. /** @var SourceItemConfigurationInterface $sourceItem */
  88. $sourceItemConfiguration = $this->sourceItemConfigurationFactory->create();
  89. $this->dataObjectHelper->populateWithArray(
  90. $sourceItemConfiguration,
  91. $sourceItemConfigurationData,
  92. SourceItemConfigurationInterface::class
  93. );
  94. return $sourceItemConfiguration;
  95. }
  96. }