enums sosial ekonomi

This commit is contained in:
2026-07-07 15:41:02 +07:00
parent b3d805fe98
commit 2eb40f8a1a
15 changed files with 451 additions and 108 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Http\Controllers\Web\Dashboard;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Gate;
class DistribusiController extends Controller
{
public function index()
{
if (!Gate::allows('super_admin') && !Gate::allows('admin')) {
abort(403);
}
$title = 'Distribusi Dashboard';
return view('dashboard.distribusi', compact('title'));
}
}
@@ -3,6 +3,15 @@
namespace App\Http\Controllers\Web\Produktivitas;
use App\Http\Controllers\Controller;
use App\Enums\KategoriPendapatanKomoditas;
use App\Enums\PeriodePendapatan;
use App\Enums\PihakMembantuKonflik;
use App\Enums\SkorKecukupanPenghasilan;
use App\Enums\SkorKejelasanStatusLahan;
use App\Enums\SkorKemampuanMenabung;
use App\Enums\SkorPeriodePaceklik;
use App\Enums\StatusKepemilikanLahanSosialEkonomi;
use App\Enums\StatusKonflik;
use App\Models\Pertanian\Komoditas;
use App\Models\Pertanian\Lahan;
use App\Models\Pertanian\Petani;
@@ -32,14 +41,14 @@ class SosialEkonomiController extends Controller
$pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian?->values() ?? collect();
$komoditasPetani = $this->komoditasPetani($petani);
return view('produktivitas.petani.sosial-ekonomi.index', compact(
return view('produktivitas.petani.sosial-ekonomi.index', array_merge(compact(
'petani',
'sosialEkonomi',
'pendapatanKomoditasUtama',
'pendapatanKomoditasLainnya',
'pendapatanLuarPertanian',
'komoditasPetani'
));
), $this->sosialEkonomiOptions()));
}
public function index(Request $request, Petani $petani)
@@ -87,14 +96,14 @@ class SosialEkonomiController extends Controller
return response()->json($sosialEkonomi);
}
return view($view, compact(
return view($view, array_merge(compact(
'petani',
'sosialEkonomi',
'komoditasPetani',
'pendapatanKomoditasUtama',
'pendapatanKomoditasLainnya',
'pendapatanLuarPertanian',
));
), $this->sosialEkonomiOptions()));
}
public function store(Request $request, ?Petani $petani = null): JsonResponse|RedirectResponse
@@ -214,29 +223,29 @@ class SosialEkonomiController extends Controller
'jumlah_tanggungan' => ['nullable', 'integer', 'min:0'],
'anak_masih_sekolah' => ['nullable', 'integer', 'min:0'],
'yang_ikut_bekerja' => ['nullable', 'integer', 'min:0'],
'skor_periode_paceklik' => ['nullable', 'integer', 'min:1', 'max:5'],
'skor_periode_paceklik' => ['nullable', 'integer', Rule::in(SkorPeriodePaceklik::values())],
'bulan_paceklik' => ['nullable', 'string', 'max:255'],
'sumber_penghasilan_paceklik' => ['nullable', 'string'],
'total_estimasi_biaya_kebun_per_musim' => ['nullable', 'integer', 'min:0'],
'skor_kemampuan_menabung' => ['nullable', 'integer', 'min:1', 'max:5'],
'skor_kemampuan_menabung' => ['nullable', 'integer', Rule::in(SkorKemampuanMenabung::values())],
'estimasi_tabungan_per_bulan' => ['nullable', 'integer', 'min:0'],
'skor_kecukupan_penghasilan' => ['nullable', 'integer', 'min:1', 'max:5'],
'skor_kecukupan_penghasilan' => ['nullable', 'integer', Rule::in(SkorKecukupanPenghasilan::values())],
'alasan_kecukupan_penghasilan' => ['nullable', 'string'],
'status_kepemilikan_lahan' => ['nullable', 'string', 'max:255'],
'skor_kejelasan_status_lahan' => ['nullable', 'integer', 'min:1', 'max:5'],
'status_kepemilikan_lahan' => ['nullable', 'string', Rule::in(StatusKepemilikanLahanSosialEkonomi::values())],
'skor_kejelasan_status_lahan' => ['nullable', 'integer', Rule::in(SkorKejelasanStatusLahan::values())],
'ada_sertifikat_dokumen' => ['nullable', 'boolean'],
'ada_sengketa' => ['nullable', 'boolean'],
'keterangan_sengketa' => ['nullable', 'string'],
'pihak_membantu_konflik' => ['nullable', 'string', 'max:255'],
'pihak_membantu_konflik' => ['nullable', 'string', Rule::in(PihakMembantuKonflik::values())],
'pihak_membantu_konflik_nama' => ['nullable', 'string', 'max:255'],
'tahun_bantuan_konflik' => ['nullable', 'integer', 'digits:4'],
'status_konflik' => ['nullable', 'string', 'max:255'],
'status_konflik' => ['nullable', 'string', Rule::in(StatusKonflik::values())],
'pendapatan_komoditas' => ['nullable', 'array'],
'pendapatan_komoditas.*.kategori' => ['required_with:pendapatan_komoditas', 'string', 'in:utama,lainnya'],
'pendapatan_komoditas.*.kategori' => ['required_with:pendapatan_komoditas', 'string', Rule::in(KategoriPendapatanKomoditas::values())],
'pendapatan_komoditas.*.komoditas' => ['nullable', 'string', 'max:255'],
'pendapatan_komoditas.*.pendapatan' => ['nullable', 'integer', 'min:0'],
'pendapatan_komoditas.*.periode' => ['nullable', 'string', 'in:musim,tahun'],
'pendapatan_komoditas.*.periode' => ['nullable', 'string', Rule::in(PeriodePendapatan::values())],
'pendapatan_luar_pertanian' => ['nullable', 'array'],
'pendapatan_luar_pertanian.*.jenis_pekerjaan' => ['nullable', 'string', 'max:255'],
@@ -253,7 +262,9 @@ class SosialEkonomiController extends Controller
])
->all();
if (($payload['pihak_membantu_konflik'] ?? null) === 'Tidak ada-selesaikan sendiri') {
$payload = $this->normalizeSkorPayload($payload);
if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) {
$payload['pihak_membantu_konflik_nama'] = null;
$payload['tahun_bantuan_konflik'] = null;
}
@@ -261,6 +272,22 @@ class SosialEkonomiController extends Controller
return $payload;
}
private function normalizeSkorPayload(array $payload): array
{
foreach ([
'skor_periode_paceklik',
'skor_kemampuan_menabung',
'skor_kecukupan_penghasilan',
'skor_kejelasan_status_lahan',
] as $field) {
if (array_key_exists($field, $payload) && !is_null($payload[$field]) && $payload[$field] !== '') {
$payload[$field] = (int) $payload[$field];
}
}
return $payload;
}
private function syncPendapatanKomoditas(SosialEkonomi $sosialEkonomi, array $items): void
{
$sosialEkonomi->pendapatanKomoditas()->delete();
@@ -333,4 +360,18 @@ class SosialEkonomiController extends Controller
->get();
}
private function sosialEkonomiOptions(): array
{
return [
'periodePaceklikOptions' => SkorPeriodePaceklik::options(),
'kemampuanMenabungOptions' => SkorKemampuanMenabung::options(),
'kecukupanPenghasilanOptions' => SkorKecukupanPenghasilan::options(),
'kejelasanStatusLahanOptions' => SkorKejelasanStatusLahan::options(),
'statusKepemilikanLahanOptions' => StatusKepemilikanLahanSosialEkonomi::options(),
'pihakMembantuKonflikOptions' => PihakMembantuKonflik::options(),
'pihakMembantuTanpaBantuanValue' => PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value,
'statusKonflikOptions' => StatusKonflik::options(),
];
}
}