authorizeAbility($request, 'compliance.restore'); $organization = $this->organization($request); $owner = $this->ownerRef($request); $deletedVisitors = Visitor::owned($owner) ->onlyTrashed() ->where('organization_id', $organization->id) ->latest('deleted_at') ->limit(25) ->get(); $deletedVisits = Visit::owned($owner) ->onlyTrashed() ->where('organization_id', $organization->id) ->with('visitor') ->latest('deleted_at') ->limit(25) ->get(); return view('frontdesk.compliance.recovery', compact('deletedVisitors', 'deletedVisits', 'organization')); } public function restoreVisitor(Request $request, int $visitorId): RedirectResponse { $this->authorizeAbility($request, 'compliance.restore'); $organization = $this->organization($request); $visitor = Visitor::owned($this->ownerRef($request)) ->onlyTrashed() ->where('organization_id', $organization->id) ->findOrFail($visitorId); $visitor->restore(); AuditLog::record( $this->ownerRef($request), 'visitor.restored', $organization->id, $this->ownerRef($request), Visitor::class, $visitor->id, ['full_name' => $visitor->full_name], ); return back()->with('success', 'Visitor restored.'); } public function restoreVisit(Request $request, int $visitId): RedirectResponse { $this->authorizeAbility($request, 'compliance.restore'); $organization = $this->organization($request); $visit = Visit::owned($this->ownerRef($request)) ->onlyTrashed() ->where('organization_id', $organization->id) ->findOrFail($visitId); $visit->restore(); AuditLog::record( $this->ownerRef($request), 'visit.restored', $organization->id, $this->ownerRef($request), Visit::class, $visit->id, ['visitor_id' => $visit->visitor_id], ); return back()->with('success', 'Visit restored.'); } public function destroyVisitor(Request $request, Visitor $visitor): RedirectResponse { $this->authorizeAbility($request, 'visitors.manage'); $this->authorizeOwner($request, $visitor); $organization = $this->organization($request); $visitor->delete(); AuditLog::record( $this->ownerRef($request), 'visitor.deleted', $organization->id, $this->ownerRef($request), Visitor::class, $visitor->id, ['full_name' => $visitor->full_name], ); return redirect() ->route('frontdesk.visitors.index') ->with('success', 'Visitor archived.'); } public function destroyVisit(Request $request, Visit $visit): RedirectResponse { $this->authorizeAbility($request, 'visits.manage'); $this->authorizeOwner($request, $visit); $organization = $this->organization($request); abort_if($visit->isInside(), 422, 'Check out the visitor before archiving the visit.'); $visit->delete(); AuditLog::record( $this->ownerRef($request), 'visit.deleted', $organization->id, $this->ownerRef($request), Visit::class, $visit->id, ['visitor_id' => $visit->visitor_id], ); return redirect() ->route('frontdesk.visits.index') ->with('success', 'Visit archived.'); } }