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

24 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace Esun\Reward\Observer;
use Esun\Reward\Model\BalanceManager;
use Esun\Reward\Model\ReservationManager;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
class SpendOrderPoints implements ObserverInterface
{
public function __construct(private readonly BalanceManager $balances, private readonly ReservationManager $reservations) {}
public function execute(Observer $observer): void
{
$order = $observer->getEvent()->getOrder(); $quote = $observer->getEvent()->getQuote(); $points = (int)$order->getData('reward_points_used') + (int)$order->getData('reward_product_points');
if ($points <= 0 || !(int)$order->getCustomerId()) { return; }
$this->balances->change((int)$order->getCustomerId(), (int)$order->getStore()->getWebsiteId(), -$points, 'checkout_spend', 'order_spend:' . (int)$order->getId(), [
'reference_type' => 'order', 'reference_id' => (int)$order->getId(), 'reason' => (string)__('Points used on order %1', $order->getIncrementId())
]);
$this->reservations->markUsed((int)$quote->getId());
}
}