Update Praktik Budidaya & Pendidikan Pelatihan

This commit is contained in:
2026-07-07 14:39:25 +07:00
parent b3d805fe98
commit ff3f930939
24 changed files with 3054 additions and 249 deletions
@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Web\Produktivitas;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use App\Models\Pertanian\Petani;
class PendidikanPelatihanController extends Controller
{
public function index($petaniId, Request $request)
{
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
abort(403);
}
$title = 'Petani - Pendidikan dan Pelatihan';
$petani = Petani::findOrFail($petaniId);
return view('produktivitas.petani.pendidikan-pelatihan.add', compact('title', 'petani'));
}
}
@@ -5,8 +5,19 @@ namespace App\Http\Controllers\Web\Produktivitas;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules\Enum;
use App\Models\Pertanian\Petani;
use App\Models\Pertanian\PraktikBudidaya;
use App\Enums\PraktikBudidaya\TenagaKerja;
use App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama;
use App\Enums\PraktikBudidaya\FrekuensiPemangkasanPendamping;
use App\Enums\PraktikBudidaya\PemberianPupuk;
use App\Enums\PraktikBudidaya\JenisPupuk;
use App\Enums\PraktikBudidaya\PenyerbukanManual;
class PraktikBudidayaController extends Controller
{
@@ -16,9 +27,245 @@ class PraktikBudidayaController extends Controller
abort(403);
}
$defaultTeknikPemangkasan = [
'Pemangkasan bentuk',
'Pemangkasan produksi',
'Pemangkasan peremajaan',
'Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan',
];
$defaultAlasanTidakPenyerbukan = [
'Tidak tahu caranya',
'Tidak ada tenaga/waktu',
'Mengandalkan penyerbuk alami',
];
$defaultFrekuensiPemupukan = [
'1 kali/tahun',
'2 kali/tahun',
'Lebih dari 2 kali/tahun',
];
$defaultWaktuPemberianPupuk = [
'Awal musim hujan',
'Akhir musim hujan',
'Sebelum berbunga',
'Sebelum Setelah Panen',
'Tidak Menentu',
];
$defaultCaraPemberianPupuk = [
'Ditabur di sekitar pohon',
'Dibenamkan dalam lubang/parit',
'Dicairkan/dikocor',
'Disemprotkan ke daun',
];
$defaultSumberAir = [
'Sungai/mata air',
'Sumur',
'Mengandalkan hujan saja',
];
$defaultSistemIrigasi = [
'Tidak ada irigasi',
'Milik sendiri',
'Milik komunitas/kelompok tani',
'Milik pemerintah',
];
$title = 'Petani - Praktik Budidaya';
$petani = Petani::findOrFail($petaniId);
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->latest()->first();
$teknikPemangkasan = $praktikBudidaya->teknik_pemangkasan ?? [];
$teknikPemangkasanLainnya = collect($teknikPemangkasan)
->first(fn ($item) => !in_array($item, $defaultTeknikPemangkasan));
$alasanTidakPenyerbukan = $praktikBudidaya->deskripsi_tidak_penyerbukan ?? '';
$alasanTidakPenyerbukanLainnya = collect(explode(', ', $alasanTidakPenyerbukan))
->first(fn ($item) => !in_array($item, $defaultAlasanTidakPenyerbukan));
$frekuensiPemupukan = $praktikBudidaya->frekuensi_pemupukan ?? '';
$frekuensiPemupukanLainnya = collect(explode(', ', $frekuensiPemupukan))
->first(fn ($item) => !in_array($item, $defaultFrekuensiPemupukan));
$waktuPemberianPupuk = $praktikBudidaya->waktu_pemberian_pupuk ?? '';
$waktuPemberianPupukLainnya = collect(explode(', ', $waktuPemberianPupuk))
->first(fn ($item) => !in_array($item, $defaultWaktuPemberianPupuk));
$caraPemberianPupuk = $praktikBudidaya->cara_pemberian_pupuk ?? '';
$caraPemberianPupukLainnya = collect(explode(', ', $caraPemberianPupuk))
->first(fn ($item) => !in_array($item, $defaultCaraPemberianPupuk));
$sumberAir = $praktikBudidaya->sumber_air ?? '';
$sumberAirLainnya = collect(explode(', ', $sumberAir))
->first(fn ($item) => !in_array($item, $defaultSumberAir));
$sistemIrigasi = $praktikBudidaya->sistem_irigasi ?? '';
$sistemIrigasiLainnya = collect(explode(', ', $sistemIrigasi))
->first(fn ($item) => !in_array($item, $defaultSistemIrigasi));
return view('produktivitas.petani.praktik-budidaya.add', compact('title', 'petani'));
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.add', compact('title', 'petani', 'teknikPemangkasanLainnya', 'alasanTidakPenyerbukanLainnya', 'frekuensiPemupukanLainnya', 'waktuPemberianPupukLainnya', 'caraPemberianPupukLainnya'));
}
public function store($petaniId, Request $request)
{
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
abort(403);
}
$validatedData = $request->validate([
'tenaga_kerja' => ['nullable', 'string', new Enum(TenagaKerja::class)],
'frekuensi_pemangkasan_komoditas_utama' => ['nullable', 'int', new Enum(FrekuensiPemangkasanUtama::class)],
'teknik_pemangkasan' => ['nullable', 'array'],
'teknik_pemangkasan_lainnya' => ['nullable', 'string'],
'frekuensi_pemangkasan_pohon_penaung' => ['nullable', 'string', new Enum(FrekuensiPemangkasanPendamping::class)],
'penyerbukan_manual' => ['nullable', 'string', new Enum(PenyerbukanManual::class)],
'alasan_tidak_penyerbukan' => ['nullable', 'string'],
'alasan_tidak_penyerbukan_lainnya' => ['nullable', 'string'],
'tingkat_keberhasilan_penyerbukan' => ['nullable', 'string'],
'pemberian_pupuk' => ['nullable', 'int', new Enum(PemberianPupuk::class)],
'jenis_pupuk' => ['nullable', 'string', new Enum(JenisPupuk::class)],
'frekuensi_pemupukan' => ['nullable', 'string'],
'frekuensi_pemupukan_lainnya' => ['nullable', 'string'],
'estimasi_dosis_pupuk_organik' => ['nullable', 'string'],
'estimasi_dosis_pupuk_anorganik' => ['nullable', 'string'],
'waktu_pemberian_pupuk' => ['nullable', 'string'],
'waktu_pemberian_pupuk_lainnya' => ['nullable', 'string'],
'cara_pemberian_pupuk' => ['nullable', 'string'],
'cara_pemberian_pupuk_lainnya' => ['nullable', 'string'],
]);
$teknik_pemangkasan = $request->teknik_pemangkasan ?? [];
if (($key = array_search('Lainnya', $teknik_pemangkasan)) !== false) {
unset($teknik_pemangkasan[$key]);
if (!empty($request->teknik_pemangkasan_lainnya)) {
$teknik_pemangkasan[] = $request->teknik_pemangkasan_lainnya;
}
}
$teknik_pemangkasan = array_values($teknik_pemangkasan);
$petani = Petani::findOrFail($petaniId);
$praktikBudidaya = $petani->praktik_budidaya()->create([
'petani_id' => $petani->id,
'uid' => 'PB-' . strtoupper(Str::random(10)),
'tenaga_kerja' => $validatedData['tenaga_kerja'],
'frekuensi_pemangkasan_utama' => $validatedData['frekuensi_pemangkasan_komoditas_utama'],
'teknik_pemangkasan' => $teknik_pemangkasan,
'frekuensi_pemangkasan_penaung' => $validatedData['frekuensi_pemangkasan_pohon_penaung'],
'penyerbukan_manual' => $validatedData['penyerbukan_manual'] ?? null,
'deskripsi_penyerbukan_manual' => $validatedData['alasan_tidak_penyerbukan'] ?? null,
'tingkat_keberhasilan_penyerbukan' => $validatedData['tingkat_keberhasilan_penyerbukan'] ?? null,
'pemberian_pupuk' => $validatedData['pemberian_pupuk'] ?? null,
'jenis_pupuk' => $validatedData['jenis_pupuk'] ?? null,
'frekuensi_pemberian_pupuk' => ($validatedData['frekuensi_pemupukan'] ?? null) === 'Lainnya' ? ($validatedData['frekuensi_pemupukan_lainnya'] ?? null) : ($validatedData['frekuensi_pemupukan'] ?? null),
'estimasi_dosis_pupuk_organik' => $validatedData['estimasi_dosis_pupuk_organik'] ?? null,
'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),
]);
return redirect()->route('petani.praktik-budidaya.edit', [$petani->id , $praktikBudidaya->id])
->with('success', 'Data praktik budidaya berhasil disimpan.');
}
public function edit($petaniId, $praktikBudidayaId)
{
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
abort(403);
}
$defaultTeknikPemangkasan = [
'Pemangkasan bentuk',
'Pemangkasan produksi',
'Pemangkasan peremajaan',
'Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan',
];
$defaultAlasanTidakPenyerbukan = [
'Tidak tahu caranya',
'Tidak ada tenaga/waktu',
'Mengandalkan penyerbuk alami',
];
$defaultFrekuensiPemupukan = [
'1 kali/tahun',
'2 kali/tahun',
'Lebih dari 2 kali/tahun',
];
$defaultWaktuPemberianPupuk = [
'Awal musim hujan',
'Akhir musim hujan',
'Sebelum berbunga',
'Sebelum Setelah Panen',
'Tidak Menentu',
];
$defaultCaraPemberianPupuk = [
'Ditabur di sekitar pohon',
'Dibenamkan dalam lubang/parit',
'Dicairkan/dikocor',
'Disemprotkan ke daun',
];
$defaultSumberAir = [
'Sungai/mata air',
'Sumur',
'Mengandalkan hujan saja',
];
$defaultSistemIrigasi = [
'Tidak ada irigasi',
'Milik sendiri',
'Milik komunitas/kelompok tani',
'Milik pemerintah',
];
$title = 'Petani - Praktik Budidaya';
$petani = Petani::findOrFail($petaniId);
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)->where('id', $praktikBudidayaId)->latest()->first();
$teknikPemangkasan = $praktikBudidaya->teknik_pemangkasan ?? [];
$teknikPemangkasanLainnya = collect($teknikPemangkasan)
->first(fn ($item) => !in_array($item, $defaultTeknikPemangkasan));
$alasanTidakPenyerbukan = $praktikBudidaya->deskripsi_tidak_penyerbukan ?? '';
$alasanTidakPenyerbukanLainnya = collect(explode(', ', $alasanTidakPenyerbukan))
->first(fn ($item) => !in_array($item, $defaultAlasanTidakPenyerbukan));
$frekuensiPemupukan = $praktikBudidaya->frekuensi_pemupukan ?? '';
$frekuensiPemupukanLainnya = collect(explode(', ', $frekuensiPemupukan))
->first(fn ($item) => !in_array($item, $defaultFrekuensiPemupukan));
$waktuPemberianPupuk = $praktikBudidaya->waktu_pemberian_pupuk ?? '';
$waktuPemberianPupukLainnya = collect(explode(', ', $waktuPemberianPupuk))
->first(fn ($item) => !in_array($item, $defaultWaktuPemberianPupuk));
$caraPemberianPupuk = $praktikBudidaya->cara_pemberian_pupuk ?? '';
$caraPemberianPupukLainnya = collect(explode(', ', $caraPemberianPupuk))
->first(fn ($item) => !in_array($item, $defaultCaraPemberianPupuk));
$sumberAir = $praktikBudidaya->sumber_air ?? '';
$sumberAirLainnya = collect(explode(', ', $sumberAir))
->first(fn ($item) => !in_array($item, $defaultSumberAir));
$sistemIrigasi = $praktikBudidaya->sistem_irigasi ?? '';
$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'));
}
}