This commit is contained in:
2026-07-07 15:41:21 +07:00
24 changed files with 3054 additions and 249 deletions
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum FrekuensiPemangkasanPendamping: string
{
case TIDAK_PERNAH = 'Tidak pernah memangkas sama sekali';
case TIDAK_RUTIN = 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya';
case SATU_KALI_TAHUN = 'Memangkas 1 kali/tahun, tahu jenis tekniknya';
case DUA_KALI_TAHUN = 'Memangkas 2 kali/tahun, tahu jenis tekniknya';
case LEBIH_DUA_KALI_TAHUN = 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin';
public function label(): string
{
return match($this) {
self::TIDAK_PERNAH => 'Tidak pernah memangkas sama sekali',
self::TIDAK_RUTIN => 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya',
self::SATU_KALI_TAHUN => 'Memangkas 1 kali/tahun, tahu jenis tekniknya',
self::DUA_KALI_TAHUN => 'Memangkas 2 kali/tahun, tahu jenis tekniknya',
self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum FrekuensiPemangkasanUtama: int
{
case TIDAK_PERNAH = 1;
case TIDAK_RUTIN = 2;
case SATU_KALI_TAHUN = 3;
case DUA_KALI_TAHUN = 4;
case LEBIH_DUA_KALI_TAHUN = 5;
public function label(): string
{
return match($this) {
self::TIDAK_PERNAH => 'Tidak pernah memangkas sama sekali',
self::TIDAK_RUTIN => 'Memangkas, tapi tidak rutin dan tidak tahu tekniknya',
self::SATU_KALI_TAHUN => 'Memangkas 1 kali/tahun, tahu jenis tekniknya',
self::DUA_KALI_TAHUN => 'Memangkas 2 kali/tahun, tahu jenis tekniknya',
self::LEBIH_DUA_KALI_TAHUN => 'Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum FrekuensiSanitasiLahan: int
{
case TIDAK_PERNAH = 1;
case SESEKALI = 2;
case SETIAP_PANEN = 3;
case RUTIN_TIDAK_TERJADWAL = 4;
case RUTIN_TERJADWAL = 5;
public function label(): string
{
return match($this) {
self::TIDAK_PERNAH => 'Tidak pernah',
self::SESEKALI => 'Sesekali, tidak terjadwal',
self::SETIAP_PANEN => 'Setiap panen, tapi tidak menyeluruh',
self::RUTIN_TIDAK_TERJADWAL => 'Rutin, tapi tanpa jadwal yang jelas',
self::RUTIN_TERJADWAL => 'Rutin terjadwal dan menyeluruh',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum IntensitasSeranganHamaPenyakit: string
{
case RINGAN = 'Ringan - hanya beberapa tanaman terdampak';
case SEDANG = 'Sedang - sebagian tanaman terdampak';
case PARAH = 'Parah - sebagian besar tanaman terdampak';
case BERVARIASI = 'Bervariasi - tergantung musim';
public function label(): string
{
return match($this) {
self::RINGAN => 'Ringan - hanya beberapa tanaman terdampak',
self::SEDANG => 'Sedang - sebagian tanaman terdampak',
self::PARAH => 'Parah - sebagian besar tanaman terdampak',
self::BERVARIASI => 'Bervariasi - tergantung musim',
};
}
public static function values(): array
{
return collect(self::cases())->map(fn ($case) => $case->value)->toArray();
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum JenisPupuk: string
{
case TIDAK_MEMBERI = 'Tidak memberi pupuk';
case ORGANIK = 'Pupuk organik (kompos/kandang)';
case KIMIA = 'Pupuk kimia';
case KEDUANYA = 'Keduanya';
public function label(): string
{
return match($this) {
self::TIDAK_MEMBERI => 'Tidak memberi pupuk',
self::ORGANIK => 'Pupuk organik (kompos/kandang)',
self::KIMIA => 'Pupuk kimia',
self::KEDUANYA => 'Keduanya',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum KebutuhanAirPerMusim: string
{
case TIDAK_BUTUH = 'Tidak butuh, hujan cukup';
case KURANG = 'Kurang, sering kekurangan air';
case CUKUP = 'Cukup terpenuhi';
public function label(): string
{
return match($this) {
self::TIDAK_BUTUH => 'Tidak butuh, hujan cukup',
self::KURANG => 'Kurang, sering kekurangan air',
self::CUKUP => 'Cukup terpenuhi',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum KondisiPengelolaanAir: int
{
case KURANG_TIDAK_ADA_UPAYA = 1;
case KURANG_TIDAK_SUDAH_BERUPAYA = 2;
case CUKUP_DARI_HUJAN = 3;
case CUKUP_IRIGASI_PINJAM = 4;
case CUKUP_IRIGASI_SENDIRI = 5;
public function label(): string
{
return match($this) {
self::KURANG_TIDAK_ADA_UPAYA => 'Kebutuhan air kurang terpenuhi, sering kekurangan air, tidak ada upaya mengatasinya',
self::KURANG_TIDAK_SUDAH_BERUPAYA => 'Kebutuhan air kurang terpenuhi, sering kekurangan air, tapi sudah mencoba mengandalkan sumber lain (sumur/sungai) walau belum cukup',
self::CUKUP_DARI_HUJAN => 'Kebutuhan air cukup terpenuhi hanya dari hujan, tanpa sistem irigasi tambahan',
self::CUKUP_IRIGASI_PINJAM => 'Kebutuhan air cukup terpenuhi, ada sistem irigasi tambahan (sungai/mata air/sumur) tapi pinjam',
self::CUKUP_IRIGASI_SENDIRI => 'Kebutuhan air cukup terpenuhi, punya akses irigasi sendiri (sungai/mata air/sumur) yang dikelola baik',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,36 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum MetodePenangananHamaPenyakit: int
{
case TIDAK_ADA = 1;
case CARA_TRADISIONAL = 2;
case PESTISIDA_SANITASI = 3;
case KOMBINASI = 4;
case PHT = 5;
public function label(): string
{
return match($this) {
self::TIDAK_ADA => 'Tidak ada penanganan',
self::CARA_TRADISIONAL => 'Cara tradisional (doa/ritual)',
self::PESTISIDA_SANITASI => 'Pestisida atau sanitasi',
self::KOMBINASI => 'Kombinasi pestisada dan sanitasi',
self::PHT => 'Pengendalian hama terpadu(PHT)',
};
}
public static function values(): array
{
return collect(self::cases())->map(fn ($case) => $case->value)->toArray();
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,25 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum PemahamanManfaatKonservasi: string
{
case YA_PAHAM = 'Ya, tahu manfaatnya';
case TIDAK_PAHAM = 'Dilakukan tapi tidak tahu manfaatnya, kebiasaan turun-temurun';
public function label(): string
{
return match($this) {
self::YA_PAHAM => 'Ya, tahu manfaatnya',
self::TIDAK_PAHAM => 'Dilakukan tapi tidak tahu manfaatnya, kebiasaan turun-temurun',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum PemberianPupuk: int
{
case TIDAK_PERNAH = 1;
case JENIS_DOSIS_WAKTU_TIDAK_MENENTU = 2;
case JENIS_SESUAI_DOSIS_TIDAK_MENENTU = 3;
case JENIS_DOSIS_SESUAI_WAKTU_CUKUP_TEPAT = 4;
case JENIS_DOSIS_SESUAI_WAKTU_TEPAT = 5;
public function label(): string
{
return match($this) {
self::TIDAK_PERNAH => 'Tidak pernah memberi pupuk',
self::JENIS_DOSIS_WAKTU_TIDAK_MENENTU => 'Memberi pupuk, tapi jenis/dosis tidak menentu, waktu sembarangan',
self::JENIS_SESUAI_DOSIS_TIDAK_MENENTU => 'Memberi pupuk dengan jenis yang sesuai (organik/kimia/keduanya), tapi dosis atau waktu belum tepat',
self::JENIS_DOSIS_SESUAI_WAKTU_CUKUP_TEPAT => 'Memberi pupuk dengan jenis dan dosis yang sesuai, waktu cukup tepat',
self::JENIS_DOSIS_SESUAI_WAKTU_TEPAT => 'Memberi pupuk rutin dengan jenis tepat, dosis tepat, dan waktu tepat sesuai kebutuhan tanaman',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum PenangananGulma: int
{
case DIBIARKAN = 1;
case DICABUT = 2;
case DISEMPROT = 3;
case RUTIN_DICABUT_TANPA_JADWAL = 4;
case RUTIN_TERJADWAL = 5;
public function label(): string
{
return match($this) {
self::DIBIARKAN => 'Dibiarkan di kebun',
self::DICABUT => 'Dikumpulkan dan dibuang',
self::DISEMPROT => 'Dijadikan kompos',
self::RUTIN_DICABUT_TANPA_JADWAL => 'Dikumpulkan dan dibuang',
self::RUTIN_TERJADWAL => 'Dijadikan kompos',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum PenangananSisaBuahRanting: string
{
case DIBIARKAN = 'Dibiarkan di kebun';
case DIKUMPULKAN = 'Dikumpulkan dan dibuang';
case KOMPOS = 'Dijadikan kompos';
public function label(): string
{
return match($this) {
self::DIBIARKAN => 'Dibiarkan di kebun',
self::DIKUMPULKAN => 'Dikumpulkan dan dibuang',
self::KOMPOS => 'Dijadikan kompos',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum PenyerbukanManual: string
{
case SELALU = 'Selalu, setiap musim berbunga';
case KADANG_KADANG = 'Kadang-kadang, tergantung kondisi';
case TIDAK_PERNAH = 'Tidak pernah';
public function label(): string
{
return match($this) {
self::SELALU => 'Selalu, setiap musim berbunga',
self::KADANG_KADANG => 'Kadang-kadang, tergantung kondisi',
self::TIDAK_PERNAH => 'Tidak pernah',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+34
View File
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum TenagaKerja: string
{
case DIKERJAKAN_SENDIRI = 'Dikerjakan Sendiri';
case DIBANTU_ANGGOTA_KELUARGA = 'Dibantu Anggota Keluarga';
case UPAH_TENAGA_KERJA = 'Upah Tenaga Kerja';
case GOTONG_ROYONG = 'Gotong Royong/Swadaya Komunitas';
public function label(): string
{
return match($this) {
self::DIKERJAKAN_SENDIRI => 'Dikerjakan Sendiri',
self::DIBANTU_ANGGOTA_KELUARGA => 'Dibantu Anggota Keluarga',
self::UPAH_TENAGA_KERJA => 'Upah Tenaga Kerja',
self::GOTONG_ROYONG => 'Gotong Royong/Swadaya Komunitas',
};
}
public static function values(): array
{
return collect(self::cases())->map(fn ($case) => $case->value)->toArray();
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,34 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum WaktuKemunculanTerparahHamaPenyakit: string
{
case HUJAN = 'Musim hujan';
case KEMARAU = 'Musim kemarau';
case SEPANJANG_TAHUN = 'Sepanjang tahun';
case TIDAK_TENTU = 'Tidak tentu';
public function label(): string
{
return match($this) {
self::HUJAN => 'Musim hujan',
self::KEMARAU => 'Musim kemarau',
self::SEPANJANG_TAHUN => 'Sepanjang tahun',
self::TIDAK_TENTU => 'Tidak tentu',
};
}
public static function values(): array
{
return collect(self::cases())->map(fn ($case) => $case->value)->toArray();
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -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'));
}
}
+6
View File
@@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasOne;
use Carbon\Carbon;
use App\Models\Wilayah\DesaKelurahan;
@@ -74,4 +75,9 @@ class Petani extends Model
{
return $this->belongsTo(User::class, 'user_id');
}
public function praktik_budidaya(): HasOne
{
return $this->hasOne(PraktikBudidaya::class, 'petani_id');
}
}
@@ -0,0 +1,178 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('praktik_budidaya', function (Blueprint $table) {
$table->id();
$table->string('uid')->unique();
// K2 PRAKTIK BUDIDAYA
// 2.2 Persiapan Lahan & Penanaman
$table->foreignID('petani_id')->constrained('petani')->onDelete('cascade');
$table->string('tenaga_kerja')->nullable();
// 2.3 Frekuensi Pemangkasan
$table->integer('frekuensi_pemangkasan_utama')->nullable();
$table->jsonb('teknik_pemangkasan')->nullable();
$table->string('frekuensi_pemangkasan_penaung')->nullable();
$table->string('penyerbukan_manual')->nullable();
$table->string('deskripsi_penyerbukan_manual')->nullable();
$table->string('tingkat_keberhasilan_penyerbukan')->nullable();
// 2.4 Praktik Pemupukan
$table->integer('pemberian_pupuk')->nullable();
$table->string('jenis_pupuk')->nullable();
$table->string('frekuensi_pemberian_pupuk')->nullable();
$table->decimal('estimasi_dosis_pupuk_organik', 10, 2)->nullable();
$table->decimal('estimasi_dosis_pupuk_anorganik', 10, 2)->nullable();
$table->string('waktu_pemberian_pupuk')->nullable();
$table->string('cara_pemberian_pupuk')->nullable();
// 2.5 Pengendalian Organisme Pengganggu Tumbuhan (OPT)
$table->integer('metode_penanganan_opt')->nullable();
$table->string('jenis_hama')->nullable();
$table->string('jenis_penyakit')->nullable();
$table->string('intensitas_serangan')->nullable();
$table->string('waktu_kemunculan_terparah')->nullable();
$table->string('metode_paling_sering_dilakukan')->nullable();
$table->integer('volume_obat_obatan_permusim')->nullable();
$table->string('satuan_volume_obat_obatan')->nullable();
// 2.6 Sanitasi Kebun
$table->integer('frekuensi_sanitasi_lahan')->nullable();
$table->string('penanganan_sisa_buah_ranting')->nullable();
$table->integer('penanganan_gulma')->nullable();
// 2.7 Pengelolaan Air & irigasi
$table->integer('kondisi_pengelolaan_air')->nullable();
$table->string('sumber_air')->nullable();
$table->string('sistem_irigasi')->nullable();
$table->string('kebutuhan_air_permusim')->nullable();
// 2.8 Praktik konservasi tanah
$table->string('praktik_konservasi_tanah')->nullable();
$table->string('pemahaman_manfaat_konservasi_tanah')->nullable();
$table->integer('nilai_konservasi_tanah')->nullable();
// 2.9 Struktur Biaya Produksi Per Musim
$table->decimal('upah_tenaga_kerja', 10, 2)->nullable();
$table->decimal('biaya_bibit', 10, 2)->nullable();
$table->decimal('biaya_pupuk', 10, 2)->nullable();
$table->decimal('biaya_obat_obatan', 10, 2)->nullable();
$table->decimal('biaya_sewa_alat', 10, 2)->nullable();
$table->decimal('biaya_penyediaan_air', 10, 2)->nullable();
$table->decimal('biaya_lainnya', 10, 2)->nullable();
$table->decimal('total_estimasi_biaya', 10, 2)->nullable();
// K4 Produktivitas
// 4.3 Kehilangan Akibat OPT
$table->string('estimasi_kehilangan_akibat_opt')->nullable();
$table->string('estimasi_kehilangan_akibat_hama_penyakit')->nullable();
$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');
$table->timestamps();
$table->softDeletes();
});
Schema::create('panen', function (Blueprint $table) {
$table->id();
$table->string('uid')->unique();
$table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null');
// K3 PANEN & PENANGANAN AWAL
// 3.1 Cara Menetukan Kematangan
$table->integer('cara_menetukan_kematangan')->nullable();
// 3.2 Frekuensi Panen
$table->integer('frekuensi_panen_pertahun')->nullable();
$table->string('bulan_panen_utama')->nullable();
// 3.4 Hasil Panen Aktual
$table->decimal('hasil_komoditas_utama_permusim_kg', 10, 2)->nullable();
$table->decimal('hasil_komoditas_lainnya_permusim_kg', 10, 2)->nullable();
$table->string('tujuan_panen')->nullable();
// 3.5 Penanganan Awal Setelah Panen
$table->integer('praktik_sortasi')->nullable();
$table->string('bentuk_sortasi')->nullable();
// 3.8 Hasil Panen Reject & Estimasi Biaya Panen
$table->integer('hasil_panen_reject')->nullable();
$table->string('jumlah_panen_reject')->nullable();
$table->string('tindakan_terhadap_panen_reject')->nullable();
$table->decimal('estimasi_biaya_panen', 10, 2)->nullable();
$table->decimal('upah_tenaga_panen', 10, 2)->nullable();
$table->decimal('biaya_pengangkutan', 10, 2)->nullable();
$table->decimal('biaya_wadah', 10, 2)->nullable();
$table->decimal('biaya_sewa_alat', 10, 2)->nullable();
$table->decimal('biaya_lainnya', 10, 2)->nullable();
$table->decimal('total_estimasi_biaya_panen', 10, 2)->nullable();
// K4 Produktivitas
// 4.3 Kehilangan Akibat OPT
$table->string('estimasi_kehilangan_akibat_opt')->nullable();
$table->string('estimasi_kehilangan_akibat_hama_penyakit')->nullable();
$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');
$table->timestamps();
$table->softDeletes();
});
Schema::create('produktivitas', function (Blueprint $table) {
$table->id();
$table->string('uid')->unique();
$table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null');
$table->foreignId('komoditas_id')->nullable()->constrained('master_komoditas')->onDelete('set null');
$table->foreignId('jenis_komoditas_id')->nullable()->constrained('jenis_komoditas')->onDelete('set null');
$table->foreignId('varietas_id')->nullable()->constrained('master_varietas')->onDelete('set null');
$table->decimal('kuantitas_pertahun', 10, 2)->nullable();
$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');
$table->timestamps();
$table->softDeletes();
});
Schema::create('pelatihan', function (Blueprint $table) {
$table->id();
$table->string('uid')->unique();
$table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null');
$table->string('jenis_pelatihan');
$table->string('penyelenggara');
$table->date('tahun_pelaksanaan');
$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');
$table->timestamps();
$table->softDeletes();
});
Schema::create('sertifikasi', function (Blueprint $table) {
$table->id();
$table->string('uid')->unique();
$table->foreignId('petani_id')->nullable()->constrained('petani')->onDelete('set null');
$table->string('jenis_sertifikasi');
$table->string('lembaga_penerbit');
$table->date('tahun_pelaksanaan');
$table->boolean('is_aktif')->default(false);
$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');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('praktik_budidaya');
Schema::dropIfExists('pelatihan');
Schema::dropIfExists('sertifikasi');
Schema::dropIfExists('produktivitas');
}
};
@@ -196,7 +196,7 @@
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('petani.edit', $petani->id) }}">
<a class="nav-link {{ request()->routeIs('petani.pendidikan-pelatihan.*') ? 'active' : '' }}" href="{{ route('petani.pendidikan-pelatihan.index', $petani->id) }}">
<i class="icon-base ti tabler-books me-1_5 icon-sm"></i>Pendidikan & Pelatihan
</a>
</li>
@@ -0,0 +1,214 @@
@extends('layout.main')
@section('content')
<div class="container-xxl flex-grow-1 container-p-y">
@if ($errors->any())
<div class="alert alert-danger">
<ul class="mb-0">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="row">
<!-- PROFIL PETANI -->
<div class="col-md-12">
@include('produktivitas.petani.header', ['petani' => $petani])
<div class="card mb-6">
<div class="card-body pt-12">
<h5 class="pb-4 border-bottom mb-4">Riwayat Pelatihan</h5>
<div class="table-responsive">
<table class="table table-borderless align-middle mb-0">
<thead>
<tr>
<th>Jenis Pelatihan</th>
<th>Penyelenggara</th>
<th>Tahun</th>
</tr>
</thead>
<tbody>
@php
$jenisPelatihan = [
'pemangkasan_perawatan_tanaman' => 'Pemangkasan/perawatan tanaman',
'pemupukan_nutrisi_tanah' => 'Pemupukan/nutrisi tanah',
'pengendalian_hama_penyakit' => 'Pengendalian hama & penyakit',
'praktik_berkebun_baik_gap' => 'Praktik Berkebun yang Baik (GAP)',
'pengolahan_pascapanen' => 'Pengolahan/pascapanen',
'penyerbukan_manual_vanili' => 'Penyerbukan manual (vanili)',
'lainnya' => 'Lainnya',
];
@endphp
@foreach ($jenisPelatihan as $key => $label)
<tr>
<td class="fw-medium">
{{ $label }}
<input
type="hidden"
name="riwayat_pelatihan[{{ $key }}][jenis_pelatihan]"
value="{{ $label }}">
</td>
<td>
<input
type="text"
class="form-control"
name="riwayat_pelatihan[{{ $key }}][penyelenggara]"
value="{{ old('riwayat_pelatihan.' . $key . '.penyelenggara') }}">
</td>
<td>
<input
type="number"
class="form-control"
name="riwayat_pelatihan[{{ $key }}][tahun]"
value="{{ old('riwayat_pelatihan.' . $key . '.tahun') }}">
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="mt-4 text-end">
<button type="submit" class="btn btn-success">
<i class="icon-base ti tabler-check me-1_5 icon-sm"></i>
Simpan
</button>
</div>
</div>
</div>
<div class="card mb-6">
<div class="card-body pt-12">
<h5 class="pb-4 border-bottom mb-4">
Sertifikasi Keahlian
</h5>
<form class="form-repeater">
<div data-repeater-list="produktivitas_komoditas">
<div data-repeater-item>
<div class="row align-items-end">
<div class="col-md-3 mb-3">
<label class="form-label">Jenis Keahlian Yang Disertifikasi</label>
<input type="text" class="form-control @error('jenis_keahlian') is-invalid @enderror" id="jenis-keahlian" name="jenis_keahlian" value="{{ old('jenis_keahlian', $petani->jenis_keahlian) }}">
</div>
<div class="col-md-3 mb-3">
<label class="form-label">Lembaga Penerbit</label>
<input type="text" class="form-control @error('lembaga_penerbit') is-invalid @enderror" id="lembaga-penerbit" name="lembaga_penerbit" value="{{ old('lembaga_penerbit', $petani->lembaga_penerbit) }}">
</div>
<div class="col-md-2 mb-3">
<label class="form-label d-block">Tahun</label>
<input type="text" class="form-control @error('tahun') is-invalid @enderror" id="tahun" name="tahun" value="{{ old('tahun', $petani->tahun) }}">
</div>
<div class="col-md-2 mb-3">
<label class="form-label d-block">Status</label>
<label class="switch switch-lg">
<input
type="checkbox"
class="switch-input"
name="status_berlaku_sertifikat"
value="1"
{{ old('status_berlaku_sertifikat', false) ? 'checked' : '' }}>
<span class="switch-toggle-slider">
<span class="switch-on">
<i class="icon-base ti tabler-check"></i>
</span>
<span class="switch-off">
<i class="icon-base ti tabler-x"></i>
</span>
</span>
<span class="switch-label">
<span id="switch-text">Tidak Berlaku</span>
</span>
</label>
</div>
<div class="col-md-2 mb-3">
<button type="button" class="btn btn-outline-success" data-repeater-save><i class="icon-base ti tabler-check me-1_5 icon-sm"></i></button>
<button type="button" class="btn btn-outline-danger" data-repeater-delete><i class="icon-base ti tabler-trash me-1_5 icon-sm"></i></button>
</div>
</div>
<hr>
</div>
</div>
<div class="mt-4 text-end">
<button type="button" class="btn btn-success" data-repeater-create>
<i class="icon-base ti tabler-plus me-1_5 icon-sm"></i>
Tambah Komoditas
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
'use strict';
$(document).ready(function () {
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung').select2();
const $switch = $('input[name="status_berlaku_sertifikat"]');
const $text = $('#switch-text');
function updateSwitchText() {
if ($switch.is(':checked')) {
$text
.text('Masih Berlaku')
.removeClass('text-muted text-danger')
} else {
$text
.text('Tidak Berlaku')
.removeClass('text-success')
}
}
updateSwitchText();
$switch.on('change', updateSwitchText);
$('#editPetaniForm').validate({
rules: {
nama: { required: true },
tanggal_lahir: { required: true, date: true },
jenis_kelamin: { required: true },
pendidikan_terakhir: { required: true },
alamat: { required: true },
desa_kelurahan_id: { required: true },
status_perkawinan: { required: true },
},
messages: {
nama: { required: "Nama petani wajib diisi" },
tanggal_lahir: { required: "Tanggal lahir wajib diisi", date: "Format tanggal salah" },
jenis_kelamin: { required: "Jenis kelamin wajib diisi" },
pendidikan_terakhir: { required: "Pendidikan terakhir wajib diisi" },
alamat: { required: "Alamat wajib diisi" },
desa_kelurahan_id: { required: "Desa/Kelurahan wajib diisi" },
status_perkawinan: { required: "Status perkawinan wajib diisi" },
},
errorElement: 'div',
errorPlacement: function (error, element) {
error.addClass('invalid-feedback');
element.closest('.mb-6, .form-control-validation').append(error);
},
highlight: function (element) {
$(element).addClass('is-invalid');
},
unhighlight: function (element) {
$(element).removeClass('is-invalid');
}
});
});
</script>
@endpush
@@ -1,6 +1,12 @@
@extends('layout.main')
@section('content')
@use('App\Enums\PraktikBudidaya\TenagaKerja')
@use('App\Enums\PraktikBudidaya\FrekuensiPemangkasanUtama')
@use('App\Enums\PraktikBudidaya\FrekuensiPemangkasanPendamping')
@use('App\Enums\PraktikBudidaya\PenyerbukanManual')
@use('App\Enums\PraktikBudidaya\PemberianPupuk')
@use('App\Enums\PraktikBudidaya\JenisPupuk')
<div class="container-xxl flex-grow-1 container-p-y">
@if ($errors->any())
<div class="alert alert-danger">
@@ -11,213 +17,486 @@
</ul>
</div>
@endif
<div class="row">
<!-- PROFIL PETANI -->
<div class="col-md-12">
@include('produktivitas.petani.header', ['petani' => $petani])
<div class="card mb-6">
<div class="card-body pt-12">
<!-- INFORMASI PETANI -->
<h5 class="pb-4 border-bottom mb-4">Persiapan Lahan & Tanaman</h5>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="tenaga-kerja">Tenaga Kerja</label>
<select class="form-control @error('tenaga_kerja') is-invalid @enderror" id="tenaga-kerja" name="tenaga_kerja">
<option value="">Pilih Tenaga Kerja</option>
</select>
@error('tenaga_kerja')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<form id="praktikBudidayaForm" action="{{ route('petani.praktik-budidaya.store', $petani->id) }}" method="POST">
@csrf
<div class="card mb-6">
<div class="card-body pt-12">
<h5 class="pb-4 border-bottom mb-4">Persiapan Lahan & Tanaman</h5>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="tenaga-kerja">Tenaga Kerja</label>
<select class="form-control @error('tenaga_kerja') is-invalid @enderror" id="tenaga-kerja" name="tenaga_kerja">
<option value="">Pilih Tenaga Kerja</option>
@foreach (TenagaKerja::options() as $option)
<option value="{{ $option['value'] }}" {{ old('tenaga_kerja', $praktikBudidya->tenaga_kerja) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('tenaga_kerja')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
</div>
<h5 class="pb-4 border-bottom mb-4">Praktik Pemangkasan & Penyerbukan</h5>
<div class="row border-bottom mb-4 pb-4">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="frekuensi-pemangkasan-komoditas-utama">Frekuensi Pemangkasan Komoditas Utama<span class="text-danger">*</span></label>
<select class="form-control @error('frekuensi_pemangkasan_komoditas_utama') is-invalid @enderror" id="frekuensi-pemangkasan-komoditas-utama" name="frekuensi_pemangkasan_komoditas_utama">
<option value="">Pilih Frekuensi Pemangkasan</option>
<option value="1">Tidak pernah memangkas sama sekali</option>
<option value="2">Memangkas, tapi tidak rutin dan tidak tahu tekniknya</option>
<option value="3">Memangkas 1 kali/tahun, tahu jenis tekniknya</option>
<option value="4">Memangkas 2 kali/tahun, tahu jenis tekniknya</option>
<option value="5">Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin</option>
</select>
@error('frekuensi_pemangkasan_komoditas_utama')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<h5 class="pb-4 border-bottom mb-4">Praktik Pemangkasan & Penyerbukan</h5>
<div class="row border-bottom mb-4 pb-4">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="frekuensi-pemangkasan-komoditas-utama">Frekuensi Pemangkasan Komoditas Utama<span class="text-danger">*</span></label>
<select class="form-control @error('frekuensi_pemangkasan_komoditas_utama') is-invalid @enderror" id="frekuensi-pemangkasan-komoditas-utama" name="frekuensi_pemangkasan_komoditas_utama">
<option value="">Pilih Frekuensi Pemangkasan</option>
@foreach (FrekuensiPemangkasanUtama::options() as $option)
<option value="{{ $option['value'] }}" {{ old('frekuensi_pemangkasan_komoditas_utama') == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('frekuensi_pemangkasan_komoditas_utama')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Teknik pemangkasan yang dilakukan<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="Pemangkasan Bentuk"
id="teknik-pemangkasan-bentuk"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('bentuk', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-pemangkasan-bentuk">Pemangkasan bentuk</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="Pemangkasan Produksi"
id="teknik-pemangkasan-produksi"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('produksi', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-pemangkasan-produksi">Pemangkasan produksi</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="Pemangkasan Peremajaan"
id="teknik-pemangkasan-peremajaan"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('peremajaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-pemangkasan-peremajaan">Pemangkasan peremajaan</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan"
id="teknik-pemangkasan-kebiasaan"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('kebiasaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-pemangkasan-kebiasaan">Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input
class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="Lainnya"
id="teknik-pemangkasan-lainnya">
<label class="form-check-label text-nowrap" for="teknik-pemangkasan-lainnya">Lainnya:</label>
<input type="text" name="teknik_pemangkasan_lainnya" id="input-teknik-pemangkasan-lainnya" class="form-control form-control-sm w-50" value="{{ old('teknik_pemangkasan_lainnya', $teknikPemangkasanLainnya) }}" placeholder="Sebutkan jenis pemangkasan lain...">
</div>
@error('teknik_pemangkasan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="frekuensi-pemangkasan-pohon-penaung">Frekuensi Pemangkasan Pohon Penaung<span class="text-danger">*</span></label>
<select class="form-control @error('frekuensi_pemangkasan_pohon_penaung') is-invalid @enderror" id="frekuensi-pemangkasan-pohon-penaung" name="frekuensi_pemangkasan_pohon_penaung">
<option value="">Pilih Frekuensi Pemangkasan</option>
@foreach (FrekuensiPemangkasanPendamping::options() as $option)
<option value="{{ $option['value'] }}" {{ old('frekuensi_pemangkasan_pohon_penaung') == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('frekuensi_pemangkasan_pohon_penaung')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Teknik pemangkasan yang dilakukan<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="bentuk"
id="teknik-bentuk"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('bentuk', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-bentuk">Pemangkasan bentuk</label>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Penyerbukan Manual<span class="text-danger">*</span></label>
<select class="form-control @error('penyerbukan_manual') is-invalid @enderror" id="penyerbukan-manual" name="penyerbukan_manual">
<option value="">Pilih Penyerbukan Manual</option>
@foreach (PenyerbukanManual::options() as $option)
<option value="{{ $option['value'] }}" {{ old('penyerbukan_manual') == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('penyerbukan_manual')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="produksi"
id="teknik-produksi"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('produksi', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-produksi">Pemangkasan produksi</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="peremajaan"
id="teknik-peremajaan"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('peremajaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-peremajaan">Pemangkasan peremajaan</label>
</div>
<div class="form-check">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="kebiasaan"
id="teknik-kebiasaan"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('kebiasaan', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<label class="form-check-label" for="teknik-kebiasaan">Tidak tahu jenis pemangkasannya — dilakukan berdasarkan kebiasaan</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('teknik_pemangkasan') is-invalid @enderror"
type="checkbox"
name="teknik_pemangkasan[]"
value="lainnya"
id="teknik-lainnya"
{{ (is_array(old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true))) && in_array('lainnya', old('teknik_pemangkasan', json_decode($petani->teknik_pemangkasan, true)))) ? 'checked' : '' }}>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Alasan Tidak Melakukan Penyerbukan Manual<span class="text-danger">*</span></label>
<label class="form-check-label text-nowrap" for="teknik-lainnya">Lainnya:</label>
<div class="form-check mt-2">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Tidak tahu caranya"
id="penyerbukan-tidak-tahu"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Tidak tahu caranya' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tidak-tahu">Tidak tahu caranya</label>
</div>
<div class="form-check">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Tidak ada tenaga/waktu"
id="penyerbukan-tenaga-waktu"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Tidak ada tenaga/waktu' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tenaga-waktu">Tidak ada tenaga/waktu</label>
</div>
<div class="form-check">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Mengandalkan penyerbuk alami"
id="penyerbukan-mengandalkan-alami"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Mengandalkan penyerbuk alami' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-mengandalkan-alami">Mengandalkan penyerbuk alami</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="lainnya"
id="alasan-lainnya"
{{ old('alasan_tidak_penyerbukan', $alasanTidakPenyerbukanLainnya) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="alasan-lainnya">Lainnya:</label>
<input type="text"
name="alasan_tidak_penyerbukan_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('alasan_tidak_penyerbukan_lainnya', $alasanTidakPenyerbukanLainnya ?? '') }}"
placeholder="Sebutkan alasan lain...">
</div>
@error('alasan_tidak_penyerbukan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Tingkat Keberhasil Penyerbukan<span class="text-danger">*</span></label>
<input type="text" name="teknik_pemangkasan_lainnya" class="form-control form-control-sm w-50" value="{{ old('teknik_pemangkasan_lainnya', $petani->teknik_pemangkasan_lainnya ?? '') }}" placeholder="Sebutkan jenis pemangkasan lain...">
</div>
<div class="form-check mt-2">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="tingkat_keberhasilan_penyerbukan"
value="Tinggi, sebagian besar bunga berhasil menjadi buah"
id="tingkat-keberhasilan-penyerbukan"
{{ old('tingkat_keberhasilan_penyerbukan', $petani->tingkat_keberhasilan_penyerbukan) == 'Tinggi, sebagian besar bunga berhasil menjadi buah' ? 'checked' : '' }}>
<label class="form-check-label" for="tingkat-keberhasilan-penyerbukan">Tinggi, sebagian besar bunga berhasil menjadi buah</label>
</div>
@error('teknik_pemangkasan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
<div class="form-check mt-2">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="tingkat_keberhasilan_penyerbukan"
value="Sedang, sekitar separuh bunga berhasil menjadi buah"
id="tingkat-keberhasilan-penyerbukan"
{{ old('tingkat_keberhasilan_penyerbukan', $petani->tingkat_keberhasilan_penyerbukan) == 'Sedang, sekitar separuh bunga berhasil menjadi buah' ? 'checked' : '' }}>
<label class="form-check-label" for="tingkat-keberhasilan-penyerbukan">Sedang, sekitar separuh bunga berhasil menjadi buah</label>
</div>
<div class="form-check mt-2">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="tingkat_keberhasilan_penyerbukan"
value="Rendah, hanya sedikit bunga yang berhasil menjadi buah"
id="tingkat-keberhasilan-penyerbukan"
{{ old('tingkat_keberhasilan_penyerbukan', $petani->tingkat_keberhasilan_penyerbukan) == 'Rendah, hanya sedikit bunga yang berhasil menjadi buah' ? 'checked' : '' }}>
<label class="form-check-label" for="tingkat-keberhasilan-penyerbukan">Rendah, hanya sedikit bunga yang berhasil menjadi buah</label>
</div>
@error('tingkat_keberhasilan_penyerbukan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="frekuensi-pemangkasan-pohon-penaung">Frekuensi Pemangkasan Pohon Penaung<span class="text-danger">*</span></label>
<select class="form-control @error('frekuensi_pemangkasan_pohon_penaung') is-invalid @enderror" id="frekuensi-pemangkasan-pohon-penaung" name="frekuensi_pemangkasan_pohon_penaung">
<option value="">Pilih Frekuensi Pemangkasan</option>
<option value="1">Tidak pernah memangkas sama sekali</option>
<option value="2">Memangkas, tapi tidak rutin dan tidak tahu tekniknya</option>
<option value="3">Memangkas 1 kali/tahun, tahu jenis tekniknya</option>
<option value="4">Memangkas 2 kali/tahun, tahu jenis tekniknya</option>
<option value="5">Memangkas lebih dari 2 kali/tahun dengan teknik yang tepat dan pohon penaung juga dipangkas rutin</option>
</select>
@error('frekuensi_pemangkasan_pohon_penaung')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Penyerbukan Manual<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('penyerbukan_manual') is-invalid @enderror"
type="radio"
name="penyerbukan_manual"
value="Selalu, setiap musim berbunga"
id="penyerbukan-selalu"
{{ old('penyerbukan_manual', $petani->penyerbukan_manual) == 'Selalu, setiap musim berbunga' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-selalu">Selalu, setiap musim berbunga</label>
<h5 class="pb-4 border-bottom mb-4">Praktik Pemupukan</h5>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="pemberian-pupuk">Pemberian Pupuk<span class="text-danger">*</span></label>
<select class="form-control @error('pemberian_pupuk') is-invalid @enderror" id="pemberian-pupuk" name="pemberian_pupuk">
<option value="">Pilih Pemberian Pupuk</option>
@foreach (PemberianPupuk::options() as $option)
<option value="{{ $option['value'] }}" {{ old('pemberian_pupuk', $petani->pemberian_pupuk?->value ?? $petani->pemberian_pupuk) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('pemberian_pupuk')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="form-check">
<input class="form-check-input @error('penyerbukan_manual') is-invalid @enderror"
type="radio"
name="penyerbukan_manual"
value="Kadang-kadang, tergantung kondisi"
id="penyerbukan-kadang"
{{ old('penyerbukan_manual', $petani->penyerbukan_manual) == 'Kadang-kadang, tergantung kondisi' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-kadang">Kadang-kadang, tergantung kondisi</label>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="jenis-pupuk">Jenis Pupuk<span class="text-danger">*</span></label>
<select class="form-control @error('jenis_pupuk') is-invalid @enderror" id="jenis-pupuk" name="jenis_pupuk">
<option value="">Pilih Jenis Pupuk</option>
@foreach (JenisPupuk::options() as $option)
<option value="{{ $option['value'] }}" {{ old('jenis_pupuk', $petani->jenis_pupuk?->value ?? $petani->jenis_pupuk) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('jenis_pupuk')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="form-check">
<input class="form-check-input @error('penyerbukan_manual') is-invalid @enderror"
type="radio"
name="penyerbukan_manual"
value="Tidak pernah"
id="penyerbukan-tidak-pernah"
{{ old('penyerbukan_manual', $petani->penyerbukan_manual) == 'Tidak pernah' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tidak-pernah">Tidak pernah</label>
</div>
@error('penyerbukan_manual')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Alasan Tidak Melakukan Penyerbukan Manual<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Tidak tahu caranya"
id="penyerbukan-tidak-tahu"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Tidak tahu caranya' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tidak-tahu">Tidak tahu caranya</label>
</div>
<div class="form-check">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Tidak ada tenaga/waktu"
id="penyerbukan-tenaga-waktu"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Tidak ada tenaga/waktu' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-tenaga-waktu">Tidak ada tenaga/waktu</label>
</div>
<div class="form-check">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="Mengandalkan penyerbuk alami"
id="penyerbukan-mengandalkan-alami"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'Mengandalkan penyerbuk alami' ? 'checked' : '' }}>
<label class="form-check-label" for="penyerbukan-mengandalkan-alami">Mengandalkan penyerbuk alami</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('alasan_tidak_penyerbukan') is-invalid @enderror"
type="radio"
name="alasan_tidak_penyerbukan"
value="lainnya"
id="alasan-lainnya"
{{ old('alasan_tidak_penyerbukan', $petani->alasan_tidak_penyerbukan) == 'lainnya' ? 'checked' : '' }}>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Frekuensi Pemupukan<span class="text-danger">*</span></label>
<label class="form-check-label text-nowrap" for="alasan-lainnya">Lainnya:</label>
<input type="text"
name="alasan_tidak_penyerbukan_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('alasan_tidak_penyerbukan_lainnya', $petani->alasan_tidak_penyerbukan_lainnya ?? '') }}"
placeholder="Sebutkan alasan lain...">
</div>
<div class="form-check mt-2">
<input class="form-check-input @error('frekuensi_pemupukan') is-invalid @enderror"
type="radio"
name="frekuensi_pemupukan"
value="1 kali/tahun"
id="frekuensi-pemupukan-1kali"
{{ old('frekuensi_pemupukan', $petani->frekuensi_pemupukan) == '1 kali/tahun' ? 'checked' : '' }}>
<label class="form-check-label" for="frekuensi-pemupukan-1kali">1 kali/tahun</label>
</div>
@error('alasan_tidak_penyerbukan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
<div class="form-check">
<input class="form-check-input @error('frekuensi_pemupukan') is-invalid @enderror"
type="radio"
name="frekuensi_pemupukan"
value="2 kali/tahun"
id="frekuensi-pemupukan-2kali"
{{ old('frekuensi_pemupukan', $petani->frekuensi_pemupukan) == '2 kali/tahun' ? 'checked' : '' }}>
<label class="form-check-label" for="frekuensi-pemupukan-2kali">2 kali/tahun</label>
</div>
<div class="form-check">
<input class="form-check-input @error('frekuensi_pemupukan') is-invalid @enderror"
type="radio"
name="frekuensi_pemupukan"
value="Lebih dari 2 kali/tahun"
id="frekuensi-pemupukan-lebih-2kali"
{{ old('frekuensi_pemupukan', $petani->frekuensi_pemupukan) == 'Lebih dari 2 kali/tahun' ? 'checked' : '' }}>
<label class="form-check-label" for="frekuensi-pemupukan-lebih-2kali">Lebih dari 2 kali/tahun</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('frekuensi_pemupukan') is-invalid @enderror"
type="radio"
name="frekuensi_pemupukan"
value="Lainnya"
id="frekuensi-pemupukan-lainnya"
{{ old('frekuensi_pemupukan', $frekuensiPemupukanLainnya) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="frekuensi-pemupukan-lainnya">Berapa kali:</label>
<input type="text"
name="frekuensi_pemupukan_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('frekuensi_pemupukan_lainnya', $frekuensiPemupukanLainnya ?? '') }}"
placeholder="Sebutkan alasan lain..."
>
</div>
@error('frekuensi_pemupukan')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="estimasi-dosis-pupuk-organik">
Estimasi Dosis Pupuk Organik<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('estimasi_dosis_pupuk_organik') is-invalid @enderror"
id="estimasi-dosis-pupuk-organik"
name="estimasi_dosis_pupuk_organik"
value="{{ old('estimasi_dosis_pupuk_organik', $petani->estimasi_dosis_pupuk_organik) }}"
step="0.01"
min="0">
<span class="input-group-text">Kg</span>
</div>
@error('estimasi_dosis_pupuk_organik')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="estimasi-dosis-pupuk-anorganik">
Estimasi Dosis Pupuk Anorganik<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('estimasi_dosis_pupuk_anorganik') is-invalid @enderror"
id="estimasi-dosis-pupuk-anorganik"
name="estimasi_dosis_pupuk_anorganik"
value="{{ old('estimasi_dosis_pupuk_anorganik', $petani->estimasi_dosis_pupuk_anorganik) }}"
step="0.01"
min="0">
<span class="input-group-text">Kg</span>
</div>
@error('estimasi_dosis_pupuk_anorganik')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Waktu Pemberian Pupuk<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('waktu_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="waktu_pemberian_pupuk"
value="Awal musim hujan"
id="waktu-pemberian-awal-musim-hujan"
{{ old('waktu_pemberian_pupuk', $petani->waktu_pemberian_pupuk) == 'Awal musim hujan' ? 'checked' : '' }}>
<label class="form-check-label" for="waktu-pemberian-awal-musim-hujan">Awal musim hujan</label>
</div>
<div class="form-check">
<input class="form-check-input @error('waktu_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="waktu_pemberian_pupuk"
value="Akhir musim hujan"
id="waktu-pemberian-akhir-musim-hujan"
{{ old('waktu_pemberian_pupuk', $petani->waktu_pemberian_pupuk) == 'Akhir musim hujan' ? 'checked' : '' }}>
<label class="form-check-label" for="waktu-pemberian-akhir-musim-hujan">Akhir musim hujan</label>
</div>
<div class="form-check">
<input class="form-check-input @error('waktu_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="waktu_pemberian_pupuk"
value="Sebelum berbunga"
id="waktu-sebelum-berbunga"
{{ old('waktu_pemberian_pupuk', $petani->waktu_pemberian_pupuk) == 'Sebelum berbunga' ? 'checked' : '' }}>
<label class="form-check-label" for="waktu-sebelum-berbunga">Sebelum berbunga</label>
</div>
<div class="form-check">
<input class="form-check-input @error('waktu_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="waktu_pemberian_pupuk"
value="Sebelum Setelah Panen"
id="waktu-sebelum-setelah-panen"
{{ old('waktu_pemberian_pupuk', $petani->waktu_pemberian_pupuk) == 'Sebelum Setelah Panen' ? 'checked' : '' }}>
<label class="form-check-label" for="waktu-sebelum-setelah-panen">Sebelum Setelah Panen</label>
</div>
<div class="form-check">
<input class="form-check-input @error('waktu_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="waktu_pemberian_pupuk"
value="Tidak Menentu"
id="waktu-tidak-menentu"
{{ old('waktu_pemberian_pupuk', $petani->waktu_pemberian_pupuk) == 'Tidak Menentu' ? 'checked' : '' }}>
<label class="form-check-label" for="waktu-tidak-menentu">Tidak Menentu</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('waktu_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="waktu_pemberian_pupuk"
value="lainnya"
id="alasan-lainnya"
{{ old('waktu_pemberian_pupuk', $waktuPemberianPupukLainnya) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="alasan-lainnya">Lainnya:</label>
<input type="text"
name="waktu_pemberian_pupuk_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('waktu_pemberian_pupuk_lainnya', $waktuPemberianPupukLainnya) }}"
placeholder="Sebutkan alasan lain...">
</div>
@error('waktu_pemberian_pupuk')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Cara Pemberian Pupuk<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('cara_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="cara_pemberian_pupuk"
value="Ditabur di sekitar pohon"
id="cara-ditabur"
{{ old('cara_pemberian_pupuk', $petani->cara_pemberian_pupuk) == 'Ditabur di sekitar pohon' ? 'checked' : '' }}>
<label class="form-check-label" for="cara-ditabur">Ditabur di sekitar pohon</label>
</div>
<div class="form-check">
<input class="form-check-input @error('cara_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="cara_pemberian_pupuk"
value="Dibenamkan dalam lubang/parit"
id="cara-dibenamkan"
{{ old('cara_pemberian_pupuk', $petani->cara_pemberian_pupuk) == 'Dibenamkan dalam lubang/parit' ? 'checked' : '' }}>
<label class="form-check-label" for="cara-dibenamkan">Dibenamkan dalam lubang/parit</label>
</div>
<div class="form-check">
<input class="form-check-input @error('cara_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="cara_pemberian_pupuk"
value="Dicairkan/dikocor"
id="cara-dicairkan"
{{ old('cara_pemberian_pupuk', $petani->cara_pemberian_pupuk) == 'Dicairkan/dikocor' ? 'checked' : '' }}>
<label class="form-check-label" for="cara-dicairkan">Dicairkan/dikocor</label>
</div>
<div class="form-check">
<input class="form-check-input @error('cara_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="cara_pemberian_pupuk"
value="Disemprotkan ke daun"
id="cara-disemprotkan"
{{ old('cara_pemberian_pupuk', $petani->cara_pemberian_pupuk) == 'Disemprotkan ke daun' ? 'checked' : '' }}>
<label class="form-check-label" for="cara-disemprotkan">Disemprotkan ke daun</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('cara_pemberian_pupuk') is-invalid @enderror"
type="radio"
name="cara_pemberian_pupuk"
value="lainnya"
id="cara-lainnya"
{{ old('cara_pemberian_pupuk', $caraPemberianPupukLainnya) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="cara-lainnya">Lainnya:</label>
<input type="text"
name="cara_pemberian_pupuk_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('cara_pemberian_pupuk_lainnya', $caraPemberianPupukLainnya ?? '') }}"
placeholder="Sebutkan cara lain...">
</div>
@error('cara_pemberian_pupuk')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
</div>
<div class="mt-4 text-end">
<button type="submit" class="btn btn-success">
Simpan
</button>
</div>
</div>
<div class="mt-4 text-end">
<button id="btn-profil" type="button" class="btn btn-success data-submit wave-effect wave-light">Simpan Praktik Budidaya</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
@@ -228,66 +507,26 @@
'use strict';
$(document).ready(function () {
$('#edit-petani-jenis-kelamin, #edit-petani-pendidikan-terakhir, #edit-petani-pekerjaan-utama, #edit-petani-komoditas, #edit-petani-pekerjaan-sampingan, #edit-petani-komoditas-sampingan, #edit-petani-status-pernikahan, #edit-petani-status-keluarga, #edit-petani-petani-pengumpul').select2();
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk').select2();
$('#edit-petani-provinsi').select2().change(function(e) {
e.preventDefault();
var provinsiId = $(this).val();
$('#edit-petani-kabupaten').prop('disabled', !provinsiId).val('').trigger('change');
$('#edit-petani-kecamatan').prop('disabled', true).val('').trigger('change');
$('#edit-petani-desa').prop('disabled', true).val('').trigger('change');
const $switch = $('input[name="disimpan_untuk_diri_sendiri"]');
const $text = $('#switch-text');
if (provinsiId) {
$.ajax({
url: '{{ route("kabupatenkota.byprovinsi", ":id") }}'.replace(':id', provinsiId),
method: 'GET',
success: function(data) {
$('#edit-petani-kabupaten').empty().append('<option value="">Pilih Kabupaten/Kota</option>');
data.forEach(function(kabupaten) {
$('#edit-petani-kabupaten').append('<option value="' + kabupaten.id + '">' + kabupaten.nama + '</option>');
});
}
});
function updateSwitchText() {
if ($switch.is(':checked')) {
$text
.text('Ya, Sebagian Disimpan')
.removeClass('text-muted text-danger')
// .addClass('text-success');
} else {
$text
.text('Tidak, Semua Dijual')
.removeClass('text-success')
// .addClass('text-muted');
}
});
$('#edit-petani-kabupaten').select2().change(function(e) {
e.preventDefault();
var kabupatenId = $(this).val();
$('#edit-petani-kecamatan').prop('disabled', !kabupatenId).val('').trigger('change');
$('#edit-petani-desa').prop('disabled', true).val('').trigger('change');
if (kabupatenId) {
$.ajax({
url: '{{ route("kecamatan.bykabupatenkota", ":id") }}'.replace(':id', kabupatenId),
method: 'GET',
success: function(data) {
$('#edit-petani-kecamatan').empty().append('<option value="">Pilih Kecamatan</option>');
data.forEach(function(kecamatan) {
$('#edit-petani-kecamatan').append('<option value="' + kecamatan.id + '">' + kecamatan.nama + '</option>');
});
}
});
}
});
$('#edit-petani-kecamatan').select2().change(function(e) {
e.preventDefault();
var kecamatanId = $(this).val();
$('#edit-petani-desa').prop('disabled', !kecamatanId).val('').trigger('change');
if (kecamatanId) {
$.ajax({
url: '{{ route("desakelurahan.bykecamatan", ":id") }}'.replace(':id', kecamatanId),
method: 'GET',
success: function(data) {
$('#edit-petani-desa').empty().append('<option value="">Pilih Desa/Kelurahan</option>');
data.forEach(function(desa) {
$('#edit-petani-desa').append('<option value="' + desa.id + '">' + desa.nama + '</option>');
});
}
});
}
});
$('#edit-petani-desa').select2();
}
updateSwitchText();
$switch.on('change', updateSwitchText);
$('#editPetaniForm').validate({
File diff suppressed because it is too large Load Diff
+1
View File
@@ -194,6 +194,7 @@ Route::middleware('auth')
Route::resource('petani.lahan-tanaman', App\Http\Controllers\Web\Produktivitas\PetaniLahanController::class)->whereNumber('petani');
Route::resource('petani.lahan-tanaman.tanaman', App\Http\Controllers\Web\Produktivitas\PetaniLahanTanamanController::class)->only(['show', 'update', 'destroy'])->whereNumber('petani');
Route::resource('petani.praktik-budidaya', App\Http\Controllers\Web\Produktivitas\PraktikBudidayaController::class)->whereNumber('petani');
Route::resource('petani.pendidikan-pelatihan', App\Http\Controllers\Web\Produktivitas\PendidikanPelatihanController::class);
Route::resource('petani.sosial-ekonomi', App\Http\Controllers\Web\Produktivitas\SosialEkonomiController::class)->whereNumber('petani');
Route::resource('petani.akses-pasar', App\Http\Controllers\Web\Produktivitas\AksesPasarController::class)->whereNumber('petani');
});