SourceItemsConfigurationProcessor.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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\InventoryLowQuantityNotificationAdminUi\Model;
  8. use Magento\Framework\Api\DataObjectHelper;
  9. use Magento\Framework\Exception\InputException;
  10. use Magento\InventoryApi\Api\Data\SourceItemInterface;
  11. use Magento\InventoryLowQuantityNotificationApi\Api\Data\SourceItemConfigurationInterfaceFactory;
  12. use Magento\InventoryLowQuantityNotificationApi\Api\Data\SourceItemConfigurationInterface;
  13. use Magento\InventoryLowQuantityNotificationApi\Api\DeleteSourceItemsConfigurationInterface;
  14. use Magento\InventoryLowQuantityNotificationApi\Api\SourceItemConfigurationsSaveInterface;
  15. /**
  16. * Process source item configuration.
  17. */
  18. class SourceItemsConfigurationProcessor
  19. {
  20. /**
  21. * @var SourceItemConfigurationInterfaceFactory
  22. */
  23. private $sourceItemConfigurationFactory;
  24. /**
  25. * @var SourceItemConfigurationsSaveInterface
  26. */
  27. private $sourceItemConfigurationsSave;
  28. /**
  29. * @var DataObjectHelper
  30. */
  31. private $dataObjectHelper;
  32. /**
  33. * @var DeleteSourceItemsConfigurationInterface
  34. */
  35. private $sourceItemsConfigurationDelete;
  36. /**
  37. * SourceItemsConfigurationProcessor constructor.
  38. *
  39. * @param SourceItemConfigurationInterfaceFactory $sourceItemConfigurationFactory
  40. * @param SourceItemConfigurationsSaveInterface $sourceItemConfigurationsSave
  41. * @param DeleteSourceItemsConfigurationInterface $sourceItemsConfigurationDelete
  42. * @param DataObjectHelper $dataObjectHelper
  43. * @SuppressWarnings(PHPMD.LongVariable)
  44. */
  45. public function __construct(
  46. SourceItemConfigurationInterfaceFactory $sourceItemConfigurationFactory,
  47. SourceItemConfigurationsSaveInterface $sourceItemConfigurationsSave,
  48. DeleteSourceItemsConfigurationInterface $sourceItemsConfigurationDelete,
  49. DataObjectHelper $dataObjectHelper
  50. ) {
  51. $this->sourceItemConfigurationsSave = $sourceItemConfigurationsSave;
  52. $this->sourceItemConfigurationFactory = $sourceItemConfigurationFactory;
  53. $this->dataObjectHelper = $dataObjectHelper;
  54. $this->sourceItemsConfigurationDelete = $sourceItemsConfigurationDelete;
  55. }
  56. /**
  57. * Process configuration
  58. *
  59. * @param string $sku
  60. * @param array $sourceItemsData
  61. * @return void
  62. * @throws InputException
  63. * @SuppressWarnings(PHPMD.LongVariable)
  64. */
  65. public function process($sku, array $sourceItemsData)
  66. {
  67. $sourceItemConfigurations = [];
  68. foreach ($sourceItemsData as $sourceItemData) {
  69. $this->validateSourceItemData($sourceItemData);
  70. $sourceItemConfiguration = $this->sourceItemConfigurationFactory->create();
  71. if ($sourceItemData['notify_stock_qty_use_default'] == 1) {
  72. unset($sourceItemData['notify_stock_qty']);
  73. }
  74. $sourceItemData[SourceItemInterface::SKU] = $sku;
  75. $this->dataObjectHelper->populateWithArray(
  76. $sourceItemConfiguration,
  77. $sourceItemData,
  78. SourceItemConfigurationInterface::class
  79. );
  80. $sourceItemConfigurations[] = $sourceItemConfiguration;
  81. }
  82. if (count($sourceItemConfigurations) > 0) {
  83. $this->deleteSourceItemsConfiguration($sourceItemConfigurations);
  84. $this->sourceItemConfigurationsSave->execute($sourceItemConfigurations);
  85. }
  86. }
  87. /**
  88. * Perform validation on source item data
  89. *
  90. * @param array $sourceItemData
  91. * @return void
  92. * @throws InputException
  93. */
  94. private function validateSourceItemData(array $sourceItemData)
  95. {
  96. if (!isset($sourceItemData[SourceItemInterface::SOURCE_CODE])) {
  97. throw new InputException(__('Wrong Product to Source relation parameters given.'));
  98. }
  99. }
  100. /**
  101. * Delete source items configurations
  102. *
  103. * @param SourceItemInterface[] $sourceItemsConfigurations
  104. * @return void
  105. * @SuppressWarnings(PHPMD.LongVariable)
  106. */
  107. private function deleteSourceItemsConfiguration(array $sourceItemsConfigurations)
  108. {
  109. /** @var SourceItemInterface $sourceItemConfiguration */
  110. $this->sourceItemsConfigurationDelete->execute($sourceItemsConfigurations);
  111. }
  112. }