sumber informasi harga
This commit is contained in:
@@ -118,7 +118,8 @@ class AksesPasarController extends Controller
|
|||||||
'skorPengalamanBerhentiValues' => [
|
'skorPengalamanBerhentiValues' => [
|
||||||
SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value,
|
SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value,
|
||||||
SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value
|
SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value
|
||||||
]
|
],
|
||||||
|
'sumberInfoLainnyaValue' => 'Lainnya',
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,6 +156,14 @@ class AksesPasarController extends Controller
|
|||||||
'nullable', 'string', 'max:255'
|
'nullable', 'string', 'max:255'
|
||||||
],
|
],
|
||||||
|
|
||||||
|
'tahu_harga_sebelumnya' => ['nullable', 'string', 'max:255'],
|
||||||
|
'sumber_info_harga' => ['nullable', 'array'],
|
||||||
|
'sumber_info_harga.*' => ['string'],
|
||||||
|
'sumber_info_harga_lainnya' => [
|
||||||
|
Rule::requiredIf(fn () => in_array('Lainnya', $request->input('sumber_info_harga', []), true)),
|
||||||
|
'nullable', 'string', 'max:255'
|
||||||
|
],
|
||||||
|
|
||||||
'praktik_fermentasi' => ['nullable', 'string', Rule::in(PraktikFermentasi::values())],
|
'praktik_fermentasi' => ['nullable', 'string', Rule::in(PraktikFermentasi::values())],
|
||||||
'proses_fermentasi' => [
|
'proses_fermentasi' => [
|
||||||
Rule::requiredIf(fn () => filled($request->input('praktik_fermentasi')) && $request->input('praktik_fermentasi') !== PraktikFermentasi::BELUM_PERNAH->value),
|
Rule::requiredIf(fn () => filled($request->input('praktik_fermentasi')) && $request->input('praktik_fermentasi') !== PraktikFermentasi::BELUM_PERNAH->value),
|
||||||
@@ -231,6 +240,10 @@ class AksesPasarController extends Controller
|
|||||||
$payload['saluran_terdahulu_lainnya'] = null;
|
$payload['saluran_terdahulu_lainnya'] = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!in_array('Lainnya', $payload['sumber_info_harga'] ?? [], true)) {
|
||||||
|
$payload['sumber_info_harga_lainnya'] = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (($payload['praktik_fermentasi'] ?? null) === PraktikFermentasi::BELUM_PERNAH->value) {
|
if (($payload['praktik_fermentasi'] ?? null) === PraktikFermentasi::BELUM_PERNAH->value) {
|
||||||
$payload['proses_fermentasi'] = null;
|
$payload['proses_fermentasi'] = null;
|
||||||
$payload['model_fermentasi_memungkinkan'] = null;
|
$payload['model_fermentasi_memungkinkan'] = null;
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ class AksesPasar extends Model
|
|||||||
'saluran_terdahulu',
|
'saluran_terdahulu',
|
||||||
'saluran_terdahulu_lainnya',
|
'saluran_terdahulu_lainnya',
|
||||||
'alasan_berhenti',
|
'alasan_berhenti',
|
||||||
|
'tahu_harga_sebelumnya',
|
||||||
|
'sumber_info_harga',
|
||||||
|
'sumber_info_harga_lainnya',
|
||||||
'praktik_fermentasi',
|
'praktik_fermentasi',
|
||||||
'proses_fermentasi',
|
'proses_fermentasi',
|
||||||
'model_fermentasi_memungkinkan',
|
'model_fermentasi_memungkinkan',
|
||||||
@@ -51,6 +54,7 @@ class AksesPasar extends Model
|
|||||||
protected $casts = [
|
protected $casts = [
|
||||||
'tujuan_penjualan' => 'array',
|
'tujuan_penjualan' => 'array',
|
||||||
'saluran_terdahulu' => 'array',
|
'saluran_terdahulu' => 'array',
|
||||||
|
'sumber_info_harga' => 'array',
|
||||||
];
|
];
|
||||||
|
|
||||||
protected static function booted(): void
|
protected static function booted(): void
|
||||||
|
|||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('akses_pasar', function (Blueprint $table) {
|
||||||
|
$table->string('tahu_harga_sebelumnya')->nullable();
|
||||||
|
$table->text('sumber_info_harga')->nullable();
|
||||||
|
$table->string('sumber_info_harga_lainnya')->nullable();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('akses_pasar', function (Blueprint $table) {
|
||||||
|
$table->dropColumn([
|
||||||
|
'tahu_harga_sebelumnya',
|
||||||
|
'sumber_info_harga',
|
||||||
|
'sumber_info_harga_lainnya',
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -252,6 +252,75 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<h6 class="fw-bold text-dark mt-4 mb-2">Sumber Informasi Harga</h6>
|
||||||
|
<div class="border rounded p-4 mb-4">
|
||||||
|
|
||||||
|
<div class="mb-4">
|
||||||
|
<label class="form-label fw-semibold">Sebelum menjual, apakah Bapak/Ibu sudah tahu harga yang akan diterima?</label>
|
||||||
|
<div class="row g-2">
|
||||||
|
@php
|
||||||
|
$tahuHargaOptions = [
|
||||||
|
'Selalu tahu sebelum pergi jual',
|
||||||
|
'Kadang tahu, kadang tidak',
|
||||||
|
'Baru tahu saat sudah di tempat pembeli',
|
||||||
|
'Tidak pernah tahu sebelumnya — langsung jual saja'
|
||||||
|
];
|
||||||
|
@endphp
|
||||||
|
@foreach($tahuHargaOptions as $tahu)
|
||||||
|
<div class="col-md-6">
|
||||||
|
<div class="form-check mb-2">
|
||||||
|
<input class="form-check-input @error('tahu_harga_sebelumnya') is-invalid @enderror" type="radio" name="tahu_harga_sebelumnya" value="{{ $tahu }}" id="tahu-{{ Str::slug($tahu) }}" {{ old('tahu_harga_sebelumnya', $aksesPasar?->tahu_harga_sebelumnya) === $tahu ? 'checked' : '' }}>
|
||||||
|
<label class="form-check-label" for="tahu-{{ Str::slug($tahu) }}">{{ $tahu }}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
|
@error('tahu_harga_sebelumnya')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-0">
|
||||||
|
<label class="form-label fw-semibold">Dari mana biasanya Bapak/Ibu tahu harga hasil panen sebelum menjual? (boleh pilih lebih dari satu)</label>
|
||||||
|
<div class="row g-2">
|
||||||
|
@php
|
||||||
|
$sumberInfoHargaOptions = [
|
||||||
|
'Tengkulak/pedagang yang datang langsung',
|
||||||
|
'Sesama petani/tetangga',
|
||||||
|
'PPL/petugas dinas',
|
||||||
|
'HP/WhatsApp/internet',
|
||||||
|
'Radio/TV',
|
||||||
|
'Facebook',
|
||||||
|
'Tiktok',
|
||||||
|
'Instagram',
|
||||||
|
'Tidak pernah cek — langsung jual saja'
|
||||||
|
];
|
||||||
|
$sumberInfoLainnyaValue = 'Lainnya';
|
||||||
|
@endphp
|
||||||
|
|
||||||
|
@foreach($sumberInfoHargaOptions as $sumber)
|
||||||
|
<div class="col-md-4">
|
||||||
|
<div class="form-check mb-2">
|
||||||
|
<input class="form-check-input @error('sumber_info_harga') is-invalid @enderror" type="checkbox" name="sumber_info_harga[]" value="{{ $sumber }}" id="sumber-{{ Str::slug($sumber) }}" {{ in_array($sumber, (array) old('sumber_info_harga', $aksesPasar?->sumber_info_harga ?? []), true) ? 'checked' : '' }}>
|
||||||
|
<label class="form-check-label" for="sumber-{{ Str::slug($sumber) }}">{{ $sumber }}</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
<div class="col-12 mt-2">
|
||||||
|
<div class="d-flex align-items-center gap-2 flex-wrap">
|
||||||
|
<div class="form-check mb-0">
|
||||||
|
<input class="form-check-input @error('sumber_info_harga') is-invalid @enderror" type="checkbox" name="sumber_info_harga[]" value="{{ $sumberInfoLainnyaValue }}" id="sumber-lainnya-checkbox" {{ in_array($sumberInfoLainnyaValue, (array) old('sumber_info_harga', $aksesPasar?->sumber_info_harga ?? []), true) ? 'checked' : '' }}>
|
||||||
|
<label class="form-check-label text-nowrap" for="sumber-lainnya-checkbox">Lainnya:</label>
|
||||||
|
</div>
|
||||||
|
<input type="text" class="form-control form-control-sm w-auto flex-grow-1 @error('sumber_info_harga_lainnya') is-invalid @enderror" style="max-width: 400px;" id="sumber-info-lainnya-input" name="sumber_info_harga_lainnya" value="{{ old('sumber_info_harga_lainnya', $aksesPasar?->sumber_info_harga_lainnya) }}" placeholder="Sebutkan sumber lainnya...">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@error('sumber_info_harga')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
|
||||||
|
@error('sumber_info_harga_lainnya')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<h5 class="pb-3 border-bottom mb-4 mt-4">PELUANG NILAI TAMBAH</h5>
|
<h5 class="pb-3 border-bottom mb-4 mt-4">PELUANG NILAI TAMBAH</h5>
|
||||||
|
|
||||||
<div class="border rounded p-4 mb-4">
|
<div class="border rounded p-4 mb-4">
|
||||||
@@ -386,6 +455,7 @@
|
|||||||
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);
|
||||||
const skorBelumPernahValue = "1";
|
const skorBelumPernahValue = "1";
|
||||||
|
const sumberInfoLainnyaValue = @json($sumberInfoLainnyaValue ?? 'Lainnya');
|
||||||
|
|
||||||
function onlyDigits(value) {
|
function onlyDigits(value) {
|
||||||
return String(value || '').replace(/\D/g, '');
|
return String(value || '').replace(/\D/g, '');
|
||||||
@@ -425,6 +495,12 @@
|
|||||||
if (!isLainnya) $('#saluran-lainnya').val('');
|
if (!isLainnya) $('#saluran-lainnya').val('');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function syncSumberInfoLainnya() {
|
||||||
|
const isLainnya = $('input[name="sumber_info_harga[]"][value="' + sumberInfoLainnyaValue + '"]').is(':checked');
|
||||||
|
$('#sumber-info-lainnya-input').prop('disabled', !isLainnya);
|
||||||
|
if (!isLainnya) $('#sumber-info-lainnya-input').val('');
|
||||||
|
}
|
||||||
|
|
||||||
function syncPraktikFermentasi() {
|
function syncPraktikFermentasi() {
|
||||||
const isBelumPernah = $('input[name="praktik_fermentasi"]:checked').val() === praktikBelumPernahValue;
|
const isBelumPernah = $('input[name="praktik_fermentasi"]:checked').val() === praktikBelumPernahValue;
|
||||||
$('#proses-fermentasi, #model-fermentasi').prop('disabled', isBelumPernah);
|
$('#proses-fermentasi, #model-fermentasi').prop('disabled', isBelumPernah);
|
||||||
@@ -439,6 +515,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
$('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya);
|
$('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya);
|
||||||
|
$('input[name="sumber_info_harga[]"]').on('change', syncSumberInfoLainnya);
|
||||||
$('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi);
|
$('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi);
|
||||||
|
|
||||||
$(document).on('input', '.rupiah-input', function () {
|
$(document).on('input', '.rupiah-input', function () {
|
||||||
@@ -457,6 +534,7 @@
|
|||||||
toggleSaluranLanjutan();
|
toggleSaluranLanjutan();
|
||||||
syncAlasanBerhenti();
|
syncAlasanBerhenti();
|
||||||
syncSaluranLainnya();
|
syncSaluranLainnya();
|
||||||
|
syncSumberInfoLainnya();
|
||||||
syncPraktikFermentasi();
|
syncPraktikFermentasi();
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user