Files
mesreleves-php/app/Http/Controllers/DashboardController.php
T
yann64 dbf0465b0a Comptes actifs/inactifs + stats de section dans le tableau de bord
Utilisateurs actifs/inactifs :
- Migration : colonne is_active (boolean, default true) sur users
- Middleware EnsureUserIsActive : déconnecte les utilisateurs désactivés sur chaque requête
- LoginRequest : bloque la connexion si is_active=false (message explicite)
- Admin : bouton Activer/Désactiver dans la liste et la page d'édition
  Protections : impossible de désactiver son propre compte ou le dernier admin actif
- Badge « Inactif » + opacité réduite sur la ligne dans la liste admin
- Sélection de membres (sources) : filtre is_active=true

Sources liées aux sections :
- Migration : colonne section_id nullable FK sur sources
- Source::section() BelongsTo + Section::sources() HasMany
- Formulaire sources/_form : sélecteur de section (sections de l'utilisateur ou toutes pour admin)
- SourceController : passe les sections disponibles aux vues create/edit

Tableau de bord enrichi (DashboardController) :
- Membres et responsables : stats par section (sources par statut, total relevés)
  compteurs cliquables → liste filtrée, sources récentes de la section
- Mes sources assignées (tri par urgence) + mes derniers relevés (inchangés)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 17:50:56 +02:00

69 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Enums\SourceStatus;
use App\Models\Releve;
use Illuminate\View\View;
class DashboardController extends Controller
{
public function index(): View
{
$user = auth()->user();
// ── Sources auxquelles je suis assigné ───────────────────────────────
$mesSources = $user->sourcesAssignees()
->with('sourceType')
->withCount('releves')
->orderByRaw("CASE status
WHEN 'en_cours' THEN 0
WHEN 'a_valider' THEN 1
WHEN 'a_faire' THEN 2
WHEN 'termine' THEN 3
ELSE 4 END")
->get();
// ── Mes derniers relevés ─────────────────────────────────────────────
$mesReleves = Releve::with(['source.sourceType'])
->where('created_by', $user->id)
->orderByDesc('created_at')
->take(8)
->get();
// ── Stats de section (membres et responsables) ───────────────────────
$sectionsStats = null;
if (! $user->isAdmin()) {
$sections = $user->sections()
->with(['sources' => fn ($q) => $q
->with('sourceType')
->withCount('releves')
->orderBy('nom'),
])
->get();
if ($sections->isNotEmpty()) {
$sectionsStats = $sections->map(function ($section) {
$sources = $section->sources;
$byStatus = collect(SourceStatus::cases())
->mapWithKeys(fn ($s) => [
$s->value => $sources->filter(fn ($src) => $src->status === $s)->count(),
]);
return [
'section' => $section,
'total_sources' => $sources->count(),
'by_status' => $byStatus,
'total_releves' => $sources->sum('releves_count'),
'sources_recentes' => $sources->sortByDesc('updated_at')->take(5),
];
});
}
}
return view('dashboard', compact('mesSources', 'mesReleves', 'sectionsStats'));
}
}