authorizeAbility($request, 'hosts.view'); $organization = $this->organization($request); $hosts = Host::owned($this->ownerRef($request)) ->where('organization_id', $organization->id); $this->scopeToBranch($request, $hosts); $hosts = $hosts->orderBy('name')->paginate(25); return view('frontdesk.hosts.index', compact('hosts', 'organization')); } public function create(Request $request): View { $this->authorizeAbility($request, 'hosts.manage'); $organization = $this->organization($request); $branches = Branch::owned($this->ownerRef($request)) ->where('organization_id', $organization->id) ->where('is_active', true) ->orderBy('name') ->get(); return view('frontdesk.hosts.create', compact('organization', 'branches')); } public function store(Request $request): RedirectResponse { $this->authorizeAbility($request, 'hosts.manage'); $organization = $this->organization($request); $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'department' => ['nullable', 'string', 'max:255'], 'office' => ['nullable', 'string', 'max:255'], 'phone' => ['nullable', 'string', 'max:50'], 'email' => ['nullable', 'email', 'max:255'], 'extension' => ['nullable', 'string', 'max:20'], 'user_ref' => ['nullable', 'string', 'max:64'], 'branch_id' => ['nullable', 'integer'], ]); Host::create([ 'owner_ref' => $this->ownerRef($request), 'organization_id' => $organization->id, ...$validated, ]); return redirect()->route('frontdesk.hosts.index')->with('success', 'Host added.'); } public function edit(Request $request, Host $host): View { $this->authorizeAbility($request, 'hosts.manage'); $this->authorizeOwner($request, $host); $branches = Branch::owned($this->ownerRef($request)) ->where('organization_id', $host->organization_id) ->where('is_active', true) ->orderBy('name') ->get(); return view('frontdesk.hosts.edit', compact('host', 'branches')); } public function update(Request $request, Host $host): RedirectResponse { $this->authorizeAbility($request, 'hosts.manage'); $this->authorizeOwner($request, $host); $validated = $request->validate([ 'name' => ['required', 'string', 'max:255'], 'department' => ['nullable', 'string', 'max:255'], 'office' => ['nullable', 'string', 'max:255'], 'phone' => ['nullable', 'string', 'max:50'], 'email' => ['nullable', 'email', 'max:255'], 'extension' => ['nullable', 'string', 'max:20'], 'user_ref' => ['nullable', 'string', 'max:64'], 'branch_id' => ['nullable', 'integer'], 'is_available' => ['boolean'], ]); $host->update([ ...$validated, 'is_available' => $request->boolean('is_available', true), ]); return redirect()->route('frontdesk.hosts.index')->with('success', 'Host updated.'); } public function destroy(Request $request, Host $host): RedirectResponse { $this->authorizeAbility($request, 'hosts.manage'); $this->authorizeOwner($request, $host); $host->delete(); return redirect()->route('frontdesk.hosts.index')->with('success', 'Host removed.'); } }