Initial Ladill Frontdesk release with deploy pipeline.
Visitor management app with SSO, kiosk, badges, reports, and Gitea CI deploy to frontdesk.ladill.com. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Frontdesk;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Controllers\Frontdesk\Concerns\ScopesToAccount;
|
||||
use App\Models\AuditLog;
|
||||
use App\Models\Visit;
|
||||
use App\Models\Visitor;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\View\View;
|
||||
|
||||
class ComplianceController extends Controller
|
||||
{
|
||||
use ScopesToAccount;
|
||||
|
||||
public function index(Request $request): View
|
||||
{
|
||||
$this->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.');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user