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