This functionality will be done by and event observer. And Event is “checkout_onepage_controller_success_action”.
In this event you can get the current order data and you will be able to export this data in to csv.
Step 1: For add the event you have to make a events.xml in your module and paste the below code into it.
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
<event name="checkout_onepage_controller_success_action">
<observer name="customorderexport" instance="MagemonkeysCustomexportObserverOrderexport" />
</event>
</config>
Step 2: Now you have to create a Orderexport.php file in Observer folder and place the below code into it.
<?php
namespace MagemonkeysCustomexportObserver;
use MagentoFrameworkEventObserverInterface;
use MagentoFrameworkAppFilesystemDirectoryList;
use MagentoFrameworkFilesystem;
use MagentoFrameworkFilesystemDirectoryWriteInterface;
use MagentoStoreModelScopeInterface;
class Orderexport implements ObserverInterface
{
protected $_request;
protected $_order;
protected $_productRepository;
protected $_scopeConfig;
protected $_customer;
protected $_storemanager;
public function __construct(
MagentoFrameworkAppRequestInterface $request,
MagentoSalesModelOrder $order,
MagentoFrameworkAppResponseHttpFileFactory $fileFactory,
Filesystem $filesystem,
MagentoFrameworkAppConfigScopeConfigInterface $scopeConfig,
MagentoCustomerModelCustomerFactory $customer,
MagentoStoreModelStoreManagerInterface $storemanager,
MagentoCatalogModelProductRepository $productRepository
) {
$this->_scopeConfig = $scopeConfig;
$this->_customer = $customer;
$this->_storemanager = $storemanager;
$this->_request = $request;
$this->_order = $order;
$this->_fileFactory = $fileFactory;
$this->directory = $filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
$this->_productRepository = $productRepository;
}
public function execute(MagentoFrameworkEventObserver $observer) {
$post = $this->_request->getPost();
$orderids = $observer->getEvent()->getOrderIds();
foreach($orderids as $orderid){
$order = $this->_order->load($orderId);
$websiteID = $this->_storemanager->getStore()->getWebsiteId();
$customer = $this->_customer->create()->setWebsiteId($websiteID)->loadByEmail($order->getCustomerEmail());
$customerId = $customer->getId(); // using this
$customerPoNumber = $customer->getCustomerNumber(); // using this
$headers = array('Magento_Account_Number','Back_Office_Account_Number','Transaction_Date','Transaction_Time','Magento_Transaction_Number','Client_Reference_Number','Item_Number','Quantity_Sold','Selling_Price','Discount');
$name = strtotime("now");
$file = 'customorderexport/'.$name.'_detailed_orderexport.csv';
$this->directory->create('customorderexport');
$stream = $this->directory->openFile($file, 'w+');
$stream->lock();
$stream->writeCsv($headers);
$items = $order->getAllItems();
foreach ($items as $item) {
$orderdetail['Magento_Account_Number'] = $orderdata->getData('created_at');
$orderdetail['Order_Number'] = $orderdata->getData('increment_id');
$orderdetail['Transaction_Date'] = date('Y-m-d',strtotime($order->getCreatedAt()));
$orderdetail['Transaction_Time'] = date('h:i A',strtotime($order->getCreatedAt()));
$orderdetail['Magento_Transaction_Number'] = $order->getIncrementId();
$orderdetail['Client_Reference_Number'] = $customerPoNumber;
$id = $item->getProdcutId();
$product = $this->_productRepository->getById($id);
$orderdetail['Item_Number'] = $product->getAutoKoolNumber();
$orderdetail['Quantity_Sold'] = $item->getQtyOrdered();
$orderdetail['Selling_Price'] = $item->getPrice();
$orderdetail['Discount'] = $order->getDiscountAmount();
$stream->writeCsv($orderdetail);
}
$stream->unlock();
$stream->close();
}
}
}
?>
That’s it.
Note- I have use the field and data as per my requirements. You will change this as per your requirements.

