feat: add dashboard transfer and assistance summaries
This commit is contained in:
@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\ActivityLog;
|
||||
use App\Models\RiwayatBantuan;
|
||||
use App\Models\RumahIbadah;
|
||||
use App\Models\RumahMiskin;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
@@ -36,6 +37,18 @@ class BantuanController extends Controller
|
||||
'tanggal_bantuan' => 'required|date',
|
||||
'ibadah_id' => 'nullable|integer|exists:rumah_ibadah,id',
|
||||
]);
|
||||
|
||||
$user = auth()->user();
|
||||
if ($user->hasRole('pengurus_ibadah') && !empty($validated['ibadah_id'])) {
|
||||
$ownsIbadah = RumahIbadah::where('id', $validated['ibadah_id'])
|
||||
->where('user_id', $user->id)
|
||||
->exists();
|
||||
|
||||
if (!$ownsIbadah) {
|
||||
return response()->json(['message' => 'Tidak berhak mencatat bantuan dari rumah ibadah ini'], 403);
|
||||
}
|
||||
}
|
||||
|
||||
$bantuan = RiwayatBantuan::create([
|
||||
'id_rumah' => $idRumah,
|
||||
'dicatat_oleh' => auth()->id(),
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\AnggotaKeluarga;
|
||||
use App\Models\PermohonanTransfer;
|
||||
use App\Models\RiwayatBantuan;
|
||||
|
||||
class DosenSummaryController extends Controller
|
||||
{
|
||||
public function __invoke()
|
||||
{
|
||||
$anggota = AnggotaKeluarga::all();
|
||||
$bantuan = RiwayatBantuan::query();
|
||||
|
||||
$umur = [
|
||||
'anak' => 0,
|
||||
'dewasa' => 0,
|
||||
'lansia' => 0,
|
||||
'tidak_diketahui' => 0,
|
||||
];
|
||||
|
||||
foreach ($anggota as $item) {
|
||||
if ($item->umur === null) {
|
||||
$umur['tidak_diketahui']++;
|
||||
} elseif ($item->umur < 18) {
|
||||
$umur['anak']++;
|
||||
} elseif ($item->umur < 60) {
|
||||
$umur['dewasa']++;
|
||||
} else {
|
||||
$umur['lansia']++;
|
||||
}
|
||||
}
|
||||
|
||||
$pendidikan = array_merge(
|
||||
['tidak_sekolah' => 0, 'sd' => 0, 'smp' => 0, 'sma' => 0, 'd3' => 0, 's1_plus' => 0, 'tidak_diketahui' => 0],
|
||||
$anggota->countBy(fn($item) => $item->pendidikan ?: 'tidak_diketahui')->all()
|
||||
);
|
||||
|
||||
$statusHidup = array_merge(
|
||||
['hidup' => 0, 'meninggal' => 0],
|
||||
$anggota->countBy('status_hidup')->all()
|
||||
);
|
||||
|
||||
$transferCounts = array_merge(
|
||||
['pending' => 0, 'disetujui' => 0, 'ditolak' => 0],
|
||||
PermohonanTransfer::all()->countBy('status')->all()
|
||||
);
|
||||
|
||||
return response()->json([
|
||||
'anggota' => [
|
||||
'total' => $anggota->count(),
|
||||
'status_hidup' => $statusHidup,
|
||||
'pendidikan' => $pendidikan,
|
||||
'umur' => $umur,
|
||||
],
|
||||
'bantuan' => [
|
||||
'total' => RiwayatBantuan::count(),
|
||||
'bulan_ini' => (clone $bantuan)
|
||||
->whereDate('tanggal_bantuan', '>=', now()->startOfMonth()->toDateString())
|
||||
->whereDate('tanggal_bantuan', '<=', now()->endOfMonth()->toDateString())
|
||||
->count(),
|
||||
'per_jenis' => RiwayatBantuan::all()->countBy('jenis_bantuan')->all(),
|
||||
],
|
||||
'transfer' => $transferCounts,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user