TIF_E41221524/app/Providers/AppServiceProvider.php

94 lines
3.7 KiB
PHP

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\View;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
//
}
public function boot(): void
{
Paginator::useBootstrapFive();
View::composer('*', function ($view) {
if (Auth::check()) {
try {
$userId = Auth::id();
$userRole = Auth::user()->role;
// Standardisasi status untuk query
$statusTunggu = ['menunggu', 'Menunggu', 'MENUNGGU'];
$statusSelesai = ['disetujui', 'ditolak', 'Disetujui', 'Ditolak', 'DISETUJUI', 'DITOLAK'];
// --- 1. LOGIKA ADMIN ---
// Mengambil total validasi dan pengajuan yang masuk (untuk lencana/badge admin)
$totalValidasi = DB::table('validasi')->whereIn('status', $statusTunggu)->count();
$totalSuratMasuk = DB::table('pengajuan_surat')->whereIn('status', $statusTunggu)->count();
// Notifikasi untuk Admin (Surat yang perlu diproses)
$notifikasiAdmin = DB::table('pengajuan_surat')
->select(
'id',
'created_at',
'jenis_surat as tipe',
'jenis_surat as name', // FIX: Tambahkan ini agar $notif->name tidak error
'status',
DB::raw("'pengajuan.index' as rute")
)
->whereIn('status', $statusTunggu)
->latest()
->take(5)
->get();
// --- 2. LOGIKA USER ---
// Notifikasi untuk User (Hasil dari pengajuan: Disetujui/Ditolak)
$notifikasiUser = DB::table('pengajuan_surat')
->select(
'id',
'created_at',
'jenis_surat as tipe',
'jenis_surat as name', // FIX: Tambahkan ini agar $notif->name tidak error
'status',
DB::raw("'user.pengajuan.index' as rute")
)
->where('user_id', $userId)
->whereIn('status', $statusSelesai)
->latest()
->take(5)
->get();
$totalNotifUser = DB::table('pengajuan_surat')
->where('user_id', $userId)
->whereIn('status', $statusSelesai)
->count();
// Kirim data ke semua View
$view->with([
'totalMenungguSurat' => $totalValidasi + $totalSuratMasuk,
'notifikasiTerbaru' => $notifikasiAdmin,
'notifikasiUser' => $notifikasiUser,
'totalNotifUser' => $totalNotifUser
]);
} catch (\Exception $e) {
// Fallback jika database belum migrasi atau error lainnya
$view->with([
'totalMenungguSurat' => 0,
'notifikasiTerbaru' => collect([]),
'notifikasiUser' => collect([]),
'totalNotifUser' => 0
]);
}
}
});
}
}