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