Initial commit: Vendor Sales Report Magento 2 module

This commit is contained in:
shopkeeperdev
2025-11-03 17:20:07 -05:00
commit fc2838d68a
25 changed files with 1839 additions and 0 deletions

View File

@@ -0,0 +1,91 @@
<?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');
}
}
}

View File

@@ -0,0 +1,86 @@
<?php
namespace Shopkeeper\VendorSalesReport\Controller\Adminhtml\Report;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\Controller\Result\JsonFactory;
use Shopkeeper\VendorSalesReport\Model\ReportGenerator;
use Shopkeeper\VendorSalesReport\Helper\Data as ConfigHelper;
class Grid extends Action
{
const ADMIN_RESOURCE = 'Shopkeeper_VendorSalesReport::report';
/**
* @var JsonFactory
*/
protected $resultJsonFactory;
/**
* @var ReportGenerator
*/
protected $reportGenerator;
/**
* @var ConfigHelper
*/
protected $configHelper;
/**
* @param Context $context
* @param JsonFactory $resultJsonFactory
* @param ReportGenerator $reportGenerator
* @param ConfigHelper $configHelper
*/
public function __construct(
Context $context,
JsonFactory $resultJsonFactory,
ReportGenerator $reportGenerator,
ConfigHelper $configHelper
) {
parent::__construct($context);
$this->resultJsonFactory = $resultJsonFactory;
$this->reportGenerator = $reportGenerator;
$this->configHelper = $configHelper;
}
/**
* Grid data action
*
* @return \Magento\Framework\Controller\Result\Json
*/
public function execute()
{
$result = $this->resultJsonFactory->create();
try {
$startDate = $this->getRequest()->getParam('start_date');
$endDate = $this->getRequest()->getParam('end_date');
if (!$startDate || !$endDate) {
return $result->setData([
'success' => false,
'message' => 'Please select a date range.'
]);
}
// Get order statuses
$orderStatuses = $this->configHelper->getOrderStatus();
// Generate report data
$data = $this->reportGenerator->generateReportData($startDate, $endDate, $orderStatuses);
return $result->setData([
'success' => true,
'data' => $data,
'total' => count($data)
]);
} catch (\Exception $e) {
return $result->setData([
'success' => false,
'message' => $e->getMessage()
]);
}
}
}

View File

@@ -0,0 +1,43 @@
<?php
namespace Shopkeeper\VendorSalesReport\Controller\Adminhtml\Report;
use Magento\Backend\App\Action;
use Magento\Backend\App\Action\Context;
use Magento\Framework\View\Result\PageFactory;
class Index extends Action
{
const ADMIN_RESOURCE = 'Shopkeeper_VendorSalesReport::report';
/**
* @var PageFactory
*/
protected $resultPageFactory;
/**
* @param Context $context
* @param PageFactory $resultPageFactory
*/
public function __construct(
Context $context,
PageFactory $resultPageFactory
) {
parent::__construct($context);
$this->resultPageFactory = $resultPageFactory;
}
/**
* Index action
*
* @return \Magento\Backend\Model\View\Result\Page
*/
public function execute()
{
/** @var \Magento\Backend\Model\View\Result\Page $resultPage */
$resultPage = $this->resultPageFactory->create();
$resultPage->setActiveMenu('Shopkeeper_VendorSalesReport::report');
$resultPage->getConfig()->getTitle()->prepend(__('Vendor Sales Report'));
return $resultPage;
}
}