This commit is contained in:
2026-09-18 16:22:57 +07:00
10 changed files with 1049 additions and 23 deletions
@@ -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',
];
}
}
@@ -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();
@@ -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();
@@ -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();
@@ -0,0 +1,71 @@
<?php
namespace App\Models\Bumdes;
use App\Models\User;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\SoftDeletes;
class KelembagaanAktorBumdes extends Model
{
use SoftDeletes;
protected $table = 'bumdes_kelembagaan_aktor';
protected $fillable = [
'pengurus_bumdes_id',
'status_badan_hukum',
'nomor_dasar_hukum',
'tahun_dasar_hukum',
'status_keaktifan',
'alasan_tidak_aktif',
'unit_usaha',
'unit_usaha_jasa_lainnya',
'status_unit_komoditas',
'nama_unit_komoditas',
'status_ad_art',
'tahun_ad_art',
'pengurus_inti',
'memiliki_staf',
'jumlah_staf',
'unit_usaha_staf',
'modal_awal',
'tahun_modal_awal',
'pernah_penambahan_modal',
'penambahan_modal',
'aset_produktif',
'aset_produktif_lainnya',
'status_kepemilikan_aset',
'infrastruktur_pascapanen',
'infrastruktur_pascapanen_lainnya',
'created_by',
'updated_by',
'deleted_by',
];
protected $casts = [
'tahun_dasar_hukum' => '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');
}
}
+6
View File
@@ -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');
}
}
@@ -0,0 +1,50 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('bumdes_kelembagaan_aktor', function (Blueprint $table) {
$table->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');
}
};
@@ -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')
<div class="container-xxl flex-grow-1 container-p-y">
@if (session('success'))
<div class="alert alert-success">{{ session('success') }}</div>
@endif
@if ($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@include('bumdes.profil.header', ['pengurus' => $pengurus])
<form method="POST" action="{{ route('bumdes.kelembagaan-aktor.store', $pengurus->id) }}" id="kelembagaanAktorForm">
@csrf
<div class="card mb-6">
<div class="card-header border-bottom">
<h5 class="card-title mb-0">Status Keberadaan, Keaktifan, Kepengurusan dan Modal BUMDes</h5>
</div>
<div class="card-body pt-6">
<h5 class="pb-4 border-bottom mb-4">Status Keberadaan dan Keaktifan</h5>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Apakah BUMDes sudah berbadan hukum?</label>
<div class="d-flex flex-column">
@foreach($statusBadanHukumOptions as $value => $label)
<div>
<div class="form-check">
<input class="form-check-input" type="radio" id="status-badan-hukum-{{ $value }}" name="status_badan_hukum" value="{{ $value }}" @checked($fieldValue('status_badan_hukum') === $value)>
<label class="form-check-label" for="status-badan-hukum-{{ $value }}">{{ $label }}</label>
</div>
</div>
@endforeach
</div>
@error('status_badan_hukum')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="row">
<div class="col-md-6 mb-5 form-control-validation">
<label class="form-label" for="nomor-dasar-hukum">Dasar hukum pendirian BUMDes (Peraturan Desa/SK) - Nomor</label>
<input type="text" class="form-control @error('nomor_dasar_hukum') is-invalid @enderror" id="nomor-dasar-hukum" name="nomor_dasar_hukum" value="{{ $fieldValue('nomor_dasar_hukum') }}" placeholder="Contoh: Perdes No. 02/2024">
@error('nomor_dasar_hukum')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-3 mb-5 form-control-validation">
<label class="form-label" for="tahun-dasar-hukum">Tahun ditetapkan</label>
<input type="number" class="form-control @error('tahun_dasar_hukum') is-invalid @enderror" id="tahun-dasar-hukum" name="tahun_dasar_hukum" value="{{ $fieldValue('tahun_dasar_hukum') }}" placeholder="Contoh: 2024">
@error('tahun_dasar_hukum')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Bagaimana status keaktifan BUMDes?</label>
<div class="d-flex flex-column">
@foreach($statusKeaktifanOptions as $value => $label)
<div>
<div class="form-check">
<input class="form-check-input" type="radio" id="status-keaktifan-{{ $value }}" name="status_keaktifan" value="{{ $value }}" @checked($fieldValue('status_keaktifan') === $value)>
<label class="form-check-label" for="status-keaktifan-{{ $value }}">{{ $label }}</label>
</div>
</div>
@endforeach
</div>
@error('status_keaktifan')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="mb-5 form-control-validation" id="alasan-tidak-aktif-wrapper">
<label class="form-label" for="alasan-tidak-aktif">Jika tidak aktif/vakum, apa alasan utamanya?</label>
<textarea class="form-control @error('alasan_tidak_aktif') is-invalid @enderror" id="alasan-tidak-aktif" name="alasan_tidak_aktif" rows="2" placeholder="Tuliskan alasan utama BUMDes tidak aktif/vakum">{{ $fieldValue('alasan_tidak_aktif') }}</textarea>
@error('alasan_tidak_aktif')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<h5 class="pb-4 border-bottom mb-4 mt-4">Unit Usaha dan Dokumen Kelembagaan</h5>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Unit usaha yang dimiliki BUMDes saat ini (boleh pilih lebih dari satu)</label>
<div class="d-flex flex-column">
@foreach($unitUsahaOptions as $value => $label)
<div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="unit-usaha-{{ $value }}" name="unit_usaha[]" value="{{ $value }}" @checked(in_array($value, $arrayValue('unit_usaha'), true))>
<label class="form-check-label" for="unit-usaha-{{ $value }}">{{ $label }}</label>
</div>
</div>
@endforeach
</div>
@error('unit_usaha')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="row" id="unit-usaha-jasa-lainnya-wrapper">
<div class="col-md-6 mb-5 form-control-validation">
<label class="form-label" for="unit-usaha-jasa-lainnya">Jasa lainnya</label>
<input type="text" class="form-control @error('unit_usaha_jasa_lainnya') is-invalid @enderror" id="unit-usaha-jasa-lainnya" name="unit_usaha_jasa_lainnya" value="{{ $fieldValue('unit_usaha_jasa_lainnya') }}" placeholder="Sebutkan jasa lainnya">
@error('unit_usaha_jasa_lainnya')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Apakah ada unit usaha khusus yang menangani komoditas kopi/kakao/vanili/kemiri?</label>
<div class="d-flex flex-column">
@foreach($statusUnitKomoditasOptions as $value => $label)
<div>
<div class="form-check">
<input class="form-check-input" type="radio" id="status-unit-komoditas-{{ $value }}" name="status_unit_komoditas" value="{{ $value }}" @checked($fieldValue('status_unit_komoditas') === $value)>
<label class="form-check-label" for="status-unit-komoditas-{{ $value }}">{{ $label }}</label>
</div>
</div>
@endforeach
</div>
@error('status_unit_komoditas')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="row" id="nama-unit-komoditas-wrapper">
<div class="col-md-6 mb-5 form-control-validation">
<label class="form-label" for="nama-unit-komoditas">Nama unit usaha komoditas</label>
<input type="text" class="form-control @error('nama_unit_komoditas') is-invalid @enderror" id="nama-unit-komoditas" name="nama_unit_komoditas" value="{{ $fieldValue('nama_unit_komoditas') }}" placeholder="Contoh: Unit Pengolahan Kopi">
@error('nama_unit_komoditas')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Apakah ada dokumen kelembagaan (AD/ART)?</label>
<div class="d-flex flex-column">
@foreach($statusAdArtOptions as $value => $label)
<div>
<div class="form-check">
<input class="form-check-input" type="radio" id="status-ad-art-{{ $value }}" name="status_ad_art" value="{{ $value }}" @checked($fieldValue('status_ad_art') === $value)>
<label class="form-check-label" for="status-ad-art-{{ $value }}">{{ $label }}</label>
</div>
</div>
@endforeach
</div>
@error('status_ad_art')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="row" id="tahun-ad-art-wrapper">
<div class="col-md-3 mb-5 form-control-validation">
<label class="form-label" for="tahun-ad-art">Terakhir diperbarui tahun</label>
<input type="number" class="form-control @error('tahun_ad_art') is-invalid @enderror" id="tahun-ad-art" name="tahun_ad_art" value="{{ $fieldValue('tahun_ad_art') }}" placeholder="Contoh: 2024">
@error('tahun_ad_art')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<h5 class="pb-4 border-bottom mb-4 mt-4">Kepengurusan dan Staf</h5>
<label class="form-label d-block fw-semibold">Catat pengurus inti yang aktif menjabat saat ini</label>
<div class="table-responsive mb-5">
<table class="table table-bordered align-middle">
<thead>
<tr>
<th style="width: 30%;">Jabatan</th>
<th>Nama</th>
<th style="width: 22%;">Keaktifan</th>
</tr>
</thead>
<tbody>
@foreach($pengurusIntiRows as $key => $label)
@php
$savedRow = $rowValue('pengurus_inti', 'jabatan', $key);
$aktifValue = old("pengurus_inti.$loop->index.aktif", data_get($savedRow, 'aktif'));
@endphp
<tr>
<td>
<input type="hidden" name="pengurus_inti[{{ $loop->index }}][jabatan]" value="{{ $key }}">
{{ $label }}
</td>
<td>
<input type="text" class="form-control" name="pengurus_inti[{{ $loop->index }}][nama]" value="{{ old("pengurus_inti.$loop->index.nama", data_get($savedRow, 'nama')) }}">
</td>
<td>
<div class="d-flex flex-column">
<div class="form-check mb-0">
<input class="form-check-input" type="radio" id="pengurus-inti-{{ $key }}-aktif" name="pengurus_inti[{{ $loop->index }}][aktif]" value="1" @checked((string) $aktifValue === '1')>
<label class="form-check-label" for="pengurus-inti-{{ $key }}-aktif">Aktif</label>
</div>
<div class="form-check mb-0">
<input class="form-check-input" type="radio" id="pengurus-inti-{{ $key }}-tidak" name="pengurus_inti[{{ $loop->index }}][aktif]" value="0" @checked((string) $aktifValue === '0')>
<label class="form-check-label" for="pengurus-inti-{{ $key }}-tidak">Tidak</label>
</div>
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Apakah BUMDes memiliki staf/karyawan di luar pengurus inti?</label>
<div class="d-flex flex-column">
<div class="form-check">
<input class="form-check-input" type="radio" id="memiliki-staf-ya" name="memiliki_staf" value="1" @checked((string) $fieldValue('memiliki_staf') === '1')>
<label class="form-check-label" for="memiliki-staf-ya">Ya</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" id="memiliki-staf-tidak" name="memiliki_staf" value="0" @checked((string) $fieldValue('memiliki_staf') === '0')>
<label class="form-check-label" for="memiliki-staf-tidak">Tidak ada, dikelola langsung pengurus</label>
</div>
</div>
@error('memiliki_staf')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="row" id="staf-detail-wrapper">
<div class="col-md-3 mb-5 form-control-validation">
<label class="form-label" for="jumlah-staf">Jumlah staf</label>
<div class="input-group">
<input type="number" min="0" class="form-control @error('jumlah_staf') is-invalid @enderror" id="jumlah-staf" name="jumlah_staf" value="{{ $fieldValue('jumlah_staf') }}">
<span class="input-group-text">orang</span>
</div>
@error('jumlah_staf')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="col-md-9 mb-5 form-control-validation">
<label class="form-label" for="unit-usaha-staf">Jika ada, untuk unit usaha apa staf tersebut bekerja?</label>
<input type="text" class="form-control @error('unit_usaha_staf') is-invalid @enderror" id="unit-usaha-staf" name="unit_usaha_staf" value="{{ $fieldValue('unit_usaha_staf') }}" placeholder="Contoh: Unit perdagangan/toko desa">
@error('unit_usaha_staf')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<h5 class="pb-4 border-bottom mb-4 mt-4">Modal dan Aset</h5>
<div class="row">
<div class="col-md-4 mb-5 form-control-validation">
<label class="form-label" for="modal-awal">Besaran modal awal BUMDes (jika diketahui)</label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input type="text" inputmode="numeric" class="form-control rupiah-input @error('modal_awal') is-invalid @enderror" id="modal-awal" name="modal_awal" value="{{ $rupiahValue($fieldValue('modal_awal')) }}">
</div>
@error('modal_awal')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="col-md-3 mb-5 form-control-validation">
<label class="form-label" for="tahun-modal-awal">Tahun diterima</label>
<input type="number" class="form-control @error('tahun_modal_awal') is-invalid @enderror" id="tahun-modal-awal" name="tahun_modal_awal" value="{{ $fieldValue('tahun_modal_awal') }}" placeholder="Contoh: 2024">
@error('tahun_modal_awal')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Apakah BUMDes pernah menerima penambahan modal sejak pertama kali berdiri?</label>
<div class="d-flex flex-column">
<div class="form-check">
<input class="form-check-input" type="radio" id="penambahan-modal-ya" name="pernah_penambahan_modal" value="1" @checked((string) $fieldValue('pernah_penambahan_modal') === '1')>
<label class="form-check-label" for="penambahan-modal-ya">Ya, pernah</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" id="penambahan-modal-tidak" name="pernah_penambahan_modal" value="0" @checked((string) $fieldValue('pernah_penambahan_modal') === '0')>
<label class="form-check-label" for="penambahan-modal-tidak">Tidak pernah menerima penambahan modal</label>
</div>
</div>
@error('pernah_penambahan_modal')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div id="penambahan-modal-wrapper">
<label class="form-label d-block fw-semibold">Jika BUMDes pernah menerima penambahan modal, isi rincian penambahan modal 3 tahun terakhir</label>
<div class="table-responsive mb-5">
<table class="table table-bordered align-middle">
<thead>
<tr>
<th>Tahun</th>
<th>Jumlah (Rp)</th>
</tr>
</thead>
<tbody>
@for($i = 0; $i < 3; $i++)
@php $savedRow = data_get($fieldValue('penambahan_modal', []), $i, []); @endphp
<tr>
<td>
<input type="number" class="form-control" name="penambahan_modal[{{ $i }}][tahun]" value="{{ old("penambahan_modal.$i.tahun", data_get($savedRow, 'tahun')) }}" placeholder="Contoh: 2024">
</td>
<td>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input type="text" inputmode="numeric" class="form-control rupiah-input" name="penambahan_modal[{{ $i }}][jumlah]" value="{{ $rupiahValue(old("penambahan_modal.$i.jumlah", data_get($savedRow, 'jumlah'))) }}">
</div>
</td>
</tr>
@endfor
</tbody>
</table>
</div>
</div>
<label class="form-label d-block fw-semibold">Aset produktif yang dimiliki BUMDes (boleh pilih lebih dari satu, lewati jika tidak ada)</label>
<div class="table-responsive mb-5">
<table class="table table-bordered align-middle">
<thead>
<tr>
<th style="width: 34%;">Aset Produktif</th>
<th>Jumlah</th>
<th>Kondisi</th>
</tr>
</thead>
<tbody>
@foreach($asetProduktifRows as $key => $label)
@php
$savedRow = $rowValue('aset_produktif', 'aset', $key);
$dipilih = old("aset_produktif.$loop->index.dipilih", data_get($savedRow, 'dipilih'));
@endphp
<tr>
<td>
<input type="hidden" name="aset_produktif[{{ $loop->index }}][aset]" value="{{ $key }}">
<div class="form-check">
<input class="form-check-input aset-produktif-check" type="checkbox" id="aset-produktif-{{ $key }}" name="aset_produktif[{{ $loop->index }}][dipilih]" value="1" data-target="{{ $key }}" @checked((string) $dipilih === '1')>
<label class="form-check-label" for="aset-produktif-{{ $key }}">{{ $label }}</label>
</div>
@if($key === 'lainnya')
<input type="text" class="form-control mt-2" id="aset-produktif-lainnya" name="aset_produktif_lainnya" value="{{ $fieldValue('aset_produktif_lainnya') }}" placeholder="Sebutkan aset lainnya">
@endif
</td>
<td>
<input type="text" class="form-control" name="aset_produktif[{{ $loop->index }}][jumlah]" value="{{ old("aset_produktif.$loop->index.jumlah", data_get($savedRow, 'jumlah')) }}">
</td>
<td>
<input type="text" class="form-control" name="aset_produktif[{{ $loop->index }}][kondisi]" value="{{ old("aset_produktif.$loop->index.kondisi", data_get($savedRow, 'kondisi')) }}" placeholder="Contoh: Baik, rusak ringan">
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="mb-5 form-control-validation">
<label class="form-label d-block fw-semibold">Status kepemilikan aset (lewati jika tidak ada)</label>
<div class="d-flex flex-column">
@foreach($statusKepemilikanAsetOptions as $value => $label)
<div>
<div class="form-check">
<input class="form-check-input" type="radio" id="status-kepemilikan-aset-{{ $value }}" name="status_kepemilikan_aset" value="{{ $value }}" @checked($fieldValue('status_kepemilikan_aset') === $value)>
<label class="form-check-label" for="status-kepemilikan-aset-{{ $value }}">{{ $label }}</label>
</div>
</div>
@endforeach
</div>
@error('status_kepemilikan_aset')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<label class="form-label d-block fw-semibold">Ketersediaan infrastruktur pascapanen untuk komoditas kopi/kakao/vanili/kemiri</label>
<div class="table-responsive mb-5">
<table class="table table-bordered align-middle">
<thead>
<tr>
<th style="width: 34%;">Infrastruktur Pascapanen</th>
<th>Jumlah</th>
<th style="width: 34%;">Kondisi</th>
</tr>
</thead>
<tbody>
@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
<tr>
<td>
<input type="hidden" name="infrastruktur_pascapanen[{{ $loop->index }}][infrastruktur]" value="{{ $key }}">
<div class="form-check">
<input class="form-check-input infrastruktur-check" type="checkbox" id="infrastruktur-{{ $key }}" name="infrastruktur_pascapanen[{{ $loop->index }}][dipilih]" value="1" data-target="{{ $key }}" @checked((string) $dipilih === '1')>
<label class="form-check-label" for="infrastruktur-{{ $key }}">{{ $label }}</label>
</div>
@if($key === 'lainnya')
<input type="text" class="form-control mt-2" id="infrastruktur-pascapanen-lainnya" name="infrastruktur_pascapanen_lainnya" value="{{ $fieldValue('infrastruktur_pascapanen_lainnya') }}" placeholder="Sebutkan infrastruktur lainnya">
@endif
</td>
<td>
<input type="text" class="form-control" name="infrastruktur_pascapanen[{{ $loop->index }}][jumlah]" value="{{ old("infrastruktur_pascapanen.$loop->index.jumlah", data_get($savedRow, 'jumlah')) }}">
</td>
<td>
<div class="d-flex flex-column">
@foreach($kondisiInfrastrukturOptions as $kondisi => $kondisiLabel)
<div class="form-check mb-0">
<input class="form-check-input" type="radio" id="infrastruktur-{{ $key }}-{{ $kondisi }}" name="infrastruktur_pascapanen[{{ $loop->parent->index }}][kondisi]" value="{{ $kondisi }}" @checked($kondisiValue === $kondisi)>
<label class="form-check-label" for="infrastruktur-{{ $key }}-{{ $kondisi }}">{{ $kondisiLabel }}</label>
</div>
@endforeach
</div>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="mt-4 text-end">
<a href="{{ route('bumdes.index') }}" class="btn btn-secondary me-2 wave-effect wave-light">Kembali</a>
<button type="submit" class="btn btn-success data-submit wave-effect wave-light">
<i class="ti tabler-device-floppy me-2"></i>Simpan Kelembagaan dan Aktor
</button>
</div>
</div>
</div>
</form>
</div>
@endsection
@push('scripts')
<script>
'use strict';
$(document).ready(function () {
function onlyDigits(value) {
return String(value || '').replace(/\D/g, '');
}
function formatRupiah(value) {
return onlyDigits(value).replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
function toggleWrapper($wrapper, enabled) {
$wrapper.toggleClass('d-none', !enabled);
setFieldsEnabled($wrapper, enabled);
}
function setFieldsEnabled($wrapper, enabled) {
$wrapper.find('input, textarea, select').prop('disabled', !enabled);
if (!enabled) {
$wrapper.find('input:not([type="radio"]):not([type="checkbox"]), textarea').val('');
$wrapper.find('input[type="radio"], input[type="checkbox"]').prop('checked', false);
}
}
function syncStatusKeaktifan() {
setFieldsEnabled($('#alasan-tidak-aktif-wrapper'), $('input[name="status_keaktifan"]:checked').val() === 'tidak_aktif_vakum');
}
function syncUnitUsahaLainnya() {
toggleWrapper($('#unit-usaha-jasa-lainnya-wrapper'), $('input[name="unit_usaha[]"][value="jasa_lainnya"]').is(':checked'));
}
function syncUnitKomoditas() {
toggleWrapper($('#nama-unit-komoditas-wrapper'), $('input[name="status_unit_komoditas"]:checked').val() === 'ya');
}
function syncAdArt() {
toggleWrapper($('#tahun-ad-art-wrapper'), $('input[name="status_ad_art"]:checked').val() === 'ada_lengkap');
}
function syncStaf() {
setFieldsEnabled($('#staf-detail-wrapper'), $('input[name="memiliki_staf"]:checked').val() === '1');
}
function syncPenambahanModal() {
setFieldsEnabled($('#penambahan-modal-wrapper'), $('input[name="pernah_penambahan_modal"]:checked').val() === '1');
}
function syncAsetLainnya() {
$('#aset-produktif-lainnya').prop('disabled', !$('input.aset-produktif-check[data-target="lainnya"]').is(':checked'));
if ($('#aset-produktif-lainnya').prop('disabled')) {
$('#aset-produktif-lainnya').val('');
}
}
function syncInfrastrukturLainnya() {
$('#infrastruktur-pascapanen-lainnya').prop('disabled', !$('input.infrastruktur-check[data-target="lainnya"]').is(':checked'));
if ($('#infrastruktur-pascapanen-lainnya').prop('disabled')) {
$('#infrastruktur-pascapanen-lainnya').val('');
}
}
$(document).on('input', '.rupiah-input', function () {
const cursorAtEnd = this.selectionStart === this.value.length;
this.value = formatRupiah(this.value);
if (cursorAtEnd) {
this.setSelectionRange(this.value.length, this.value.length);
}
});
$('.rupiah-input').each(function () {
this.value = formatRupiah(this.value);
});
$('input[name="status_keaktifan"]').on('change', syncStatusKeaktifan);
$('input[name="unit_usaha[]"]').on('change', syncUnitUsahaLainnya);
$('input[name="status_unit_komoditas"]').on('change', syncUnitKomoditas);
$('input[name="status_ad_art"]').on('change', syncAdArt);
$('input[name="memiliki_staf"]').on('change', syncStaf);
$('input[name="pernah_penambahan_modal"]').on('change', syncPenambahanModal);
$('.aset-produktif-check').on('change', syncAsetLainnya);
$('.infrastruktur-check').on('change', syncInfrastrukturLainnya);
$('#kelembagaanAktorForm').on('submit', function () {
$(this).find('.rupiah-input').each(function () {
this.value = onlyDigits(this.value);
});
});
syncStatusKeaktifan();
syncUnitUsahaLainnya();
syncUnitKomoditas();
syncAdArt();
syncStaf();
syncPenambahanModal();
syncAsetLainnya();
syncInfrastrukturLainnya();
});
</script>
@endpush
@@ -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('<option value="">Pilih Kabupaten/Kota</option>');
@@ -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('<option value="">Pilih Kecamatan</option>');
@@ -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('<option value="">Pilih Desa/Kelurahan</option>');
+3 -1
View File
@@ -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);