diff --git a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php index 2db7af1..a54498f 100644 --- a/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php +++ b/app/Http/Controllers/Web/Produktivitas/SosialEkonomiController.php @@ -154,8 +154,7 @@ class SosialEkonomiController extends Controller }); if (!$request->expectsJson()) { - return redirect() - ->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]) + return $this->redirectToEditSection($sosialEkonomi, $request) ->with('success', 'Data sosial ekonomi berhasil disimpan.'); } @@ -206,8 +205,7 @@ class SosialEkonomiController extends Controller }); if (!$request->expectsJson()) { - return redirect() - ->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]) + return $this->redirectToEditSection($sosialEkonomi, $request) ->with('success', 'Data sosial ekonomi berhasil diperbarui.'); } @@ -218,6 +216,18 @@ class SosialEkonomiController extends Controller ]); } + private function redirectToEditSection(SosialEkonomi $sosialEkonomi, Request $request): RedirectResponse + { + $url = route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id]); + $fragment = $request->input('redirect_fragment'); + + if (is_string($fragment) && preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) { + $url .= '#' . $fragment; + } + + return redirect()->to($url); + } + public function destroy(string $id): JsonResponse { $sosialEkonomi = SosialEkonomi::findOrFail($id); @@ -589,6 +599,14 @@ class SosialEkonomiController extends Controller $payload = $this->normalizeSkorPayload($payload); + if (array_key_exists('ada_sengketa', $payload) && !filter_var($payload['ada_sengketa'], FILTER_VALIDATE_BOOLEAN)) { + $payload['keterangan_sengketa'] = null; + $payload['pihak_membantu_konflik'] = null; + $payload['pihak_membantu_konflik_nama'] = null; + $payload['tahun_bantuan_konflik'] = null; + $payload['status_konflik'] = null; + } + if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) { $payload['pihak_membantu_konflik_nama'] = null; $payload['tahun_bantuan_konflik'] = null; diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php index 521563b..d5cb7ae 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/edit.blade.php @@ -1,5 +1,17 @@ @extends('layout.main') +@push('scripts-head') + +@endpush + @section('content')
@if (session('success')) @@ -1062,6 +1074,20 @@ const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue)); + const sectionAnchors = { + utama: 'section-utama', + sosial_budaya: 'section-sosial-budaya', + keanggotaan_kelompok: 'section-keanggotaan-kelompok', + akses_keuangan: 'section-akses-keuangan', + keterikatan_hutang: 'section-keterikatan-hutang' + }; + const nextSectionAnchors = { + utama: 'section-sosial-budaya', + sosial_budaya: 'section-keanggotaan-kelompok', + keanggotaan_kelompok: 'section-akses-keuangan', + akses_keuangan: 'section-keterikatan-hutang', + keterikatan_hutang: 'section-keterikatan-hutang' + }; const fieldExamples = { jumlah_tanggungan: 'Contoh: 4', anak_masih_sekolah: 'Contoh: 2', @@ -1399,7 +1425,8 @@ } function syncPihakMembantuFields() { - const isTidakAda = $('#pihak-membantu').val() === pihakMembantuTanpaBantuan; + const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1'; + const isTidakAda = !isAdaSengketa || $('#pihak-membantu').val() === pihakMembantuTanpaBantuan; const $fields = $('#pihak-membantu-nama, #tahun-bantuan'); $fields.prop('disabled', isTidakAda); @@ -1409,6 +1436,21 @@ } } + function syncSengketaFields() { + const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1'; + const $fields = $('#keterangan-sengketa, #pihak-membantu, #status-konflik'); + const $assistanceFields = $('#pihak-membantu-nama, #tahun-bantuan'); + + $fields.prop('disabled', !isAdaSengketa); + + if (!isAdaSengketa) { + $fields.add($assistanceFields).val(''); + $fields.filter('select').trigger('change.select2'); + } + + syncPihakMembantuFields(); + } + function syncPernahJualHargaLebihTinggiFields() { const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah; const $field = $('#penyebab-harga-lebih-tinggi'); @@ -1601,6 +1643,37 @@ clearPendapatanRowValidation($row); } + function setupSectionAnchors() { + $('input[name="form_section"]').each(function () { + const section = this.value; + const anchor = sectionAnchors[section]; + const nextAnchor = nextSectionAnchors[section] || anchor; + const $form = $(this).closest('form'); + + if (anchor) { + $form.find('> .card').first().attr('id', anchor); + } + + if (nextAnchor && !$form.find('input[name="redirect_fragment"]').length) { + $('', { + type: 'hidden', + name: 'redirect_fragment', + value: nextAnchor + }).appendTo($form); + } + }); + + if (window.location.hash) { + const target = document.getElementById(window.location.hash.substring(1)); + + if (target) { + setTimeout(function () { + target.scrollIntoView({ block: 'start' }); + }, 0); + } + } + } + $(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions); $(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () { clearPendapatanRowValidation($(this).closest('.pendapatan-row')); @@ -1636,6 +1709,7 @@ }); }); $('#pihak-membantu').on('change', syncPihakMembantuFields); + $('input[name="ada_sengketa"]').on('change', syncSengketaFields); $('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields); $('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields); $('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields); @@ -1650,10 +1724,12 @@ $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); $('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields); $('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields); + setupSectionAnchors(); applySosialEkonomiExamples(); syncKomoditasLainnyaOptions(); setupAllPendapatanRows(); syncPihakMembantuFields(); + syncSengketaFields(); syncPernahJualHargaLebihTinggiFields(); syncPanutanFields(); syncTerdaftarKelompokFields(); diff --git a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php index 22fc8e3..b136076 100644 --- a/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php +++ b/resources/views/produktivitas/petani/sosial-ekonomi/index.blade.php @@ -1,5 +1,17 @@ @extends('layout.main') +@push('scripts-head') + +@endpush + @section('content')
@if (session('success')) @@ -1058,6 +1070,20 @@ const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue)); + const sectionAnchors = { + utama: 'section-utama', + sosial_budaya: 'section-sosial-budaya', + keanggotaan_kelompok: 'section-keanggotaan-kelompok', + akses_keuangan: 'section-akses-keuangan', + keterikatan_hutang: 'section-keterikatan-hutang' + }; + const nextSectionAnchors = { + utama: 'section-sosial-budaya', + sosial_budaya: 'section-keanggotaan-kelompok', + keanggotaan_kelompok: 'section-akses-keuangan', + akses_keuangan: 'section-keterikatan-hutang', + keterikatan_hutang: 'section-keterikatan-hutang' + }; const fieldExamples = { jumlah_tanggungan: 'Contoh: 4', anak_masih_sekolah: 'Contoh: 2', @@ -1395,7 +1421,8 @@ } function syncPihakMembantuFields() { - const isTidakAda = $('#pihak-membantu').val() === pihakMembantuTanpaBantuan; + const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1'; + const isTidakAda = !isAdaSengketa || $('#pihak-membantu').val() === pihakMembantuTanpaBantuan; const $fields = $('#pihak-membantu-nama, #tahun-bantuan'); $fields.prop('disabled', isTidakAda); @@ -1405,6 +1432,21 @@ } } + function syncSengketaFields() { + const isAdaSengketa = $('input[name="ada_sengketa"]:checked').val() === '1'; + const $fields = $('#keterangan-sengketa, #pihak-membantu, #status-konflik'); + const $assistanceFields = $('#pihak-membantu-nama, #tahun-bantuan'); + + $fields.prop('disabled', !isAdaSengketa); + + if (!isAdaSengketa) { + $fields.add($assistanceFields).val(''); + $fields.filter('select').trigger('change.select2'); + } + + syncPihakMembantuFields(); + } + function syncPernahJualHargaLebihTinggiFields() { const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah; const $field = $('#penyebab-harga-lebih-tinggi'); @@ -1597,6 +1639,37 @@ clearPendapatanRowValidation($row); } + function setupSectionAnchors() { + $('input[name="form_section"]').each(function () { + const section = this.value; + const anchor = sectionAnchors[section]; + const nextAnchor = nextSectionAnchors[section] || anchor; + const $form = $(this).closest('form'); + + if (anchor) { + $form.find('> .card').first().attr('id', anchor); + } + + if (nextAnchor && !$form.find('input[name="redirect_fragment"]').length) { + $('', { + type: 'hidden', + name: 'redirect_fragment', + value: nextAnchor + }).appendTo($form); + } + }); + + if (window.location.hash) { + const target = document.getElementById(window.location.hash.substring(1)); + + if (target) { + setTimeout(function () { + target.scrollIntoView({ block: 'start' }); + }, 0); + } + } + } + $(document).on('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions); $(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () { clearPendapatanRowValidation($(this).closest('.pendapatan-row')); @@ -1632,6 +1705,7 @@ }); }); $('#pihak-membantu').on('change', syncPihakMembantuFields); + $('input[name="ada_sengketa"]').on('change', syncSengketaFields); $('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields); $('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields); $('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields); @@ -1646,10 +1720,12 @@ $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); $('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields); $('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields); + setupSectionAnchors(); applySosialEkonomiExamples(); syncKomoditasLainnyaOptions(); setupAllPendapatanRows(); syncPihakMembantuFields(); + syncSengketaFields(); syncPernahJualHargaLebihTinggiFields(); syncPanutanFields(); syncTerdaftarKelompokFields();