Refund.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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\Creditmemo\Relation;
  7. use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
  8. /**
  9. * Class Relation
  10. * @deprecated 100.1.3
  11. */
  12. class Refund implements RelationInterface
  13. {
  14. /**
  15. * @var \Magento\Sales\Api\OrderRepositoryInterface
  16. */
  17. protected $orderRepository;
  18. /**
  19. * @var \Magento\Sales\Api\InvoiceRepositoryInterface
  20. */
  21. protected $invoiceRepository;
  22. /**
  23. * @var \Magento\Framework\Pricing\PriceCurrencyInterface
  24. */
  25. protected $priceCurrency;
  26. /**
  27. * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
  28. * @param \Magento\Sales\Api\InvoiceRepositoryInterface $invoiceRepository
  29. * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
  30. */
  31. public function __construct(
  32. \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
  33. \Magento\Sales\Api\InvoiceRepositoryInterface $invoiceRepository,
  34. \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
  35. ) {
  36. $this->orderRepository = $orderRepository;
  37. $this->invoiceRepository = $invoiceRepository;
  38. $this->priceCurrency = $priceCurrency;
  39. }
  40. /**
  41. * Process relations for CreditMemo
  42. *
  43. * @param \Magento\Framework\Model\AbstractModel $object
  44. * @throws \Exception
  45. * @return void
  46. */
  47. public function processRelation(\Magento\Framework\Model\AbstractModel $object)
  48. {
  49. /** @var \Magento\Sales\Model\Order\Creditmemo $object */
  50. if ($object->getState() == \Magento\Sales\Model\Order\Creditmemo::STATE_REFUNDED) {
  51. $this->prepareOrder($object);
  52. if ($object->getInvoice()) {
  53. $this->prepareInvoice($object);
  54. $this->invoiceRepository->save($object->getInvoice());
  55. }
  56. $this->preparePayment($object);
  57. $this->orderRepository->save($object->getOrder());
  58. }
  59. }
  60. /**
  61. * Prepare order data for refund
  62. *
  63. * @param \Magento\Sales\Model\Order\Creditmemo $creditmemo
  64. * @return void
  65. */
  66. protected function prepareOrder(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
  67. {
  68. $order = $creditmemo->getOrder();
  69. $baseOrderRefund = $this->priceCurrency->round(
  70. $order->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal()
  71. );
  72. $orderRefund = $this->priceCurrency->round(
  73. $order->getTotalRefunded() + $creditmemo->getGrandTotal()
  74. );
  75. $order->setBaseTotalRefunded($baseOrderRefund);
  76. $order->setTotalRefunded($orderRefund);
  77. $order->setBaseSubtotalRefunded($order->getBaseSubtotalRefunded() + $creditmemo->getBaseSubtotal());
  78. $order->setSubtotalRefunded($order->getSubtotalRefunded() + $creditmemo->getSubtotal());
  79. $order->setBaseTaxRefunded($order->getBaseTaxRefunded() + $creditmemo->getBaseTaxAmount());
  80. $order->setTaxRefunded($order->getTaxRefunded() + $creditmemo->getTaxAmount());
  81. $order->setBaseDiscountTaxCompensationRefunded(
  82. $order->getBaseDiscountTaxCompensationRefunded() + $creditmemo->getBaseDiscountTaxCompensationAmount()
  83. );
  84. $order->setDiscountTaxCompensationRefunded(
  85. $order->getDiscountTaxCompensationRefunded() + $creditmemo->getDiscountTaxCompensationAmount()
  86. );
  87. $order->setBaseShippingRefunded($order->getBaseShippingRefunded() + $creditmemo->getBaseShippingAmount());
  88. $order->setShippingRefunded($order->getShippingRefunded() + $creditmemo->getShippingAmount());
  89. $order->setBaseShippingTaxRefunded(
  90. $order->getBaseShippingTaxRefunded() + $creditmemo->getBaseShippingTaxAmount()
  91. );
  92. $order->setShippingTaxRefunded($order->getShippingTaxRefunded() + $creditmemo->getShippingTaxAmount());
  93. $order->setAdjustmentPositive($order->getAdjustmentPositive() + $creditmemo->getAdjustmentPositive());
  94. $order->setBaseAdjustmentPositive(
  95. $order->getBaseAdjustmentPositive() + $creditmemo->getBaseAdjustmentPositive()
  96. );
  97. $order->setAdjustmentNegative($order->getAdjustmentNegative() + $creditmemo->getAdjustmentNegative());
  98. $order->setBaseAdjustmentNegative(
  99. $order->getBaseAdjustmentNegative() + $creditmemo->getBaseAdjustmentNegative()
  100. );
  101. $order->setDiscountRefunded($order->getDiscountRefunded() + $creditmemo->getDiscountAmount());
  102. $order->setBaseDiscountRefunded($order->getBaseDiscountRefunded() + $creditmemo->getBaseDiscountAmount());
  103. if ($creditmemo->getDoTransaction()) {
  104. $order->setTotalOnlineRefunded($order->getTotalOnlineRefunded() + $creditmemo->getGrandTotal());
  105. $order->setBaseTotalOnlineRefunded($order->getBaseTotalOnlineRefunded() + $creditmemo->getBaseGrandTotal());
  106. } else {
  107. $order->setTotalOfflineRefunded($order->getTotalOfflineRefunded() + $creditmemo->getGrandTotal());
  108. $order->setBaseTotalOfflineRefunded(
  109. $order->getBaseTotalOfflineRefunded() + $creditmemo->getBaseGrandTotal()
  110. );
  111. }
  112. $order->setBaseTotalInvoicedCost(
  113. $order->getBaseTotalInvoicedCost() - $creditmemo->getBaseCost()
  114. );
  115. }
  116. /**
  117. * Prepare invoice data for refund
  118. *
  119. * @param \Magento\Sales\Model\Order\Creditmemo $creditmemo
  120. * @return void
  121. */
  122. protected function prepareInvoice(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
  123. {
  124. if ($creditmemo->getInvoice()) {
  125. $creditmemo->getInvoice()->setIsUsedForRefund(true);
  126. $creditmemo->getInvoice()->setBaseTotalRefunded(
  127. $creditmemo->getInvoice()->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal()
  128. );
  129. $creditmemo->setInvoiceId($creditmemo->getInvoice()->getId());
  130. }
  131. }
  132. /**
  133. * Prepare payment data for refund
  134. *
  135. * @param \Magento\Sales\Model\Order\Creditmemo $creditmemo
  136. * @return void
  137. */
  138. protected function preparePayment(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
  139. {
  140. if (!$creditmemo->getPaymentRefundDisallowed()) {
  141. $creditmemo->getOrder()->getPayment()->refund($creditmemo);
  142. }
  143. }
  144. }