0, 'payment_review' => 0, 'processing' => 1, 'shipped' => 2, 'received' => 3, 'complete' => 3, ]; public function __construct( Context $context, Registry $registry, PaymentHelper $paymentHelper, AddressRenderer $addressRenderer, private readonly Image $imageHelper, array $data = [] ) { parent::__construct($context, $registry, $paymentHelper, $addressRenderer, $data); } public function getSteps(): array { return [ ['status' => 'pending', 'label' => __('Awaiting Payment'), 'icon' => 'icon-order_payment1'], ['status' => 'processing', 'label' => __('Awaiting Shipping'), 'icon' => 'icon-order_shipped1'], ['status' => 'shipped', 'label' => __('Shipped'), 'icon' => 'icon-order_shipped3'], ['status' => 'received', 'label' => __('Received'), 'icon' => 'icon-order_review1'], ]; } public function getCurrentStepIndex(): int { return self::STEP_INDEXES[(string)$this->getOrder()->getStatus()] ?? -1; } public function getCurrentStepDate(): string { $order = $this->getOrder(); if ($this->getCurrentStepIndex() === 0) { return (string)$order->getCreatedAt(); } $currentStatus = (string)$order->getStatus(); foreach ($order->getStatusHistories() as $history) { if ((string)$history->getStatus() === $currentStatus) { return (string)$history->getCreatedAt(); } } return (string)$order->getUpdatedAt(); } public function getPaymentMethodTitle(): string { try { $payment = $this->getOrder()->getPayment(); return $payment ? (string)$payment->getMethodInstance()->getTitle() : ''; } catch (\Throwable) { return ''; } } public function getItemImageUrl(Item $item): string { $product = $item->getProduct(); return $product ? $this->imageHelper->init($product, 'wishlist_thumbnail')->getUrl() : $this->imageHelper->getDefaultPlaceholderUrl('thumbnail'); } public function canRepay(Order $order): bool { $payment = $order->getPayment(); $method = $payment ? (string)$payment->getMethod() : ''; return (string)$order->getStatus() === 'pending' && (float)$order->getTotalPaid() <= 0.0 && in_array($method, [OceanpaymentConfig::METHOD_CODE, OceanpaymentConfig::LEGACY_METHOD_CODE], true); } public function getRepayUrl(Order $order): string { return $this->getUrl('esun_customer/order/repay', ['order_id' => (int)$order->getId()]); } public function canConfirmReceipt(Order $order): bool { return (string)$order->getStatus() === 'shipped'; } public function getReceiveUrl(): string { return $this->getUrl('esun_customer/order/receive'); } }