update hama dan penyakit

This commit is contained in:
2026-07-22 16:23:32 +07:00
parent 17b5687db8
commit bd05fc7f0f
3 changed files with 97 additions and 37 deletions
@@ -7,6 +7,7 @@ use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Illuminate\Validation\Rules\Enum;
@@ -101,6 +102,12 @@ class PetaniLahanController extends Controller
return [];
}
private function hasPestDiseaseColumns(string $table): bool
{
return Schema::hasColumn($table, 'jenis_hama')
&& Schema::hasColumn($table, 'jenis_penyakit');
}
private function validateLahan(Request $request)
{
return $request->validate([
@@ -200,7 +207,14 @@ class PetaniLahanController extends Controller
]);
$validated = $this->validateLahan($request);
$validated = array_merge($validated, $this->autoPestDiseaseData($petaniId));
$autoPestDiseaseData = $this->autoPestDiseaseData($petaniId);
$lahanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Lahan)->getTable());
$tanamanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Tanaman)->getTable());
if ($lahanHasPestDiseaseColumns) {
$validated = array_merge($validated, $autoPestDiseaseData);
}
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
$lahanCount = Lahan::where('petani_id', $petaniId)
->count();
@@ -230,8 +244,8 @@ class PetaniLahanController extends Controller
);
if ($lahan && $lahan->jumlah_tanaman > 0) {
$data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid) {
return [
$data = collect(range(1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid, $autoPestDiseaseData, $tanamanHasPestDiseaseColumns) {
$row = [
'lahan_id' => $lahan->id,
'uid' => 'TNM-' . $lahanUid . '-' . strtoupper(Str::random(10)),
'komoditas_id' => $lahan->komoditas_id,
@@ -244,13 +258,18 @@ class PetaniLahanController extends Controller
'serangan_hama' => $lahan->serangan_hama,
'penyakit_tanaman' => $lahan->penyakit_tanaman,
'keparahan_serangan' => $lahan->keparahan_serangan,
'jenis_hama' => json_encode($lahan->jenis_hama ?? []),
'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []),
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
'created_at' => now(),
'updated_at' => now(),
];
if ($tanamanHasPestDiseaseColumns) {
$row['jenis_hama'] = json_encode($autoPestDiseaseData['jenis_hama'] ?? []);
$row['jenis_penyakit'] = json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []);
}
return $row;
});
$data->chunk(500)->each(function ($chunk) {
@@ -329,7 +348,14 @@ class PetaniLahanController extends Controller
->toArray()
]);
$validated = $this->validateLahan($request);
$validated = array_merge($validated, $this->autoPestDiseaseData($petaniId));
$autoPestDiseaseData = $this->autoPestDiseaseData($petaniId);
$lahanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Lahan)->getTable());
$tanamanHasPestDiseaseColumns = $this->hasPestDiseaseColumns((new Tanaman)->getTable());
if ($lahanHasPestDiseaseColumns) {
$validated = array_merge($validated, $autoPestDiseaseData);
}
$komoditas = Komoditas::where('id', $request->komoditas_id)->first();
$tanamanCount = Tanaman::where('lahan_id', $lahan->id)->count();
$lahanCount = Lahan::where('petani_id', $petaniId)->count();
@@ -382,8 +408,8 @@ class PetaniLahanController extends Controller
$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 [
$data = collect(range($tanamanCount + 1, $lahan->jumlah_tanaman))->map(function ($i) use ($lahan, $komoditas, $lahanUid, $autoPestDiseaseData, $tanamanHasPestDiseaseColumns) {
$row = [
'lahan_id' => $lahan->id,
'komoditas_id' => $lahan->komoditas_id,
'jenis_komoditas_id' => $lahan->jenis_komoditas_id,
@@ -396,13 +422,18 @@ class PetaniLahanController extends Controller
'serangan_hama' => $lahan->serangan_hama,
'penyakit_tanaman' => $lahan->penyakit_tanaman,
'keparahan_serangan' => $lahan->keparahan_serangan,
'jenis_hama' => json_encode($lahan->jenis_hama ?? []),
'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []),
'created_by' => auth()->id(),
'updated_by' => auth()->id(),
'created_at' => now(),
'updated_at' => now(),
];
if ($tanamanHasPestDiseaseColumns) {
$row['jenis_hama'] = json_encode($autoPestDiseaseData['jenis_hama'] ?? []);
$row['jenis_penyakit'] = json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []);
}
return $row;
});
$data->chunk(500)->each(function ($chunk) {
@@ -410,11 +441,13 @@ class PetaniLahanController extends Controller
});
}
if ($tanamanHasPestDiseaseColumns) {
$lahan->tanaman()->update([
'jenis_hama' => json_encode($lahan->jenis_hama ?? []),
'jenis_penyakit' => json_encode($lahan->jenis_penyakit ?? []),
'jenis_hama' => json_encode($autoPestDiseaseData['jenis_hama'] ?? []),
'jenis_penyakit' => json_encode($autoPestDiseaseData['jenis_penyakit'] ?? []),
'updated_by' => auth()->id(),
]);
}
if ($request->ajax()) {
return response()->json([
+7
View File
@@ -8,6 +8,7 @@ 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 Illuminate\Support\Str;
use App\Models\Pertanian\Petani;
@@ -100,6 +101,8 @@ class PraktikBudidaya extends Model
$jenisHama = $praktikBudidaya->jenis_hama ?? [];
$jenisPenyakit = $praktikBudidaya->jenis_penyakit ?? [];
if (Schema::hasColumn((new Lahan)->getTable(), 'jenis_hama')
&& Schema::hasColumn((new Lahan)->getTable(), 'jenis_penyakit')) {
Lahan::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Lahan $lahan) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) {
$lahan->update([
'jenis_hama' => $jenisHama,
@@ -107,7 +110,10 @@ class PraktikBudidaya extends Model
'updated_by' => $praktikBudidaya->updated_by,
]);
});
}
if (Schema::hasColumn((new Tanaman)->getTable(), 'jenis_hama')
&& Schema::hasColumn((new Tanaman)->getTable(), 'jenis_penyakit')) {
Tanaman::where('petani_id', $praktikBudidaya->petani_id)->get()->each(function (Tanaman $tanaman) use ($jenisHama, $jenisPenyakit, $praktikBudidaya) {
$tanaman->update([
'jenis_hama' => $jenisHama,
@@ -115,6 +121,7 @@ class PraktikBudidaya extends Model
'updated_by' => $praktikBudidaya->updated_by,
]);
});
}
if ($kebiasaan == 0) {
$skor_konservasi_tanah = 1;
@@ -12,26 +12,46 @@ return new class extends Migration
public function up(): void
{
Schema::table('map_lahan', function (Blueprint $table) {
if (! Schema::hasColumn('map_lahan', 'jenis_hama')) {
$table->jsonb('jenis_hama')->nullable();
}
if (! Schema::hasColumn('map_lahan', 'jenis_penyakit')) {
$table->jsonb('jenis_penyakit')->nullable();
}
});
Schema::table('map_tanaman', function (Blueprint $table) {
if (! Schema::hasColumn('map_tanaman', 'jenis_hama')) {
$table->jsonb('jenis_hama')->nullable();
}
if (! Schema::hasColumn('map_tanaman', 'jenis_penyakit')) {
$table->jsonb('jenis_penyakit')->nullable();
}
});
}
public function down(): void
{
Schema::table('map_lahan', function (Blueprint $table) {
if (Schema::hasColumn('map_lahan', 'jenis_hama')) {
$table->dropColumn('jenis_hama');
}
if (Schema::hasColumn('map_lahan', 'jenis_penyakit')) {
$table->dropColumn('jenis_penyakit');
}
});
Schema::table('map_tanaman', function (Blueprint $table) {
if (Schema::hasColumn('map_tanaman', 'jenis_hama')) {
$table->dropColumn('jenis_hama');
}
if (Schema::hasColumn('map_tanaman', 'jenis_penyakit')) {
$table->dropColumn('jenis_penyakit');
}
});
}
};