From 4ab745cfe5198a2ee57ebdd95ed3120e33695e5d Mon Sep 17 00:00:00 2001 From: althaf Date: Mon, 19 Oct 2026 10:03:05 +0700 Subject: [PATCH] sumber informasi harga --- .../Produktivitas/AksesPasarController.php | 15 +- app/Models/Pertanian/AksesPasar.php | 4 + ..._06_30_135321_create_akses_pasar_table.php | 2 +- ...masi_harga_fields_to_akses_pasar_table.php | 28 +++ .../petani/akses-pasar/index.blade.php | 192 ++++++++++++------ 5 files changed, 182 insertions(+), 59 deletions(-) create mode 100644 database/migrations/2026_10_16_152312_add_sumber_informasi_harga_fields_to_akses_pasar_table.php diff --git a/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php b/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php index f22faa6..d731273 100644 --- a/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php +++ b/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php @@ -118,7 +118,8 @@ class AksesPasarController extends Controller 'skorPengalamanBerhentiValues' => [ SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value, SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value - ] + ], + 'sumberInfoLainnyaValue' => 'Lainnya', ]; } @@ -154,6 +155,14 @@ class AksesPasarController extends Controller Rule::requiredIf(fn () => in_array(SaluranTerdahulu::LAINNYA->value, $request->input('saluran_terdahulu', []), true)), '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())], 'proses_fermentasi' => [ @@ -231,6 +240,10 @@ class AksesPasarController extends Controller $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) { $payload['proses_fermentasi'] = null; $payload['model_fermentasi_memungkinkan'] = null; diff --git a/app/Models/Pertanian/AksesPasar.php b/app/Models/Pertanian/AksesPasar.php index 2e91b36..9d89603 100644 --- a/app/Models/Pertanian/AksesPasar.php +++ b/app/Models/Pertanian/AksesPasar.php @@ -31,6 +31,9 @@ class AksesPasar extends Model 'saluran_terdahulu', 'saluran_terdahulu_lainnya', 'alasan_berhenti', + 'tahu_harga_sebelumnya', + 'sumber_info_harga', + 'sumber_info_harga_lainnya', 'praktik_fermentasi', 'proses_fermentasi', 'model_fermentasi_memungkinkan', @@ -51,6 +54,7 @@ class AksesPasar extends Model protected $casts = [ 'tujuan_penjualan' => 'array', 'saluran_terdahulu' => 'array', + 'sumber_info_harga' => 'array', ]; protected static function booted(): void diff --git a/database/migrations/2026_06_30_135321_create_akses_pasar_table.php b/database/migrations/2026_06_30_135321_create_akses_pasar_table.php index 3cb6e3e..f624fed 100644 --- a/database/migrations/2026_06_30_135321_create_akses_pasar_table.php +++ b/database/migrations/2026_06_30_135321_create_akses_pasar_table.php @@ -61,7 +61,7 @@ return new class extends Migration $table->integer('harga_tahun_lalu')->nullable(); $table->integer('harga_dua_tahun_lalu')->nullable(); - $table ->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); + $table ->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); $table ->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); $table ->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); diff --git a/database/migrations/2026_10_16_152312_add_sumber_informasi_harga_fields_to_akses_pasar_table.php b/database/migrations/2026_10_16_152312_add_sumber_informasi_harga_fields_to_akses_pasar_table.php new file mode 100644 index 0000000..0cfb451 --- /dev/null +++ b/database/migrations/2026_10_16_152312_add_sumber_informasi_harga_fields_to_akses_pasar_table.php @@ -0,0 +1,28 @@ +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', + ]); + }); + } +}; \ No newline at end of file diff --git a/resources/views/produktivitas/petani/akses-pasar/index.blade.php b/resources/views/produktivitas/petani/akses-pasar/index.blade.php index adb7f7b..aee1fe1 100644 --- a/resources/views/produktivitas/petani/akses-pasar/index.blade.php +++ b/resources/views/produktivitas/petani/akses-pasar/index.blade.php @@ -130,78 +130,78 @@
-
Pengalaman Saluran Lain
-
- -
- - @foreach($skorPengalamanOptions as $option) -
- skor_pengalaman) === (string) $option['value'] ? 'checked' : '' }}> - -
- @endforeach - @error('skor_pengalaman')
{{ $message }}
@enderror -
+
Pengalaman Saluran Lain
+
+ +
+ + @foreach($skorPengalamanOptions as $option) +
+ skor_pengalaman) === (string) $option['value'] ? 'checked' : '' }}> + +
+ @endforeach + @error('skor_pengalaman')
{{ $message }}
@enderror +
-
-
- -
- - - @error('alasan_berhenti')
{{ $message }}
@enderror -
+
+
+ +
+ + + @error('alasan_berhenti')
{{ $message }}
@enderror +
-
+
-
- -
- @foreach($saluranTerdahuluOptions as $option) - @if($option['value'] !== $saluranLainnyaValue) -
-
+
+ +
+ @foreach($saluranTerdahuluOptions as $option) + @if($option['value'] !== $saluranLainnyaValue) +
+
+ saluran_terdahulu ?? []), true) ? 'checked' : '' }}> + +
+
+ @endif + @endforeach + +
+
+
saluran_terdahulu ?? []), true) ? 'checked' : '' }}> -
+
- @endif - @endforeach - -
-
-
- saluran_terdahulu ?? []), true) ? 'checked' : '' }}> - -
-
+ @error('saluran_terdahulu')
{{ $message }}
@enderror + @error('saluran_terdahulu_lainnya')
{{ $message }}
@enderror
- @error('saluran_terdahulu')
{{ $message }}
@enderror - @error('saluran_terdahulu_lainnya')
{{ $message }}
@enderror -
+
-
HARGA DI SETIAP TITIK
Harga Jual Panen Terakhir
@@ -252,6 +252,75 @@
+
Sumber Informasi Harga
+
+ +
+ +
+ @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) +
+
+ tahu_harga_sebelumnya) === $tahu ? 'checked' : '' }}> + +
+
+ @endforeach +
+ @error('tahu_harga_sebelumnya')
{{ $message }}
@enderror +
+ +
+ +
+ @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) +
+
+ sumber_info_harga ?? []), true) ? 'checked' : '' }}> + +
+
+ @endforeach + +
+
+
+ sumber_info_harga ?? []), true) ? 'checked' : '' }}> + +
+ +
+
+
+ @error('sumber_info_harga')
{{ $message }}
@enderror + @error('sumber_info_harga_lainnya')
{{ $message }}
@enderror +
+ +
+
PELUANG NILAI TAMBAH
@@ -386,6 +455,7 @@ const praktikBelumPernahValue = String(@json($praktikBelumPernahValue)); const skorPengalamanBerhentiValues = @json($skorPengalamanBerhentiValues ?? [2,3]).map(Number); const skorBelumPernahValue = "1"; + const sumberInfoLainnyaValue = @json($sumberInfoLainnyaValue ?? 'Lainnya'); function onlyDigits(value) { return String(value || '').replace(/\D/g, ''); @@ -425,6 +495,12 @@ 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() { const isBelumPernah = $('input[name="praktik_fermentasi"]:checked').val() === praktikBelumPernahValue; $('#proses-fermentasi, #model-fermentasi').prop('disabled', isBelumPernah); @@ -439,6 +515,7 @@ }); $('input[name="saluran_terdahulu[]"]').on('change', syncSaluranLainnya); + $('input[name="sumber_info_harga[]"]').on('change', syncSumberInfoLainnya); $('input[name="praktik_fermentasi"]').on('change', syncPraktikFermentasi); $(document).on('input', '.rupiah-input', function () { @@ -457,6 +534,7 @@ toggleSaluranLanjutan(); syncAlasanBerhenti(); syncSaluranLainnya(); + syncSumberInfoLainnya(); syncPraktikFermentasi(); });