Update Koperasi

This commit is contained in:
2026-11-06 22:38:45 +07:00
parent 6232b28e11
commit cb36682d9e
79 changed files with 4639 additions and 1378 deletions
@@ -0,0 +1,71 @@
<?php
namespace App\Services\Koperasi;
use App\Enums\Koperasi\BagianRantaiNilaiKoperasi;
use App\Enums\Koperasi\BentukProdukKoperasi;
use App\Enums\Koperasi\HubunganPemasokKoperasi;
use App\Enums\Koperasi\PenetapanHargaKoperasi;
use App\Enums\Koperasi\SumberPasokanKoperasi;
use App\Enums\Koperasi\TujuanPenjualanKoperasi;
class RantaiNilaiKoperasiService extends KoperasiSurveyService
{
public const PERIODS = ['sekarang' => 'Panen Terakhir', '1_tahun' => 'Tahun Lalu', '2_tahun' => 'Dua Tahun Lalu'];
public function dependencies(): array
{
$when = fn (string $field, array $values) => ['field' => $field, 'values' => $values, 'source' => 'form'];
$buyers = array_values(array_map(fn ($case) => $case->value, array_filter(
TujuanPenjualanKoperasi::cases(), fn ($case) => $case !== TujuanPenjualanKoperasi::BELUM_MENJUAL,
)));
$rules = [
'sumber_pasokan_lainnya' => [$when('sumber_pasokan', [SumberPasokanKoperasi::LAINNYA->value])],
'tujuan_penjualan_lainnya' => [$when('tujuan_penjualan', [TujuanPenjualanKoperasi::LAINNYA->value])],
'sifat_hubungan_lainnya' => [$when('sifat_hubungan_bisnis', [HubunganPemasokKoperasi::LAINNYA->value])],
'cara_menetapkan_harga_lainnya' => [$when('cara_menetapkan_harga_pasar', [PenetapanHargaKoperasi::LAINNYA->value])],
'bentuk_penjualan' => [$when('tujuan_penjualan', $buyers)],
];
foreach (array_keys(self::PERIODS) as $period) {
$rules['volume_jual_'.$period] = [$when('tujuan_penjualan', $buyers)];
}
return $rules;
}
public function requiredFields(): array
{
return ['sumber_pasokan_lainnya', 'tujuan_penjualan_lainnya', 'sifat_hubungan_lainnya', 'cara_menetapkan_harga_lainnya'];
}
protected function arrayFields(): array
{
return ['bentuk_penjualan'];
}
public function sectionFields(BagianRantaiNilaiKoperasi $section): array
{
if ($section === BagianRantaiNilaiKoperasi::HARGA) {
$fields = ['cara_menetapkan_harga_pasar', 'cara_menetapkan_harga_lainnya'];
foreach (BentukProdukKoperasi::cases() as $product) {
foreach (array_keys(self::PERIODS) as $period) {
$fields[] = 'harga_'.$product->pricePrefix().'_'.$period;
}
}
return $fields;
}
$fields = [
'sumber_pasokan', 'sumber_pasokan_lainnya', 'bentuk_pembelian',
'tujuan_penjualan', 'tujuan_penjualan_lainnya', 'bentuk_penjualan',
'sifat_hubungan_bisnis', 'sifat_hubungan_lainnya', 'mekanisme_pembayaran', 'status_perjanjian_tertulis',
];
foreach (array_keys(self::PERIODS) as $period) {
$fields[] = 'volume_beli_'.$period;
$fields[] = 'volume_jual_'.$period;
}
return $fields;
}
}