resolve user create
This commit is contained in:
@@ -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');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user