SourceDeductionRequestFromShipmentFactory.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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\InventoryShipping\Model;
  8. use Magento\InventorySourceDeductionApi\Model\SourceDeductionRequestInterface;
  9. use Magento\Sales\Model\Order\Shipment;
  10. use Magento\InventorySalesApi\Api\Data\SalesEventInterface;
  11. use Magento\InventorySalesApi\Api\Data\SalesEventInterfaceFactory;
  12. use Magento\InventorySalesApi\Api\Data\SalesChannelInterfaceFactory;
  13. use Magento\InventorySalesApi\Api\Data\SalesChannelInterface;
  14. use Magento\InventorySourceDeductionApi\Model\SourceDeductionRequestInterfaceFactory;
  15. use Magento\Store\Api\WebsiteRepositoryInterface;
  16. class SourceDeductionRequestFromShipmentFactory
  17. {
  18. /**
  19. * @var SourceDeductionRequestInterfaceFactory
  20. */
  21. private $sourceDeductionRequestFactory;
  22. /**
  23. * @var SalesChannelInterfaceFactory
  24. */
  25. private $salesChannelFactory;
  26. /**
  27. * @var SalesEventInterfaceFactory
  28. */
  29. private $salesEventFactory;
  30. /**
  31. * @var WebsiteRepositoryInterface
  32. */
  33. private $websiteRepository;
  34. /**
  35. * @param SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory
  36. * @param SalesChannelInterfaceFactory $salesChannelFactory
  37. * @param SalesEventInterfaceFactory $salesEventFactory
  38. * @param WebsiteRepositoryInterface $websiteRepository
  39. */
  40. public function __construct(
  41. SourceDeductionRequestInterfaceFactory $sourceDeductionRequestFactory,
  42. SalesChannelInterfaceFactory $salesChannelFactory,
  43. SalesEventInterfaceFactory $salesEventFactory,
  44. WebsiteRepositoryInterface $websiteRepository
  45. ) {
  46. $this->sourceDeductionRequestFactory = $sourceDeductionRequestFactory;
  47. $this->salesChannelFactory = $salesChannelFactory;
  48. $this->salesEventFactory = $salesEventFactory;
  49. $this->websiteRepository = $websiteRepository;
  50. }
  51. /**
  52. * @param Shipment $shipment
  53. * @param string $sourceCode
  54. * @param array $items
  55. * @return SourceDeductionRequestInterface
  56. */
  57. public function execute(
  58. Shipment $shipment,
  59. string $sourceCode,
  60. array $items
  61. ): SourceDeductionRequestInterface {
  62. $websiteId = $shipment->getOrder()->getStore()->getWebsiteId();
  63. $salesEvent = $this->salesEventFactory->create([
  64. 'type' => SalesEventInterface::EVENT_SHIPMENT_CREATED,
  65. 'objectType' => SalesEventInterface::OBJECT_TYPE_ORDER,
  66. 'objectId' => $shipment->getOrderId()
  67. ]);
  68. $websiteCode = $this->websiteRepository->getById($websiteId)->getCode();
  69. $salesChannel = $this->salesChannelFactory->create([
  70. 'data' => [
  71. 'type' => SalesChannelInterface::TYPE_WEBSITE,
  72. 'code' => $websiteCode
  73. ]
  74. ]);
  75. return $this->sourceDeductionRequestFactory->create([
  76. 'sourceCode' => $sourceCode,
  77. 'items' => $items,
  78. 'salesChannel' => $salesChannel,
  79. 'salesEvent' => $salesEvent
  80. ]);
  81. }
  82. }