Magento 2 Documentation  2.3
Documentation for Magento 2 CMS v2.3 (December 2018)
Refund.php
Go to the documentation of this file.
1 <?php
8 
10 
15 class Refund implements RelationInterface
16 {
20  protected $orderRepository;
21 
25  protected $invoiceRepository;
26 
30  protected $priceCurrency;
31 
37  public function __construct(
41  ) {
42  $this->orderRepository = $orderRepository;
43  $this->invoiceRepository = $invoiceRepository;
44  $this->priceCurrency = $priceCurrency;
45  }
46 
54  public function processRelation(\Magento\Framework\Model\AbstractModel $object)
55  {
57  if ($object->getState() == \Magento\Sales\Model\Order\Creditmemo::STATE_REFUNDED) {
58  $this->prepareOrder($object);
59  if ($object->getInvoice()) {
60  $this->prepareInvoice($object);
61  $this->invoiceRepository->save($object->getInvoice());
62  }
63  $this->preparePayment($object);
64  $this->orderRepository->save($object->getOrder());
65  }
66  }
67 
74  protected function prepareOrder(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
75  {
76  $order = $creditmemo->getOrder();
77  $baseOrderRefund = $this->priceCurrency->round(
78  $order->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal()
79  );
80  $orderRefund = $this->priceCurrency->round(
81  $order->getTotalRefunded() + $creditmemo->getGrandTotal()
82  );
83  $order->setBaseTotalRefunded($baseOrderRefund);
84  $order->setTotalRefunded($orderRefund);
85 
86  $order->setBaseSubtotalRefunded($order->getBaseSubtotalRefunded() + $creditmemo->getBaseSubtotal());
87  $order->setSubtotalRefunded($order->getSubtotalRefunded() + $creditmemo->getSubtotal());
88 
89  $order->setBaseTaxRefunded($order->getBaseTaxRefunded() + $creditmemo->getBaseTaxAmount());
90  $order->setTaxRefunded($order->getTaxRefunded() + $creditmemo->getTaxAmount());
91  $order->setBaseDiscountTaxCompensationRefunded(
92  $order->getBaseDiscountTaxCompensationRefunded() + $creditmemo->getBaseDiscountTaxCompensationAmount()
93  );
94  $order->setDiscountTaxCompensationRefunded(
95  $order->getDiscountTaxCompensationRefunded() + $creditmemo->getDiscountTaxCompensationAmount()
96  );
97 
98  $order->setBaseShippingRefunded($order->getBaseShippingRefunded() + $creditmemo->getBaseShippingAmount());
99  $order->setShippingRefunded($order->getShippingRefunded() + $creditmemo->getShippingAmount());
100 
101  $order->setBaseShippingTaxRefunded(
102  $order->getBaseShippingTaxRefunded() + $creditmemo->getBaseShippingTaxAmount()
103  );
104  $order->setShippingTaxRefunded($order->getShippingTaxRefunded() + $creditmemo->getShippingTaxAmount());
105 
106  $order->setAdjustmentPositive($order->getAdjustmentPositive() + $creditmemo->getAdjustmentPositive());
107  $order->setBaseAdjustmentPositive(
108  $order->getBaseAdjustmentPositive() + $creditmemo->getBaseAdjustmentPositive()
109  );
110 
111  $order->setAdjustmentNegative($order->getAdjustmentNegative() + $creditmemo->getAdjustmentNegative());
112  $order->setBaseAdjustmentNegative(
113  $order->getBaseAdjustmentNegative() + $creditmemo->getBaseAdjustmentNegative()
114  );
115 
116  $order->setDiscountRefunded($order->getDiscountRefunded() + $creditmemo->getDiscountAmount());
117  $order->setBaseDiscountRefunded($order->getBaseDiscountRefunded() + $creditmemo->getBaseDiscountAmount());
118 
119  if ($creditmemo->getDoTransaction()) {
120  $order->setTotalOnlineRefunded($order->getTotalOnlineRefunded() + $creditmemo->getGrandTotal());
121  $order->setBaseTotalOnlineRefunded($order->getBaseTotalOnlineRefunded() + $creditmemo->getBaseGrandTotal());
122  } else {
123  $order->setTotalOfflineRefunded($order->getTotalOfflineRefunded() + $creditmemo->getGrandTotal());
124  $order->setBaseTotalOfflineRefunded(
125  $order->getBaseTotalOfflineRefunded() + $creditmemo->getBaseGrandTotal()
126  );
127  }
128 
129  $order->setBaseTotalInvoicedCost(
130  $order->getBaseTotalInvoicedCost() - $creditmemo->getBaseCost()
131  );
132  }
133 
140  protected function prepareInvoice(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
141  {
142  if ($creditmemo->getInvoice()) {
143  $creditmemo->getInvoice()->setIsUsedForRefund(true);
144  $creditmemo->getInvoice()->setBaseTotalRefunded(
145  $creditmemo->getInvoice()->getBaseTotalRefunded() + $creditmemo->getBaseGrandTotal()
146  );
147  $creditmemo->setInvoiceId($creditmemo->getInvoice()->getId());
148  }
149  }
150 
157  protected function preparePayment(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
158  {
159  if (!$creditmemo->getPaymentRefundDisallowed()) {
160  $creditmemo->getOrder()->getPayment()->refund($creditmemo);
161  }
162  }
163 }
__construct(\Magento\Sales\Api\OrderRepositoryInterface $orderRepository, \Magento\Sales\Api\InvoiceRepositoryInterface $invoiceRepository, \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency)
Definition: Refund.php:37
preparePayment(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
Definition: Refund.php:157
processRelation(\Magento\Framework\Model\AbstractModel $object)
prepareInvoice(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
Definition: Refund.php:140
$order
Definition: order.php:55
prepareOrder(\Magento\Sales\Model\Order\Creditmemo $creditmemo)
Definition: Refund.php:74