Finanzverwaltung und Saison-System

Neues Einnahmen-/Ausgaben-Modul mit Kategorie-Filter, Monats-Charts und
Saison-basierter Filterung. Saison-Verwaltung im Admin-Bereich mit
Möglichkeit zum Wechsel der aktuellen Saison.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Rhino
2026-03-02 23:48:20 +01:00
parent 480e2284ba
commit 4eaf2368af
18 changed files with 1270 additions and 1 deletions

View File

@@ -30,6 +30,8 @@ use App\Http\Controllers\Admin\SettingsController;
use App\Http\Controllers\Admin\ListGeneratorController;
use App\Http\Controllers\Admin\StatisticsController;
use App\Http\Controllers\Admin\SupportController;
use App\Http\Controllers\Admin\FinanceController;
use App\Http\Controllers\Admin\SeasonController;
use Illuminate\Support\Facades\Route;
// -------------------------------------------------------
@@ -77,7 +79,7 @@ Route::get('/club-logo', function () {
}
// 2. Fallback: statisches Logo
$fallback = public_path('images/logo_woelfe.png');
$fallback = public_path('images/vereinos_logo.png');
if (file_exists($fallback)) {
return response()->file($fallback, [
'Cache-Control' => 'public, max-age=86400',
@@ -159,6 +161,14 @@ Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(fun
Route::get('statistics', [StatisticsController::class, 'index'])->name('statistics.index');
Route::get('statistics/player/{player}', [StatisticsController::class, 'playerDetail'])->name('statistics.player-detail');
// Finanzen (fuer alle Admin-Panel-Nutzer mit Feature-Sichtbarkeit)
Route::get('finances', [FinanceController::class, 'index'])->name('finances.index');
Route::get('finances/create', [FinanceController::class, 'create'])->name('finances.create');
Route::post('finances', [FinanceController::class, 'store'])->name('finances.store');
Route::get('finances/{finance}/edit', [FinanceController::class, 'edit'])->name('finances.edit');
Route::put('finances/{finance}', [FinanceController::class, 'update'])->name('finances.update');
Route::delete('finances/{finance}', [FinanceController::class, 'destroy'])->name('finances.destroy');
// Events (Leseansicht fuer alle Admin-Panel-Nutzer)
Route::get('events', [AdminEventController::class, 'index'])->name('events.index');
Route::get('events/{event}/edit', [AdminEventController::class, 'edit'])->name('events.edit');
@@ -231,6 +241,11 @@ Route::middleware(['auth', 'admin'])->prefix('admin')->name('admin.')->group(fun
Route::delete('settings/demo-data', [SettingsController::class, 'destroyDemoData'])->name('settings.destroy-demo-data')->middleware('throttle:5,1');
Route::delete('settings/factory-reset', [SettingsController::class, 'factoryReset'])->name('settings.factory-reset')->middleware('throttle:3,1');
// Saisons
Route::post('seasons', [SeasonController::class, 'store'])->name('seasons.store');
Route::put('seasons/{season}', [SeasonController::class, 'update'])->name('seasons.update');
Route::delete('seasons/{season}', [SeasonController::class, 'destroy'])->name('seasons.destroy');
// Bekannte Orte
Route::get('locations', [LocationController::class, 'index'])->name('locations.index');
Route::post('locations', [LocationController::class, 'store'])->name('locations.store');