Relation.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Sales\Model\ResourceModel\Order;
  7. use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
  8. use Magento\Sales\Api\OrderItemRepositoryInterface;
  9. use Magento\Sales\Model\ResourceModel\Order\Handler\Address as AddressHandler;
  10. use Magento\Sales\Model\ResourceModel\Order\Payment as OrderPaymentResource;
  11. use Magento\Sales\Model\ResourceModel\Order\Status\History as OrderStatusHistoryResource;
  12. /**
  13. * Class Relation
  14. */
  15. class Relation implements RelationInterface
  16. {
  17. /**
  18. * @var AddressHandler
  19. */
  20. protected $addressHandler;
  21. /**
  22. * @var OrderItemRepositoryInterface
  23. */
  24. protected $orderItemRepository;
  25. /**
  26. * @var OrderPaymentResource
  27. */
  28. protected $orderPaymentResource;
  29. /**
  30. * @var OrderStatusHistoryResource
  31. */
  32. protected $orderStatusHistoryResource;
  33. /**
  34. * @param AddressHandler $addressHandler
  35. * @param OrderItemRepositoryInterface $orderItemRepository
  36. * @param OrderPaymentResource $orderPaymentResource
  37. * @param OrderStatusHistoryResource $orderStatusHistoryResource
  38. */
  39. public function __construct(
  40. AddressHandler $addressHandler,
  41. OrderItemRepositoryInterface $orderItemRepository,
  42. OrderPaymentResource $orderPaymentResource,
  43. OrderStatusHistoryResource $orderStatusHistoryResource
  44. ) {
  45. $this->addressHandler = $addressHandler;
  46. $this->orderItemRepository = $orderItemRepository;
  47. $this->orderPaymentResource = $orderPaymentResource;
  48. $this->orderStatusHistoryResource = $orderStatusHistoryResource;
  49. }
  50. /**
  51. * Save relations for Order
  52. *
  53. * @param \Magento\Framework\Model\AbstractModel $object
  54. * @return void
  55. * @throws \Exception
  56. */
  57. public function processRelation(\Magento\Framework\Model\AbstractModel $object)
  58. {
  59. /** @var \Magento\Sales\Model\Order $object */
  60. if (null !== $object->getItems()) {
  61. /** @var \Magento\Sales\Model\Order\Item $item */
  62. foreach ($object->getItems() as $item) {
  63. $item->setOrderId($object->getId());
  64. $item->setOrder($object);
  65. $this->orderItemRepository->save($item);
  66. }
  67. }
  68. if (null !== $object->getPayment()) {
  69. $payment = $object->getPayment();
  70. $payment->setParentId($object->getId());
  71. $payment->setOrder($object);
  72. $this->orderPaymentResource->save($payment);
  73. }
  74. if (null !== $object->getStatusHistories()) {
  75. /** @var \Magento\Sales\Model\Order\Status\History $statusHistory */
  76. foreach ($object->getStatusHistories() as $statusHistory) {
  77. $statusHistory->setParentId($object->getId());
  78. $statusHistory->setOrder($object);
  79. $this->orderStatusHistoryResource->save($statusHistory);
  80. }
  81. }
  82. if (null !== $object->getRelatedObjects()) {
  83. foreach ($object->getRelatedObjects() as $relatedObject) {
  84. $relatedObject->setOrder($object);
  85. $relatedObject->save();
  86. }
  87. }
  88. $this->addressHandler->removeEmptyAddresses($object);
  89. $this->addressHandler->process($object);
  90. }
  91. }