resolve user create
This commit is contained in:
@@ -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,
|
||||
]);
|
||||
|
||||
return redirect('/login')->with('success', 'Account created successfully. Please login.');
|
||||
'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()->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.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user