tanaman penaung di lahan
This commit is contained in:
@@ -18,6 +18,7 @@ use App\Models\Wilayah\DesaKelurahan;
|
||||
use App\Models\Wilayah\Provinsi;
|
||||
use App\Models\Pertanian\Komoditas;
|
||||
use App\Models\Pertanian\Tanaman;
|
||||
use App\Models\Master\JenisTanaman;
|
||||
|
||||
use App\Enums\StatusLahan;
|
||||
use App\Enums\KondisiTanaman;
|
||||
@@ -62,8 +63,9 @@ class PetaniLahanController extends Controller
|
||||
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
||||
|
||||
$komoditas = Komoditas::all();
|
||||
$tanamanPenaung = JenisTanaman::all();
|
||||
|
||||
return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas'));
|
||||
return view('produktivitas.petani.lahan.add', compact('petani', 'lahan', 'provinsi', 'komoditas', 'tanamanPenaung'));
|
||||
}
|
||||
|
||||
private function validateLahan(Request $request)
|
||||
@@ -91,7 +93,7 @@ class PetaniLahanController extends Controller
|
||||
'komoditas_lain' => ['nullable', 'array'],
|
||||
'komoditas_lain.*' => ['integer', 'exists:master_komoditas,id'],
|
||||
'tanaman_penaung' => ['nullable', 'array'],
|
||||
'tanaman_penaung.*' => ['integer', 'exists:master_komoditas,id'],
|
||||
'tanaman_penaung.*' => ['string'],
|
||||
'foto' => ['nullable', 'array'],
|
||||
'foto.*' => ['image', 'mimes:jpeg,jpg,png', 'max:2048'],
|
||||
], [
|
||||
@@ -119,7 +121,7 @@ class PetaniLahanController extends Controller
|
||||
'komoditas_lain.array' => 'Komoditas lain diisi dengan array.',
|
||||
'komoditas_lain.*.exists' => 'Komoditas lain yang dipilih tidak valid.',
|
||||
'tanaman_penaung.array' => 'Tanaman penaung diisi dengan array.',
|
||||
'tanaman_penaung.*.exists' => 'Tanaman penaung yang dipilih tidak valid.',
|
||||
//'tanaman_penaung.*.exists' => 'Tanaman penaung yang dipilih tidak valid.',
|
||||
'foto.array' => 'Foto diisi dengan array.',
|
||||
'foto.*.image' => 'Foto harus berupa gambar.',
|
||||
'foto.*.mimes' => 'Foto harus berupa gambar dengan ekstensi jpeg, jpg, atau png.',
|
||||
@@ -128,6 +130,28 @@ class PetaniLahanController extends Controller
|
||||
|
||||
}
|
||||
|
||||
private function syncTanamanPenaung(Request $request)
|
||||
{
|
||||
$existing = JenisTanaman::pluck('nama')->toArray();
|
||||
|
||||
$tanamanPenaung = collect($request->tanaman_penaung)
|
||||
->unique()
|
||||
->reject(fn ($nama) => in_array($nama, $existing))
|
||||
->map(fn ($nama) => [
|
||||
'nama' => Str::title($nama),
|
||||
'created_by' => auth()->id(),
|
||||
'updated_by' => auth()->id(),
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
])
|
||||
->values()
|
||||
->toArray();
|
||||
|
||||
if (!empty($tanamanPenaung)) {
|
||||
JenisTanaman::insert($tanamanPenaung);
|
||||
}
|
||||
}
|
||||
|
||||
public function store($petaniId, Request $request)
|
||||
{
|
||||
if (!Gate::any(['super_admin', 'admin', 'fasilitator'])) {
|
||||
@@ -136,6 +160,12 @@ class PetaniLahanController extends Controller
|
||||
|
||||
$petani = Petani::findOrFail($petaniId);
|
||||
|
||||
$request->merge([
|
||||
'tanaman_penaung' => collect($request->tanaman_penaung)
|
||||
->map(fn ($nama) => Str::title($nama))
|
||||
->toArray()
|
||||
]);
|
||||
|
||||
$validated = $this->validateLahan($request);
|
||||
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
||||
$lahanCount = Lahan::where('petani_id', $petaniId)
|
||||
@@ -154,6 +184,8 @@ class PetaniLahanController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
$this->syncTanamanPenaung($request);
|
||||
|
||||
$lahan = Lahan::create([...$validated,
|
||||
'foto' => $foto && count($foto) > 0 ? json_encode($foto) : null,
|
||||
'nama' => 'Lahan ' . $komoditas->nama . ' #' . ($lahanCount + 1),
|
||||
@@ -236,10 +268,11 @@ class PetaniLahanController extends Controller
|
||||
$lahanSelected = Lahan::where('petani_id', $petaniId)->findOrFail($id);
|
||||
|
||||
$komoditas = Komoditas::all();
|
||||
$tanamanPenaung = JenisTanaman::all();
|
||||
|
||||
$provinsi = Provinsi::orderBy('kode', 'asc')->get();
|
||||
|
||||
return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi'));
|
||||
return view('produktivitas.petani.lahan.edit', compact('lahan', 'lahanSelected', 'petani', 'komoditas', 'provinsi', 'tanamanPenaung'));
|
||||
}
|
||||
|
||||
public function update(Request $request, string $petaniId, string $id)
|
||||
@@ -251,6 +284,11 @@ class PetaniLahanController extends Controller
|
||||
$petani = Petani::findOrFail($petaniId);
|
||||
$lahan = Lahan::where('petani_id', $petaniId)->findOrFail($id);
|
||||
|
||||
$request->merge([
|
||||
'tanaman_penaung' => collect($request->tanaman_penaung)
|
||||
->map(fn ($nama) => Str::title($nama))
|
||||
->toArray()
|
||||
]);
|
||||
$validated = $this->validateLahan($request);
|
||||
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
|
||||
$tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count();
|
||||
@@ -266,6 +304,8 @@ class PetaniLahanController extends Controller
|
||||
$lahanUidParts = explode('LHN-', $lahanUid);
|
||||
$lahanUid = end($lahanUidParts);
|
||||
|
||||
$this->syncTanamanPenaung($request);
|
||||
|
||||
if ($lahan && $lahan->jumlah_tanaman > $tanamanCount) {
|
||||
$data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) {
|
||||
return [
|
||||
|
||||
Reference in New Issue
Block a user