I am looking for a code sample on how to get order history by customer email
This is the code I am working with ATM:
public function __construct(
\Magento\Customer\Model\CustomerRegistry $customerRegistry,
\Magento\Backend\Block\Template\Context $context,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Sales\Model\OrderFactory $orderFactory,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
) {
$this->customerRegistry = $customerRegistry;
$this->_scopeConfig = $scopeConfig;
$this->adminUser = $this->_scopeConfig->getValue('customer_order_api_control/apioptions/api_user', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
$this->adminPassword= $this->_scopeConfig->getValue('customer_order_api_control/apioptions/api_password', \Magento\Store\Model\ScopeInterface::SCOPE_STORE);
$this->storeManager = $storeManager;
$this->orderFactory = $orderFactory;
$this->baseUrl = $this->storeManager->getStore()->getBaseUrl();
$this->restUrl = $this->baseUrl . '/index.php/rest/V1/';
}
public function getOrders($customerId) {
/*$customerModel = $this->customerRegistry->retrieve($customerId);
return $customerModel->getDataModel();*/
/*$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); // Instance of object manager
$resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
$connection = $resource->getConnection();
$tableName = $resource->getTableName('customer_entity');*/
$orderFactory->getSalesOrderCollection(array('email'=>$customerId));
$sql = "SELECT email FROM " . $tableName . " WHERE entity_id = '".$customerId."'";
$email = $connection->fetchOne($sql);
$orders = array();
if (!empty($email)) {
$orders = $this->getOrdersByEmail($email);
}
$orders = json_encode($orders);
return $orders;
}
Hey RonBongo,
You can try this logic:
<?php
protected $_orderFactory;
public function __construct(
.....
\Magento\Sales\Model\OrderFactory $orderFactory
.....
) {
...
$this->_orderFactory = $orderFactory;
....
}
// Customer email as a parementer of method
public function getOrders($customerEmail)
{
//Retrieve all orders with this email address
$orders = $this->_orderFactory->create()
->getCollection()
->addFieldToFilter('customer_email', $customerEmail);
//Retrieve all order ids
$orderIds = $order->getAllIds();
}Kind of the same logic is used in our Advanced Reviews and Reminders module for Magento 1.
Regards,
Plumrocket Team
Thanks!
This was helpful. I ended up doing something similar.
I am going to encode the output as this is an API.
Do you know if there is an easy way to re-use the method magento 2 uses with the admin API?
This is to work the same way but within the customer context.