Skip to content

Commit adc6bd5

Browse files
authored
LYNX-651: CustomerOrder is not displaying the order comments
1 parent f489d0b commit adc6bd5

File tree

4 files changed

+266
-72
lines changed

4 files changed

+266
-72
lines changed
Lines changed: 63 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,51 @@
11
<?php
22
/**
3-
* Copyright © Magento, Inc. All rights reserved.
4-
* See COPYING.txt for license details.
3+
* Copyright 2025 Adobe
4+
* All Rights Reserved.
55
*/
66
declare(strict_types=1);
77

88
namespace Magento\OrderCancellation\Model;
99

1010
use Magento\Framework\Escaper;
1111
use Magento\Framework\Exception\LocalizedException;
12-
use Magento\Sales\Api\Data\OrderPaymentInterface;
12+
use Magento\Sales\Api\Data\OrderInterface;
1313
use Magento\Sales\Api\OrderRepositoryInterface;
1414
use Magento\Sales\Exception\CouldNotRefundException;
1515
use Magento\Sales\Exception\DocumentValidationException;
1616
use Magento\Sales\Model\Order;
17+
use Magento\Sales\Model\Order\Email\Sender\OrderCommentSender;
1718
use Magento\Sales\Model\RefundInvoice;
1819
use Magento\Sales\Model\RefundOrder;
19-
use Magento\Sales\Model\Order\Email\Sender\OrderCommentSender;
2020

2121
/**
22-
* Cancels an order including online or offline payment refund and updates status accordingly.
22+
* To cancel an order including online or offline payment refund and updates status accordingly.
2323
*/
2424
class CancelOrder
2525
{
2626
private const EMAIL_NOTIFICATION_SUCCESS = "Order cancellation notification email was sent.";
27-
2827
private const EMAIL_NOTIFICATION_ERROR = "Email notification failed.";
2928

3029
/**
31-
* @var OrderCommentSender
32-
*/
33-
private OrderCommentSender $sender;
34-
35-
/**
36-
* @var RefundInvoice
37-
*/
38-
private RefundInvoice $refundInvoice;
39-
40-
/**
41-
* @var RefundOrder
42-
*/
43-
private RefundOrder $refundOrder;
44-
45-
/**
46-
* @var OrderRepositoryInterface
47-
*/
48-
private OrderRepositoryInterface $orderRepository;
49-
50-
/**
51-
* @var Escaper
52-
*/
53-
private Escaper $escaper;
54-
55-
/**
30+
* CancelOrder constructor
31+
*
5632
* @param RefundInvoice $refundInvoice
5733
* @param RefundOrder $refundOrder
5834
* @param OrderRepositoryInterface $orderRepository
5935
* @param Escaper $escaper
6036
* @param OrderCommentSender $sender
6137
*/
6238
public function __construct(
63-
RefundInvoice $refundInvoice,
64-
RefundOrder $refundOrder,
65-
OrderRepositoryInterface $orderRepository,
66-
Escaper $escaper,
67-
OrderCommentSender $sender
39+
private readonly RefundInvoice $refundInvoice,
40+
private readonly RefundOrder $refundOrder,
41+
private readonly OrderRepositoryInterface $orderRepository,
42+
private readonly Escaper $escaper,
43+
private readonly OrderCommentSender $sender
6844
) {
69-
$this->refundInvoice = $refundInvoice;
70-
$this->refundOrder = $refundOrder;
71-
$this->orderRepository = $orderRepository;
72-
$this->escaper = $escaper;
73-
$this->sender = $sender;
7445
}
7546

7647
/**
77-
* Cancels and refund an order, if applicable.
48+
* To cancel an order and if applicable process a refund
7849
*
7950
* @param Order $order
8051
* @param string $reason
@@ -87,42 +58,64 @@ public function execute(
8758
Order $order,
8859
string $reason
8960
): Order {
90-
/** @var OrderPaymentInterface $payment */
9161
$payment = $order->getPayment();
92-
if ($payment->getAmountPaid() === null) {
93-
$order->cancel();
62+
63+
if ($payment->getAmountPaid() !== null) {
64+
$order = $payment->getMethodInstance()->isOffline()
65+
? $this->handleOfflinePayment($order)
66+
: $this->handleOnlinePayment($order);
9467
} else {
95-
if ($payment->getMethodInstance()->isOffline()) {
96-
$this->refundOrder->execute($order->getEntityId());
97-
// for partially invoiced orders we need to cancel after doing the refund
98-
// so not invoiced items are cancelled and the whole order is set to cancelled
99-
$order = $this->orderRepository->get($order->getId());
100-
$order->cancel();
101-
} else {
102-
/** @var Order\Invoice $invoice */
103-
foreach ($order->getInvoiceCollection() as $invoice) {
104-
$this->refundInvoice->execute($invoice->getEntityId());
105-
}
106-
// in this case order needs to be re-instantiated
107-
$order = $this->orderRepository->get($order->getId());
108-
}
68+
$order->cancel();
10969
}
11070

111-
$result = $this->sender->send(
112-
$order,
113-
true,
114-
__("Order %1 was cancelled", $order->getRealOrderId())
115-
);
116-
$order->addCommentToStatusHistory(
117-
$result ?
118-
__("%1", CancelOrder::EMAIL_NOTIFICATION_SUCCESS) : __("%1", CancelOrder::EMAIL_NOTIFICATION_ERROR)
119-
);
71+
return $this->updateOrderComments($order, $reason);
72+
}
73+
74+
/**
75+
* Update order comments
76+
*
77+
* @param OrderInterface $order
78+
* @param string $reason
79+
* @return OrderInterface
80+
*/
81+
public function updateOrderComments(OrderInterface $order, string $reason): OrderInterface
82+
{
83+
$result = $this->sender->send($order, true, __("Order %1 was cancelled", $order->getRealOrderId()));
12084

12185
$order->addCommentToStatusHistory(
122-
$this->escaper->escapeHtml($reason),
123-
$order->getStatus()
86+
__("%1", $result ? self::EMAIL_NOTIFICATION_SUCCESS : self::EMAIL_NOTIFICATION_ERROR),
87+
$order->getStatus(),
88+
true
12489
);
12590

91+
$order->addCommentToStatusHistory($this->escaper->escapeHtml($reason), $order->getStatus(), true);
92+
12693
return $this->orderRepository->save($order);
12794
}
95+
96+
/**
97+
* Handle order with offline payment
98+
*
99+
* @param OrderInterface $order
100+
* @return OrderInterface
101+
*/
102+
private function handleOfflinePayment(OrderInterface $order): OrderInterface
103+
{
104+
$this->refundOrder->execute($order->getEntityId());
105+
return $this->orderRepository->get($order->getEntityId())->cancel();
106+
}
107+
108+
/**
109+
* Handle order with online payment
110+
*
111+
* @param OrderInterface $order
112+
* @return OrderInterface
113+
*/
114+
private function handleOnlinePayment(OrderInterface $order): OrderInterface
115+
{
116+
foreach ($order->getInvoiceCollection() as $invoice) {
117+
$this->refundInvoice->execute($invoice->getEntityId());
118+
}
119+
return $this->orderRepository->get($order->getEntityId());
120+
}
128121
}

app/code/Magento/OrderCancellationGraphQl/Model/CancelOrderGuest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ public function execute(Order $order, array $input): array
6565
*/
6666
private function sendConfirmationKeyEmail(Order $order, string $reason): void
6767
{
68-
$confirmationKey = $this->confirmationKey->execute($order, $reason);
69-
$this->confirmationKeySender->execute($order, $confirmationKey);
68+
$this->confirmationKeySender->execute($order, $this->confirmationKey->execute($order, $reason));
7069

7170
// add comment in order about confirmation key send
7271
$order->addCommentToStatusHistory(
7372
'Order cancellation confirmation key was sent via email.',
73+
$order->getStatus(),
7474
true
7575
);
7676
$this->orderRepository->save($order);

app/code/Magento/SalesGraphQl/Model/Formatter/Order.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,27 @@ public function format(OrderInterface $orderModel): array
5959
'payment_methods' => $this->orderPayments->getOrderPaymentMethod($orderModel),
6060
'applied_coupons' => $orderModel->getCouponCode() ? ['code' => $orderModel->getCouponCode()] : [],
6161
'model' => $orderModel,
62+
'comments' => $this->getOrderComments($orderModel)
6263
];
6364
}
65+
66+
/**
67+
* Get order comments
68+
*
69+
* @param OrderInterface $order
70+
* @return array
71+
*/
72+
public function getOrderComments(OrderInterface $order):array
73+
{
74+
$comments = [];
75+
foreach ($order->getStatusHistories() as $comment) {
76+
if ($comment->getIsVisibleOnFront()) {
77+
$comments[] = [
78+
'message' => $comment->getComment(),
79+
'timestamp' => $comment->getCreatedAt()
80+
];
81+
}
82+
}
83+
return $comments;
84+
}
6485
}

0 commit comments

Comments
 (0)