diff --git a/app/Http/Controllers/Web/Produktivitas/KualitasController.php b/app/Http/Controllers/Web/Produktivitas/KualitasController.php deleted file mode 100644 index 084571a..0000000 --- a/app/Http/Controllers/Web/Produktivitas/KualitasController.php +++ /dev/null @@ -1,162 +0,0 @@ -orderBy('created_at', 'desc'); - - if ($request->filled('search')) { - $query->where(function ($q) use ($request) { - $search = '%' . $request->search . '%'; - $q->where('grade', 'like', $search) - ->orWhere('pemeriksa', 'like', $search) - ->orWhereHas('profile', fn ($profile) => $profile->where('nama', 'like', $search)) - ->orWhereHas('komoditas', fn ($komoditas) => $komoditas->where('nama', 'like', $search)) - ->orWhereHas('produksi', fn ($produksi) => $produksi->where('kode_produksi', 'like', $search)); - }); - } - - if ($request->filled('status_kelayakan')) { - $query->where('status_kelayakan', $request->status_kelayakan); - } - - $kualitas = $query->paginate($request->per_page ?? 10); - - return view('produktivitas.kualitas.index', compact('kualitas')); - } - - public function create() - { - return view('produktivitas.kualitas.add', $this->formData()); - } - - public function store(Request $request) - { - $validator = $this->validator($request); - - if ($validator->fails()) { - return back()->withErrors($validator)->withInput(); - } - - Kualitas::create($this->payload($request) + [ - 'created_by' => auth()->id(), - 'updated_by' => auth()->id(), - ]); - - return redirect()->route('kualitas.index')->with('success', 'Data kualitas berhasil ditambahkan.'); - } - - public function show($id) - { - $kualitas = Kualitas::with(['produksi', 'profile', 'lahan', 'komoditas'])->findOrFail($id); - - return view('produktivitas.kualitas.view', compact('kualitas')); - } - - public function edit($id) - { - $kualitas = Kualitas::findOrFail($id); - - return view('produktivitas.kualitas.edit', $this->formData() + compact('kualitas')); - } - - public function update(Request $request, $id) - { - $validator = $this->validator($request); - - if ($validator->fails()) { - return back()->withErrors($validator)->withInput(); - } - - $kualitas = Kualitas::findOrFail($id); - $kualitas->update($this->payload($request) + [ - 'updated_by' => auth()->id(), - ]); - - return redirect()->route('kualitas.index')->with('success', 'Data kualitas berhasil diperbarui.'); - } - - public function destroy($id) - { - $kualitas = Kualitas::findOrFail($id); - $kualitas->update(['deleted_by' => auth()->id()]); - $kualitas->delete(); - - return response()->json(['status' => 'success', 'message' => 'Data kualitas berhasil dihapus.']); - } - - private function formData(): array - { - return [ - 'produksi' => Produksi::with(['komoditas', 'profile'])->orderBy('created_at', 'desc')->get(), - 'profiles' => Profile::where('role', Role::PETANI->value)->orderBy('nama')->get(), - 'lahan' => Lahan::whereHas('profile', function ($query) { - $query->where('role', Role::PETANI->value); - })->orderBy('nama')->get(), - 'komoditas' => Komoditas::orderBy('nama')->get(), - ]; - } - - private function validator(Request $request) - { - return Validator::make($request->all(), [ - 'produksi_id' => ['nullable', 'exists:produksi,id'], - 'profile_id' => [ - 'required', - Rule::exists('profiles', 'id')->where('role', Role::PETANI->value), - ], - 'lahan_id' => [ - 'required', - Rule::exists('map_lahan', 'id')->where('profile_id', $request->profile_id), - ], - 'komoditas_id' => ['required', 'exists:master_komoditas,id'], - 'tanggal_pemeriksaan' => ['nullable', 'date'], - 'grade' => ['required', 'string', 'max:50'], - 'kadar_air' => ['nullable', 'numeric', 'min:0'], - 'berat_bersih' => ['nullable', 'numeric', 'min:0'], - 'berat_rusak' => ['nullable', 'numeric', 'min:0'], - 'standar_mutu' => ['nullable', 'string', 'max:255'], - 'status_kelayakan' => ['required', 'in:layak,perlu_sortir,tidak_layak'], - 'pemeriksa' => ['nullable', 'string', 'max:255'], - 'catatan' => ['nullable', 'string'], - ]); - } - - private function payload(Request $request): array - { - $beratBersih = (float) $request->berat_bersih; - $beratRusak = (float) $request->berat_rusak; - - return [ - 'produksi_id' => $request->produksi_id, - 'profile_id' => $request->profile_id, - 'lahan_id' => $request->lahan_id, - 'komoditas_id' => $request->komoditas_id, - 'tanggal_pemeriksaan' => $request->tanggal_pemeriksaan, - 'grade' => $request->grade, - 'kadar_air' => $request->kadar_air, - 'berat_bersih' => $request->berat_bersih, - 'berat_rusak' => $request->berat_rusak, - 'persentase_kerusakan' => $beratBersih > 0 ? round(($beratRusak / $beratBersih) * 100, 2) : null, - 'standar_mutu' => $request->standar_mutu, - 'status_kelayakan' => $request->status_kelayakan, - 'pemeriksa' => $request->pemeriksa, - 'catatan' => $request->catatan, - ]; - } -} diff --git a/app/Http/Controllers/Web/Produktivitas/ProduksiController.php b/app/Http/Controllers/Web/Produktivitas/ProduksiController.php index c90b825..d7e387b 100644 --- a/app/Http/Controllers/Web/Produktivitas/ProduksiController.php +++ b/app/Http/Controllers/Web/Produktivitas/ProduksiController.php @@ -7,7 +7,6 @@ use App\Enums\Role; use App\Models\Pertanian\Komoditas; use App\Models\Pertanian\Lahan; use App\Models\Pertanian\Produksi; -use App\Models\Pertanian\Tanaman; use App\Models\Profile; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; @@ -17,7 +16,7 @@ class ProduksiController extends Controller { public function index(Request $request) { - $query = Produksi::with(['profile', 'lahan', 'tanaman', 'komoditas']) + $query = Produksi::with(['profile', 'lahan', 'komoditas']) ->orderBy('created_at', 'desc'); if ($request->filled('search')) { @@ -35,9 +34,14 @@ class ProduksiController extends Controller $query->where('status_panen', $request->status_panen); } - $produksi = $query->paginate($request->per_page ?? 10); + if ($request->filled('komoditas_id')) { + $query->where('komoditas_id', $request->komoditas_id); + } - return view('produktivitas.produksi.index', compact('produksi')); + $produksi = $query->paginate($request->per_page ?? 10); + $komoditas = Komoditas::orderBy('nama')->get(); + + return view('produktivitas.produksi.index', compact('produksi', 'komoditas')); } public function create() @@ -58,12 +62,12 @@ class ProduksiController extends Controller 'updated_by' => auth()->id(), ]); - return redirect()->route('produksi.index')->with('success', 'Data produksi berhasil ditambahkan.'); + return redirect()->route('produksi.index')->with('success', 'Data hasil panen berhasil ditambahkan.'); } public function show($id) { - $produksi = Produksi::with(['profile', 'lahan', 'tanaman', 'komoditas', 'kualitas'])->findOrFail($id); + $produksi = Produksi::with(['profile', 'lahan', 'komoditas'])->findOrFail($id); return view('produktivitas.produksi.view', compact('produksi')); } @@ -88,7 +92,7 @@ class ProduksiController extends Controller 'updated_by' => auth()->id(), ]); - return redirect()->route('produksi.index')->with('success', 'Data produksi berhasil diperbarui.'); + return redirect()->route('produksi.index')->with('success', 'Data hasil panen berhasil diperbarui.'); } public function destroy($id) @@ -97,7 +101,7 @@ class ProduksiController extends Controller $produksi->update(['deleted_by' => auth()->id()]); $produksi->delete(); - return response()->json(['status' => 'success', 'message' => 'Data produksi berhasil dihapus.']); + return response()->json(['status' => 'success', 'message' => 'Data hasil panen berhasil dihapus.']); } private function formData(): array @@ -107,7 +111,6 @@ class ProduksiController extends Controller 'lahan' => Lahan::whereHas('profile', function ($query) { $query->where('role', Role::PETANI->value); })->orderBy('nama')->get(), - 'tanaman' => Tanaman::with('komoditas')->orderBy('nama')->get(), 'komoditas' => Komoditas::orderBy('nama')->get(), ]; } @@ -124,15 +127,14 @@ class ProduksiController extends Controller 'required', Rule::exists('map_lahan', 'id')->where('profile_id', $request->profile_id), ], - 'tanaman_id' => ['nullable', 'exists:map_tanaman,id'], 'komoditas_id' => ['required', 'exists:master_komoditas,id'], 'periode' => ['nullable', 'string', 'max:255'], - 'tanggal_panen' => ['nullable', 'date'], + 'tanggal_panen' => ['required', 'date'], 'luas_tanam' => ['nullable', 'numeric', 'min:0'], 'luas_panen' => ['nullable', 'numeric', 'min:0'], - 'jumlah_panen' => ['nullable', 'numeric', 'min:0'], + 'jumlah_panen' => ['required', 'numeric', 'min:0'], 'satuan' => ['required', 'string', 'max:20'], - 'status_panen' => ['required', 'in:belum_panen,panen_sebagian,selesai'], + 'status_panen' => ['nullable', 'in:panen_sebagian,selesai'], 'catatan' => ['nullable', 'string'], ]); } @@ -146,7 +148,7 @@ class ProduksiController extends Controller 'kode_produksi' => $request->kode_produksi, 'profile_id' => $request->profile_id, 'lahan_id' => $request->lahan_id, - 'tanaman_id' => $request->tanaman_id, + 'tanaman_id' => null, 'komoditas_id' => $request->komoditas_id, 'periode' => $request->periode, 'tanggal_panen' => $request->tanggal_panen, @@ -155,7 +157,7 @@ class ProduksiController extends Controller 'jumlah_panen' => $request->jumlah_panen, 'satuan' => $request->satuan, 'produktivitas' => $luasPanen > 0 ? round($jumlahPanen / $luasPanen, 2) : null, - 'status_panen' => $request->status_panen, + 'status_panen' => $request->status_panen ?? 'selesai', 'catatan' => $request->catatan, ]; } diff --git a/app/Models/Pertanian/Kualitas.php b/app/Models/Pertanian/Kualitas.php deleted file mode 100644 index 062d782..0000000 --- a/app/Models/Pertanian/Kualitas.php +++ /dev/null @@ -1,58 +0,0 @@ - 'date', - ]; - - public function produksi() - { - return $this->belongsTo(Produksi::class, 'produksi_id'); - } - - public function profile() - { - return $this->belongsTo(Profile::class, 'profile_id'); - } - - public function lahan() - { - return $this->belongsTo(Lahan::class, 'lahan_id'); - } - - public function komoditas() - { - return $this->belongsTo(Komoditas::class, 'komoditas_id'); - } -} diff --git a/app/Models/Pertanian/Produksi.php b/app/Models/Pertanian/Produksi.php index ce1cab2..9d54818 100644 --- a/app/Models/Pertanian/Produksi.php +++ b/app/Models/Pertanian/Produksi.php @@ -55,9 +55,4 @@ class Produksi extends Model { return $this->belongsTo(Komoditas::class, 'komoditas_id'); } - - public function kualitas() - { - return $this->hasMany(Kualitas::class, 'produksi_id'); - } } diff --git a/database/migrations/2026_06_05_000001_create_produksi_table.php b/database/migrations/2026_06_05_000001_create_produksi_table.php index 4055c25..364c56c 100644 --- a/database/migrations/2026_06_05_000001_create_produksi_table.php +++ b/database/migrations/2026_06_05_000001_create_produksi_table.php @@ -22,7 +22,7 @@ return new class extends Migration $table->decimal('jumlah_panen', 12, 2)->nullable(); $table->string('satuan', 20)->default('kg'); $table->decimal('produktivitas', 12, 2)->nullable(); - $table->string('status_panen')->default('belum_panen'); + $table->string('status_panen')->default('selesai'); $table->text('catatan')->nullable(); $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); diff --git a/database/migrations/2026_06_05_000002_create_kualitas_table.php b/database/migrations/2026_06_05_000002_create_kualitas_table.php deleted file mode 100644 index 69101d9..0000000 --- a/database/migrations/2026_06_05_000002_create_kualitas_table.php +++ /dev/null @@ -1,39 +0,0 @@ -id(); - $table->foreignId('produksi_id')->nullable()->constrained('produksi')->onDelete('set null'); - $table->foreignId('profile_id')->nullable()->constrained('profiles')->onDelete('set null'); - $table->foreignId('lahan_id')->nullable()->constrained('map_lahan')->onDelete('set null'); - $table->foreignId('komoditas_id')->nullable()->constrained('master_komoditas')->onDelete('set null'); - $table->date('tanggal_pemeriksaan')->nullable(); - $table->string('grade')->nullable(); - $table->decimal('kadar_air', 8, 2)->nullable(); - $table->decimal('berat_bersih', 12, 2)->nullable(); - $table->decimal('berat_rusak', 12, 2)->nullable(); - $table->decimal('persentase_kerusakan', 8, 2)->nullable(); - $table->string('standar_mutu')->nullable(); - $table->string('status_kelayakan')->default('layak'); - $table->string('pemeriksa')->nullable(); - $table->text('catatan')->nullable(); - $table->foreignId('created_by')->nullable()->constrained('users')->onDelete('set null'); - $table->foreignId('updated_by')->nullable()->constrained('users')->onDelete('set null'); - $table->foreignId('deleted_by')->nullable()->constrained('users')->onDelete('set null'); - $table->timestamps(); - $table->softDeletes(); - }); - } - - public function down(): void - { - Schema::dropIfExists('kualitas'); - } -}; diff --git a/resources/views/layout/sidebar.blade.php b/resources/views/layout/sidebar.blade.php index 144fff4..e31ecce 100644 --- a/resources/views/layout/sidebar.blade.php +++ b/resources/views/layout/sidebar.blade.php @@ -88,7 +88,7 @@ -