Files
esun3d/app/code/Esun/Customer/Observer/MarkCompleteOrderShipped.php
2026-09-15 10:35:56 +08:00

29 lines
940 B
PHP

<?php
declare(strict_types=1);
namespace Esun\Customer\Observer;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
use Magento\Sales\Model\Order;
class MarkCompleteOrderShipped implements ObserverInterface
{
public function execute(Observer $observer): void
{
$order = $observer->getEvent()->getOrder();
if (!$order instanceof Order || $order->getState() !== Order::STATE_COMPLETE
|| in_array((string)$order->getStatus(), ['shipped', 'received'], true)) {
return;
}
$ordered = 0.0;
$shipped = 0.0;
foreach ($order->getAllVisibleItems() as $item) {
$ordered += max(0.0, (float)$item->getQtyOrdered() - (float)$item->getQtyCanceled());
$shipped += (float)$item->getQtyShipped();
}
if ($ordered > 0 && $shipped >= $ordered) {
$order->setStatus('shipped');
}
}
}