124 lines
6.7 KiB
PHP
124 lines
6.7 KiB
PHP
<?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;
|
|
}
|
|
}
|