92 lines
4.6 KiB
PHP
92 lines
4.6 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
use App\Http\Controllers\Admin\WargaController;
|
|
use App\Http\Controllers\Admin\PeriodeSeleksiController;
|
|
use App\Http\Controllers\Admin\KriteriaController;
|
|
use App\Http\Controllers\Admin\PenilaianWargaController;
|
|
use App\Http\Controllers\Admin\SawController;
|
|
use App\Http\Controllers\User\PublikController;
|
|
|
|
// ========== AUTH (harus paling atas) ==========
|
|
require __DIR__ . '/auth.php';
|
|
|
|
// ========== PUBLIK ==========
|
|
Route::get('/', [PublikController::class, 'index'])->name('publik.index');
|
|
Route::get('/publik/penerima', [PublikController::class, 'penerima'])->name('publik.penerima');
|
|
Route::get('/publik/peta', [PublikController::class, 'peta'])->name('publik.peta');
|
|
Route::get('/publik/peta/data', [PublikController::class, 'petaData'])->name('publik.peta.data');
|
|
|
|
// ========== ADMIN & PORTAL LAYOUT ==========
|
|
Route::middleware(['auth', 'role:superadmin|admin|user'])->prefix('admin')->name('admin.')->group(function () {
|
|
|
|
Route::get('/dashboard', function () {
|
|
$totalWarga = \App\Models\Warga::count();
|
|
$totalPenerima = \App\Models\HasilSaw::where('status', 'penerima')->count();
|
|
$totalPenilaian = \App\Models\PenilaianWarga::count();
|
|
$periodeAktif = \App\Models\PeriodeSeleksi::where('status', 'aktif')->latest()->first();
|
|
$periodeList = \App\Models\PeriodeSeleksi::latest()->take(5)->get();
|
|
|
|
// Early Warning: cek apakah periode aktif hampir selesai (≤ 3 hari)
|
|
$periodeHampirSelesai = false;
|
|
$sisaHari = null;
|
|
if ($periodeAktif) {
|
|
$selesai = \Carbon\Carbon::parse($periodeAktif->tanggal_selesai)->endOfDay();
|
|
$sekarang = \Carbon\Carbon::now();
|
|
if (!$selesai->isPast()) {
|
|
$sisaHari = (int) $sekarang->diffInDays($selesai, false);
|
|
if ($sisaHari <= 3) {
|
|
$periodeHampirSelesai = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return view('admin.dashboard', compact(
|
|
'totalWarga',
|
|
'totalPenerima',
|
|
'totalPenilaian',
|
|
'periodeAktif',
|
|
'periodeList',
|
|
'periodeHampirSelesai',
|
|
'sisaHari'
|
|
));
|
|
})->name('dashboard');
|
|
|
|
// Akses hasil SAW dan GIS (Bisa diakses Superadmin, Admin, dan User)
|
|
Route::get('/saw/{periode}/hasil', [SawController::class, 'hasil'])->name('saw.hasil');
|
|
Route::get('/saw/{periode}/export-pdf', [SawController::class, 'exportPdf'])->name('saw.exportPdf');
|
|
Route::get('/gis', [\App\Http\Controllers\Admin\GisController::class, 'index'])->name('gis.index');
|
|
Route::get('/gis/data', [\App\Http\Controllers\Admin\GisController::class, 'data'])->name('gis.data');
|
|
|
|
// ========== HANYA SUPERADMIN & ADMIN (OPERASIONAL) ==========
|
|
Route::middleware(['role:superadmin|admin'])->group(function () {
|
|
Route::get('/warga/export/excel', [WargaController::class, 'export'])->name('warga.export');
|
|
Route::resource('warga', WargaController::class);
|
|
|
|
Route::resource('periode', PeriodeSeleksiController::class);
|
|
|
|
// Kriteria Index (bisa dibaca Admin & Superadmin)
|
|
Route::get('/kriteria', [KriteriaController::class, 'index'])->name('kriteria.index');
|
|
|
|
Route::get('/penilaian/export/excel/{periode_id}', [PenilaianWargaController::class, 'export'])->name('penilaian.export');
|
|
Route::post('/penilaian/import/excel', [PenilaianWargaController::class, 'import'])->name('penilaian.import');
|
|
Route::resource('penilaian', PenilaianWargaController::class);
|
|
|
|
Route::get('/saw/{periode}', [SawController::class, 'index'])->name('saw.index');
|
|
Route::post('/saw/{periode}/hitung', [SawController::class, 'hitung'])->name('saw.hitung');
|
|
Route::post('/saw/{periode}/tetapkan', [SawController::class, 'tetapkan'])->name('saw.tetapkan');
|
|
});
|
|
|
|
// ========== HANYA SUPERADMIN (MANAJEMEN PENGGUNA & KRITERIA WRITE) ==========
|
|
Route::middleware(['role:superadmin'])->group(function () {
|
|
Route::resource('users', \App\Http\Controllers\Admin\UserController::class);
|
|
|
|
// CRUD Kriteria (Hanya Superadmin)
|
|
Route::get('/kriteria/create', [KriteriaController::class, 'create'])->name('kriteria.create');
|
|
Route::post('/kriteria', [KriteriaController::class, 'store'])->name('kriteria.store');
|
|
Route::get('/kriteria/{kriterium}/edit', [KriteriaController::class, 'edit'])->name('kriteria.edit');
|
|
Route::put('/kriteria/{kriterium}', [KriteriaController::class, 'update'])->name('kriteria.update');
|
|
Route::delete('/kriteria/{kriterium}', [KriteriaController::class, 'destroy'])->name('kriteria.destroy');
|
|
});
|
|
});
|