user(); $creatorId = $user->type === 'company' ? $user->id : $user->created_by; $query = AttendanceLocation::with('branch') ->where('created_by', $creatorId); if ($request->filled('search')) { $search = $request->input('search'); $query->where(function ($q) use ($search) { $q->where('name', 'like', "%{$search}%") ->orWhere('address', 'like', "%{$search}%"); }); } if ($request->filled('branch_id') && $request->branch_id !== 'all') { $query->where('branch_id', $request->branch_id); } if ($request->filled('status') && $request->status !== 'all') { $query->where('is_active', $request->status === 'active'); } $perPage = $request->input('per_page', 10); $locations = $query->orderBy('id', 'desc')->paginate($perPage)->withQueryString(); $branches = Branch::where('created_by', $creatorId) ->where('status', 'active') ->select('id', 'name') ->get(); $allEmployees = Employee::with('user') ->where('created_by', $creatorId) ->get() ->map(function ($emp) { return [ 'id' => $emp->id, 'name' => $emp->user ? $emp->user->name : "Employee #{$emp->id}", ]; }); $stats = [ 'total' => AttendanceLocation::where('created_by', $creatorId)->count(), 'active' => AttendanceLocation::where('created_by', $creatorId)->where('is_active', true)->count(), 'inactive' => AttendanceLocation::where('created_by', $creatorId)->where('is_active', false)->count(), ]; return Inertia::render('hr/attendance-locations/index', [ 'locations' => $locations, 'branches' => $branches, 'employees' => $allEmployees, 'stats' => $stats, 'filters' => $request->only(['search', 'branch_id', 'status', 'per_page']), ]); } public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'branch_id' => 'nullable|exists:branches,id', 'address' => 'nullable|string', 'latitude' => 'required|numeric', 'longitude' => 'required|numeric', 'radius_meters' => 'required|integer|min:10|max:10000', 'is_active' => 'boolean', ]); $user = $request->user(); $creatorId = $user->type === 'company' ? $user->id : $user->created_by; $location = AttendanceLocation::create([ 'created_by' => $creatorId, 'branch_id' => $validated['branch_id'] ?? null, 'name' => $validated['name'], 'address' => $validated['address'] ?? null, 'latitude' => $validated['latitude'], 'longitude' => $validated['longitude'], 'radius_meters' => $validated['radius_meters'], 'is_active' => $validated['is_active'] ?? true, ]); return redirect()->back()->with('success', 'Attendance location created successfully.'); } public function update(Request $request, AttendanceLocation $attendanceLocation) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'branch_id' => 'nullable|exists:branches,id', 'address' => 'nullable|string', 'latitude' => 'required|numeric', 'longitude' => 'required|numeric', 'radius_meters' => 'required|integer|min:10|max:10000', 'is_active' => 'boolean', ]); $attendanceLocation->update([ 'branch_id' => $validated['branch_id'] ?? null, 'name' => $validated['name'], 'address' => $validated['address'] ?? null, 'latitude' => $validated['latitude'], 'longitude' => $validated['longitude'], 'radius_meters' => $validated['radius_meters'], 'is_active' => $validated['is_active'] ?? true, ]); return redirect()->back()->with('success', 'Attendance location updated successfully.'); } public function destroy(AttendanceLocation $attendanceLocation) { $attendanceLocation->delete(); return redirect()->back()->with('success', 'Attendance location deleted successfully.'); } public function toggleStatus(AttendanceLocation $attendanceLocation) { $attendanceLocation->update([ 'is_active' => !$attendanceLocation->is_active, ]); return redirect()->back()->with('success', 'Location status updated.'); } }