get('per_page', 10); $search = $request->get('search'); $totalJenisKomoditas = \App\Models\Master\JenisKomoditas::count(); $totalIndukKomoditas = \App\Models\Master\JenisKomoditas::distinct('komoditas_id')->count('komoditas_id'); $jenisKomoditas = \App\Models\Master\JenisKomoditas::with('komoditas') ->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}%"); }); }); }) ->latest() ->paginate($perPage); $komoditas = \App\Models\Pertanian\Komoditas::orderBy('nama', 'asc')->get(); return view('master.jeniskomoditas.index', compact( 'jenisKomoditas', 'komoditas', 'totalJenisKomoditas', 'totalIndukKomoditas' )); $jenisKomoditas = JenisKomoditas::with('komoditas') ->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}%"); }); }); }) ->latest() ->paginate($perPage); $komoditas = Komoditas::orderBy('nama', 'asc')->get(); return view('master.jeniskomoditas.index', compact( 'jenisKomoditas', 'komoditas' )); } 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. */ public function store(Request $request) { $validated = $request->validate([ 'komoditas_id' => [ 'required', 'integer', 'exists:master_komoditas,id', ], 'nama' => [ 'required', 'string', 'max:255', Rule::unique('jenis_komoditas', 'nama') ->where('komoditas_id', $request->komoditas_id), ], ], [ 'komoditas_id.required' => 'Komoditas wajib dipilih.', 'komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.', 'nama.required' => 'Nama jenis komoditas wajib diisi.', 'nama.unique' => 'Nama jenis komoditas sudah tersedia pada komoditas ini.', ]); try { DB::beginTransaction(); $jenisKomoditas = JenisKomoditas::create([ 'komoditas_id' => $validated['komoditas_id'], 'nama' => $validated['nama'], 'created_by' => auth()->id(), 'updated_by' => auth()->id(), ]); DB::commit(); return response()->json([ 'status' => 'success', 'message' => 'Data jenis komoditas berhasil disimpan.', 'data' => $jenisKomoditas, ]); } catch (\Throwable $e) { DB::rollBack(); Log::error('Gagal menyimpan jenis komoditas', [ 'error' => $e->getMessage(), 'request' => $request->all(), ]); return response()->json([ 'status' => 'error', 'message' => 'Gagal menyimpan data: ' . $e->getMessage(), ], 500); } } /** * Display the specified resource. */ public function show(string $id) { try { $jenisKomoditas = JenisKomoditas::with('komoditas')->findOrFail($id); return response()->json([ 'status' => 'success', 'data' => $jenisKomoditas, ]); } catch (\Throwable $e) { return response()->json([ 'status' => 'error', 'message' => 'Data jenis komoditas tidak ditemukan.', ], 404); } } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { $jenisKomoditas = JenisKomoditas::findOrFail($id); $validated = $request->validate([ 'komoditas_id' => [ 'required', 'integer', 'exists:master_komoditas,id', ], 'nama' => [ 'required', 'string', 'max:255', Rule::unique('jenis_komoditas', 'nama') ->where('komoditas_id', $request->komoditas_id) ->ignore($jenisKomoditas->id), ], 'path' => [ 'nullable', 'string', ], ], [ 'komoditas_id.required' => 'Komoditas wajib dipilih.', 'komoditas_id.exists' => 'Komoditas yang dipilih tidak valid.', 'nama.required' => 'Nama jenis komoditas wajib diisi.', 'nama.unique' => 'Nama jenis komoditas sudah tersedia pada komoditas ini.', ]); try { DB::beginTransaction(); $jenisKomoditas->update([ 'komoditas_id' => $validated['komoditas_id'], 'nama' => $validated['nama'], 'updated_by' => auth()->id(), ]); DB::commit(); return response()->json([ 'status' => 'success', 'message' => 'Data jenis komoditas berhasil diperbarui.', 'data' => $jenisKomoditas->fresh('komoditas'), ]); } catch (\Throwable $e) { DB::rollBack(); Log::error('Gagal update jenis komoditas', [ 'error' => $e->getMessage(), 'id' => $id, 'request' => $request->all(), ]); return response()->json([ 'status' => 'error', 'message' => 'Gagal mengupdate data: ' . $e->getMessage(), ], 500); } } /** * Remove the specified resource from storage. */ public function destroy(string $id) { try { DB::beginTransaction(); $jenisKomoditas = JenisKomoditas::findOrFail($id); $jenisKomoditas->update(['deleted_by' => auth()->id()]); $jenisKomoditas->delete(); DB::commit(); return response()->json([ 'status' => 'success', 'message' => 'Data jenis komoditas berhasil dihapus.', ]); } catch (\Throwable $e) { DB::rollBack(); Log::error('Gagal hapus jenis komoditas', [ 'error' => $e->getMessage(), 'id' => $id, ]); return response()->json([ 'status' => 'error', 'message' => 'Gagal menghapus data: ' . $e->getMessage(), ], 500); } } }