route('pengurusBumdes'); if ($pengurus instanceof PengurusBumdes && $this->user()->role === Role::ENUMERATOR) { abort_unless((int) $pengurus->created_by === (int) $this->user()->id, 404); } if ($pengurus instanceof PengurusBumdes && $this->routeIs('bumdes.operasional.*', 'bumdes.kelembagaan-aktor.*', 'bumdes.rantai-nilai.*')) { abort_unless($pengurus->profilLengkap(), 403); } return true; } public function rules(): array { return []; } protected function sectionRules(string $section): array { $maxYear = now()->year + 1; $rules = [ 'status_badan_hukum' => ['nullable', Rule::enum(StatusBadanHukumBumdes::class)], 'nomor_dasar_hukum' => [Rule::excludeIf($this->input('status_badan_hukum') !== 'sudah_berbadan_hukum'), 'required_if:status_badan_hukum,sudah_berbadan_hukum', 'string', 'max:255'], 'tahun_dasar_hukum' => [Rule::excludeIf($this->input('status_badan_hukum') !== 'sudah_berbadan_hukum'), 'required_if:status_badan_hukum,sudah_berbadan_hukum', 'integer', 'digits:4', 'min:1900', 'max:'.$maxYear], 'status_keaktifan' => ['nullable', Rule::enum(StatusKeaktifanBumdes::class)], 'alasan_tidak_aktif' => ['nullable', 'string'], 'unit_usaha' => ['nullable', 'array'], 'unit_usaha.*' => ['string', Rule::enum(UnitUsahaBumdes::class)], 'unit_usaha_jasa_lainnya' => ['nullable', 'string', 'max:255'], 'status_unit_komoditas' => ['nullable', Rule::enum(StatusUnitKomoditasBumdes::class)], 'nama_unit_komoditas' => [Rule::excludeIf($this->input('status_unit_komoditas') !== 'ya'), 'required_if:status_unit_komoditas,ya', 'string', 'max:255'], 'status_ad_art' => ['nullable', Rule::enum(StatusAdArtBumdes::class)], 'tahun_ad_art' => [Rule::excludeIf($this->input('status_ad_art') !== 'ada_lengkap'), 'required_if:status_ad_art,ada_lengkap', 'integer', 'digits:4', 'min:1900', 'max:'.$maxYear], 'pengurus_inti' => ['nullable', 'array'], 'pengurus_inti.*' => ['array'], 'pengurus_inti.*.jabatan' => ['nullable', Rule::enum(JabatanPengurusIntiBumdes::class)], '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' => [Rule::excludeIf(! $this->boolean('pernah_penambahan_modal')), 'nullable', 'array'], 'penambahan_modal.*' => [Rule::excludeIf(! $this->boolean('pernah_penambahan_modal')), 'array'], 'penambahan_modal.*.tahun' => [Rule::excludeIf(! $this->boolean('pernah_penambahan_modal')), 'nullable', 'integer', 'digits:4', 'min:1900', 'max:'.$maxYear], 'penambahan_modal.*.jumlah' => [Rule::excludeIf(! $this->boolean('pernah_penambahan_modal')), 'nullable', 'integer', 'min:0'], 'aset_produktif' => ['nullable', 'array'], 'aset_produktif.*' => ['array'], 'aset_produktif.*.aset' => ['nullable', Rule::enum(AsetProduktifBumdes::class)], 'aset_produktif.*.dipilih' => ['nullable', 'boolean'], 'aset_produktif.*.jumlah' => ['nullable', 'integer', 'min:0'], 'aset_produktif.*.kondisi' => ['nullable', 'string', 'max:255'], 'aset_produktif_lainnya' => ['nullable', 'string', 'max:255'], 'status_kepemilikan_aset' => ['nullable', Rule::enum(StatusKepemilikanAsetBumdes::class)], 'infrastruktur_pascapanen' => ['nullable', 'array'], 'infrastruktur_pascapanen.*' => ['array'], 'infrastruktur_pascapanen.*.infrastruktur' => ['nullable', Rule::enum(InfrastrukturPascapanenBumdes::class)], 'infrastruktur_pascapanen.*.dipilih' => ['nullable', 'boolean'], 'infrastruktur_pascapanen.*.jumlah' => ['nullable', 'integer', 'min:0'], 'infrastruktur_pascapanen.*.kondisi' => ['nullable', Rule::enum(KondisiInfrastrukturBumdes::class)], 'infrastruktur_pascapanen_lainnya' => ['nullable', 'string', 'max:255'], ]; $fields = KelembagaanAktorBumdes::sectionFields($section); $rules = array_filter($rules, fn ($field) => in_array(Str::before($field, '.'), $fields, true), ARRAY_FILTER_USE_KEY); return $rules; } public function messages(): array { return [ 'nomor_dasar_hukum.required_if' => 'Nomor Peraturan Desa/SK wajib diisi.', 'tahun_dasar_hukum.required_if' => 'Tahun Ditetapkan wajib diisi.', 'nama_unit_komoditas.required_if' => 'Nama Unit Usaha Komoditas wajib diisi.', 'tahun_ad_art.required_if' => 'Tahun Terakhir Diperbarui wajib diisi.', 'string' => ':attribute harus berupa teks.', 'required' => ':attribute wajib diisi.', 'exists' => ':attribute tidak ditemukan.', 'integer' => ':attribute harus berupa angka.', 'digits' => ':attribute harus terdiri dari :digits digit.', 'min' => ':attribute tidak boleh kurang dari :min.', 'max' => ':attribute tidak valid.', 'enum' => 'Pilihan :attribute tidak valid.', 'in' => ':attribute tidak valid.', 'array' => ':attribute harus berupa daftar data.', 'boolean' => ':attribute harus dipilih.', ]; } public function attributes(): array { return [ 'search' => 'Pencarian', 'kabupaten_kota_id' => 'Kabupaten/Kota', 'kabupaten_id' => 'Kabupaten/Kota', 'provinsi_id' => 'Provinsi', 'kecamatan_id' => 'Kecamatan', 'desa_kelurahan_id' => 'Desa/Kelurahan', 'jenis_kelamin' => 'Jenis kelamin', 'per_page' => 'Jumlah data per halaman', 'nama' => 'Nama', 'tempat_lahir' => 'Tempat lahir', 'tanggal_lahir' => 'Tanggal lahir', 'pendidikan_terakhir' => 'Pendidikan terakhir', 'alamat' => 'Alamat', 'nomor_telepon' => 'Nomor telepon', 'jabatan' => 'Jabatan/peran', 'jabatan_lainnya' => 'Jabatan lainnya', 'lama_menjabat_tahun' => 'Lama menjabat', 'pengurus_inti' => 'Daftar Pengurus', 'pengurus_inti.*.jabatan' => 'Jabatan pengurus', 'pengurus_inti.*.nama' => 'Nama pengurus', 'pengurus_inti.*.aktif' => 'Keaktifan pengurus', 'status_badan_hukum' => 'Status badan hukum', 'nomor_dasar_hukum' => 'Nomor Peraturan Desa/SK', 'tahun_dasar_hukum' => 'Tahun Ditetapkan', 'nama_unit_komoditas' => 'Nama Unit Usaha Komoditas', 'tahun_ad_art' => 'Tahun Terakhir Diperbarui', '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', 'penambahan_modal' => 'Rincian penambahan modal', 'penambahan_modal.*.tahun' => 'Tahun penambahan modal pada baris :position', 'penambahan_modal.*.jumlah' => 'Jumlah penambahan modal pada baris :position', 'status_kepemilikan_aset' => 'Status kepemilikan aset', 'alasan_tidak_aktif' => 'Alasan tidak aktif', 'unit_usaha.*' => 'Pilihan unit usaha', 'unit_usaha_jasa_lainnya' => 'Jasa lainnya', 'unit_usaha_staf' => 'Unit usaha staf', 'pengurus_inti.*' => 'Data pengurus pada baris :position', 'penambahan_modal.*' => 'Penambahan modal pada baris :position', 'aset_produktif' => 'Aset produktif', 'aset_produktif.*' => 'Data aset produktif pada baris :position', 'aset_produktif.*.aset' => 'Jenis aset produktif', 'aset_produktif.*.dipilih' => 'Pilihan aset produktif', 'aset_produktif.*.jumlah' => 'Jumlah aset produktif', 'aset_produktif.*.kondisi' => 'Kondisi aset produktif', 'aset_produktif_lainnya' => 'Aset produktif lainnya', 'infrastruktur_pascapanen' => 'Infrastruktur pascapanen', 'infrastruktur_pascapanen.*' => 'Data infrastruktur pada baris :position', 'infrastruktur_pascapanen.*.infrastruktur' => 'Jenis infrastruktur', 'infrastruktur_pascapanen.*.dipilih' => 'Pilihan infrastruktur', 'infrastruktur_pascapanen.*.jumlah' => 'Jumlah infrastruktur', 'infrastruktur_pascapanen.*.kondisi' => 'Kondisi infrastruktur', 'infrastruktur_pascapanen_lainnya' => 'Infrastruktur lainnya', ]; } }