Update Migration Input Update Praktik Budidaya

This commit is contained in:
2026-07-08 20:57:27 +07:00
parent 3df381a66c
commit 05c2e53378
16 changed files with 857 additions and 216 deletions
@@ -11,6 +11,9 @@ use Illuminate\Validation\Rules\Enum;
use App\Models\Pertanian\Petani;
use App\Models\Pertanian\PraktikBudidaya;
use App\Models\Pertanian\SurveyPanen;
use App\Models\Pertanian\SurveyProduktivitas;
use App\Models\Pertanian\Komoditas;
use App\Enums\PraktikBudidaya\TenagaKerja;
use App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama;
@@ -27,6 +30,13 @@ use App\Enums\PraktikBudidaya\PenangananGulma;
use App\Enums\PraktikBudidaya\KondisiPengelolaanAir;
use App\Enums\PraktikBudidaya\KebutuhanAirPermusim;
use App\Enums\PraktikBudidaya\PemahamanManfaatKonservasi;
use App\Enums\PraktikBudidaya\DasarPenentuanPanen;
use App\Enums\PraktikBudidaya\Bulan;
use App\Enums\PraktikBudidaya\PraktikSortasi;
use App\Enums\PraktikBudidaya\CaraSortasi;
use App\Enums\PraktikBudidaya\TingkatPanenReject;
use App\Enums\PraktikBudidaya\TindakanPanenReject;
use App\Enums\PraktikBudidaya\EstimasiKehilanganHasil;
class PraktikBudidayaController extends Controller
{
@@ -86,6 +96,11 @@ class PraktikBudidayaController extends Controller
$title = 'Petani - Praktik Budidaya';
$petani = Petani::findOrFail($petaniId);
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->latest()->first();
$surveyPanen = SurveyPanen:: where('petani_id', $petaniId)->latest()->first();
$komoditas = Komoditas::all();
$surveyProduktivitas = SurveyProduktivitas::where('petani_id', $petaniId)->get();
$teknikPemangkasan = $praktikBudidaya->teknik_pemangkasan ?? [];
$teknikPemangkasanLainnya = collect($teknikPemangkasan)
@@ -116,7 +131,7 @@ class PraktikBudidayaController extends Controller
->first(fn ($item) => !in_array($item, $defaultSistemIrigasi));
if (!empty($praktikBudidaya)) {
return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya'));
return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'surveyPanen', 'komoditas', 'surveyProduktivitas', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya'));
}
return view('produktivitas.petani.praktik-budidaya.add', compact('title', 'petani', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya'));
@@ -184,6 +199,8 @@ class PraktikBudidayaController extends Controller
'estimasi_dosis_pupuk_anorganik' => $validatedData['estimasi_dosis_pupuk_anorganik'] ?? null,
'waktu_pemberian_pupuk' => ($validatedData['waktu_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['waktu_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['waktu_pemberian_pupuk'] ?? null),
'cara_pemberian_pupuk' => ($validatedData['cara_pemberian_pupuk'] ?? null) === 'Lainnya' ? ($validatedData['cara_pemberian_pupuk_lainnya'] ?? null) : ($validatedData['cara_pemberian_pupuk'] ?? null),
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
return redirect()->route('petani.praktik-budidaya.edit', [$petani->id , $praktikBudidaya->id])
@@ -246,6 +263,11 @@ class PraktikBudidayaController extends Controller
$title = 'Petani - Praktik Budidaya';
$petani = Petani::findOrFail($petaniId);
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->where('id', $praktikBudidayaId)->latest()->first();
$surveyPanen = SurveyPanen:: where('petani_id', $petaniId)->latest()->first();
$komoditas = Komoditas::all();
$surveyProduktivitas = SurveyProduktivitas::where('petani_id', $petaniId)->get();
$teknikPemangkasan = $praktikBudidaya->teknik_pemangkasan ?? [];
$teknikPemangkasanLainnya = collect($teknikPemangkasan)
@@ -275,7 +297,7 @@ class PraktikBudidayaController extends Controller
$sistemIrigasiLainnya = collect(explode(', ', $sistemIrigasi))
->first(fn ($item) => !in_array($item, $defaultSistemIrigasi));
return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya'));
return view('produktivitas.petani.praktik-budidaya.edit', compact('title', 'petani', 'praktikBudidaya', 'surveyPanen', 'komoditas', 'surveyProduktivitas', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya', 'sumberAirLainnya', 'sistemIrigasiLainnya'));
}
public function update($petaniId, $praktikBudidayaId, Request $request)
@@ -284,8 +306,6 @@ class PraktikBudidayaController extends Controller
abort(403);
}
// dd($request->all());
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)
->where('id', $praktikBudidayaId)
->firstOrFail();
@@ -358,9 +378,43 @@ class PraktikBudidayaController extends Controller
'kebiasaan_konservasi_tanah.*' => ['string'],
'pemahaman_manfaat_konservasi' => ['nullable', 'string', new Enum(PemahamanManfaatKonservasi::class)],
'upah_tenaga_kerja' => ['nullable', 'numeric'],
'biaya_bibit' => ['nullable', 'numeric'],
'biaya_pupuk' => ['nullable', 'numeric'],
'biaya_pestisida' => ['nullable', 'numeric'],
'biaya_sewa_alat' => ['nullable', 'numeric'],
'biaya_penyediaan_air' => ['nullable', 'numeric'],
'biaya_lainnya' => ['nullable', 'numeric'],
'total_estimasi_biaya_produksi' => ['nullable', 'numeric'],
'dasar_penentuan_panen' => ['nullable', 'integer', new Enum(DasarPenentuanPanen::class)],
'frekuensi_panen_pertahun' => ['nullable', 'integer'],
'bulan_panen_utama' => ['nullable', 'string', new Enum(Bulan::class)],
'hasil_komoditas_utama_permusim' => ['nullable', 'numeric'],
'hasil_komoditas_lainnya_permusim' => ['nullable', 'numeric'],
'disimpan_untuk_sendiri' => ['nullable', 'boolean'],
'hasil_panen_disimpan' => ['nullable', 'numeric'],
'tujuan_disimpan' => ['nullable', 'string'],
'praktik_sortasi' => ['nullable', 'integer', new Enum(PraktikSortasi::class)],
'bentuk_sortasi' => ['nullable', 'string', new Enum(CaraSortasi::class)],
'tingkat_reject' => ['nullable', 'integer', new Enum(TingkatPanenReject::class)],
'hasil_panen_reject' => ['nullable', 'numeric'],
'tindakan_hasil_reject' => ['nullable', 'string', new Enum(TindakanPanenReject::class)],
'upah_tenaga_panen' => ['nullable', 'numeric'],
'biaya_pengangkutan' => ['nullable', 'numeric'],
'biaya_wadah_kemasan' => ['nullable', 'numeric'],
'biaya_sewa_alat_panen' => ['nullable', 'numeric'],
'biaya_panen_lainnya' => ['nullable', 'numeric'],
'total_estimasi_biaya_panen' => ['nullable', 'numeric'],
'estimasi_kehilangan_akibat_opt' => ['nullable', 'string', new Enum(EstimasiKehilanganHasil::class)],
'estimasi_kehilangan_akibat_hama' => ['nullable', 'string', new Enum(EstimasiKehilanganHasil::class)],
]);
$data = [];
$dataPraktikBudidaya = [];
$dataSurveyPanen = [];
$petani = Petani::findOrFail($petaniId);
@@ -372,7 +426,7 @@ class PraktikBudidayaController extends Controller
$teknik_pemangkasan[] = $request->teknik_pemangkasan_lainnya;
}
}
$data = [
$dataPraktikBudidaya = [
'tenaga_kerja' => $validatedData['tenaga_kerja'],
'frekuensi_pemangkasan_utama' => $validatedData['frekuensi_pemangkasan_komoditas_utama'],
@@ -393,7 +447,7 @@ class PraktikBudidayaController extends Controller
}
if ($request->has('metode_penanganan_hama_penyakit')) {
$data = [
$dataPraktikBudidaya = [
'metode_penanganan_opt' => $validatedData['metode_penanganan_hama_penyakit'] ?? null,
'jenis_hama' => $validatedData['jenis_hama'] ?? [],
'jenis_penyakit' => $validatedData['jenis_penyakit'] ?? [],
@@ -413,7 +467,75 @@ class PraktikBudidayaController extends Controller
];
}
$praktikBudidaya->update($data);
if ($request->has('upah_tenaga_kerja')) {
$dataPraktikBudidaya = [
'upah_tenaga_kerja' => $validatedData['upah_tenaga_kerja'] ?? null,
'biaya_bibit' => $validatedData['biaya_bibit'] ?? null,
'biaya_pupuk' => $validatedData['biaya_pupuk'] ?? null,
'biaya_pestisida' => $validatedData['biaya_pestisida'] ?? null,
'biaya_sewa_alat_produksi' => $validatedData['biaya_sewa_alat'] ?? null,
'biaya_penyediaan_air' => $validatedData['biaya_penyediaan_air'] ?? null,
'biaya_produksi_lainnya' => $validatedData['biaya_lainnya'] ?? null,
'total_estimasi_biaya_produksi' => $validatedData['total_estimasi_biaya_produksi'] ?? null,
];
}
if ($request->has('dasar_penentuan_panen')) {
$dataSurveyPanen = [
'dasar_penentuan_panen' => $validatedData['dasar_penentuan_panen'] ?? null,
'frekuensi_panen_pertahun' => $validatedData['frekuensi_panen_pertahun'] ?? null,
'bulan_panen_utama' => $validatedData['bulan_panen_utama'] ?? null,
'hasil_komoditas_utama_permusim' => $validatedData['hasil_komoditas_utama_permusim'] ?? null,
'hasil_komoditas_lainnya_permusim' => $validatedData['hasil_komoditas_lainnya_permusim'] ?? null,
'disimpan_untuk_sendiri' => $validatedData['disimpan_untuk_sendiri'] ?? false,
'hasil_panen_disimpan' => $validatedData['hasil_panen_disimpan'] ?? null,
'tujuan_disimpan' => $validatedData['tujuan_disimpan'] ?? null,
];
}
if ($request->has('praktik_sortasi')) {
$dataSurveyPanen = [
'praktik_sortasi' => $validatedData['praktik_sortasi'] ?? null,
'bentuk_sortasi' => $validatedData['bentuk_sortasi'] ?? null,
'hasil_panen_reject' => $validatedData['tingkat_reject'] ?? null,
'jumlah_panen_reject' => $validatedData['hasil_panen_reject'] ?? null,
'tindakan_panen_reject' => $validatedData['tindakan_hasil_reject'] ?? null,
'upah_tenaga_panen' => $validatedData['upah_tenaga_panen'] ?? null,
'biaya_pengangkutan_panen' => $validatedData['biaya_pengangkutan'] ?? null,
'biaya_wadah_panen' => $validatedData['biaya_wadah_kemasan'] ?? null,
'biaya_sewa_alat_panen' => $validatedData['biaya_sewa_alat_panen'] ?? null,
'biaya_panen_lainnya' => $validatedData['biaya_panen_lainnya'] ?? null,
'total_estimasi_biaya_panen' => $validatedData['total_estimasi_biaya_panen'] ?? null,
];
}
if ($request->has('estimasi_kehilangan_akibat_opt')) {
$dataSurveyPanen = [
'estimasi_kehilangan_akibat_opt' => $validatedData['estimasi_kehilangan_akibat_opt'] ?? null,
'estimasi_kehilangan_akibat_hama_penyakit' => $validatedData['estimasi_kehilangan_akibat_hama'] ?? null,
];
}
if (!empty($dataPraktikBudidaya)) {
$dataPraktikBudidaya['updated_by'] = auth()->id();
$praktikBudidaya->update($dataPraktikBudidaya);
}
if (!empty($dataSurveyPanen)) {
$surveyPanen = SurveyPanen::where('petani_id', $petani->id)->first();
if ($surveyPanen) {
$dataSurveyPanen['updated_by'] = auth()->id();
$surveyPanen->update($dataSurveyPanen);
} else {
SurveyPanen::create(array_merge([
'uid' => 'SP-' . strtoupper(Str::random(10)),
'petani_id' => $petani->id,
'created_by' => auth()->id(),
'updated_by_by' => auth()->id()
], $dataSurveyPanen));
}
}
return back()->with('success', 'Data berhasil diperbarui.');
}
@@ -0,0 +1,50 @@
<?php
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;
class SurveyProduktivitasController extends Controller
{
public function store($petaniId, Request $request)
{
$petani = Petani::findOrFail($petaniId);
dd($request->all());
$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'],
]);
foreach ($validated['produktivitas_komoditas'] as $row) {
SurveyProduktivitas::create([
'uid' => 'SPV-' . strtoupper(Str::random(10)),
'petani_id' => $petani->id,
'komoditas_id' => $row['komoditas_id'],
'kuantitas' => $row['hasil_panen_3_musim'],
'satuan' => $row['satuan'],
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
]);
}
return back()->with('success', 'Data produktivitas berhasil disimpan.');
}
public function destroy($petaniId, $surveyProduktivitasId)
{
$surveyProduktivitas = SurveyProduktivitas::where('petani_id', $petaniId)
->where('id', $surveyProduktivitasId)
->firstOrFail();
$surveyProduktivitas->deleted_by = auth()->id();
$surveyProduktivitas->save();
$surveyProduktivitas->delete();
return back()->with('success', 'Data produktivitas berhasil dihapus.');
}
}