dbf0465b0a
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>
69 lines
2.5 KiB
PHP
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'));
|
|
}
|
|
}
|