Update Koperasi
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianRantaiNilaiKoperasi;
|
||||
use App\Enums\Koperasi\BentukProdukKoperasi;
|
||||
use App\Enums\Koperasi\HubunganPemasokKoperasi;
|
||||
use App\Enums\Koperasi\MekanismePembayaranKoperasi;
|
||||
use App\Enums\Koperasi\PenetapanHargaKoperasi;
|
||||
use App\Enums\Koperasi\PerjanjianPetaniKoperasi;
|
||||
use App\Enums\Koperasi\SumberPasokanKoperasi;
|
||||
use App\Enums\Koperasi\TujuanPenjualanKoperasi;
|
||||
use App\Services\Koperasi\RantaiNilaiKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
class StoreRantaiNilaiKoperasiRequest extends KoperasiTabRequest
|
||||
{
|
||||
public function section(): ?BagianRantaiNilaiKoperasi
|
||||
{
|
||||
$section = $this->input('section');
|
||||
|
||||
return is_string($section) ? BagianRantaiNilaiKoperasi::tryFrom($section) : null;
|
||||
}
|
||||
|
||||
protected function getRedirectUrl(): string
|
||||
{
|
||||
if ($section = $this->section()) {
|
||||
return route('koperasi.pengurus.rantai-nilai-akses-pasar.index', $this->route('pengurusKoperasi')).'#'.$section->fragment();
|
||||
}
|
||||
|
||||
return parent::getRedirectUrl();
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
$policy = app(RantaiNilaiKoperasiService::class);
|
||||
$data = $policy->normalize($this->all(), []);
|
||||
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(BagianRantaiNilaiKoperasi::class)],
|
||||
'mekanisme_pembayaran' => ['nullable', Rule::enum(MekanismePembayaranKoperasi::class)],
|
||||
'status_perjanjian_tertulis' => ['nullable', Rule::enum(PerjanjianPetaniKoperasi::class)],
|
||||
'sumber_pasokan' => ['nullable', 'array'],
|
||||
'sumber_pasokan.*' => [Rule::enum(SumberPasokanKoperasi::class)],
|
||||
'bentuk_pembelian' => ['nullable', 'array'],
|
||||
'bentuk_pembelian.*' => [Rule::enum(BentukProdukKoperasi::class)],
|
||||
'tujuan_penjualan' => ['nullable', 'array'],
|
||||
'tujuan_penjualan.*' => [Rule::enum(TujuanPenjualanKoperasi::class)],
|
||||
'bentuk_penjualan' => ['nullable', 'array'],
|
||||
'bentuk_penjualan.*' => [Rule::enum(BentukProdukKoperasi::class)],
|
||||
'sifat_hubungan_bisnis' => ['nullable', 'array'],
|
||||
'sifat_hubungan_bisnis.*' => [Rule::enum(HubunganPemasokKoperasi::class)],
|
||||
'cara_menetapkan_harga_pasar' => ['nullable', 'array'],
|
||||
'cara_menetapkan_harga_pasar.*' => [Rule::enum(PenetapanHargaKoperasi::class)],
|
||||
'sumber_pasokan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'tujuan_penjualan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'sifat_hubungan_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'cara_menetapkan_harga_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'volume_beli_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_jual_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_segar_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_basah_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_kering_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_fermentasi_sekarang' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_beli_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_jual_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_segar_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_basah_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_kering_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_fermentasi_1_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_beli_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'volume_jual_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_segar_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_basah_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_kering_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'harga_fermentasi_2_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
];
|
||||
$policy = app(RantaiNilaiKoperasiService::class);
|
||||
foreach ($policy->requiredFields() as $field) {
|
||||
$rules[$field][] = Rule::requiredIf(fn () => $policy->active($field, $this->all(), []));
|
||||
}
|
||||
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) {
|
||||
if ($this->section() === BagianRantaiNilaiKoperasi::HARGA) {
|
||||
return;
|
||||
}
|
||||
$selected = app(RantaiNilaiKoperasiService::class)->values($this->input('tujuan_penjualan'));
|
||||
if (in_array(TujuanPenjualanKoperasi::BELUM_MENJUAL->value, $selected, true) && count(array_unique($selected)) > 1) {
|
||||
$validator->errors()->add('tujuan_penjualan', 'Pilihan belum pernah menjual tidak boleh digabungkan dengan tujuan penjualan lainnya.');
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
'section' => 'Bagian form',
|
||||
'sumber_pasokan' => 'Sumber Pasokan',
|
||||
'sumber_pasokan_lainnya' => 'Sumber Pasokan Lainnya',
|
||||
'bentuk_pembelian' => 'Bentuk Produk yang Dibeli',
|
||||
'tujuan_penjualan' => 'Tujuan Penjualan',
|
||||
'tujuan_penjualan_lainnya' => 'Tujuan Penjualan Lainnya',
|
||||
'bentuk_penjualan' => 'Bentuk Produk yang Dijual',
|
||||
'sifat_hubungan_bisnis' => 'Hubungan dengan Petani Pemasok',
|
||||
'sifat_hubungan_lainnya' => 'Hubungan Pemasok Lainnya',
|
||||
'mekanisme_pembayaran' => 'Mekanisme Pembayaran kepada Petani',
|
||||
'status_perjanjian_tertulis' => 'Perjanjian Sebelum Pembelian',
|
||||
'cara_menetapkan_harga_pasar' => 'Penetapan Harga Beli',
|
||||
'cara_menetapkan_harga_lainnya' => 'Penetapan Harga Lainnya',
|
||||
'sumber_pasokan.*' => 'Sumber Pasokan',
|
||||
'bentuk_pembelian.*' => 'Bentuk Produk yang Dibeli',
|
||||
'tujuan_penjualan.*' => 'Tujuan Penjualan',
|
||||
'bentuk_penjualan.*' => 'Bentuk Produk yang Dijual',
|
||||
'sifat_hubungan_bisnis.*' => 'Hubungan dengan Petani Pemasok',
|
||||
'cara_menetapkan_harga_pasar.*' => 'Penetapan Harga Beli',
|
||||
'volume_beli_sekarang' => 'Volume Pembelian Panen Terakhir',
|
||||
'volume_jual_sekarang' => 'Volume Penjualan Panen Terakhir',
|
||||
'harga_segar_sekarang' => 'Harga Buah Segar Panen Terakhir',
|
||||
'harga_basah_sekarang' => 'Harga Biji Basah Panen Terakhir',
|
||||
'harga_kering_sekarang' => 'Harga Biji Kering/Kupas Panen Terakhir',
|
||||
'harga_fermentasi_sekarang' => 'Harga Produk Terfermentasi Panen Terakhir',
|
||||
'volume_beli_1_tahun' => 'Volume Pembelian Tahun Lalu',
|
||||
'volume_jual_1_tahun' => 'Volume Penjualan Tahun Lalu',
|
||||
'harga_segar_1_tahun' => 'Harga Buah Segar Tahun Lalu',
|
||||
'harga_basah_1_tahun' => 'Harga Biji Basah Tahun Lalu',
|
||||
'harga_kering_1_tahun' => 'Harga Biji Kering/Kupas Tahun Lalu',
|
||||
'harga_fermentasi_1_tahun' => 'Harga Produk Terfermentasi Tahun Lalu',
|
||||
'volume_beli_2_tahun' => 'Volume Pembelian Dua Tahun Lalu',
|
||||
'volume_jual_2_tahun' => 'Volume Penjualan Dua Tahun Lalu',
|
||||
'harga_segar_2_tahun' => 'Harga Buah Segar Dua Tahun Lalu',
|
||||
'harga_basah_2_tahun' => 'Harga Biji Basah Dua Tahun Lalu',
|
||||
'harga_kering_2_tahun' => 'Harga Biji Kering/Kupas Dua Tahun Lalu',
|
||||
'harga_fermentasi_2_tahun' => 'Harga Produk Terfermentasi Dua Tahun Lalu',
|
||||
];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user