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
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum Bulan: string
{
case JANUARI = 'Januari';
case FEBRUARI = 'Februari';
case MARET = 'Maret';
case APRIL = 'April';
case MEI = 'Mei';
case JUNI = 'Juni';
case JULI = 'Juli';
case AGUSTUS = 'Agustus';
case SEPTEMBER = 'September';
case OKTOBER = 'Oktober';
case NOVEMBER = 'November';
case DESEMBER = 'Desember';
public function label(): string
{
return $this->value;
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum CaraSortasi: string
{
case DIPILAH = 'Dipilah manual dengan tangan (memilih satu per satu buah/biji yang bagus dan membuang yang rusak)';
case ALAT_BANTU = 'Menggunakan alat bantu sederhana (tampah, ayakan, atau bak untuk memisahkan kotoran ringan)';
case PERENDAMAN = 'Metode perendaman/tenggelam (memisahkan buah mengapung dan tenggelam)';
case GRADING_KRITERIA = 'Grading berdasarkan kriteria (ukuran, warna, atau tingkat kematangan)';
case PEMBERSIHAN = 'Hanya pembersihan kotoran kasar (membuang dahan atau sampah besar)';
public function label(): string
{
return match($this) {
self::DIPILAH => 'Dipilah manual dengan tangan (memilih satu per satu buah/biji yang bagus dan membuang yang rusak)',
self::ALAT_BANTU => 'Menggunakan alat bantu sederhana (tampah, ayakan, atau bak untuk memisahkan kotoran ringan)',
self::PERENDAMAN => 'Metode perendaman/tenggelam (memisahkan buah mengapung dan tenggelam)',
self::GRADING_KRITERIA => 'Grading berdasarkan kriteria (ukuran, warna, atau tingkat kematangan)',
self::PEMBERSIHAN => 'Hanya pembersihan kotoran kasar (membuang dahan atau sampah besar)',
};
}
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 DasarPenentuanPanen: int
{
case KEBUTUHAN_UANG = 1;
case UMUR_TANPA_KONDISI_BUAH = 2;
case BUAH_JATUH = 3;
case TINGKAT_KEPADATAN = 4;
case WARNA_KULIT_BUAH = 5;
public function label(): string
{
return match($this) {
self::KEBUTUHAN_UANG => 'Kebutuhan uang mendesak, tanpa mempertimbangkan kematangan',
self::UMUR_TANPA_KONDISI_BUAH => 'Umur/jadwal tetap, tanpa melihat kondisi buah langsung',
self::BUAH_JATUH => 'Buah jatuh/matang pohon (sudah terlalu matang saat dipetik)',
self::TINGKAT_KEPADATAN => 'Bersuara saat diketuk atau tingkat kepadatan buah',
self::WARNA_KULIT_BUAH => 'Warna kulit buah (indikator paling akurat dan konsisten untuk menentukan kematangan optimal)',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -0,0 +1,33 @@
<?php
namespace App\Enums\PraktikBudidaya;
enum EstimasiKehilanganHasil: string
{
case TIDAK_ADA = 'Tidak ada kehilangan';
case SEDIKIT = 'Sedikit, sekitar 25 % dari total panen';
case LUMAYAN = 'Lumayan, sekitar 50% dari total panen';
case BANYAK = 'Banyak, sekitar 75% dari total panen';
case HAMPIR_SEMUA = 'Hampir semua rusak, lebih dari 75%';
case TIDAK_TAHU = 'Hanya pembersihan kotoran kasar (membuang dahan atau sampah besar)';
public function label(): string
{
return match($this) {
self::TIDAK_ADA => 'Tidak ada kehilangan',
self::SEDIKIT => 'Sedikit, sekitar 25 % dari total panen',
self::LUMAYAN => 'Lumayan, sekitar 50% dari total panen',
self::BANYAK => 'Banyak, sekitar 75% dari total panen',
self::HAMPIR_SEMUA => 'Hampir semua rusak, lebih dari 75%',
self::TIDAK_TAHU => 'Tidak tahu/sulit memperkirakan',
};
}
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 PraktikSortasi: int
{
case TIDAK_PERNAH = 1;
case SANGAT_SEDERHANA = 2;
case TIDAK_SETIAP_PANEN = 3;
case SETIAP_PANEN = 4;
case KETAT = 5;
public function label(): string
{
return match($this) {
self::TIDAK_PERNAH => 'Tidak pernah melakukan sortasi sama sekali',
self::SANGAT_SEDERHANA => 'Sortasi sangat sederhana, hanya membuang yang jelas-jelas rusak/busuk',
self::TIDAK_SETIAP_PANEN => 'Sortasi dilakukan tapi tidak setiap panen (kadang dilakukan, kadang tidak)',
self::SETIAP_PANEN => 'Sortasi dilakukan setiap panen, tapi standarnya belum konsisten',
self::KETAT => 'Sortasi ketat dengan standar yang jelas dan konsisten setiap panen',
};
}
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 TindakanPanenReject: string
{
case BUANG = 'Dibuang';
case JUAL = 'Dijual ke tempat lain';
public function label(): string
{
return match($this) {
self::BUANG => 'Dibuang',
self::JUAL => 'Dijual ke tempat lain',
};
}
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 TingkatPanenReject: int
{
case SERING = 1;
case CUKUP_SERING = 2;
case KADANG = 3;
case JARANG = 4;
case TIDAK_ADA = 5;
public function label(): string
{
return match($this) {
self::SERING => 'Sering ditolak, lebih dari 50% hasil panen biasanya ditolak/tidak laku karena mutu',
self::CUKUP_SERING => 'Cukup sering, sekitar 25–50% hasil panen ditolak/tidak laku',
self::KADANG => 'Kadang ditolak, sekitar 10–25% hasil panen',
self::JARANG => 'Jarang ditolak, kurang dari 10% hasil panen',
self::TIDAK_ADA => 'Tidak ada yang ditolak, semua hasil panen sesuai standar pasar utama',
};
}
public static function options(): array
{
return collect(self::cases())->map(fn ($case) => [
'value' => $case->value,
'label' => $case->label(),
])->toArray();
}
}
@@ -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.');
}
}
+10 -5
View File
@@ -78,16 +78,21 @@ class Petani extends Model
return $this->belongsTo(User::class, 'user_id');
}
public function praktik_budidaya(): HasOne
{
return $this->hasOne(PraktikBudidaya::class, 'petani_id');
}
public function praktikBudidaya(): HasOne
{
return $this->hasOne(PraktikBudidaya::class, 'petani_id')->latestOfMany();
}
public function surveyPanen(): HasOne
{
return $this->hasOne(surveyPanen::class, 'petani_id')->latestOfMany();
}
public function surveyProduktivitas(): HasOne
{
return $this->hasOne(surveyProduktivitas::class, 'petani_id')->latestOfMany();
}
public function lahans(): HasMany
{
return $this->hasMany(Lahan::class, 'petani_id');
+11 -2
View File
@@ -56,8 +56,17 @@ class PraktikBudidaya extends Model
'kebutuan_air_permusim',
'kebiasaan_konservasi_tanah',
'pemahaman_manfaat_konservasi_tanah',
// 'nilai_konservasi_tanah',
// 'upah_tenaga_kerja'
'upah_tenaga_kerja',
'biaya_bibit',
'biaya_pupuk',
'biaya_obat_obatan',
'biaya_sewa_alat',
'biaya_penyediaan_air',
'biaya_lainnya',
'total_estimasi_biaya_produksi',
'created_by',
'updated_by',
'deleted_by',
];
public function petani(): BelongsTo
+51
View File
@@ -0,0 +1,51 @@
<?php
namespace App\Models\Pertanian;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use App\Models\Pertanian\Petani;
class SurveyPanen extends Model
{
use SoftDeletes;
protected $table = 'survey_panen';
protected $fillable = [
'uid',
'petani_id',
'dasar_penentuan_panen',
'frekuensi_panen_pertahun',
'bulan_panen_utama',
'hasil_komoditas_utama_permusim',
'hasil_komoditas_lainnya_permusim',
'disimpan_untuk_sendiri',
'hasil_panen_disimpan',
'tujuan_disimpan',
'praktik_sortasi',
'bentuk_sortasi',
'hasil_panen_reject',
'jumlah_panen_reject',
'tindakan_panen_reject',
'upah_tenaga_panen',
'biaya_pengangkutan_panen',
'biaya_wadah_panen',
'biaya_sewa_alat_panen',
'biaya_panen_lainnya',
'total_estimasi_biaya_panen',
'estimasi_kehilangan_akibat_opt',
'estimasi_kehilangan_akibat_hama_penyakit',
'created_by',
'updated_by',
'deleted_by',
];
public function petani(): BelongsTo
{
return $this->belongsTo(Petani::class, 'petani_id');
}
}
@@ -0,0 +1,31 @@
<?php
namespace App\Models\Pertanian;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
class SurveyProduktivitas extends Model
{
use SoftDeletes;
protected $table = 'survey_produktivitas';
protected $fillable = [
'uid',
'petani_id',
'komoditas_id',
'kuantitas',
'satuan',
'created_by',
'updated_by',
'deleted_by',
];
public function petani(): BelongsTo
{
return $this->belongsTo(Petani::class, 'petani_id');
}
}
@@ -41,7 +41,6 @@ return new class extends Migration
$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();
@@ -53,24 +52,19 @@ return new class extends Migration
$table->string('kebutuhan_air_permusim')->nullable();
// 2.8 Praktik konservasi tanah
$table->string('praktik_konservasi_tanah')->nullable();
$table->string('kebiasaan_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->decimal('upah_tenaga_kerja', 13, 2)->nullable();
$table->decimal('biaya_bibit', 13, 2)->nullable();
$table->decimal('biaya_pupuk', 13, 2)->nullable();
$table->decimal('biaya_obat_obatan', 13, 2)->nullable();
$table->decimal('biaya_sewa_alat_produksi', 13, 2)->nullable();
$table->decimal('biaya_penyediaan_air', 13, 2)->nullable();
$table->decimal('biaya_produksi_lainnya', 13, 2)->nullable();
$table->decimal('total_estimasi_biaya_produksi', 13, 2)->nullable();
$table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null');
$table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null');
@@ -79,35 +73,36 @@ return new class extends Migration
$table->softDeletes();
});
Schema::create('panen', function (Blueprint $table) {
Schema::create('survey_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();
$table->integer('dasar_penentuan_panen')->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();
$table->decimal('hasil_komoditas_utama_permusim', 10, 2)->nullable();
$table->decimal('hasil_komoditas_lainnya_permusim', 10, 2)->nullable();
$table->boolean('disimpan_untuk_sendiri')->nullable();
$table->decimal('hasil_panen_disimpan', 10, 2)->nullable();
$table->string('tujuan_disimpan')->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();
$table->string('tindakan_panen_reject')->nullable();
$table->decimal('upah_tenaga_panen', 13, 2)->nullable();
$table->decimal('biaya_pengangkutan_panen', 13, 2)->nullable();
$table->decimal('biaya_wadah-Panen', 13, 2)->nullable();
$table->decimal('biaya_sewa_alat_panen', 13, 2)->nullable();
$table->decimal('biaya_panen_lainnya', 13, 2)->nullable();
$table->decimal('total_estimasi_biaya_panen', 13, 2)->nullable();
// K4 Produktivitas
// 4.3 Kehilangan Akibat OPT
$table->string('estimasi_kehilangan_akibat_opt')->nullable();
@@ -120,43 +115,13 @@ return new class extends Migration
$table->softDeletes();
});
Schema::create('produktivitas', function (Blueprint $table) {
Schema::create('survey_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->decimal('kuantitas')->nullable();
$table->string('satuan')->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');
@@ -171,8 +136,7 @@ return new class extends Migration
public function down(): void
{
Schema::dropIfExists('praktik_budidaya');
Schema::dropIfExists('pelatihan');
Schema::dropIfExists('sertifikasi');
Schema::dropIfExists('survey_panen');
Schema::dropIfExists('produktivitas');
}
};
@@ -16,6 +16,13 @@
@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\EstimasiKehilanganHasil')
@use('App\Enums\PraktikBudidaya\TingkatPanenReject')
@use('App\Enums\PraktikBudidaya\TindakanPanenReject')
<div class="container-xxl flex-grow-1 container-p-y">
@if ($errors->any())
<div class="alert alert-danger">
@@ -704,7 +711,7 @@
<div class="input-group">
<input
type="text"
type="number"
class="form-control @error('volume_obat_obatan_permusim') is-invalid @enderror"
id="volume-obat-obatan-permusim"
name="volume_obat_obatan_permusim"
@@ -811,16 +818,18 @@
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('sumber_air') is-invalid @enderror"
<input class="form-check-input lainnya-radio @error('sumber_air') is-invalid @enderror"
type="radio"
name="sumber_air"
value="Lainnya"
id="sumber-air-lainnya"
data-target="#input-sumber-air"
{{ old('sumber_air', $sumberAirLainnya) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="cara-lainnya">Lainnya:</label>
<input type="text"
id="input-sumber-air"
name="sumber_air_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('sumber_air_lainnya', $sumberAirLainnya ?? '') }}"
@@ -875,16 +884,18 @@
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('sistem_irigasi') is-invalid @enderror"
<input class="form-check-input lainnya-radio @error('sistem_irigasi') is-invalid @enderror"
type="radio"
name="sistem_irigasi"
value="Lainnya"
id="sumber-air-lainnya"
id="sistem-irigasi-lainnya"
data-target="#input-sistem-irigasi"
{{ old('sistem_irigasi', $sistemIrigasiLainnya) ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="cara-lainnya">Lainnya:</label>
<input type="text"
id="input-sistem-irigasi"
name="sistem_irigasi_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('sistem_irigasi_lainnya', $sistemIrigasiLainnya ?? '') }}"
@@ -1072,7 +1083,7 @@
class="form-control rupiah-input @error('biaya_sewa_alat') is-invalid @enderror"
id="biaya-sewa-alat"
name="biaya_sewa_alat"
value="{{ old('biaya_sewa_alat', filled($praktikBudidaya->biaya_sewa_alat) ? number_format($praktikBudidaya->biaya_sewa_alat, 0, ',', '.') : '') }}"
value="{{ old('biaya_sewa_alat', filled($praktikBudidaya->biaya_sewa_alat_produksi) ? number_format($praktikBudidaya->biaya_sewa_alat_produksi, 0, ',', '.') : '') }}"
placeholder="Contoh: 150.000">
</div>
@error('biaya_sewa_alat')
@@ -1106,7 +1117,7 @@
class="form-control rupiah-input @error('biaya_lainnya') is-invalid @enderror"
id="biaya-lainnya"
name="biaya_lainnya"
value="{{ old('biaya_lainnya', filled($praktikBudidaya->biaya_lainnya) ? number_format($praktikBudidaya->biaya_lainnya, 0, ',', '.') : '') }}"
value="{{ old('biaya_lainnya', filled($praktikBudidaya->biaya_produksi_lainnya) ? number_format($praktikBudidaya->biaya_produksi_lainnya, 0, ',', '.') : '') }}"
placeholder="Contoh: 150.000">
</div>
@error('biaya_lainnya')
@@ -1135,11 +1146,14 @@
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="dasar_penentuan_panen">Dasar Penentuan Panen<span class="text-danger">*</span></label>
<select class="form-control @error('dasar_penentuan_panen') is-invalid @enderror" id="dasar_penentuan_panen" name="dasar_penentuan_panen">
<select class="form-control @error('dasar_penentuan_panen') is-invalid @enderror" id="dasar-penentuan-panen" name="dasar_penentuan_panen">
<option value="">Pilih Dasar</option>
<option value="kurang">Kurang</option>
<option value="cukup">Cukup</option>
<option value="lebih">Lebih</option>
@foreach (DasarPenentuanPanen::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('dasar_penentuan_panen', $surveyPanen->dasar_penentuan_panen) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('dasar_penentuan_panen')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
@@ -1150,15 +1164,15 @@
<label class="form-label" for="frekuensi-panen-pertahun">
Frekuensi Panen Per Tahun<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('frekuensi_panen_pertahun') is-invalid @enderror"
id="frekuensi-panen-pertahun"
name="frekuensi_panen_pertahun"
value="{{ old('frekuensi_panen_pertahun', $petani->frekuensi_panen_pertahun) }}">
value="{{ old('frekuensi_panen_pertahun', $surveyPanen->frekuensi_panen_pertahun) }}"
step="0.01"
min="0">
<span class="input-group-text">Panen/Tahun</span>
</div>
@@ -1168,49 +1182,61 @@
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="bulan-panen-utama">Bulan Panen Utama<span class="text-danger">*</span></label>
<input class="form-control @error('bulan_panen_utama') is-invalid @enderror" type="date" id="bulan-panen-utama" name="bulan_panen_utama" value="{{ old('bulan_panen_utama', $petani->bulan_panen_utama) }}">
@error('bulan_panen_utama')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<select name="bulan_panen_utama" class="form-select">
<option value="">Pilih Bulan</option>
@foreach (Bulan::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('bulan_panen_utama', $surveyPanen->bulan_panen_utama) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('bulan_panen_utama')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
</div>
<h5 class="pb-4 border-bottom mb-4">Hasil Panen Aktual</h5>
<div class="row border-bottom mb-4 pb-4">
<div class="col-md-4 mb-4 row form-control-validation">
<label class="form-label" for="hasil-panen-komoditas-utama">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="hasil_komoditas_utama_permusim">
Hasil Panen Komoditas Utama<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('hasil_panen_komoditas_utama') is-invalid @enderror"
id="hasil-panen-komoditas-utama"
name="hasil_panen_komoditas_utama"
value="{{ old('hasil_panen_komoditas_utama', $petani->hasil_panen_komoditas_utama) }}">
<span class="input-group-text">Kg/Tahun</span>
class="form-control @error('hasil_komoditas_utama_permusim') is-invalid @enderror"
id="hasil-komoditas-utama-permusim"
name="hasil_komoditas_utama_permusim"
value="{{ old('hasil_komoditas_utama_permusim', $surveyPanen->hasil_komoditas_utama_permusim) }}"
step="0.01"
min="0">
<span class="input-group-text">Kg/Musim</span>
</div>
@error('hasil_panen_komoditas_utama')
@error('hasil_komoditas_utama_permusim')
<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="hasil-panen-komoditas-lainnya">
<label class="form-label" for="hasil_komoditas_lainnya_permusim">
Hasil Panen Komoditas Lainnya<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('hasil_panen_komoditas_lainnya') is-invalid @enderror"
id="hasil-panen-komoditas-lainnya"
name="hasil_panen_komoditas_lainnya"
value="{{ old('hasil_panen_komoditas_lainnya', $petani->hasil_panen_komoditas_lainnya) }}">
<span class="input-group-text">Kg/Tahun</span>
class="form-control @error('hasil_komoditas_lainnya_permusim') is-invalid @enderror"
id="hasil-komoditas-lainnya-permusim"
name="hasil_komoditas_lainnya_permusim"
value="{{ old('hasil_komoditas_lainnya_permusim', $surveyPanen->hasil_komoditas_lainnya_permusim) }}"
step="0.01"
min="0">
<span class="input-group-text">Kg/Musim</span>
</div>
@error('hasil_panen_komoditas_lainnya')
@error('hasil_komoditas_lainnya_permusim')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
@@ -1218,12 +1244,13 @@
<label class="form-label d-block">Disimpan Untuk Diri Sendiri<span class="text-danger">*</span></label>
<label class="switch switch-lg">
<input type="hidden" name="disimpan_untuk_sendiri" value="0">
<input
type="checkbox"
class="switch-input"
name="disimpan_untuk_diri_sendiri"
name="disimpan_untuk_sendiri"
value="1"
{{ old('disimpan_untuk_diri_sendiri', false) ? 'checked' : '' }}>
{{ old('disimpan_untuk_sendiri', $surveyPanen->disimpan_untuk_sendiri) ? 'checked' : '' }}>
<span class="switch-toggle-slider">
<span class="switch-on">
@@ -1241,18 +1268,20 @@
</div>
</div>
<div class="row">
<div class="col-md-4 mb-4 row form-control-validation">
<label class="form-label" for="hasil-panen-disimpan">Hasil Panen Disimpan<span class="text-danger">*</span></label>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="hasil_panen_disimpan">
Hasil Panen Disimpan<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('hasil_panen_disimpan') is-invalid @enderror"
id="hasil-panen-disimpan"
name="hasil_panen_disimpan"
value="{{ old('hasil_panen_disimpan', $petani->hasil_panen_disimpan) }}">
<span class="input-group-text">Kg/Tahun</span>
value="{{ old('hasil_panen_disimpan', $surveyPanen->hasil_panen_disimpan) }}"
step="0.01"
min="0">
<span class="input-group-text">Kg/Musim</span>
</div>
@error('hasil_panen_disimpan')
@@ -1260,8 +1289,8 @@
@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="tujuan-disimpan">Tujuan Disimpan<span class="text-danger">*</span></label>
<input class="form-control @error('tujuan_disimpan') is-invalid @enderror" id="tujuan-disimpan" name="tujuan_disimpan" value="{{ old('tujuan_disimpan', $petani->tujuan_disimpan) }}">
<label class="form-label" for="tujuan_disimpan">Tujuan Disimpan<span class="text-danger">*</span></label>
<input class="form-control @error('tujuan_disimpan') is-invalid @enderror" id="tujuan-disimpan" name="tujuan_disimpan" value="{{ old('tujuan_disimpan', $surveyPanen->tujuan_disimpan) }}">
@error('tujuan_disimpan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
</div>
@@ -1283,19 +1312,27 @@
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="praktik_sortasi">Praktik Sortasi<span class="text-danger">*</span></label>
<select class="form-control @error('praktik_sortasi') is-invalid @enderror" id="praktik_sortasi" name="praktik_sortasi">
<select class="form-control @error('praktik_sortasi') is-invalid @enderror" id="praktik-sortasi" name="praktik_sortasi">
<option value="">Pilih Praktik</option>
<option value="tidak_melakukan">Tidak Melakukan</option>
<option value="melakukan">Melakukan</option>
@foreach (PraktikSortasi::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('praktik_sortasi', $surveyPanen->praktik_sortasi) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('praktik_sortasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="bentuk_sortasi">Bentuk Sortasi Yang Dilakukan<span class="text-danger">*</span></label>
<select class="form-control @error('bentuk_sortasi') is-invalid @enderror" id="bentuk_sortasi" name="bentuk_sortasi">
<select class="form-control @error('bentuk_sortasi') is-invalid @enderror" id="bentuk-sortasi" name="bentuk_sortasi">
<option value="">Pilih Bentuk</option>
<option value="tidak_melakukan">Tidak Melakukan</option>
<option value="melakukan">Melakukan</option>
@foreach (CaraSortasi::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('bentuk_sortasi', $surveyPanen->bentuk_sortasi) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('bentuk_sortasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
@@ -1303,34 +1340,146 @@
<h5 class="pb-4 border-bottom mb-4">Hasil Panen Reject & Estimasi Biaya Panen</h5>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="upah-tenaga-panen">Upah Tenaga Panen<span class="text-danger">*</span></label>
<input class="form-control @error('upah_tenaga_panen') is-invalid @enderror" id="upah-tenaga-panen" name="upah_tenaga_panen" value="{{ old('upah_tenaga_panen', $petani->upah_tenaga_panen) }}">
@error('upah_tenaga_panen')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label" for="tingkat_reject">Tingkat hasil panen ditolak pembeli<span class="text-danger">*</span></label>
<select class="form-control @error('tingkat_reject') is-invalid @enderror" id="tingkat-reject" name="tingkat_reject">
<option value="">Pilih tingkat hasil panen</option>
@foreach (TingkatPanenReject::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('praktik_sortasi', $surveyPanen->praktik_sortasi) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('praktik_sortasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="biaya-pengangkutan">Biaya Pengangkutan<span class="text-danger">*</span></label>
<input class="form-control @error('biaya_pengangkutan') is-invalid @enderror" id="biaya-pengangkutan" name="biaya_pengangkutan" value="{{ old('biaya_pengangkutan', $petani->biaya_pengangkutan) }}">
@error('biaya_pengangkutan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label" for="hasil_panen_reject">
Hasil Panen Reject<span class="text-danger">*</span>
</label>
<div class="input-group">
<input
type="number"
class="form-control @error('hasil_panen_reject') is-invalid @enderror"
id="hasil-panen-reject"
name="hasil_panen_reject"
value="{{ old('hasil_panen_reject', $surveyPanen->hasil_panen_reject) }}"
step="0.01"
min="0">
<span class="input-group-text">Kg/Musim</span>
</div>
@error('hasil_panen_reject')
<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="biaya-wadah-kemasan">Biaya Wadah & kemasan<span class="text-danger">*</span></label>
<input class="form-control @error('biaya_wadah_kemasan') is-invalid @enderror" id="biaya-wadah-kemasan" name="biaya_wadah_kemasan" value="{{ old('biaya_wadah_kemasan', $petani->biaya_wadah_kemasan) }}">
@error('biaya_wadah_kemasan')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label" for="tindakan_hasil_reject">Tidakan Terhadap Hasil Reject<span class="text-danger">*</span></label>
<select class="form-control @error('tindakan_hasil_reject') is-invalid @enderror" id="tindakan-hasil-reject" name="tindakan_hasil_reject">
<option value="">Pilih Tindakan</option>
@foreach (TindakanPanenReject::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('tindakan_hasil_reject', $surveyPanen->tindakan_panen_reject) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('bentuk_sortasi')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="biaya-sewa-alat-panen">Biaya Sewa Alat Panen<span class="text-danger">*</span></label>
<input class="form-control @error('biaya_sewa_alat_panen') is-invalid @enderror" id="biaya-sewa-alat-panen" name="biaya_sewa_alat_panen" value="{{ old('biaya_sewa_alat_panen', $petani->biaya_sewa_alat_panen) }}">
@error('biaya_sewa_alat_panen')<div class="error invalid-feedback">{{ $message }}</div>@enderror
</div>
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label" for="biaya-panen-lainnya">Biaya Lain-lainnya<span class="text-danger">*</span></label>
<input class="form-control @error('biaya_panen_lainnya') is-invalid @enderror" id="biaya-panen-lainnya" name="biaya_panen_lainnya" value="{{ old('biaya_panen_lainnya', $petani->biaya_panen_lainnya) }}">
@error('biaya_panen_lainnya')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label" for="upah_tenaga_panen">Upah Tenaga Panen<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input
type="text"
class="form-control rupiah-input @error('upah_tenaga_panen') is-invalid @enderror"
id="upah-tenaga-panen"
name="upah_tenaga_panen"
value="{{ old('upah_tenaga_panen', filled($surveyPanen->upah_tenaga_panen) ? number_format($surveyPanen->upah_tenaga_panen, 0, ',', '.') : '' ) }}"
placeholder="Contoh: 150.000">
</div>
@error('upah_tenaga_panen')
<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="total-estimasi-biaya-panen">Total Estimasi Biaya Panen<span class="text-danger">*</span></label>
<input class="form-control @error('total_estimasi_biaya_panen') is-invalid @enderror" id="total-estimasi-biaya-panen" name="total_estimasi_biaya_panen" value="{{ old('total_estimasi_biaya_panen', $petani->total_estimasi_biaya_panen) }}">
@error('total_estimasi_biaya_panen')<div class="error invalid-feedback">{{ $message }}</div>@enderror
<label class="form-label" for="biaya_pengangkutan">Biaya Pengangkutan<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input
type="text"
class="form-control rupiah-input @error('biaya_pengangkutan') is-invalid @enderror"
id="biaya-pengangkutan"
name="biaya_pengangkutan"
value="{{ old('biaya_pengangkutan', filled($surveyPanen->biaya_pengangkutan_panen) ? number_format($surveyPanen->biaya_pengangkutan_panen, 0, ',', '.') : '' ) }}"
placeholder="Contoh: 150.000">
</div>
@error('biaya_pengangkutan')
<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="biaya_wadah_kemasan">Biaya Wadah & kemasan<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input
type="text"
class="form-control rupiah-input @error('biaya_wadah_kemasan') is-invalid @enderror"
id="biaya-wadah-kemasan"
name="biaya_wadah_kemasan"
value="{{ old('biaya_wadah_kemasan', filled($surveyPanen->biaya_wadah_panen) ? number_format($surveyPanen->biaya_wadah_panen, 0, ',', '.') : '' ) }}"
placeholder="Contoh: 150.000">
</div>
@error('biaya_wadah_kemasan')
<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="biaya_sewa_alat_panen">Biaya Sewa Alat Panen<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input
type="text"
class="form-control rupiah-input @error('biaya_sewa_alat_panen') is-invalid @enderror"
id="biaya-sewa-alat-panen"
name="biaya_sewa_alat_panen"
value="{{ old('biaya_sewa_alat_panen', filled($surveyPanen->biaya_sewa_alat_panen) ? number_format($surveyPanen->biaya_sewa_alat_panen, 0, ',', '.') : '' ) }}"
placeholder="Contoh: 150.000">
</div>
@error('biaya_sewa_alat_panen')
<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="biaya_panen_lainnya">Biaya Lain-lainnya<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input
type="text"
class="form-control rupiah-input @error('biaya_sewa_alat_panen') is-invalid @enderror"
id="biaya-panen-lainnya"
name="biaya_panen_lainnya"
value="{{ old('biaya_panen_lainnya', filled($surveyPanen->biaya_panen_lainnya) ? number_format($surveyPanen->biaya_panen_lainnya, 0, ',', '.') : '' ) }}"
placeholder="Contoh: 150.000">
</div>
@error('biaya_panen_lainnya')
<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="total_estimasi_biaya_panen">Total Estimasi Biaya Panen<span class="text-danger">*</span></label>
<div class="input-group">
<span class="input-group-text">Rp</span>
<input
type="text"
class="form-control rupiah-input @error('total_estimasi_biaya_panen') is-invalid @enderror"
id="total-estimasi-biaya-panen"
name="total_estimasi_biaya_panen"
value="{{ old('total_estimasi_biaya_panen', filled($surveyPanen->total_estimasi_biaya_panen) ? number_format($surveyPanen->total_estimasi_biaya_panen, 0, ',', '.') : '' ) }}"
placeholder="Contoh: 150.000">
</div>
@error('total_estimasi_biaya_panen')
<div class="invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
</div>
<div class="mt-4 text-end">
@@ -1347,48 +1496,105 @@
<h5 class="pb-4 border-bottom mb-4">
Produktivitas Rata-rata 3 Musim Panen Terakhir per Komoditas
</h5>
<form class="form-repeater">
{{-- DATA LAMA --}}
@if ($surveyProduktivitas->count() > 0)
@foreach ($surveyProduktivitas as $row)
<div class="row align-items-end border-bottom pb-3 mb-3">
<div class="col-md-4">
<label class="form-label">Komoditas</label>
<input type="text" class="form-control"
value="{{ optional($komoditas->firstWhere('id', $row->komoditas_id))->nama ?? '-' }}"
disabled>
</div>
<div class="col-md-3">
<label class="form-label">Hasil</label>
<div class="input-group">
<input type="text" class="form-control" value="{{ $row->kuantitas }}" disabled>
<span class="input-group-text">Kg</span>
</div>
</div>
<div class="col-md-3">
<label class="form-label">Satuan</label>
<input type="text" class="form-control" value="{{ $row->satuan }}" disabled>
</div>
<div class="col-md-2">
<form method="POST" action="{{ route('petani.survey-produktivitas.destroy', [$petani->id, $row->id]) }}">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-outline-danger">
<i class="icon-base ti tabler-trash icon-sm"></i>
</button>
</form>
</div>
</div>
@endforeach
@endif
{{-- FORM TAMBAH DATA BARU --}}
<form method="POST"
action="{{ route('petani.survey-produktivitas.store', $petani->id) }}"
class="form-repeater">
@csrf
<div data-repeater-list="produktivitas_komoditas">
<div data-repeater-item>
<div class="row align-items-end">
<div class="col-md-4 mb-3">
<label class="form-label">Komoditas</label>
<select name="komoditas_id" class="form-control select2" data-placeholder="Pilih Komoditas">
<select name="komoditas_id" class="form-select">
<option value="">Pilih Komoditas</option>
@foreach ($komoditas as $item)
<option value="{{ $item->id }}">{{ $item->nama }}</option>
@endforeach
</select>
</div>
<div class="col-md-3 mb-3">
<label class="form-label">Hasil</label>
<div class="input-group">
<input type="number" class="form-control @error('hasil_panen_3_musim') is-invalid @enderror" id="hasil-panen-3-musim" name="hasil_panen_3_musim" value="{{ old('hasil_panen_3_musim', $petani->hasil_panen_3_musim) }}">
<input type="number" name="hasil_panen_3_musim" class="form-control" step="0.01" min="0">
<span class="input-group-text">Kg</span>
</div>
</div>
<div class="col-md-3 mb-3">
<label class="form-label d-block">Satuan</label>
<div class="form-check form-check-inline">
<label class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="satuan" value="ha_tahun">
<label class="form-check-label">Ha/Tahun</label>
</div>
<div class="form-check form-check-inline">
<span class="form-check-label">Ha/Tahun</span>
</label>
<label class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="satuan" value="pohon_tahun">
<label class="form-check-label">Pohon/Tahun</label>
</div>
<span class="form-check-label">Pohon/Tahun</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>
<button type="button" class="btn btn-outline-danger" data-repeater-delete>
<i class="icon-base ti tabler-trash 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 class="mt-4 d-flex justify-content-between">
<button type="button" class="btn btn-outline-success" data-repeater-create>
<i class="icon-base ti tabler-plus me-1_5 icon-sm"></i>
Tambah Komoditas
</button>
<button type="submit" class="btn btn-success">
Simpan Produktivitas
</button>
</div>
</form>
</div>
@@ -1401,56 +1607,32 @@
<h5 class="pb-4 border-bottom mb-4">Kehilangan Hasil Akibat Organisme Pengganggu Tumbuhan (OPT)</h5>
<div class="row">
<div class="col-md-4 mb-4 form-control-validation">
<label class="form-label d-block fw-medium">Estimasi Kehilangan Hasil<span class="text-danger">*</span></label>
<div class="form-check mt-2">
<input class="form-check-input @error('estimasi_kehilangan_hasil') is-invalid @enderror"
type="radio"
name="estimasi_kehilangan_hasil"
value="Selalu, setiap musim berbunga"
id="estimasi-kehilangan-selalu"
{{ old('estimasi_kehilangan_hasil', $petani->estimasi_kehilangan_hasil) == 'Selalu, setiap musim berbunga' ? 'checked' : '' }}>
<label class="form-check-label" for="estimasi-kehilangan-selalu">Selalu, setiap musim berbunga</label>
</div>
<div class="form-check">
<input class="form-check-input @error('estimasi_kehilangan_hasil') is-invalid @enderror"
type="radio"
name="estimasi_kehilangan_hasil"
value="Kadang-kadang, tergantung kondisi"
id="estimasi-kehilangan-kadang"
{{ old('estimasi_kehilangan_hasil', $petani->estimasi_kehilangan_hasil) == 'Kadang-kadang, tergantung kondisi' ? 'checked' : '' }}>
<label class="form-check-label" for="estimasi-kehilangan-kadang">Kadang-kadang, tergantung kondisi</label>
</div>
<div class="form-check">
<input class="form-check-input @error('estimasi_kehilangan_hasil') is-invalid @enderror"
type="radio"
name="estimasi_kehilangan_hasil"
value="Tidak pernah"
id="estimasi-kehilangan-tidak-pernah"
{{ old('estimasi_kehilangan_hasil', $petani->estimasi_kehilangan_hasil) == 'Tidak pernah' ? 'checked' : '' }}>
<label class="form-check-label" for="estimasi-kehilangan-tidak-pernah">Tidak pernah</label>
</div>
<div class="form-check d-flex align-items-center gap-2 mt-1">
<input class="form-check-input @error('estimasi_kehilangan_hasil') is-invalid @enderror"
type="radio"
name="estimasi_kehilangan_hasil"
value="Lainnya"
id="estimasi-kehilangan-lainnya"
{{ old('estimasi_kehilangan_hasil', $petani->estimasi_kehilangan_hasil) == 'Lainnya' ? 'checked' : '' }}>
<label class="form-check-label text-nowrap" for="estimasi-kehilangan-lainnya">Lainnya:</label>
<input type="text"
name="estimasi_kehilangan_hasil_lainnya"
class="form-control form-control-sm w-50"
value="{{ old('estimasi_kehilangan_hasil_lainnya', $petani->estimasi_kehilangan_hasil_lainnya ?? '') }}"
placeholder="Sebutkan alasan lain...">
</div>
@error('estimasi_kehilangan_hasil')
<label class="form-label d-block fw-medium">Estimasi Kehilangan Hasil Akibat OPT<span class="text-danger">*</span></label>
<select class="form-control @error('estimasi_kehilangan_akibat_opt') is-invalid @enderror" id="estimasi-kehilangan-akibat-opt" name="estimasi_kehilangan_akibat_opt">
<option value="">Pilih Kehilangan Hasil</option>
@foreach (EstimasiKehilanganHasil::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('estimasi_kehilangan_akibat_opt', $surveyPanen->estimasi_kehilangan_akibat_opt) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('estimasi_kehilangan_akibat_opt')
<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">Estimasi Kehilangan Hasil Akibat Hama & Penyakit<span class="text-danger">*</span></label>
<select class="form-control @error('estimasi_kehilangan_akibat_hama') is-invalid @enderror" id="estimasi-kehilangan-akibat-hama" name="estimasi_kehilangan_akibat_hama">
<option value="">Pilih Kehilangan Hasil</option>
@foreach (EstimasiKehilanganHasil::options() as $option)
<option value="{{ $option['value'] }}"
{{ old('estimasi_kehilangan_akibat_hama', $surveyPanen->estimasi_kehilangan_akibat_hama_penyakit) == $option['value'] ? 'selected' : '' }}>
{{ $option['label'] }}
</option>
@endforeach
</select>
@error('estimasi_kehilangan_akibat_hama')
<div class="error invalid-feedback d-block">{{ $message }}</div>
@enderror
</div>
@@ -1474,7 +1656,7 @@
'use strict';
$(document).ready(function () {
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk, #metode-penanganan-hama-penyakit, #intensitas-serangan, #waktu-kemunculan-terparah, #frekuensi-sanitasi-lahan, #penanganan-sisa-buah-ranting, #penanganan-gulma, #kondisi-pengelolaan-air-irigasi, #kebutuhan-air-permusim, #pemahaman-manfaat-konservasi').select2();
$('#tenaga-kerja, #frekuensi-pemangkasan-komoditas-utama, #frekuensi-pemangkasan-pohon-penaung, #penyerbukan-manual, #pemberian-pupuk, #jenis-pupuk, #metode-penanganan-hama-penyakit, #intensitas-serangan, #waktu-kemunculan-terparah, #frekuensi-sanitasi-lahan, #penanganan-sisa-buah-ranting, #penanganan-gulma, #kondisi-pengelolaan-air-irigasi, #kebutuhan-air-permusim, #pemahaman-manfaat-konservasi, #dasar-penentuan-panen, #praktik-sortasi, #bentuk-sortasi, #estimasi-kehilangan-akibat-opt, #tingkat-reject, #tindakan-hasil-reject, #estimasi-kehilangan-akibat-hama, #komoditas-id').select2();
const $switch = $('input[name="disimpan_untuk_diri_sendiri"]');
const $text = $('#switch-text');
@@ -1586,4 +1768,16 @@
});
});
</script>
<script>
$(function () {
$('.form-repeater').repeater({
show: function () {
$(this).slideDown();
},
hide: function (deleteElement) {
$(this).slideUp(deleteElement);
}
});
});
</script>
@endpush
+1
View File
@@ -195,6 +195,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.survey-produktivitas', App\Http\Controllers\Web\Produktivitas\SurveyProduktivitasController::class)->only(['store', 'destroy']);
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');