diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 46117ca27b..379bb2561a 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -89,8 +89,11 @@ class Controller extends BaseController public function __construct() { if (sudahInstal()) { - $this->profil = Profil::first(); - $this->umum = DataUmum::first(); + // Profil/DataUmum semestinya selalu ada setelah instalasi, tapi + // fallback ke model kosong untuk mencegah crash jika data belum/tidak ada + // (mis. instalasi baru sebagian, restore DB parsial). + $this->profil = Profil::first() ?? new Profil(); + $this->umum = DataUmum::first() ?? new DataUmum(); $this->nama_camat = Pengurus::status()->camat()->first(); // Pemeriksaan akun pengurus untuk alur pemeriksaan surat diff --git a/app/Http/Controllers/Ppid/JenisDokumenPpidController.php b/app/Http/Controllers/Ppid/JenisDokumenPpidController.php new file mode 100644 index 0000000000..f48a377504 --- /dev/null +++ b/app/Http/Controllers/Ppid/JenisDokumenPpidController.php @@ -0,0 +1,403 @@ +share('page_title', $this->page_title); + view()->share('icons', $this->icons); + } + + public function index() + { + $page_description = 'Daftar Jenis Dokumen'; + + return view('ppid.jenis_dokumen.index', compact('page_description')); + } + + public function getData(Request $request) + { + $query = PpidJenisDokumen::query(); + + if ($request->filled('jenis_dokumen_id')) { + $query->where('id', $request->jenis_dokumen_id); + } + + if ($request->filled('status')) { + $query->where('status', $request->status); + } + + $searchValue = $request->input('search.value'); + if (!empty($searchValue)) { + $query->where(function ($q) use ($searchValue) { + $q->where('nama', 'like', "%{$searchValue}%") + ->orWhere('slug', 'like', "%{$searchValue}%") + ->orWhere('deskripsi', 'like', "%{$searchValue}%"); + }); + } + + return DataTables::of($query) + ->addIndexColumn() + ->order(function ($query) use ($request) { + + $allowedColumns = [ + 'id', + 'nama', + 'slug', + 'deskripsi', + 'kode', + 'icon', + 'urut', + 'status', + 'created_at', + 'updated_at' + ]; + + if ($request->has('order')) { + + $columns = $request->get('columns'); + $order = $request->get('order')[0]; + + $columnName = $columns[$order['column']]['data'] ?? null; + $dir = $order['dir'] === 'desc' ? 'desc' : 'asc'; + + if ($columnName && in_array($columnName, $allowedColumns)) { + $query->orderBy($columnName, $dir); + return; + } + } + + // default paling aman + $query->orderBy('urut', 'asc'); + }) + ->addColumn('checkbox', function ($row) { + $protectedSlugs = ['secara-berkala', 'serta-merta', 'tersedia-setiap-saat']; + $disabled = in_array($row->slug, $protectedSlugs) ? 'disabled' : ''; + return ''; + }) + ->addColumn('drag_handle', function ($row) { + return ''; + }) + ->addColumn('aksi', function ($row) { + $data = [ + 'id' => $row->id, + 'drag' => true, + ]; + + if (!auth()->guest()) { + $data['edit_url'] = route('ppid.jenis-dokumen.edit', $row->id); + + // Logic Protected Slugs + $protectedSlugs = ['secara-berkala', 'serta-merta', 'tersedia-setiap-saat']; + $data['delete_url'] = !in_array($row->slug, $protectedSlugs) + ? route('ppid.jenis-dokumen.destroy', $row->id) + : null; + + // Status URL Logic + $statusUrl = route('ppid.jenis-dokumen.status', $row->id); + if ($row->status == 0) { + $data['lock_url'] = $statusUrl; + $data['unlock_url'] = null; + } else { + $data['lock_url'] = null; + $data['unlock_url'] = $statusUrl; + } + } + + return view('forms.aksi', $data); + }) + ->editColumn('icon', function ($row) { + $bgColor = !empty($row->kode) ? $row->kode : '#ffffff'; + $iconColor = 'white'; + + return '
| + + | +No | +# | +Aksi | +Nama Jenis Dokumen | +Deskripsi | +Icon | +Status | +
|---|