update field sosial ekonomi
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,10 +67,16 @@
|
||||
<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) }}">
|
||||
@@ -97,10 +108,16 @@
|
||||
@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) }}">
|
||||
@@ -130,9 +147,9 @@
|
||||
<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) }}">
|
||||
@@ -312,7 +329,87 @@
|
||||
<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('');
|
||||
}
|
||||
}
|
||||
|
||||
$('.sosial-ekonomi-komoditas-utama').on('change', syncKomoditasLainnyaOptions);
|
||||
$('.pendapatan-trigger').on('change keyup', syncAllPendapatanRows);
|
||||
$('#pihak-membantu').on('change', syncPihakMembantuFields);
|
||||
syncKomoditasLainnyaOptions();
|
||||
syncAllPendapatanRows();
|
||||
syncPihakMembantuFields();
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
Reference in New Issue
Block a user