mivita/dev/app-bak/Http/Controllers/LevelReportsController.php
2025-10-20 17:42:08 +02:00

88 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Services\LevelReportService;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class LevelReportsController extends Controller
{
private $levelReportService;
public function __construct(LevelReportService $levelReportService)
{
$this->levelReportService = $levelReportService;
}
/**
* Zeige Level-Aufstieg Reports
*/
public function index(Request $request)
{
// Filter aus Request extrahieren
$filters = [
'month' => $request->get('month'),
'year' => $request->get('year'),
'user_id' => $request->get('user_id'),
'only_not_updated' => $request->boolean('not_updated')
];
// Lade Level-Aufstiege
$promotions = $this->levelReportService->getLevelPromotions($filters);
$statistics = $this->levelReportService->getStatistics($promotions);
// Verfügbare Jahre für Filter
$availableYears = range(date('Y'), date('Y') - 5);
$availableMonths = [
1 => 'Januar',
2 => 'Februar',
3 => 'März',
4 => 'April',
5 => 'Mai',
6 => 'Juni',
7 => 'Juli',
8 => 'August',
9 => 'September',
10 => 'Oktober',
11 => 'November',
12 => 'Dezember'
];
return view('admin.level-reports.index', compact(
'promotions',
'statistics',
'filters',
'availableYears',
'availableMonths'
));
}
/**
* CSV Export
*/
public function export(Request $request)
{
// Filter aus Request extrahieren
$filters = [
'month' => $request->get('month'),
'year' => $request->get('year'),
'user_id' => $request->get('user_id'),
'only_not_updated' => $request->boolean('not_updated')
];
// Lade Level-Aufstiege
$promotions = $this->levelReportService->getLevelPromotions($filters);
if ($promotions->isEmpty()) {
return redirect()->back()->with('error', 'Keine Daten für Export gefunden.');
}
// Erstelle CSV
$filename = 'level_promotions_' . date('Y-m-d_H-i-s') . '.csv';
$filepath = $this->levelReportService->exportToCsv($promotions, $filename);
// Download CSV
return response()->download($filepath, $filename)->deleteFileAfterSend(true);
}
}