diff --git a/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php b/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php index 3c15d3a..b45a4b6 100644 --- a/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php +++ b/app/Http/Controllers/Web/Produktivitas/SurveyProduktivitasController.php @@ -3,26 +3,43 @@ namespace App\Http\Controllers\Web\Produktivitas; use App\Http\Controllers\Controller; -use Illuminate\Http\Request; -use Illuminate\Support\Str; - use App\Models\Pertanian\Petani; use App\Models\Pertanian\SurveyProduktivitas; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Validator; +use Illuminate\Support\Str; class SurveyProduktivitasController extends Controller { public function store($petaniId, Request $request) { $petani = Petani::findOrFail($petaniId); - $validated = $request->validate([ - 'produktivitas_komoditas' => ['required', 'array'], - 'produktivitas_komoditas.*.komoditas_id' => ['nullable', 'exists:master_komoditas,id'], - 'produktivitas_komoditas.*.hasil_panen_3_musim' => ['nullable', 'numeric'], - 'produktivitas_komoditas.*.satuan' => ['nullable', 'string'], + + $validator = Validator::make($request->all(), [ + 'produktivitas_komoditas' => ['required', 'array', 'min:1'], + 'produktivitas_komoditas.*.komoditas_id' => ['required', 'exists:master_komoditas,id'], + 'produktivitas_komoditas.*.hasil_panen_3_musim' => ['required', 'numeric', 'min:0'], + 'produktivitas_komoditas.*.satuan' => ['required', 'in:ha_tahun,pohon_tahun'], + ], [ + 'produktivitas_komoditas.required' => 'Minimal satu data produktivitas harus diisi.', + 'produktivitas_komoditas.*.komoditas_id.required' => 'Komoditas wajib dipilih.', + 'produktivitas_komoditas.*.komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.', + 'produktivitas_komoditas.*.hasil_panen_3_musim.required' => 'Hasil panen wajib diisi.', + 'produktivitas_komoditas.*.hasil_panen_3_musim.numeric' => 'Hasil panen harus berupa angka.', + 'produktivitas_komoditas.*.hasil_panen_3_musim.min' => 'Hasil panen tidak boleh kurang dari 0.', + 'produktivitas_komoditas.*.satuan.required' => 'Satuan wajib dipilih.', + 'produktivitas_komoditas.*.satuan.in' => 'Satuan yang dipilih tidak valid.', ]); + + if ($validator->fails()) { + return $this->redirectBackToFragment($request)->withErrors($validator)->withInput(); + } + + $validated = $validator->validated(); + foreach ($validated['produktivitas_komoditas'] as $row) { SurveyProduktivitas::create([ - 'uid' => 'SPV-' . strtoupper(Str::random(10)), + 'uid' => 'SPV-'.strtoupper(Str::random(10)), 'petani_id' => $petani->id, 'komoditas_id' => $row['komoditas_id'], 'kuantitas' => $row['hasil_panen_3_musim'], @@ -51,10 +68,10 @@ class SurveyProduktivitasController extends Controller { $fragment = $request->input('redirect_fragment'); - if (!is_string($fragment) || !preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) { + if (! is_string($fragment) || ! preg_match('/^[A-Za-z0-9_-]+$/', $fragment)) { return back(); } - return redirect()->to(Str::before(url()->previous(), '#') . '#' . $fragment); + return redirect()->to(Str::before(url()->previous(), '#').'#'.$fragment); } } diff --git a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php index d7dbc0f..f35e208 100644 --- a/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php +++ b/resources/views/produktivitas/petani/praktik-budidaya/edit.blade.php @@ -1598,42 +1598,66 @@ action="{{ route('petani.survey-produktivitas.store', $petani->id) }}" class="form-repeater"> @csrf - + + + @php + $produktivitasRows = old('produktivitas_komoditas'); + + if (!is_array($produktivitasRows) || count($produktivitasRows) === 0) { + $produktivitasRows = [ + [ + 'komoditas_id' => null, + 'hasil_panen_3_musim' => null, + 'satuan' => null, + ], + ]; + } + @endphp