diff --git a/app/Http/Controllers/DesaKelurahanController.php b/app/Http/Controllers/DesaKelurahanController.php deleted file mode 100644 index 3cae657..0000000 --- a/app/Http/Controllers/DesaKelurahanController.php +++ /dev/null @@ -1,10 +0,0 @@ -has('provinsi_id') && !empty($request->provinsi_id)) { - $kabupatenKotaQuery->where('provinsi_id', $request->provinsi_id); - } - - $kabupatenKota = $kabupatenKotaQuery->get()->map(function($item) { - return [ - 'id' => $item->id, - 'kode_kabupaten_kota' => $item->kode, - 'nama_kabupaten_kota' => $item->nama, - 'nama_provinsi' => $item->provinsi->nama ?? '-', - ]; - }); - - return response()->json(['data' => $kabupatenKota]); - } -} diff --git a/app/Http/Controllers/KecamatanController.php b/app/Http/Controllers/KecamatanController.php deleted file mode 100644 index c941902..0000000 --- a/app/Http/Controllers/KecamatanController.php +++ /dev/null @@ -1,33 +0,0 @@ -has('kabupaten_kota_id') && !empty($request->kabupaten_kota_id)) { - $kecamatanQuery->where('kabupaten_kota_id', $request->kabupaten_kota_id); - } - $kecamatan = $kecamatanQuery->get()->map(function($item) { - return [ - 'id' => $item->id, - 'kode_kecamatan' => $item->kode_kecamatan, - 'nama_kecamatan' => $item->nama_kecamatan, - 'nama_kabupaten_kota' => $item->kabupatenKota->nama_kabupaten_kota ?? '-', - 'nama_provinsi' => $item->kabupatenKota->provinsi->nama_provinsi ?? '-', - ]; - }); - return response()->json(['data' => $kecamatan]); - } -} \ No newline at end of file diff --git a/app/Http/Controllers/ProvinsiController.php b/app/Http/Controllers/ProvinsiController.php deleted file mode 100644 index b5491ba..0000000 --- a/app/Http/Controllers/ProvinsiController.php +++ /dev/null @@ -1,37 +0,0 @@ -get(); - return response()->json(['data' => $provinsi]); - } - - public function store(Request $request) - { - $request->validate([ - 'kode' => 'required|unique:provinsi,kode', - 'nama' => 'required|unique:provinsi,nama', - 'iso' => 'required|unique:provinsi,iso', - ]); - - $provinsi = new Provinsi(); - $provinsi->kode = $request->kode; - $provinsi->nama = $request->nama; - $provinsi->iso = $request->iso; - $provinsi->save(); - - return response()->json(['message' => 'Provinsi berhasil ditambahkan']); - } -} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php deleted file mode 100644 index bd487bc..0000000 --- a/app/Http/Controllers/UserController.php +++ /dev/null @@ -1,37 +0,0 @@ -count(); - return view('users.user.index', compact('users', 'totalUsers')); - } - - public function getUsers() - { - $users = User::select(['id', 'name', 'email', 'email_verified_at', 'created_at'])->get(); - return response()->json(['data' => $users]); - } - - public function show($id) - { - $user = User::findOrFail($id); - return view('users.user.show', compact('user')); - } - - public function destroy($id) - { - $user = User::findOrFail($id); - $user->delete(); - - return redirect()->route('users.user.index')->with('success', 'User deleted successfully.'); - } -} diff --git a/app/Http/Controllers/UserRoleController.php b/app/Http/Controllers/UserRoleController.php deleted file mode 100644 index d285428..0000000 --- a/app/Http/Controllers/UserRoleController.php +++ /dev/null @@ -1,23 +0,0 @@ -query('per_page', 10); + $search = $request->query('search', ''); + + $provinsi = Provinsi::orderBy('kode', 'asc')->get(); + + $adat = Adat::with('desakelurahan') + ->where('nama', 'like', "%$search%") + ->orWhereHas('desakelurahan', function($query) use ($search) { + $query->where('nama', 'like', "%$search%"); + }) + ->orderBy('nama', 'asc') + ->paginate($perPage); + + return view('master.adat.index', compact('title', 'adat', 'provinsi')); + } + + public function adatByDesa($adat_id) + { + $adat = Adat::where('desa_kelurahan_id', $desa_id) + ->orderBy('nama', 'asc') + ->get(); + + return response()->json($adat); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required'], + 'desa_kelurahan_id' => ['required', 'exists:master_desa_kelurahan,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + Adat::create([ + 'nama' => $request->nama, + 'desa_kelurahan_id' => $request->desa_kelurahan_id, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Adat berhasil ditambahkan.' + ]); + } + + public function show($id) + { + $adat = Adat::with(['desakelurahan.kecamatan.kabupatenkota.provinsi'])->find($id); + + if (!$adat) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan' + ], 404); + } + + return response()->json([ + 'status' => 'success', + 'data' => [ + 'id' => $adat->id, + 'nama' => $adat->nama, + 'desa_kelurahan_id' => $adat->desa_kelurahan_id, + 'nama_desa_kelurahan' => $adat->desakelurahan->nama, + 'kecamatan_id' => $adat->desakelurahan->kecamatan_id, + 'nama_kecamatan' => $adat->desakelurahan->kecamatan->nama, + 'kabupaten_kota_id' => $adat->desakelurahan->kecamatan->kabupaten_kota_id, + 'nama_kabupaten_kota' => $adat->desakelurahan->kecamatan->kabupatenkota->nama, + 'provinsi_id' => $adat->desakelurahan->kecamatan->kabupatenkota->provinsi_id, + 'nama_provinsi' => $adat->desakelurahan->kecamatan->kabupatenkota->provinsi->nama + ] + ]); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required'], + 'desa_kelurahan_id' => ['required', 'exists:master_desa_kelurahan,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + $adat = Adat::find($id); + + if (!$adat) { + return response()->json(['status' => 'error', 'message' => 'Data tidak ditemukan'], 404); + } + + $adat->update([ + 'nama' => $request->nama, + 'desa_kelurahann_id' => $request->desa_kelurahan_id, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data berhasil diperbarui!']); + } + + public function destroy($id) + { + $adat = Adat::find($id); + if (!$adat) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan.' + ], 404); + } + + $adat->deleted_by = auth()->user()->id; + $adat->save(); + $adat->delete(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data adat berhasil dihapus.' + ]); + } +} diff --git a/app/Http/Controllers/Web/AkselerasiDashboardController.php b/app/Http/Controllers/Web/AkselerasiDashboardController.php index 8533ae2..dce1396 100644 --- a/app/Http/Controllers/Web/AkselerasiDashboardController.php +++ b/app/Http/Controllers/Web/AkselerasiDashboardController.php @@ -13,6 +13,7 @@ class AkselerasiDashboardController extends Controller if (!Gate::allows('super_admin') && !Gate::allows('admin')) { abort(403); } - return view('dashboard.akselerasi'); + $title = 'Akselerasi Dashboard'; + return view('dashboard.akselerasi', compact('title')); } } diff --git a/app/Http/Controllers/AuthController.php b/app/Http/Controllers/Web/AuthController.php similarity index 91% rename from app/Http/Controllers/AuthController.php rename to app/Http/Controllers/Web/AuthController.php index ce17387..300e843 100644 --- a/app/Http/Controllers/AuthController.php +++ b/app/Http/Controllers/Web/AuthController.php @@ -1,25 +1,27 @@ query('per_page', 10); + $search = $request->query('search', ''); + + $provinsi = Provinsi::orderBy('kode', 'asc')->get(); + + $desakelurahan = DesaKelurahan::with('kecamatan') + ->where('nama', 'like', "%$search%") + ->orWhere('kode', 'like', "%$search%") + ->orWhereHas('kecamatan', function($query) use ($search) { + $query->where('nama', 'like', "%$search%"); + }) + ->orderBy('kode', 'asc') + ->paginate($perPage); + + return view('master.desakelurahan.index', compact('title', 'desakelurahan', 'provinsi')); + } + + public function getByKecamatan($kecamatan_id) + { + $desa = DesaKelurahan::where('kecamatan_id', $kecamatan_id) + ->orderBy('nama', 'asc') + ->get(); + + return response()->json($desa); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', 'max:10', 'min:10', 'unique:master_desa_kelurahan,kode'], + 'nama' => ['required'], + 'path' => ['nullable'], + 'kecamatan_id' => ['required', 'exists:master_kecamatan,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + DesaKelurahan::create([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'kecamatan_id' => $request->kecamatan_id, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Desa/Kelurahan berhasil ditambahkan.' + ]); + } + + public function view($id) + { + $desakelurahan = DesaKelurahan::with(['kecamatan.kabupatenkota.provinsi'])->find($id); + + if (!$desakelurahan) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan' + ], 404); + } + + return response()->json([ + 'status' => 'success', + 'data' => [ + 'id' => $desakelurahan->id, + 'kode' => $desakelurahan->kode, + 'nama' => $desakelurahan->nama, + 'path' => $desakelurahan->path, + 'kecamatan_id' => $desakelurahan->kecamatan_id, + 'nama_kecamatan' => $desakelurahan->kecamatan->nama, + 'kabupaten_kota_id' => $desakelurahan->kecamatan->kabupaten_kota_id, + 'nama_kabupaten_kota' => $desakelurahan->kecamatan->kabupatenkota->nama, + 'provinsi_id' => $desakelurahan->kecamatan->kabupatenkota->provinsi_id, + 'nama_provinsi' => $desakelurahan->kecamatan->kabupatenkota->provinsi->nama, + ] + ]); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', 'max:10', 'min:10', "unique:master_desa_kelurahan,kode,$id"], + 'nama' => ['required'], + 'path' => ['nullable'], + 'kecamatan_id' => ['required', 'exists:master_kecamatan,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + $desakelurahan = DesaKelurahan::find($id); + + if (!$desakelurahan) { + return response()->json(['status' => 'error', 'message' => 'Data tidak ditemukan'], 404); + } + + $desakelurahan->update([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'kecamatan_id' => $request->kecamatan_id, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data berhasil diperbarui!']); + } + + public function destroy($id) + { + $desakelurahan = DesaKelurahan::find($id); + if (!$desakelurahan) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan.' + ], 404); + } + + $desakelurahan->deleted_by = auth()->user()->id; + $desakelurahan->save(); + $desakelurahan->delete(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data desa/kelurahan berhasil dihapus.' + ]); + } +} diff --git a/app/Http/Controllers/Web/HilirisasiDashboardController.php b/app/Http/Controllers/Web/HilirisasiDashboardController.php index 5215c46..b082a3d 100644 --- a/app/Http/Controllers/Web/HilirisasiDashboardController.php +++ b/app/Http/Controllers/Web/HilirisasiDashboardController.php @@ -13,6 +13,7 @@ class HilirisasiDashboardController extends Controller if (!Gate::allows('super_admin') && !Gate::allows('admin')) { abort(403); } - return view('dashboard.hilirisasi'); + $title = 'Hilirisasi Dashboard'; + return view('dashboard.hilirisasi', compact('title')); } } diff --git a/app/Http/Controllers/Web/HomeController.php b/app/Http/Controllers/Web/HomeController.php new file mode 100644 index 0000000..7ce2683 --- /dev/null +++ b/app/Http/Controllers/Web/HomeController.php @@ -0,0 +1,15 @@ +query('per_page', 10); + $search = $request->query('search', ''); + + $provinsi = Provinsi::all(); + + $kabupatenkota = KabupatenKota::with('provinsi') + ->where('nama', 'like', "%$search%") + ->orWhere('kode', 'like', "%$search%") + ->orWhereHas('provinsi', function($query) use ($search) { + $query->where('nama', 'like', "%$search%"); + }) + ->orderBy('kode', 'asc') + ->paginate($perPage); + + return view('master.kabupatenkota.index', compact('title', 'kabupatenkota', 'provinsi')); + } + + public function getByProvinsi($provinsi_id) + { + $kabupaten = KabupatenKota::where('provinsi_id', $provinsi_id) + ->orderBy('nama', 'asc') + ->get(); + + return response()->json($kabupaten); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', 'max:4', 'min:4', 'unique:master_kabupaten_kota,kode'], + 'nama' => ['required'], + 'path' => ['nullable'], + 'provinsi_id' => ['required', 'exists:master_provinsi,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + KabupatenKota::create([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'provinsi_id' => $request->provinsi_id, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Kabupaten/Kota berhasil ditambahkan.' + ]); + } + + public function view($id) + { + $kabupatenKota = KabupatenKota::with('provinsi:id,nama') + ->find($id); + + if (!$kabupatenKota) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan' + ], 404); + } + + return response()->json([ + 'status' => 'success', + 'data' => [ + 'id' => $kabupatenKota->id, + 'kode' => $kabupatenKota->kode, + 'nama' => $kabupatenKota->nama, + 'path' => $kabupatenKota->path, + 'provinsi_id' => $kabupatenKota->provinsi_id, + 'nama_provinsi' => $kabupatenKota->provinsi->nama + ] + ]); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', 'max:4', 'min:4', "unique:master_kabupaten_kota,kode,$id"], + 'nama' => ['required'], + 'path' => ['nullable'], + 'provinsi_id' => ['required', 'exists:master_provinsi,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Validasi gagal', + 'errors' => $validator->errors() + ], 422); + } + + $kabupatenKota = KabupatenKota::find($id); + + if (!$kabupatenKota) { + return response()->json(['status' => 'error', 'message' => 'Data tidak ditemukan'], 404); + } + + $kabupatenKota->update([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'provinsi_id' => $request->provinsi_id, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data berhasil diperbarui!']); + } + + public function destroy($id) + { + $kabupatenKota = KabupatenKota::find($id); + if (!$kabupatenKota) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan.' + ], 404); + } + + $kabupatenKota->deleted_by = auth()->user()->id; + $kabupatenKota->save(); + $kabupatenKota->delete(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data kabupaten/kota berhasil dihapus.' + ]); + } +} diff --git a/app/Http/Controllers/Web/KecamatanController.php b/app/Http/Controllers/Web/KecamatanController.php new file mode 100644 index 0000000..9fb15f2 --- /dev/null +++ b/app/Http/Controllers/Web/KecamatanController.php @@ -0,0 +1,153 @@ +query('per_page', 10); + $search = $request->query('search', ''); + + $provinsi = Provinsi::all(); + + $kecamatan = Kecamatan::with('kabupatenkota') + ->where('nama', 'like', "%$search%") + ->orWhere('kode', 'like', "%$search%") + ->orWhereHas('kabupatenkota', function($query) use ($search) { + $query->where('nama', 'like', "%$search%"); + }) + ->orderBy('kode', 'asc') + ->paginate($perPage); + + return view('master.kecamatan.index', compact('title', 'kecamatan', 'provinsi')); + } + + public function getByKabupaten($kabupaten_id) + { + $kecamatan = Kecamatan::where('kabupaten_kota_id', $kabupaten_id) + ->orderBy('nama', 'asc') + ->get(); + + return response()->json($kecamatan); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', 'max:6', 'min:6', 'unique:master_kecamatan,kode'], + 'nama' => ['required'], + 'path' => ['nullable'], + 'kabupaten_kota_id' => ['required', 'exists:master_kabupaten_kota,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + Kecamatan::create([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'kabupaten_kota_id' => $request->kabupaten_kota_id, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Kecamatan berhasil ditambahkan.' + ]); + } + + public function view($id) + { + $kecamatan = Kecamatan::with(['kabupatenkota.provinsi'])->find($id); + + if (!$kecamatan) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan' + ], 404); + } + + return response()->json([ + 'status' => 'success', + 'data' => [ + 'id' => $kecamatan->id, + 'kode' => $kecamatan->kode, + 'nama' => $kecamatan->nama, + 'path' => $kecamatan->path, + 'kabupaten_kota_id' => $kecamatan->kabupaten_kota_id, + 'nama_kabupaten_kota' => $kecamatan->kabupatenkota->nama, + 'provinsi_id' => $kecamatan->kabupatenkota->provinsi_id, + 'nama_provinsi' => $kecamatan->kabupatenkota->provinsi->nama + ] + ]); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', 'max:6', 'min:6', "unique:master_kecamatan,kode,$id"], + 'nama' => ['required'], + 'path' => ['nullable'], + 'kabupaten_kota_id' => ['required', 'exists:master_kabupaten_kota,id'] + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => 'Terdapat kesalahan pada input Anda.', + 'errors' => $validator->errors() + ], 422); + } + + $kecamatan = Kecamatan::find($id); + + if (!$kecamatan) { + return response()->json(['status' => 'error', 'message' => 'Data tidak ditemukan'], 404); + } + + $kecamatan->update([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'kabupaten_kota_id' => $request->kabupaten_kota_id, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data berhasil diperbarui!']); + } + + public function destroy($id) + { + $kecamatan = Kecamatan::find($id); + if (!$kecamatan) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan.' + ], 404); + } + + $kecamatan->deleted_by = auth()->user()->id; + $kecamatan->save(); + $kecamatan->delete(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data kecamatan berhasil dihapus.' + ]); + } +} diff --git a/app/Http/Controllers/Web/KeluargaController.php b/app/Http/Controllers/Web/KeluargaController.php new file mode 100644 index 0000000..a442f78 --- /dev/null +++ b/app/Http/Controllers/Web/KeluargaController.php @@ -0,0 +1,134 @@ +orderBy('created_at', 'desc'); + + if ($request->search) { + $query->where('kk', 'like', '%' . $request->search . '%'); + } + + $keluarga = $query->paginate($request->per_page ?? 10); + return view('master.keluarga.index', compact('keluarga')); + } + + public function create() + { + $provinsi = Provinsi::orderBy('nama', 'asc')->get(); + return view('master.keluarga.add', compact('provinsi')); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'kk' => ['required', 'string', 'min:16', 'max:16'], + 'desa_kelurahan_id' => ['required'], + 'adat_id' => ['nullable'], + 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + $pathKk = null; + $fileNameKk = null; + + if ($request->hasFile('file_kk')) { + $file = $request->file('file_kk'); + $fileNameKk = $file->getClientOriginalName(); + $pathKk = $file->store('uploads/keluarga', 'public'); + } + + Keluarga::create([ + 'kk' => $request->kk, + 'desa_kelurahan_id' => $request->desa_kelurahan_id, + 'adat_id' => $request->adat_id, + 'path_kk' => $pathKk, + 'file_kk' => $fileNameKk, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data Keluarga berhasil ditambahkan.']); + } + + public function show($id) + { + $keluarga = Keluarga::with(['desakelurahan.kecamatan.kabupatenkota.provinsi', 'adat'])->findOrFail($id); + return view('master.keluarga.view', compact('keluarga')); + } + + public function edit($id) + { + $keluarga = Keluarga::with(['desakelurahan.kecamatan.kabupatenkota.provinsi', 'adat'])->findOrFail($id); + $provinsi = Provinsi::orderBy('nama', 'asc')->get(); + return view('master.keluarga.edit', compact('keluarga', 'provinsi')); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'kk' => ['required', 'string', 'min:16', 'max:16'], + 'desa_kelurahan_id' => ['required'], + 'adat_id' => ['nullable'], + 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + $keluarga = Keluarga::findOrFail($id); + + $pathKk = $keluarga->path_kk; + $fileNameKk = $keluarga->file_kk; + + if ($request->hasFile('file_kk')) { + + if ($keluarga->path_kk && Storage::disk('public')->exists($keluarga->path_kk)) { + Storage::disk('public')->delete($keluarga->path_kk); + } + + $file = $request->file('file_kk'); + $fileNameKk = $file->getClientOriginalName(); + $pathKk = $file->store('uploads/keluarga', 'public'); + } + + $keluarga->update([ + 'kk' => $request->kk, + 'desa_kelurahan_id' => $request->desa_kelurahan_id, + 'adat_id' => $request->adat_id, + 'path_kk' => $pathKk, + 'file_kk' => $fileNameKk, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data Keluarga berhasil diupdate.']); + } + + public function destroy($id) + { + $keluarga = Keluarga::findOrFail($id); + + // if ($keluarga->path_kk && Storage::disk('public')->exists($keluarga->path_kk)) { + // Storage::disk('public')->delete($keluarga->path_kk); + // } + + $keluarga->update(['deleted_by' => auth()->id()]); + $keluarga->delete(); + + return response()->json(['status' => 'success', 'message' => 'Data Keluarga berhasil dihapus.']); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Web/KomoditasController.php b/app/Http/Controllers/Web/KomoditasController.php new file mode 100644 index 0000000..c8c7eae --- /dev/null +++ b/app/Http/Controllers/Web/KomoditasController.php @@ -0,0 +1,81 @@ +search) { + $query->where('nama', 'like', '%' . $request->search . '%'); + } + + $komoditas = $query->paginate($request->per_page ?? 10); + return view('master.komoditas.index', compact('komoditas')); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama'], // Tambah unique biar nggak ada data kembar + ], [ + 'nama.unique' => 'Nama komoditas ini sudah ada di database.' + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + Komoditas::create([ + 'nama' => $request->nama, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Komoditas berhasil ditambahkan.']); + } + + public function show($id) + { + $komoditas = Komoditas::findOrFail($id); + return response()->json(['status' => 'success', 'data' => $komoditas]); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255', 'unique:master_komoditas,nama,' . $id], + ], [ + 'nama.unique' => 'Nama komoditas ini sudah digunakan.' + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + $komoditas = Komoditas::findOrFail($id); + $komoditas->update([ + 'nama' => $request->nama, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Komoditas berhasil diupdate.']); + } + + public function destroy($id) + { + $komoditas = Komoditas::findOrFail($id); + + $komoditas->update(['deleted_by' => auth()->id()]); + $komoditas->delete(); + + return response()->json(['status' => 'success', 'message' => 'Komoditas berhasil dihapus.']); + } +} diff --git a/app/Http/Controllers/Web/KonektivitasDashboardController.php b/app/Http/Controllers/Web/KonektivitasDashboardController.php index 7a49613..4c52b45 100644 --- a/app/Http/Controllers/Web/KonektivitasDashboardController.php +++ b/app/Http/Controllers/Web/KonektivitasDashboardController.php @@ -13,6 +13,7 @@ class KonektivitasDashboardController extends Controller if (!Gate::allows('super_admin') && !Gate::allows('admin')) { abort(403); } - return view('dashboard.konektivitas'); + $title = 'Konektivitas Dashboard'; + return view('dashboard.konektivitas', compact('title')); } } diff --git a/app/Http/Controllers/Web/LahanController.php b/app/Http/Controllers/Web/LahanController.php new file mode 100644 index 0000000..0e3769b --- /dev/null +++ b/app/Http/Controllers/Web/LahanController.php @@ -0,0 +1,82 @@ +orderBy('created_at', 'desc'); + + if ($request->search) { + $query->where('nama', 'like', '%' . $request->search . '%') + ->orWhereHas('profile', function($q) use ($request) { + $q->where('nama', 'like', '%' . $request->search . '%'); + }); + } + + $lahan = $query->paginate($request->per_page ?? 10); + return view('master.lahan.index', compact('lahan')); + } + + public function create() + { + $provinsi = Provinsi::orderBy('nama', 'asc')->get(); + $profiles = Profile::orderBy('nama', 'asc')->get(); + return view('master.lahan.add', compact('provinsi', 'profiles')); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255'], + 'status_kepemilikan' => ['required', 'string', 'max:255'], + 'profile_id' => ['required'], + 'keluarga_pengelola_id' => ['nullable'], + 'adat_pemilik_id' => ['nullable'], + 'desa_kelurahan_id' => ['nullable'], + 'luas_lahan' => ['nullable', 'numeric'], + 'path' => ['nullable', 'string'], + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + if ($request->filled('path')) { + json_decode($request->path); + if (json_last_error() !== JSON_ERROR_NONE) { + return response()->json(['status' => 'error', 'message' => 'Format koordinat (path) bukan JSON array yang valid.'], 422); + } + } + + Lahan::create([ + 'nama' => $request->nama, + 'status_kepemilikan' => $request->status_kepemilikan, + 'profile_id' => $request->profile_id, + 'desa_kelurahan_id' => $request->desa_kelurahan_id, + 'luas_lahan' => $request->luas_lahan, + 'path' => $request->path, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Lahan berhasil ditambahkan.']); + } + + public function show($id) + { + $lahan = Lahan::with(['profile', 'desakelurahan.kecamatan.kabupatenkota.provinsi', 'tanaman.komoditas'])->findOrFail($id); + + return view('master.lahan.view', compact('lahan')); + } +} + diff --git a/app/Http/Controllers/Web/ProfileController.php b/app/Http/Controllers/Web/ProfileController.php new file mode 100644 index 0000000..f8cc527 --- /dev/null +++ b/app/Http/Controllers/Web/ProfileController.php @@ -0,0 +1,209 @@ +get(); + + // Query untuk tabel dengan fitur search dan pagination + $query = Profile::with('desakelurahan')->orderBy('created_at', 'desc'); + + if ($request->search) { + $query->where('nama', 'like', '%' . $request->search . '%') + ->orWhere('email', 'like', '%' . $request->search . '%'); + } + + $profiles = $query->paginate($request->per_page ?? 10); + + return view('master.profile.index', compact('profiles', 'provinsi')); + } + + public function create() + { + $provinsi = Provinsi::orderBy('nama', 'asc')->get(); + return view('master.profile.add', compact('provinsi')); + } + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email', 'max:255'], + 'telepon' => ['required', 'max:13'], + 'desa_kelurahan_id' => ['required'], + 'ktp' => ['nullable', 'min:16', 'max:16'], + 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + 'kk' => ['nullable', 'min:16', 'max:16'], + 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'errors' => $validator->errors() + ], 422); + } + + $user = User::where('email', $request->email)->first(); + + if (!$user) { + return response()->json([ + 'status' => 'error', + 'message' => 'User dengan email tersebut tidak ditemukan' + ], 404); + } + + $userid = $user->id; + $userrole = $user->role; + + $pathktp = null; + $pathkk = null; + + if ($request->hasFile('file_ktp')) { + $pathktp = $request->file('file_ktp')->store('uploads/users/ktp', 'public'); + } + + if ($request->hasFile('file_kk')) { + $pathkk = $request->file('file_kk')->store('uploads/users/kk', 'public'); + } + + Profile::create([ + 'user_id' => $userid, + 'role' => $userrole, + 'nama' => $request->nama, + 'email' => $request->email, + 'telepon' => $request->telepon, + 'alamat' => $request->alamat, + 'kk' => $request->kk, + 'ktp' => $request->ktp, + 'desa_kelurahan_id' => $request->desa_kelurahan_id, + 'path_kk' => $pathkk, + 'path_ktp' => $pathktp, + 'keluarga_id' => $request->keluarga_id, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Profile berhasil ditambahkan.' + ]); + } + + public function show($id) + { + $profile = Profile::with('desakelurahan.kecamatan.kabupatenkota.provinsi')->findOrFail($id); + return view('master.profile.view', compact('profile')); + } + + public function edit($id) + { + $profile = Profile::with('desakelurahan.kecamatan.kabupatenkota.provinsi')->findOrFail($id); + $provinsi = Provinsi::orderBy('nama', 'asc')->get(); + return view('master.profile.edit', compact('profile', 'provinsi')); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255'], + 'email' => ['required', 'email', 'max:255'], + 'telepon' => ['required', 'max:13'], + 'desa_kelurahan_id' => ['required'], + 'ktp' => ['nullable', 'min:16', 'max:16'], + 'file_ktp' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + 'kk' => ['nullable', 'min:16', 'max:16'], + 'file_kk' => ['nullable', 'file', 'mimes:jpeg,jpg,png,pdf', 'max:2048'], + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'errors' => $validator->errors() + ], 422); + } + + $profile = Profile::findOrFail($id); + + $user = User::where('email', $request->email)->first(); + + if (!$user) { + return response()->json([ + 'status' => 'error', + 'message' => 'User dengan email tersebut tidak ditemukan' + ], 404); + } + + $pathktp = $profile->path_ktp; + $pathkk = $profile->path_kk; + + if ($request->hasFile('file_ktp')) { + if ($profile->path_ktp && \Storage::disk('public')->exists($profile->path_ktp)) { + \Storage::disk('public')->delete($profile->path_ktp); + } + $pathktp = $request->file('file_ktp')->store('uploads/users/ktp', 'public'); + } + + if ($request->hasFile('file_kk')) { + if ($profile->path_kk && \Storage::disk('public')->exists($profile->path_kk)) { + \Storage::disk('public')->delete($profile->path_kk); + } + $pathkk = $request->file('file_kk')->store('uploads/users/kk', 'public'); + } + + $profile->update([ + 'user_id' => $user->id, + 'role' => $user->role, + 'nama' => $request->nama, + 'email' => $request->email, + 'telepon' => $request->telepon, + 'alamat' => $request->alamat, + 'kk' => $request->kk, + 'ktp' => $request->ktp, + 'desa_kelurahan_id' => $request->desa_kelurahan_id, + 'path_kk' => $pathkk, + 'path_ktp' => $pathktp, + 'keluarga_id' => $request->keluarga_id, // Pastikan input ini dikirim dari form, kalau tidak hapus saja + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Profile berhasil diupdate.' + ]); + } + + /** + * Menghapus data profile (serta file fisiknya) + */ + public function destroy($id) + { + $profile = Profile::findOrFail($id); + + // if ($profile->path_ktp && Storage::disk('public')->exists($profile->path_ktp)) { + // Storage::disk('public')->delete($profile->path_ktp); + // } + // if ($profile->path_kk && Storage::disk('public')->exists($profile->path_kk)) { + // Storage::disk('public')->delete($profile->path_kk); + // } + $profile->deleted_by = auth()->user()->id; + $profile->save(); + $profile->delete(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data dan dokumen berhasil dihapus' + ]); + } +} diff --git a/app/Http/Controllers/Web/ProvinsiController.php b/app/Http/Controllers/Web/ProvinsiController.php new file mode 100644 index 0000000..34f4e77 --- /dev/null +++ b/app/Http/Controllers/Web/ProvinsiController.php @@ -0,0 +1,133 @@ +query('per_page', 10); + $search = $request->query('search', ''); + + $provinsi = Provinsi::where('nama', 'like', "%$search%") + ->orWhere('kode', 'like', "%$search%") + ->orWhere('iso', 'like', "%$search%") + ->paginate($perPage); + + return view('master.provinsi.index', compact('title', 'provinsi')); + } + + public function getProvinsi() + { + $provinsi = Provinsi::select(['id', 'kode', 'nama', 'iso'])->get(); + return response()->json(['data' => $provinsi]); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'kode' => ['required', Rule::unique(Provinsi::class, 'kode')], + 'nama' => ['required', Rule::unique(Provinsi::class, 'nama')], + 'path' => ['nullable'], + 'iso' => ['required', Rule::unique(Provinsi::class, 'iso')], + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => $validator->errors()->first() + ], 422); + } + + Provinsi::create([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'iso' => $request->iso, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json([ + 'status' => 'success', + 'message' => 'Provinsi berhasil ditambahkan.' + ]); + } + + public function view($id) + { + $provinsi = Provinsi::find($id); + + if (!$provinsi) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data provinsi tidak ditemukan.' + ], 404); + } + + return response()->json([ + 'status' => 'success', + 'data' => $provinsi + ]); + } + + public function update(Request $request, $id) + { + $validator = Validator::make($request->all(), [ + 'kode' => 'required|max:2', + 'nama' => 'required', + 'iso' => 'required' + ]); + + if ($validator->fails()) { + return response()->json([ + 'status' => 'error', + 'message' => $validator->errors()->first() + ], 422); + } + + $provinsi = Provinsi::find($id); + + if (!$provinsi) { + return response()->json(['status' => 'error', 'message' => 'Data tidak ditemukan'], 404); + } + + $provinsi->update([ + 'kode' => $request->kode, + 'nama' => $request->nama, + 'path' => $request->path, + 'iso' => $request->iso, + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data berhasil diperbarui!']); + } + + public function destroy($id) + { + $provinsi = Provinsi::find($id); + if (!$provinsi) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data tidak ditemukan.' + ], 404); + } + + $provinsi->deleted_by = auth()->user()->id; + $provinsi->save(); + $provinsi->delete(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data provinsi berhasil dihapus.' + ]); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Web/ResiliensiDashboardController.php b/app/Http/Controllers/Web/ResiliensiDashboardController.php index 8495cbd..f4f97dc 100644 --- a/app/Http/Controllers/Web/ResiliensiDashboardController.php +++ b/app/Http/Controllers/Web/ResiliensiDashboardController.php @@ -13,6 +13,7 @@ class ResiliensiDashboardController extends Controller if (!Gate::allows('super_admin') && !Gate::allows('admin')) { abort(403); } - return view('dashboard.resiliensi'); + $title = 'Resiliensi Dashboard'; + return view('dashboard.resiliensi', compact('title')); } } diff --git a/app/Http/Controllers/Web/SummaryDashboardController.php b/app/Http/Controllers/Web/SummaryDashboardController.php index 621b814..bbf2195 100644 --- a/app/Http/Controllers/Web/SummaryDashboardController.php +++ b/app/Http/Controllers/Web/SummaryDashboardController.php @@ -10,9 +10,10 @@ class SummaryDashboardController extends Controller { public function index() { - // if (!Gate::allows('super_admin') && !Gate::allows('admin')) { - // abort(403); - // } - return view('dashboard.summary'); + if (!Gate::allows('super_admin') && !Gate::allows('admin')) { + abort(403); + } + $title = 'Summary Dashboard'; + return view('dashboard.summary', compact('title')); } } diff --git a/app/Http/Controllers/Web/TanamanController.php b/app/Http/Controllers/Web/TanamanController.php new file mode 100644 index 0000000..06bca70 --- /dev/null +++ b/app/Http/Controllers/Web/TanamanController.php @@ -0,0 +1,86 @@ +orderBy('created_at', 'desc'); + + if ($request->search) { + $query->where('nama', 'like', '%' . $request->search . '%') + ->orWhereHas('lahan', function($q) use ($request) { + $q->where('nama', 'like', '%' . $request->search . '%'); + }); + } + + $tanaman = $query->paginate($request->per_page ?? 10); + return view('master.tanaman.index', compact('tanaman')); + } + + public function create() + { + $komoditas = Komoditas::orderBy('nama', 'asc')->get(); + $profiles = Profile::orderBy('nama', 'asc')->get(); + $lahan = Lahan::orderBy('nama', 'asc')->get(); + + return view('master.tanaman.add', compact('komoditas', 'profiles', 'lahan')); + } + + public function getLahan($id) + { + $lahan = Lahan::findOrFail($id); + return response()->json([ + 'status' => 'success', + 'path' => $lahan->path + ]); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'nama' => ['required', 'string', 'max:255'], + 'komoditas_id' => ['required'], + 'profile_id' => ['required'], + 'lahan_id' => ['required'], + 'kondisi_tanaman' => ['required', 'in:sehat,sakit,mati'], + 'latitude' => ['required', 'numeric'], + 'longitude' => ['required', 'numeric'], + ], [ + 'latitude.required' => 'Titik koordinat wajib diisi. Silakan klik area pada peta.' + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + Tanaman::create([ + 'nama' => $request->nama, + 'komoditas_id' => $request->komoditas_id, + 'profile_id' => $request->profile_id, + 'lahan_id' => $request->lahan_id, + 'kondisi_tanaman' => $request->kondisi_tanaman, + 'latitude' => $request->latitude, + 'longitude' => $request->longitude, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + return response()->json(['status' => 'success', 'message' => 'Data Tanaman berhasil ditambahkan.']); + } + + public function show($id) + { + $tanaman = Tanaman::with(['komoditas', 'lahan', 'profile'])->findOrFail($id); + return view('master.tanaman.view', compact('tanaman')); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/Web/UserController.php b/app/Http/Controllers/Web/UserController.php new file mode 100644 index 0000000..672510b --- /dev/null +++ b/app/Http/Controllers/Web/UserController.php @@ -0,0 +1,96 @@ +search) { + $query->where('name', 'like', '%' . $request->search . '%') + ->orWhere('email', 'like', '%' . $request->search . '%'); + } + + $users = $query->paginate($request->per_page ?? 10); + + return view('master.users.index', compact('users')); + } + + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'name' => 'required|string|max:255', + 'email' => 'required|email|unique:users,email|max:255', + 'password' => 'required|min:6', + 'role' => 'required|string|max:255', + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + User::create([ + 'name' => $request->name, + 'email' => $request->email, + 'password' => Hash::make($request->password), // Enkripsi password + 'role' => $request->role, + ]); + + return response()->json(['status' => 'success', 'message' => 'User berhasil ditambahkan']); + } + + public function show($id) + { + try { + $user = User::findOrFail($id); + return response()->json(['status' => 'success', 'data' => $user]); + } catch (\Exception $e) { + return response()->json(['status' => 'error', 'message' => 'User tidak ditemukan'], 404); + } + } + + public function update(Request $request, $id) + { + $user = User::findOrFail($id); + + $validator = Validator::make($request->all(), [ + 'name' => 'required|string|max:255', + 'email' => 'required|email|max:255|unique:users,email,' . $id, // Pengecualian email unik untuk ID ini + 'role' => 'required|string|max:255', + 'password' => 'nullable|min:6', + ]); + + if ($validator->fails()) { + return response()->json(['status' => 'error', 'errors' => $validator->errors()], 422); + } + + $user->name = $request->name; + $user->email = $request->email; + $user->role = $request->role; + + // Update password HANYA JIKA diisi + if ($request->filled('password')) { + $user->password = Hash::make($request->password); + } + + $user->save(); + + return response()->json(['status' => 'success', 'message' => 'User berhasil diupdate']); + } + + public function destroy($id) + { + $user = User::findOrFail($id); + $user->delete(); + + return response()->json(['status' => 'success', 'message' => 'User berhasil dihapus']); + } +} diff --git a/app/Models/Penduduk/Keluarga.php b/app/Models/Penduduk/Keluarga.php new file mode 100644 index 0000000..5bf8527 --- /dev/null +++ b/app/Models/Penduduk/Keluarga.php @@ -0,0 +1,36 @@ +belongsTo(DesaKelurahan::class, 'desa_kelurahan_id'); + } + + public function adat() + { + return $this->belongsTo(Adat::class, 'adat_id'); + } +} diff --git a/app/Models/Penduduk/Profile.php b/app/Models/Penduduk/Profile.php new file mode 100644 index 0000000..b09d2d4 --- /dev/null +++ b/app/Models/Penduduk/Profile.php @@ -0,0 +1,10 @@ +belongsTo(DesaKelurahan::class, 'desa_kelurahan_id'); + } + + public function lahan() + { + return $this->hasMany(Lahan::class, 'adat_pemilik_id'); + } +} diff --git a/app/Models/Komoditas/Komoditas.php b/app/Models/Pertanian/Komoditas.php similarity index 58% rename from app/Models/Komoditas/Komoditas.php rename to app/Models/Pertanian/Komoditas.php index 631aa25..e046249 100644 --- a/app/Models/Komoditas/Komoditas.php +++ b/app/Models/Pertanian/Komoditas.php @@ -1,17 +1,20 @@ belongsTo(Profile::class, 'profile_id'); + } + + public function desakelurahan() + { + return $this->belongsTo(DesaKelurahan::class, 'desa_kelurahan_id'); + } + + public function tanaman() + { + return $this->hasMany(Tanaman::class, 'lahan_id'); + } +} diff --git a/app/Models/Pertanian/Tanaman.php b/app/Models/Pertanian/Tanaman.php new file mode 100644 index 0000000..8106923 --- /dev/null +++ b/app/Models/Pertanian/Tanaman.php @@ -0,0 +1,44 @@ +belongsTo(Komoditas::class, 'komoditas_id'); + } + + public function profile() + { + return $this->belongsTo(Profile::class, 'profile_id'); + } + + public function lahan() + { + return $this->belongsTo(Lahan::class, 'lahan_id'); + } +} diff --git a/app/Models/Profile.php b/app/Models/Profile.php index 589eae1..0b36641 100644 --- a/app/Models/Profile.php +++ b/app/Models/Profile.php @@ -4,7 +4,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; - +use App\Models\Wilayah\User; +use App\Models\Wilayah\DesaKelurahan; class Profile extends Model { use SoftDeletes; @@ -18,5 +19,25 @@ class Profile extends Model 'alamat', 'kk', 'ktp', + + 'desa_kelurahan_id', + 'path_kk', + 'file_kk', + 'path_ktp', + 'file_ktp', + 'keluarga_id', + 'created_by', + 'updated_by', + 'deleted_by' ]; + + public function desakelurahan() + { + return $this->belongsTo(DesaKelurahan::class, 'desa_kelurahan_id'); + } + + public function user() + { + return $this->belongsTo(User::class, 'user_id'); + } } diff --git a/app/Models/Wilayah/DesaKelurahan.php b/app/Models/Wilayah/DesaKelurahan.php index f7af1f3..2885f9f 100644 --- a/app/Models/Wilayah/DesaKelurahan.php +++ b/app/Models/Wilayah/DesaKelurahan.php @@ -4,6 +4,7 @@ namespace App\Models\wilayah; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; +use App\Models\Wilayah\Kecamatan; class DesaKelurahan extends Model { @@ -17,4 +18,7 @@ class DesaKelurahan extends Model 'path', 'kecamatan_id', ]; + public function kecamatan() { + return $this->belongsTo(Kecamatan::class, 'kecamatan_id'); + } } diff --git a/app/Models/Wilayah/KabupatenKota.php b/app/Models/Wilayah/KabupatenKota.php index bb0a2cc..4a45103 100644 --- a/app/Models/Wilayah/KabupatenKota.php +++ b/app/Models/Wilayah/KabupatenKota.php @@ -4,6 +4,8 @@ namespace App\Models\Wilayah; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; +use App\Models\Wilayah\Provinsi; +use App\Models\Wilayah\Kecamatan; class KabupatenKota extends Model { @@ -22,4 +24,9 @@ class KabupatenKota extends Model { return $this->belongsTo(Provinsi::class, 'provinsi_id'); } + + public function kecamatan() + { + return $this->hasMany(Kecamatan::class, 'kabupaten_kota_id'); + } } diff --git a/app/Models/Wilayah/Kecamatan.php b/app/Models/Wilayah/Kecamatan.php index aee32a6..4631efc 100644 --- a/app/Models/Wilayah/Kecamatan.php +++ b/app/Models/Wilayah/Kecamatan.php @@ -4,6 +4,8 @@ namespace App\Models\Wilayah; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; +use App\Models\Wilayah\KabupatenKota; +use App\Models\Wilayah\DesaKelurahan; class Kecamatan extends Model { @@ -18,8 +20,12 @@ class Kecamatan extends Model 'kabupaten_kota_id', ]; - public function kabupatenKota() - { + public function kabupatenkota() { return $this->belongsTo(KabupatenKota::class, 'kabupaten_kota_id'); } + + public function desakelurahan() + { + return $this->hasMany(DesaKelurahan::class, 'kecamatan_id'); + } } diff --git a/app/Models/Wilayah/Provinsi.php b/app/Models/Wilayah/Provinsi.php index 5f6ea91..81c65bc 100644 --- a/app/Models/Wilayah/Provinsi.php +++ b/app/Models/Wilayah/Provinsi.php @@ -4,6 +4,7 @@ namespace App\Models\Wilayah; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; +use App\Models\Wilayah\KabupatenKota; class Provinsi extends Model { @@ -16,5 +17,13 @@ class Provinsi extends Model 'nama', 'path', 'iso', + 'created_by', + 'updated_by', + 'deleted_by', ]; + + public function kabupatenKota() + { + return $this->hasMany(KabupatenKota::class, 'provinsi_id'); + } } diff --git a/database/migrations/2026_02_20_131504_create_lahans_table.php b/database/migrations/2026_02_20_131504_create_lahans_table.php index 8780a83..9582ec3 100644 --- a/database/migrations/2026_02_20_131504_create_lahans_table.php +++ b/database/migrations/2026_02_20_131504_create_lahans_table.php @@ -23,7 +23,7 @@ return new class extends Migration $table->foreignId('desa_kelurahan_id')->nullable()->constrained('master_desa_kelurahan'); $table->text('path')->nullable(); - $table->integer('luas_lahan')->nullable(); + $table->float('luas_lahan', 8)->nullable(); $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); diff --git a/resources/views/auth/layout.blade.php b/resources/views/auth/layout.blade.php index a08401c..9475763 100644 --- a/resources/views/auth/layout.blade.php +++ b/resources/views/auth/layout.blade.php @@ -14,7 +14,7 @@ name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0" /> -
New on our platform? - + Create an account
diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php index 16f2943..11c636b 100644 --- a/resources/views/auth/register.blade.php +++ b/resources/views/auth/register.blade.php @@ -69,7 +69,7 @@Already have an account? - + Sign in instead
diff --git a/resources/views/layout/header.blade.php b/resources/views/layout/header.blade.php index f2fba3a..f848b9d 100644 --- a/resources/views/layout/header.blade.php +++ b/resources/views/layout/header.blade.php @@ -10,11 +10,12 @@ data-template="vertical-menu-template"> + -| No | +Kode Desa/Kel | +Nama Desa/Kelurahan | +Kecamatan | +Actions | +
|---|---|---|---|---|
| {{ $desakelurahan->firstItem() + $index }} | +{{ $desa->kode }} | +
+ @php
+ $words = explode(' ', $desa->nama);
+ $initials = substr(implode('', array_map(fn($w) => strtoupper($w[0] ?? ''), $words)), 0, 2);
+ $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary'];
+ $state = $states[array_rand($states)];
+ @endphp
+
+
+
+
+ {{ $desa->nama }}
+
+ {{ $initials }}
+
+ |
+ + {{ $desa->kecamatan->nama ?? '-' }} + | ++ + | +
| Tidak ada data ditemukan. | +||||
| No | +Kode Kab/Kota | +Nama Kabupaten/Kota | +Provinsi | +Actions | +
|---|---|---|---|---|
| {{ $kabupatenkota->firstItem() + $index }} | +{{ $kab->kode }} | +
+ @php
+ $words = explode(' ', $kab->nama);
+ $initials = substr(implode('', array_map(fn($w) => strtoupper($w[0] ?? ''), $words)), 0, 2);
+ $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary'];
+ $state = $states[array_rand($states)];
+ @endphp
+
+
+
+
+ {{ $kab->nama }}
+
+ {{ $initials }}
+
+ |
+ + {{ $kab->provinsi->nama ?? '-' }} + | ++ + | +
| Tidak ada data ditemukan. | +||||
| ID | -Kode Kabupaten Kota | -Nama Kabupaten Kota | -Nama Provinsi | -Actions | -
|---|
| No | +Kode Kecamatan | +Nama Kecamatan | +Kabupaten/Kota | +Actions | +
|---|---|---|---|---|
| {{ $kecamatan->firstItem() + $index }} | +{{ $kec->kode }} | +
+ @php
+ $words = explode(' ', $kec->nama);
+ $initials = substr(implode('', array_map(fn($w) => strtoupper($w[0] ?? ''), $words)), 0, 2);
+ $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary'];
+ $state = $states[array_rand($states)];
+ @endphp
+
+
+
+
+ {{ $kec->nama }}
+
+ {{ $initials }}
+
+ |
+ + {{ $kec->kabupatenkota->nama ?? '-' }} + | ++ + | +
| Tidak ada data ditemukan. | +||||
| ID | -Kode Kecamatan | -Nama Kecamatan | -Nama Kabupaten Kota | -Nama Provinsi | -Actions | -
|---|
| No | +No. KK | +Desa/Kelurahan | +Adat | +File KK | +Actions | +
|---|---|---|---|---|---|
| {{ $keluarga->firstItem() + $index }} | +{{ $item->kk }} | +{{ $item->desakelurahan->nama ?? '-' }} | +{{ $item->adat->nama ?? '-' }} | ++ @if($item->path_kk) + Ada + @else + Tidak Ada + @endif + | ++ + | +
| Tidak ada data ditemukan. | |||||
| No | +Nama Lahan | +Pemilik | +Status | +Luas (Ha/m2) | +GeoJSON | +Actions | +
|---|---|---|---|---|---|---|
| {{ $lahan->firstItem() + $index }} | +{{ $item->nama }} | +{{ $item->profile->nama ?? '-' }} | +{{ $item->status_kepemilikan }} | +{{ $item->luas_lahan ?? '-' }} | ++ @if($item->path) + Ada + @else + Tidak Ada + @endif + | ++ + | +
| Tidak ada data lahan ditemukan. | ||||||
| No | User Info | Role | Desa/Kelurahan | Telepon | Actions | +
|---|---|---|---|---|---|
| {{ $profiles->firstItem() + $index }} | +
+ {{ $item->nama }} + {{ $item->email }} + |
+ {{ $item->role ?? 'User' }} | +{{ $item->desakelurahan->nama ?? '-' }} | +{{ $item->telepon ?? '-' }} | ++ + | +
| Tidak ada data ditemukan. | |||||
| No | +Kode Provinsi | +Nama Provinsi | +Actions | +
|---|---|---|---|
| {{ $provinsi->firstItem() + $index }} | +{{ $prov->kode }} | +
+ @php
+ $words = explode(' ', $prov->nama);
+ $initials = substr(implode('', array_map(fn($w) => strtoupper($w[0]), $words)), 0, 2);
+ $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary'];
+ $state = $states[array_rand($states)];
+ @endphp
+
+
+
+
+
+ {{ $initials }}
+
+
+ {{ $prov->nama }}
+ {{ $prov->iso ?? '' }}
+
+ |
+ + + | +
| Tidak ada data ditemukan. | +|||
| ID | -Kode Provinsi | -Nama Provinsi | -Actions | -
|---|
| No | +Nama Tanaman | +Komoditas | +Lahan | +Kondisi | +Koordinat | +Actions | +
|---|---|---|---|---|---|---|
| {{ $tanaman->firstItem() + $index }} | +{{ $item->nama }} | +{{ $item->komoditas->nama ?? '-' }} | +{{ $item->lahan->nama ?? '-' }} | ++ @if($item->kondisi_tanaman == 'sehat') + Sehat + @elseif($item->kondisi_tanaman == 'sakit') + Sakit + @else + Mati + @endif + | +{{ $item->latitude }}, {{ $item->longitude }} |
+ + + | +
| Tidak ada data tanaman ditemukan. | ||||||
| No | +User | +Role | +Actions | +
|---|---|---|---|
| {{ $users->firstItem() + $index }} | +
+ @php
+ $words = explode(' ', $item->name);
+ $initials = substr(implode('', array_map(fn($w) => strtoupper($w[0] ?? ''), $words)), 0, 2);
+ $states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary'];
+ $state = $states[array_rand($states)];
+ @endphp
+
+
+
+
+
+ {{ $initials }}
+
+
+ {{ $item->name }}
+ {{ $item->email }}
+
+ |
+ {{ $item->role }} | ++ + | +
| Tidak ada data ditemukan. | +|||
- A role provided access to predefined menus and features so that depending on
- assigned role an administrator can have access to what user needs.
-
-
- Add new role,
- if it doesn't exist.
-
Find all of your company’s administrator accounts and their associate roles.
-| - | - | User | -Role | -Plan | -Billing | -Status | -Actions | -
|---|