diff --git a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php index dfdcf7a..6834594 100644 --- a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php +++ b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php @@ -51,6 +51,32 @@ class SosialEkonomiController extends Controller ->where('petani_id', $petani->id) ->first(); + if ($sosialEkonomi && !$request->expectsJson()) { + return redirect()->route('petani.sosial-ekonomi.edit', [$petani->id, $sosialEkonomi->id]); + } + + return $this->formView($request, $petani, $sosialEkonomi, 'produktivitas.petani.sosial-ekonomi.index'); + } + + 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(); @@ -61,7 +87,7 @@ class SosialEkonomiController extends Controller return response()->json($sosialEkonomi); } - return view('produktivitas.petani.sosial-ekonomi.index', compact( + return view($view, compact( 'petani', 'sosialEkonomi', 'komoditasPetani', @@ -97,7 +123,7 @@ class SosialEkonomiController extends Controller if (!$request->expectsJson()) { return redirect() - ->route('petani.sosial-ekonomi.index', $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, Petani|string $petani, ?string $sosialEkonomiId = null): JsonResponse|RedirectResponse + public function update(Request $request, string $petani, string $sosial_ekonomi): JsonResponse|RedirectResponse { - $sosialEkonomi = $this->findSosialEkonomi($petani, $sosialEkonomiId); + $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.index', $sosialEkonomi->petani_id) + ->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]) ->with('success', 'Data sosial ekonomi berhasil diperbarui.'); } @@ -307,12 +333,4 @@ class SosialEkonomiController extends Controller ->get(); } - private function findSosialEkonomi(Petani|string $petani, ?string $sosialEkonomiId = null): SosialEkonomi - { - if ($petani instanceof Petani) { - return SosialEkonomi::where('petani_id', $petani->id)->findOrFail($sosialEkonomiId); - } - - return SosialEkonomi::findOrFail($petani); - } } diff --git a/resources/views/produktivitas/petani/header.blade.php b/resources/views/produktivitas/petani/header.blade.php index 7a55efd..d8761d2 100644 --- a/resources/views/produktivitas/petani/header.blade.php +++ b/resources/views/produktivitas/petani/header.blade.php @@ -206,7 +206,7 @@ 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 $('