This commit is contained in:
2026-07-03 15:08:02 +07:00
6 changed files with 553 additions and 46 deletions
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Web\Produktivitas;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use App\Models\Pertanian\Petani;
class PraktikBudidayaController extends Controller
{
public function index($petaniId, Request $request)
{
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
abort(403);
}
$title = 'Petani - Praktik Budidaya';
$petani = Petani::findOrFail($petaniId);
return view('produktivitas.petani.praktik-budidaya.add', compact('title', 'petani'));
}
}
@@ -3,9 +3,12 @@
namespace App\Http\Controllers\Web\Produktivitas;
use App\Http\Controllers\Controller;
use App\Models\Pertanian\Komoditas;
use App\Models\Pertanian\Lahan;
use App\Models\Pertanian\Petani;
use App\Models\Pertanian\SosialEkonomi;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
@@ -27,13 +30,15 @@ class SosialEkonomiController extends Controller
$pendapatanKomoditasUtama = $pendapatanKomoditas->where('kategori', 'utama')->values();
$pendapatanKomoditasLainnya = $pendapatanKomoditas->where('kategori', 'lainnya')->values();
$pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian?->values() ?? collect();
$komoditasPetani = $this->komoditasPetani($petani);
return view('produktivitas.petani.sosial-ekonomi.index', compact(
'petani',
'sosialEkonomi',
'pendapatanKomoditasUtama',
'pendapatanKomoditasLainnya',
'pendapatanLuarPertanian'
'pendapatanLuarPertanian',
'komoditasPetani'
));
}
@@ -56,7 +61,7 @@ class SosialEkonomiController extends Controller
return response()->json($sosialEkonomi);
}
public function store(Request $request): JsonResponse
public function store(Request $request): JsonResponse|RedirectResponse
{
$validated = $this->validateData($request);
@@ -103,7 +108,7 @@ class SosialEkonomiController extends Controller
]);
}
public function update(Request $request, string $id): JsonResponse
public function update(Request $request, string $id): JsonResponse|RedirectResponse
{
$sosialEkonomi = SosialEkonomi::findOrFail($id);
$validated = $this->validateData($request, $sosialEkonomi->id);
@@ -201,12 +206,19 @@ class SosialEkonomiController extends Controller
private function sosialEkonomiPayload(array $validated): array
{
return collect($validated)
$payload = collect($validated)
->except(['pendapatan_komoditas', 'pendapatan_luar_pertanian'])
->merge([
'uid' => $validated['uid'] ?? 'SEK-' . Str::uuid(),
])
->all();
if (($payload['pihak_membantu_konflik'] ?? null) === 'Tidak ada-selesaikan sendiri') {
$payload['pihak_membantu_konflik_nama'] = null;
$payload['tahun_bantuan_konflik'] = null;
}
return $payload;
}
private function syncPendapatanKomoditas(SosialEkonomi $sosialEkonomi, array $items): void
@@ -261,4 +273,23 @@ class SosialEkonomiController extends Controller
return filled($item['jenis_pekerjaan'] ?? null)
|| filled($item['estimasi_per_bulan'] ?? null);
}
private function komoditasPetani(Petani $petani)
{
$komoditasIds = Lahan::query()
->whereNotNull('komoditas_id')
->where(function ($query) use ($petani) {
$query->where('petani_id', $petani->id);
if ($petani->profile_id) {
$query->orWhere('profile_id', $petani->profile_id);
}
})
->distinct()
->pluck('komoditas_id');
return Komoditas::whereIn('id', $komoditasIds)
->orderBy('nama')
->get();
}
}
@@ -72,7 +72,7 @@
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('petani.edit', $petani->id) }}">
<a class="nav-link {{ request()->routeIs('petani.praktik-budidaya.*') ? 'active' : '' }}" href="{{ route('petani.praktik-budidaya.index', $petani->id) }}">
<i class="icon-base ti tabler-user-check me-1_5 icon-sm"></i>Praktik Budidaya
</a>
</li>
@@ -82,7 +82,7 @@
</a>
</li>
<li class="nav-item">
<a class="nav-link {{ request()->routeIs('petani.sosial-ekonomi.*') ? 'active' : '' }}" href="{{ route('petani.sosial-ekonomi.edit', $petani->id) }}">
<a class="nav-link {{ request()->routeIs('petani.sosial-ekonomi.*') ? 'active' : '' }}" href="{{ route('petani.sosial-ekonomi.index', $petani->id) }}">
<i class="icon-base ti tabler-user-check me-1_5 icon-sm"></i>Sosial Ekonomi
</a>
</li>
@@ -0,0 +1,326 @@
@extends('layout.main')
@section('content')
<div class="container-xxl flex-grow-1 container-p-y">
@if ($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="row">
<!-- PROFIL PETANI -->
<div class="col-md-12">
@include('produktivitas.petani.header', ['petani' => $petani])
<div class="card mb-6">
<div class="card-body pt-12">
<!-- INFORMASI PETANI -->
<h5 class="pb-4 border-bottom mb-4">Persiapan Lahan & Tanaman</h5>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="tenaga-kerja">Tenaga Kerja</label>
<select class="form-control @error('tenaga_kerja') is-invalid @enderror" id="tenaga-kerja" name="tenaga_kerja">
<option value="">Pilih Tenaga Kerja</option>
</select>
@error('tenaga_kerja')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<h5 class="pb-4 border-bottom mb-4">Praktik Pemangkasan & Penyerbukan</h5>
<div class="row border-bottom mb-4 pb-4">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="frekuensi-pemangkasan-komoditas-utama">Frekuensi Pemangkasan Komoditas Utama<span class="text-danger">*</span></label>
<select class="form-control @error('frekuensi_pemangkasan_komoditas_utama') is-invalid @enderror" id="frekuensi-pemangkasan-komoditas-utama" name="frekuensi_pemangkasan_komoditas_utama">
<option value="">Pilih Frekuensi Pemangkasan</option>
<option value="1">Tidak pernah memangkas sama sekali</option>
<option value="2">Memangkas, tapi tidak rutin dan tidak tahu tekniknya</option>
<option value="3">Memangkas 1 kali/tahun, tahu jenis tekniknya</option>
<option value="4">Memangkas 2 kali/tahun, tahu jenis tekniknya</option>
<option value="5">Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin</option>
</select>
@error('frekuensi_pemangkasan_komoditas_utama')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Teknik pemangkasan yang dilakukan<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="bentuk"
id="teknik-bentuk"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('bentuk', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-bentuk">Pemangkasan bentuk</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="produksi"
id="teknik-produksi"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('produksi', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-produksi">Pemangkasan produksi</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="peremajaan"
id="teknik-peremajaan"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('peremajaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-peremajaan">Pemangkasan peremajaan</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="kebiasaan"
id="teknik-kebiasaan"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('kebiasaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-kebiasaan">Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="lainnya"
id="teknik-lainnya"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('lainnya', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="teknik-lainnya">Lainnya:</label>
<input type="text" name="teknik_pemangkasan_lainnya" class="form-control form-control-sm w-50" value="{{ old('teknik_pemangkasan_lainnya', $petani->teknik_pemangkasan_lainnya ?? '') }}" placeholder="Sebutkan jenis pemangkasan lain...">
</div>
@error('teknik_pemangkasan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="frekuensi-pemangkasan-pohon-penaung">Frekuensi Pemangkasan Pohon Penaung<span class="text-danger">*</span></label>
<select class="form-control @error('frekuensi_pemangkasan_pohon_penaung') is-invalid @enderror" id="frekuensi-pemangkasan-pohon-penaung" name="frekuensi_pemangkasan_pohon_penaung">
<option value="">Pilih Frekuensi Pemangkasan</option>
<option value="1">Tidak pernah memangkas sama sekali</option>
<option value="2">Memangkas, tapi tidak rutin dan tidak tahu tekniknya</option>
<option value="3">Memangkas 1 kali/tahun, tahu jenis tekniknya</option>
<option value="4">Memangkas 2 kali/tahun, tahu jenis tekniknya</option>
<option value="5">Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin</option>
</select>
@error('frekuensi_pemangkasan_pohon_penaung')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Penyerbukan Manual<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('penyerbukan_manual') is-invalid @enderror"
type="radio"
name="penyerbukan_manual"
value="Selalu, setiap musim berbunga"
id="penyerbukan-selalu"
{{ old('penyerbukan_manual', $petani->penyerbukan_manual) == 'Selalu, setiap musim berbunga' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-selalu">Selalu, setiap musim berbunga</label>
</div>
<div class="form-check">
<input class="form-check-input @error('penyerbukan_manual') is-invalid @enderror"
type="radio"
name="penyerbukan_manual"
value="Kadang-kadang, tergantung kondisi"
id="penyerbukan-kadang"
{{ old('penyerbukan_manual', $petani->penyerbukan_manual) == 'Kadang-kadang, tergantung kondisi' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-kadang">Kadang-kadang, tergantung kondisi</label>
</div>
<div class="form-check">
<input class="form-check-input @error('penyerbukan_manual') is-invalid @enderror"
type="radio"
name="penyerbukan_manual"
value="Tidak pernah"
id="penyerbukan-tidak-pernah"
{{ old('penyerbukan_manual', $petani->penyerbukan_manual) == 'Tidak pernah' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tidak-pernah">Tidak pernah</label>
</div>
@error('penyerbukan_manual')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Alasan Tidak Melakukan Penyerbukan Manual<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Tidak tahu caranya"
id="penyerbukan-tidak-tahu"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Tidak tahu caranya' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tidak-tahu">Tidak tahu caranya</label>
</div>
<div class="form-check">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Tidak ada tenaga/waktu"
id="penyerbukan-tenaga-waktu"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Tidak ada tenaga/waktu' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tenaga-waktu">Tidak ada tenaga/waktu</label>
</div>
<div class="form-check">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Mengandalkan penyerbuk alami"
id="penyerbukan-mengandalkan-alami"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Mengandalkan penyerbuk alami' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-mengandalkan-alami">Mengandalkan penyerbuk alami</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="lainnya"
id="alasan-lainnya"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'lainnya' ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="alasan-lainnya">Lainnya:</label>
<input type="text"
name="alasan_tidak_penyerbukan_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('alasan_tidak_penyerbukan_lainnya', $petani->alasan_tidak_penyerbukan_lainnya ?? '') }}"
placeholder="Sebutkan alasan lain...">
</div>
@error('alasan_tidak_penyerbukan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
</div>
<div class="mt-4 text-end">
<button id="btn-profil" type="button" class="btn btn-success data-submit wave-effect wave-light">Simpan Praktik Budidaya</button>
</div>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
'use strict';
$(document).ready(function () {
$('#edit-petani-jenis-kelamin, #edit-petani-pendidikan-terakhir, #edit-petani-pekerjaan-utama, #edit-petani-komoditas, #edit-petani-pekerjaan-sampingan, #edit-petani-komoditas-sampingan, #edit-petani-status-pernikahan, #edit-petani-status-keluarga, #edit-petani-petani-pengumpul').select2();
$('#edit-petani-provinsi').select2().change(function(e) {
e.preventDefault();
var provinsiId = $(this).val();
$('#edit-petani-kabupaten').prop('disabled', !provinsiId).val('').trigger('change');
$('#edit-petani-kecamatan').prop('disabled', true).val('').trigger('change');
$('#edit-petani-desa').prop('disabled', true).val('').trigger('change');
if (provinsiId) {
$.ajax({
url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId),
method: 'GET',
success: function(data) {
$('#edit-petani-kabupaten').empty().append('<option value="">Pilih Kabupaten/Kota</option>');
data.forEach(function(kabupaten) {
$('#edit-petani-kabupaten').append('<option value="' + kabupaten.id + '">' + kabupaten.nama + '</option>');
});
}
});
}
});
$('#edit-petani-kabupaten').select2().change(function(e) {
e.preventDefault();
var kabupatenId = $(this).val();
$('#edit-petani-kecamatan').prop('disabled', !kabupatenId).val('').trigger('change');
$('#edit-petani-desa').prop('disabled', true).val('').trigger('change');
if (kabupatenId) {
$.ajax({
url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId),
method: 'GET',
success: function(data) {
$('#edit-petani-kecamatan').empty().append('<option value="">Pilih Kecamatan</option>');
data.forEach(function(kecamatan) {
$('#edit-petani-kecamatan').append('<option value="' + kecamatan.id + '">' + kecamatan.nama + '</option>');
});
}
});
}
});
$('#edit-petani-kecamatan').select2().change(function(e) {
e.preventDefault();
var kecamatanId = $(this).val();
$('#edit-petani-desa').prop('disabled', !kecamatanId).val('').trigger('change');
if (kecamatanId) {
$.ajax({
url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId),
method: 'GET',
success: function(data) {
$('#edit-petani-desa').empty().append('<option value="">Pilih Desa/Kelurahan</option>');
data.forEach(function(desa) {
$('#edit-petani-desa').append('<option value="' + desa.id + '">' + desa.nama + '</option>');
});
}
});
}
});
$('#edit-petani-desa').select2();
$('#editPetaniForm').validate({
rules: {
nama: { required: true },
tanggal_lahir: { required: true, date: true },
jenis_kelamin: { required: true },
pendidikan_terakhir: { required: true },
alamat: { required: true },
desa_kelurahan_id: { required: true },
status_perkawinan: { required: true },
},
messages: {
nama: { required: "Nama petani wajib diisi" },
tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" },
jenis_kelamin: { required: "Jenis kelamin wajib diisi" },
pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" },
alamat: { required: "Alamat wajib diisi" },
desa_kelurahan_id: { required: "Desa/Kelurahan wajib diisi" },
status_perkawinan: { required: "Status perkawinan wajib diisi" },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.mb-6, .form-control-validation').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -50,6 +50,11 @@
</div>
<h5 class="pb-4 border-bottom mb-4 mt-4">Pendapatan dari Komoditas Utama</h5>
@if($komoditasPetani->isEmpty())
<div class="alert alert-warning">
Petani ini belum memiliki komoditas pada data lahan. Tambahkan data Lahan & Tanaman terlebih dahulu agar pilihan komoditas tersedia.
</div>
@endif
<div class="table-responsive mb-4">
<table class="table table-bordered align-middle">
<thead>
@@ -62,13 +67,20 @@
<tbody>
@for($i = 0; $i < 2; $i++)
@php($item = $pendapatanKomoditasUtama->get($i))
<tr>
<tr class="pendapatan-row" data-group="komoditas-utama" data-row-index="{{ $i }}">
<td>
<input type="hidden" name="pendapatan_komoditas[{{ $i }}][kategori]" value="utama">
<input type="text" class="form-control" name="pendapatan_komoditas[{{ $i }}][komoditas]" value="{{ old("pendapatan_komoditas.$i.komoditas", $item?->komoditas) }}">
@php($selectedKomoditas = old("pendapatan_komoditas.$i.komoditas", $item?->komoditas))
<select class="form-control sosial-ekonomi-komoditas sosial-ekonomi-komoditas-utama pendapatan-trigger" data-kategori="utama" name="pendapatan_komoditas[{{ $i }}][komoditas]">
<option value="">Pilih Komoditas</option>
@foreach($komoditasPetani as $komoditas)
<option value="{{ $komoditas->nama }}" {{ $selectedKomoditas === $komoditas->nama ? 'selected' : '' }}>{{ $komoditas->nama }}</option>
@endforeach
</select>
</td>
<td>
<input type="number" min="0" class="form-control" name="pendapatan_komoditas[{{ $i }}][pendapatan]" value="{{ old("pendapatan_komoditas.$i.pendapatan", $item?->pendapatan) }}">
@php($pendapatanValue = old("pendapatan_komoditas.$i.pendapatan", $item?->pendapatan))
<input type="text" inputmode="numeric" class="form-control currency-input" name="pendapatan_komoditas[{{ $i }}][pendapatan]" value="{{ filled($pendapatanValue) ? number_format((int) preg_replace('/\D/', '', $pendapatanValue), 0, ',', '.') : '' }}">
</td>
<td>
<select class="form-control" name="pendapatan_komoditas[{{ $i }}][periode]">
@@ -97,13 +109,20 @@
@for($i = 0; $i < 2; $i++)
@php($item = $pendapatanKomoditasLainnya->get($i))
@php($index = $i + 2)
<tr>
<tr class="pendapatan-row" data-group="komoditas-lainnya" data-row-index="{{ $i }}">
<td>
<input type="hidden" name="pendapatan_komoditas[{{ $index }}][kategori]" value="lainnya">
<input type="text" class="form-control" name="pendapatan_komoditas[{{ $index }}][komoditas]" value="{{ old("pendapatan_komoditas.$index.komoditas", $item?->komoditas) }}">
@php($selectedKomoditas = old("pendapatan_komoditas.$index.komoditas", $item?->komoditas))
<select class="form-control sosial-ekonomi-komoditas sosial-ekonomi-komoditas-lainnya pendapatan-trigger" data-kategori="lainnya" name="pendapatan_komoditas[{{ $index }}][komoditas]">
<option value="">Pilih Komoditas</option>
@foreach($komoditasPetani as $komoditas)
<option value="{{ $komoditas->nama }}" {{ $selectedKomoditas === $komoditas->nama ? 'selected' : '' }}>{{ $komoditas->nama }}</option>
@endforeach
</select>
</td>
<td>
<input type="number" min="0" class="form-control" name="pendapatan_komoditas[{{ $index }}][pendapatan]" value="{{ old("pendapatan_komoditas.$index.pendapatan", $item?->pendapatan) }}">
@php($pendapatanValue = old("pendapatan_komoditas.$index.pendapatan", $item?->pendapatan))
<input type="text" inputmode="numeric" class="form-control currency-input" name="pendapatan_komoditas[{{ $index }}][pendapatan]" value="{{ filled($pendapatanValue) ? number_format((int) preg_replace('/\D/', '', $pendapatanValue), 0, ',', '.') : '' }}">
</td>
<td>
<select class="form-control" name="pendapatan_komoditas[{{ $index }}][periode]">
@@ -130,12 +149,13 @@
<tbody>
@for($i = 0; $i < 2; $i++)
@php($item = $pendapatanLuarPertanian->get($i))
<tr>
<tr class="pendapatan-row" data-group="luar-pertanian" data-row-index="{{ $i }}">
<td>
<input type="text" class="form-control" name="pendapatan_luar_pertanian[{{ $i }}][jenis_pekerjaan]" value="{{ old("pendapatan_luar_pertanian.$i.jenis_pekerjaan", $item?->jenis_pekerjaan) }}">
<input type="text" class="form-control pendapatan-trigger" name="pendapatan_luar_pertanian[{{ $i }}][jenis_pekerjaan]" value="{{ old("pendapatan_luar_pertanian.$i.jenis_pekerjaan", $item?->jenis_pekerjaan) }}">
</td>
<td>
<input type="number" min="0" class="form-control" name="pendapatan_luar_pertanian[{{ $i }}][estimasi_per_bulan]" value="{{ old("pendapatan_luar_pertanian.$i.estimasi_per_bulan", $item?->estimasi_per_bulan) }}">
@php($estimasiValue = old("pendapatan_luar_pertanian.$i.estimasi_per_bulan", $item?->estimasi_per_bulan))
<input type="text" inputmode="numeric" class="form-control currency-input" name="pendapatan_luar_pertanian[{{ $i }}][estimasi_per_bulan]" value="{{ filled($estimasiValue) ? number_format((int) preg_replace('/\D/', '', $estimasiValue), 0, ',', '.') : '' }}">
</td>
</tr>
@endfor
@@ -148,12 +168,12 @@
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="skor-periode-paceklik">Periode Paceklik</label>
<select class="form-control @error('skor_periode_paceklik') is-invalid @enderror" id="skor-periode-paceklik" name="skor_periode_paceklik">
<option value="">Pilih Skala</option>
<option value="1" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 1 ? 'selected' : '' }}>1 - &gt;4 bulan</option>
<option value="2" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 2 ? 'selected' : '' }}>2 - 3-4 bulan</option>
<option value="3" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 3 ? 'selected' : '' }}>3 - 1-2 bulan</option>
<option value="4" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 4 ? 'selected' : '' }}>4 - Sebentar & tidak menentu</option>
<option value="5" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 5 ? 'selected' : '' }}>5 - Tidak ada, stabil</option>
<option value="">Pilih Periode Paceklik</option>
<option value="1" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 1 ? 'selected' : '' }}>&gt;4 bulan</option>
<option value="2" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 2 ? 'selected' : '' }}>3-4 bulan</option>
<option value="3" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 3 ? 'selected' : '' }}>1-2 bulan</option>
<option value="4" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 4 ? 'selected' : '' }}>Sebentar & tidak menentu</option>
<option value="5" {{ old('skor_periode_paceklik', $sosialEkonomi?->skor_periode_paceklik) == 5 ? 'selected' : '' }}>Tidak ada, stabil</option>
</select>
@error('skor_periode_paceklik')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
@@ -173,24 +193,26 @@
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="biaya-kebun">Total Estimasi Biaya Kebun per Musim (Rp)</label>
<input type="number" min="0" class="form-control @error('total_estimasi_biaya_kebun_per_musim') is-invalid @enderror" id="biaya-kebun" name="total_estimasi_biaya_kebun_per_musim" value="{{ old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim) }}">
@php($biayaKebunValue = old('total_estimasi_biaya_kebun_per_musim', $sosialEkonomi?->total_estimasi_biaya_kebun_per_musim))
<input type="text" inputmode="numeric" class="form-control currency-input @error('total_estimasi_biaya_kebun_per_musim') is-invalid @enderror" id="biaya-kebun" name="total_estimasi_biaya_kebun_per_musim" value="{{ filled($biayaKebunValue) ? number_format((int) preg_replace('/\D/', '', $biayaKebunValue), 0, ',', '.') : '' }}">
@error('total_estimasi_biaya_kebun_per_musim')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="skor-menabung">Kemampuan Menabung</label>
<select class="form-control @error('skor_kemampuan_menabung') is-invalid @enderror" id="skor-menabung" name="skor_kemampuan_menabung">
<option value="">Pilih Skala</option>
<option value="1" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 1 ? 'selected' : '' }}>1 - Tidak bisa sama sekali</option>
<option value="2" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 2 ? 'selected' : '' }}>2 - Pernah tapi selalu terpakai</option>
<option value="3" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 3 ? 'selected' : '' }}>3 - Kadang-kadang</option>
<option value="4" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 4 ? 'selected' : '' }}>4 - Bisa tapi tidak tetap</option>
<option value="5" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 5 ? 'selected' : '' }}>5 - Rutin & jumlah tetap</option>
<option value="">Pilih Kemampuan Menabung</option>
<option value="1" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 1 ? 'selected' : '' }}>Tidak bisa sama sekali</option>
<option value="2" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 2 ? 'selected' : '' }}>Pernah tapi selalu terpakai</option>
<option value="3" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 3 ? 'selected' : '' }}>Kadang-kadang</option>
<option value="4" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 4 ? 'selected' : '' }}>Bisa tapi tidak tetap</option>
<option value="5" {{ old('skor_kemampuan_menabung', $sosialEkonomi?->skor_kemampuan_menabung) == 5 ? 'selected' : '' }}>Rutin & jumlah tetap</option>
</select>
@error('skor_kemampuan_menabung')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="tabungan-bulan">Estimasi Tabungan per Bulan (Rp)</label>
<input type="number" min="0" class="form-control @error('estimasi_tabungan_per_bulan') is-invalid @enderror" id="tabungan-bulan" name="estimasi_tabungan_per_bulan" value="{{ old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan) }}">
@php($tabunganValue = old('estimasi_tabungan_per_bulan', $sosialEkonomi?->estimasi_tabungan_per_bulan))
<input type="text" inputmode="numeric" class="form-control currency-input @error('estimasi_tabungan_per_bulan') is-invalid @enderror" id="tabungan-bulan" name="estimasi_tabungan_per_bulan" value="{{ filled($tabunganValue) ? number_format((int) preg_replace('/\D/', '', $tabunganValue), 0, ',', '.') : '' }}">
@error('estimasi_tabungan_per_bulan')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
@@ -200,12 +222,12 @@
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="skor-kecukupan">Kecukupan Penghasilan untuk Keluarga</label>
<select class="form-control @error('skor_kecukupan_penghasilan') is-invalid @enderror" id="skor-kecukupan" name="skor_kecukupan_penghasilan">
<option value="">Pilih Skala</option>
<option value="1" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 1 ? 'selected' : '' }}>1 - Sangat tidak cukup</option>
<option value="2" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 2 ? 'selected' : '' }}>2 - Kurang, sering berhutang</option>
<option value="3" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 3 ? 'selected' : '' }}>3 - Cukup pas-pasan</option>
<option value="4" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 4 ? 'selected' : '' }}>4 - Cukup, kadang ada sisa</option>
<option value="5" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 5 ? 'selected' : '' }}>5 - Lebih dari cukup</option>
<option value="">Pilih Kecukupan Penghasilan</option>
<option value="1" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 1 ? 'selected' : '' }}>Sangat tidak cukup</option>
<option value="2" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 2 ? 'selected' : '' }}>Kurang, sering berhutang</option>
<option value="3" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 3 ? 'selected' : '' }}>Cukup pas-pasan</option>
<option value="4" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 4 ? 'selected' : '' }}>Cukup, kadang ada sisa</option>
<option value="5" {{ old('skor_kecukupan_penghasilan', $sosialEkonomi?->skor_kecukupan_penghasilan) == 5 ? 'selected' : '' }}>Lebih dari cukup</option>
</select>
@error('skor_kecukupan_penghasilan')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
@@ -221,7 +243,7 @@
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="status-kepemilikan-lahan">Status Kepemilikan Lahan</label>
<select class="form-control @error('status_kepemilikan_lahan') is-invalid @enderror" id="status-kepemilikan-lahan" name="status_kepemilikan_lahan">
<option value="">Pilih Status</option>
<option value="">Pilih Status Kepemilikan Lahan</option>
@foreach(['Milik pribadi', 'Milik orang tua-keluarga', 'Sewa-bagi hasil', 'Lahan adat', 'Perhutanan sosial'] as $status)
<option value="{{ $status }}" {{ old('status_kepemilikan_lahan', $sosialEkonomi?->status_kepemilikan_lahan) === $status ? 'selected' : '' }}>{{ $status }}</option>
@endforeach
@@ -231,12 +253,12 @@
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="skor-kejelasan-lahan">Kejelasan Status Lahan</label>
<select class="form-control @error('skor_kejelasan_status_lahan') is-invalid @enderror" id="skor-kejelasan-lahan" name="skor_kejelasan_status_lahan">
<option value="">Pilih Skala</option>
<option value="1" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 1 ? 'selected' : '' }}>1 - Tidak ada dokumen & ada sengketa</option>
<option value="2" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 2 ? 'selected' : '' }}>2 - Ada dokumen tapi masih sengketa</option>
<option value="3" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 3 ? 'selected' : '' }}>3 - Pernah sengketa, sudah selesai</option>
<option value="4" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 4 ? 'selected' : '' }}>4 - Lahan adat/keluarga/perhutanan sosial tanpa sengketa</option>
<option value="5" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 5 ? 'selected' : '' }}>5 - Bersertifikat & tidak ada sengketa</option>
<option value="">Pilih Kejelasan Status Lahan</option>
<option value="1" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 1 ? 'selected' : '' }}>Tidak ada dokumen & ada sengketa</option>
<option value="2" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 2 ? 'selected' : '' }}>Ada dokumen tapi masih sengketa</option>
<option value="3" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 3 ? 'selected' : '' }}>Pernah sengketa, sudah selesai</option>
<option value="4" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 4 ? 'selected' : '' }}>Lahan adat/keluarga/perhutanan sosial tanpa sengketa</option>
<option value="5" {{ old('skor_kejelasan_status_lahan', $sosialEkonomi?->skor_kejelasan_status_lahan) == 5 ? 'selected' : '' }}>Bersertifikat & tidak ada sengketa</option>
</select>
@error('skor_kejelasan_status_lahan')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
@@ -312,7 +334,110 @@
<script>
'use strict';
$(document).ready(function () {
$('#skor-periode-paceklik, #skor-menabung, #skor-kecukupan, #status-kepemilikan-lahan, #skor-kejelasan-lahan, #ada-sertifikat, #ada-sengketa, #pihak-membantu, #status-konflik').select2();
$('#skor-periode-paceklik, #skor-menabung, #skor-kecukupan, #status-kepemilikan-lahan, #skor-kejelasan-lahan, #ada-sertifikat, #ada-sengketa, #pihak-membantu, #status-konflik, .sosial-ekonomi-komoditas').select2();
function syncKomoditasLainnyaOptions() {
const selectedUtama = $('.sosial-ekonomi-komoditas-utama')
.map(function () {
return $(this).val();
})
.get()
.filter(Boolean);
$('.sosial-ekonomi-komoditas-lainnya').each(function () {
const $select = $(this);
const currentValue = $select.val();
$select.find('option').each(function () {
const $option = $(this);
const value = $option.val();
if (!value) {
$option.prop('disabled', false);
return;
}
$option.prop('disabled', selectedUtama.includes(value));
});
if (currentValue && selectedUtama.includes(currentValue)) {
$select.val('').trigger('change.select2');
} else {
$select.trigger('change.select2');
}
});
}
function rowHasValue($row) {
const triggerValue = $row.find('.pendapatan-trigger').first().val();
return Boolean(triggerValue);
}
function syncPendapatanRows(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) {
$row.removeClass('d-none');
} else {
$row.addClass('d-none');
}
previousHasValue = currentHasValue;
});
}
function syncAllPendapatanRows() {
syncPendapatanRows('komoditas-utama');
syncPendapatanRows('komoditas-lainnya');
syncPendapatanRows('luar-pertanian');
}
function syncPihakMembantuFields() {
const isTidakAda = $('#pihak-membantu').val() === 'Tidak ada-selesaikan sendiri';
const $fields = $('#pihak-membantu-nama, #tahun-bantuan');
$fields.prop('disabled', isTidakAda);
if (isTidakAda) {
$fields.val('');
}
}
function onlyDigits(value) {
return String(value || '').replace(/\D/g, '');
}
function formatRupiah(value) {
const digits = onlyDigits(value);
return digits.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
$('.sosial-ekonomi-komoditas-utama').on('change', syncKomoditasLainnyaOptions);
$('.pendapatan-trigger').on('change keyup', syncAllPendapatanRows);
$('.currency-input').on('input', function () {
const cursorAtEnd = this.selectionStart === this.value.length;
this.value = formatRupiah(this.value);
if (cursorAtEnd) {
this.setSelectionRange(this.value.length, this.value.length);
}
});
$('form').on('submit', function () {
$(this).find('.currency-input').each(function () {
this.value = onlyDigits(this.value);
});
});
$('#pihak-membantu').on('change', syncPihakMembantuFields);
syncKomoditasLainnyaOptions();
syncAllPendapatanRows();
syncPihakMembantuFields();
});
</script>
@endpush
+4 -3
View File
@@ -186,8 +186,9 @@ Route::middleware('auth')
Route::resource('verifikasi', App\Http\Controllers\Web\Program\VerifikasiController::class)->only('store', 'destroy');
// Petani
Route::get('petani/{petani}/sosial-ekonomi', [App\Http\Controllers\Web\Produktivitas\SosialEkonomiController::class, 'editByPetani'])->name('petani.sosial-ekonomi.edit');
Route::resource('petani', App\Http\Controllers\Web\Produktivitas\PetaniController::class);
Route::resource('sosial-ekonomi', App\Http\Controllers\Web\Produktivitas\SosialEkonomiController::class)->except(['create', 'edit']);
Route::resource('petani.lahan-tanaman', App\Http\Controllers\Web\Produktivitas\PetaniLahanController::class);
Route::resource('petani.lahan-tanaman.tanaman', App\Http\Controllers\Web\Produktivitas\PetaniLahanTanamanController::class)->only(['show', 'update', 'destroy']);});
Route::resource('petani.lahan-tanaman.tanaman', App\Http\Controllers\Web\Produktivitas\PetaniLahanTanamanController::class)->only(['show', 'update', 'destroy']);
Route::resource('petani.praktik-budidaya', App\Http\Controllers\Web\Produktivitas\PraktikBudidayaController::class);
Route::resource('petani.sosial-ekonomi', App\Http\Controllers\Web\Produktivitas\SosialEkonomiController::class);
});