191 lines
10 KiB
PHP
191 lines
10 KiB
PHP
<?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)',
|
|
];
|
|
}
|
|
}
|