diff --git a/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php b/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php index 1005c90..6f8fb1e 100644 --- a/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php +++ b/app/Http/Controllers/Web/Produktivitas/AksesPasarController.php @@ -128,6 +128,17 @@ class AksesPasarController extends Controller return $request->validate([ 'petani_id' => ['required', 'exists:petani,id'], + + 'tujuan_penjualan' => ['nullable', 'array'], + 'tujuan_penjualan.*' => ['string'], + 'tujuan_penjualan_lainnya' => [ + Rule::requiredIf(fn () => in_array('Lainnya', $request->input('tujuan_penjualan', []), true)), + 'nullable', 'string', 'max:255' + ], + 'sifat_hubungan_bisnis' => ['nullable', 'string', 'max:255'], + 'bentuk_penjualan' => ['nullable', 'string', 'max:255'], + 'frekuensi_penjualan' => ['nullable', 'string', 'max:255'], + 'skor_pengalaman' => ['nullable', 'integer', Rule::in(SkorPengalaman::values())], 'alasan_berhenti' => [ Rule::requiredIf(fn () => in_array((int)$request->input('skor_pengalaman'), [ @@ -168,6 +179,7 @@ class AksesPasarController extends Controller ], [ 'petani_id.required' => 'Petani harus dipilih.', 'petani_id.exists' => 'Petani tidak ditemukan.', + 'tujuan_penjualan_lainnya.required' => 'Keterangan saluran penjualan lainnya harus diisi.', 'skor_pengalaman.integer' => 'Skor pengalaman harus berupa angka.', 'skor_pengalaman.in' => 'Skor pengalaman tidak valid.', 'alasan_berhenti.required' => 'Alasan berhenti harus diisi.', @@ -204,6 +216,11 @@ class AksesPasarController extends Controller { $payload = collect($validated)->except(['harga_jual'])->all(); + // Bersihkan input teks "Lainnya" jika checkbox Lainnya tidak dipilih + if (!in_array('Lainnya', $payload['tujuan_penjualan'] ?? [], true)) { + $payload['tujuan_penjualan_lainnya'] = null; + } + if (!in_array((int)($payload['skor_pengalaman'] ?? 0), [ SkorPengalaman::PERNAH_BERHENTI_TIDAK_ADA_AKSES->value, SkorPengalaman::PERNAH_BERHENTI_MUNGKIN_KEMBALI->value @@ -223,7 +240,6 @@ class AksesPasarController extends Controller return $payload; } - private function syncHargaJual($petaniId, array $hargaJualData, $createdBy, $updatedBy = null): void { HargaJualPanen::where('petani_id', $petaniId)->delete(); @@ -258,7 +274,7 @@ class AksesPasarController extends Controller $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']); + $data['harga_jual'][$index]['harga_dua_tahun_lalu'] = $this->currencyDigits($item['harga_dua_tahun_l'], 0); // fixed } } } @@ -279,4 +295,4 @@ class AksesPasarController extends Controller return is_null($digits) ? '' : number_format((int) $digits, 0, ',', '.'); } -} +} \ No newline at end of file diff --git a/app/Models/Pertanian/AksesPasar.php b/app/Models/Pertanian/AksesPasar.php index 513c6a4..2e91b36 100644 --- a/app/Models/Pertanian/AksesPasar.php +++ b/app/Models/Pertanian/AksesPasar.php @@ -22,6 +22,11 @@ class AksesPasar extends Model protected $fillable = [ 'uid', 'petani_id', + 'tujuan_penjualan', + 'tujuan_penjualan_lainnya', + 'sifat_hubungan_bisnis', + 'bentuk_penjualan', + 'frekuensi_penjualan', 'skor_pengalaman', 'saluran_terdahulu', 'saluran_terdahulu_lainnya', @@ -44,6 +49,7 @@ class AksesPasar extends Model ]; protected $casts = [ + 'tujuan_penjualan' => 'array', 'saluran_terdahulu' => 'array', ]; diff --git a/database/migrations/2026_10_15_133839_add_saluran_penjualan_fields_to_akses_pasar_table.php b/database/migrations/2026_10_15_133839_add_saluran_penjualan_fields_to_akses_pasar_table.php new file mode 100644 index 0000000..746c5dd --- /dev/null +++ b/database/migrations/2026_10_15_133839_add_saluran_penjualan_fields_to_akses_pasar_table.php @@ -0,0 +1,38 @@ +text('tujuan_penjualan')->nullable(); + $table->string('tujuan_penjualan_lainnya')->nullable(); + $table->text('sifat_hubungan_bisnis')->nullable(); + $table->text('bentuk_penjualan')->nullable(); + $table->string('frekuensi_penjualan')->nullable(); + }); +} + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('akses_pasar', function (Blueprint $table) { + $table->dropColumn([ + 'tujuan_penjualan', + 'tujuan_penjualan_lainnya', + 'sifat_hubungan_bisnis', + 'bentuk_penjualan', + 'frekuensi_penjualan' + ]); + }); + } +}; diff --git a/resources/views/produktivitas/petani/akses-pasar/index.blade.php b/resources/views/produktivitas/petani/akses-pasar/index.blade.php index 9ecac65..2f333e3 100644 --- a/resources/views/produktivitas/petani/akses-pasar/index.blade.php +++ b/resources/views/produktivitas/petani/akses-pasar/index.blade.php @@ -30,6 +30,106 @@