Files
module-vendor-sales-report/Controller/Adminhtml/Report/Export.php

92 lines
2.7 KiB
PHP
Raw Normal View History

<?php
namespace Shopkeeper\VendorSalesReport\Controller\Adminhtml\Report;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\App\Response\Http\FileFactory;
use Magento\Framework\App\Filesystem\DirectoryList;
use Shopkeeper\VendorSalesReport\Model\ReportGenerator;
use Shopkeeper\VendorSalesReport\Helper\Data as ConfigHelper;
class Export extends Action
{
const ADMIN_RESOURCE = 'Shopkeeper_VendorSalesReport::report';
/**
* @var FileFactory
*/
protected $fileFactory;
/**
* @var ReportGenerator
*/
protected $reportGenerator;
/**
* @var ConfigHelper
*/
protected $configHelper;
/**
* @param Context $context
* @param FileFactory $fileFactory
* @param ReportGenerator $reportGenerator
* @param ConfigHelper $configHelper
*/
public function __construct(
Context $context,
FileFactory $fileFactory,
ReportGenerator $reportGenerator,
ConfigHelper $configHelper
) {
parent::__construct($context);
$this->fileFactory = $fileFactory;
$this->reportGenerator = $reportGenerator;
$this->configHelper = $configHelper;
}
/**
* Export action
*
* @return \Magento\Framework\App\ResponseInterface
*/
public function execute()
{
try {
$startDate = $this->getRequest()->getParam('start_date');
$endDate = $this->getRequest()->getParam('end_date');
if (!$startDate || !$endDate) {
$this->messageManager->addErrorMessage(__('Please select a date range.'));
return $this->_redirect('*/*/index');
}
// Get order statuses
$orderStatuses = $this->configHelper->getOrderStatus();
// Generate report data
$data = $this->reportGenerator->generateReportData($startDate, $endDate, $orderStatuses);
if (empty($data)) {
$this->messageManager->addWarningMessage(__('No data found for the selected date range.'));
return $this->_redirect('*/*/index');
}
// Generate CSV
$csvContent = $this->reportGenerator->generateCsv($data);
$filename = $this->reportGenerator->getFilename();
return $this->fileFactory->create(
$filename,
$csvContent,
DirectoryList::VAR_DIR,
'text/csv'
);
} catch (\Exception $e) {
$this->messageManager->addErrorMessage(__('An error occurred while generating the report: %1', $e->getMessage()));
return $this->_redirect('*/*/index');
}
}
}