175 lines
9.9 KiB
PHP
175 lines
9.9 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Requests\Bumdes;
|
|
|
|
use App\Enums\Bumdes\AsetProduktifBumdes;
|
|
use App\Enums\Bumdes\InfrastrukturPascapanenBumdes;
|
|
use App\Enums\Bumdes\JabatanPengurusIntiBumdes;
|
|
use App\Enums\Bumdes\KondisiInfrastrukturBumdes;
|
|
use App\Enums\Bumdes\StatusAdArtBumdes;
|
|
use App\Enums\Bumdes\StatusBadanHukumBumdes;
|
|
use App\Enums\Bumdes\StatusKeaktifanBumdes;
|
|
use App\Enums\Bumdes\StatusKepemilikanAsetBumdes;
|
|
use App\Enums\Bumdes\StatusUnitKomoditasBumdes;
|
|
use App\Enums\Bumdes\UnitUsahaBumdes;
|
|
use App\Enums\Role;
|
|
use App\Models\Bumdes\KelembagaanAktorBumdes;
|
|
use App\Models\Bumdes\PengurusBumdes;
|
|
use Illuminate\Foundation\Http\FormRequest;
|
|
use Illuminate\Support\Facades\Gate;
|
|
use Illuminate\Support\Str;
|
|
use Illuminate\Validation\Rule;
|
|
|
|
class BumdesRequest extends FormRequest
|
|
{
|
|
public function authorize(): bool
|
|
{
|
|
if (! Gate::any(['super_admin', 'admin', 'enumerator'])) {
|
|
return false;
|
|
}
|
|
$pengurus = $this->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',
|
|
];
|
|
}
|
|
}
|