middleware('check.permission:leaves.read')->only(['index']); $this->middleware('check.permission:leaves.create')->only(['store']); $this->middleware('check.permission:leaves.update')->only(['update', 'status']); $this->middleware('check.permission:leaves.delete')->only(['destroy', 'deleteAll']); } public function index(Request $request) { $employees = Employee::where('business_id', auth()->user()->business_id)->latest()->get(); $departments = Department::where('business_id', auth()->user()->business_id)->whereStatus(1)->latest()->get(); $leave_types = LeaveType::where('business_id', auth()->user()->business_id)->whereStatus(1)->latest()->get(); $leaves = Leave::with(['employee:id,name', 'branch:id,name', 'leave_type:id,name', 'department:id,name']) ->where('business_id', auth()->user()->business_id) ->when($request->branch_id, function ($q) use ($request) { $q->where('branch_id', $request->branch_id); }) ->when($request->search, function ($query) use ($request) { $search = $request->search; $query->where(function ($query) use ($search) { $query->where('description', 'like', '%' . $search . '%') ->orWhere('start_date', 'like', '%' . $search . '%') ->orWhere('end_date', 'like', '%' . $search . '%') ->orWhere('leave_duration', 'like', '%' . $search . '%') ->orWhere('month', 'like', '%' . $search . '%') ->orWhere('status', 'like', '%' . $search . '%') ->orWhereHas('employee', function ($q) use ($search) { $q->where('name', 'like', '%' . $search . '%'); }) ->orWhereHas('department', function ($q) use ($search) { $q->where('name', 'like', '%' . $search . '%'); }) ->orWhereHas('branch', function ($q) use ($search) { $q->where('name', 'like', '%' . $search . '%'); }) ->orWhereHas('leave_type', function ($q) use ($search) { $q->where('name', 'like', '%' . $search . '%'); }); }); }) ->when($request->employee, function ($query) use ($request) { $employeeId = $request->employee; $query->where('employee_id', $employeeId); }) ->when($request->filled('month'), function ($query) use ($request) { $query->where('month', $request->month); }) ->latest() ->paginate($request->per_page ?? 20)->appends($request->query()); if ($request->ajax()) { return response()->json([ 'data' => view('hrmaddon::leaves.datas', compact('leaves'))->render() ]); } $branches = Branch::withTrashed()->where('business_id', auth()->user()->business_id)->latest()->get(); return view('hrmaddon::leaves.index', compact('leaves', 'employees', 'departments', 'leave_types', 'branches')); } public function store(Request $request) { $request->validate([ 'employee_id' => 'required|exists:employees,id', 'department_id' => 'required|exists:departments,id', 'leave_type_id' => 'required|exists:leave_types,id', 'start_date' => 'required|date', 'end_date' => 'required|date|after_or_equal:start_date', 'leave_duration' => 'required|numeric|min:0.5', 'month' => 'required|string', 'status' => 'required|in:pending,approved,rejected', 'description' => 'nullable|string', ]); Leave::create($request->except('business_id') + [ 'business_id' => auth()->user()->business_id, ]); return response()->json([ 'message' => __('Leave created successfully'), 'redirect' => route('hrm.leaves.index') ]); } public function update(Request $request, $id) { $request->validate([ 'employee_id' => 'required|exists:employees,id', 'department_id' => 'required|exists:departments,id', 'leave_type_id' => 'required|exists:leave_types,id', 'start_date' => 'required|date', 'end_date' => 'required|date|after_or_equal:start_date', 'leave_duration' => 'required|numeric|min:0.5', 'month' => 'required|string', 'status' => 'required|in:pending,approved,rejected', 'description' => 'nullable|string', ]); $leave = Leave::findOrFail($id); $leave->update($request->except('business_id') + [ 'business_id' => auth()->user()->business_id, ]); return response()->json([ 'message' => __('Leave Updated successfully'), 'redirect' => route('hrm.leaves.index') ]); } public function destroy($id) { $leave = Leave::findOrFail($id); $leave->delete(); return response()->json([ 'message' => __('Leave Deleted Successfully'), 'redirect' => route('hrm.leaves.index') ]); } public function deleteAll(Request $request) { Leave::whereIn('id', $request->input('ids'))->delete(); return response()->json([ 'message' => __('All Leaves deleted successfully'), 'redirect' => route('hrm.leaves.index') ]); } public function status(Request $request, $id) { $order = Leave::findOrFail($id); $order->update(['status' => $request->status]); return response()->json(['message' => 'Leave']); } public function getDepartment() { $employee = Employee::findOrFail(request('employee_id')); $department = Department::findOrFail($employee->department_id); return response()->json([ 'data' => [ 'id' => $department->id, 'name' => $department->name ] ]); } }