1

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?

1 Answer 1

0

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 [] []
3
  • i tried your answer but i can't get the $request = $observer->getRequest(); work, i'm using customer_save_after_data_object, not sure it has request in observer object
    – hkguile
    May 27, 2020 at 7:02
  • This is a admin event, see event name in the above events.xml file
    – sandip
    May 27, 2020 at 7:05
  • 1
    should be $request = $observer->getEvent()->getRequest();
    – hkguile
    May 27, 2020 at 8:22

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.