solve akses pasar

This commit is contained in:
2026-07-22 15:22:56 +07:00
parent 9576c6295e
commit a5884d0f8c
2 changed files with 53 additions and 13 deletions
@@ -25,9 +25,25 @@ class AksesPasarController extends Controller
$aksesPasar = AksesPasar::where('petani_id', $petaniId)->first(); $aksesPasar = AksesPasar::where('petani_id', $petaniId)->first();
$hargaJualPanen = HargaJualPanen::where('petani_id', $petaniId)->get(); $hargaJualPanen = HargaJualPanen::where('petani_id', $petaniId)->get();
$hargaJualRows = collect([
'Buah segar hasil petik',
'Biji basah',
'Biji kering/Biji Kupas',
'Terfermentasi (Rp/kg)',
])->map(function (string $bentuk, int $index) use ($hargaJualPanen) {
$existingData = $hargaJualPanen->firstWhere('bentuk_produk', $bentuk);
return [
'index' => $index,
'bentuk' => $bentuk,
'harga_panen_terakhir' => $this->currencyForDisplay($existingData?->harga_panen_terakhir),
'harga_tahun_lalu' => $this->currencyForDisplay($existingData?->harga_tahun_lalu),
'harga_dua_tahun_lalu' => $this->currencyForDisplay($existingData?->harga_dua_tahun_lalu),
];
});
return view('produktivitas.petani.akses-pasar.index', array_merge( return view('produktivitas.petani.akses-pasar.index', array_merge(
compact('petani', 'aksesPasar', 'hargaJualPanen'), compact('petani', 'aksesPasar', 'hargaJualPanen', 'hargaJualRows'),
$this->aksesPasarOptions() $this->aksesPasarOptions()
)); ));
} }
@@ -251,4 +267,11 @@ class AksesPasarController extends Controller
$digits = preg_replace('/\D/', '', (string) $value); $digits = preg_replace('/\D/', '', (string) $value);
return $digits === '' ? null : $digits; return $digits === '' ? null : $digits;
} }
private function currencyForDisplay(mixed $value): string
{
$digits = $this->currencyDigits($value);
return is_null($digits) ? '' : number_format((int) $digits, 0, ',', '.');
}
} }
@@ -93,34 +93,30 @@
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@php($listBentukProduk = ['Buah segar hasil petik', 'Biji basah', 'Biji kering/Biji Kupas', 'Terfermentasi (Rp/kg)']) @foreach ($hargaJualRows as $row)
@php($hargaJualPanen = $hargaJualPanen ?? collect())
@foreach ($listBentukProduk as $index => $bentuk)
@php($existingData = $hargaJualPanen->firstWhere('bentuk_produk', $bentuk))
<tr> <tr>
<td> <td>
<input type="hidden" name="harga_jual[{{ $index }}][bentuk_produk]" value="{{ $bentuk }}"> <input type="hidden" name="harga_jual[{{ $row['index'] }}][bentuk_produk]" value="{{ $row['bentuk'] }}">
<strong>{{ $bentuk }}:</strong> <strong>{{ $row['bentuk'] }}:</strong>
</td> </td>
<td> <td>
<div class="input-group"> <div class="input-group">
<span class="input-group-text">Rp</span> <span class="input-group-text">Rp</span>
<input type="number" min="0" class="form-control" name="harga_jual[{{ $index }}][harga_panen_terakhir]" value="{{ old('harga_jual.' . $index . '.harga_panen_terakhir', $existingData?->harga_panen_terakhir) }}"> <input type="text" inputmode="numeric" class="form-control rupiah-input" name="harga_jual[{{ $row['index'] }}][harga_panen_terakhir]" value="{{ old('harga_jual.' . $row['index'] . '.harga_panen_terakhir', $row['harga_panen_terakhir']) }}" placeholder="Contoh: 12.000">
<span class="input-group-text">/kg</span> <span class="input-group-text">/kg</span>
</div> </div>
</td> </td>
<td> <td>
<div class="input-group"> <div class="input-group">
<span class="input-group-text">Rp</span> <span class="input-group-text">Rp</span>
<input type="number" min="0" class="form-control" name="harga_jual[{{ $index }}][harga_tahun_lalu]" value="{{ old('harga_jual.' . $index . '.harga_tahun_lalu', $existingData?->harga_tahun_lalu) }}"> <input type="text" inputmode="numeric" class="form-control rupiah-input" name="harga_jual[{{ $row['index'] }}][harga_tahun_lalu]" value="{{ old('harga_jual.' . $row['index'] . '.harga_tahun_lalu', $row['harga_tahun_lalu']) }}" placeholder="Contoh: 10.000">
<span class="input-group-text">/kg</span> <span class="input-group-text">/kg</span>
</div> </div>
</td> </td>
<td> <td>
<div class="input-group"> <div class="input-group">
<span class="input-group-text">Rp</span> <span class="input-group-text">Rp</span>
<input type="number" min="0" class="form-control" name="harga_jual[{{ $index }}][harga_dua_tahun_lalu]" value="{{ old('harga_jual.' . $index . '.harga_dua_tahun_lalu', $existingData?->harga_dua_tahun_lalu) }}"> <input type="text" inputmode="numeric" class="form-control rupiah-input" name="harga_jual[{{ $row['index'] }}][harga_dua_tahun_lalu]" value="{{ old('harga_jual.' . $row['index'] . '.harga_dua_tahun_lalu', $row['harga_dua_tahun_lalu']) }}" placeholder="Contoh: 8.000">
<span class="input-group-text">/kg</span> <span class="input-group-text">/kg</span>
</div> </div>
</td> </td>
@@ -232,6 +228,16 @@
const praktikBelumPernahValue = String(@json($praktikBelumPernahValue)); const praktikBelumPernahValue = String(@json($praktikBelumPernahValue));
const skorPengalamanBerhentiValues = @json($skorPengalamanBerhentiValues ?? [2,3]).map(Number); const skorPengalamanBerhentiValues = @json($skorPengalamanBerhentiValues ?? [2,3]).map(Number);
function onlyDigits(value) {
return String(value || '').replace(/\D/g, '');
}
function formatRupiah(value) {
const digits = onlyDigits(value);
return digits.replace(/\B(?=(\d{3})+(?!\d))/g, '.');
}
function syncAlasanBerhenti() { function syncAlasanBerhenti() {
const val = Number($('input[name="skor_pengalaman"]:checked').val()); const val = Number($('input[name="skor_pengalaman"]:checked').val());
const isBerhenti = skorPengalamanBerhentiValues.includes(val); const isBerhenti = skorPengalamanBerhentiValues.includes(val);
@@ -256,6 +262,17 @@
$('input[name="skor_pengalaman"]').on('change', syncAlasanBerhenti); $('input[name="skor_pengalaman"]').on('change', syncAlasanBerhenti);
$('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya); $('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya);
$('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi); $('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi);
$(document).on('input', '.rupiah-input', function () {
const cursorAtEnd = this.selectionStart === this.value.length;
this.value = formatRupiah(this.value);
if (cursorAtEnd) {
this.setSelectionRange(this.value.length, this.value.length);
}
});
$('.rupiah-input').each(function () {
this.value = formatRupiah(this.value);
});
syncAlasanBerhenti(); syncAlasanBerhenti();
syncSaluranLainnya(); syncSaluranLainnya();