SaveStockItemConfiguration.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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\InventoryConfiguration\Model;
  8. use Magento\CatalogInventory\Api\Data\StockItemInterface;
  9. use Magento\Framework\App\ResourceConnection;
  10. use Magento\InventoryCatalogApi\Api\DefaultStockProviderInterface;
  11. use Magento\InventoryCatalogApi\Model\GetProductIdsBySkusInterface;
  12. use Magento\InventoryConfigurationApi\Api\Data\StockItemConfigurationInterface;
  13. use Magento\InventoryConfigurationApi\Api\SaveStockItemConfigurationInterface;
  14. /**
  15. * @inheritdoc
  16. */
  17. class SaveStockItemConfiguration implements SaveStockItemConfigurationInterface
  18. {
  19. /**
  20. * @var ResourceConnection
  21. */
  22. private $resourceConnection;
  23. /**
  24. * @var GetProductIdsBySkusInterface
  25. */
  26. private $getProductIdsBySkus;
  27. /**
  28. * @var DefaultStockProviderInterface
  29. */
  30. private $defaultStockProvider;
  31. /**
  32. * @param ResourceConnection $resourceConnection
  33. * @param GetProductIdsBySkusInterface $getProductIdsBySkus
  34. * @param DefaultStockProviderInterface $defaultStockProvider
  35. */
  36. public function __construct(
  37. ResourceConnection $resourceConnection,
  38. GetProductIdsBySkusInterface $getProductIdsBySkus,
  39. DefaultStockProviderInterface $defaultStockProvider
  40. ) {
  41. $this->resourceConnection = $resourceConnection;
  42. $this->getProductIdsBySkus = $getProductIdsBySkus;
  43. $this->defaultStockProvider = $defaultStockProvider;
  44. }
  45. /**
  46. * @inheritdoc
  47. *
  48. * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  49. */
  50. public function execute(string $sku, int $stockId, StockItemConfigurationInterface $stockItemConfiguration): void
  51. {
  52. $productId = $this->getProductIdsBySkus->execute([$sku])[$sku];
  53. // TODO We ignore $stockId and use $legacyStockId until we have proper multi-stock item configuration
  54. $legacyStockId = $this->defaultStockProvider->getId();
  55. $connection = $this->resourceConnection->getConnection();
  56. $connection->update(
  57. $this->resourceConnection->getTableName('cataloginventory_stock_item'),
  58. $this->getBinds($stockItemConfiguration),
  59. [
  60. StockItemInterface::PRODUCT_ID . ' = ?' => $productId,
  61. StockItemInterface::STOCK_ID . ' = ?' => $legacyStockId,
  62. 'website_id = ?' => 0,
  63. ]
  64. );
  65. }
  66. /**
  67. * @param StockItemConfigurationInterface $stockItemConfiguration
  68. *
  69. * @return array
  70. */
  71. private function getBinds(StockItemConfigurationInterface $stockItemConfiguration): array
  72. {
  73. return [
  74. StockItemInterface::IS_QTY_DECIMAL => $stockItemConfiguration->isQtyDecimal(),
  75. StockItemInterface::USE_CONFIG_MIN_QTY => $stockItemConfiguration->isUseConfigMinQty(),
  76. StockItemInterface::MIN_QTY => $stockItemConfiguration->getMinQty(),
  77. StockItemInterface::USE_CONFIG_MIN_SALE_QTY => $stockItemConfiguration->isUseConfigMinSaleQty(),
  78. StockItemInterface::MIN_SALE_QTY => $stockItemConfiguration->getMinSaleQty(),
  79. StockItemInterface::USE_CONFIG_MAX_SALE_QTY => $stockItemConfiguration->isUseConfigMaxSaleQty(),
  80. StockItemInterface::MAX_SALE_QTY => $stockItemConfiguration->getMaxSaleQty(),
  81. StockItemInterface::USE_CONFIG_BACKORDERS => $stockItemConfiguration->isUseConfigBackorders(),
  82. StockItemInterface::BACKORDERS => $stockItemConfiguration->getBackorders(),
  83. StockItemInterface::USE_CONFIG_NOTIFY_STOCK_QTY => $stockItemConfiguration->isUseConfigNotifyStockQty(),
  84. StockItemInterface::NOTIFY_STOCK_QTY => $stockItemConfiguration->getNotifyStockQty(),
  85. StockItemInterface::USE_CONFIG_QTY_INCREMENTS => $stockItemConfiguration->isUseConfigQtyIncrements(),
  86. StockItemInterface::QTY_INCREMENTS => $stockItemConfiguration->getQtyIncrements(),
  87. StockItemInterface::USE_CONFIG_ENABLE_QTY_INC => $stockItemConfiguration->isUseConfigEnableQtyInc(),
  88. StockItemInterface::ENABLE_QTY_INCREMENTS => $stockItemConfiguration->isEnableQtyIncrements(),
  89. StockItemInterface::USE_CONFIG_MANAGE_STOCK => $stockItemConfiguration->isUseConfigManageStock(),
  90. StockItemInterface::MANAGE_STOCK => $stockItemConfiguration->isManageStock(),
  91. StockItemInterface::LOW_STOCK_DATE => $stockItemConfiguration->getLowStockDate(),
  92. StockItemInterface::IS_DECIMAL_DIVIDED => $stockItemConfiguration->isDecimalDivided(),
  93. StockItemInterface::STOCK_STATUS_CHANGED_AUTO => $stockItemConfiguration->getStockStatusChangedAuto(),
  94. StockItemInterface::IS_IN_STOCK => $stockItemConfiguration->getExtensionAttributes()->getIsInStock()
  95. ];
  96. }
  97. }