MIF_E31232406/app/Http/Controllers/Admin/LaporanController.php

146 lines
4.2 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\CalonPenerima;
use App\Models\PenerimaFinal;
use App\Models\LaporanPublik;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Barryvdh\DomPDF\Facade\Pdf;
use App\Exports\PenerimaFinalExport;
use Maatwebsite\Excel\Facades\Excel;
class LaporanController extends Controller
{
public function index(Request $request)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
$laporans = PenerimaFinal::query()
->where('status_verifikasi', 'disetujui')
->orderByDesc('tanggal_penetapan')
->get();
$laporanPubliks = LaporanPublik::latest()->get();
return view('admin.laporan', compact('laporans', 'laporanPubliks'));
}
public function exportPdf(Request $request)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
$laporans = PenerimaFinal::query()
->where('status_verifikasi', 'disetujui')
->orderByDesc('tanggal_penetapan')
->get();
$pdf = Pdf::loadView('admin.laporan-pdf', compact('laporans'))
->setPaper('a4', 'landscape');
return $pdf->download('laporan-penerima-blt-dd-kelurahan-ngerong.pdf');
}
public function exportExcel(Request $request)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
return Excel::download(new PenerimaFinalExport, 'laporan-penerima-blt-dd-kelurahan-ngerong.xlsx');
}
public function kirimKeRt(Request $request)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
$candidateIds = CalonPenerima::query()
->whereIn('tracking_status', ['sedang_validasi'])
->whereIn('status_verifikasi', ['disetujui', 'ditolak'])
->pluck('id')
->all();
if (!empty($candidateIds)) {
CalonPenerima::whereIn('id', $candidateIds)->update([
'tracking_status' => 'selesai',
]);
}
return back()->with('success', 'Hasil final berhasil dikirim ke RT dusun. RT sekarang hanya dapat melihat status diterima atau ditolak.');
}
public function uploadPublikPdf(Request $request)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
$data = $request->validate([
'judul' => 'required|string|max:255',
'file_pdf' => 'required|mimes:pdf|max:5120',
]);
$path = $request->file('file_pdf')->store('laporan-publik', 'public');
LaporanPublik::create([
'judul' => $data['judul'],
'file_path' => $path,
'uploaded_by' => $user->id,
'is_active' => true,
]);
return back()->with('success', 'PDF laporan publik berhasil diupload.');
}
public function hapusPublikPdf(Request $request, $id)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
$laporan = LaporanPublik::findOrFail($id);
if ($laporan->file_path && Storage::disk('public')->exists($laporan->file_path)) {
Storage::disk('public')->delete($laporan->file_path);
}
$laporan->delete();
return back()->with('success', 'PDF laporan publik berhasil dihapus.');
}
public function bersihkanRiwayatSelesai(Request $request)
{
$user = $request->user();
if (!$user || $user->role !== 'admin') {
abort(403, 'Akses ditolak: hanya Admin.');
}
$deleted = \App\Models\CalonPenerima::query()
->where('tracking_status', 'selesai')
->delete();
return back()->with('success', "Berhasil membersihkan {$deleted} data riwayat selesai. Arsip laporan tetap tersimpan.");
}
}