has('q') && $request->q != '') { $searchTerm = $request->q; $query->where(function($q) use ($searchTerm) { $q->where('nama', 'LIKE', "%{$searchTerm}%") ->orWhere('email', 'LIKE', "%{$searchTerm}%") ->orWhere('no_telephone', 'LIKE', "%{$searchTerm}%"); }); } $teknisis = $query->latest()->get(); // Jika request dari AJAX, return JSON if ($request->ajax() || $request->wantsJson()) { return response()->json([ 'success' => true, 'data' => $teknisis ]); } // Jika request biasa, return view return view('Admin.KelolaTeknisi.Teknisi', compact('teknisis')); } /** * Show the form for creating a new resource. */ public function create() { return view('teknisi.create'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validator = Validator::make($request->all(), [ 'nama' => 'required|string|max:100', 'tanggal_lahir' => 'required|date', 'alamat' => 'required|string', 'email' => 'nullable|email|max:100|unique:teknisis,email', 'no_telephone' => 'required|string|max:15', 'tanggal_masuk' => 'required|date', 'status' => 'required|in:aktif,tidak_aktif', ], [ 'nama.required' => 'Nama wajib diisi', 'nama.max' => 'Nama maksimal 100 karakter', 'tanggal_lahir.required' => 'Tanggal lahir wajib diisi', 'tanggal_lahir.date' => 'Format tanggal lahir tidak valid', 'alamat.required' => 'Alamat wajib diisi', 'email.email' => 'Format email tidak valid', 'email.unique' => 'Email sudah terdaftar', 'no_telephone.required' => 'Nomor telephone wajib diisi', 'no_telephone.max' => 'Nomor telephone maksimal 15 karakter', 'tanggal_masuk.required' => 'Tanggal masuk wajib diisi', 'tanggal_masuk.date' => 'Format tanggal masuk tidak valid', 'status.required' => 'Status wajib dipilih', 'status.in' => 'Status harus aktif atau tidak_aktif', ]); if ($validator->fails()) { // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } return redirect()->back() ->withErrors($validator) ->withInput(); } try { $teknisi = Teknisi::create($request->all()); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => true, 'message' => 'Data teknisi berhasil ditambahkan', 'data' => $teknisi ], 201); } return redirect()->route('teknisi.index') ->with('success', 'Data teknisi berhasil ditambahkan'); } catch (\Exception $e) { Log::error('Error creating teknisi: ' . $e->getMessage()); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => false, 'message' => 'Gagal menambahkan data teknisi: ' . $e->getMessage() ], 500); } return redirect()->back() ->with('error', 'Gagal menambahkan data teknisi: ' . $e->getMessage()) ->withInput(); } } /** * Display the specified resource. */ public function show(string $id) { try { $teknisi = Teknisi::where('id_teknisi', $id)->firstOrFail(); // Jika AJAX request, return JSON if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => true, 'data' => $teknisi ]); } return view('teknisi.show', compact('teknisi')); } catch (\Exception $e) { if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => false, 'message' => 'Data teknisi tidak ditemukan' ], 404); } return redirect()->route('teknisi.index') ->with('error', 'Data teknisi tidak ditemukan'); } } /** * Show the form for editing the specified resource. */ public function edit(string $id) { try { $teknisi = Teknisi::where('id_teknisi', $id)->firstOrFail(); return view('teknisi.edit', compact('teknisi')); } catch (\Exception $e) { return redirect()->route('teknisi.index') ->with('error', 'Data teknisi tidak ditemukan'); } } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { try { $teknisi = Teknisi::where('id_teknisi', $id)->firstOrFail(); // Log untuk debugging Log::info('Update Teknisi Request', [ 'id' => $id, 'request_data' => $request->all() ]); // Validasi - TANPA tanggal_lahir dan tanggal_masuk karena tidak boleh diubah $validator = Validator::make($request->all(), [ 'nama' => 'required|string|max:100', 'alamat' => 'required|string', 'email' => 'nullable|email|max:100|unique:teknisis,email,' . $id . ',id_teknisi', 'no_telephone' => 'required|string|max:15', 'status' => 'required|in:aktif,tidak_aktif', 'tanggal_masuk' => 'required|date', ], [ 'nama.required' => 'Nama wajib diisi', 'nama.max' => 'Nama maksimal 100 karakter', 'alamat.required' => 'Alamat wajib diisi', 'email.email' => 'Format email tidak valid', 'email.unique' => 'Email sudah terdaftar', 'no_telephone.required' => 'Nomor telephone wajib diisi', 'no_telephone.max' => 'Nomor telephone maksimal 15 karakter', 'status.required' => 'Status wajib dipilih', 'status.in' => 'Status harus aktif atau tidak_aktif', 'tanggal_masuk.required' => 'Tanggal masuk wajib diisi', 'tanggal_masuk.date' => 'Format tanggal masuk tidak valid', ]); if ($validator->fails()) { Log::warning('Validation Failed', [ 'errors' => $validator->errors()->toArray() ]); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => false, 'errors' => $validator->errors() ], 422); } return redirect()->back() ->withErrors($validator) ->withInput(); } // Update data $teknisi->update([ 'nama' => $request->nama, 'alamat' => $request->alamat, 'email' => $request->email, 'no_telephone' => $request->no_telephone, 'status' => $request->status, 'tanggal_masuk' => $request->tanggal_masuk, ]); Log::info('Teknisi Updated Successfully', [ 'id' => $id, 'updated_data' => $teknisi->fresh()->toArray() ]); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => true, 'message' => 'Data teknisi berhasil diperbarui', 'data' => $teknisi ]); } return redirect()->route('teknisi.index') ->with('success', 'Data teknisi berhasil diperbarui'); } catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { Log::error('Teknisi Not Found', ['id' => $id]); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => false, 'message' => 'Data teknisi tidak ditemukan' ], 404); } return redirect()->route('teknisi.index') ->with('error', 'Data teknisi tidak ditemukan'); } catch (\Exception $e) { Log::error('Update Teknisi Failed', [ 'id' => $id, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString() ]); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => false, 'message' => 'Gagal memperbarui data teknisi: ' . $e->getMessage() ], 500); } return redirect()->back() ->with('error', 'Gagal memperbarui data teknisi: ' . $e->getMessage()) ->withInput(); } } /** * Search teknisi */ public function search(Request $request) { $query = $request->get('q'); $teknisis = Teknisi::where('nama', 'LIKE', "%{$query}%") ->orWhere('email', 'LIKE', "%{$query}%") ->orWhere('no_telephone', 'LIKE', "%{$query}%") ->latest() ->get(); // Jika AJAX request if (request()->ajax() || request()->wantsJson()) { return response()->json([ 'success' => true, 'data' => $teknisis ]); } return view('Admin.KelolaTeknisi.Teknisi', compact('teknisis')); } }