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();