resolve user create
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -13,11 +13,11 @@ enum PenangananGulma: int
|
||||
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',
|
||||
self::DIBIARKAN => 'Dibiarkan saja, tidak pernah ditangani',
|
||||
self::DICABUT => 'Dicabut/dibersihkan sesekali, tidak terjadwal',
|
||||
self::DISEMPROT => 'Disemprot herbisida sesekali, tidak terjadwal',
|
||||
self::RUTIN_DICABUT_TANPA_JADWAL => 'Rutin dicabut/dipangkas, tapi tanpa jadwal yang jelas',
|
||||
self::RUTIN_TERJADWAL => 'Rutin terjadwal dengan metode yang konsisten (dicabut/dipangkas/dikelola sebagai mulsa)',
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum AlasanKreditDitolak: string
|
||||
{
|
||||
case TIDAK_PUNYA_JAMINAN_AGUNAN = 'tidak_punya_jaminan_agunan';
|
||||
case PROSES_TERLALU_RUMIT = 'proses_terlalu_rumit';
|
||||
case TAKUT_TIDAK_BISA_BAYAR = 'takut_tidak_bisa_bayar';
|
||||
case TIDAK_TAHU_CARANYA = 'tidak_tahu_caranya';
|
||||
case LAINNYA = 'lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_PUNYA_JAMINAN_AGUNAN => 'Tidak punya jaminan-agunan',
|
||||
self::PROSES_TERLALU_RUMIT => 'Proses terlalu rumit',
|
||||
self::TAKUT_TIDAK_BISA_BAYAR => 'Takut tidak bisa bayar',
|
||||
self::TIDAK_TAHU_CARANYA => 'Tidak tahu caranya',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum BisaBeliPupukBersubsidi: string
|
||||
{
|
||||
case YA = 'ya';
|
||||
case TIDAK = 'tidak';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::YA => 'Ya',
|
||||
self::TIDAK => 'Tidak',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum JenisAsetProduktif: string
|
||||
{
|
||||
case TERNAK = 'ternak';
|
||||
case KENDARAAN = 'kendaraan';
|
||||
case ALAT_PERTANIAN = 'alat_pertanian';
|
||||
case LAINNYA = 'lainnya';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TERNAK => 'Ternak',
|
||||
self::KENDARAAN => 'Kendaraan',
|
||||
self::ALAT_PERTANIAN => 'Alat pertanian',
|
||||
self::LAINNYA => 'Lainnya',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KategoriPendapatanKomoditas: string
|
||||
{
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KeaktifanPertemuanKelompok: int
|
||||
{
|
||||
case TIDAK_PERNAH_HADIR = 1;
|
||||
case JARANG_HADIR = 2;
|
||||
case SERING_HADIR_LEBIH_BANYAK_DIAM = 3;
|
||||
case HAMPIR_SELALU_HADIR_KADANG_DISKUSI = 4;
|
||||
case SELALU_HADIR_AKTIF_DISKUSI = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_PERNAH_HADIR => 'Tidak pernah hadir',
|
||||
self::JARANG_HADIR => 'Jarang hadir',
|
||||
self::SERING_HADIR_LEBIH_BANYAK_DIAM => 'Sering hadir tapi lebih banyak diam',
|
||||
self::HAMPIR_SELALU_HADIR_KADANG_DISKUSI => 'Hampir selalu hadir & kadang diskusi',
|
||||
self::SELALU_HADIR_AKTIF_DISKUSI => 'Selalu hadir & aktif diskusi',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KebebasanMemilihPembeli: int
|
||||
{
|
||||
case TIDAK_BEBAS_TERIKAT_SATU_PEMBELI = 1;
|
||||
case AGAK_TERIKAT_ADA_TEKANAN = 2;
|
||||
case AGAK_BEBAS_CENDERUNG_PEMBELI_SAMA = 3;
|
||||
case CUKUP_BEBAS_SESEKALI_PINDAH = 4;
|
||||
case SANGAT_BEBAS_PINDAH_KAPAN_SAJA = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_BEBAS_TERIKAT_SATU_PEMBELI => 'Tidak bebas, terikat satu pembeli',
|
||||
self::AGAK_TERIKAT_ADA_TEKANAN => 'Agak terikat, ada tekanan',
|
||||
self::AGAK_BEBAS_CENDERUNG_PEMBELI_SAMA => 'Agak bebas, cenderung pembeli sama',
|
||||
self::CUKUP_BEBAS_SESEKALI_PINDAH => 'Cukup bebas, sesekali pindah',
|
||||
self::SANGAT_BEBAS_PINDAH_KAPAN_SAJA => 'Sangat bebas, pindah kapan saja',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KedekatanSesamaAnggota: string
|
||||
{
|
||||
case SANGAT_DEKAT = 'sangat_dekat';
|
||||
case CUKUP_DEKAT = 'cukup_dekat';
|
||||
case SEBATAS_KENAL = 'sebatas_kenal';
|
||||
case TIDAK_BEGITU_KENAL = 'tidak_begitu_kenal';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SANGAT_DEKAT => 'Sangat dekat',
|
||||
self::CUKUP_DEKAT => 'Cukup dekat',
|
||||
self::SEBATAS_KENAL => 'Sebatas kenal',
|
||||
self::TIDAK_BEGITU_KENAL => 'Tidak begitu kenal',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KemauanIkutProgram: int
|
||||
{
|
||||
case TIDAK_MAU = 1;
|
||||
case RAGU_RAGU = 2;
|
||||
case MAU_PERLU_DIPASTIKAN_MANFAAT = 3;
|
||||
case MAU_LIHAT_PROGRAM_DULU = 4;
|
||||
case MAU_LANGSUNG_IKUT = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_MAU => 'Tidak mau',
|
||||
self::RAGU_RAGU => 'Ragu-ragu',
|
||||
self::MAU_PERLU_DIPASTIKAN_MANFAAT => 'Mau, perlu dipastikan manfaatnya',
|
||||
self::MAU_LIHAT_PROGRAM_DULU => 'Mau, ingin lihat programnya dulu',
|
||||
self::MAU_LANGSUNG_IKUT => 'Mau, langsung ikut',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KemauanMencobaPraktikBaru: int
|
||||
{
|
||||
case TIDAK_MAU = 1;
|
||||
case RAGU_RAGU = 2;
|
||||
case MAU_LIHAT_HASIL_DULU = 3;
|
||||
case MAU_LANGSUNG_COBA = 4;
|
||||
case MAU_COBA_SAMPAI_BERHASIL = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_MAU => 'Tidak mau',
|
||||
self::RAGU_RAGU => 'Ragu-ragu',
|
||||
self::MAU_LIHAT_HASIL_DULU => 'Mau, lihat hasil dulu',
|
||||
self::MAU_LANGSUNG_COBA => 'Mau langsung coba',
|
||||
self::MAU_COBA_SAMPAI_BERHASIL => 'Mau coba sampai berhasil',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KeterikatanHutangPanen: int
|
||||
{
|
||||
case TIDAK_BERSEDIA_MENJAWAB = 0;
|
||||
case HUTANG_BESAR_HAMPIR_SELURUH_PANEN_TERIKAT = 1;
|
||||
case HUTANG_LEBIH_DARI_SEPARUH_PANEN_TERIKAT = 2;
|
||||
case HUTANG_SEBAGIAN_KECIL_TERIKAT = 3;
|
||||
case HUTANG_KECIL_TIDAK_MENGIKAT_PANEN = 4;
|
||||
case TIDAK_ADA = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab',
|
||||
self::HUTANG_BESAR_HAMPIR_SELURUH_PANEN_TERIKAT => 'Ada hutang besar, hampir seluruh panen terikat',
|
||||
self::HUTANG_LEBIH_DARI_SEPARUH_PANEN_TERIKAT => 'Ada hutang, >separuh panen terikat',
|
||||
self::HUTANG_SEBAGIAN_KECIL_TERIKAT => 'Ada hutang, sebagian kecil terikat',
|
||||
self::HUTANG_KECIL_TIDAK_MENGIKAT_PANEN => 'Ada hutang kecil, tidak mengikat panen',
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KeterlibatanProgramKeuanganFormal: int
|
||||
{
|
||||
case TIDAK_PERNAH_MENERIMA = 1;
|
||||
case PERNAH_SATU_TIDAK_BERMANFAAT = 2;
|
||||
case SEDANG_MENERIMA_SATU = 3;
|
||||
case SEDANG_MENERIMA_LEBIH_DARI_SATU = 4;
|
||||
case AKTIF_BEBERAPA_PROGRAM_BERMANFAAT = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_PERNAH_MENERIMA => 'Tidak pernah menerima',
|
||||
self::PERNAH_SATU_TIDAK_BERMANFAAT => 'Pernah 1 program, tidak lagi & tidak bermanfaat',
|
||||
self::SEDANG_MENERIMA_SATU => 'Sedang menerima 1 program',
|
||||
self::SEDANG_MENERIMA_LEBIH_DARI_SATU => 'Sedang menerima >1 program',
|
||||
self::AKTIF_BEBERAPA_PROGRAM_BERMANFAAT => 'Aktif beberapa program & merasakan manfaat nyata',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum KondisiAsetProduktif: int
|
||||
{
|
||||
case TIDAK_ADA = 1;
|
||||
case ADA_SATU_KURANG_BAIK = 2;
|
||||
case ADA_SATU_BAIK = 3;
|
||||
case ADA_DUA_LEBIH_SEBAGIAN_KURANG_BAIK = 4;
|
||||
case ADA_DUA_LEBIH_SEMUA_BAIK = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
self::ADA_SATU_KURANG_BAIK => 'Ada 1 jenis, kondisi kurang baik',
|
||||
self::ADA_SATU_BAIK => 'Ada 1 jenis, kondisi baik',
|
||||
self::ADA_DUA_LEBIH_SEBAGIAN_KURANG_BAIK => 'Ada 2+ jenis, sebagian kurang baik',
|
||||
self::ADA_DUA_LEBIH_SEMUA_BAIK => 'Ada 2+ jenis, semua kondisi baik',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum ManfaatKelompokTani: int
|
||||
{
|
||||
case TIDAK_ADA_MANFAAT = 1;
|
||||
case MANFAAT_SOSIAL_SAJA = 2;
|
||||
case SEDIKIT_MANFAAT_PRODUKSI_PEMASARAN = 3;
|
||||
case MANFAAT_CUKUP_TERASA = 4;
|
||||
case MANFAAT_NYATA_SIGNIFIKAN = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_ADA_MANFAAT => 'Tidak ada manfaat',
|
||||
self::MANFAAT_SOSIAL_SAJA => 'Manfaat sosial saja',
|
||||
self::SEDIKIT_MANFAAT_PRODUKSI_PEMASARAN => 'Sedikit manfaat produksi-pemasaran',
|
||||
self::MANFAAT_CUKUP_TERASA => 'Manfaat cukup terasa',
|
||||
self::MANFAAT_NYATA_SIGNIFIKAN => 'Manfaat nyata & signifikan',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum MinatPembeliHargaStabil: string
|
||||
{
|
||||
case MAU_HARGA_STABIL_LEBIH_PENTING = 'mau_harga_stabil_lebih_penting';
|
||||
case MAU_TAPI_INGIN_BANDINGKAN_DULU = 'mau_tapi_ingin_bandingkan_dulu';
|
||||
case RAGU_RAGU = 'ragu_ragu';
|
||||
case TIDAK_MAU_CARI_HARGA_TERBAIK = 'tidak_mau_cari_harga_terbaik';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::MAU_HARGA_STABIL_LEBIH_PENTING => 'Mau-harga stabil lebih penting',
|
||||
self::MAU_TAPI_INGIN_BANDINGKAN_DULU => 'Mau tapi ingin bandingkan dulu',
|
||||
self::RAGU_RAGU => 'Ragu-ragu',
|
||||
self::TIDAK_MAU_CARI_HARGA_TERBAIK => 'Tidak mau-cari harga terbaik tiap jual',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum OrientasiRencanaJangkaPanjang: int
|
||||
{
|
||||
case BELUM_KEPIKIRAN = 1;
|
||||
case INGIN_TETAP_SEPERTI_SEKARANG = 2;
|
||||
case INGIN_BERUBAH_BELUM_TAHU_CARANYA = 3;
|
||||
case INGIN_SUDAH_MULAI_DIPIKIRKAN = 4;
|
||||
case PUNYA_RENCANA_KONKRET = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BELUM_KEPIKIRAN => 'Belum kepikiran',
|
||||
self::INGIN_TETAP_SEPERTI_SEKARANG => 'Ingin tetap seperti sekarang',
|
||||
self::INGIN_BERUBAH_BELUM_TAHU_CARANYA => 'Ada keinginan berubah tapi belum tahu caranya',
|
||||
self::INGIN_SUDAH_MULAI_DIPIKIRKAN => 'Ada keinginan & sudah mulai dipikirkan',
|
||||
self::PUNYA_RENCANA_KONKRET => 'Sudah punya rencana konkret',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PanutanPetaniSukses: int
|
||||
{
|
||||
case TIDAK_ADA = 1;
|
||||
case ADA_DENGAR_DARI_ORANG_LAIN = 2;
|
||||
case TAHU_SIAPA_TIDAK_KENAL = 3;
|
||||
case KENAL_BELUM_DISKUSI = 4;
|
||||
case KENAL_PERNAH_DISKUSI_LANGSUNG = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
self::ADA_DENGAR_DARI_ORANG_LAIN => 'Ada, dengar dari orang lain saja',
|
||||
self::TAHU_SIAPA_TIDAK_KENAL => 'Tahu siapa, tapi tidak kenal',
|
||||
self::KENAL_BELUM_DISKUSI => 'Kenal, belum pernah diskusi',
|
||||
self::KENAL_PERNAH_DISKUSI_LANGSUNG => 'Kenal & pernah diskusi langsung',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PemahamanMutuHarga: int
|
||||
{
|
||||
case TIDAK_TAHU = 1;
|
||||
case PERNAH_DENGAR_TIDAK_YAKIN = 2;
|
||||
case TAHU_BEDA_BELUM_BUKTIKAN = 3;
|
||||
case TAHU_PERNAH_HARGA_LEBIH_TINGGI = 4;
|
||||
case TAHU_BETUL_BISA_JELASKAN_RINCI = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_TAHU => 'Tidak tahu',
|
||||
self::PERNAH_DENGAR_TIDAK_YAKIN => 'Pernah dengar, tidak yakin',
|
||||
self::TAHU_BEDA_BELUM_BUKTIKAN => 'Tahu ada beda, belum buktikan',
|
||||
self::TAHU_PERNAH_HARGA_LEBIH_TINGGI => 'Tahu & pernah dapat harga lebih tinggi',
|
||||
self::TAHU_BETUL_BISA_JELASKAN_RINCI => 'Tahu betul & bisa jelaskan rinci',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PengalamanKreditKebun: int
|
||||
{
|
||||
case TIDAK_PERNAH_MENCOBA = 1;
|
||||
case PERNAH_COBA_DITOLAK = 2;
|
||||
case SEDANG_PROSES = 3;
|
||||
case BERHASIL_MASIH_PELUNASAN = 4;
|
||||
case BERHASIL_SUDAH_LUNAS = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_PERNAH_MENCOBA => 'Tidak pernah mencoba',
|
||||
self::PERNAH_COBA_DITOLAK => 'Pernah coba tapi ditolak',
|
||||
self::SEDANG_PROSES => 'Sedang dalam proses',
|
||||
self::BERHASIL_MASIH_PELUNASAN => 'Berhasil, masih proses pelunasan',
|
||||
self::BERHASIL_SUDAH_LUNAS => 'Berhasil & sudah lunas',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PengetahuanHargaHasilOlah: string
|
||||
{
|
||||
case TIDAK_TAHU = 'tidak_tahu';
|
||||
case PERNAH_DENGAR_TIDAK_TAHU_PENGARUH = 'pernah_dengar_tidak_tahu_pengaruh';
|
||||
case TAHU_BEDA_HARGA_BELUM_COBA = 'tahu_beda_harga_belum_coba';
|
||||
case PERNAH_JUAL_HASIL_OLAH_HARGA_LEBIH_TINGGI = 'pernah_jual_hasil_olah_harga_lebih_tinggi';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_TAHU => 'Tidak tahu',
|
||||
self::PERNAH_DENGAR_TIDAK_TAHU_PENGARUH => 'Pernah dengar tapi tidak tahu pengaruh ke harga',
|
||||
self::TAHU_BEDA_HARGA_BELUM_COBA => 'Tahu ada beda harga tapi belum coba',
|
||||
self::PERNAH_JUAL_HASIL_OLAH_HARGA_LEBIH_TINGGI => 'Sudah pernah jual hasil olah dengan harga lebih tinggi',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PeranDalamKelompok: int
|
||||
{
|
||||
case ANGGOTA_PASIF = 1;
|
||||
case ANGGOTA_BIASA_KADANG_DILIBATKAN = 2;
|
||||
case ANGGOTA_BIASA_CUKUP_AKTIF = 3;
|
||||
case PENGURUS_BELUM_BANYAK_TANGGUNG_JAWAB = 4;
|
||||
case KETUA_PENGURUS_AKTIF = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::ANGGOTA_PASIF => 'Anggota pasif',
|
||||
self::ANGGOTA_BIASA_KADANG_DILIBATKAN => 'Anggota biasa, kadang dilibatkan',
|
||||
self::ANGGOTA_BIASA_CUKUP_AKTIF => 'Anggota biasa, cukup aktif',
|
||||
self::PENGURUS_BELUM_BANYAK_TANGGUNG_JAWAB => 'Pengurus, belum banyak menjalankan tanggung jawab',
|
||||
self::KETUA_PENGURUS_AKTIF => 'Ketua-pengurus aktif & menjalankan tanggung jawab nyata',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PeriodePendapatan: string
|
||||
{
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PernahBantuanNgoPerusahaan: string
|
||||
{
|
||||
case PERNAH = 'pernah';
|
||||
case TIDAK_PERNAH = 'tidak_pernah';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PERNAH => 'Pernah',
|
||||
self::TIDAK_PERNAH => 'Tidak pernah',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PernahJualHargaLebihTinggi: string
|
||||
{
|
||||
case BELUM_PERNAH = 'belum_pernah';
|
||||
case PERNAH = 'pernah';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BELUM_PERNAH => 'Belum pernah',
|
||||
self::PERNAH => 'Pernah',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PihakMembantuKonflik: string
|
||||
{
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PinjamanTokohAdatPanen: string
|
||||
{
|
||||
case TIDAK_ADA = 'tidak_ada';
|
||||
case ADA = 'ada';
|
||||
case TIDAK_BERSEDIA_MENJAWAB = 'tidak_bersedia_menjawab';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
self::ADA => 'Ada',
|
||||
self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum PraktikIjon: int
|
||||
{
|
||||
case TIDAK_BERSEDIA_MENJAWAB = 0;
|
||||
case HAMPIR_SELURUH_PANEN_TERIKAT = 1;
|
||||
case SEBAGIAN_BESAR_TERIKAT = 2;
|
||||
case SESEKALI_SEBAGIAN_KECIL = 3;
|
||||
case PERNAH_SUDAH_LAMA_TIDAK_LAGI = 4;
|
||||
case TIDAK_PERNAH = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_BERSEDIA_MENJAWAB => 'Tidak bersedia menjawab',
|
||||
self::HAMPIR_SELURUH_PANEN_TERIKAT => 'Hampir seluruh panen terikat ijon',
|
||||
self::SEBAGIAN_BESAR_TERIKAT => 'Sebagian besar terikat',
|
||||
self::SESEKALI_SEBAGIAN_KECIL => 'Sesekali-sebagian kecil',
|
||||
self::PERNAH_SUDAH_LAMA_TIDAK_LAGI => 'Pernah, sudah lama tidak lagi',
|
||||
self::TIDAK_PERNAH => 'Tidak pernah',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum SkorKecukupanPenghasilan: int
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum SkorKejelasanStatusLahan: int
|
||||
{
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum SkorKemampuanMenabung: int
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum SkorPeriodePaceklik: int
|
||||
{
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum StatusKartuTani: string
|
||||
{
|
||||
case BELUM_PUNYA = 'belum_punya';
|
||||
case SUDAH_PUNYA_BELUM_AKTIF = 'sudah_punya_belum_aktif';
|
||||
case SUDAH_PUNYA_AKTIF_DIGUNAKAN = 'sudah_punya_aktif_digunakan';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::BELUM_PUNYA => 'Belum punya',
|
||||
self::SUDAH_PUNYA_BELUM_AKTIF => 'Sudah punya tapi belum aktif',
|
||||
self::SUDAH_PUNYA_AKTIF_DIGUNAKAN => 'Sudah punya & aktif digunakan',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum StatusKepemilikanLahanSosialEkonomi: string
|
||||
{
|
||||
@@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum StatusKonflik: string
|
||||
{
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum StatusProgramKeuanganFormal: string
|
||||
{
|
||||
case SEDANG_MENERIMA = 'sedang_menerima';
|
||||
case PERNAH_TAPI_TIDAK_LAGI = 'pernah_tapi_tidak_lagi';
|
||||
case BELUM_PERNAH = 'belum_pernah';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SEDANG_MENERIMA => 'Sedang Menerima',
|
||||
self::PERNAH_TAPI_TIDAK_LAGI => 'Pernah tapi Tidak Lagi',
|
||||
self::BELUM_PERNAH => 'Belum Pernah',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum StatusRekeningTabungan: int
|
||||
{
|
||||
case TIDAK_PUNYA_REKENING = 1;
|
||||
case PUNYA_TIDAK_AKTIF = 2;
|
||||
case PUNYA_KADANG_DIGUNAKAN = 3;
|
||||
case PUNYA_CUKUP_RUTIN = 4;
|
||||
case AKTIF_RUTIN_DIGUNAKAN = 5;
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_PUNYA_REKENING => 'Tidak punya rekening',
|
||||
self::PUNYA_TIDAK_AKTIF => 'Punya tapi tidak aktif',
|
||||
self::PUNYA_KADANG_DIGUNAKAN => 'Punya, kadang digunakan',
|
||||
self::PUNYA_CUKUP_RUTIN => 'Punya, cukup rutin',
|
||||
self::AKTIF_RUTIN_DIGUNAKAN => 'Aktif & rutin digunakan',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum TekananJualSegera: string
|
||||
{
|
||||
case TIDAK_ADA = 'tidak_ada';
|
||||
case ADA = 'ada';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::TIDAK_ADA => 'Tidak ada',
|
||||
self::ADA => 'Ada',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum TerdaftarKelompokTani: string
|
||||
{
|
||||
case YA = 'ya';
|
||||
case TIDAK = 'tidak';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::YA => 'Ya',
|
||||
self::TIDAK => 'Tidak',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums\SosialEkonomi;
|
||||
|
||||
enum UsahaMutuTambahanHarga: string
|
||||
{
|
||||
case SEBANDING_COCOK_DICOBA = 'sebanding_cocok_dicoba';
|
||||
case TIDAK_YAKIN = 'tidak_yakin';
|
||||
case TIDAK_SEBANDING_TERLALU_BANYAK_USAHA = 'tidak_sebanding_terlalu_banyak_usaha';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::SEBANDING_COCOK_DICOBA => 'Sebanding-cocok dicoba',
|
||||
self::TIDAK_YAKIN => 'Tidak yakin',
|
||||
self::TIDAK_SEBANDING_TERLALU_BANYAK_USAHA => 'Tidak sebanding-terlalu banyak usaha',
|
||||
};
|
||||
}
|
||||
|
||||
public static function options(): array
|
||||
{
|
||||
return collect(self::cases())->map(fn ($case) => [
|
||||
'value' => $case->value,
|
||||
'label' => $case->label(),
|
||||
])->toArray();
|
||||
}
|
||||
|
||||
public static function values(): array
|
||||
{
|
||||
return array_column(self::cases(), 'value');
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,7 @@ use App\Models\User;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Validation\ValidationException;
|
||||
|
||||
class AuthController extends Controller
|
||||
@@ -27,27 +27,24 @@ class AuthController extends Controller
|
||||
|
||||
public function createAccount(Request $request)
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'name' => 'required|string|max:255',
|
||||
'email' => 'required|string|email|max:255|unique:users',
|
||||
$credentials = $request->validate([
|
||||
'username' => 'required|string|max:255|unique:users,username',
|
||||
'email' => 'required|string|email|max:255|unique:users,email',
|
||||
'password' => 'required|string|min:8|confirmed',
|
||||
]);
|
||||
|
||||
User::create([
|
||||
'name' => $request->name,
|
||||
'username' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'uid' => Str::uuid(),
|
||||
'status' => 'pending',
|
||||
'role' => null,
|
||||
'email_verified_at' => null,
|
||||
'created_by' => null,
|
||||
'updated_by' => null,
|
||||
'deleted_by' => null,
|
||||
]);
|
||||
'uid' => (string) Str::uuid(),
|
||||
'name' => $request->name,
|
||||
'username' => $request->name,
|
||||
'email' => $request->email,
|
||||
'password' => Hash::make($request->password),
|
||||
'status' => 'pending',
|
||||
'role' => null,
|
||||
'email_verified_at' => null,
|
||||
]);
|
||||
|
||||
return redirect('/login')->with('success', 'Account created successfully. Please login.');
|
||||
return redirect()->route('login')->with('success', 'Account created successfully. Please login.');
|
||||
}
|
||||
|
||||
public function verify(User $user)
|
||||
|
||||
@@ -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)
|
||||
@@ -95,7 +110,7 @@ class PraktikBudidayaController extends Controller
|
||||
$alasanTidakPenyerbukanLainnya = collect(explode(', ', $alasanTidakPenyerbukan))
|
||||
->first(fn ($item) => !in_array($item, $defaultAlasanTidakPenyerbukan));
|
||||
|
||||
$frekuensiPemupukan = $praktikBudidaya->frekuensi_pemupukan ?? '';
|
||||
$frekuensiPemupukan = $praktikBudidaya->frekuensi_pemberian_pupuk ?? '';
|
||||
$frekuensiPemupukanLainnya = collect(explode(', ', $frekuensiPemupukan))
|
||||
->first(fn ($item) => !in_array($item, $defaultFrekuensiPemupukan));
|
||||
|
||||
@@ -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'));
|
||||
@@ -165,7 +180,7 @@ class PraktikBudidayaController extends Controller
|
||||
|
||||
$petani = Petani::findOrFail($petaniId);
|
||||
|
||||
$praktikBudidaya = $petani->praktik_budidaya()->create([
|
||||
$praktikBudidaya = $petani->praktikBudidaya()->create([
|
||||
'petani_id' => $petani->id,
|
||||
'uid' => 'PB-' . strtoupper(Str::random(10)),
|
||||
'tenaga_kerja' => $validatedData['tenaga_kerja'],
|
||||
@@ -184,6 +199,34 @@ 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(),
|
||||
], [
|
||||
'string' => ':attribute harus berupa teks.',
|
||||
'integer' => ':attribute harus berupa angka.',
|
||||
'array' => ':attribute harus berupa pilihan.',
|
||||
'enum' => 'Pilihan :attribute tidak valid.',
|
||||
], [
|
||||
'tenaga_kerja' => 'tenaga kerja',
|
||||
'frekuensi_pemangkasan_komoditas_utama' => 'frekuensi pemangkasan komoditas utama',
|
||||
'teknik_pemangkasan' => 'teknik pemangkasan',
|
||||
'teknik_pemangkasan_lainnya' => 'teknik pemangkasan lainnya',
|
||||
'frekuensi_pemangkasan_pohon_penaung' => 'frekuensi pemangkasan pohon penaung',
|
||||
|
||||
'penyerbukan_manual' => 'penyerbukan manual',
|
||||
'alasan_tidak_penyerbukan' => 'alasan tidak melakukan penyerbukan manual',
|
||||
'alasan_tidak_penyerbukan_lainnya' => 'alasan lainnya tidak melakukan penyerbukan manual',
|
||||
'tingkat_keberhasilan_penyerbukan' => 'tingkat keberhasilan penyerbukan',
|
||||
'pemberian_pupuk' => 'pemberian pupuk',
|
||||
'jenis_pupuk' => 'jenis pupuk',
|
||||
'frekuensi_pemupukan' => 'frekuensi pemupukan',
|
||||
'frekuensi_pemupukan_lainnya' => 'frekuensi pemupukan lainnya',
|
||||
'estimasi_dosis_pupuk_organik' => 'estimasi dosis pupuk organik',
|
||||
'estimasi_dosis_pupuk_anorganik' => 'estimasi dosis pupuk anorganik',
|
||||
'waktu_pemberian_pupuk' => 'waktu pemberian pupuk',
|
||||
'waktu_pemberian_pupuk_lainnya' => 'waktu pemberian pupuk lainnya',
|
||||
'cara_pemberian_pupuk' => 'cara pemberian pupuk',
|
||||
'cara_pemberian_pupuk_lainnya' => 'cara pemberian pupuk lainnya',
|
||||
]);
|
||||
|
||||
return redirect()->route('petani.praktik-budidaya.edit', [$petani->id , $praktikBudidaya->id])
|
||||
@@ -246,6 +289,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)
|
||||
@@ -255,7 +303,7 @@ class PraktikBudidayaController extends Controller
|
||||
$alasanTidakPenyerbukanLainnya = collect(explode(', ', $alasanTidakPenyerbukan))
|
||||
->first(fn ($item) => !in_array($item, $defaultAlasanTidakPenyerbukan));
|
||||
|
||||
$frekuensiPemupukan = $praktikBudidaya->frekuensi_pemupukan ?? '';
|
||||
$frekuensiPemupukan = $praktikBudidaya->frekuensi_pemberian_pupuk ?? '';
|
||||
$frekuensiPemupukanLainnya = collect(explode(', ', $frekuensiPemupukan))
|
||||
->first(fn ($item) => !in_array($item, $defaultFrekuensiPemupukan));
|
||||
|
||||
@@ -275,7 +323,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 +332,6 @@ class PraktikBudidayaController extends Controller
|
||||
abort(403);
|
||||
}
|
||||
|
||||
// dd($request->all());
|
||||
|
||||
$praktikBudidaya = PraktikBudidaya::where('petani_id', $petaniId)
|
||||
->where('id', $praktikBudidayaId)
|
||||
->firstOrFail();
|
||||
@@ -299,15 +345,15 @@ class PraktikBudidayaController extends Controller
|
||||
'teknik_pemangkasan' => ['nullable', 'array'],
|
||||
'teknik_pemangkasan.*' => ['string'],
|
||||
'teknik_pemangkasan_lainnya' => ['nullable', 'string'],
|
||||
'frekuensi_pemangkasan_pohon_penaung' => ['nullable', 'integer', new Enum(FrekuensiPemangkasanPendamping::class)],
|
||||
'penyerbukan_manual' => ['nullable', 'integer', new Enum(PenyerbukanManual::class)],
|
||||
'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'],
|
||||
|
||||
// 2.4 Praktik Pemupukan
|
||||
'pemberian_pupuk' => ['nullable', 'integer', new Enum(PemberianPupuk::class)],
|
||||
'jenis_pupuk' => ['nullable', 'integer', new Enum(JenisPupuk::class)],
|
||||
'jenis_pupuk' => ['nullable', 'string', new Enum(JenisPupuk::class)],
|
||||
|
||||
'frekuensi_pemupukan' => ['nullable', 'string'],
|
||||
'frekuensi_pemupukan_lainnya' => ['nullable', 'string'],
|
||||
@@ -358,9 +404,142 @@ class PraktikBudidayaController extends Controller
|
||||
'kebiasaan_konservasi_tanah.*' => ['string'],
|
||||
|
||||
'pemahaman_manfaat_konservasi' => ['nullable', 'string', new Enum(PemahamanManfaatKonservasi::class)],
|
||||
]);
|
||||
|
||||
$data = [];
|
||||
'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)],
|
||||
], [
|
||||
'string' => ':attribute harus berupa teks.',
|
||||
'integer' => ':attribute harus berupa angka.',
|
||||
'numeric' => ':attribute harus berupa angka.',
|
||||
'array' => ':attribute harus berupa daftar pilihan.',
|
||||
'boolean' => ':attribute harus bernilai ya atau tidak.',
|
||||
'enum' => 'Pilihan :attribute tidak valid.',
|
||||
|
||||
'teknik_pemangkasan.*.string' => 'Setiap pilihan teknik pemangkasan harus berupa teks.',
|
||||
'kebiasaan_konservasi_tanah.*.string' => 'Setiap pilihan kebiasaan konservasi tanah harus berupa teks.',
|
||||
], [
|
||||
// 2.2 Persiapan Lahan & Penanaman
|
||||
'tenaga_kerja' => 'tenaga kerja',
|
||||
|
||||
// 2.3 Praktik Pemangkasan & Penyerbukan
|
||||
'frekuensi_pemangkasan_komoditas_utama' => 'frekuensi pemangkasan komoditas utama',
|
||||
'teknik_pemangkasan' => 'teknik pemangkasan',
|
||||
'teknik_pemangkasan.*' => 'pilihan teknik pemangkasan',
|
||||
'teknik_pemangkasan_lainnya' => 'teknik pemangkasan lainnya',
|
||||
'frekuensi_pemangkasan_pohon_penaung' => 'frekuensi pemangkasan pohon penaung',
|
||||
'penyerbukan_manual' => 'penyerbukan manual',
|
||||
'alasan_tidak_penyerbukan' => 'alasan tidak melakukan penyerbukan manual',
|
||||
'alasan_tidak_penyerbukan_lainnya' => 'alasan lainnya tidak melakukan penyerbukan manual',
|
||||
'tingkat_keberhasilan_penyerbukan' => 'tingkat keberhasilan penyerbukan',
|
||||
|
||||
// 2.4 Praktik Pemupukan
|
||||
'pemberian_pupuk' => 'pemberian pupuk',
|
||||
'jenis_pupuk' => 'jenis pupuk',
|
||||
'frekuensi_pemupukan' => 'frekuensi pemupukan',
|
||||
'frekuensi_pemupukan_lainnya' => 'frekuensi pemupukan lainnya',
|
||||
'estimasi_dosis_pupuk_organik' => 'estimasi dosis pupuk organik',
|
||||
'estimasi_dosis_pupuk_anorganik' => 'estimasi dosis pupuk anorganik',
|
||||
'waktu_pemberian_pupuk' => 'waktu pemberian pupuk',
|
||||
'waktu_pemberian_pupuk_lainnya' => 'waktu pemberian pupuk lainnya',
|
||||
'cara_pemberian_pupuk' => 'cara pemberian pupuk',
|
||||
'cara_pemberian_pupuk_lainnya' => 'cara pemberian pupuk lainnya',
|
||||
|
||||
// 2.5 Pengendalian OPT
|
||||
'metode_penanganan_hama_penyakit' => 'metode penanganan hama dan penyakit',
|
||||
'jenis_hama' => 'jenis hama',
|
||||
'jenis_penyakit' => 'jenis penyakit',
|
||||
'intensitas_serangan' => 'intensitas serangan',
|
||||
'waktu_kemunculan_terparah' => 'waktu kemunculan terparah',
|
||||
'metode_paling_sering_dilakukan' => 'metode yang paling sering dilakukan',
|
||||
'volume_obat_obatan_permusim' => 'volume obat-obatan per musim',
|
||||
|
||||
// 2.6 Sanitasi Kebun
|
||||
'frekuensi_sanitasi_lahan' => 'frekuensi sanitasi lahan',
|
||||
'penanganan_sisa_buah_ranting' => 'penanganan sisa buah dan ranting',
|
||||
'penanganan_gulma' => 'penanganan gulma',
|
||||
|
||||
// 2.7 Pengelolaan Air & Irigasi
|
||||
'kondisi_pengelolaan_air_irigasi' => 'kondisi pengelolaan air dan irigasi',
|
||||
'sumber_air' => 'sumber air',
|
||||
'sumber_air_lainnya' => 'sumber air lainnya',
|
||||
'sistem_irigasi' => 'sistem irigasi',
|
||||
'sistem_irigasi_lainnya' => 'sistem irigasi lainnya',
|
||||
'kebutuhan_air_permusim' => 'kebutuhan air per musim',
|
||||
'kebiasaan_konservasi_tanah' => 'kebiasaan konservasi tanah',
|
||||
'kebiasaan_konservasi_tanah.*' => 'pilihan kebiasaan konservasi tanah',
|
||||
'pemahaman_manfaat_konservasi' => 'pemahaman manfaat konservasi',
|
||||
|
||||
// Biaya Produksi
|
||||
'upah_tenaga_kerja' => 'upah tenaga kerja',
|
||||
'biaya_bibit' => 'biaya bibit',
|
||||
'biaya_pupuk' => 'biaya pupuk',
|
||||
'biaya_pestisida' => 'biaya pestisida',
|
||||
'biaya_sewa_alat' => 'biaya sewa alat',
|
||||
'biaya_penyediaan_air' => 'biaya penyediaan air',
|
||||
'biaya_lainnya' => 'biaya lainnya',
|
||||
'total_estimasi_biaya_produksi' => 'total estimasi biaya produksi',
|
||||
|
||||
// Panen
|
||||
'dasar_penentuan_panen' => 'dasar penentuan panen',
|
||||
'frekuensi_panen_pertahun' => 'frekuensi panen per tahun',
|
||||
'bulan_panen_utama' => 'bulan panen utama',
|
||||
'hasil_komoditas_utama_permusim' => 'hasil komoditas utama per musim',
|
||||
'hasil_komoditas_lainnya_permusim' => 'hasil komoditas lainnya per musim',
|
||||
'disimpan_untuk_sendiri' => 'disimpan untuk sendiri',
|
||||
'hasil_panen_disimpan' => 'hasil panen yang disimpan',
|
||||
'tujuan_disimpan' => 'tujuan disimpan',
|
||||
|
||||
// Sortasi & Reject
|
||||
'praktik_sortasi' => 'praktik sortasi',
|
||||
'bentuk_sortasi' => 'bentuk sortasi',
|
||||
'tingkat_reject' => 'tingkat reject',
|
||||
'hasil_panen_reject' => 'hasil panen reject',
|
||||
'tindakan_hasil_reject' => 'tindakan terhadap hasil reject',
|
||||
|
||||
// Biaya Panen
|
||||
'upah_tenaga_panen' => 'upah tenaga panen',
|
||||
'biaya_pengangkutan' => 'biaya pengangkutan',
|
||||
'biaya_wadah_kemasan' => 'biaya wadah kemasan',
|
||||
'biaya_sewa_alat_panen' => 'biaya sewa alat panen',
|
||||
'biaya_panen_lainnya' => 'biaya panen lainnya',
|
||||
'total_estimasi_biaya_panen' => 'total estimasi biaya panen',
|
||||
|
||||
// Kehilangan Hasil
|
||||
'estimasi_kehilangan_akibat_opt' => 'estimasi kehilangan akibat OPT',
|
||||
'estimasi_kehilangan_akibat_hama' => 'estimasi kehilangan akibat hama',
|
||||
]);
|
||||
$dataPraktikBudidaya = [];
|
||||
$dataSurveyPanen = [];
|
||||
|
||||
$petani = Petani::findOrFail($petaniId);
|
||||
|
||||
@@ -372,11 +551,13 @@ class PraktikBudidayaController extends Controller
|
||||
$teknik_pemangkasan[] = $request->teknik_pemangkasan_lainnya;
|
||||
}
|
||||
}
|
||||
$data = [
|
||||
$teknikPemangkasan = array_values($teknik_pemangkasan);
|
||||
|
||||
$dataPraktikBudidaya = [
|
||||
'tenaga_kerja' => $validatedData['tenaga_kerja'],
|
||||
'frekuensi_pemangkasan_utama' => $validatedData['frekuensi_pemangkasan_komoditas_utama'],
|
||||
|
||||
'teknik_pemangkasan' => array_values($teknikPemangkasan),
|
||||
'teknik_pemangkasan' => $teknikPemangkasan,
|
||||
|
||||
'frekuensi_pemangkasan_penaung' => $validatedData['frekuensi_pemangkasan_pohon_penaung'],
|
||||
'penyerbukan_manual' => $validatedData['penyerbukan_manual'] ?? null,
|
||||
@@ -393,7 +574,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 +594,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_obat_obatan' => $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.');
|
||||
}
|
||||
|
||||
@@ -3,15 +3,44 @@
|
||||
namespace App\Http\Controllers\Web\Produktivitas;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Enums\KategoriPendapatanKomoditas;
|
||||
use App\Enums\PeriodePendapatan;
|
||||
use App\Enums\PihakMembantuKonflik;
|
||||
use App\Enums\SkorKecukupanPenghasilan;
|
||||
use App\Enums\SkorKejelasanStatusLahan;
|
||||
use App\Enums\SkorKemampuanMenabung;
|
||||
use App\Enums\SkorPeriodePaceklik;
|
||||
use App\Enums\StatusKepemilikanLahanSosialEkonomi;
|
||||
use App\Enums\StatusKonflik;
|
||||
use App\Enums\SosialEkonomi\AlasanKreditDitolak;
|
||||
use App\Enums\SosialEkonomi\BisaBeliPupukBersubsidi;
|
||||
use App\Enums\SosialEkonomi\JenisAsetProduktif;
|
||||
use App\Enums\SosialEkonomi\KategoriPendapatanKomoditas;
|
||||
use App\Enums\SosialEkonomi\KemauanIkutProgram;
|
||||
use App\Enums\SosialEkonomi\KemauanMencobaPraktikBaru;
|
||||
use App\Enums\SosialEkonomi\KeaktifanPertemuanKelompok;
|
||||
use App\Enums\SosialEkonomi\KedekatanSesamaAnggota;
|
||||
use App\Enums\SosialEkonomi\KebebasanMemilihPembeli;
|
||||
use App\Enums\SosialEkonomi\KeterikatanHutangPanen;
|
||||
use App\Enums\SosialEkonomi\KeterlibatanProgramKeuanganFormal;
|
||||
use App\Enums\SosialEkonomi\KondisiAsetProduktif;
|
||||
use App\Enums\SosialEkonomi\ManfaatKelompokTani;
|
||||
use App\Enums\SosialEkonomi\MinatPembeliHargaStabil;
|
||||
use App\Enums\SosialEkonomi\OrientasiRencanaJangkaPanjang;
|
||||
use App\Enums\SosialEkonomi\PanutanPetaniSukses;
|
||||
use App\Enums\SosialEkonomi\PemahamanMutuHarga;
|
||||
use App\Enums\SosialEkonomi\PengetahuanHargaHasilOlah;
|
||||
use App\Enums\SosialEkonomi\PengalamanKreditKebun;
|
||||
use App\Enums\SosialEkonomi\PeriodePendapatan;
|
||||
use App\Enums\SosialEkonomi\PeranDalamKelompok;
|
||||
use App\Enums\SosialEkonomi\PernahBantuanNgoPerusahaan;
|
||||
use App\Enums\SosialEkonomi\PernahJualHargaLebihTinggi;
|
||||
use App\Enums\SosialEkonomi\PinjamanTokohAdatPanen;
|
||||
use App\Enums\SosialEkonomi\PihakMembantuKonflik;
|
||||
use App\Enums\SosialEkonomi\PraktikIjon;
|
||||
use App\Enums\SosialEkonomi\SkorKecukupanPenghasilan;
|
||||
use App\Enums\SosialEkonomi\SkorKejelasanStatusLahan;
|
||||
use App\Enums\SosialEkonomi\SkorKemampuanMenabung;
|
||||
use App\Enums\SosialEkonomi\SkorPeriodePaceklik;
|
||||
use App\Enums\SosialEkonomi\StatusKartuTani;
|
||||
use App\Enums\SosialEkonomi\StatusKepemilikanLahanSosialEkonomi;
|
||||
use App\Enums\SosialEkonomi\StatusKonflik;
|
||||
use App\Enums\SosialEkonomi\StatusProgramKeuanganFormal;
|
||||
use App\Enums\SosialEkonomi\StatusRekeningTabungan;
|
||||
use App\Enums\SosialEkonomi\TekananJualSegera;
|
||||
use App\Enums\SosialEkonomi\TerdaftarKelompokTani;
|
||||
use App\Enums\SosialEkonomi\UsahaMutuTambahanHarga;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
use App\Models\Pertanian\Lahan;
|
||||
use App\Models\Pertanian\Petani;
|
||||
@@ -35,20 +64,14 @@ class SosialEkonomiController extends Controller
|
||||
->where('petani_id', $petaniId)
|
||||
->first();
|
||||
|
||||
$pendapatanKomoditas = $sosialEkonomi?->pendapatanKomoditas ?? collect();
|
||||
$pendapatanKomoditasUtama = $pendapatanKomoditas->where('kategori', 'utama')->values();
|
||||
$pendapatanKomoditasLainnya = $pendapatanKomoditas->where('kategori', 'lainnya')->values();
|
||||
$pendapatanLuarPertanian = $sosialEkonomi?->pendapatanLuarPertanian?->values() ?? collect();
|
||||
$komoditasPetani = $this->komoditasPetani($petani);
|
||||
|
||||
return view('produktivitas.petani.sosial-ekonomi.index', array_merge(compact(
|
||||
'petani',
|
||||
'sosialEkonomi',
|
||||
'pendapatanKomoditasUtama',
|
||||
'pendapatanKomoditasLainnya',
|
||||
'pendapatanLuarPertanian',
|
||||
'komoditasPetani'
|
||||
), $this->sosialEkonomiOptions()));
|
||||
return $this->formView(
|
||||
request(),
|
||||
$petani,
|
||||
$sosialEkonomi,
|
||||
$sosialEkonomi
|
||||
? 'produktivitas.petani.sosial-ekonomi.edit'
|
||||
: 'produktivitas.petani.sosial-ekonomi.index'
|
||||
);
|
||||
}
|
||||
|
||||
public function index(Request $request, Petani $petani)
|
||||
@@ -163,7 +186,7 @@ class SosialEkonomiController extends Controller
|
||||
$validated = $this->validateData($request, $sosialEkonomi->id);
|
||||
|
||||
$sosialEkonomi = DB::transaction(function () use ($request, $validated, $sosialEkonomi) {
|
||||
$sosialEkonomi->update($this->sosialEkonomiPayload($validated) + [
|
||||
$sosialEkonomi->update($this->sosialEkonomiPayload($validated, $sosialEkonomi) + [
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
|
||||
@@ -212,14 +235,17 @@ class SosialEkonomiController extends Controller
|
||||
|
||||
private function validateData(Request $request, ?int $id = null): array
|
||||
{
|
||||
return $request->validate([
|
||||
$section = $request->input('form_section');
|
||||
|
||||
$rules = [
|
||||
'form_section' => ['required', 'string', Rule::in(['utama', 'sosial_budaya', 'keanggotaan_kelompok', 'akses_keuangan', 'keterikatan_hutang'])],
|
||||
'uid' => [
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
Rule::unique('sosial_ekonomi', 'uid')->ignore($id),
|
||||
],
|
||||
'petani_id' => ['nullable', 'exists:petani,id'],
|
||||
'petani_id' => ['required', 'exists:petani,id'],
|
||||
'jumlah_tanggungan' => ['nullable', 'integer', 'min:0'],
|
||||
'anak_masih_sekolah' => ['nullable', 'integer', 'min:0'],
|
||||
'yang_ikut_bekerja' => ['nullable', 'integer', 'min:0'],
|
||||
@@ -240,6 +266,67 @@ class SosialEkonomiController extends Controller
|
||||
'pihak_membantu_konflik_nama' => ['nullable', 'string', 'max:255'],
|
||||
'tahun_bantuan_konflik' => ['nullable', 'integer', 'digits:4'],
|
||||
'status_konflik' => ['nullable', 'string', Rule::in(StatusKonflik::values())],
|
||||
'kemauan_mencoba_praktik_baru' => ['nullable', 'integer', Rule::in(KemauanMencobaPraktikBaru::values())],
|
||||
'alasan_mencoba_praktik_baru' => ['nullable', 'string'],
|
||||
'hambatan_mengubah_cara_bertani' => ['nullable', 'string'],
|
||||
'pemahaman_mutu_harga' => ['nullable', 'integer', Rule::in(PemahamanMutuHarga::values())],
|
||||
'contoh_pemahaman_mutu_harga' => ['nullable', 'string'],
|
||||
'pengetahuan_harga_hasil_olah' => ['nullable', 'string', Rule::in(PengetahuanHargaHasilOlah::values())],
|
||||
'pernah_jual_harga_lebih_tinggi' => ['nullable', 'string', Rule::in(PernahJualHargaLebihTinggi::values())],
|
||||
'penyebab_harga_lebih_tinggi' => ['nullable', 'string'],
|
||||
'usaha_mutu_tambahan_harga' => ['nullable', 'string', Rule::in(UsahaMutuTambahanHarga::values())],
|
||||
'alasan_usaha_mutu_tambahan_harga' => ['nullable', 'string'],
|
||||
'panutan_petani_sukses' => ['nullable', 'integer', Rule::in(PanutanPetaniSukses::values())],
|
||||
'nama_lokasi_panutan' => ['nullable', 'string'],
|
||||
'kemauan_ikut_program' => ['nullable', 'integer', Rule::in(KemauanIkutProgram::values())],
|
||||
'harapan_program' => ['nullable', 'string'],
|
||||
'orientasi_rencana_jangka_panjang' => ['nullable', 'integer', Rule::in(OrientasiRencanaJangkaPanjang::values())],
|
||||
'rencana_jangka_panjang' => ['nullable', 'string'],
|
||||
'terdaftar_kelompok_tani' => ['nullable', 'string', Rule::in(TerdaftarKelompokTani::values())],
|
||||
'nama_kelompok_tani' => ['nullable', 'string', 'max:255'],
|
||||
'lama_bergabung_kelompok_tahun' => ['nullable', 'integer', 'min:0'],
|
||||
'kedekatan_sesama_anggota' => ['nullable', 'string', Rule::in(KedekatanSesamaAnggota::values())],
|
||||
'keaktifan_pertemuan_kelompok' => ['nullable', 'integer', Rule::in(KeaktifanPertemuanKelompok::values())],
|
||||
'topik_biasa_dibahas' => ['nullable', 'string'],
|
||||
'peran_dalam_kelompok' => ['nullable', 'integer', Rule::in(PeranDalamKelompok::values())],
|
||||
'manfaat_kelompok_tani' => ['nullable', 'integer', Rule::in(ManfaatKelompokTani::values())],
|
||||
'status_kartu_tani' => ['nullable', 'string', Rule::in(StatusKartuTani::values())],
|
||||
'bisa_beli_pupuk_bersubsidi' => ['nullable', 'string', Rule::in(BisaBeliPupukBersubsidi::values())],
|
||||
'manfaat_lain_kartu_tani' => ['nullable', 'string'],
|
||||
'status_rekening_tabungan' => ['nullable', 'integer', Rule::in(StatusRekeningTabungan::values())],
|
||||
'nama_bank' => ['nullable', 'string', 'max:255'],
|
||||
'pengalaman_kredit_kebun' => ['nullable', 'integer', Rule::in(PengalamanKreditKebun::values())],
|
||||
'alasan_kredit_ditolak' => ['nullable', 'array'],
|
||||
'alasan_kredit_ditolak.*' => ['string', Rule::in(AlasanKreditDitolak::values())],
|
||||
'alasan_kredit_ditolak_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'kondisi_aset_produktif' => ['nullable', 'integer', Rule::in(KondisiAsetProduktif::values())],
|
||||
'jenis_aset_produktif' => ['nullable', 'array'],
|
||||
'jenis_aset_produktif.*' => ['string', Rule::in(JenisAsetProduktif::values())],
|
||||
'jenis_aset_produktif_lainnya' => ['nullable', 'string', 'max:255'],
|
||||
'keterangan_kondisi_aset' => ['nullable', 'string'],
|
||||
'keterlibatan_program_keuangan_formal' => ['nullable', 'integer', Rule::in(KeterlibatanProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal' => ['nullable', 'array'],
|
||||
'status_program_keuangan_formal.*' => ['nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'program_keuangan_formal_lainnya_nama' => ['nullable', 'string', 'max:255'],
|
||||
'pernah_bantuan_ngo_perusahaan' => ['nullable', 'string', Rule::in(PernahBantuanNgoPerusahaan::values())],
|
||||
'detail_bantuan_ngo_perusahaan' => ['nullable', 'array'],
|
||||
'detail_bantuan_ngo_perusahaan.*.nama_lembaga' => ['nullable', 'string', 'max:255'],
|
||||
'detail_bantuan_ngo_perusahaan.*.bentuk_bantuan' => ['nullable', 'string', 'max:255'],
|
||||
'detail_bantuan_ngo_perusahaan.*.frekuensi' => ['nullable', 'integer', 'min:0'],
|
||||
'detail_bantuan_ngo_perusahaan.*.tahun_terakhir' => ['nullable', 'integer', 'digits:4'],
|
||||
'keterikatan_hutang_panen' => ['nullable', 'integer', Rule::in(KeterikatanHutangPanen::values())],
|
||||
'pinjaman_tokoh_adat_panen' => ['nullable', 'string', Rule::in(PinjamanTokohAdatPanen::values())],
|
||||
'keterangan_pinjaman_tokoh_adat' => ['nullable', 'string'],
|
||||
'total_hutang_rupiah' => ['nullable', 'integer', 'min:0'],
|
||||
'total_hutang_setara_kg_panen' => ['nullable', 'numeric', 'min:0'],
|
||||
'total_hutang_tidak_bersedia' => ['nullable', 'boolean'],
|
||||
'praktik_ijon' => ['nullable', 'integer', Rule::in(PraktikIjon::values())],
|
||||
'tekanan_jual_segera' => ['nullable', 'string', Rule::in(TekananJualSegera::values())],
|
||||
'penyebab_tekanan_jual_segera' => ['nullable', 'string'],
|
||||
'kebebasan_memilih_pembeli' => ['nullable', 'integer', Rule::in(KebebasanMemilihPembeli::values())],
|
||||
'alasan_tidak_bebas_memilih_pembeli' => ['nullable', 'string'],
|
||||
'minat_pembeli_harga_stabil' => ['nullable', 'string', Rule::in(MinatPembeliHargaStabil::values())],
|
||||
'alasan_minat_pembeli_harga_stabil' => ['nullable', 'string'],
|
||||
|
||||
'pendapatan_komoditas' => ['nullable', 'array'],
|
||||
'pendapatan_komoditas.*.kategori' => ['required_with:pendapatan_komoditas', 'string', Rule::in(KategoriPendapatanKomoditas::values())],
|
||||
@@ -250,18 +337,209 @@ class SosialEkonomiController extends Controller
|
||||
'pendapatan_luar_pertanian' => ['nullable', 'array'],
|
||||
'pendapatan_luar_pertanian.*.jenis_pekerjaan' => ['nullable', 'string', 'max:255'],
|
||||
'pendapatan_luar_pertanian.*.estimasi_per_bulan' => ['nullable', 'integer', 'min:0'],
|
||||
]);
|
||||
];
|
||||
|
||||
if ($section === 'utama') {
|
||||
$rules = array_merge($rules, [
|
||||
'jumlah_tanggungan' => ['required', 'integer', 'min:0'],
|
||||
'anak_masih_sekolah' => ['required', 'integer', 'min:0'],
|
||||
'yang_ikut_bekerja' => ['required', 'integer', 'min:0'],
|
||||
'skor_periode_paceklik' => ['required', 'integer', Rule::in(SkorPeriodePaceklik::values())],
|
||||
'bulan_paceklik' => ['required', 'string', 'max:255'],
|
||||
'sumber_penghasilan_paceklik' => ['required', 'string'],
|
||||
'total_estimasi_biaya_kebun_per_musim' => ['required', 'integer', 'min:0'],
|
||||
'skor_kemampuan_menabung' => ['required', 'integer', Rule::in(SkorKemampuanMenabung::values())],
|
||||
'estimasi_tabungan_per_bulan' => ['required', 'integer', 'min:0'],
|
||||
'skor_kecukupan_penghasilan' => ['required', 'integer', Rule::in(SkorKecukupanPenghasilan::values())],
|
||||
'alasan_kecukupan_penghasilan' => ['required', 'string'],
|
||||
'status_kepemilikan_lahan' => ['required', 'string', Rule::in(StatusKepemilikanLahanSosialEkonomi::values())],
|
||||
'skor_kejelasan_status_lahan' => ['required', 'integer', Rule::in(SkorKejelasanStatusLahan::values())],
|
||||
'ada_sertifikat_dokumen' => ['required', 'boolean'],
|
||||
'ada_sengketa' => ['required', 'boolean'],
|
||||
'keterangan_sengketa' => ['required_if:ada_sengketa,1', 'nullable', 'string'],
|
||||
'pihak_membantu_konflik' => ['required_if:ada_sengketa,1', 'nullable', 'string', Rule::in(PihakMembantuKonflik::values())],
|
||||
'pihak_membantu_konflik_nama' => ['required_if:pihak_membantu_konflik,' . PihakMembantuKonflik::ADA->value, 'nullable', 'string', 'max:255'],
|
||||
'tahun_bantuan_konflik' => ['required_if:pihak_membantu_konflik,' . PihakMembantuKonflik::ADA->value, 'nullable', 'integer', 'digits:4'],
|
||||
'status_konflik' => ['required_if:ada_sengketa,1', 'nullable', 'string', Rule::in(StatusKonflik::values())],
|
||||
]);
|
||||
}
|
||||
|
||||
if ($section === 'sosial_budaya') {
|
||||
$rules = array_merge($rules, [
|
||||
'kemauan_mencoba_praktik_baru' => ['required', 'integer', Rule::in(KemauanMencobaPraktikBaru::values())],
|
||||
'alasan_mencoba_praktik_baru' => ['required', 'string'],
|
||||
'hambatan_mengubah_cara_bertani' => ['required', 'string'],
|
||||
'pemahaman_mutu_harga' => ['required', 'integer', Rule::in(PemahamanMutuHarga::values())],
|
||||
'contoh_pemahaman_mutu_harga' => ['required', 'string'],
|
||||
'pengetahuan_harga_hasil_olah' => ['required', 'string', Rule::in(PengetahuanHargaHasilOlah::values())],
|
||||
'pernah_jual_harga_lebih_tinggi' => ['required', 'string', Rule::in(PernahJualHargaLebihTinggi::values())],
|
||||
'penyebab_harga_lebih_tinggi' => ['required_if:pernah_jual_harga_lebih_tinggi,' . PernahJualHargaLebihTinggi::PERNAH->value, 'nullable', 'string'],
|
||||
'usaha_mutu_tambahan_harga' => ['required', 'string', Rule::in(UsahaMutuTambahanHarga::values())],
|
||||
'alasan_usaha_mutu_tambahan_harga' => ['required_if:usaha_mutu_tambahan_harga,' . UsahaMutuTambahanHarga::TIDAK_SEBANDING_TERLALU_BANYAK_USAHA->value, 'nullable', 'string'],
|
||||
'panutan_petani_sukses' => ['required', 'integer', Rule::in(PanutanPetaniSukses::values())],
|
||||
'nama_lokasi_panutan' => ['required_unless:panutan_petani_sukses,' . PanutanPetaniSukses::TIDAK_ADA->value, 'nullable', 'string'],
|
||||
'kemauan_ikut_program' => ['required', 'integer', Rule::in(KemauanIkutProgram::values())],
|
||||
'harapan_program' => ['required', 'string'],
|
||||
'orientasi_rencana_jangka_panjang' => ['required', 'integer', Rule::in(OrientasiRencanaJangkaPanjang::values())],
|
||||
'rencana_jangka_panjang' => ['required', 'string'],
|
||||
]);
|
||||
}
|
||||
|
||||
if ($section === 'keanggotaan_kelompok') {
|
||||
$rules = array_merge($rules, [
|
||||
'terdaftar_kelompok_tani' => ['nullable', 'string', Rule::in(TerdaftarKelompokTani::values())],
|
||||
'nama_kelompok_tani' => ['required_if:terdaftar_kelompok_tani,' . TerdaftarKelompokTani::YA->value, 'nullable', 'string', 'max:255'],
|
||||
'lama_bergabung_kelompok_tahun' => ['required_if:terdaftar_kelompok_tani,' . TerdaftarKelompokTani::YA->value, 'nullable', 'integer', 'min:0'],
|
||||
'kedekatan_sesama_anggota' => ['required_if:terdaftar_kelompok_tani,' . TerdaftarKelompokTani::YA->value, 'nullable', 'string', Rule::in(KedekatanSesamaAnggota::values())],
|
||||
'keaktifan_pertemuan_kelompok' => ['required', 'integer', Rule::in(KeaktifanPertemuanKelompok::values())],
|
||||
'topik_biasa_dibahas' => ['required', 'string'],
|
||||
'peran_dalam_kelompok' => ['required', 'integer', Rule::in(PeranDalamKelompok::values())],
|
||||
'manfaat_kelompok_tani' => ['required', 'integer', Rule::in(ManfaatKelompokTani::values())],
|
||||
'status_kartu_tani' => ['nullable', 'string', Rule::in(StatusKartuTani::values())],
|
||||
'bisa_beli_pupuk_bersubsidi' => ['nullable', 'string', Rule::in(BisaBeliPupukBersubsidi::values())],
|
||||
'manfaat_lain_kartu_tani' => ['nullable', 'string'],
|
||||
]);
|
||||
}
|
||||
|
||||
if ($section === 'akses_keuangan') {
|
||||
$pengalamanKredit = (int) $request->input('pengalaman_kredit_kebun');
|
||||
$kondisiAset = (int) $request->input('kondisi_aset_produktif');
|
||||
$tidakPernahMenerimaProgram = (int) $request->input('keterlibatan_program_keuangan_formal') === KeterlibatanProgramKeuanganFormal::TIDAK_PERNAH_MENERIMA->value;
|
||||
|
||||
$rules = array_merge($rules, [
|
||||
'status_rekening_tabungan' => ['required', 'integer', Rule::in(StatusRekeningTabungan::values())],
|
||||
'nama_bank' => [
|
||||
Rule::requiredIf(fn () => (int) $request->input('status_rekening_tabungan') > StatusRekeningTabungan::TIDAK_PUNYA_REKENING->value),
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
],
|
||||
'pengalaman_kredit_kebun' => ['required', 'integer', Rule::in(PengalamanKreditKebun::values())],
|
||||
'alasan_kredit_ditolak' => [
|
||||
Rule::requiredIf(fn () => in_array($pengalamanKredit, [
|
||||
PengalamanKreditKebun::TIDAK_PERNAH_MENCOBA->value,
|
||||
PengalamanKreditKebun::PERNAH_COBA_DITOLAK->value,
|
||||
], true)),
|
||||
'nullable',
|
||||
'array',
|
||||
],
|
||||
'alasan_kredit_ditolak.*' => ['string', Rule::in(AlasanKreditDitolak::values())],
|
||||
'alasan_kredit_ditolak_lainnya' => [
|
||||
Rule::requiredIf(fn () => in_array(AlasanKreditDitolak::LAINNYA->value, $request->input('alasan_kredit_ditolak', []), true)),
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
],
|
||||
'kondisi_aset_produktif' => ['required', 'integer', Rule::in(KondisiAsetProduktif::values())],
|
||||
'jenis_aset_produktif' => [
|
||||
Rule::requiredIf(fn () => $kondisiAset > KondisiAsetProduktif::TIDAK_ADA->value),
|
||||
'nullable',
|
||||
'array',
|
||||
],
|
||||
'jenis_aset_produktif.*' => ['string', Rule::in(JenisAsetProduktif::values())],
|
||||
'jenis_aset_produktif_lainnya' => [
|
||||
Rule::requiredIf(fn () => in_array(JenisAsetProduktif::LAINNYA->value, $request->input('jenis_aset_produktif', []), true)),
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
],
|
||||
'keterangan_kondisi_aset' => [
|
||||
Rule::requiredIf(fn () => $kondisiAset > KondisiAsetProduktif::TIDAK_ADA->value),
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
'keterlibatan_program_keuangan_formal' => ['required', 'integer', Rule::in(KeterlibatanProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'array'],
|
||||
'status_program_keuangan_formal.pkh' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.blt' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.kur' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.kredit_koperasi_resmi' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.credit_union_cu' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.pinjaman_bumdes' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.modal_hibah_dinas_pertanian' => [Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram), 'nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'status_program_keuangan_formal.lainnya' => ['nullable', 'string', Rule::in(StatusProgramKeuanganFormal::values())],
|
||||
'program_keuangan_formal_lainnya_nama' => [
|
||||
Rule::requiredIf(fn () => !$tidakPernahMenerimaProgram && filled($request->input('status_program_keuangan_formal.lainnya'))),
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
],
|
||||
'pernah_bantuan_ngo_perusahaan' => ['required', 'string', Rule::in(PernahBantuanNgoPerusahaan::values())],
|
||||
'detail_bantuan_ngo_perusahaan' => [
|
||||
Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value),
|
||||
'nullable',
|
||||
'array',
|
||||
],
|
||||
'detail_bantuan_ngo_perusahaan.0.nama_lembaga' => [
|
||||
Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value),
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
],
|
||||
'detail_bantuan_ngo_perusahaan.0.bentuk_bantuan' => [
|
||||
Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value),
|
||||
'nullable',
|
||||
'string',
|
||||
'max:255',
|
||||
],
|
||||
'detail_bantuan_ngo_perusahaan.0.frekuensi' => [
|
||||
Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value),
|
||||
'nullable',
|
||||
'integer',
|
||||
'min:0',
|
||||
],
|
||||
'detail_bantuan_ngo_perusahaan.0.tahun_terakhir' => [
|
||||
Rule::requiredIf(fn () => $request->input('pernah_bantuan_ngo_perusahaan') === PernahBantuanNgoPerusahaan::PERNAH->value),
|
||||
'nullable',
|
||||
'integer',
|
||||
'digits:4',
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
if ($section === 'keterikatan_hutang') {
|
||||
$totalHutangTidakBersedia = $request->boolean('total_hutang_tidak_bersedia');
|
||||
$kebebasanMemilihPembeli = (int) $request->input('kebebasan_memilih_pembeli');
|
||||
|
||||
$rules = array_merge($rules, [
|
||||
'keterikatan_hutang_panen' => ['required', 'integer', Rule::in(KeterikatanHutangPanen::values())],
|
||||
'pinjaman_tokoh_adat_panen' => ['required', 'string', Rule::in(PinjamanTokohAdatPanen::values())],
|
||||
'keterangan_pinjaman_tokoh_adat' => ['required_if:pinjaman_tokoh_adat_panen,' . PinjamanTokohAdatPanen::ADA->value, 'nullable', 'string'],
|
||||
'total_hutang_rupiah' => [
|
||||
Rule::requiredIf(fn () => !$totalHutangTidakBersedia && !filled($request->input('total_hutang_setara_kg_panen'))),
|
||||
'nullable',
|
||||
'integer',
|
||||
'min:0',
|
||||
],
|
||||
'total_hutang_setara_kg_panen' => ['nullable', 'numeric', 'min:0'],
|
||||
'total_hutang_tidak_bersedia' => ['nullable', 'boolean'],
|
||||
'praktik_ijon' => ['required', 'integer', Rule::in(PraktikIjon::values())],
|
||||
'tekanan_jual_segera' => ['required', 'string', Rule::in(TekananJualSegera::values())],
|
||||
'penyebab_tekanan_jual_segera' => ['required_if:tekanan_jual_segera,' . TekananJualSegera::ADA->value, 'nullable', 'string'],
|
||||
'kebebasan_memilih_pembeli' => ['required', 'integer', Rule::in(KebebasanMemilihPembeli::values())],
|
||||
'alasan_tidak_bebas_memilih_pembeli' => [
|
||||
Rule::requiredIf(fn () => $kebebasanMemilihPembeli > 0 && $kebebasanMemilihPembeli < KebebasanMemilihPembeli::CUKUP_BEBAS_SESEKALI_PINDAH->value),
|
||||
'nullable',
|
||||
'string',
|
||||
],
|
||||
'minat_pembeli_harga_stabil' => ['required', 'string', Rule::in(MinatPembeliHargaStabil::values())],
|
||||
'alasan_minat_pembeli_harga_stabil' => ['required', 'string'],
|
||||
]);
|
||||
}
|
||||
|
||||
return $request->validate($rules, $this->validationMessages(), $this->validationAttributes());
|
||||
}
|
||||
|
||||
private function sosialEkonomiPayload(array $validated): array
|
||||
private function sosialEkonomiPayload(array $validated, ?SosialEkonomi $sosialEkonomi = null): array
|
||||
{
|
||||
$payload = collect($validated)
|
||||
->except(['pendapatan_komoditas', 'pendapatan_luar_pertanian'])
|
||||
->merge([
|
||||
'uid' => $validated['uid'] ?? 'SEK-' . Str::uuid(),
|
||||
])
|
||||
->except(['form_section', 'pendapatan_komoditas', 'pendapatan_luar_pertanian'])
|
||||
->all();
|
||||
|
||||
if (!$sosialEkonomi && !array_key_exists('uid', $payload)) {
|
||||
$payload['uid'] = 'SEK-' . Str::uuid();
|
||||
}
|
||||
|
||||
$payload = $this->normalizeSkorPayload($payload);
|
||||
|
||||
if (($payload['pihak_membantu_konflik'] ?? null) === PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value) {
|
||||
@@ -269,9 +547,241 @@ class SosialEkonomiController extends Controller
|
||||
$payload['tahun_bantuan_konflik'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('pernah_jual_harga_lebih_tinggi', $payload)
|
||||
&& ($payload['pernah_jual_harga_lebih_tinggi'] ?? null) !== PernahJualHargaLebihTinggi::PERNAH->value
|
||||
) {
|
||||
$payload['penyebab_harga_lebih_tinggi'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('panutan_petani_sukses', $payload)
|
||||
&& (int) ($payload['panutan_petani_sukses'] ?? 0) === PanutanPetaniSukses::TIDAK_ADA->value
|
||||
) {
|
||||
$payload['nama_lokasi_panutan'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('terdaftar_kelompok_tani', $payload)
|
||||
&& ($payload['terdaftar_kelompok_tani'] ?? null) === TerdaftarKelompokTani::TIDAK->value
|
||||
) {
|
||||
$payload['nama_kelompok_tani'] = null;
|
||||
$payload['lama_bergabung_kelompok_tahun'] = null;
|
||||
$payload['kedekatan_sesama_anggota'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('status_rekening_tabungan', $payload)
|
||||
&& (int) ($payload['status_rekening_tabungan'] ?? 0) === StatusRekeningTabungan::TIDAK_PUNYA_REKENING->value
|
||||
) {
|
||||
$payload['nama_bank'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('pengalaman_kredit_kebun', $payload)
|
||||
&& !in_array((int) ($payload['pengalaman_kredit_kebun'] ?? 0), [
|
||||
PengalamanKreditKebun::TIDAK_PERNAH_MENCOBA->value,
|
||||
PengalamanKreditKebun::PERNAH_COBA_DITOLAK->value,
|
||||
], true)
|
||||
) {
|
||||
$payload['alasan_kredit_ditolak'] = null;
|
||||
$payload['alasan_kredit_ditolak_lainnya'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('alasan_kredit_ditolak', $payload)
|
||||
&& !in_array(AlasanKreditDitolak::LAINNYA->value, $payload['alasan_kredit_ditolak'] ?? [], true)
|
||||
) {
|
||||
$payload['alasan_kredit_ditolak_lainnya'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('kondisi_aset_produktif', $payload)
|
||||
&& (int) ($payload['kondisi_aset_produktif'] ?? 0) === KondisiAsetProduktif::TIDAK_ADA->value
|
||||
) {
|
||||
$payload['jenis_aset_produktif'] = null;
|
||||
$payload['jenis_aset_produktif_lainnya'] = null;
|
||||
$payload['keterangan_kondisi_aset'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('jenis_aset_produktif', $payload)
|
||||
&& !in_array(JenisAsetProduktif::LAINNYA->value, $payload['jenis_aset_produktif'] ?? [], true)
|
||||
) {
|
||||
$payload['jenis_aset_produktif_lainnya'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('keterlibatan_program_keuangan_formal', $payload)
|
||||
&& (int) ($payload['keterlibatan_program_keuangan_formal'] ?? 0) === KeterlibatanProgramKeuanganFormal::TIDAK_PERNAH_MENERIMA->value
|
||||
) {
|
||||
$payload['status_program_keuangan_formal'] = null;
|
||||
$payload['program_keuangan_formal_lainnya_nama'] = null;
|
||||
}
|
||||
|
||||
if (!filled($payload['status_program_keuangan_formal']['lainnya'] ?? null)) {
|
||||
$payload['program_keuangan_formal_lainnya_nama'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('pernah_bantuan_ngo_perusahaan', $payload)
|
||||
&& ($payload['pernah_bantuan_ngo_perusahaan'] ?? null) === PernahBantuanNgoPerusahaan::TIDAK_PERNAH->value
|
||||
) {
|
||||
$payload['detail_bantuan_ngo_perusahaan'] = null;
|
||||
}
|
||||
|
||||
if (array_key_exists('detail_bantuan_ngo_perusahaan', $payload) && is_array($payload['detail_bantuan_ngo_perusahaan'])) {
|
||||
$payload['detail_bantuan_ngo_perusahaan'] = collect($payload['detail_bantuan_ngo_perusahaan'])
|
||||
->filter(fn ($row) => collect($row)->filter(fn ($value) => filled($value))->isNotEmpty())
|
||||
->values()
|
||||
->all();
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('pinjaman_tokoh_adat_panen', $payload)
|
||||
&& ($payload['pinjaman_tokoh_adat_panen'] ?? null) !== PinjamanTokohAdatPanen::ADA->value
|
||||
) {
|
||||
$payload['keterangan_pinjaman_tokoh_adat'] = null;
|
||||
}
|
||||
|
||||
if (!empty($payload['total_hutang_tidak_bersedia'])) {
|
||||
$payload['total_hutang_rupiah'] = null;
|
||||
$payload['total_hutang_setara_kg_panen'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('tekanan_jual_segera', $payload)
|
||||
&& ($payload['tekanan_jual_segera'] ?? null) !== TekananJualSegera::ADA->value
|
||||
) {
|
||||
$payload['penyebab_tekanan_jual_segera'] = null;
|
||||
}
|
||||
|
||||
if (
|
||||
array_key_exists('kebebasan_memilih_pembeli', $payload)
|
||||
&& (int) ($payload['kebebasan_memilih_pembeli'] ?? 0) >= KebebasanMemilihPembeli::CUKUP_BEBAS_SESEKALI_PINDAH->value
|
||||
) {
|
||||
$payload['alasan_tidak_bebas_memilih_pembeli'] = null;
|
||||
}
|
||||
|
||||
return $payload;
|
||||
}
|
||||
|
||||
private function validationMessages(): array
|
||||
{
|
||||
return [
|
||||
'required' => ':attribute wajib diisi.',
|
||||
'required_if' => ':attribute wajib diisi.',
|
||||
'required_unless' => ':attribute wajib diisi.',
|
||||
'required_with' => ':attribute wajib diisi.',
|
||||
'integer' => ':attribute harus berupa angka.',
|
||||
'numeric' => ':attribute harus berupa angka.',
|
||||
'boolean' => ':attribute harus dipilih.',
|
||||
'min' => ':attribute tidak boleh kurang dari :min.',
|
||||
'max' => ':attribute tidak boleh lebih dari :max karakter.',
|
||||
'digits' => ':attribute harus terdiri dari :digits digit.',
|
||||
'exists' => ':attribute tidak valid.',
|
||||
'in' => ':attribute tidak valid.',
|
||||
'array' => ':attribute harus berupa daftar data.',
|
||||
'string' => ':attribute harus berupa teks.',
|
||||
'unique' => ':attribute sudah digunakan.',
|
||||
];
|
||||
}
|
||||
|
||||
private function validationAttributes(): array
|
||||
{
|
||||
return [
|
||||
'form_section' => 'Bagian form',
|
||||
'petani_id' => 'Petani',
|
||||
'jumlah_tanggungan' => 'Jumlah tanggungan',
|
||||
'anak_masih_sekolah' => 'Anak masih sekolah',
|
||||
'yang_ikut_bekerja' => 'Yang ikut bekerja',
|
||||
'skor_periode_paceklik' => 'Periode paceklik',
|
||||
'bulan_paceklik' => 'Bulan paceklik biasanya',
|
||||
'sumber_penghasilan_paceklik' => 'Sumber penghasilan saat paceklik',
|
||||
'total_estimasi_biaya_kebun_per_musim' => 'Total estimasi biaya kebun per musim',
|
||||
'skor_kemampuan_menabung' => 'Kemampuan menabung',
|
||||
'estimasi_tabungan_per_bulan' => 'Estimasi tabungan per bulan',
|
||||
'skor_kecukupan_penghasilan' => 'Kecukupan penghasilan untuk keluarga',
|
||||
'alasan_kecukupan_penghasilan' => 'Alasan kecukupan penghasilan',
|
||||
'status_kepemilikan_lahan' => 'Status kepemilikan lahan',
|
||||
'skor_kejelasan_status_lahan' => 'Kejelasan status lahan',
|
||||
'ada_sertifikat_dokumen' => 'Ada sertifikat/dokumen',
|
||||
'ada_sengketa' => 'Ada sengketa',
|
||||
'keterangan_sengketa' => 'Keterangan sengketa',
|
||||
'pihak_membantu_konflik' => 'Pihak yang membantu',
|
||||
'pihak_membantu_konflik_nama' => 'Nama pihak',
|
||||
'tahun_bantuan_konflik' => 'Tahun bantuan',
|
||||
'status_konflik' => 'Status konflik',
|
||||
'kemauan_mencoba_praktik_baru' => 'Kemauan mencoba cara baru',
|
||||
'alasan_mencoba_praktik_baru' => 'Alasan mencoba praktik baru',
|
||||
'hambatan_mengubah_cara_bertani' => 'Hambatan utama mengubah cara berkebun',
|
||||
'pemahaman_mutu_harga' => 'Pemahaman mutu vs. harga jual',
|
||||
'contoh_pemahaman_mutu_harga' => 'Contoh/penjelasan petani',
|
||||
'pengetahuan_harga_hasil_olah' => 'Pengetahuan harga hasil olah',
|
||||
'pernah_jual_harga_lebih_tinggi' => 'Pengalaman jual dengan harga lebih tinggi',
|
||||
'penyebab_harga_lebih_tinggi' => 'Penyebab harga lebih tinggi',
|
||||
'usaha_mutu_tambahan_harga' => 'Usaha meningkatkan mutu vs. tambahan harga',
|
||||
'alasan_usaha_mutu_tambahan_harga' => 'Alasan usaha mutu tambahan harga',
|
||||
'panutan_petani_sukses' => 'Panutan di sekitar petani',
|
||||
'nama_lokasi_panutan' => 'Nama dan lokasi panutan',
|
||||
'kemauan_ikut_program' => 'Kemauan ikut program',
|
||||
'harapan_program' => 'Harapan dari program',
|
||||
'orientasi_rencana_jangka_panjang' => 'Orientasi rencana 3-5 tahun ke depan',
|
||||
'rencana_jangka_panjang' => 'Rencana yang akan dilakukan',
|
||||
'terdaftar_kelompok_tani' => 'Status terdaftar di kelompok tani',
|
||||
'nama_kelompok_tani' => 'Nama kelompok',
|
||||
'lama_bergabung_kelompok_tahun' => 'Lama bergabung',
|
||||
'kedekatan_sesama_anggota' => 'Kedekatan dengan sesama anggota',
|
||||
'keaktifan_pertemuan_kelompok' => 'Kehadiran dan keaktifan di pertemuan',
|
||||
'topik_biasa_dibahas' => 'Topik yang biasa dibahas',
|
||||
'peran_dalam_kelompok' => 'Jabatan atau peran di kelompok',
|
||||
'manfaat_kelompok_tani' => 'Manfaat dari kelompok tani',
|
||||
'status_kartu_tani' => 'Status Kartu Tani',
|
||||
'bisa_beli_pupuk_bersubsidi' => 'Kemampuan menggunakan Kartu Tani untuk membeli pupuk bersubsidi',
|
||||
'manfaat_lain_kartu_tani' => 'Manfaat lain setelah daftar Kartu Tani',
|
||||
'status_rekening_tabungan' => 'Status rekening atau tabungan',
|
||||
'nama_bank' => 'Nama bank',
|
||||
'pengalaman_kredit_kebun' => 'Pengalaman kredit untuk kebun',
|
||||
'alasan_kredit_ditolak' => 'Alasan kredit ditolak atau tidak jadi',
|
||||
'alasan_kredit_ditolak.*' => 'Alasan kredit ditolak atau tidak jadi',
|
||||
'alasan_kredit_ditolak_lainnya' => 'Alasan kredit lainnya',
|
||||
'kondisi_aset_produktif' => 'Kondisi aset produktif selain lahan',
|
||||
'jenis_aset_produktif' => 'Jenis aset',
|
||||
'jenis_aset_produktif.*' => 'Jenis aset',
|
||||
'jenis_aset_produktif_lainnya' => 'Jenis aset lainnya',
|
||||
'keterangan_kondisi_aset' => 'Keterangan kondisi aset',
|
||||
'keterlibatan_program_keuangan_formal' => 'Keterlibatan dalam program bantuan',
|
||||
'status_program_keuangan_formal' => 'Status per program',
|
||||
'status_program_keuangan_formal.*' => 'Status per program',
|
||||
'program_keuangan_formal_lainnya_nama' => 'Nama program lainnya',
|
||||
'pernah_bantuan_ngo_perusahaan' => 'Status bantuan NGO atau perusahaan',
|
||||
'detail_bantuan_ngo_perusahaan' => 'Detail bantuan NGO atau perusahaan',
|
||||
'detail_bantuan_ngo_perusahaan.*.nama_lembaga' => 'Nama lembaga',
|
||||
'detail_bantuan_ngo_perusahaan.*.bentuk_bantuan' => 'Bentuk bantuan',
|
||||
'detail_bantuan_ngo_perusahaan.*.frekuensi' => 'Frekuensi bantuan',
|
||||
'detail_bantuan_ngo_perusahaan.*.tahun_terakhir' => 'Tahun terakhir bantuan',
|
||||
'keterikatan_hutang_panen' => 'Hutang yang dikaitkan dengan hasil panen',
|
||||
'pinjaman_tokoh_adat_panen' => 'Pinjaman dari tokoh adat atau mosalaki terkait panen',
|
||||
'keterangan_pinjaman_tokoh_adat' => 'Keterangan pinjaman dari tokoh adat atau mosalaki',
|
||||
'total_hutang_rupiah' => 'Total hutang saat ini',
|
||||
'total_hutang_setara_kg_panen' => 'Total hutang setara hasil panen',
|
||||
'total_hutang_tidak_bersedia' => 'Status tidak bersedia menjawab total hutang',
|
||||
'praktik_ijon' => 'Praktik ijon',
|
||||
'tekanan_jual_segera' => 'Tekanan jual segera meski harga rendah',
|
||||
'penyebab_tekanan_jual_segera' => 'Penyebab tekanan jual segera',
|
||||
'kebebasan_memilih_pembeli' => 'Kebebasan memilih pembeli',
|
||||
'alasan_tidak_bebas_memilih_pembeli' => 'Alasan jika tidak bebas',
|
||||
'minat_pembeli_harga_stabil' => 'Minat ke pembeli harga stabil jangka panjang',
|
||||
'alasan_minat_pembeli_harga_stabil' => 'Alasan minat ke pembeli harga stabil',
|
||||
'pendapatan_komoditas.*.kategori' => 'Kategori pendapatan komoditas',
|
||||
'pendapatan_komoditas.*.komoditas' => 'Komoditas',
|
||||
'pendapatan_komoditas.*.pendapatan' => 'Pendapatan',
|
||||
'pendapatan_komoditas.*.periode' => 'Periode',
|
||||
'pendapatan_luar_pertanian.*.jenis_pekerjaan' => 'Jenis pekerjaan',
|
||||
'pendapatan_luar_pertanian.*.estimasi_per_bulan' => 'Estimasi per bulan',
|
||||
];
|
||||
}
|
||||
|
||||
private function normalizeSkorPayload(array $payload): array
|
||||
{
|
||||
foreach ([
|
||||
@@ -279,6 +789,21 @@ class SosialEkonomiController extends Controller
|
||||
'skor_kemampuan_menabung',
|
||||
'skor_kecukupan_penghasilan',
|
||||
'skor_kejelasan_status_lahan',
|
||||
'kemauan_mencoba_praktik_baru',
|
||||
'pemahaman_mutu_harga',
|
||||
'panutan_petani_sukses',
|
||||
'kemauan_ikut_program',
|
||||
'orientasi_rencana_jangka_panjang',
|
||||
'keaktifan_pertemuan_kelompok',
|
||||
'peran_dalam_kelompok',
|
||||
'manfaat_kelompok_tani',
|
||||
'status_rekening_tabungan',
|
||||
'pengalaman_kredit_kebun',
|
||||
'kondisi_aset_produktif',
|
||||
'keterlibatan_program_keuangan_formal',
|
||||
'keterikatan_hutang_panen',
|
||||
'praktik_ijon',
|
||||
'kebebasan_memilih_pembeli',
|
||||
] as $field) {
|
||||
if (array_key_exists($field, $payload) && !is_null($payload[$field]) && $payload[$field] !== '') {
|
||||
$payload[$field] = (int) $payload[$field];
|
||||
@@ -371,6 +896,62 @@ class SosialEkonomiController extends Controller
|
||||
'pihakMembantuKonflikOptions' => PihakMembantuKonflik::options(),
|
||||
'pihakMembantuTanpaBantuanValue' => PihakMembantuKonflik::TIDAK_ADA_SELESAIKAN_SENDIRI->value,
|
||||
'statusKonflikOptions' => StatusKonflik::options(),
|
||||
'kemauanMencobaPraktikBaruOptions' => KemauanMencobaPraktikBaru::options(),
|
||||
'pemahamanMutuHargaOptions' => PemahamanMutuHarga::options(),
|
||||
'pengetahuanHargaHasilOlahOptions' => PengetahuanHargaHasilOlah::options(),
|
||||
'pernahJualHargaLebihTinggiOptions' => PernahJualHargaLebihTinggi::options(),
|
||||
'pernahJualHargaLebihTinggiPernahValue' => PernahJualHargaLebihTinggi::PERNAH->value,
|
||||
'usahaMutuTambahanHargaOptions' => UsahaMutuTambahanHarga::options(),
|
||||
'panutanPetaniSuksesOptions' => PanutanPetaniSukses::options(),
|
||||
'panutanPetaniSuksesTidakAdaValue' => PanutanPetaniSukses::TIDAK_ADA->value,
|
||||
'kemauanIkutProgramOptions' => KemauanIkutProgram::options(),
|
||||
'orientasiRencanaJangkaPanjangOptions' => OrientasiRencanaJangkaPanjang::options(),
|
||||
'terdaftarKelompokTaniOptions' => TerdaftarKelompokTani::options(),
|
||||
'terdaftarKelompokTaniYaValue' => TerdaftarKelompokTani::YA->value,
|
||||
'terdaftarKelompokTaniTidakValue' => TerdaftarKelompokTani::TIDAK->value,
|
||||
'kedekatanSesamaAnggotaOptions' => KedekatanSesamaAnggota::options(),
|
||||
'keaktifanPertemuanKelompokOptions' => KeaktifanPertemuanKelompok::options(),
|
||||
'peranDalamKelompokOptions' => PeranDalamKelompok::options(),
|
||||
'manfaatKelompokTaniOptions' => ManfaatKelompokTani::options(),
|
||||
'statusKartuTaniOptions' => StatusKartuTani::options(),
|
||||
'bisaBeliPupukBersubsidiOptions' => BisaBeliPupukBersubsidi::options(),
|
||||
'statusRekeningTabunganOptions' => StatusRekeningTabungan::options(),
|
||||
'statusRekeningTidakPunyaValue' => StatusRekeningTabungan::TIDAK_PUNYA_REKENING->value,
|
||||
'pengalamanKreditKebunOptions' => PengalamanKreditKebun::options(),
|
||||
'pengalamanKreditPerluAlasanValues' => [
|
||||
PengalamanKreditKebun::TIDAK_PERNAH_MENCOBA->value,
|
||||
PengalamanKreditKebun::PERNAH_COBA_DITOLAK->value,
|
||||
],
|
||||
'alasanKreditDitolakOptions' => AlasanKreditDitolak::options(),
|
||||
'alasanKreditLainnyaValue' => AlasanKreditDitolak::LAINNYA->value,
|
||||
'kondisiAsetProduktifOptions' => KondisiAsetProduktif::options(),
|
||||
'kondisiAsetTidakAdaValue' => KondisiAsetProduktif::TIDAK_ADA->value,
|
||||
'jenisAsetProduktifOptions' => JenisAsetProduktif::options(),
|
||||
'jenisAsetLainnyaValue' => JenisAsetProduktif::LAINNYA->value,
|
||||
'keterlibatanProgramKeuanganFormalOptions' => KeterlibatanProgramKeuanganFormal::options(),
|
||||
'keterlibatanProgramKeuanganFormalTidakPernahValue' => KeterlibatanProgramKeuanganFormal::TIDAK_PERNAH_MENERIMA->value,
|
||||
'statusProgramKeuanganFormalOptions' => StatusProgramKeuanganFormal::options(),
|
||||
'programKeuanganFormalRows' => [
|
||||
'pkh' => 'PKH',
|
||||
'blt' => 'BLT',
|
||||
'kur' => 'KUR',
|
||||
'kredit_koperasi_resmi' => 'Kredit koperasi resmi',
|
||||
'credit_union_cu' => 'Credit Union (CU)',
|
||||
'pinjaman_bumdes' => 'Pinjaman BUMDes',
|
||||
'modal_hibah_dinas_pertanian' => 'Modal-hibah dinas pertanian',
|
||||
'lainnya' => 'Lainnya',
|
||||
],
|
||||
'pernahBantuanNgoPerusahaanOptions' => PernahBantuanNgoPerusahaan::options(),
|
||||
'pernahBantuanNgoPerusahaanPernahValue' => PernahBantuanNgoPerusahaan::PERNAH->value,
|
||||
'keterikatanHutangPanenOptions' => KeterikatanHutangPanen::options(),
|
||||
'pinjamanTokohAdatPanenOptions' => PinjamanTokohAdatPanen::options(),
|
||||
'pinjamanTokohAdatAdaValue' => PinjamanTokohAdatPanen::ADA->value,
|
||||
'praktikIjonOptions' => PraktikIjon::options(),
|
||||
'tekananJualSegeraOptions' => TekananJualSegera::options(),
|
||||
'tekananJualSegeraAdaValue' => TekananJualSegera::ADA->value,
|
||||
'kebebasanMemilihPembeliOptions' => KebebasanMemilihPembeli::options(),
|
||||
'kebebasanMemilihPembeliCukupBebasValue' => KebebasanMemilihPembeli::CUKUP_BEBAS_SESEKALI_PINDAH->value,
|
||||
'minatPembeliHargaStabilOptions' => MinatPembeliHargaStabil::options(),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
@@ -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.');
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,9 @@ 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\HasMany;
|
||||
use Illuminate\Database\Eloquent\Relations\HasOne;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
use Carbon\Carbon;
|
||||
|
||||
use App\Models\Wilayah\DesaKelurahan;
|
||||
@@ -76,8 +78,218 @@ class Petani extends Model
|
||||
return $this->belongsTo(User::class, 'user_id');
|
||||
}
|
||||
|
||||
public function praktik_budidaya(): HasOne
|
||||
public function praktikBudidaya(): HasOne
|
||||
{
|
||||
return $this->hasOne(PraktikBudidaya::class, 'petani_id');
|
||||
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');
|
||||
}
|
||||
|
||||
public function sosialEkonomi(): HasOne
|
||||
{
|
||||
return $this->hasOne(SosialEkonomi::class, 'petani_id');
|
||||
}
|
||||
|
||||
public function aksesPasar(): HasOne
|
||||
{
|
||||
return $this->hasOne(AksesPasar::class, 'petani_id');
|
||||
}
|
||||
|
||||
public function skorLahanTanaman(): ?float
|
||||
{
|
||||
if (!Schema::hasTable('map_lahan')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$lahan = $this->lahans()->get();
|
||||
|
||||
if ($lahan->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nilaiKondisi = $lahan
|
||||
->map(fn ($item) => match ($this->enumValue($item->kondisi_tanaman)) {
|
||||
'baik' => 5,
|
||||
'sedang' => 3,
|
||||
'buruk' => 1,
|
||||
'mati' => 0,
|
||||
default => null,
|
||||
})
|
||||
->filter(fn ($value) => !is_null($value));
|
||||
|
||||
if ($nilaiKondisi->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return round($nilaiKondisi->avg() * 0.1, 1);
|
||||
}
|
||||
|
||||
public function skorPraktikBudidaya(): ?float
|
||||
{
|
||||
if (!Schema::hasTable('praktik_budidaya')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$praktikBudidaya = $this->praktikBudidaya()->first();
|
||||
|
||||
if (!$praktikBudidaya) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nilai = collect([
|
||||
$praktikBudidaya->frekuensi_pemangkasan_utama,
|
||||
$praktikBudidaya->pemberian_pupuk,
|
||||
$praktikBudidaya->metode_penanganan_opt,
|
||||
$praktikBudidaya->frekuensi_sanitasi_lahan,
|
||||
$praktikBudidaya->penanganan_gulma,
|
||||
$praktikBudidaya->kondisi_pengelolaan_air,
|
||||
$praktikBudidaya->nilai_konservasi_tanah,
|
||||
])->filter(fn ($value) => !is_null($value) && $value !== '');
|
||||
|
||||
if ($nilai->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return round($nilai->sum(fn ($value) => (int) $value) * 0.2, 1);
|
||||
}
|
||||
|
||||
public function skorPendidikan(): ?float
|
||||
{
|
||||
if (!$this->pendidikan_terakhir) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nilai = match ($this->enumValue($this->pendidikan_terakhir)) {
|
||||
Pendidikan::TIDAK_SEKOLAH->value => 1,
|
||||
Pendidikan::SD->value => 2,
|
||||
Pendidikan::SMP->value => 3,
|
||||
Pendidikan::SMA->value,
|
||||
Pendidikan::PESANTREN->value,
|
||||
Pendidikan::LAINNYA->value => 4,
|
||||
Pendidikan::DIPLOMA->value,
|
||||
Pendidikan::SARJANA->value,
|
||||
Pendidikan::MAGISTER->value,
|
||||
Pendidikan::DOKTOR->value => 5,
|
||||
default => null,
|
||||
};
|
||||
|
||||
return is_null($nilai) ? null : round($nilai * 0.1, 1);
|
||||
}
|
||||
|
||||
public function skorSosialEkonomi(): ?float
|
||||
{
|
||||
if (!Schema::hasTable('sosial_ekonomi')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$sosialEkonomi = $this->sosialEkonomi()->first();
|
||||
|
||||
if (!$sosialEkonomi) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nilai = collect([
|
||||
$this->enumValue($sosialEkonomi->skor_periode_paceklik),
|
||||
$this->enumValue($sosialEkonomi->skor_kemampuan_menabung),
|
||||
$this->enumValue($sosialEkonomi->skor_kecukupan_penghasilan),
|
||||
$this->enumValue($sosialEkonomi->skor_kejelasan_status_lahan),
|
||||
$this->enumValue($sosialEkonomi->kemauan_mencoba_praktik_baru),
|
||||
$this->enumValue($sosialEkonomi->pemahaman_mutu_harga),
|
||||
$this->enumValue($sosialEkonomi->panutan_petani_sukses),
|
||||
$this->enumValue($sosialEkonomi->kemauan_ikut_program),
|
||||
$this->enumValue($sosialEkonomi->orientasi_rencana_jangka_panjang),
|
||||
$this->enumValue($sosialEkonomi->keaktifan_pertemuan_kelompok),
|
||||
$this->enumValue($sosialEkonomi->peran_dalam_kelompok),
|
||||
$this->enumValue($sosialEkonomi->manfaat_kelompok_tani),
|
||||
$this->enumValue($sosialEkonomi->status_rekening_tabungan),
|
||||
$this->enumValue($sosialEkonomi->pengalaman_kredit_kebun),
|
||||
$this->enumValue($sosialEkonomi->kondisi_aset_produktif),
|
||||
$this->enumValue($sosialEkonomi->keterlibatan_program_keuangan_formal),
|
||||
$this->enumValue($sosialEkonomi->keterikatan_hutang_panen),
|
||||
$this->enumValue($sosialEkonomi->praktik_ijon),
|
||||
$this->enumValue($sosialEkonomi->kebebasan_memilih_pembeli),
|
||||
])->filter(fn ($value) => !is_null($value) && $value !== '' && (int) $value > 0);
|
||||
|
||||
if ($nilai->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return round($nilai->sum(fn ($value) => (int) $value) * 0.2, 1);
|
||||
}
|
||||
|
||||
public function skorAksesPasar(): ?float
|
||||
{
|
||||
if (!Schema::hasTable('akses_pasar')) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$aksesPasar = $this->aksesPasar()->first();
|
||||
|
||||
if (!$aksesPasar) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nilai = collect(Schema::getColumnListing($aksesPasar->getTable()))
|
||||
->filter(fn ($field) => str_starts_with($field, 'skor_'))
|
||||
->map(fn ($field) => $aksesPasar->getAttribute($field))
|
||||
->filter(fn ($value) => !is_null($value) && $value !== '');
|
||||
|
||||
if ($nilai->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return round($nilai->sum(fn ($value) => (int) $value) * 0.1, 1);
|
||||
}
|
||||
|
||||
public function skorSegmenPetani(): ?float
|
||||
{
|
||||
$nilai = collect([
|
||||
$this->skorLahanTanaman(),
|
||||
$this->skorPraktikBudidaya(),
|
||||
$this->skorPendidikan(),
|
||||
$this->skorSosialEkonomi(),
|
||||
$this->skorAksesPasar(),
|
||||
])->filter(fn ($value) => !is_null($value));
|
||||
|
||||
if ($nilai->isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return round($nilai->sum(), 1);
|
||||
}
|
||||
|
||||
public function segmenPetani(): ?string
|
||||
{
|
||||
$skor = $this->skorSegmenPetani();
|
||||
|
||||
if (is_null($skor)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return match (true) {
|
||||
$skor >= 4.0 => 'Penggerak',
|
||||
$skor >= 3.0 => 'Perintis',
|
||||
$skor >= 2.0 => 'Pemerhati',
|
||||
$skor >= 1.0 => 'Pemula',
|
||||
default => 'Belum tersegmentasi',
|
||||
};
|
||||
}
|
||||
|
||||
private function enumValue(mixed $value): mixed
|
||||
{
|
||||
return $value instanceof \BackedEnum ? $value->value : $value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,11 +53,20 @@ class PraktikBudidaya extends Model
|
||||
'kondisi_pengelolaan_air',
|
||||
'sumber_air',
|
||||
'sistem_irigasi',
|
||||
'kebutuan_air_permusim',
|
||||
'kebutuhan_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_produksi',
|
||||
'biaya_penyediaan_air',
|
||||
'biaya_produksi_lainnya',
|
||||
'total_estimasi_biaya_produksi',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
];
|
||||
|
||||
public function petani(): BelongsTo
|
||||
|
||||
@@ -2,13 +2,42 @@
|
||||
|
||||
namespace App\Models\Pertanian;
|
||||
|
||||
use App\Enums\PihakMembantuKonflik;
|
||||
use App\Enums\SkorKecukupanPenghasilan;
|
||||
use App\Enums\SkorKejelasanStatusLahan;
|
||||
use App\Enums\SkorKemampuanMenabung;
|
||||
use App\Enums\SkorPeriodePaceklik;
|
||||
use App\Enums\StatusKepemilikanLahanSosialEkonomi;
|
||||
use App\Enums\StatusKonflik;
|
||||
use App\Enums\SosialEkonomi\AlasanKreditDitolak;
|
||||
use App\Enums\SosialEkonomi\BisaBeliPupukBersubsidi;
|
||||
use App\Enums\SosialEkonomi\JenisAsetProduktif;
|
||||
use App\Enums\SosialEkonomi\KemauanIkutProgram;
|
||||
use App\Enums\SosialEkonomi\KemauanMencobaPraktikBaru;
|
||||
use App\Enums\SosialEkonomi\KeaktifanPertemuanKelompok;
|
||||
use App\Enums\SosialEkonomi\KedekatanSesamaAnggota;
|
||||
use App\Enums\SosialEkonomi\KebebasanMemilihPembeli;
|
||||
use App\Enums\SosialEkonomi\KeterikatanHutangPanen;
|
||||
use App\Enums\SosialEkonomi\KeterlibatanProgramKeuanganFormal;
|
||||
use App\Enums\SosialEkonomi\KondisiAsetProduktif;
|
||||
use App\Enums\SosialEkonomi\ManfaatKelompokTani;
|
||||
use App\Enums\SosialEkonomi\MinatPembeliHargaStabil;
|
||||
use App\Enums\SosialEkonomi\OrientasiRencanaJangkaPanjang;
|
||||
use App\Enums\SosialEkonomi\PanutanPetaniSukses;
|
||||
use App\Enums\SosialEkonomi\PemahamanMutuHarga;
|
||||
use App\Enums\SosialEkonomi\PengetahuanHargaHasilOlah;
|
||||
use App\Enums\SosialEkonomi\PengalamanKreditKebun;
|
||||
use App\Enums\SosialEkonomi\PeranDalamKelompok;
|
||||
use App\Enums\SosialEkonomi\PernahBantuanNgoPerusahaan;
|
||||
use App\Enums\SosialEkonomi\PernahJualHargaLebihTinggi;
|
||||
use App\Enums\SosialEkonomi\PinjamanTokohAdatPanen;
|
||||
use App\Enums\SosialEkonomi\PihakMembantuKonflik;
|
||||
use App\Enums\SosialEkonomi\PraktikIjon;
|
||||
use App\Enums\SosialEkonomi\SkorKecukupanPenghasilan;
|
||||
use App\Enums\SosialEkonomi\SkorKejelasanStatusLahan;
|
||||
use App\Enums\SosialEkonomi\SkorKemampuanMenabung;
|
||||
use App\Enums\SosialEkonomi\SkorPeriodePaceklik;
|
||||
use App\Enums\SosialEkonomi\StatusKartuTani;
|
||||
use App\Enums\SosialEkonomi\StatusKepemilikanLahanSosialEkonomi;
|
||||
use App\Enums\SosialEkonomi\StatusKonflik;
|
||||
use App\Enums\SosialEkonomi\StatusProgramKeuanganFormal;
|
||||
use App\Enums\SosialEkonomi\StatusRekeningTabungan;
|
||||
use App\Enums\SosialEkonomi\TekananJualSegera;
|
||||
use App\Enums\SosialEkonomi\TerdaftarKelompokTani;
|
||||
use App\Enums\SosialEkonomi\UsahaMutuTambahanHarga;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsTo;
|
||||
use Illuminate\Database\Eloquent\Relations\HasMany;
|
||||
@@ -43,6 +72,60 @@ class SosialEkonomi extends Model
|
||||
'pihak_membantu_konflik_nama',
|
||||
'tahun_bantuan_konflik',
|
||||
'status_konflik',
|
||||
'kemauan_mencoba_praktik_baru',
|
||||
'alasan_mencoba_praktik_baru',
|
||||
'hambatan_mengubah_cara_bertani',
|
||||
'pemahaman_mutu_harga',
|
||||
'contoh_pemahaman_mutu_harga',
|
||||
'pengetahuan_harga_hasil_olah',
|
||||
'pernah_jual_harga_lebih_tinggi',
|
||||
'penyebab_harga_lebih_tinggi',
|
||||
'usaha_mutu_tambahan_harga',
|
||||
'alasan_usaha_mutu_tambahan_harga',
|
||||
'panutan_petani_sukses',
|
||||
'nama_lokasi_panutan',
|
||||
'kemauan_ikut_program',
|
||||
'harapan_program',
|
||||
'orientasi_rencana_jangka_panjang',
|
||||
'rencana_jangka_panjang',
|
||||
'terdaftar_kelompok_tani',
|
||||
'nama_kelompok_tani',
|
||||
'lama_bergabung_kelompok_tahun',
|
||||
'kedekatan_sesama_anggota',
|
||||
'keaktifan_pertemuan_kelompok',
|
||||
'topik_biasa_dibahas',
|
||||
'peran_dalam_kelompok',
|
||||
'manfaat_kelompok_tani',
|
||||
'status_kartu_tani',
|
||||
'bisa_beli_pupuk_bersubsidi',
|
||||
'manfaat_lain_kartu_tani',
|
||||
'status_rekening_tabungan',
|
||||
'nama_bank',
|
||||
'pengalaman_kredit_kebun',
|
||||
'alasan_kredit_ditolak',
|
||||
'alasan_kredit_ditolak_lainnya',
|
||||
'kondisi_aset_produktif',
|
||||
'jenis_aset_produktif',
|
||||
'jenis_aset_produktif_lainnya',
|
||||
'keterangan_kondisi_aset',
|
||||
'keterlibatan_program_keuangan_formal',
|
||||
'status_program_keuangan_formal',
|
||||
'program_keuangan_formal_lainnya_nama',
|
||||
'pernah_bantuan_ngo_perusahaan',
|
||||
'detail_bantuan_ngo_perusahaan',
|
||||
'keterikatan_hutang_panen',
|
||||
'pinjaman_tokoh_adat_panen',
|
||||
'keterangan_pinjaman_tokoh_adat',
|
||||
'total_hutang_rupiah',
|
||||
'total_hutang_setara_kg_panen',
|
||||
'total_hutang_tidak_bersedia',
|
||||
'praktik_ijon',
|
||||
'tekanan_jual_segera',
|
||||
'penyebab_tekanan_jual_segera',
|
||||
'kebebasan_memilih_pembeli',
|
||||
'alasan_tidak_bebas_memilih_pembeli',
|
||||
'minat_pembeli_harga_stabil',
|
||||
'alasan_minat_pembeli_harga_stabil',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
@@ -64,6 +147,40 @@ class SosialEkonomi extends Model
|
||||
'pihak_membantu_konflik' => PihakMembantuKonflik::class,
|
||||
'tahun_bantuan_konflik' => 'integer',
|
||||
'status_konflik' => StatusKonflik::class,
|
||||
'kemauan_mencoba_praktik_baru' => KemauanMencobaPraktikBaru::class,
|
||||
'pemahaman_mutu_harga' => PemahamanMutuHarga::class,
|
||||
'pengetahuan_harga_hasil_olah' => PengetahuanHargaHasilOlah::class,
|
||||
'pernah_jual_harga_lebih_tinggi' => PernahJualHargaLebihTinggi::class,
|
||||
'usaha_mutu_tambahan_harga' => UsahaMutuTambahanHarga::class,
|
||||
'panutan_petani_sukses' => PanutanPetaniSukses::class,
|
||||
'kemauan_ikut_program' => KemauanIkutProgram::class,
|
||||
'orientasi_rencana_jangka_panjang' => OrientasiRencanaJangkaPanjang::class,
|
||||
'terdaftar_kelompok_tani' => TerdaftarKelompokTani::class,
|
||||
'lama_bergabung_kelompok_tahun' => 'integer',
|
||||
'kedekatan_sesama_anggota' => KedekatanSesamaAnggota::class,
|
||||
'keaktifan_pertemuan_kelompok' => KeaktifanPertemuanKelompok::class,
|
||||
'peran_dalam_kelompok' => PeranDalamKelompok::class,
|
||||
'manfaat_kelompok_tani' => ManfaatKelompokTani::class,
|
||||
'status_kartu_tani' => StatusKartuTani::class,
|
||||
'bisa_beli_pupuk_bersubsidi' => BisaBeliPupukBersubsidi::class,
|
||||
'status_rekening_tabungan' => StatusRekeningTabungan::class,
|
||||
'pengalaman_kredit_kebun' => PengalamanKreditKebun::class,
|
||||
'alasan_kredit_ditolak' => 'array',
|
||||
'kondisi_aset_produktif' => KondisiAsetProduktif::class,
|
||||
'jenis_aset_produktif' => 'array',
|
||||
'keterlibatan_program_keuangan_formal' => KeterlibatanProgramKeuanganFormal::class,
|
||||
'status_program_keuangan_formal' => 'array',
|
||||
'pernah_bantuan_ngo_perusahaan' => PernahBantuanNgoPerusahaan::class,
|
||||
'detail_bantuan_ngo_perusahaan' => 'array',
|
||||
'keterikatan_hutang_panen' => KeterikatanHutangPanen::class,
|
||||
'pinjaman_tokoh_adat_panen' => PinjamanTokohAdatPanen::class,
|
||||
'total_hutang_rupiah' => 'integer',
|
||||
'total_hutang_setara_kg_panen' => 'float',
|
||||
'total_hutang_tidak_bersedia' => 'boolean',
|
||||
'praktik_ijon' => PraktikIjon::class,
|
||||
'tekanan_jual_segera' => TekananJualSegera::class,
|
||||
'kebebasan_memilih_pembeli' => KebebasanMemilihPembeli::class,
|
||||
'minat_pembeli_harga_stabil' => MinatPembeliHargaStabil::class,
|
||||
];
|
||||
|
||||
public function petani(): BelongsTo
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -0,0 +1,153 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('sosial_ekonomi', function (Blueprint $table) {
|
||||
// Sosial Budaya Fields
|
||||
$table->tinyInteger('kemauan_mencoba_praktik_baru')->nullable()->after('status_konflik');
|
||||
$table->text('alasan_mencoba_praktik_baru')->nullable()->after('kemauan_mencoba_praktik_baru');
|
||||
$table->text('hambatan_mengubah_cara_bertani')->nullable()->after('alasan_mencoba_praktik_baru');
|
||||
|
||||
$table->tinyInteger('pemahaman_mutu_harga')->nullable()->after('hambatan_mengubah_cara_bertani');
|
||||
$table->text('contoh_pemahaman_mutu_harga')->nullable()->after('pemahaman_mutu_harga');
|
||||
$table->string('pengetahuan_harga_hasil_olah')->nullable()->after('contoh_pemahaman_mutu_harga');
|
||||
$table->string('pernah_jual_harga_lebih_tinggi')->nullable()->after('pengetahuan_harga_hasil_olah');
|
||||
$table->text('penyebab_harga_lebih_tinggi')->nullable()->after('pernah_jual_harga_lebih_tinggi');
|
||||
$table->string('usaha_mutu_tambahan_harga')->nullable()->after('penyebab_harga_lebih_tinggi');
|
||||
$table->text('alasan_usaha_mutu_tambahan_harga')->nullable()->after('usaha_mutu_tambahan_harga');
|
||||
|
||||
$table->tinyInteger('panutan_petani_sukses')->nullable()->after('alasan_usaha_mutu_tambahan_harga');
|
||||
$table->text('nama_lokasi_panutan')->nullable()->after('panutan_petani_sukses');
|
||||
|
||||
$table->tinyInteger('kemauan_ikut_program')->nullable()->after('nama_lokasi_panutan');
|
||||
$table->text('harapan_program')->nullable()->after('kemauan_ikut_program');
|
||||
|
||||
$table->tinyInteger('orientasi_rencana_jangka_panjang')->nullable()->after('harapan_program');
|
||||
$table->text('rencana_jangka_panjang')->nullable()->after('orientasi_rencana_jangka_panjang');
|
||||
|
||||
// Keanggotaan Kelompok Fields
|
||||
$table->string('terdaftar_kelompok_tani')->nullable()->after('rencana_jangka_panjang');
|
||||
$table->string('nama_kelompok_tani')->nullable()->after('terdaftar_kelompok_tani');
|
||||
$table->unsignedInteger('lama_bergabung_kelompok_tahun')->nullable()->after('nama_kelompok_tani');
|
||||
$table->string('kedekatan_sesama_anggota')->nullable()->after('lama_bergabung_kelompok_tahun');
|
||||
|
||||
$table->tinyInteger('keaktifan_pertemuan_kelompok')->nullable()->after('kedekatan_sesama_anggota');
|
||||
$table->text('topik_biasa_dibahas')->nullable()->after('keaktifan_pertemuan_kelompok');
|
||||
|
||||
$table->tinyInteger('peran_dalam_kelompok')->nullable()->after('topik_biasa_dibahas');
|
||||
$table->tinyInteger('manfaat_kelompok_tani')->nullable()->after('peran_dalam_kelompok');
|
||||
|
||||
$table->string('status_kartu_tani')->nullable()->after('manfaat_kelompok_tani');
|
||||
$table->string('bisa_beli_pupuk_bersubsidi')->nullable()->after('status_kartu_tani');
|
||||
$table->text('manfaat_lain_kartu_tani')->nullable()->after('bisa_beli_pupuk_bersubsidi');
|
||||
|
||||
// Akses Keuangan Fields
|
||||
$table->tinyInteger('status_rekening_tabungan')->nullable()->after('manfaat_lain_kartu_tani');
|
||||
$table->string('nama_bank')->nullable()->after('status_rekening_tabungan');
|
||||
|
||||
$table->tinyInteger('pengalaman_kredit_kebun')->nullable()->after('nama_bank');
|
||||
$table->json('alasan_kredit_ditolak')->nullable()->after('pengalaman_kredit_kebun');
|
||||
$table->string('alasan_kredit_ditolak_lainnya')->nullable()->after('alasan_kredit_ditolak');
|
||||
|
||||
$table->tinyInteger('kondisi_aset_produktif')->nullable()->after('alasan_kredit_ditolak_lainnya');
|
||||
$table->json('jenis_aset_produktif')->nullable()->after('kondisi_aset_produktif');
|
||||
$table->string('jenis_aset_produktif_lainnya')->nullable()->after('jenis_aset_produktif');
|
||||
$table->text('keterangan_kondisi_aset')->nullable()->after('jenis_aset_produktif_lainnya');
|
||||
|
||||
$table->tinyInteger('keterlibatan_program_keuangan_formal')->nullable()->after('keterangan_kondisi_aset');
|
||||
$table->json('status_program_keuangan_formal')->nullable()->after('keterlibatan_program_keuangan_formal');
|
||||
$table->string('program_keuangan_formal_lainnya_nama')->nullable()->after('status_program_keuangan_formal');
|
||||
|
||||
$table->string('pernah_bantuan_ngo_perusahaan')->nullable()->after('program_keuangan_formal_lainnya_nama');
|
||||
$table->json('detail_bantuan_ngo_perusahaan')->nullable()->after('pernah_bantuan_ngo_perusahaan');
|
||||
|
||||
// Keterikatan Hutang Fields
|
||||
$table->tinyInteger('keterikatan_hutang_panen')->nullable()->after('detail_bantuan_ngo_perusahaan');
|
||||
$table->string('pinjaman_tokoh_adat_panen')->nullable()->after('keterikatan_hutang_panen');
|
||||
$table->text('keterangan_pinjaman_tokoh_adat')->nullable()->after('pinjaman_tokoh_adat_panen');
|
||||
$table->unsignedBigInteger('total_hutang_rupiah')->nullable()->after('keterangan_pinjaman_tokoh_adat');
|
||||
$table->decimal('total_hutang_setara_kg_panen', 12, 2)->nullable()->after('total_hutang_rupiah');
|
||||
$table->boolean('total_hutang_tidak_bersedia')->nullable()->after('total_hutang_setara_kg_panen');
|
||||
$table->tinyInteger('praktik_ijon')->nullable()->after('total_hutang_tidak_bersedia');
|
||||
$table->string('tekanan_jual_segera')->nullable()->after('praktik_ijon');
|
||||
$table->text('penyebab_tekanan_jual_segera')->nullable()->after('tekanan_jual_segera');
|
||||
|
||||
$table->tinyInteger('kebebasan_memilih_pembeli')->nullable()->after('penyebab_tekanan_jual_segera');
|
||||
$table->text('alasan_tidak_bebas_memilih_pembeli')->nullable()->after('kebebasan_memilih_pembeli');
|
||||
$table->string('minat_pembeli_harga_stabil')->nullable()->after('alasan_tidak_bebas_memilih_pembeli');
|
||||
$table->text('alasan_minat_pembeli_harga_stabil')->nullable()->after('minat_pembeli_harga_stabil');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::table('sosial_ekonomi', function (Blueprint $table) {
|
||||
$table->dropColumn([
|
||||
// Sosial Budaya
|
||||
'kemauan_mencoba_praktik_baru',
|
||||
'alasan_mencoba_praktik_baru',
|
||||
'hambatan_mengubah_cara_bertani',
|
||||
'pemahaman_mutu_harga',
|
||||
'contoh_pemahaman_mutu_harga',
|
||||
'pengetahuan_harga_hasil_olah',
|
||||
'pernah_jual_harga_lebih_tinggi',
|
||||
'penyebab_harga_lebih_tinggi',
|
||||
'usaha_mutu_tambahan_harga',
|
||||
'alasan_usaha_mutu_tambahan_harga',
|
||||
'panutan_petani_sukses',
|
||||
'nama_lokasi_panutan',
|
||||
'kemauan_ikut_program',
|
||||
'harapan_program',
|
||||
'orientasi_rencana_jangka_panjang',
|
||||
'rencana_jangka_panjang',
|
||||
// Keanggotaan Kelompok
|
||||
'terdaftar_kelompok_tani',
|
||||
'nama_kelompok_tani',
|
||||
'lama_bergabung_kelompok_tahun',
|
||||
'kedekatan_sesama_anggota',
|
||||
'keaktifan_pertemuan_kelompok',
|
||||
'topik_biasa_dibahas',
|
||||
'peran_dalam_kelompok',
|
||||
'manfaat_kelompok_tani',
|
||||
'status_kartu_tani',
|
||||
'bisa_beli_pupuk_bersubsidi',
|
||||
'manfaat_lain_kartu_tani',
|
||||
// Akses Keuangan
|
||||
'status_rekening_tabungan',
|
||||
'nama_bank',
|
||||
'pengalaman_kredit_kebun',
|
||||
'alasan_kredit_ditolak',
|
||||
'alasan_kredit_ditolak_lainnya',
|
||||
'kondisi_aset_produktif',
|
||||
'jenis_aset_produktif',
|
||||
'jenis_aset_produktif_lainnya',
|
||||
'keterangan_kondisi_aset',
|
||||
'keterlibatan_program_keuangan_formal',
|
||||
'status_program_keuangan_formal',
|
||||
'program_keuangan_formal_lainnya_nama',
|
||||
'pernah_bantuan_ngo_perusahaan',
|
||||
'detail_bantuan_ngo_perusahaan',
|
||||
// Keterikatan Hutang
|
||||
'keterikatan_hutang_panen',
|
||||
'pinjaman_tokoh_adat_panen',
|
||||
'keterangan_pinjaman_tokoh_adat',
|
||||
'total_hutang_rupiah',
|
||||
'total_hutang_setara_kg_panen',
|
||||
'total_hutang_tidak_bersedia',
|
||||
'praktik_ijon',
|
||||
'tekanan_jual_segera',
|
||||
'penyebab_tekanan_jual_segera',
|
||||
'kebebasan_memilih_pembeli',
|
||||
'alasan_tidak_bebas_memilih_pembeli',
|
||||
'minat_pembeli_harga_stabil',
|
||||
'alasan_minat_pembeli_harga_stabil',
|
||||
]);
|
||||
});
|
||||
}
|
||||
};
|
||||
File diff suppressed because one or more lines are too long
@@ -56,13 +56,20 @@
|
||||
type="text"
|
||||
class="form-control"
|
||||
id="username"
|
||||
name="name"
|
||||
name="username"
|
||||
value="{{ old('username') }}"
|
||||
placeholder="Enter your username"
|
||||
autofocus />
|
||||
@error('username')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-6 form-control-validation">
|
||||
<label for="email" class="form-label">Email</label>
|
||||
<input type="text" class="form-control" id="email" name="email" placeholder="Enter your email" />
|
||||
<input type="text" class="form-control" id="email" name="email" value="{{ old('email') }}" placeholder="Enter your email" />
|
||||
@error('email')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-6 form-password-toggle form-control-validation">
|
||||
<label class="form-label" for="password">Password</label>
|
||||
@@ -76,6 +83,22 @@
|
||||
aria-describedby="password" />
|
||||
<span class="input-group-text cursor-pointer"><i class="icon-base ti tabler-eye-off"></i></span>
|
||||
</div>
|
||||
@error('password')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
<div class="mb-6 form-password-toggle form-control-validation">
|
||||
<label class="form-label" for="password_confirmation">Confirm Password</label>
|
||||
<div class="input-group input-group-merge">
|
||||
<input
|
||||
type="password"
|
||||
id="password_confirmation"
|
||||
class="form-control"
|
||||
name="password_confirmation"
|
||||
placeholder="············"
|
||||
aria-describedby="password_confirmation" />
|
||||
<span class="input-group-text cursor-pointer"><i class="icon-base ti tabler-eye-off"></i></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-8 form-control-validation">
|
||||
<div class="form-check mb-0 ms-2">
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
<script src="{{ asset('assets/vendor/libs/@form-validation/bootstrap5.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/libs/@form-validation/auto-focus.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/libs/cleave-zen/cleave-zen.js') }}"></script>
|
||||
<script src="{{ asset('assets/vendor/libs/jquery-repeater/jquery-repeater.js') }}"></script>
|
||||
|
||||
<!-- Main JS -->
|
||||
|
||||
|
||||
@@ -23,6 +23,37 @@
|
||||
</div>
|
||||
|
||||
<div class="col-md-8 d-flex flex-column">
|
||||
@php
|
||||
$skorLahanTanaman = isset($petani) ? $petani->skorLahanTanaman() : null;
|
||||
$skorPraktikBudidaya = isset($petani) ? $petani->skorPraktikBudidaya() : null;
|
||||
$skorPendidikan = isset($petani) ? $petani->skorPendidikan() : null;
|
||||
$skorSosialEkonomiSegmen = isset($petani) ? $petani->skorSosialEkonomi() : null;
|
||||
$skorAksesPasarSegmen = isset($petani) ? $petani->skorAksesPasar() : null;
|
||||
|
||||
$skorSegmenPetani = collect([
|
||||
$skorLahanTanaman,
|
||||
$skorPraktikBudidaya,
|
||||
$skorPendidikan,
|
||||
$skorSosialEkonomiSegmen,
|
||||
$skorAksesPasarSegmen,
|
||||
])->filter(fn ($value) => !is_null($value))->sum();
|
||||
|
||||
$skorSegmenPetani = $skorSegmenPetani > 0 ? round($skorSegmenPetani, 1) : null;
|
||||
$segmenPetani = is_null($skorSegmenPetani) ? null : match (true) {
|
||||
$skorSegmenPetani >= 4.0 => 'Penggerak',
|
||||
$skorSegmenPetani >= 3.0 => 'Perintis',
|
||||
$skorSegmenPetani >= 2.0 => 'Pemerhati',
|
||||
$skorSegmenPetani >= 1.0 => 'Pemula',
|
||||
default => 'Belum tersegmentasi',
|
||||
};
|
||||
|
||||
$lahanPetani = isset($petani) && \Illuminate\Support\Facades\Schema::hasTable('map_lahan')
|
||||
? $petani->lahans()->get()
|
||||
: collect();
|
||||
$totalLuasLahan = $lahanPetani->sum('luas_lahan');
|
||||
$totalTanaman = $lahanPetani->sum('jumlah_tanaman');
|
||||
$pendidikanLabel = isset($petani) ? $petani->pendidikan_terakhir?->label() : null;
|
||||
@endphp
|
||||
|
||||
<div class="card mb-2 flex-grow-1">
|
||||
<div class="card-widget-separator-wrapper h-100">
|
||||
@@ -31,9 +62,13 @@
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 border-end h-100 pe-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Segmen Petani</p>
|
||||
<h5 class="mb-0">Penggerak</h5>
|
||||
<h5 class="mb-0">{{ $segmenPetani ?? '-' }}</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">Skor 4.2</span></span>
|
||||
@if(!is_null($skorSegmenPetani))
|
||||
<span class="me-1">Skor {{ number_format($skorSegmenPetani, 1) }}</span>
|
||||
@else
|
||||
<span class="me-1">Belum isi</span>
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
@@ -47,9 +82,19 @@
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 border-end h-100 px-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Lahan & Tanaman</p>
|
||||
<h5 class="mb-0">12000 m<sup>2</sup></h5>
|
||||
<h5 class="mb-0">
|
||||
@if($lahanPetani->isNotEmpty())
|
||||
{{ number_format($totalLuasLahan, 0, ',', '.') }} m<sup>2</sup>
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">120 tanaman kopi</span><span class="text-success fw-medium">sehat</span>
|
||||
@if(!is_null($skorLahanTanaman))
|
||||
<span class="me-1">Skor {{ number_format($skorLahanTanaman, 1) }}</span><span class="text-success fw-medium">{{ number_format($totalTanaman, 0, ',', '.') }} tanaman</span>
|
||||
@else
|
||||
<span class="me-1">Belum isi</span>
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
@@ -63,9 +108,19 @@
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 h-100 ps-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Praktik Budidaya</p>
|
||||
<h5 class="mb-0">$5,345.43</h5>
|
||||
<h5 class="mb-0">
|
||||
@if(!is_null($skorPraktikBudidaya))
|
||||
{{ number_format(round($skorPraktikBudidaya), 0, ',', '.') }}%
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">5k orders</span><span class="text-success fw-medium">+5.7%</span>
|
||||
@if(!is_null($skorPraktikBudidaya))
|
||||
<span class="me-1">Skor {{ number_format($skorPraktikBudidaya, 1) }}</span>
|
||||
@else
|
||||
<span class="me-1">Belum isi</span>
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
@@ -88,9 +143,13 @@
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 border-end h-100 pe-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Pendidikan</p>
|
||||
<h5 class="mb-0">$5,345.43</h5>
|
||||
<h5 class="mb-0">{{ $pendidikanLabel ?? '-' }}</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">5k orders</span><span class="text-success fw-medium">+5.7%</span>
|
||||
@if(!is_null($skorPendidikan))
|
||||
<span class="me-1">Skor {{ number_format($skorPendidikan, 1) }}</span>
|
||||
@else
|
||||
<span class="me-1">Belum isi</span>
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
@@ -104,9 +163,24 @@
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 border-end h-100 px-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Sosial Ekonomi</p>
|
||||
<h5 class="mb-0">$5,345.43</h5>
|
||||
@php
|
||||
$sosialEkonomi = isset($petani) ? $petani->sosialEkonomi : null;
|
||||
$skorSosialEkonomi = isset($petani) ? $petani->skorSosialEkonomi() : null;
|
||||
$skorSosialEkonomiBulat = is_null($skorSosialEkonomi) ? null : (int) round($skorSosialEkonomi);
|
||||
@endphp
|
||||
<h5 class="mb-0">
|
||||
@if(!is_null($skorSosialEkonomi))
|
||||
{{ number_format($skorSosialEkonomiBulat, 0, ',', '.') }}%
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">5k orders</span><span class="text-success fw-medium">+5.7%</span>
|
||||
@if(!is_null($skorSosialEkonomi))
|
||||
<span class="me-1">Skor {{ number_format($skorSosialEkonomi, 1) }}</span>
|
||||
@else
|
||||
<span class="me-1">Belum isi</span>
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
@@ -120,9 +194,28 @@
|
||||
<div class="d-flex justify-content-between align-items-center card-widget-1 h-100 ps-3">
|
||||
<div>
|
||||
<p class="mb-0 text-muted" style="font-size: 0.75rem;">Akses Pasar</p>
|
||||
<h5 class="mb-0">$5,345.43</h5>
|
||||
@php
|
||||
$aksesPasar = isset($petani) ? $petani->aksesPasar : null;
|
||||
$skorAksesPasar = isset($petani) ? $petani->skorAksesPasar() : null;
|
||||
$skorAksesPasarBulat = null;
|
||||
|
||||
if(!is_null($skorAksesPasar)) {
|
||||
$skorAksesPasarBulat = (int) round($skorAksesPasar);
|
||||
}
|
||||
@endphp
|
||||
<h5 class="mb-0">
|
||||
@if(!is_null($skorAksesPasar))
|
||||
{{ number_format($skorAksesPasarBulat, 0, ',', '.') }}%
|
||||
@else
|
||||
-
|
||||
@endif
|
||||
</h5>
|
||||
<p class="mb-0" style="font-size: 0.75rem;">
|
||||
<span class="me-1">5k orders</span><span class="text-success fw-medium">+5.7%</span>
|
||||
@if(!is_null($skorAksesPasar))
|
||||
<span class="me-1">Skor {{ number_format($skorAksesPasar, 1) }}</span>
|
||||
@else
|
||||
<span class="me-1">Belum isi</span>
|
||||
@endif
|
||||
</p>
|
||||
</div>
|
||||
<span class="avatar">
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<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 value="{{ $option['value'] }}" {{ old('tenaga_kerja') == $option['value'] ? 'selected' : '' }}>
|
||||
{{ $option['label'] }}
|
||||
</option>
|
||||
@endforeach
|
||||
@@ -93,11 +93,12 @@
|
||||
</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"
|
||||
class="form-check-input lainnya-checkbox @error('teknik_pemangkasan') is-invalid @enderror"
|
||||
type="checkbox"
|
||||
name="teknik_pemangkasan[]"
|
||||
value="Lainnya"
|
||||
id="teknik-pemangkasan-lainnya">
|
||||
id="teknik-pemangkasan-lainnya"
|
||||
data-target="#input-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>
|
||||
@@ -167,16 +168,18 @@
|
||||
</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"
|
||||
<input class="form-check-input lainnya-radio @error('alasan_tidak_penyerbukan') is-invalid @enderror"
|
||||
type="radio"
|
||||
name="alasan_tidak_penyerbukan"
|
||||
value="lainnya"
|
||||
id="alasan-lainnya"
|
||||
data-target="#input-alasan-lainnya"
|
||||
{{ old('alasan_tidak_penyerbukan', $alasanTidakPenyerbukanLainnya) ? 'checked' : '' }}>
|
||||
|
||||
<label class="form-check-label text-nowrap" for="alasan-lainnya">Lainnya:</label>
|
||||
|
||||
<input type="text"
|
||||
id="input-alasan-lainnya"
|
||||
name="alasan_tidak_penyerbukan_lainnya"
|
||||
class="form-control form-control-sm w-50"
|
||||
value="{{ old('alasan_tidak_penyerbukan_lainnya', $alasanTidakPenyerbukanLainnya ?? '') }}"
|
||||
@@ -285,16 +288,18 @@
|
||||
</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"
|
||||
<input class="form-check-input lainnya-radio @error('frekuensi_pemupukan') is-invalid @enderror"
|
||||
type="radio"
|
||||
name="frekuensi_pemupukan"
|
||||
value="Lainnya"
|
||||
id="frekuensi-pemupukan-lainnya"
|
||||
data-target="#input-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"
|
||||
id="input-frekuensi-pemupukan-lainnya"
|
||||
name="frekuensi_pemupukan_lainnya"
|
||||
class="form-control form-control-sm w-50"
|
||||
value="{{ old('frekuensi_pemupukan_lainnya', $frekuensiPemupukanLainnya ?? '') }}"
|
||||
@@ -404,16 +409,18 @@
|
||||
</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"
|
||||
<input class="form-check-input lainnya-radio @error('waktu_pemberian_pupuk') is-invalid @enderror"
|
||||
type="radio"
|
||||
name="waktu_pemberian_pupuk"
|
||||
value="lainnya"
|
||||
id="alasan-lainnya"
|
||||
data-target="#input-waktu-lainnya"
|
||||
{{ old('waktu_pemberian_pupuk', $waktuPemberianPupukLainnya) ? 'checked' : '' }}>
|
||||
|
||||
<label class="form-check-label text-nowrap" for="alasan-lainnya">Lainnya:</label>
|
||||
|
||||
<input type="text"
|
||||
id="input-waktu-lainnya"
|
||||
name="waktu_pemberian_pupuk_lainnya"
|
||||
class="form-control form-control-sm w-50"
|
||||
value="{{ old('waktu_pemberian_pupuk_lainnya', $waktuPemberianPupukLainnya) }}"
|
||||
@@ -468,16 +475,18 @@
|
||||
</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"
|
||||
<input class="form-check-input lainnya-radio @error('cara_pemberian_pupuk') is-invalid @enderror"
|
||||
type="radio"
|
||||
name="cara_pemberian_pupuk"
|
||||
value="lainnya"
|
||||
value="Lainnya"
|
||||
id="cara-lainnya"
|
||||
data-target="#input-cara-pemberian-pupuk-lainnya"
|
||||
{{ old('cara_pemberian_pupuk', $caraPemberianPupukLainnya) ? 'checked' : '' }}>
|
||||
|
||||
<label class="form-check-label text-nowrap" for="cara-lainnya">Lainnya:</label>
|
||||
|
||||
<input type="text"
|
||||
id="input-cara-pemberian-pupuk-lainnya"
|
||||
name="cara_pemberian_pupuk_lainnya"
|
||||
class="form-control form-control-sm w-50"
|
||||
value="{{ old('cara_pemberian_pupuk_lainnya', $caraPemberianPupukLainnya ?? '') }}"
|
||||
@@ -561,5 +570,72 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
function toggleInput(trigger) {
|
||||
const target = document.querySelector(trigger.dataset.target);
|
||||
|
||||
if (!target) return;
|
||||
|
||||
if (trigger.type === 'checkbox') {
|
||||
target.disabled = !trigger.checked;
|
||||
|
||||
if (!trigger.checked) {
|
||||
target.value = '';
|
||||
}
|
||||
} else if (trigger.type === 'radio') {
|
||||
|
||||
const radios = document.querySelectorAll(
|
||||
`input[name="${trigger.name}"].lainnya-radio`
|
||||
);
|
||||
|
||||
radios.forEach(radio => {
|
||||
const input = document.querySelector(radio.dataset.target);
|
||||
|
||||
if (!input) return;
|
||||
|
||||
input.disabled = !radio.checked;
|
||||
|
||||
if (!radio.checked) {
|
||||
input.value = '';
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll('input[type="radio"][data-target]').forEach(function (lainnyaRadio) {
|
||||
const target = document.querySelector(lainnyaRadio.dataset.target);
|
||||
|
||||
function toggleInput() {
|
||||
target.disabled = !lainnyaRadio.checked;
|
||||
|
||||
if (!lainnyaRadio.checked) {
|
||||
target.value = '';
|
||||
}
|
||||
}
|
||||
|
||||
document.querySelectorAll(`input[name="${lainnyaRadio.name}"]`).forEach(function (radio) {
|
||||
radio.addEventListener('change', toggleInput);
|
||||
});
|
||||
|
||||
toggleInput();
|
||||
});
|
||||
|
||||
document.querySelectorAll('.lainnya-checkbox').forEach(function (trigger) {
|
||||
const target = document.querySelector(trigger.dataset.target);
|
||||
if (!target) return;
|
||||
|
||||
function toggleInput() {
|
||||
target.disabled = !trigger.checked;
|
||||
|
||||
if (!trigger.checked) {
|
||||
target.value = '';
|
||||
}
|
||||
}
|
||||
|
||||
trigger.addEventListener('change', toggleInput);
|
||||
toggleInput();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
@@ -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">
|
||||
@@ -554,7 +561,7 @@
|
||||
@error('metode_penanganan_hama_penyakit')<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">Jenis Hama<span class="text-danger">*</span></label>
|
||||
<label class="form-label d-block fw-medium">Jenis Hama</label>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_hama') is-invalid @enderror"
|
||||
@@ -610,7 +617,7 @@
|
||||
@enderror
|
||||
</div>
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<label class="form-label d-block fw-medium">Jenis Penyakit<span class="text-danger">*</span></label>
|
||||
<label class="form-label d-block fw-medium">Jenis Penyakit</label>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_penyakit') is-invalid @enderror"
|
||||
@@ -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 ?? '') }}"
|
||||
@@ -915,7 +926,7 @@
|
||||
<label class="form-label d-block fw-medium">Kebiasaan Konservasi Tanah<span class="text-danger">*</span></label>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_hama') is-invalid @enderror"
|
||||
<input class="form-check-input @error('kebiasaan_konservasi_tanah') is-invalid @enderror"
|
||||
type="checkbox"
|
||||
name="kebiasaan_konservasi_tanah[]"
|
||||
value="Membuat pematang atau tanggul tanah di lahan miring supaya tanah tidak longsor ke bawah"
|
||||
@@ -925,7 +936,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_hama') is-invalid @enderror"
|
||||
<input class="form-check-input @error('kebiasaan_konservasi_tanah') is-invalid @enderror"
|
||||
type="checkbox"
|
||||
name="kebiasaan_konservasi_tanah[]"
|
||||
value="Menumpuk daun kering/sisa tanaman di sekitar pohon"
|
||||
@@ -935,7 +946,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_hama') is-invalid @enderror"
|
||||
<input class="form-check-input @error('kebiasaan_konservasi_tanah') is-invalid @enderror"
|
||||
type="checkbox"
|
||||
name="kebiasaan_konservasi_tanah[]"
|
||||
value="Menanam tanaman lain di sela-sela komoditas utama untuk menutupi tanah"
|
||||
@@ -945,7 +956,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_hama') is-invalid @enderror"
|
||||
<input class="form-check-input @error('kebiasaan_konservasi_tanah') is-invalid @enderror"
|
||||
type="checkbox"
|
||||
name="kebiasaan_konservasi_tanah[]"
|
||||
value="Membuat lubang atau parit kecil untuk menampung air hujan"
|
||||
@@ -955,7 +966,7 @@
|
||||
</div>
|
||||
|
||||
<div class="form-check mt-2">
|
||||
<input class="form-check-input @error('jenis_hama') is-invalid @enderror"
|
||||
<input class="form-check-input @error('kebiasaan_konservasi_tanah') is-invalid @enderror"
|
||||
type="checkbox"
|
||||
name="kebiasaan_konservasi_tanah[]"
|
||||
value="Tidak ada yang seperti itu di kebun saya"
|
||||
@@ -963,7 +974,7 @@
|
||||
{{ in_array('Tidak ada yang seperti itu di kebun saya', old('kebiasaan_konservasi_tanah', $praktikBudidaya->kebiasaan_konservasi_tanah ?? [])) ? 'checked' : '' }}>
|
||||
<label class="form-check-label" for="konservasi_tanah_tidak_ada">Tidak ada yang seperti itu di kebun saya</label>
|
||||
</div>
|
||||
@error('jenis_hama')
|
||||
@error('kebiasaan_konservasi_tanah')
|
||||
<div class="error invalid-feedback d-block">{{ $message }}</div>
|
||||
@enderror
|
||||
</div>
|
||||
@@ -1055,7 +1066,7 @@
|
||||
class="form-control rupiah-input @error('biaya_pestisida') is-invalid @enderror"
|
||||
id="biaya-pestisida"
|
||||
name="biaya_pestisida"
|
||||
value="{{ old('biaya_pestisida', filled($praktikBudidaya->biaya_pestisida) ? number_format($praktikBudidaya->biaya_pestisida, 0, ',', '.') : '') }}"
|
||||
value="{{ old('biaya_pestisida', filled($praktikBudidaya->biaya_obat_obatan) ? number_format($praktikBudidaya->biaya_obat_obatan, 0, ',', '.') : '') }}"
|
||||
placeholder="Contoh: 150.000">
|
||||
</div>
|
||||
@error('biaya_pestisida')
|
||||
@@ -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')
|
||||
@@ -1124,7 +1135,8 @@
|
||||
id="total-estimasi-biaya-produksi"
|
||||
name="total_estimasi_biaya_produksi"
|
||||
value="{{ old('total_estimasi_biaya_produksi', filled($praktikBudidaya->total_estimasi_biaya_produksi) ? number_format($praktikBudidaya->total_estimasi_biaya_produksi, 0, ',', '.') : '') }}"
|
||||
placeholder="Contoh: 150.000">
|
||||
placeholder="Otomatis terhitung"
|
||||
readonly>
|
||||
</div>
|
||||
@error('total_estimasi_biaya_produksi')
|
||||
<div class="invalid-feedback d-block">{{ $message }}</div>
|
||||
@@ -1135,11 +1147,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 +1165,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,62 +1183,82 @@
|
||||
</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>
|
||||
@php
|
||||
$disimpanUntukSendiri = old(
|
||||
'disimpan_untuk_sendiri',
|
||||
$surveyPanen?->disimpan_untuk_sendiri
|
||||
) == 1;
|
||||
@endphp
|
||||
<div class="col-md-4 mb-4 form-control-validation">
|
||||
<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"
|
||||
id="disimpan-untuk-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">
|
||||
@@ -1235,24 +1270,28 @@
|
||||
</span>
|
||||
|
||||
<span class="switch-label">
|
||||
<span id="switch-text">Tidak, Semua di Jual</span>
|
||||
<span id="switch-text">
|
||||
{{ $disimpanUntukSendiri ? 'Ya, Sebagian Disimpan' : 'Tidak, Semua Dijual' }}
|
||||
</span>
|
||||
</span>
|
||||
</label>
|
||||
</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="row{{ $disimpanUntukSendiri ? '' : 'd-none' }}" id="detail-disimpan-wrapper">
|
||||
<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 +1299,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 +1322,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 +1350,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 +1506,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 +1617,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 +1666,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');
|
||||
@@ -1584,6 +1776,128 @@
|
||||
trigger.addEventListener('change', toggleInput);
|
||||
toggleInput();
|
||||
});
|
||||
|
||||
const biayaProduksiFields = [
|
||||
'upah-tenaga-kerja',
|
||||
'biaya-bibit',
|
||||
'biaya-pupuk',
|
||||
'biaya-pestisida',
|
||||
'biaya-sewa-alat',
|
||||
'biaya-penyediaan-air',
|
||||
'biaya-lainnya'
|
||||
];
|
||||
|
||||
const biayaPanenFields = [
|
||||
'upah-tenaga-panen',
|
||||
'biaya-pengangkutan',
|
||||
'biaya-wadah-kemasan',
|
||||
'biaya-sewa-alat-panen',
|
||||
'biaya-panen-lainnya'
|
||||
];
|
||||
|
||||
const totalBiayaProduksiField = document.getElementById('total-estimasi-biaya-produksi');
|
||||
const totalBiayaPanenField = document.getElementById('total-estimasi-biaya-panen');
|
||||
|
||||
function parseRupiah(value) {
|
||||
if (!value) return 0;
|
||||
|
||||
return parseInt(value.replace(/[^0-9]/g, '')) || 0;
|
||||
}
|
||||
|
||||
function formatRupiah(value) {
|
||||
return value.toLocaleString('id-ID');
|
||||
}
|
||||
|
||||
function hitungTotal(fields, totalField) {
|
||||
if (!totalField) return;
|
||||
|
||||
let total = 0;
|
||||
|
||||
fields.forEach(function (id) {
|
||||
const field = document.getElementById(id);
|
||||
|
||||
if (field) {
|
||||
total += parseRupiah(field.value);
|
||||
}
|
||||
});
|
||||
|
||||
totalField.value = total > 0 ? formatRupiah(total) : '';
|
||||
}
|
||||
|
||||
function hitungTotalBiayaProduksi() {
|
||||
hitungTotal(biayaProduksiFields, totalBiayaProduksiField);
|
||||
}
|
||||
|
||||
function hitungTotalBiayaPanen() {
|
||||
hitungTotal(biayaPanenFields, totalBiayaPanenField);
|
||||
}
|
||||
|
||||
biayaProduksiFields.forEach(function (id) {
|
||||
const field = document.getElementById(id);
|
||||
|
||||
if (field) {
|
||||
field.addEventListener('input', hitungTotalBiayaProduksi);
|
||||
field.addEventListener('change', hitungTotalBiayaProduksi);
|
||||
}
|
||||
});
|
||||
|
||||
biayaPanenFields.forEach(function (id) {
|
||||
const field = document.getElementById(id);
|
||||
|
||||
if (field) {
|
||||
field.addEventListener('input', hitungTotalBiayaPanen);
|
||||
field.addEventListener('change', hitungTotalBiayaPanen);
|
||||
}
|
||||
});
|
||||
|
||||
hitungTotalBiayaProduksi();
|
||||
hitungTotalBiayaPanen();
|
||||
|
||||
const switchInput = document.getElementById('disimpan-untuk-sendiri');
|
||||
const switchText = document.getElementById('switch-text');
|
||||
|
||||
const detailWrapper = document.getElementById('detail-disimpan-wrapper');
|
||||
const hasilPanenDisimpan = document.getElementById('hasil-panen-disimpan');
|
||||
const tujuanDisimpan = document.getElementById('tujuan-disimpan');
|
||||
|
||||
function toggleDetailDisimpan() {
|
||||
const isChecked = switchInput.checked;
|
||||
|
||||
if (isChecked) {
|
||||
detailWrapper.classList.remove('d-none');
|
||||
|
||||
hasilPanenDisimpan.disabled = false;
|
||||
tujuanDisimpan.disabled = false;
|
||||
|
||||
switchText.textContent = 'Ya, Sebagian Disimpan';
|
||||
} else {
|
||||
detailWrapper.classList.add('d-none');
|
||||
|
||||
hasilPanenDisimpan.disabled = true;
|
||||
tujuanDisimpan.disabled = true;
|
||||
|
||||
hasilPanenDisimpan.value = '';
|
||||
tujuanDisimpan.value = '';
|
||||
|
||||
switchText.textContent = 'Tidak, Semua Dijual';
|
||||
}
|
||||
}
|
||||
|
||||
switchInput.addEventListener('change', toggleDetailDisimpan);
|
||||
|
||||
toggleDetailDisimpan();
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
$(function () {
|
||||
$('.form-repeater').repeater({
|
||||
show: function () {
|
||||
$(this).slideDown();
|
||||
},
|
||||
hide: function (deleteElement) {
|
||||
$(this).slideUp(deleteElement);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -196,6 +196,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');
|
||||
|
||||
Reference in New Issue
Block a user