solve sosial ekonomi

This commit is contained in:
2026-07-22 14:41:05 +07:00
parent 079e300d5d
commit 9576c6295e
3 changed files with 176 additions and 6 deletions
@@ -154,8 +154,7 @@ class SosialEkonomiController extends Controller
}); });
if (!$request->expectsJson()) { if (!$request->expectsJson()) {
return redirect() return $this->redirectToEditSection($sosialEkonomi, $request)
->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id])
->with('success', 'Data sosial ekonomi berhasil disimpan.'); ->with('success', 'Data sosial ekonomi berhasil disimpan.');
} }
@@ -206,8 +205,7 @@ class SosialEkonomiController extends Controller
}); });
if (!$request->expectsJson()) { if (!$request->expectsJson()) {
return redirect() return $this->redirectToEditSection($sosialEkonomi, $request)
->route('petani.sosial-ekonomi.edit', [$sosialEkonomi->petani_id, $sosialEkonomi->id])
->with('success', 'Data sosial ekonomi berhasil diperbarui.'); ->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 public function destroy(string $id): JsonResponse
{ {
$sosialEkonomi = SosialEkonomi::findOrFail($id); $sosialEkonomi = SosialEkonomi::findOrFail($id);
@@ -589,6 +599,14 @@ class SosialEkonomiController extends Controller
$payload = $this->normalizeSkorPayload($payload); $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) { if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) {
$payload['pihak_membantu_konflik_nama'] = null; $payload['pihak_membantu_konflik_nama'] = null;
$payload['tahun_bantuan_konflik'] = null; $payload['tahun_bantuan_konflik'] = null;
@@ -1,5 +1,17 @@
@extends('layout.main') @extends('layout.main')
@push('scripts-head')
<style>
#section-utama,
#section-sosial-budaya,
#section-keanggotaan-kelompok,
#section-akses-keuangan,
#section-keterikatan-hutang {
scroll-margin-top: 96px;
}
</style>
@endpush
@section('content') @section('content')
<div class="container-xxl flex-grow-1 container-p-y"> <div class="container-xxl flex-grow-1 container-p-y">
@if (session('success')) @if (session('success'))
@@ -1062,6 +1074,20 @@
const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue);
const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue);
const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue)); 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 = { const fieldExamples = {
jumlah_tanggungan: 'Contoh: 4', jumlah_tanggungan: 'Contoh: 4',
anak_masih_sekolah: 'Contoh: 2', anak_masih_sekolah: 'Contoh: 2',
@@ -1399,7 +1425,8 @@
} }
function syncPihakMembantuFields() { 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'); const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
$fields.prop('disabled', isTidakAda); $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() { function syncPernahJualHargaLebihTinggiFields() {
const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah; const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah;
const $field = $('#penyebab-harga-lebih-tinggi'); const $field = $('#penyebab-harga-lebih-tinggi');
@@ -1601,6 +1643,37 @@
clearPendapatanRowValidation($row); 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) {
$('<input>', {
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('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions);
$(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () { $(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () {
clearPendapatanRowValidation($(this).closest('.pendapatan-row')); clearPendapatanRowValidation($(this).closest('.pendapatan-row'));
@@ -1636,6 +1709,7 @@
}); });
}); });
$('#pihak-membantu').on('change', syncPihakMembantuFields); $('#pihak-membantu').on('change', syncPihakMembantuFields);
$('input[name="ada_sengketa"]').on('change', syncSengketaFields);
$('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields); $('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields);
$('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields); $('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields);
$('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields); $('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields);
@@ -1650,10 +1724,12 @@
$('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields);
$('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields); $('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields);
$('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields); $('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields);
setupSectionAnchors();
applySosialEkonomiExamples(); applySosialEkonomiExamples();
syncKomoditasLainnyaOptions(); syncKomoditasLainnyaOptions();
setupAllPendapatanRows(); setupAllPendapatanRows();
syncPihakMembantuFields(); syncPihakMembantuFields();
syncSengketaFields();
syncPernahJualHargaLebihTinggiFields(); syncPernahJualHargaLebihTinggiFields();
syncPanutanFields(); syncPanutanFields();
syncTerdaftarKelompokFields(); syncTerdaftarKelompokFields();
@@ -1,5 +1,17 @@
@extends('layout.main') @extends('layout.main')
@push('scripts-head')
<style>
#section-utama,
#section-sosial-budaya,
#section-keanggotaan-kelompok,
#section-akses-keuangan,
#section-keterikatan-hutang {
scroll-margin-top: 96px;
}
</style>
@endpush
@section('content') @section('content')
<div class="container-xxl flex-grow-1 container-p-y"> <div class="container-xxl flex-grow-1 container-p-y">
@if (session('success')) @if (session('success'))
@@ -1058,6 +1070,20 @@
const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue); const pinjamanTokohAdatAda = @json($pinjamanTokohAdatAdaValue);
const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue); const tekananJualSegeraAda = @json($tekananJualSegeraAdaValue);
const kebebasanMemilihPembeliCukupBebas = Number(@json($kebebasanMemilihPembeliCukupBebasValue)); 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 = { const fieldExamples = {
jumlah_tanggungan: 'Contoh: 4', jumlah_tanggungan: 'Contoh: 4',
anak_masih_sekolah: 'Contoh: 2', anak_masih_sekolah: 'Contoh: 2',
@@ -1395,7 +1421,8 @@
} }
function syncPihakMembantuFields() { 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'); const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
$fields.prop('disabled', isTidakAda); $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() { function syncPernahJualHargaLebihTinggiFields() {
const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah; const isPernah = $('#pernah-jual-harga-lebih-tinggi').val() === pernahJualHargaLebihTinggiPernah;
const $field = $('#penyebab-harga-lebih-tinggi'); const $field = $('#penyebab-harga-lebih-tinggi');
@@ -1597,6 +1639,37 @@
clearPendapatanRowValidation($row); 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) {
$('<input>', {
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('change', '.sosial-ekonomi-komoditas-utama', syncKomoditasLainnyaOptions);
$(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () { $(document).on('input change', '.pendapatan-row input, .pendapatan-row select', function () {
clearPendapatanRowValidation($(this).closest('.pendapatan-row')); clearPendapatanRowValidation($(this).closest('.pendapatan-row'));
@@ -1632,6 +1705,7 @@
}); });
}); });
$('#pihak-membantu').on('change', syncPihakMembantuFields); $('#pihak-membantu').on('change', syncPihakMembantuFields);
$('input[name="ada_sengketa"]').on('change', syncSengketaFields);
$('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields); $('#pernah-jual-harga-lebih-tinggi').on('change', syncPernahJualHargaLebihTinggiFields);
$('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields); $('input[name="panutan_petani_sukses"]').on('change', syncPanutanFields);
$('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields); $('input[name="terdaftar_kelompok_tani"]').on('change', syncTerdaftarKelompokFields);
@@ -1646,10 +1720,12 @@
$('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields); $('#total-hutang-tidak-bersedia').on('change', syncTotalHutangFields);
$('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields); $('input[name="tekanan_jual_segera"]').on('change', syncTekananJualFields);
$('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields); $('input[name="kebebasan_memilih_pembeli"]').on('change', syncKebebasanPembeliFields);
setupSectionAnchors();
applySosialEkonomiExamples(); applySosialEkonomiExamples();
syncKomoditasLainnyaOptions(); syncKomoditasLainnyaOptions();
setupAllPendapatanRows(); setupAllPendapatanRows();
syncPihakMembantuFields(); syncPihakMembantuFields();
syncSengketaFields();
syncPernahJualHargaLebihTinggiFields(); syncPernahJualHargaLebihTinggiFields();
syncPanutanFields(); syncPanutanFields();
syncTerdaftarKelompokFields(); syncTerdaftarKelompokFields();