levelReportService = $levelReportService; } /** * Execute the console command. * * @return int */ public function handle() { try { $this->info('Generiere Level-Aufstieg-Report...'); // Filter Parameter $filters = [ 'month' => $this->option('month'), 'year' => $this->option('year'), 'user_id' => $this->option('user-id'), 'only_not_updated' => $this->option('not-updated') ]; $exportCsv = $this->option('csv'); // Lade Level-Aufstiege über Service $levelPromotions = $this->levelReportService->getLevelPromotions($filters); if ($levelPromotions->isEmpty()) { $this->info('Keine Level-Aufstiege gefunden.'); return 0; } if ($exportCsv) { $filepath = $this->levelReportService->exportToCsv($levelPromotions); $this->info(''); $this->info('CSV-Export erstellt: ' . $filepath); $this->info('Anzahl Datensätze: ' . $levelPromotions->count()); } else { $this->displayReport($levelPromotions); } $this->info('Report erfolgreich generiert.'); return 0; } catch (\Exception $e) { $this->error('Fehler beim Generieren des Reports: ' . $e->getMessage()); return 1; } } private function displayReport($promotions) { $statistics = $this->levelReportService->getStatistics($promotions); $this->info(''); $this->info('=== LEVEL-AUFSTIEG REPORT ==='); $this->info(''); if ($promotions->isEmpty()) { $this->info('Keine Level-Aufstiege gefunden.'); return; } $headers = [ 'Datum', 'User ID', 'Name', 'E-Mail', 'Von Level', 'Zu Level', 'Aktueller Level', 'Margin', 'KP Req', 'PP Req', 'Growth Bonus', 'User PP', 'User KP', 'Level Update', 'Aktiv' ]; $rows = []; foreach ($promotions->toArray() as $promotion) { $rows[] = [ $promotion['date'], $promotion['user_id'], $promotion['first_name'] . ' ' . $promotion['last_name'], $promotion['email'], $promotion['from_level_name'] . ' (ID:' . $promotion['from_level_id'] . ')', $promotion['to_level_name'] . ' (ID:' . $promotion['to_level_id'] . ')', $promotion['current_user_level_name'] . ' (ID:' . ($promotion['current_user_level_id'] ?? 'N/A') . ')', $promotion['to_level_margin'] . '%', number_format($promotion['to_level_qual_kp'], 0, ',', '.'), number_format($promotion['to_level_qual_pp'], 0, ',', '.'), $promotion['to_level_growth_bonus'] . '%', number_format($promotion['total_pp'], 0, ',', '.'), number_format($promotion['sales_volume_points_sum'], 0, ',', '.'), $promotion['level_updated'], $promotion['active_account'], ]; } $this->table($headers, $rows); // Zusammenfassung $this->info(''); $this->info('=== ZUSAMMENFASSUNG ==='); $this->info('Anzahl Level-Aufstiege: ' . $statistics['total_count']); $this->info(''); $this->info('Aufstiege nach Ziel-Level:'); foreach ($statistics['level_stats'] as $level => $count) { $this->info(" - {$level}: {$count}"); } $this->info(''); $this->info('Aufstiege nach Zeitraum:'); foreach ($statistics['period_stats'] as $period => $count) { $this->info(" - {$period}: {$count}"); } } }