Update Koperasi
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
class IndexKoperasiTabRequest extends KoperasiTabRequest
|
||||
{
|
||||
public function rules(): array
|
||||
{
|
||||
return ['step' => ['nullable', 'integer', 'in:1,2,3']];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
use App\Enums\Koperasi\StatusAdArtKoperasi;
|
||||
use App\Enums\Koperasi\UrutanKoperasi;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class IndexPengurusKoperasiRequest extends KoperasiRequest
|
||||
{
|
||||
use ValidatesWilayahKoperasi;
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
'search' => ['nullable', 'string', 'max:255'],
|
||||
...$this->wilayahRules(),
|
||||
'jenis_koperasi' => ['nullable', 'string', 'max:255'],
|
||||
'layanan' => ['nullable', Rule::enum(LayananKoperasi::class)],
|
||||
'ad_art' => ['nullable', Rule::enum(StatusAdArtKoperasi::class)],
|
||||
'sort_by' => ['nullable', Rule::enum(UrutanKoperasi::class)],
|
||||
'per_page' => ['nullable', 'integer', 'in:10,25'],
|
||||
];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
...$this->wilayahAttributes(),
|
||||
'search' => 'Pencarian', 'jenis_koperasi' => 'Jenis Koperasi', 'layanan' => 'Layanan Utama',
|
||||
'ad_art' => 'Dokumen Kelembagaan', 'sort_by' => 'Urutan Data', 'per_page' => 'Jumlah data per halaman',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Services\Koperasi\PengurusKoperasiService;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
use Illuminate\Validation\Rules\Enum as EnumRule;
|
||||
|
||||
abstract class KoperasiRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
$values = [];
|
||||
foreach (PengurusKoperasiService::RUPIAH_FIELDS as $field) {
|
||||
if ($this->exists($field)) {
|
||||
$values[$field] = PengurusKoperasiService::normalizeRupiah($this->input($field));
|
||||
}
|
||||
}
|
||||
$this->merge($values);
|
||||
}
|
||||
|
||||
public function messages(): array
|
||||
{
|
||||
return [
|
||||
'required' => ':attribute wajib diisi.',
|
||||
'exists' => 'Pilihan :attribute tidak ditemukan.',
|
||||
'prohibited' => ':attribute belum tersedia.',
|
||||
'string' => ':attribute harus berupa teks.',
|
||||
'max.string' => ':attribute maksimal :max karakter.',
|
||||
'integer' => ':attribute harus berupa bilangan bulat.',
|
||||
'numeric' => ':attribute harus berupa angka.',
|
||||
'array' => 'Pilihan :attribute tidak valid.',
|
||||
'in' => 'Pilihan :attribute tidak valid.',
|
||||
'min.numeric' => ':attribute minimal :min.',
|
||||
'max.numeric' => ':attribute maksimal :max.',
|
||||
EnumRule::class => 'Pilihan :attribute tidak valid.',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Models\Koperasi\PengurusKoperasi;
|
||||
|
||||
abstract class KoperasiTabRequest extends KoperasiRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
$pengurus = $this->route('pengurusKoperasi');
|
||||
|
||||
return $pengurus instanceof PengurusKoperasi && $pengurus->profilLengkap();
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
$attributes = [];
|
||||
foreach (array_keys($this->rules()) as $field) {
|
||||
$attributes[$field] = ucfirst(str_replace(['_', '.*'], [' ', ''], $field));
|
||||
}
|
||||
|
||||
return $attributes;
|
||||
}
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
|
||||
// Checkbox yang dikosongkan harus menghapus pilihan yang sebelumnya tersimpan.
|
||||
foreach ($this->rules() as $field => $rules) {
|
||||
if (in_array('array', $rules, true) && ! $this->exists($field)) {
|
||||
$this->merge([$field => []]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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)',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\FokusKomoditasKoperasi;
|
||||
use App\Enums\Koperasi\JenisKoperasi;
|
||||
use App\Enums\Koperasi\PosisiKoperasi;
|
||||
use App\Enums\Koperasi\SkalaOperasiKoperasi;
|
||||
use App\Services\Koperasi\WilayahKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class StorePengurusKoperasiRequest extends KoperasiRequest
|
||||
{
|
||||
use ValidatesWilayahKoperasi;
|
||||
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
if (app(WilayahKoperasiService::class)->available() && $this->exists('provinsi_id') && ! $this->exists('desa_kelurahan_id')) {
|
||||
$this->merge(['desa_kelurahan_id' => null]);
|
||||
}
|
||||
}
|
||||
|
||||
public function authorize(): bool
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
return [
|
||||
...$this->wilayahRules(true),
|
||||
'nama_lengkap' => ['required', 'string', 'max:255'],
|
||||
'posisi_dalam_koperasi' => ['required', Rule::enum(PosisiKoperasi::class)],
|
||||
'tahun_bergabung' => ['nullable', 'integer'],
|
||||
'no_hp' => ['nullable', 'string', 'max:20'],
|
||||
'alamat_tinggal' => ['nullable', 'string'],
|
||||
'nama_koperasi' => ['required', 'string', 'max:255'],
|
||||
'jenis_koperasi' => ['required', Rule::enum(JenisKoperasi::class)],
|
||||
'jenis_koperasi_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'alamat_koperasi' => ['nullable', 'string'],
|
||||
'sejarah_lembaga' => ['nullable', 'string'],
|
||||
'fokus_komoditas' => ['nullable', Rule::enum(FokusKomoditasKoperasi::class)],
|
||||
'detail_fokus_komoditas' => ['nullable', 'string', 'max:255'],
|
||||
'skala_operasi' => ['required', Rule::enum(SkalaOperasiKoperasi::class)],
|
||||
'tahun_berdiri' => ['nullable', 'integer'],
|
||||
'jumlah_anggota_awal' => ['nullable', 'integer'],
|
||||
'jumlah_anggota_dewasa' => ['nullable', 'integer'],
|
||||
'jumlah_anggota_anak' => ['nullable', 'integer'],
|
||||
'jumlah_pengurus' => ['nullable', 'integer'],
|
||||
'shu_2025' => ['nullable', 'numeric'],
|
||||
'shu_2024' => ['nullable', 'numeric'],
|
||||
'shu_2023' => ['nullable', 'numeric'],
|
||||
];
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
...$this->wilayahAttributes(),
|
||||
'nama_lengkap' => 'Nama responden',
|
||||
'posisi_dalam_koperasi' => 'Posisi dalam koperasi',
|
||||
'tahun_bergabung' => 'Tahun bergabung koperasi',
|
||||
'no_hp' => 'Nomor HP',
|
||||
'alamat_tinggal' => 'Alamat tinggal',
|
||||
'nama_koperasi' => 'Nama koperasi',
|
||||
'jenis_koperasi' => 'Jenis koperasi',
|
||||
'jenis_koperasi_lainnya' => 'Jenis koperasi lainnya',
|
||||
'alamat_koperasi' => 'Alamat koperasi',
|
||||
'sejarah_lembaga' => 'Sejarah dan tujuan pendirian',
|
||||
'fokus_komoditas' => 'Fokus komoditas pertanian',
|
||||
'detail_fokus_komoditas' => 'Komoditas yang dikembangkan',
|
||||
'skala_operasi' => 'Skala operasi koperasi',
|
||||
'tahun_berdiri' => 'Tahun berdiri',
|
||||
'jumlah_anggota_awal' => 'Jumlah anggota awal berdiri',
|
||||
'jumlah_anggota_dewasa' => 'Jumlah anggota dewasa',
|
||||
'jumlah_anggota_anak' => 'Jumlah anggota anak',
|
||||
'jumlah_pengurus' => 'Jumlah pengurus',
|
||||
'shu_2025' => 'SHU 2025',
|
||||
'shu_2024' => 'SHU 2024',
|
||||
'shu_2023' => 'SHU 2023',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -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',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\AlasanPinjamanKoperasi;
|
||||
use App\Enums\Koperasi\BentukPembayaranKoperasi;
|
||||
use App\Enums\Koperasi\JawabanYaTidakKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Services\Koperasi\SosialEkonomiKoperasiService;
|
||||
use Illuminate\Validation\Rule;
|
||||
|
||||
class StoreSosialEkonomiKoperasiRequest extends KoperasiTabRequest
|
||||
{
|
||||
protected function prepareForValidation(): void
|
||||
{
|
||||
parent::prepareForValidation();
|
||||
$policy = app(SosialEkonomiKoperasiService::class);
|
||||
$this->merge($policy->normalize($this->all(), $policy->context($this->route('pengurusKoperasi'))));
|
||||
}
|
||||
|
||||
public function rules(): array
|
||||
{
|
||||
$rules = [
|
||||
'momen_simpanan_terbesar' => ['nullable', 'string', 'max:255'],
|
||||
'alasan_pinjaman_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'pembayaran_selain_uang' => ['nullable', Rule::enum(KetersediaanKoperasi::class)],
|
||||
'bentuk_pembayaran_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'perhitungan_harga_pasar' => ['nullable', Rule::enum(JawabanYaTidakKoperasi::class)],
|
||||
'alasan_bukan_harga_pasar' => ['nullable', 'string'],
|
||||
'alasan_pinjaman' => ['nullable', 'array'],
|
||||
'alasan_pinjaman.*' => [Rule::enum(AlasanPinjamanKoperasi::class)],
|
||||
'bentuk_pembayaran_barang' => ['nullable', 'array'],
|
||||
'bentuk_pembayaran_barang.*' => [Rule::enum(BentukPembayaranKoperasi::class)],
|
||||
'simpanan_terbesar' => ['nullable', 'integer', 'min:0'],
|
||||
];
|
||||
$policy = app(SosialEkonomiKoperasiService::class);
|
||||
foreach ($policy->requiredFields() as $field) {
|
||||
$rules[$field][] = Rule::requiredIf(fn () => $policy->active($field, $this->all(), $policy->context($this->route('pengurusKoperasi'))));
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
public function attributes(): array
|
||||
{
|
||||
return [
|
||||
'simpanan_terbesar' => 'Simpanan Wajib Terbesar per Anggota',
|
||||
'momen_simpanan_terbesar' => 'Bulan dan Momen Setoran Lebih Tinggi',
|
||||
'alasan_pinjaman' => 'Keperluan Utama Pinjaman',
|
||||
'alasan_pinjaman.*' => 'Keperluan Utama Pinjaman',
|
||||
'alasan_pinjaman_lainnya' => 'Keperluan Pinjaman Lainnya',
|
||||
'pembayaran_selain_uang' => 'Pembayaran Pinjaman Selain Uang',
|
||||
'bentuk_pembayaran_barang' => 'Bentuk Pembayaran Selain Uang',
|
||||
'bentuk_pembayaran_barang.*' => 'Bentuk Pembayaran Selain Uang',
|
||||
'bentuk_pembayaran_lainnya' => 'Bentuk Pembayaran Lainnya',
|
||||
'perhitungan_harga_pasar' => 'Penilaian Hasil Bumi Sesuai Harga Pasar',
|
||||
'alasan_bukan_harga_pasar' => 'Alasan Tidak Menggunakan Harga Pasar',
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
class UpdatePengurusKoperasiRequest extends StorePengurusKoperasiRequest {}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Requests\Koperasi;
|
||||
|
||||
use App\Services\Koperasi\WilayahKoperasiService;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Validation\Rule;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
trait ValidatesWilayahKoperasi
|
||||
{
|
||||
protected function wilayahRules(bool $profile = false): array
|
||||
{
|
||||
$tables = ['kabupaten_kota_id' => 'master_kabupaten_kota', 'kecamatan_id' => 'master_kecamatan', 'desa_kelurahan_id' => 'master_desa_kelurahan'];
|
||||
if ($profile) {
|
||||
$tables = ['provinsi_id' => 'master_provinsi', ...$tables];
|
||||
}
|
||||
$available = app(WilayahKoperasiService::class)->available();
|
||||
$rules = [];
|
||||
foreach ($tables as $field => $table) {
|
||||
$rules[$field] = ['bail', Rule::prohibitedIf(! $available), 'nullable', 'integer', Rule::exists($table, 'id')->whereNull('deleted_at')];
|
||||
if ($profile) {
|
||||
$others = array_diff(array_keys($tables), [$field]);
|
||||
$rules[$field][] = Rule::requiredIf(fn () => collect($others)->contains(fn ($other) => $this->filled($other)));
|
||||
}
|
||||
}
|
||||
|
||||
return $rules;
|
||||
}
|
||||
|
||||
protected function wilayahAttributes(): array
|
||||
{
|
||||
return ['provinsi_id' => 'Provinsi', 'kabupaten_kota_id' => 'Kabupaten/Kota', 'kecamatan_id' => 'Kecamatan', 'desa_kelurahan_id' => 'Desa/Kelurahan'];
|
||||
}
|
||||
|
||||
public function after(): array
|
||||
{
|
||||
return [function (Validator $validator) {
|
||||
$labels = $this->wilayahAttributes();
|
||||
if ($validator->errors()->hasAny(array_keys($labels))) {
|
||||
return;
|
||||
}
|
||||
foreach ([
|
||||
['kabupaten_kota_id', 'provinsi_id', 'master_kabupaten_kota'],
|
||||
['kecamatan_id', 'kabupaten_kota_id', 'master_kecamatan'],
|
||||
['desa_kelurahan_id', 'kecamatan_id', 'master_desa_kelurahan'],
|
||||
] as [$child, $parent, $table]) {
|
||||
if ($parent === 'provinsi_id' && ! $this instanceof StorePengurusKoperasiRequest) {
|
||||
continue;
|
||||
}
|
||||
if ($this->filled($child) && $this->filled($parent)
|
||||
&& ! DB::table($table)->where('id', $this->input($child))->where($parent, $this->input($parent))->exists()) {
|
||||
$validator->errors()->add($child, 'Pilihan '.$labels[$child].' tidak sesuai dengan '.$labels[$parent].'.');
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user