bring to final akses pasar

This commit is contained in:
2026-07-09 22:30:31 +07:00
parent 9557d1ec64
commit 79f6426125
7 changed files with 357 additions and 93 deletions
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum PraktikFermentasi: string
{
case RUTIN_SENDIRI = 'Ya, rutin — dilakukan sendiri/individual';
case RUTIN_KELOMPOK = 'Ya, rutin — bersama kelompok tani/kolektif';
case PERNAH_SENDIRI = 'Pernah mencoba — sendiri';
case PERNAH_KELOMPOK = 'Pernah mencoba — bersama kelompok';
case BELUM_PERNAH = 'Belum pernah';
public static function options(): array
{
return [
['value' => self::RUTIN_SENDIRI->value, 'label' => 'Ya, rutin — dilakukan sendiri/individual'],
['value' => self::RUTIN_KELOMPOK->value, 'label' => 'Ya, rutin — bersama kelompok tani/kolektif'],
['value' => self::PERNAH_SENDIRI->value, 'label' => 'Pernah mencoba — sendiri'],
['value' => self::PERNAH_KELOMPOK->value, 'label' => 'Pernah mencoba — bersama kelompok'],
['value' => self::BELUM_PERNAH->value, 'label' => 'Belum pernah'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum SaluranTerdahulu: string
{
case TENGKULAK = 'Tengkulak–pedagang lokal';
case KOPERASI = 'Koperasi';
case BUMDES = 'BUMDes';
case LANGSUNG_PEMBELI = 'Langsung ke pembeli–eksportir';
case LAINNYA = 'Lainnya';
public static function options(): array
{
return [
['value' => self::TENGKULAK->value, 'label' => 'Tengkulak–pedagang lokal'],
['value' => self::KOPERASI->value, 'label' => 'Koperasi'],
['value' => self::BUMDES->value, 'label' => 'BUMDes'],
['value' => self::LANGSUNG_PEMBELI->value, 'label' => 'Langsung ke pembeli–eksportir'],
['value' => self::LAINNYA->value, 'label' => 'Lainnya'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum SkorKesadaranPremium: int
{
case BELUM_PERNAH_DENGAR = 1;
case PERNAH_BELUM_PAHAM = 2;
case PERNAH_SEDIKIT_PAHAM = 3;
case SANGAT_PAHAM_BELUM_AKSES = 4;
case SUDAH_AKSES_KONSISTEN = 5;
public static function options(): array
{
return [
['value' => self::BELUM_PERNAH_DENGAR->value, 'label' => 'Belum pernah dengar'],
['value' => self::PERNAH_BELUM_PAHAM->value, 'label' => 'Pernah dengar tapi belum paham syarat'],
['value' => self::PERNAH_SEDIKIT_PAHAM->value, 'label' => 'Pernah dengar & sedikit paham syarat'],
['value' => self::SANGAT_PAHAM_BELUM_AKSES->value, 'label' => 'Sangat paham syarat tapi belum pernah akses'],
['value' => self::SUDAH_AKSES_KONSISTEN->value, 'label' => 'Sudah akses & dapat harga premium konsisten'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Enums\AksesPasar;
enum SkorPengalaman: int
{
case BELUM_PERNAH = 1;
case PERNAH_BERHENTI_TIDAK_ADA_AKSES = 2;
case PERNAH_BERHENTI_MUNGKIN_KEMBALI = 3;
case PERNAH_SESEKALI_JUAL = 4;
case PERNAH_MASIH_AKTIF = 5;
public static function options(): array
{
return [
['value' => self::BELUM_PERNAH->value, 'label' => 'Belum pernah coba saluran lain'],
['value' => self::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value, 'label' => 'Pernah, sudah berhenti & tidak ada akses'],
['value' => self::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value, 'label' => 'Pernah, berhenti tapi masih mungkin kembali'],
['value' => self::PERNAH_SESEKALI_JUAL->value, 'label' => 'Pernah & sesekali masih jual ke sana'],
['value' => self::PERNAH_MASIH_AKTIF->value, 'label' => 'Pernah & masih punya akses aktif'],
];
}
public static function values(): array
{
return array_column(self::cases(), 'value');
}
}
@@ -8,7 +8,6 @@ use App\Models\User;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
use Illuminate\Validation\ValidationException;
class AuthController extends Controller
@@ -7,51 +7,46 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
use Illuminate\Validation\Rule;
use App\Models\Pertanian\Petani;
use App\Models\Pertanian\AksesPasar;
use App\Models\Pertanian\HargaJualPanen;
use App\Enums\AksesPasar\SkorPengalaman;
use App\Enums\AksesPasar\SaluranTerdahulu;
use App\Enums\AksesPasar\PraktikFermentasi;
use App\Enums\AksesPasar\SkorKesadaranPremium;
class AksesPasarController extends Controller
{
public function index($petaniId)
{
$petani = Petani::findOrFail($petaniId);
$petani = Petani::findOrFail($petaniId);
$aksesPasar = AksesPasar::where('petani_id', $petaniId)->first();
$hargaJualPanen = HargaJualPanen::where('petani_id', $petaniId)->get();
return view('produktivitas.petani.akses-pasar.index', compact('petani', 'aksesPasar', 'hargaJualPanen'));
return view('produktivitas.petani.akses-pasar.index', array_merge(
compact('petani', 'aksesPasar', 'hargaJualPanen'),
$this->aksesPasarOptions()
));
}
public function store(Request $request)
{
$request->validate([
'petani_id' => 'required|exists:petani,id',
]);
$validated = $this->validateData($request);
DB::beginTransaction();
try {
$aksesPasarData = $request->except(['_token', 'harga_jual']);
$aksesPasarData['uid'] = Str::uuid();
$aksesPasarData = $this->aksesPasarPayload($validated);
$aksesPasarData['uid'] = 'AKP-' . Str::uuid();
$aksesPasarData['created_by'] = Auth::id();
AksesPasar::create($aksesPasarData);
$aksesPasar = AksesPasar::create($aksesPasarData);
if ($request->has('harga_jual')) {
foreach ($request->harga_jual as $harga) {
if (!empty($harga['bentuk_produk'])) {
HargaJualPanen::create([
'uid' => Str::uuid(),
'petani_id' => $request->petani_id,
'bentuk_produk' => $harga['bentuk_produk'],
'harga_panen_terakhir' => $harga['harga_panen_terakhir'],
'harga_tahun_lalu' => $harga['harga_tahun_lalu'],
'harga_dua_tahun_lalu' => $harga['harga_dua_tahun_lalu'],
'created_by' => Auth::id(),
]);
}
}
$this->syncHargaJual($request->petani_id, $validated['harga_jual'] ?? [], Auth::id());
}
DB::commit();
@@ -66,36 +61,20 @@ class AksesPasarController extends Controller
public function update(Request $request, $id)
{
$request->validate([
'petani_id' => 'required|exists:petani,id',
]);
$validated = $this->validateData($request);
DB::beginTransaction();
try {
$aksesPasar = AksesPasar::findOrFail($id);
$updateData = $request->except(['_token', '_method', 'harga_jual']);
$updateData = $this->aksesPasarPayload($validated);
$updateData['updated_by'] = Auth::id();
$aksesPasar->update($updateData);
HargaJualPanen::where('petani_id', $request->petani_id)->delete();
if ($request->has('harga_jual')) {
foreach ($request->harga_jual as $harga) {
if (!empty($harga['bentuk_produk'])) {
HargaJualPanen::create([
'uid' => Str::uuid(),
'petani_id' => $request->petani_id,
'bentuk_produk' => $harga['bentuk_produk'],
'harga_panen_terakhir' => $harga['harga_panen_terakhir'],
'harga_tahun_lalu' => $harga['harga_tahun_lalu'],
'harga_dua_tahun_lalu' => $harga['harga_dua_tahun_lalu'],
'created_by' => $aksesPasar->created_by,
'updated_by' => Auth::id(),
]);
}
}
$this->syncHargaJual($request->petani_id, $validated['harga_jual'] ?? [], $aksesPasar->created_by, Auth::id());
}
DB::commit();
@@ -107,4 +86,136 @@ class AksesPasarController extends Controller
return redirect()->back()->withErrors(['error' => 'Gagal memperbarui data: ' . $e->getMessage()])->withInput();
}
}
private function aksesPasarOptions(): array
{
return [
'skorPengalamanOptions' => SkorPengalaman::options(),
'saluranTerdahuluOptions' => SaluranTerdahulu::options(),
'saluranLainnyaValue' => SaluranTerdahulu::LAINNYA->value,
'praktikFermentasiOptions' => PraktikFermentasi::options(),
'praktikBelumPernahValue' => PraktikFermentasi::BELUM_PERNAH->value,
'skorKesadaranPremiumOptions' => SkorKesadaranPremium::options(),
'skorPengalamanBerhentiValues' => [
SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value,
SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value
]
];
}
private function validateData(Request $request): array
{
$this->normalizeCurrencyInput($request);
return $request->validate([
'petani_id' => ['required', 'exists:petani,id'],
'skor_pengalaman' => ['nullable', 'integer', Rule::in(SkorPengalaman::values())],
'alasan_berhenti' => [
Rule::requiredIf(fn () => in_array((int)$request->input('skor_pengalaman'), [
SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value,
SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value
], true)),
'nullable', 'string', 'max:255'
],
'saluran_terdahulu' => ['nullable', 'array'],
'saluran_terdahulu.*' => ['string', Rule::in(SaluranTerdahulu::values())],
'saluran_terdahulu_lainnya' => [
Rule::requiredIf(fn () => in_array(SaluranTerdahulu::LAINNYA->value, $request->input('saluran_terdahulu', []), true)),
'nullable', 'string', 'max:255'
],
'praktik_fermentasi' => ['nullable', 'string', Rule::in(PraktikFermentasi::values())],
'proses_fermentasi' => [
Rule::requiredIf(fn () => filled($request->input('praktik_fermentasi')) && $request->input('praktik_fermentasi') !== PraktikFermentasi::BELUM_PERNAH->value),
'nullable', 'string'
],
'model_fermentasi_memungkinkan' => [
Rule::requiredIf(fn () => filled($request->input('praktik_fermentasi')) && $request->input('praktik_fermentasi') !== PraktikFermentasi::BELUM_PERNAH->value),
'nullable', 'string'
],
'skor_kesadaran_premium' => ['nullable', 'integer', Rule::in(SkorKesadaranPremium::values())],
'sumber_info_premium' => ['nullable', 'string', 'max:255'],
'harga_jual' => ['nullable', 'array'],
'harga_jual.*.bentuk_produk' => ['nullable', 'string'],
'harga_jual.*.harga_panen_terakhir' => ['nullable', 'numeric', 'min:0'],
'harga_jual.*.harga_tahun_lalu' => ['nullable', 'numeric', 'min:0'],
'harga_jual.*.harga_dua_tahun_lalu' => ['nullable', 'numeric', 'min:0'],
]);
}
private function aksesPasarPayload(array $validated): array
{
$payload = collect($validated)->except(['harga_jual'])->all();
if (!in_array((int)($payload['skor_pengalaman'] ?? 0), [
SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value,
SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value
], true)) {
$payload['alasan_berhenti'] = null;
}
if (!in_array(SaluranTerdahulu::LAINNYA->value, $payload['saluran_terdahulu'] ?? [], true)) {
$payload['saluran_terdahulu_lainnya'] = null;
}
if (($payload['praktik_fermentasi'] ?? null) === PraktikFermentasi::BELUM_PERNAH->value) {
$payload['proses_fermentasi'] = null;
$payload['model_fermentasi_memungkinkan'] = null;
}
return $payload;
}
private function syncHargaJual($petaniId, array $hargaJualData, $createdBy, $updatedBy = null): void
{
HargaJualPanen::where('petani_id', $petaniId)->delete();
foreach ($hargaJualData as $harga) {
if (!empty($harga['bentuk_produk'])) {
HargaJualPanen::create([
'uid' => 'HJP-' . Str::uuid(),
'petani_id' => $petaniId,
'bentuk_produk' => $harga['bentuk_produk'],
'harga_panen_terakhir' => $harga['harga_panen_terakhir'] ?? null,
'harga_tahun_lalu' => $harga['harga_tahun_lalu'] ?? null,
'harga_dua_tahun_lalu' => $harga['harga_dua_tahun_lalu'] ?? null,
'created_by' => $createdBy,
'updated_by' => $updatedBy ?? $createdBy,
]);
}
}
}
private function normalizeCurrencyInput(Request $request): void
{
$data = $request->all();
if (isset($data['harga_jual']) && is_array($data['harga_jual'])) {
foreach ($data['harga_jual'] as $index => $item) {
if (is_array($item)) {
if (array_key_exists('harga_panen_terakhir', $item)) {
$data['harga_jual'][$index]['harga_panen_terakhir'] = $this->currencyDigits($item['harga_panen_terakhir']);
}
if (array_key_exists('harga_tahun_lalu', $item)) {
$data['harga_jual'][$index]['harga_tahun_lalu'] = $this->currencyDigits($item['harga_tahun_lalu']);
}
if (array_key_exists('harga_dua_tahun_lalu', $item)) {
$data['harga_jual'][$index]['harga_dua_tahun_lalu'] = $this->currencyDigits($item['harga_dua_tahun_lalu']);
}
}
}
}
$request->merge($data);
}
private function currencyDigits(mixed $value): ?string
{
if (is_null($value) || $value === '') return null;
$digits = preg_replace('/\D/', '', (string) $value);
return $digits === '' ? null : $digits;
}
}
@@ -32,17 +32,18 @@
<div class="card-body pt-12">
<h5 class="pb-3 border-bottom mb-4">Pengalaman Saluran Lain</h5>
<div class="row">
<div class="col-md-6 mb-4 form-control-validation">
<label class="form-label" for="skor-pengalaman">Pengalaman & akses ke saluran lain</label>
<select class="form-control select2-init @error('skor_pengalaman') is-invalid @enderror" id="skor-pengalaman" name="skor_pengalaman">
<option value="">Pilih Skala</option>
<option value="1" {{ old('skor_pengalaman', $aksesPasar?->skor_pengalaman) == 1 ? 'selected' : '' }}>Belum pernah coba saluran lain</option>
<option value="2" {{ old('skor_pengalaman', $aksesPasar?->skor_pengalaman) == 2 ? 'selected' : '' }}>Pernah, sudah berhenti & tidak ada akses</option>
<option value="3" {{ old('skor_pengalaman', $aksesPasar?->skor_pengalaman) == 3 ? 'selected' : '' }}>Pernah, berhenti tapi masih mungkin kembali</option>
<option value="4" {{ old('skor_pengalaman', $aksesPasar?->skor_pengalaman) == 4 ? 'selected' : '' }}>Pernah & sesekali masih jual ke sana</option>
<option value="5" {{ old('skor_pengalaman', $aksesPasar?->skor_pengalaman) == 5 ? 'selected' : '' }}>Pernah & masih punya akses aktif</option>
</select>
@error('skor_pengalaman')<div class="invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label d-block fw-bold">Pengalaman & akses ke saluran lain</label>
@foreach($skorPengalamanOptions as $option)
<div class="form-check mb-2">
<input class="form-check-input @error('skor_pengalaman') is-invalid @enderror" type="radio"
id="skor-pengalaman-{{ $option['value'] }}" name="skor_pengalaman" value="{{ $option['value'] }}"
{{ (string) old('skor_pengalaman', $aksesPasar?->skor_pengalaman) === (string) $option['value'] ? 'checked' : '' }}>
<label class="form-check-label" for="skor-pengalaman-{{ $option['value'] }}">{{ $option['label'] }}</label>
</div>
@endforeach
@error('skor_pengalaman')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
@@ -52,15 +53,21 @@
</div>
<div class="col-md-6 mb-4 form-control-validation">
<label class="form-label" for="saluran-terdahulu">Dulu pernah jual ke?</label>
@php($saluran = old('saluran_terdahulu', $aksesPasar?->saluran_terdahulu ?? []))
<select multiple class="form-control select2-init @error('saluran_terdahulu') is-invalid @enderror" id="saluran-terdahulu" name="saluran_terdahulu[]">
<option value="Tengkulak–pedagang lokal" {{ in_array('Tengkulak–pedagang lokal', $saluran) ? 'selected' : '' }}>Tengkulak–pedagang lokal</option>
<option value="Koperasi" {{ in_array('Koperasi', $saluran) ? 'selected' : '' }}>Koperasi</option>
<option value="BUMDes" {{ in_array('BUMDes', $saluran) ? 'selected' : '' }}>BUMDes</option>
<option value="Langsung ke pembeli–eksportir" {{ in_array('Langsung ke pembeli–eksportir', $saluran) ? 'selected' : '' }}>Langsung ke pembeli–eksportir</option>
</select>
@error('saluran_terdahulu')<div class="invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label d-block mb-2" for="saluran-terdahulu">Dulu pernah jual ke?</label>
@foreach($saluranTerdahuluOptions as $option)
<div class="form-check mb-2">
<input class="form-check-input @error('saluran_terdahulu') is-invalid @enderror"
type="checkbox"
id="saluran-terdahulu-{{ Str::slug($option['value']) }}"
name="saluran_terdahulu[]"
value="{{ $option['value'] }}"
{{ in_array($option['value'], (array) old('saluran_terdahulu', $aksesPasar?->saluran_terdahulu ?? []), true) ? 'checked' : '' }}>
<label class="form-check-label" for="saluran-terdahulu-{{ Str::slug($option['value']) }}">
{{ $option['label'] }}
</label>
</div>
@endforeach
@error('saluran_terdahulu')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
@@ -125,33 +132,37 @@
<h5 class="pb-3 border-bottom mb-4 mt-4">PELUANG NILAI TAMBAH</h5>
<div class="border rounded p-4 mb-4" style="background-color: #fbfbfc;">
<div class="border rounded p-4 mb-4">
<div class="mb-4">
<h6 class="mb-1 text-primary">Detail Praktik Fermentasi</h6>
<p class="text-muted small mb-0">Apakah sudah ada praktik fermentasi atau pengolahan pascapanen yang Ibu/Bapak lakukan?</p>
</div>
<div class="row">
<div class="col-md-4 mb-9 form-control-validation d-flex flex-column">
<div class="mb-2 d-flex align-items-end h-100">
<div class="col-md-4 mb-4 form-control-validation d-flex flex-column">
<div class="mb-2 d-flex align-items-end">
<label class="form-label mb-0" for="praktik-fermentasi">Praktik fermentasi yang dilakukan</label>
</div>
<div>
<select class="form-control select2-init @error('praktik_fermentasi') is-invalid @enderror" id="praktik-fermentasi" name="praktik_fermentasi">
<option value="">Pilih</option>
<option value="Ya, rutin — dilakukan sendiri/individual" {{ old('praktik_fermentasi', $aksesPasar?->praktik_fermentasi) == 'Ya, rutin — dilakukan sendiri/individual' ? 'selected' : '' }}>Ya, rutin — dilakukan sendiri/individual</option>
<option value="Ya, rutin — bersama kelompok tani/kolektif" {{ old('praktik_fermentasi', $aksesPasar?->praktik_fermentasi) == 'Ya, rutin — bersama kelompok tani/kolektif' ? 'selected' : '' }}>Ya, rutin — bersama kelompok tani/kolektif</option>
<option value="Pernah mencoba — sendiri" {{ old('praktik_fermentasi', $aksesPasar?->praktik_fermentasi) == 'Pernah mencoba — sendiri' ? 'selected' : '' }}>Pernah mencoba — sendiri</option>
<option value="Pernah mencoba — bersama kelompok" {{ old('praktik_fermentasi', $aksesPasar?->praktik_fermentasi) == 'Pernah mencoba — bersama kelompok' ? 'selected' : '' }}>Pernah mencoba — bersama kelompok</option>
<option value="Belum pernah" {{ old('praktik_fermentasi', $aksesPasar?->praktik_fermentasi) == 'Belum pernah' ? 'selected' : '' }}>Belum pernah</option>
</select>
@error('praktik_fermentasi')<div class="invalid-feedback">{{ $message }}</div>@enderror
@foreach($praktikFermentasiOptions as $option)
<div class="form-check mb-2">
<input class="form-check-input @error('praktik_fermentasi') is-invalid @enderror"
type="radio"
id="praktik-fermentasi-{{ Str::slug($option['value']) }}"
name="praktik_fermentasi"
value="{{ $option['value'] }}"
{{ (string) old('praktik_fermentasi', $aksesPasar?->praktik_fermentasi) === (string) $option['value'] ? 'checked' : '' }}>
<label class="form-check-label" for="praktik-fermentasi-{{ Str::slug($option['value']) }}">
{{ $option['label'] }}
</label>
</div>
@endforeach
@error('praktik_fermentasi')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
</div>
<div class="col-md-4 mb-4 form-control-validation d-flex flex-column">
<div class="mb-2 d-flex align-items-end h-100">
<div class="mb-2 d-flex align-items-end">
<label class="form-label mb-0" for="proses-fermentasi">Jika ya, bagaimana prosesnya?</label>
</div>
<div>
@@ -161,7 +172,7 @@
</div>
<div class="col-md-4 mb-4 form-control-validation d-flex flex-column">
<div class="mb-2 d-flex align-items-end h-100">
<div class="mb-2 d-flex align-items-end">
<label class="form-label mb-0" for="model-fermentasi">Menurut Bapak/Ibu, apa model yang paling memungkinkan?</label>
</div>
<div>
@@ -176,27 +187,30 @@
<h6 class="mb-3">Kesadaran Pasar Premium*</h6>
<div class="row">
<div class="col-md-6 mb-4 form-control-validation">
<label class="form-label" for="skor-premium">Pengetahuan & akses pasar premium</label>
<select class="form-control select2-init @error('skor_kesadaran_premium') is-invalid @enderror" id="skor-premium" name="skor_kesadaran_premium">
<option value="">Pilih Skala</option>
<option value="1" {{ old('skor_kesadaran_premium', $aksesPasar?->skor_kesadaran_premium) == 1 ? 'selected' : '' }}>Belum pernah dengar</option>
<option value="2" {{ old('skor_kesadaran_premium', $aksesPasar?->skor_kesadaran_premium) == 2 ? 'selected' : '' }}>Pernah dengar tapi belum paham syarat</option>
<option value="3" {{ old('skor_kesadaran_premium', $aksesPasar?->skor_kesadaran_premium) == 3 ? 'selected' : '' }}>Pernah dengar & sedikit paham syarat</option>
<option value="4" {{ old('skor_kesadaran_premium', $aksesPasar?->skor_kesadaran_premium) == 4 ? 'selected' : '' }}>Sangat paham syarat tapi belum pernah akses</option>
<option value="5" {{ old('skor_kesadaran_premium', $aksesPasar?->skor_kesadaran_premium) == 5 ? 'selected' : '' }}>Sudah akses & dapat harga premium konsisten</option>
</select>
@error('skor_kesadaran_premium')<div class="invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label d-block mb-2" for="skor-premium">Pengetahuan & akses pasar premium</label>
@foreach($skorKesadaranPremiumOptions as $option)
<div class="form-check mb-2">
<input class="form-check-input @error('skor_kesadaran_premium') is-invalid @enderror"
type="radio"
id="skor-premium-{{ $option['value'] }}"
name="skor_kesadaran_premium"
value="{{ $option['value'] }}"
{{ (string) old('skor_kesadaran_premium', $aksesPasar?->skor_kesadaran_premium) === (string) $option['value'] ? 'checked' : '' }}>
<label class="form-check-label" for="skor-premium-{{ $option['value'] }}">
{{ $option['label'] }}
</label>
</div>
@endforeach
@error('skor_kesadaran_premium')<div class="invalid-feedback d-block">{{ $message }}</div>@enderror
</div>
<div class="col-md-6 mb-4 form-control-validation">
<label class="form-label" for="sumber-info">Sumber informasi utama</label>
<label class="form-label mb-2" for="sumber-info">Sumber informasi utama</label>
<input type="text" class="form-control @error('sumber_info_premium') is-invalid @enderror" id="sumber-info" name="sumber_info_premium" value="{{ old('sumber_info_premium', $aksesPasar?->sumber_info_premium) }}">
@error('sumber_info_premium')<div class="invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="mt-4 text-end">
<button type="submit" class="btn btn-success">
<i class="icon-base ti tabler-device-floppy me-1_5 icon-sm"></i>Simpan Akses Pasar
@@ -214,10 +228,38 @@
<script>
'use strict';
$(document).ready(function () {
$('.select2-init').select2({
placeholder: "Pilih opsi...",
allowClear: true
});
const saluranLainnyaValue = @json($saluranLainnyaValue);
const praktikBelumPernahValue = String(@json($praktikBelumPernahValue));
const skorPengalamanBerhentiValues = @json($skorPengalamanBerhentiValues ?? [2,3]).map(Number);
function syncAlasanBerhenti() {
const val = Number($('input[name="skor_pengalaman"]:checked').val());
const isBerhenti = skorPengalamanBerhentiValues.includes(val);
$('#alasan-berhenti').prop('disabled', !isBerhenti);
if (!isBerhenti) $('#alasan-berhenti').val('');
}
function syncSaluranLainnya() {
const isLainnya = $('input[name="saluran_terdahulu[]"][value="' + saluranLainnyaValue + '"]').is(':checked');
$('#saluran-lainnya').prop('disabled', !isLainnya);
if (!isLainnya) $('#saluran-lainnya').val('');
}
function syncPraktikFermentasi() {
const isBelumPernah = $('input[name="praktik_fermentasi"]:checked').val() === praktikBelumPernahValue;
$('#proses-fermentasi, #model-fermentasi').prop('disabled', isBelumPernah);
if (isBelumPernah) {
$('#proses-fermentasi, #model-fermentasi').val('');
}
}
$('input[name="skor_pengalaman"]').on('change', syncAlasanBerhenti);
$('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya);
$('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi);
syncAlasanBerhenti();
syncSaluranLainnya();
syncPraktikFermentasi();
});
</script>
@endpush