diff --git a/app/Http/Controllers/Web/Master/JenisKomoditasController.php b/app/Http/Controllers/Web/Master/JenisKomoditasController.php index d4728b2..ea6ce41 100644 --- a/app/Http/Controllers/Web/Master/JenisKomoditasController.php +++ b/app/Http/Controllers/Web/Master/JenisKomoditasController.php @@ -40,6 +40,18 @@ class JenisKomoditasController extends Controller )); } + public function getByKomoditas($komoditas_id) + { + $jenisKomoditas = JenisKomoditas::where('komoditas_id', $komoditas_id) + ->orderBy('nama', 'asc') + ->get(['id', 'nama']); + + return response()->json([ + 'status' => 'success', + 'data' => $jenisKomoditas, + ]); + } + /** * Store a newly created resource in storage. */ diff --git a/app/Http/Controllers/Web/Master/VarietasController.php b/app/Http/Controllers/Web/Master/VarietasController.php new file mode 100644 index 0000000..420380c --- /dev/null +++ b/app/Http/Controllers/Web/Master/VarietasController.php @@ -0,0 +1,226 @@ +get('per_page', 10); + $search = $request->get('search'); + + $varietas = Varietas::with(['komoditas', 'jenisKomoditas']) + ->when($search, function ($query) use ($search) { + $query->where(function ($q) use ($search) { + $q->where('nama', 'ILIKE', "%{$search}%") + ->orWhere('path', 'ILIKE', "%{$search}%") + ->orWhereHas('komoditas', function ($komoditasQuery) use ($search) { + $komoditasQuery->where('nama', 'ILIKE', "%{$search}%"); + }) + ->orWhereHas('jenisKomoditas', function ($jenisQuery) use ($search) { + $jenisQuery->where('nama', 'ILIKE', "%{$search}%"); + }); + }); + }) + ->latest() + ->paginate($perPage); + + $komoditas = Komoditas::orderBy('nama', 'asc')->get(); + + return view('master.varietas.index', compact( + 'varietas', + 'komoditas' + )); + } + + public function store(Request $request) + { + $komoditasTable = (new Komoditas)->getTable(); + $jenisKomoditasTable = (new JenisKomoditas)->getTable(); + $varietasTable = (new Varietas)->getTable(); + + $validated = $request->validate([ + 'komoditas_id' => [ + 'required', + 'integer', + Rule::exists($komoditasTable, 'id'), + ], + 'jenis_komoditas_id' => [ + 'required', + 'integer', + Rule::exists($jenisKomoditasTable, 'id') + ->where('komoditas_id', $request->komoditas_id), + ], + 'nama' => [ + 'required', + 'string', + 'max:255', + Rule::unique($varietasTable, 'nama') + ->where('komoditas_id', $request->komoditas_id) + ->where('jenis_komoditas_id', $request->jenis_komoditas_id), + ], + 'deskripsi' => [ + 'nullable', + 'string', + ], + ]); + + try { + DB::beginTransaction(); + + $varietas = Varietas::create([ + 'komoditas_id' => $validated['komoditas_id'], + 'jenis_komoditas_id' => $validated['jenis_komoditas_id'], + 'nama' => $validated['nama'], + 'deskripsi' => $validated['deskripsi'] ?? null, + 'created_by' => auth()->id(), + 'updated_by' => auth()->id(), + ]); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data varietas berhasil disimpan.', + 'data' => $varietas, + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal menyimpan varietas', [ + 'error' => $e->getMessage(), + 'request' => $request->all(), + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal menyimpan data: ' . $e->getMessage(), + ], 500); + } + } + + public function show(string $id) + { + try { + $varietas = Varietas::with(['komoditas', 'jenisKomoditas'])->findOrFail($id); + + return response()->json([ + 'status' => 'success', + 'data' => $varietas, + ]); + } catch (\Throwable $e) { + return response()->json([ + 'status' => 'error', + 'message' => 'Data varietas tidak ditemukan.', + ], 404); + } + } + + public function update(Request $request, string $id) + { + $komoditasTable = (new Komoditas)->getTable(); + $jenisKomoditasTable = (new JenisKomoditas)->getTable(); + $varietasTable = (new Varietas)->getTable(); + + $validated = $request->validate([ + 'komoditas_id' => [ + 'required', + 'integer', + Rule::exists($komoditasTable, 'id'), + ], + 'jenis_komoditas_id' => [ + 'required', + 'integer', + Rule::exists($jenisKomoditasTable, 'id') + ->where('komoditas_id', $request->komoditas_id), + ], + 'nama' => [ + 'required', + 'string', + 'max:255', + Rule::unique($varietasTable, 'nama') + ->where('komoditas_id', $request->komoditas_id) + ->where('jenis_komoditas_id', $request->jenis_komoditas_id), + ], + 'deskripsi' => [ + 'nullable', + 'string', + ], + ]); + + try { + DB::beginTransaction(); + + $varietas = Varietas::findOrFail($id); + $varietas->update([ + 'komoditas_id' => $validated['komoditas_id'], + 'jenis_komoditas_id' => $validated['jenis_komoditas_id'], + 'nama' => $validated['nama'], + 'deskripsi' => $validated['deskripsi'] ?? null, + 'updated_by' => auth()->id(), + ]); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data varietas berhasil diperbarui.', + 'data' => $varietas->fresh(['komoditas', 'jenisKomoditas']), + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal update varietas', [ + 'error' => $e->getMessage(), + 'id' => $id, + 'request' => $request->all(), + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal mengupdate data: ' . $e->getMessage(), + ], 500); + } + } + + public function destroy(string $id) + { + try { + DB::beginTransaction(); + + $varietas = Varietas::findOrFail($id); + $varietas->update(['deleted_by' => auth()->id()]); + $varietas->delete(); + + DB::commit(); + + return response()->json([ + 'status' => 'success', + 'message' => 'Data varietas berhasil dihapus.', + ]); + } catch (\Throwable $e) { + DB::rollBack(); + + Log::error('Gagal hapus varietas', [ + 'error' => $e->getMessage(), + 'id' => $id, + ]); + + return response()->json([ + 'status' => 'error', + 'message' => 'Gagal menghapus data: ' . $e->getMessage(), + ], 500); + } + } +} diff --git a/app/Models/Master/Varietas.php b/app/Models/Master/Varietas.php new file mode 100644 index 0000000..b8d867f --- /dev/null +++ b/app/Models/Master/Varietas.php @@ -0,0 +1,33 @@ +belongsTo(JenisKomoditas::class, 'jenis_komoditas_id'); + } + + public function komoditas() + { + return $this->belongsTo(Komoditas::class, 'komoditas_id'); + } +} diff --git a/resources/views/master/varietas/add.blade.php b/resources/views/master/varietas/add.blade.php new file mode 100644 index 0000000..25717c2 --- /dev/null +++ b/resources/views/master/varietas/add.blade.php @@ -0,0 +1,61 @@ +
| No | +Nama Varietas | +Komoditas | +Jenis Komoditas | +Actions | +|
|---|---|---|---|---|---|
| {{ $varietas->firstItem() + $index }} | + +
+
+
+
+
+
+
+
+ {{ $initials ?: 'VR' }}
+
+
+
+ {{ $item->nama }}
+ {{ $item->deskripsi }}
+
+ |
+
+ + + {{ $item->komoditas->nama ?? '-' }} + + | + ++ + {{ $item->jenisKomoditas->nama ?? '-' }} + + | + +
+
+
+
+
+
+
+
+ |
+ |
| + Tidak ada data ditemukan. + | +|||||