diff --git a/app/Http/Controllers/Web/Bumdes/PengurusBumdesController.php b/app/Http/Controllers/Web/Bumdes/PengurusBumdesController.php index 93ec50b..36ff02e 100644 --- a/app/Http/Controllers/Web/Bumdes/PengurusBumdesController.php +++ b/app/Http/Controllers/Web/Bumdes/PengurusBumdesController.php @@ -5,6 +5,7 @@ namespace App\Http\Controllers\Web\Bumdes; use App\Enums\Bumdes\JabatanBumdes; use App\Enums\Pendidikan; use App\Http\Controllers\Controller; +use App\Models\Bumdes\KelembagaanAktorBumdes; use App\Models\Bumdes\PengurusBumdes; use App\Models\Wilayah\Provinsi; use Carbon\Carbon; @@ -22,10 +23,7 @@ class PengurusBumdesController extends Controller } $query = PengurusBumdes::with([ - 'desaKelurahan:id,nama,kecamatan_id', - 'desaKelurahan.kecamatan:id,nama,kabupaten_kota_id', - 'desaKelurahan.kecamatan.kabupatenKota:id,nama,provinsi_id', - 'desaKelurahan.kecamatan.kabupatenKota.provinsi:id,nama', + ...$this->wilayahRelationsWithoutProgramScope(), 'creator:id,name', ]) ->orderBy('created_at', 'desc'); @@ -70,7 +68,7 @@ class PengurusBumdesController extends Controller abort(403); } - $provinsi = Provinsi::select('id', 'kode', 'nama')->orderBy('kode', 'asc')->get(); + $provinsi = $this->provinsiOptions(); $jabatan = JabatanBumdes::options(); $pendidikan = Pendidikan::options(); @@ -106,10 +104,10 @@ class PengurusBumdesController extends Controller abort(403); } - $pengurus = $this->pengurusQuery()->with([ - 'desaKelurahan.kecamatan.kabupatenKota.provinsi', - ])->findOrFail($id); - $provinsi = Provinsi::select('id', 'kode', 'nama')->orderBy('kode', 'asc')->get(); + $pengurus = $this->pengurusQuery() + ->with($this->wilayahRelationsWithoutProgramScope()) + ->findOrFail($id); + $provinsi = $this->provinsiOptions(); $jabatan = JabatanBumdes::options(); $pendidikan = Pendidikan::options(); @@ -152,11 +150,41 @@ class PengurusBumdesController extends Controller abort(403); } - $pengurus = $this->pengurusQuery()->with([ - 'desaKelurahan.kecamatan.kabupatenKota.provinsi', - ])->findOrFail($id); + $pengurus = $this->pengurusQuery() + ->with([ + ...$this->wilayahRelationsWithoutProgramScope(), + 'kelembagaanAktor', + ]) + ->findOrFail($id); + $kelembagaanAktor = $pengurus->kelembagaanAktor; - return view('bumdes.kelembagaan-aktor.index', compact('pengurus')); + return view('bumdes.kelembagaan-aktor.index', array_merge( + compact('pengurus', 'kelembagaanAktor'), + $this->kelembagaanAktorOptions() + )); + } + + public function storeKelembagaanAktor(Request $request, string $id) + { + if (! Gate::any(['super_admin', 'admin', 'fasilitator'])) { + abort(403); + } + + $pengurus = $this->pengurusQuery()->findOrFail($id); + $validatedData = $this->validatedKelembagaanAktorData($request); + + KelembagaanAktorBumdes::updateOrCreate( + ['pengurus_bumdes_id' => $pengurus->id], + [ + ...$this->formatKelembagaanAktorData($validatedData), + 'created_by' => $pengurus->kelembagaanAktor?->created_by ?? auth()->id(), + 'updated_by' => auth()->id(), + ] + ); + + return redirect() + ->route('bumdes.kelembagaan-aktor.index', $pengurus->id) + ->with('success', 'Data kelembagaan dan aktor BUMDes berhasil disimpan.'); } private function pengurusQuery() @@ -170,6 +198,24 @@ class PengurusBumdesController extends Controller return $query; } + private function provinsiOptions() + { + return Provinsi::withoutGlobalScope('program') + ->select('id', 'kode', 'nama') + ->orderBy('kode', 'asc') + ->get(); + } + + private function wilayahRelationsWithoutProgramScope(): array + { + return [ + 'desaKelurahan' => fn ($query) => $query->withoutGlobalScope('program')->select('id', 'nama', 'kecamatan_id'), + 'desaKelurahan.kecamatan' => fn ($query) => $query->withoutGlobalScope('program')->select('id', 'nama', 'kabupaten_kota_id'), + 'desaKelurahan.kecamatan.kabupatenKota' => fn ($query) => $query->withoutGlobalScope('program')->select('id', 'nama', 'provinsi_id'), + 'desaKelurahan.kecamatan.kabupatenKota.provinsi' => fn ($query) => $query->withoutGlobalScope('program')->select('id', 'nama'), + ]; + } + private function validatedData(Request $request): array { return $request->validate([ @@ -215,4 +261,320 @@ class PengurusBumdesController extends Controller return $data; } + + private function validatedKelembagaanAktorData(Request $request): array + { + $this->normalizeKelembagaanAktorInput($request); + $maxYear = now()->year + 1; + + return $request->validate([ + 'status_badan_hukum' => ['nullable', Rule::in(array_keys($this->statusBadanHukumOptions()))], + 'nomor_dasar_hukum' => ['nullable', 'string', 'max:255'], + 'tahun_dasar_hukum' => ['nullable', 'integer', 'digits:4', 'min:1900', 'max:' . $maxYear], + 'status_keaktifan' => ['nullable', Rule::in(array_keys($this->statusKeaktifanOptions()))], + 'alasan_tidak_aktif' => ['nullable', 'string'], + 'unit_usaha' => ['nullable', 'array'], + 'unit_usaha.*' => ['string', Rule::in(array_keys($this->unitUsahaOptions()))], + 'unit_usaha_jasa_lainnya' => ['nullable', 'string', 'max:255'], + 'status_unit_komoditas' => ['nullable', Rule::in(array_keys($this->statusUnitKomoditasOptions()))], + 'nama_unit_komoditas' => ['nullable', 'string', 'max:255'], + 'status_ad_art' => ['nullable', Rule::in(array_keys($this->statusAdArtOptions()))], + 'tahun_ad_art' => ['nullable', 'integer', 'digits:4', 'min:1900', 'max:' . $maxYear], + 'pengurus_inti' => ['nullable', 'array'], + 'pengurus_inti.*.jabatan' => ['nullable', 'string', 'max:255'], + 'pengurus_inti.*.nama' => ['nullable', 'string', 'max:255'], + 'pengurus_inti.*.aktif' => ['nullable', 'boolean'], + 'memiliki_staf' => ['nullable', 'boolean'], + 'jumlah_staf' => ['nullable', 'integer', 'min:0'], + 'unit_usaha_staf' => ['nullable', 'string'], + 'modal_awal' => ['nullable', 'integer', 'min:0'], + 'tahun_modal_awal' => ['nullable', 'integer', 'digits:4', 'min:1900', 'max:' . $maxYear], + 'pernah_penambahan_modal' => ['nullable', 'boolean'], + 'penambahan_modal' => ['nullable', 'array'], + 'penambahan_modal.*.tahun' => ['nullable', 'integer', 'digits:4', 'min:1900', 'max:' . $maxYear], + 'penambahan_modal.*.jumlah' => ['nullable', 'integer', 'min:0'], + 'aset_produktif' => ['nullable', 'array'], + 'aset_produktif.*.aset' => ['nullable', 'string', 'max:255'], + 'aset_produktif.*.dipilih' => ['nullable', 'boolean'], + 'aset_produktif.*.jumlah' => ['nullable', 'string', 'max:255'], + 'aset_produktif.*.kondisi' => ['nullable', 'string', 'max:255'], + 'aset_produktif_lainnya' => ['nullable', 'string', 'max:255'], + 'status_kepemilikan_aset' => ['nullable', Rule::in(array_keys($this->statusKepemilikanAsetOptions()))], + 'infrastruktur_pascapanen' => ['nullable', 'array'], + 'infrastruktur_pascapanen.*.infrastruktur' => ['nullable', 'string', 'max:255'], + 'infrastruktur_pascapanen.*.dipilih' => ['nullable', 'boolean'], + 'infrastruktur_pascapanen.*.jumlah' => ['nullable', 'string', 'max:255'], + 'infrastruktur_pascapanen.*.kondisi' => ['nullable', Rule::in(array_keys($this->kondisiInfrastrukturOptions()))], + 'infrastruktur_pascapanen_lainnya' => ['nullable', 'string', 'max:255'], + ], $this->kelembagaanAktorValidationMessages(), $this->kelembagaanAktorValidationAttributes()); + } + + private function normalizeKelembagaanAktorInput(Request $request): void + { + foreach (['modal_awal'] as $field) { + if ($request->has($field)) { + $request->merge([$field => preg_replace('/\D/', '', (string) $request->input($field))]); + } + } + + $penambahanModal = collect($request->input('penambahan_modal', [])) + ->map(function ($row) { + if (isset($row['jumlah'])) { + $row['jumlah'] = preg_replace('/\D/', '', (string) $row['jumlah']); + } + + return $row; + }) + ->all(); + + if ($request->has('penambahan_modal')) { + $request->merge(['penambahan_modal' => $penambahanModal]); + } + } + + private function formatKelembagaanAktorData(array $data): array + { + $payload = array_merge([ + 'status_badan_hukum' => null, + 'nomor_dasar_hukum' => null, + 'tahun_dasar_hukum' => null, + 'status_keaktifan' => null, + 'alasan_tidak_aktif' => null, + 'unit_usaha' => [], + 'unit_usaha_jasa_lainnya' => null, + 'status_unit_komoditas' => null, + 'nama_unit_komoditas' => null, + 'status_ad_art' => null, + 'tahun_ad_art' => null, + 'pengurus_inti' => [], + 'memiliki_staf' => null, + 'jumlah_staf' => null, + 'unit_usaha_staf' => null, + 'modal_awal' => null, + 'tahun_modal_awal' => null, + 'pernah_penambahan_modal' => null, + 'penambahan_modal' => [], + 'aset_produktif' => [], + 'aset_produktif_lainnya' => null, + 'status_kepemilikan_aset' => null, + 'infrastruktur_pascapanen' => [], + 'infrastruktur_pascapanen_lainnya' => null, + ], $data); + + $payload['unit_usaha'] = array_values($payload['unit_usaha'] ?? []); + $payload['pengurus_inti'] = $this->filterRows($payload['pengurus_inti'] ?? [], ['nama', 'aktif']); + $payload['penambahan_modal'] = $this->filterRows($payload['penambahan_modal'] ?? [], ['tahun', 'jumlah']); + $payload['aset_produktif'] = $this->filterRows($payload['aset_produktif'] ?? [], ['dipilih', 'jumlah', 'kondisi']); + $payload['infrastruktur_pascapanen'] = $this->filterRows($payload['infrastruktur_pascapanen'] ?? [], ['dipilih', 'jumlah', 'kondisi']); + + if (($payload['status_keaktifan'] ?? null) !== 'tidak_aktif_vakum') { + $payload['alasan_tidak_aktif'] = null; + } + + if (! in_array('jasa_lainnya', $payload['unit_usaha'], true)) { + $payload['unit_usaha_jasa_lainnya'] = null; + } + + if (($payload['status_unit_komoditas'] ?? null) !== 'ya') { + $payload['nama_unit_komoditas'] = null; + } + + if (($payload['status_ad_art'] ?? null) !== 'ada_lengkap') { + $payload['tahun_ad_art'] = null; + } + + if (! (bool) ($payload['memiliki_staf'] ?? false)) { + $payload['jumlah_staf'] = null; + $payload['unit_usaha_staf'] = null; + } + + if (! (bool) ($payload['pernah_penambahan_modal'] ?? false)) { + $payload['penambahan_modal'] = null; + } + + if (! collect($payload['aset_produktif'] ?? [])->contains(fn ($row) => ($row['aset'] ?? null) === 'lainnya')) { + $payload['aset_produktif_lainnya'] = null; + } + + if (! collect($payload['infrastruktur_pascapanen'] ?? [])->contains(fn ($row) => ($row['infrastruktur'] ?? null) === 'lainnya')) { + $payload['infrastruktur_pascapanen_lainnya'] = null; + } + + return $payload; + } + + private function filterRows(array $rows, array $valueKeys): array + { + return collect($rows) + ->map(function ($row) { + return collect($row) + ->map(fn ($value) => $value === '' ? null : $value) + ->all(); + }) + ->filter(function ($row) use ($valueKeys) { + foreach ($valueKeys as $key) { + if (filled($row[$key] ?? null)) { + return true; + } + } + + return false; + }) + ->values() + ->all(); + } + + private function kelembagaanAktorOptions(): array + { + return [ + 'statusBadanHukumOptions' => $this->statusBadanHukumOptions(), + 'statusKeaktifanOptions' => $this->statusKeaktifanOptions(), + 'unitUsahaOptions' => $this->unitUsahaOptions(), + 'statusUnitKomoditasOptions' => $this->statusUnitKomoditasOptions(), + 'statusAdArtOptions' => $this->statusAdArtOptions(), + 'pengurusIntiRows' => $this->pengurusIntiRows(), + 'asetProduktifRows' => $this->asetProduktifRows(), + 'statusKepemilikanAsetOptions' => $this->statusKepemilikanAsetOptions(), + 'infrastrukturPascapanenRows' => $this->infrastrukturPascapanenRows(), + 'kondisiInfrastrukturOptions' => $this->kondisiInfrastrukturOptions(), + ]; + } + + private function statusBadanHukumOptions(): array + { + return [ + 'sudah_berbadan_hukum' => 'Sudah berbadan hukum (terdaftar Kemenkumham)', + 'proses_pendaftaran' => 'Proses pendaftaran', + 'belum_berbadan_hukum' => 'Belum berbadan hukum', + 'tidak_tahu' => 'Tidak tahu', + ]; + } + + private function statusKeaktifanOptions(): array + { + return [ + 'aktif_penuh' => 'Aktif beroperasi penuh', + 'aktif_terbatas' => 'Aktif tapi terbatas (sebagian unit usaha berjalan)', + 'tidak_aktif_vakum' => 'Tidak aktif/vakum', + 'berdiri_belum_beroperasi' => 'Sudah berdiri tapi belum pernah beroperasi', + ]; + } + + private function unitUsahaOptions(): array + { + return [ + 'simpan_pinjam' => 'Simpan pinjam', + 'perdagangan_toko_desa' => 'Perdagangan/toko desa', + 'pengelolaan_air_bersih' => 'Pengelolaan air bersih', + 'wisata_desa_agrowisata' => 'Wisata desa/agrowisata', + 'pengelolaan_hasil_pertanian_komoditas' => 'Pengelolaan hasil pertanian/komoditas', + 'penyewaan_alat_aset' => 'Penyewaan alat/aset', + 'jasa_lainnya' => 'Jasa lainnya', + ]; + } + + private function statusUnitKomoditasOptions(): array + { + return [ + 'ya' => 'Ya, ada unit khusus', + 'ditangani_pengurus_inti' => 'Tidak ada unit khusus, ditangani langsung pengurus inti', + 'direncanakan' => 'Belum ada, masih direncanakan', + ]; + } + + private function statusAdArtOptions(): array + { + return [ + 'ada_lengkap' => 'Ada, lengkap', + 'ada_tidak_lengkap' => 'Ada tapi tidak lengkap', + 'tidak_ada' => 'Tidak ada', + 'tidak_tahu' => 'Tidak tahu', + ]; + } + + private function pengurusIntiRows(): array + { + return [ + 'penasihat_kepala_desa' => 'Penasihat (Kepala Desa)', + 'ketua_pengawas' => 'Ketua Pengawas', + 'direktur_ketua_bumdes' => 'Direktur/Ketua BUMDes', + 'sekretaris' => 'Sekretaris', + 'bendahara' => 'Bendahara', + 'kepala_unit_usaha_komoditas' => 'Kepala Unit Usaha Komoditas', + 'lainnya' => 'Lainnya', + ]; + } + + private function asetProduktifRows(): array + { + return [ + 'bangunan_kantor' => 'Bangunan / kantor', + 'gudang_penyimpanan' => 'Gudang penyimpanan', + 'kendaraan_operasional_angkut' => 'Kendaraan operasional/angkut', + 'lahan_usaha' => 'Lahan usaha', + 'alat_pengolahan_komoditas' => 'Alat pengolahan komoditas', + 'lainnya' => 'Lainnya', + ]; + } + + private function statusKepemilikanAsetOptions(): array + { + return [ + 'milik_bumdes_sendiri' => 'Milik BUMDes sendiri', + 'milik_desa_dipinjamkan_dikelola' => 'Milik desa (dipinjamkan/dikelola)', + 'sewa_pinjam_pihak_lain' => 'Sewa/pinjam pihak lain', + ]; + } + + private function infrastrukturPascapanenRows(): array + { + return [ + 'gudang_penyimpanan_hasil_panen' => 'Gudang penyimpanan hasil panen', + 'alat_mesin_pengering' => 'Alat/mesin pengering', + 'mesin_pulper_huller' => 'Mesin pulper/huller', + 'timbangan' => 'Timbangan', + 'alat_sortasi' => 'Alat sortasi', + 'lainnya' => 'Lainnya', + ]; + } + + private function kondisiInfrastrukturOptions(): array + { + return [ + 'baik_berfungsi' => 'Baik dan berfungsi', + 'rusak_tidak_terpakai' => 'Rusak/tidak terpakai', + ]; + } + + private function kelembagaanAktorValidationMessages(): array + { + return [ + 'integer' => ':attribute harus berupa angka.', + 'digits' => ':attribute harus terdiri dari :digits digit.', + 'min' => ':attribute tidak boleh kurang dari :min.', + 'max' => ':attribute tidak valid.', + 'in' => ':attribute tidak valid.', + 'array' => ':attribute harus berupa daftar data.', + 'boolean' => ':attribute harus dipilih.', + ]; + } + + private function kelembagaanAktorValidationAttributes(): array + { + return [ + 'status_badan_hukum' => 'Status badan hukum', + 'nomor_dasar_hukum' => 'Nomor dasar hukum', + 'tahun_dasar_hukum' => 'Tahun dasar hukum', + 'status_keaktifan' => 'Status keaktifan', + 'unit_usaha' => 'Unit usaha', + 'status_unit_komoditas' => 'Unit usaha komoditas', + 'status_ad_art' => 'Dokumen AD/ART', + 'memiliki_staf' => 'Status staf/karyawan', + 'jumlah_staf' => 'Jumlah staf', + 'modal_awal' => 'Modal awal', + 'tahun_modal_awal' => 'Tahun modal awal', + 'pernah_penambahan_modal' => 'Status penambahan modal', + 'status_kepemilikan_aset' => 'Status kepemilikan aset', + ]; + } } diff --git a/app/Http/Controllers/Web/Master/DesaKelurahanController.php b/app/Http/Controllers/Web/Master/DesaKelurahanController.php index 46b127e..d954985 100644 --- a/app/Http/Controllers/Web/Master/DesaKelurahanController.php +++ b/app/Http/Controllers/Web/Master/DesaKelurahanController.php @@ -51,9 +51,13 @@ class DesaKelurahanController extends Controller return response()->json($desa); } - public function getByKecamatan($kecamatan_id) + public function getByKecamatan(Request $request, $kecamatan_id) { - $desa = DesaKelurahan::where('kecamatan_id', $kecamatan_id) + $query = $request->boolean('all_wilayah') + ? DesaKelurahan::withoutGlobalScope('program') + : DesaKelurahan::query(); + + $desa = $query->where('kecamatan_id', $kecamatan_id) ->orderBy('nama', 'asc') ->get(); diff --git a/app/Http/Controllers/Web/Master/KabupatenKotaController.php b/app/Http/Controllers/Web/Master/KabupatenKotaController.php index 0e5747a..a671326 100644 --- a/app/Http/Controllers/Web/Master/KabupatenKotaController.php +++ b/app/Http/Controllers/Web/Master/KabupatenKotaController.php @@ -51,9 +51,13 @@ class KabupatenKotaController extends Controller return response()->json($kabupaten); } - public function getByProvinsi($provinsi_id) + public function getByProvinsi(Request $request, $provinsi_id) { - $kabupaten = KabupatenKota::where('provinsi_id', $provinsi_id) + $query = $request->boolean('all_wilayah') + ? KabupatenKota::withoutGlobalScope('program') + : KabupatenKota::query(); + + $kabupaten = $query->where('provinsi_id', $provinsi_id) ->orderBy('nama', 'asc') ->get(); diff --git a/app/Http/Controllers/Web/Master/KecamatanController.php b/app/Http/Controllers/Web/Master/KecamatanController.php index 5a8822e..040aff5 100644 --- a/app/Http/Controllers/Web/Master/KecamatanController.php +++ b/app/Http/Controllers/Web/Master/KecamatanController.php @@ -51,9 +51,13 @@ class KecamatanController extends Controller return response()->json($kecamatan); } - public function getByKabupaten($kabupaten_id) + public function getByKabupaten(Request $request, $kabupaten_id) { - $kecamatan = Kecamatan::where('kabupaten_kota_id', $kabupaten_id) + $query = $request->boolean('all_wilayah') + ? Kecamatan::withoutGlobalScope('program') + : Kecamatan::query(); + + $kecamatan = $query->where('kabupaten_kota_id', $kabupaten_id) ->orderBy('nama', 'asc') ->get(); diff --git a/app/Models/Bumdes/KelembagaanAktorBumdes.php b/app/Models/Bumdes/KelembagaanAktorBumdes.php new file mode 100644 index 0000000..6c91f8d --- /dev/null +++ b/app/Models/Bumdes/KelembagaanAktorBumdes.php @@ -0,0 +1,71 @@ + 'integer', + 'tahun_ad_art' => 'integer', + 'unit_usaha' => 'array', + 'pengurus_inti' => 'array', + 'memiliki_staf' => 'boolean', + 'jumlah_staf' => 'integer', + 'modal_awal' => 'decimal:2', + 'tahun_modal_awal' => 'integer', + 'pernah_penambahan_modal' => 'boolean', + 'penambahan_modal' => 'array', + 'aset_produktif' => 'array', + 'infrastruktur_pascapanen' => 'array', + ]; + + public function pengurusBumdes(): BelongsTo + { + return $this->belongsTo(PengurusBumdes::class, 'pengurus_bumdes_id'); + } + + public function creator(): BelongsTo + { + return $this->belongsTo(User::class, 'created_by'); + } +} diff --git a/app/Models/Bumdes/PengurusBumdes.php b/app/Models/Bumdes/PengurusBumdes.php index b91b49a..cf8c9c8 100644 --- a/app/Models/Bumdes/PengurusBumdes.php +++ b/app/Models/Bumdes/PengurusBumdes.php @@ -9,6 +9,7 @@ use App\Models\Wilayah\DesaKelurahan; use Carbon\Carbon; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\SoftDeletes; class PengurusBumdes extends Model @@ -105,4 +106,9 @@ class PengurusBumdes extends Model { return $this->belongsTo(User::class, 'created_by'); } + + public function kelembagaanAktor(): HasOne + { + return $this->hasOne(KelembagaanAktorBumdes::class, 'pengurus_bumdes_id'); + } } diff --git a/database/migrations/2026_08_20_000001_create_bumdes_kelembagaan_aktor_table.php b/database/migrations/2026_08_20_000001_create_bumdes_kelembagaan_aktor_table.php new file mode 100644 index 0000000..735d3aa --- /dev/null +++ b/database/migrations/2026_08_20_000001_create_bumdes_kelembagaan_aktor_table.php @@ -0,0 +1,50 @@ +id(); + $table->foreignId('pengurus_bumdes_id')->unique()->constrained('bumdes_pengurus')->onDelete('cascade'); + $table->string('status_badan_hukum')->nullable(); + $table->string('nomor_dasar_hukum')->nullable(); + $table->unsignedSmallInteger('tahun_dasar_hukum')->nullable(); + $table->string('status_keaktifan')->nullable(); + $table->text('alasan_tidak_aktif')->nullable(); + $table->json('unit_usaha')->nullable(); + $table->string('unit_usaha_jasa_lainnya')->nullable(); + $table->string('status_unit_komoditas')->nullable(); + $table->string('nama_unit_komoditas')->nullable(); + $table->string('status_ad_art')->nullable(); + $table->unsignedSmallInteger('tahun_ad_art')->nullable(); + $table->json('pengurus_inti')->nullable(); + $table->boolean('memiliki_staf')->nullable(); + $table->unsignedInteger('jumlah_staf')->nullable(); + $table->text('unit_usaha_staf')->nullable(); + $table->decimal('modal_awal', 18, 2)->nullable(); + $table->unsignedSmallInteger('tahun_modal_awal')->nullable(); + $table->boolean('pernah_penambahan_modal')->nullable(); + $table->json('penambahan_modal')->nullable(); + $table->json('aset_produktif')->nullable(); + $table->string('aset_produktif_lainnya')->nullable(); + $table->string('status_kepemilikan_aset')->nullable(); + $table->json('infrastruktur_pascapanen')->nullable(); + $table->string('infrastruktur_pascapanen_lainnya')->nullable(); + $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); + $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); + $table->timestamps(); + $table->softDeletes(); + }); + } + + public function down(): void + { + Schema::dropIfExists('bumdes_kelembagaan_aktor'); + } +}; diff --git a/resources/views/bumdes/kelembagaan-aktor/index.blade.php b/resources/views/bumdes/kelembagaan-aktor/index.blade.php index e3a0d75..ac8525b 100644 --- a/resources/views/bumdes/kelembagaan-aktor/index.blade.php +++ b/resources/views/bumdes/kelembagaan-aktor/index.blade.php @@ -1,7 +1,530 @@ @extends('layout.main') +@php + $fieldValue = function (string $field, $default = null) use ($kelembagaanAktor) { + return old($field, data_get($kelembagaanAktor, $field, $default)); + }; + + $arrayValue = function (string $field) use ($fieldValue) { + return (array) $fieldValue($field, []); + }; + + $rowValue = function (string $field, string $keyName, string $key) use ($fieldValue) { + return collect((array) $fieldValue($field, []))->firstWhere($keyName, $key) ?? []; + }; + + $rupiahValue = function ($value) { + if (! filled($value)) { + return ''; + } + + if (is_numeric($value)) { + return number_format((float) $value, 0, ',', '.'); + } + + return preg_replace('/\D/', '', (string) $value); + }; +@endphp + @section('content')
+ @if (session('success')) +
{{ session('success') }}
+ @endif + + @if ($errors->any()) +
+ +
+ @endif + @include('bumdes.profil.header', ['pengurus' => $pengurus]) + +
+ @csrf + +
+
+
Status Keberadaan, Keaktifan, Kepengurusan dan Modal BUMDes
+
+
+
Status Keberadaan dan Keaktifan
+ +
+ +
+ @foreach($statusBadanHukumOptions as $value => $label) +
+
+ + +
+
+ @endforeach +
+ @error('status_badan_hukum')
{{ $message }}
@enderror +
+ +
+
+ + + @error('nomor_dasar_hukum')
{{ $message }}
@enderror +
+
+ + + @error('tahun_dasar_hukum')
{{ $message }}
@enderror +
+
+ +
+ +
+ @foreach($statusKeaktifanOptions as $value => $label) +
+
+ + +
+
+ @endforeach +
+ @error('status_keaktifan')
{{ $message }}
@enderror +
+ +
+ + + @error('alasan_tidak_aktif')
{{ $message }}
@enderror +
+ +
Unit Usaha dan Dokumen Kelembagaan
+ +
+ +
+ @foreach($unitUsahaOptions as $value => $label) +
+
+ + +
+
+ @endforeach +
+ @error('unit_usaha')
{{ $message }}
@enderror +
+ +
+
+ + + @error('unit_usaha_jasa_lainnya')
{{ $message }}
@enderror +
+
+ +
+ +
+ @foreach($statusUnitKomoditasOptions as $value => $label) +
+
+ + +
+
+ @endforeach +
+ @error('status_unit_komoditas')
{{ $message }}
@enderror +
+ +
+
+ + + @error('nama_unit_komoditas')
{{ $message }}
@enderror +
+
+ +
+ +
+ @foreach($statusAdArtOptions as $value => $label) +
+
+ + +
+
+ @endforeach +
+ @error('status_ad_art')
{{ $message }}
@enderror +
+ +
+
+ + + @error('tahun_ad_art')
{{ $message }}
@enderror +
+
+ +
Kepengurusan dan Staf
+ +
+ + + + + + + + + + @foreach($pengurusIntiRows as $key => $label) + @php + $savedRow = $rowValue('pengurus_inti', 'jabatan', $key); + $aktifValue = old("pengurus_inti.$loop->index.aktif", data_get($savedRow, 'aktif')); + @endphp + + + + + + @endforeach + +
JabatanNamaKeaktifan
+ + {{ $label }} + + index.nama", data_get($savedRow, 'nama')) }}"> + +
+
+ + +
+
+ + +
+
+
+
+ +
+ +
+
+ + +
+
+ + +
+
+ @error('memiliki_staf')
{{ $message }}
@enderror +
+ +
+
+ +
+ + orang +
+ @error('jumlah_staf')
{{ $message }}
@enderror +
+
+ + + @error('unit_usaha_staf')
{{ $message }}
@enderror +
+
+ +
Modal dan Aset
+
+
+ +
+ Rp + +
+ @error('modal_awal')
{{ $message }}
@enderror +
+
+ + + @error('tahun_modal_awal')
{{ $message }}
@enderror +
+
+ +
+ +
+
+ + +
+
+ + +
+
+ @error('pernah_penambahan_modal')
{{ $message }}
@enderror +
+ +
+ +
+ + + + + + + + + @for($i = 0; $i < 3; $i++) + @php $savedRow = data_get($fieldValue('penambahan_modal', []), $i, []); @endphp + + + + + @endfor + +
TahunJumlah (Rp)
+ + +
+ Rp + +
+
+
+
+ + +
+ + + + + + + + + + @foreach($asetProduktifRows as $key => $label) + @php + $savedRow = $rowValue('aset_produktif', 'aset', $key); + $dipilih = old("aset_produktif.$loop->index.dipilih", data_get($savedRow, 'dipilih')); + @endphp + + + + + + @endforeach + +
Aset ProduktifJumlahKondisi
+ +
+ + +
+ @if($key === 'lainnya') + + @endif +
+ index.jumlah", data_get($savedRow, 'jumlah')) }}"> + + index.kondisi", data_get($savedRow, 'kondisi')) }}" placeholder="Contoh: Baik, rusak ringan"> +
+
+ +
+ +
+ @foreach($statusKepemilikanAsetOptions as $value => $label) +
+
+ + +
+
+ @endforeach +
+ @error('status_kepemilikan_aset')
{{ $message }}
@enderror +
+ + +
+ + + + + + + + + + @foreach($infrastrukturPascapanenRows as $key => $label) + @php + $savedRow = $rowValue('infrastruktur_pascapanen', 'infrastruktur', $key); + $dipilih = old("infrastruktur_pascapanen.$loop->index.dipilih", data_get($savedRow, 'dipilih')); + $kondisiValue = old("infrastruktur_pascapanen.$loop->index.kondisi", data_get($savedRow, 'kondisi')); + @endphp + + + + + + @endforeach + +
Infrastruktur PascapanenJumlahKondisi
+ +
+ + +
+ @if($key === 'lainnya') + + @endif +
+ index.jumlah", data_get($savedRow, 'jumlah')) }}"> + +
+ @foreach($kondisiInfrastrukturOptions as $kondisi => $kondisiLabel) +
+ + +
+ @endforeach +
+
+
+ +
+ Kembali + +
+
+
+
@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/bumdes/profil/_form.blade.php b/resources/views/bumdes/profil/_form.blade.php index e3231b5..d33f55d 100644 --- a/resources/views/bumdes/profil/_form.blade.php +++ b/resources/views/bumdes/profil/_form.blade.php @@ -164,7 +164,7 @@ if (provinsiId) { $.ajax({ - url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId), + url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId) + '?all_wilayah=1', method: 'GET', success: function(data) { $(`${prefix}-kabupaten`).empty().append(''); @@ -184,7 +184,7 @@ if (kabupatenId) { $.ajax({ - url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId), + url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId) + '?all_wilayah=1', method: 'GET', success: function(data) { $(`${prefix}-kecamatan`).empty().append(''); @@ -203,7 +203,7 @@ if (kecamatanId) { $.ajax({ - url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId), + url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId) + '?all_wilayah=1', method: 'GET', success: function(data) { $(`${prefix}-desa`).empty().append(''); diff --git a/routes/web.php b/routes/web.php index 8d41af5..eb53d12 100644 --- a/routes/web.php +++ b/routes/web.php @@ -247,7 +247,9 @@ Route::middleware('auth') Route::put('/aset-keuangan', [App\Http\Controllers\Web\Produktivitas\AsetKelompokTaniController::class, 'update'])->name('aset-keuangan.update'); Route::resource('bantuan-penilaian', App\Http\Controllers\Web\Produktivitas\BantuanKelompokTaniController::class)->only(['index', 'store', 'destroy'])->parameters(['bantuan-penilaian' => 'bantuan']); }); - // BUMDES routes... + + // BUMDES + Route::post('bumdes/{bumdes}/kelembagaan-aktor', [App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class, 'storeKelembagaanAktor'])->name('bumdes.kelembagaan-aktor.store'); Route::get('bumdes/{bumdes}/kelembagaan-aktor', [App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class, 'kelembagaanAktor'])->name('bumdes.kelembagaan-aktor.index'); Route::resource('bumdes', App\Http\Controllers\Web\Bumdes\PengurusBumdesController::class);