Étape 10 : interface admin (tableau de bord + gestion utilisateurs)
- DashboardController : stats globales (sources par statut, relevés, utilisateurs, activité mensuelle 6 mois) - UserController : liste filtrée (nom/email/rôle) + édition de rôle avec protections (auto-demotion, dernier admin) - Vue admin/dashboard : compteurs par statut cliquables, graphique barres mensuel, sources à valider, relevés récents - Vue admin/utilisateurs : liste paginée avec sections et sources assignées, page d'édition avec radio-cards - Dashboard principal enrichi : bloc accès admin, mes sources assignées triées par urgence, mes derniers relevés - Navigation : ajout Tableau de bord admin et Utilisateurs dans le menu Administration Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Admin;
|
||||
|
||||
use App\Enums\SourceStatus;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Releve;
|
||||
use App\Models\Source;
|
||||
use App\Models\User;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class DashboardController extends Controller
|
||||
{
|
||||
public function index(): View
|
||||
{
|
||||
// Compteurs sources par statut
|
||||
$sourcesByStatus = Source::selectRaw('status, count(*) as total')
|
||||
->groupBy('status')
|
||||
->pluck('total', 'status')
|
||||
->mapWithKeys(fn ($total, $status) => [
|
||||
SourceStatus::from($status)->value => (int) $total,
|
||||
]);
|
||||
|
||||
$totalSources = $sourcesByStatus->sum();
|
||||
$totalReleves = Releve::count();
|
||||
|
||||
// Utilisateurs par rôle
|
||||
$usersByRole = User::selectRaw('role, count(*) as total')
|
||||
->groupBy('role')
|
||||
->pluck('total', 'role');
|
||||
|
||||
$totalUsers = $usersByRole->sum();
|
||||
|
||||
// Sources en attente de validation
|
||||
$sourcesAValider = Source::with(['sourceType', 'depot'])
|
||||
->where('status', SourceStatus::AValider)
|
||||
->orderByDesc('updated_at')
|
||||
->take(10)
|
||||
->get();
|
||||
|
||||
// Relevés récents (10 derniers)
|
||||
$relevesRecents = Releve::with(['source.sourceType', 'createur'])
|
||||
->orderByDesc('created_at')
|
||||
->take(10)
|
||||
->get();
|
||||
|
||||
// Activité mensuelle des 6 derniers mois
|
||||
$activiteMensuelle = Releve::selectRaw("to_char(date_trunc('month', created_at), 'Mon YYYY') as mois, count(*) as total")
|
||||
->where('created_at', '>=', now()->subMonths(5)->startOfMonth())
|
||||
->groupByRaw("date_trunc('month', created_at)")
|
||||
->orderByRaw("date_trunc('month', created_at)")
|
||||
->get();
|
||||
|
||||
return view('admin.dashboard', compact(
|
||||
'sourcesByStatus', 'totalSources', 'totalReleves',
|
||||
'usersByRole', 'totalUsers',
|
||||
'sourcesAValider', 'relevesRecents', 'activiteMensuelle'
|
||||
));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user