diff --git a/app/Enums/KondisiTanaman.php b/app/Enums/KondisiTanaman.php index a1a8c64..00c44e3 100644 --- a/app/Enums/KondisiTanaman.php +++ b/app/Enums/KondisiTanaman.php @@ -7,5 +7,6 @@ enum KondisiTanaman: string case BAIK = 'baik'; case SEDANG = 'sedang'; case BURUK = 'buruk'; + case SAKIT= 'sakit'; case MATI = 'mati'; } diff --git a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php index 94ab44a..6834594 100644 --- a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php +++ b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php @@ -43,40 +43,66 @@ class SosialEkonomiController extends Controller } public function index(Request $request, Petani $petani) -{ - $sosialEkonomi = SosialEkonomi::with([ - 'pendapatanKomoditas', - 'pendapatanLuarPertanian', - ]) - ->where('petani_id', $petani->id) - ->first(); + { + $sosialEkonomi = SosialEkonomi::with([ + 'pendapatanKomoditas', + 'pendapatanLuarPertanian', + ]) + ->where('petani_id', $petani->id) + ->first(); - $komoditasPetani = collect(); + if ($sosialEkonomi && !$request->expectsJson()) { + return redirect()->route('petani.sosial-ekonomi.edit', [$petani->id, $sosialEkonomi->id]); + } - $pendapatanKomoditasUtama = $sosialEkonomi?->pendapatanKomoditas - ->where('kategori', 'utama') ?? collect(); - - $pendapatanKomoditasLainnya = $sosialEkonomi?->pendapatanKomoditas - ->where('kategori', 'lainnya') ?? collect(); - - $pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian ?? collect(); - - if ($request->expectsJson()) { - return response()->json($sosialEkonomi); + return $this->formView($request, $petani, $sosialEkonomi, 'produktivitas.petani.sosial-ekonomi.index'); } - return view('produktivitas.petani.sosial-ekonomi.index', compact( - 'petani', - 'sosialEkonomi', - 'komoditasPetani', - 'pendapatanKomoditasUtama', - 'pendapatanKomoditasLainnya', - 'pendapatanLuarPertanian', - )); -} - - public function store(Request $request): JsonResponse|RedirectResponse + public function edit(Request $request, string $petani, string $sosial_ekonomi) { + $petani = Petani::findOrFail($petani); + $sosialEkonomi = SosialEkonomi::findOrFail($sosial_ekonomi); + + if ($sosialEkonomi->petani_id !== $petani->id) { + abort(404); + } + + $sosialEkonomi->load([ + 'pendapatanKomoditas', + 'pendapatanLuarPertanian', + ]); + + return $this->formView($request, $petani, $sosialEkonomi, 'produktivitas.petani.sosial-ekonomi.edit'); + } + + private function formView(Request $request, Petani $petani, ?SosialEkonomi $sosialEkonomi, string $view) + { + $pendapatanKomoditas = $sosialEkonomi?->pendapatanKomoditas ?? collect(); + $pendapatanKomoditasUtama = $pendapatanKomoditas->where('kategori', 'utama')->values(); + $pendapatanKomoditasLainnya = $pendapatanKomoditas->where('kategori', 'lainnya')->values(); + $pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian?->values() ?? collect(); + $komoditasPetani = $this->komoditasPetani($petani); + + if ($request->expectsJson()) { + return response()->json($sosialEkonomi); + } + + return view($view, compact( + 'petani', + 'sosialEkonomi', + 'komoditasPetani', + 'pendapatanKomoditasUtama', + 'pendapatanKomoditasLainnya', + 'pendapatanLuarPertanian', + )); + } + + public function store(Request $request, ?Petani $petani = null): JsonResponse|RedirectResponse + { + if ($petani) { + $request->merge(['petani_id' => $petani->id]); + } + $validated = $this->validateData($request); $sosialEkonomi = DB::transaction(function () use ($validated) { @@ -97,7 +123,7 @@ class SosialEkonomiController extends Controller if (!$request->expectsJson()) { return redirect() - ->route('petani.sosial-ekonomi.edit', $sosialEkonomi->petani_id) + ->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]) ->with('success', 'Data sosial ekonomi berhasil disimpan.'); } @@ -122,9 +148,9 @@ class SosialEkonomiController extends Controller ]); } - public function update(Request $request, string $id): JsonResponse|RedirectResponse + public function update(Request $request, string $petani, string $sosial_ekonomi): JsonResponse|RedirectResponse { - $sosialEkonomi = SosialEkonomi::findOrFail($id); + $sosialEkonomi = SosialEkonomi::where('petani_id', $petani)->findOrFail($sosial_ekonomi); $validated = $this->validateData($request, $sosialEkonomi->id); $sosialEkonomi = DB::transaction(function () use ($request, $validated, $sosialEkonomi) { @@ -149,7 +175,7 @@ class SosialEkonomiController extends Controller if (!$request->expectsJson()) { return redirect() - ->route('petani.sosial-ekonomi.edit', $sosialEkonomi->petani_id) + ->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]) ->with('success', 'Data sosial ekonomi berhasil diperbarui.'); } @@ -306,4 +332,5 @@ class SosialEkonomiController extends Controller ->orderBy('nama') ->get(); } + } diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php new file mode 100644 index 0000000..d440615 --- /dev/null +++ b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php @@ -0,0 +1,628 @@ +@extends('layout.main') + +@section('content') +
+ @if (session('success')) +
{{ session('success') }}
+ @endif + + @if ($errors->any()) +
+ +
+ @endif + +
+
+ @include('produktivitas.petani.header', ['petani' => $petani]) + +
+ @csrf + @if($sosialEkonomi) + @method('PUT') + @endif + + + +
+
+
Komposisi Anggota Keluarga
+
+
+ + + @error('jumlah_tanggungan')
{{ $message }}
@enderror +
+
+ + + @error('anak_masih_sekolah')
{{ $message }}
@enderror +
+
+ + + @error('yang_ikut_bekerja')
{{ $message }}
@enderror +
+
+ +
Pendapatan dari Komoditas Utama
+ @if($komoditasPetani->isEmpty()) +
+ Petani ini belum memiliki komoditas pada data lahan. Tambahkan data Lahan & Tanaman terlebih dahulu agar pilihan komoditas tersedia. +
+ @endif +
+ + + + + + + + + + @for($i = 0; $i < 2; $i++) + @php($item = $pendapatanKomoditasUtama->get($i)) + + + + + + @endfor + +
KomoditasPendapatanPeriode
+ + @php($selectedKomoditas = old("pendapatan_komoditas.$i.komoditas", $item?->komoditas)) + + + @php($pendapatanValue = old("pendapatan_komoditas.$i.pendapatan", $item?->pendapatan)) +
+ Rp + +
+
+ @php($periodeValue = old("pendapatan_komoditas.$i.periode", $item?->periode)) +
+
+ + +
+
+ + +
+
+
+
+
+ +
+ +
Pendapatan dari Komoditas Lain
+
+ + + + + + + + + + @for($i = 0; $i < 2; $i++) + @php($item = $pendapatanKomoditasLainnya->get($i)) + @php($index = $i + 2) + + + + + + @endfor + +
KomoditasPendapatanPeriode
+ + @php($selectedKomoditas = old("pendapatan_komoditas.$index.komoditas", $item?->komoditas)) + + + @php($pendapatanValue = old("pendapatan_komoditas.$index.pendapatan", $item?->pendapatan)) +
+ Rp + +
+
+ @php($periodeValue = old("pendapatan_komoditas.$index.periode", $item?->periode)) +
+
+ + +
+
+ + +
+
+
+
+
+ +
+ +
Pendapatan di Luar Pertanian
+
+ + + + + + + + + @for($i = 0; $i < 2; $i++) + @php($item = $pendapatanLuarPertanian->get($i)) + + + + + @endfor + +
Jenis PekerjaanEstimasi per Bulan
+ jenis_pekerjaan) }}"> + + @php($estimasiValue = old("pendapatan_luar_pertanian.$i.estimasi_per_bulan", $item?->estimasi_per_bulan)) +
+ Rp + +
+
+
+
+ +
+ +
Stabilitas Penghasilan
+
+
+ + + @error('skor_periode_paceklik')
{{ $message }}
@enderror +
+
+ + + @error('bulan_paceklik')
{{ $message }}
@enderror +
+
+ + + @error('sumber_penghasilan_paceklik')
{{ $message }}
@enderror +
+
+ +
Biaya Produksi dan Tabungan
+
+
+ + @php($biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim)) +
+ Rp + +
+ @error('total_estimasi_biaya_kebun_per_musim')
{{ $message }}
@enderror +
+
+ + + @error('skor_kemampuan_menabung')
{{ $message }}
@enderror +
+
+ + @php($tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan)) +
+ Rp + +
+ @error('estimasi_tabungan_per_bulan')
{{ $message }}
@enderror +
+
+ +
Persepsi Kecukupan Penghasilan
+
+
+ + + @error('skor_kecukupan_penghasilan')
{{ $message }}
@enderror +
+
+ + + @error('alasan_kecukupan_penghasilan')
{{ $message }}
@enderror +
+
+ +
Kondisi Aset & Lahan - Kejelasan Hak Kelola
+
+
+ + + @error('status_kepemilikan_lahan')
{{ $message }}
@enderror +
+
+ + + @error('skor_kejelasan_status_lahan')
{{ $message }}
@enderror +
+
+ + + @error('ada_sertifikat_dokumen')
{{ $message }}
@enderror +
+
+ + + @error('ada_sengketa')
{{ $message }}
@enderror +
+
+
+
+ + + @error('keterangan_sengketa')
{{ $message }}
@enderror +
+
+ + + @error('pihak_membantu_konflik')
{{ $message }}
@enderror +
+
+ + + @error('pihak_membantu_konflik_nama')
{{ $message }}
@enderror +
+
+ + + @error('tahun_bantuan_konflik')
{{ $message }}
@enderror +
+
+ + + @error('status_konflik')
{{ $message }}
@enderror +
+
+ +
+ +
+
+
+
+
+
+
+@endsection + +@push('scripts') + +@endpush diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php index 4642dc2..d440615 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php @@ -49,7 +49,7 @@ -
Pendapatan dari Komoditas Utama
+
Pendapatan dari Komoditas Utama
@if($komoditasPetani->isEmpty())
Petani ini belum memiliki komoditas pada data lahan. Tambahkan data Lahan & Tanaman terlebih dahulu agar pilihan komoditas tersedia. @@ -60,7 +60,7 @@ Komoditas - Pendapatan (Rp) + Pendapatan Periode @@ -80,28 +80,42 @@ @php($pendapatanValue = old("pendapatan_komoditas.$i.pendapatan", $item?->pendapatan)) - +
+ Rp + +
- + @php($periodeValue = old("pendapatan_komoditas.$i.periode", $item?->periode)) +
+
+ + +
+
+ + +
+
@endfor
+
+ +
-
Pendapatan dari Komoditas Lain
+
Pendapatan dari Komoditas Lain
- + @@ -122,28 +136,42 @@ @endfor
KomoditasPendapatan (Rp)Pendapatan Periode
@php($pendapatanValue = old("pendapatan_komoditas.$index.pendapatan", $item?->pendapatan)) - +
+ Rp + +
- + @php($periodeValue = old("pendapatan_komoditas.$index.periode", $item?->periode)) +
+
+ + +
+
+ + +
+
+
+ +
-
Pendapatan di Luar Pertanian
+
Pendapatan di Luar Pertanian
- + @@ -155,13 +183,21 @@ @endfor
Jenis PekerjaanEstimasi per Bulan (Rp)Estimasi per Bulan
@php($estimasiValue = old("pendapatan_luar_pertanian.$i.estimasi_per_bulan", $item?->estimasi_per_bulan)) - +
+ Rp + +
+
+ +
Stabilitas Penghasilan
@@ -192,9 +228,12 @@
Biaya Produksi dan Tabungan
- + @php($biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim)) - +
+ Rp + +
@error('total_estimasi_biaya_kebun_per_musim')
{{ $message }}
@enderror
@@ -210,9 +249,12 @@ @error('skor_kemampuan_menabung')
{{ $message }}
@enderror
- + @php($tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan)) - +
+ Rp + +
@error('estimasi_tabungan_per_bulan')
{{ $message }}
@enderror
@@ -374,28 +416,169 @@ return Boolean(triggerValue); } - function syncPendapatanRows(group) { + function setupPendapatanRows(group) { const $rows = $('.pendapatan-row[data-group="' + group + '"]'); - let previousHasValue = true; $rows.each(function (index) { const $row = $(this); const currentHasValue = rowHasValue($row); - if (index === 0 || previousHasValue || currentHasValue) { + if (index === 0 || currentHasValue) { $row.removeClass('d-none'); } else { $row.addClass('d-none'); } - - previousHasValue = currentHasValue; }); + + syncAddPendapatanButton(group); } - function syncAllPendapatanRows() { - syncPendapatanRows('komoditas-utama'); - syncPendapatanRows('komoditas-lainnya'); - syncPendapatanRows('luar-pertanian'); + function setupAllPendapatanRows() { + setupPendapatanRows('komoditas-utama'); + setupPendapatanRows('komoditas-lainnya'); + setupPendapatanRows('luar-pertanian'); + } + + function maxPendapatanRows(group) { + if (group === 'komoditas-utama') { + return 2; + } + return Infinity; + } + + function syncAddPendapatanButton(group) { + const visibleRows = $('.pendapatan-row[data-group="' + group + '"]:visible').length; + const maxRows = maxPendapatanRows(group); + + if (visibleRows >= maxRows) { + $('.add-pendapatan-row[data-group="' + group + '"]').addClass('d-none'); + } else { + $('.add-pendapatan-row[data-group="' + group + '"]').removeClass('d-none'); + } + } + + function showNextPendapatanRow(group) { + const visibleRows = $('.pendapatan-row[data-group="' + group + '"]:visible').length; + const maxRows = maxPendapatanRows(group); + + if (visibleRows >= maxRows) { + return; + } + + const $hiddenRow = $('.pendapatan-row[data-group="' + group + '"].d-none').first(); + + if ($hiddenRow.length) { + $hiddenRow.removeClass('d-none'); + } else { + appendPendapatanRow(group); + } + + syncAddPendapatanButton(group); + } + + function appendPendapatanRow(group) { + const $tbody = $('.pendapatan-row[data-group="' + group + '"]').first().closest('tbody'); + const $row = group === 'luar-pertanian' + ? buildPendapatanLuarPertanianRow(group) + : buildPendapatanKomoditasRow(group); + + $tbody.append($row); + $row.find('.sosial-ekonomi-komoditas').select2(); + syncKomoditasLainnyaOptions(); + } + + function nextPendapatanKomoditasIndex() { + return nextArrayIndex('pendapatan_komoditas'); + } + + function nextPendapatanLuarPertanianIndex() { + return nextArrayIndex('pendapatan_luar_pertanian'); + } + + function nextArrayIndex(name) { + let maxIndex = -1; + $('[name^="' + name + '["]').each(function () { + const match = this.name.match(new RegExp(name + '\\[(\\d+)\\]')); + + if (match) { + maxIndex = Math.max(maxIndex, Number(match[1])); + } + }); + + return maxIndex + 1; + } + + function nextRowIndex(group) { + return $('.pendapatan-row[data-group="' + group + '"]').length; + } + + function komoditasOptionsHtml() { + const $options = $('.sosial-ekonomi-komoditas').first().find('option').map(function () { + return $('