middleware('check.permission:employees.read')->only(['index']); $this->middleware('check.permission:employees.create')->only(['create', 'store']); $this->middleware('check.permission:employees.update')->only(['edit', 'update']); $this->middleware('check.permission:employees.delete')->only(['destroy', 'deleteAll']); } public function index(Request $request) { $branches = Branch::withTrashed()->where('business_id', auth()->user()->business_id)->latest()->get(); $employees = Employee::with('department', 'designation', 'shift', 'branch:id,name') ->where('business_id', auth()->user()->business_id) ->when(request('search'), function ($q) { $q->where('phone', 'like', '%' . request('search') . '%') ->orWhere('amount', 'like', '%' . request('search') . '%') ->orWhere('name', 'like', '%' . request('search') . '%'); $q->orwhereHas('department', function ($d) { $d->where('name', 'like', '%' . request('search') . '%'); }); $q->orwhereHas('designation', function ($r) { $r->where('name', 'like', '%' . request('search') . '%'); }); $q->orwhereHas('shift', function ($s) { $s->where('name', 'like', '%' . request('search') . '%'); }); $q->orwhereHas('branch', function ($r) { $r->where('name', 'like', '%' . request('search') . '%'); }); }) ->when($request->branch_id, function ($q) use ($request) { $q->where('branch_id', $request->branch_id); }) ->latest() ->paginate($request->per_page ?? 20)->appends($request->query()); if ($request->ajax()) { return response()->json([ 'data' => view('hrmaddon::employees.datas', compact('employees', 'branches'))->render() ]); } return view('hrmaddon::employees.index', compact('employees', 'branches')); } public function create() { $designations = Designation::where('business_id', auth()->user()->business_id)->where('status', 1)->get(); $departments = Department::where('business_id', auth()->user()->business_id)->where('status', 1)->get(); $shifts = Shift::where('business_id', auth()->user()->business_id)->where('status', 1)->get(); return view('hrmaddon::employees.create', compact('designations', 'departments', 'shifts')); } public function store(Request $request) { $request->validate([ 'name' => 'required|string|max:255', 'designation_id' => 'required|exists:designations,id', 'department_id' => 'required|exists:departments,id', 'shift_id' => 'required|exists:shifts,id', 'amount' => 'numeric|required', 'phone' => 'required|string|max:20', 'email' => 'nullable|email|max:255', 'gender' => 'required|in:male,female,others', 'country' => 'nullable|string|max:100', 'birth_date' => 'nullable|date', 'join_date' => 'nullable|date', 'image' => 'nullable|image|mimes:jpg,png,jpeg,svg', 'status' => 'required|in:active,terminated,suspended', ]); Employee::create($request->except('business_id', 'image') + [ 'business_id' => auth()->user()->business_id, 'image' => $request->image ? $this->upload($request, 'image') : NULL ]); return response()->json([ 'message' => __('Employee created Successfully'), 'redirect' => route('hrm.employees.index') ]); } public function edit(string $id) { $employee = Employee::findOrFail($id); $designations = Designation::where('business_id', auth()->user()->business_id)->where('status', 1)->get(); $departments = Department::where('business_id', auth()->user()->business_id)->where('status', 1)->get(); $shifts = Shift::where('business_id', auth()->user()->business_id)->where('status', 1)->get(); return view('hrmaddon::employees.edit', compact('employee', 'designations', 'departments', 'shifts')); } public function update(Request $request, string $id) { $request->validate([ 'name' => 'required|string|max:255', 'designation_id' => 'required|exists:designations,id', 'department_id' => 'required|exists:departments,id', 'shift_id' => 'required|exists:shifts,id', 'amount' => 'numeric|required', 'phone' => 'required|string|max:20', 'email' => 'nullable|email|max:255', 'gender' => 'required|in:male,female,others', 'country' => 'nullable|string|max:100', 'birth_date' => 'nullable|date', 'join_date' => 'nullable|date', 'image' => 'nullable|image|mimes:jpg,png,jpeg,svg', 'status' => 'required|in:active,terminated,suspended', ]); $employee = Employee::findOrFail($id); $employee->update($request->except('business_id', 'image') + [ 'business_id' => auth()->user()->business_id, 'image' => $request->image ? $this->upload($request, 'image', $employee->image) : $employee->image ]); return response()->json([ 'message' => __('Employee updated Successfully'), 'redirect' => route('hrm.employees.index') ]); } public function destroy(string $id) { $employee = Employee::findOrFail($id); if (file_exists($employee->image)) { Storage::delete($employee->image); } $employee->delete(); return response()->json([ 'message' => __('Employee deleted successfully'), 'redirect' => route('hrm.employees.index') ]); } public function deleteAll(Request $request) { $employees = Employee::whereIn('id', $request->ids)->get(); foreach ($employees as $employee) { if (file_exists($employee->image)) { Storage::delete($employee->image); } } Employee::whereIn('id', $request->ids)->delete(); return response()->json([ 'message' => __('Selected employees deleted successfully'), 'redirect' => route('hrm.employees.index') ]); } public function bulkStore(Request $request) { $request->validate([ 'file' => 'required|file|mimes:xlsx,xls,csv' ]); $businessId = auth()->user()->business_id; $import = new EmployeeImport($businessId); try { Excel::import($import, $request->file('file')); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage(), ], 422); } return response()->json([ 'success' => true, 'message' => __('Bulk upload successfully.'), 'redirect' => route('hrm.employees.index') ]); } }