Files
2026-09-15 10:35:56 +08:00

44 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Esun\Oceanpayment\Model;
use Magento\Sales\Model\Order;
use Magento\Sales\Model\Order\Config as OrderConfig;
class OrderStatusManager
{
private const STATES = [
Order::STATE_NEW,
Order::STATE_PENDING_PAYMENT,
Order::STATE_PROCESSING,
Order::STATE_COMPLETE,
Order::STATE_CLOSED,
Order::STATE_CANCELED,
Order::STATE_HOLDED,
Order::STATE_PAYMENT_REVIEW,
];
public function __construct(private readonly OrderConfig $orderConfig)
{
}
public function apply(Order $order, string $status, string $fallbackState): void
{
$state = $this->findState($status) ?: $fallbackState;
$order->setState($state);
$order->setStatus($status ?: ($this->orderConfig->getStateDefaultStatus($state) ?: $state));
}
private function findState(string $status): ?string
{
foreach (self::STATES as $state) {
if (in_array($status, $this->orderConfig->getStateStatuses($state, false), true)) {
return $state;
}
}
return null;
}
}