MIF_E31231594/app/Http/Controllers/Pembina/DashboardController.php

97 lines
3.8 KiB
PHP

<?php
namespace App\Http\Controllers\Pembina;
use App\Http\Controllers\Controller;
use App\Models\Dokumentasi;
use App\Models\Kegiatan;
use App\Models\Organisasi;
use Illuminate\View\View;
class DashboardController extends Controller
{
public function __invoke(): View
{
$userId = auth()->id();
$organisasiIds = Organisasi::whereHas('pembinaUsers', function ($query) use ($userId) {
$query->where('users.id', $userId);
})->pluck('id');
$stats = [
'total_organisasi' => $organisasiIds->count(),
'total_kegiatan' => Kegiatan::whereIn('organisasi_id', $organisasiIds)->count(),
'kegiatan_pending' => Kegiatan::whereIn('organisasi_id', $organisasiIds)
->where('status', 'pending')
->count(),
'kegiatan_disetujui_pembina' => Kegiatan::whereIn('organisasi_id', $organisasiIds)
->where('status', 'disetujui pembina')
->count(),
'kegiatan_disetujui_admin' => Kegiatan::whereIn('organisasi_id', $organisasiIds)
->where('status', 'disetujui admin')
->count(),
'kegiatan_ditolak' => Kegiatan::whereIn('organisasi_id', $organisasiIds)
->whereIn('status', ['ditolak pembina', 'ditolak admin'])
->count(),
'total_dokumentasi' => Dokumentasi::whereHas('kegiatan', function ($query) use ($organisasiIds) {
$query->whereIn('organisasi_id', $organisasiIds);
})->count(),
];
$kegiatanTerbaru = Kegiatan::with('organisasi:id,nama_organisasi')
->whereIn('organisasi_id', $organisasiIds)
->latest('created_at')
->take(5)
->get(['id', 'organisasi_id', 'nama_kegiatan', 'status', 'tanggal_mulai', 'created_at']);
$kegiatanPending = Kegiatan::with('organisasi:id,nama_organisasi')
->whereIn('organisasi_id', $organisasiIds)
->where('status', 'pending')
->latest('created_at')
->take(5)
->get(['id', 'organisasi_id', 'nama_kegiatan', 'status', 'tanggal_mulai', 'created_at']);
$jadwalMendatang = Kegiatan::with('organisasi:id,nama_organisasi')
->whereIn('organisasi_id', $organisasiIds)
->whereIn('status', ['disetujui pembina', 'disetujui admin'])
->where('tanggal_mulai', '>=', now()->startOfDay())
->orderBy('tanggal_mulai', 'asc')
->take(5)
->get(['id', 'organisasi_id', 'nama_kegiatan', 'status', 'tanggal_mulai', 'tempat']);
$dokumentasiTerbaru = Dokumentasi::whereHas('kegiatan', function ($query) use ($organisasiIds) {
$query->whereIn('organisasi_id', $organisasiIds);
})
->with('kegiatan:id,nama_kegiatan')
->latest('created_at')
->first();
$kegiatanPerBulan = Kegiatan::whereIn('organisasi_id', $organisasiIds)
->where('created_at', '>=', now()->subMonths(11)->startOfMonth())
->selectRaw('DATE_FORMAT(created_at, "%Y-%m") as bulan, COUNT(*) as jumlah')
->groupByRaw('DATE_FORMAT(created_at, "%Y-%m")')
->orderBy('bulan')
->get()
->pluck('jumlah', 'bulan')
->toArray();
$chartLabels = [];
$chartData = [];
for ($i = 11; $i >= 0; $i--) {
$bulan = now()->subMonths($i)->format('Y-m');
$chartLabels[] = now()->subMonths($i)->format('M Y');
$chartData[] = $kegiatanPerBulan[$bulan] ?? 0;
}
return view('pembina.dashboard', compact(
'stats',
'kegiatanTerbaru',
'kegiatanPending',
'jadwalMendatang',
'dokumentasiTerbaru',
'chartLabels',
'chartData',
));
}
}