100 lines
2.9 KiB
PHP
100 lines
2.9 KiB
PHP
|
|
<?php
|
||
|
|
namespace Shopkeeper\VendorSalesReport\Cron;
|
||
|
|
|
||
|
|
use Shopkeeper\VendorSalesReport\Helper\Data as ConfigHelper;
|
||
|
|
use Shopkeeper\VendorSalesReport\Model\ReportGenerator;
|
||
|
|
use Shopkeeper\VendorSalesReport\Model\EmailSender;
|
||
|
|
use Psr\Log\LoggerInterface;
|
||
|
|
|
||
|
|
class GenerateMonthlyReport
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* @var ConfigHelper
|
||
|
|
*/
|
||
|
|
protected $configHelper;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var ReportGenerator
|
||
|
|
*/
|
||
|
|
protected $reportGenerator;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var EmailSender
|
||
|
|
*/
|
||
|
|
protected $emailSender;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @var LoggerInterface
|
||
|
|
*/
|
||
|
|
protected $logger;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param ConfigHelper $configHelper
|
||
|
|
* @param ReportGenerator $reportGenerator
|
||
|
|
* @param EmailSender $emailSender
|
||
|
|
* @param LoggerInterface $logger
|
||
|
|
*/
|
||
|
|
public function __construct(
|
||
|
|
ConfigHelper $configHelper,
|
||
|
|
ReportGenerator $reportGenerator,
|
||
|
|
EmailSender $emailSender,
|
||
|
|
LoggerInterface $logger
|
||
|
|
) {
|
||
|
|
$this->configHelper = $configHelper;
|
||
|
|
$this->reportGenerator = $reportGenerator;
|
||
|
|
$this->emailSender = $emailSender;
|
||
|
|
$this->logger = $logger;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Execute cron job
|
||
|
|
*
|
||
|
|
* @return void
|
||
|
|
*/
|
||
|
|
public function execute()
|
||
|
|
{
|
||
|
|
if (!$this->configHelper->isEnabled()) {
|
||
|
|
$this->logger->info('Vendor Sales Report: Automated report is disabled');
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
// Get last month's date range
|
||
|
|
$startDate = date('Y-m-01', strtotime('first day of last month'));
|
||
|
|
$endDate = date('Y-m-t', strtotime('last day of last month'));
|
||
|
|
|
||
|
|
$month = date('F', strtotime('first day of last month'));
|
||
|
|
$year = date('Y', strtotime('first day of last month'));
|
||
|
|
|
||
|
|
$this->logger->info("Vendor Sales Report: Generating report for {$month} {$year}");
|
||
|
|
|
||
|
|
// Get order statuses
|
||
|
|
$orderStatuses = $this->configHelper->getOrderStatus();
|
||
|
|
|
||
|
|
// Generate report data
|
||
|
|
$data = $this->reportGenerator->generateReportData($startDate, $endDate, $orderStatuses);
|
||
|
|
|
||
|
|
if (empty($data)) {
|
||
|
|
$this->logger->info("Vendor Sales Report: No data found for {$month} {$year}");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Generate CSV
|
||
|
|
$csvContent = $this->reportGenerator->generateCsv($data);
|
||
|
|
$filename = $this->reportGenerator->getFilename();
|
||
|
|
|
||
|
|
// Send email
|
||
|
|
$emailSent = $this->emailSender->sendReport($csvContent, $filename, $month, $year);
|
||
|
|
|
||
|
|
if ($emailSent) {
|
||
|
|
$this->logger->info("Vendor Sales Report: Successfully sent report for {$month} {$year}");
|
||
|
|
} else {
|
||
|
|
$this->logger->warning("Vendor Sales Report: Failed to send email for {$month} {$year}");
|
||
|
|
}
|
||
|
|
|
||
|
|
} catch (\Exception $e) {
|
||
|
|
$this->logger->error('Vendor Sales Report Cron Error: ' . $e->getMessage());
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|