Magento – How to get Lifetime Sales Data in Magento 2

magento-2.1reportssales

Programatically i am trying to get the Lifetime Sales data of individual customers.

But i am not getting correct data. I am getting same data for all customers.

Here is my code.

$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
    $objectManager = $bootstrap->getObjectManager();
    $objectManager->get('Magento\Framework\App\State')->setAreaCode('admin');

    //$objectManager->get('Magecomp\Assigngroups\Helper\Data')->groupChange();

    $customers = $objectManager->get('\Magento\Customer\Model\ResourceModel\Customer\Collection')->load();
    $customerLifetimeSales = '';
    foreach($customers as $customer)
    {
        echo "<pre>";
        print_r($customer->getName().'<br>');
        print_r($customer->getGroupId().'<br>');        
        $sum = 0;
        $_collection = $objectManager->get('\Magento\Sales\Model\ResourceModel\Sale\Collection');
        $_collection->addFieldToFilter('status', array('in' => array(\Magento\Sales\Model\Order::STATE_PROCESSING, \Magento\Sales\Model\Order::STATE_COMPLETE)));
            $_collection->setOrderStateFilter(\Magento\Sales\Model\Order::STATE_CANCELED, true)
                    ->setCustomerIdFilter($customer->getId())
                    ->load();
        $customerLifetimeSales = $_collection->getTotals();
       print_r($customerLifetimeSales);
        print_r('======================');
      echo "</pre>"; 
    }

Let me know if i am doing something wrong here.

Thanks in advance for your answer.

Best Answer

Change following line from

$_collection = $objectManager->get('\Magento\Sales\Model\ResourceModel\Sale\Collection');

To

$_collection = $objectManager->create('\Magento\Sales\Model\ResourceModel\Sale\Collection');

And avoid to call load()

Related Topic