44 lines
1.1 KiB
PHP
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;
|
|
}
|
|
}
|