Files
module-vendor-sales-report/Cron/GenerateMonthlyReport.php

100 lines
2.9 KiB
PHP
Raw Normal View History

<?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());
}
}
}