Files
mesreleves-php/app/Http/Controllers/Admin/DashboardController.php
T
yann64 6271963a94 Fix dashboard admin : requête activité mensuelle compatible MySQL/PostgreSQL
to_char/date_trunc remplacés par DATE_FORMAT pour MySQL.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 07:47:30 +02:00

77 lines
2.8 KiB
PHP

<?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 App\Services\UpdateService;
use Illuminate\View\View;
class DashboardController extends Controller
{
public function index(UpdateService $updates): View
{
$installedVersion = $updates->getInstalledVersion();
$latestRelease = $updates->fetchLatestRelease(); // depuis le cache Redis
$updateAvailable = $latestRelease
&& version_compare($latestRelease['version'], $installedVersion, '>');
// 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 (compatible MySQL et PostgreSQL)
$driver = config('database.default');
if ($driver === 'pgsql') {
$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();
} else {
$activiteMensuelle = Releve::selectRaw("DATE_FORMAT(created_at, '%b %Y') as mois, count(*) as total")
->where('created_at', '>=', now()->subMonths(5)->startOfMonth())
->groupByRaw("DATE_FORMAT(created_at, '%Y-%m')")
->orderByRaw("DATE_FORMAT(created_at, '%Y-%m')")
->get();
}
return view('admin.dashboard', compact(
'sourcesByStatus', 'totalSources', 'totalReleves',
'usersByRole', 'totalUsers',
'sourcesAValider', 'relevesRecents', 'activiteMensuelle',
'installedVersion', 'latestRelease', 'updateAvailable'
));
}
}