Update Koperasi
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
<?php
|
||||
|
||||
namespace App\Services\Koperasi;
|
||||
|
||||
use App\Enums\Koperasi\BagianOperasionalKoperasi;
|
||||
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\JenisKoperasi;
|
||||
use App\Enums\Koperasi\KetersediaanKoperasi;
|
||||
use App\Enums\Koperasi\KomoditasAgregasiKoperasi;
|
||||
use App\Enums\Koperasi\LayananKoperasi;
|
||||
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\Models\Koperasi\PengurusKoperasi;
|
||||
|
||||
class OperasionalKoperasiService extends KoperasiSurveyService
|
||||
{
|
||||
public function context(?PengurusKoperasi $model): array
|
||||
{
|
||||
return ['jenis_koperasi' => $model?->jenis_koperasi];
|
||||
}
|
||||
|
||||
public function dependencies(): array
|
||||
{
|
||||
$when = fn (string $field, array $values, string $source = 'form') => [
|
||||
'field' => $field, 'values' => $values, 'source' => $source,
|
||||
];
|
||||
$simpanPinjam = $when('jenis_koperasi', [JenisKoperasi::SIMPAN_PINJAM->value], 'profile');
|
||||
$komoditas = array_map(fn ($case) => $case->value, array_filter(
|
||||
KomoditasAgregasiKoperasi::cases(), fn ($case) => $case !== KomoditasAgregasiKoperasi::TIDAK_TERLIBAT,
|
||||
));
|
||||
$agregasi = $when('agregasi_komoditas', $komoditas);
|
||||
|
||||
return [
|
||||
'tahun_ad_art' => [$when('ad_art', [StatusAdArtKoperasi::LENGKAP->value])],
|
||||
'layanan_lainnya' => [$when('layanan_koperasi', [LayananKoperasi::LAINNYA->value])],
|
||||
'format_pembukuan' => [$when('status_pembukuan', [StatusPembukuanKoperasi::SUDAH->value])],
|
||||
'pertemuan_lainnya' => [$when('pertemuan_rutin', [FrekuensiPertemuanKoperasi::LAINNYA->value])],
|
||||
'kasus_kredit_macet' => [$simpanPinjam],
|
||||
'sanksi_kredit_macet' => [$simpanPinjam],
|
||||
'efektivitas_sanksi' => [$simpanPinjam, $when('sanksi_kredit_macet', [KetersediaanKoperasi::ADA->value])],
|
||||
'faktor_manajemen_lainnya' => [$when('faktor_manajemen', [FaktorManajemenKoperasi::LAINNYA->value])],
|
||||
'agregasi_komoditas' => [$when('keterlibatan_rantai_nilai', [PeranRantaiNilaiKoperasi::AGREGASI->value])],
|
||||
'agregasi_komoditas_lainnya' => [$when('agregasi_komoditas', [KomoditasAgregasiKoperasi::LAINNYA->value])],
|
||||
'fasilitas_koperasi' => [$agregasi],
|
||||
'fasilitas_lainnya' => [$when('fasilitas_koperasi', [FasilitasKoperasi::LAINNYA->value])],
|
||||
'pengolahan_lanjutan' => [$agregasi],
|
||||
'detail_pengolahan_lanjutan' => [$when('pengolahan_lanjutan', [JawabanYaTidakKoperasi::YA->value])],
|
||||
'cara_penentuan_harga' => [$agregasi],
|
||||
'kontrak_offtaker' => [$agregasi],
|
||||
'kontrak_komoditas' => [$when('kontrak_offtaker', [KetersediaanKoperasi::ADA->value])],
|
||||
'standar_sortasi' => [$when('praktik_sortasi', [PraktikSortasiKoperasi::RUTIN->value, PraktikSortasiKoperasi::TIDAK_KONSISTEN->value])],
|
||||
'cara_pengeringan' => [$when('praktik_pengeringan', [PraktikPengeringanKoperasi::RUTIN->value, PraktikPengeringanKoperasi::KADANG->value])],
|
||||
'model_fermentasi' => [$when('praktik_fermentasi', [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value])],
|
||||
'proses_fermentasi' => [$when('praktik_fermentasi', [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value])],
|
||||
'harga_premium_rupiah' => [$this->postHarvestCondition()],
|
||||
'harga_premium_persen' => [$this->postHarvestCondition()],
|
||||
];
|
||||
}
|
||||
|
||||
public function requiredFields(): array
|
||||
{
|
||||
return [
|
||||
'tahun_ad_art', 'layanan_lainnya', 'format_pembukuan', 'pertemuan_lainnya',
|
||||
'efektivitas_sanksi', 'faktor_manajemen_lainnya', 'agregasi_komoditas',
|
||||
'agregasi_komoditas_lainnya', 'fasilitas_lainnya', 'detail_pengolahan_lanjutan', 'kontrak_komoditas',
|
||||
'standar_sortasi', 'cara_pengeringan', 'model_fermentasi', 'proses_fermentasi',
|
||||
];
|
||||
}
|
||||
|
||||
protected function arrayFields(): array
|
||||
{
|
||||
return ['agregasi_komoditas', 'fasilitas_koperasi', 'model_fermentasi'];
|
||||
}
|
||||
|
||||
public function sectionFields(BagianOperasionalKoperasi $section): array
|
||||
{
|
||||
return match ($section) {
|
||||
BagianOperasionalKoperasi::PENGELOLAAN => [
|
||||
'ad_art', 'tahun_ad_art', 'layanan_koperasi', 'layanan_lainnya',
|
||||
'pelatihan_produksi', 'pelatihan_pascapanen', 'pelatihan_pengolahan',
|
||||
'pelatihan_keuangan', 'pelatihan_pemasaran', 'pelatihan_lainnya',
|
||||
'status_pembukuan', 'format_pembukuan', 'pertemuan_rutin', 'pertemuan_lainnya',
|
||||
'kasus_kredit_macet', 'sanksi_kredit_macet', 'efektivitas_sanksi',
|
||||
'faktor_manajemen', 'faktor_manajemen_lainnya',
|
||||
],
|
||||
BagianOperasionalKoperasi::RANTAI_NILAI => [
|
||||
'keterlibatan_rantai_nilai', 'agregasi_komoditas', 'agregasi_komoditas_lainnya',
|
||||
'fasilitas_koperasi', 'fasilitas_lainnya', 'pengolahan_lanjutan', 'detail_pengolahan_lanjutan',
|
||||
'cara_penentuan_harga', 'kontrak_offtaker', 'kontrak_komoditas',
|
||||
'praktik_sortasi', 'standar_sortasi', 'praktik_pengeringan', 'cara_pengeringan',
|
||||
'praktik_fermentasi', 'model_fermentasi', 'proses_fermentasi', 'harga_premium_rupiah', 'harga_premium_persen',
|
||||
],
|
||||
};
|
||||
}
|
||||
|
||||
private function postHarvestCondition(): array
|
||||
{
|
||||
return ['any' => [
|
||||
['field' => 'pengolahan_lanjutan', 'source' => 'form', 'values' => [JawabanYaTidakKoperasi::YA->value]],
|
||||
['field' => 'praktik_sortasi', 'source' => 'form', 'values' => [PraktikSortasiKoperasi::RUTIN->value, PraktikSortasiKoperasi::TIDAK_KONSISTEN->value]],
|
||||
['field' => 'praktik_pengeringan', 'source' => 'form', 'values' => [PraktikPengeringanKoperasi::RUTIN->value, PraktikPengeringanKoperasi::KADANG->value]],
|
||||
['field' => 'praktik_fermentasi', 'source' => 'form', 'values' => [PraktikFermentasiKoperasi::RUTIN->value, PraktikFermentasiKoperasi::PERNAH->value]],
|
||||
]];
|
||||
}
|
||||
|
||||
public function normalize(array $data, array $context): array
|
||||
{
|
||||
$data = parent::normalize($data, $context);
|
||||
if (($data['status_pembukuan'] ?? null) === StatusPembukuanKoperasi::BELUM->value) {
|
||||
$data['format_pembukuan'] = FormatPembukuanKoperasi::TIDAK_ADA->value;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user