Update Koperasi
This commit is contained in:
@@ -0,0 +1,190 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianOperasionalKoperasi;
|
||||
use App\Enums\Koperasi\EfektivitasSanksiKoperasi;
|
||||
use App\Enums\Koperasi\FaktorManajemenKoperasi;
|
||||
use App\Enums\Koperasi\FasilitasKoperasi;
|
||||
use App\Enums\Koperasi\FormatPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\FrekuensiPertemuanKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Enums\Koperasi\KomoditasAgregasiKoperasi;
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\ModelFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PeranRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikFermentasiKoperasi;
|
||||
use App\Enums\Koperasi\PraktikPengeringanKoperasi;
|
||||
use App\Enums\Koperasi\PraktikSortasiKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\StatusPembukuanKoperasi;
|
||||
use App\Enums\Koperasi\TingkatKreditMacetKoperasi;
|
||||
use App\Services\Koperasi\OperasionalKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
class StoreKelembagaanKoperasiRequest extends KoperasiTabRequest
|
||||
{
|
||||
public function section(): ?BagianOperasionalKoperasi
|
||||
{
|
||||
$section = $this->input('section');
|
||||
|
||||
return is_string($section) ? BagianOperasionalKoperasi::tryFrom($section) : null;
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
if ($section = $this->section()) {
|
||||
return route('koperasi.pengurus.kelembagaan-aktor.index', $this->route('pengurusKoperasi')).'#'.$section->fragment();
|
||||
}
|
||||
|
||||
return parent::getRedirectUrl();
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
$policy = app(OperasionalKoperasiService::class);
|
||||
$data = $policy->normalize($this->all(), $policy->context($this->route('pengurusKoperasi')));
|
||||
if ($section = $this->section()) {
|
||||
$data = array_intersect_key($data, array_flip([...$policy->sectionFields($section), 'section', '_token']));
|
||||
}
|
||||
$this->replace($data);
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$rules = [
|
||||
'section' => ['nullable', Rule::enum(BagianOperasionalKoperasi::class)],
|
||||
'ad_art' => ['nullable', Rule::enum(StatusAdArtKoperasi::class)],
|
||||
'pelatihan_produksi' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_pascapanen' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_pengolahan' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_keuangan' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'pelatihan_pemasaran' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'status_pembukuan' => ['nullable', Rule::enum(StatusPembukuanKoperasi::class)],
|
||||
'format_pembukuan' => ['nullable', Rule::enum(FormatPembukuanKoperasi::class)],
|
||||
'pertemuan_rutin' => ['nullable', Rule::enum(FrekuensiPertemuanKoperasi::class)],
|
||||
'kasus_kredit_macet' => ['nullable', Rule::enum(TingkatKreditMacetKoperasi::class)],
|
||||
'sanksi_kredit_macet' => ['nullable', Rule::enum(KetersediaanKoperasi::class)],
|
||||
'efektivitas_sanksi' => ['nullable', Rule::enum(EfektivitasSanksiKoperasi::class)],
|
||||
'pengolahan_lanjutan' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'kontrak_offtaker' => ['nullable', Rule::enum(KetersediaanKoperasi::class)],
|
||||
'layanan_koperasi' => ['nullable', 'array'],
|
||||
'layanan_koperasi.*' => [Rule::enum(LayananKoperasi::class)],
|
||||
'faktor_manajemen' => ['nullable', 'array'],
|
||||
'faktor_manajemen.*' => [Rule::enum(FaktorManajemenKoperasi::class)],
|
||||
'keterlibatan_rantai_nilai' => ['nullable', 'array'],
|
||||
'keterlibatan_rantai_nilai.*' => [Rule::enum(PeranRantaiNilaiKoperasi::class)],
|
||||
'agregasi_komoditas' => ['nullable', 'array'],
|
||||
'agregasi_komoditas.*' => [Rule::enum(KomoditasAgregasiKoperasi::class)],
|
||||
'fasilitas_koperasi' => ['nullable', 'array'],
|
||||
'fasilitas_koperasi.*' => [Rule::enum(FasilitasKoperasi::class)],
|
||||
'layanan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'pelatihan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'pertemuan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'faktor_manajemen_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'agregasi_komoditas_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'fasilitas_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'detail_pengolahan_lanjutan' => ['nullable', 'string', 'max:255'],
|
||||
'kontrak_komoditas' => ['nullable', 'string', 'max:255'],
|
||||
'cara_penentuan_harga' => ['nullable', 'string'],
|
||||
'tahun_ad_art' => ['nullable', 'integer', 'min:1900', 'max:'.now()->year],
|
||||
'praktik_sortasi' => ['nullable', Rule::enum(PraktikSortasiKoperasi::class)],
|
||||
'standar_sortasi' => ['nullable', 'string', 'max:255'],
|
||||
'praktik_pengeringan' => ['nullable', Rule::enum(PraktikPengeringanKoperasi::class)],
|
||||
'cara_pengeringan' => ['nullable', 'string', 'max:255'],
|
||||
'praktik_fermentasi' => ['nullable', Rule::enum(PraktikFermentasiKoperasi::class)],
|
||||
'model_fermentasi' => ['nullable', 'array'],
|
||||
'model_fermentasi.*' => [Rule::enum(ModelFermentasiKoperasi::class)],
|
||||
'proses_fermentasi' => ['nullable', 'string'],
|
||||
'harga_premium_rupiah' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_premium_persen' => ['nullable', 'integer', 'min:0', 'max:100'],
|
||||
];
|
||||
$policy = app(OperasionalKoperasiService::class);
|
||||
foreach ($policy->requiredFields() as $field) {
|
||||
$rules[$field][] = Rule::requiredIf(fn () => $policy->active($field, $this->all(), $policy->context($this->route('pengurusKoperasi'))));
|
||||
}
|
||||
if ($section = $this->section()) {
|
||||
$fields = $policy->sectionFields($section);
|
||||
$rules = array_filter($rules, fn ($key) => $key === 'section' || in_array(explode('.', $key)[0], $fields, true), ARRAY_FILTER_USE_KEY);
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [function (Validator $validator) {
|
||||
$policy = app(OperasionalKoperasiService::class);
|
||||
foreach ([
|
||||
'keterlibatan_rantai_nilai' => PeranRantaiNilaiKoperasi::TIDAK_TERLIBAT->value,
|
||||
'agregasi_komoditas' => KomoditasAgregasiKoperasi::TIDAK_TERLIBAT->value,
|
||||
] as $field => $exclusive) {
|
||||
$selected = $policy->values($this->input($field));
|
||||
if (in_array($exclusive, $selected, true) && count(array_unique($selected)) > 1) {
|
||||
$validator->errors()->add($field, 'Pilihan tidak terlibat tidak boleh digabungkan dengan pilihan lainnya.');
|
||||
}
|
||||
}
|
||||
if ($this->input('status_pembukuan') === StatusPembukuanKoperasi::SUDAH->value
|
||||
&& $this->input('format_pembukuan') === FormatPembukuanKoperasi::TIDAK_ADA->value) {
|
||||
$validator->errors()->add('format_pembukuan', 'Pilih format pembukuan yang digunakan.');
|
||||
}
|
||||
if (filled($this->input('harga_premium_rupiah')) && filled($this->input('harga_premium_persen'))) {
|
||||
$validator->errors()->add('harga_premium_persen', 'Isi premium harga dalam rupiah atau persen, bukan keduanya.');
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
'section' => 'Bagian form',
|
||||
'layanan_lainnya' => 'Layanan Lainnya',
|
||||
'pelatihan_lainnya' => 'Pelatihan Lainnya',
|
||||
'pertemuan_lainnya' => 'Frekuensi Pertemuan Lainnya',
|
||||
'faktor_manajemen_lainnya' => 'Faktor Pengelolaan Lainnya',
|
||||
'agregasi_komoditas_lainnya' => 'Komoditas Agregasi Lainnya',
|
||||
'fasilitas_lainnya' => 'Fasilitas Lainnya',
|
||||
'detail_pengolahan_lanjutan' => 'Jenis Pengolahan Lanjutan',
|
||||
'kontrak_komoditas' => 'Komoditas dalam Kontrak',
|
||||
'cara_penentuan_harga' => 'Penetapan Harga Beli',
|
||||
'tahun_ad_art' => 'Tahun Pembaruan AD/ART',
|
||||
'ad_art' => 'Status AD/ART',
|
||||
'pelatihan_produksi' => 'Pelatihan Produksi Pertanian',
|
||||
'pelatihan_pascapanen' => 'Pelatihan Pascapanen',
|
||||
'pelatihan_pengolahan' => 'Pelatihan Pengolahan Produk',
|
||||
'pelatihan_keuangan' => 'Pelatihan Keuangan',
|
||||
'pelatihan_pemasaran' => 'Pelatihan Pengemasan dan Pemasaran',
|
||||
'status_pembukuan' => 'Pembukuan Keuangan',
|
||||
'format_pembukuan' => 'Format Pembukuan',
|
||||
'pertemuan_rutin' => 'Frekuensi Pertemuan Anggota',
|
||||
'kasus_kredit_macet' => 'Tingkat Kredit Macet',
|
||||
'sanksi_kredit_macet' => 'Sanksi Kredit Macet',
|
||||
'efektivitas_sanksi' => 'Efektivitas Sanksi',
|
||||
'pengolahan_lanjutan' => 'Pengolahan Lanjutan',
|
||||
'kontrak_offtaker' => 'Kontrak dengan Mitra Pembeli',
|
||||
'layanan_koperasi' => 'Layanan Koperasi',
|
||||
'faktor_manajemen' => 'Faktor Pengelolaan',
|
||||
'keterlibatan_rantai_nilai' => 'Peran dalam Rantai Nilai',
|
||||
'agregasi_komoditas' => 'Komoditas Agregasi',
|
||||
'fasilitas_koperasi' => 'Fasilitas Pascapanen',
|
||||
'layanan_koperasi.*' => 'Layanan Koperasi',
|
||||
'faktor_manajemen.*' => 'Faktor Pengelolaan',
|
||||
'keterlibatan_rantai_nilai.*' => 'Peran dalam Rantai Nilai',
|
||||
'agregasi_komoditas.*' => 'Komoditas Agregasi',
|
||||
'fasilitas_koperasi.*' => 'Fasilitas Pascapanen',
|
||||
'praktik_sortasi' => 'Praktik Sortasi',
|
||||
'standar_sortasi' => 'Standar/Kriteria Sortasi',
|
||||
'praktik_pengeringan' => 'Praktik Pengeringan',
|
||||
'cara_pengeringan' => 'Cara dan Tempat Pengeringan',
|
||||
'praktik_fermentasi' => 'Praktik Fermentasi/Pengepresan',
|
||||
'model_fermentasi' => 'Model Fermentasi',
|
||||
'model_fermentasi.*' => 'Model Fermentasi',
|
||||
'proses_fermentasi' => 'Proses Fermentasi',
|
||||
'harga_premium_rupiah' => 'Premium Harga (Rupiah)',
|
||||
'harga_premium_persen' => 'Premium Harga (Persen)',
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user