Question

I have a observer have the following similar code like this, i want to get the changed balance

    /** @var \Magento\Customer\Model\Data\Customer $customer */
    $customer = $observer->getEvent()->getCustomerDataObject();
    $email = $customer->getEmail();

    /** @var \Magento\Customer\Model\Data\Customer $customerOrig */
    $customerOrig = $observer->getEvent()->getOrigCustomerDataObject();
    $emailOrig = $customerOrig->getEmail();

but how to get the customer balance in getCustomerDataObject?

Was it helpful?

Solution

Try out a below code.

File - Vendor\Custom\etc\events.xml

<event name="adminhtml_customer_save_after">
    <observer name="customer_get_balance" instance="Vendor\Custom\Observer\GetCustomerBalance"/>
</event>

File - Vendor\Custom\Observer\GetCustomerBalance.php

<?php

namespace Vendor\Custom\Observer;

use Magento\Framework\Event\Observer as EventObserver;
use Magento\Framework\Event\ObserverInterface;

/**
 * Class GetCustomerBalance
 * @package Vendor\Custom\Observer
 */
class GetCustomerBalance implements ObserverInterface
{

    /**
     * @var \Psr\Log\LoggerInterface
     */
    private $logger;


    /**
     * SaveCustomer constructor.
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     * @param \Psr\Log\LoggerInterface $logger
     * @param \Magento\CustomerBalance\Model\BalanceFactory $balanceFactory
     * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepositoryInterface
     */
    public function __construct(
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        \Psr\Log\LoggerInterface $logger,
        \Magento\CustomerBalance\Model\BalanceFactory $balanceFactory,
        \Magento\Customer\Api\CustomerRepositoryInterface $customerRepositoryInterface
    )
    {
        $this->_storeManager = $storeManager;
        $this->logger = $logger;
        $this->_balanceFactory = $balanceFactory;
        $this->_customerRepositoryInterface = $customerRepositoryInterface;

    }

    /**
     * @param EventObserver $observer
     * @return $this|void
     * @throws \Magento\Framework\Exception\LocalizedException
     * @throws \Magento\Framework\Exception\NoSuchEntityException
     */
    public function execute(EventObserver $observer)
    {
        $this->logger->info(' -- Changed Balance Field of Update Balance --  ');
        /* @var $request \Magento\Framework\App\RequestInterface */
        $request = $observer->getRequest();
        $data = $request->getPost('customerbalance');
        if ($data && !empty($data['amount_delta'])) {
            $this->logger->info($data['amount_delta']);
        }

        /* @var $customer \Magento\Customer\Api\Data\CustomerInterface */
        $customer = $observer->getCustomer();

        $websiteId = $this->_storeManager->getStore($customer->getStoreId())->getWebsiteId();
        $balanceModel = $this->_balanceFactory->create()->setCustomerId(
            $customer->getId()
        )->setWebsiteId(
            $websiteId
        )->loadByCustomer();

        $amount = $balanceModel->getAmount();
        $this->logger->info(' -- Final Balance --  ');
        $this->logger->info($amount);


        return $this;
    }
}

See the debug.log file you will see something like below:

report.INFO:  -- Changed Balance Field of Update Balance --   [] []
report.INFO: 7 [] []
report.INFO:  -- Final Balance --   [] []
report.INFO: 307 [] []
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top