Deploy Ladill Frontdesk / deploy (push) Successful in 47s
Pro is GHS 990/branch/mo and Enterprise is GHS 1990/branch/mo, with the Care-style branch selector UI, self-serve Enterprise checkout, and renewal charges scaled to billed branches.
216 lines
18 KiB
PHP
216 lines
18 KiB
PHP
<?php
|
|
|
|
use App\Http\Controllers\Auth\SsoLoginController;
|
|
use App\Http\Controllers\Frontdesk\AiController;
|
|
use App\Http\Controllers\Frontdesk\AuditLogController;
|
|
use App\Http\Controllers\Frontdesk\BadgeController;
|
|
use App\Http\Controllers\Frontdesk\BranchController;
|
|
use App\Http\Controllers\Frontdesk\BuildingController;
|
|
use App\Http\Controllers\Frontdesk\ComplianceController;
|
|
use App\Http\Controllers\Frontdesk\DashboardController;
|
|
use App\Http\Controllers\Frontdesk\DeviceController;
|
|
use App\Http\Controllers\Frontdesk\EmployeeController;
|
|
use App\Http\Controllers\Frontdesk\EmployeePortalController;
|
|
use App\Http\Controllers\Frontdesk\HostController;
|
|
use App\Http\Controllers\Frontdesk\HostPortalController;
|
|
use App\Http\Controllers\Frontdesk\IntegrationController;
|
|
use App\Http\Controllers\Frontdesk\IssueReportController;
|
|
use App\Http\Controllers\Frontdesk\KioskController;
|
|
use App\Http\Controllers\Frontdesk\KioskDeviceController;
|
|
use App\Http\Controllers\Frontdesk\MemberController;
|
|
use App\Http\Controllers\Frontdesk\OnboardingController;
|
|
use App\Http\Controllers\Frontdesk\ProController;
|
|
use App\Http\Controllers\Frontdesk\QrScanController;
|
|
use App\Http\Controllers\Frontdesk\ReceptionDeskController;
|
|
use App\Http\Controllers\Frontdesk\ReportController;
|
|
use App\Http\Controllers\Frontdesk\SecurityController;
|
|
use App\Http\Controllers\Frontdesk\ServiceQueueController;
|
|
use App\Http\Controllers\Frontdesk\SettingsController;
|
|
use App\Http\Controllers\Frontdesk\VisitController;
|
|
use App\Http\Controllers\Frontdesk\VisitorController;
|
|
use App\Http\Controllers\Frontdesk\WatchlistController;
|
|
use App\Http\Controllers\Frontdesk\WalletController;
|
|
use App\Http\Controllers\IcalFeedController;
|
|
use App\Http\Controllers\NotificationController;
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
Route::get('/', fn () => auth()->check()
|
|
? redirect()->route('frontdesk.dashboard')
|
|
: redirect()->route('sso.connect'))->name('frontdesk.root');
|
|
|
|
Route::get('/login', [SsoLoginController::class, 'connect'])->name('login');
|
|
Route::get('/sso/connect', [SsoLoginController::class, 'connect'])->name('sso.connect');
|
|
Route::get('/sso/callback', [SsoLoginController::class, 'callback'])->name('sso.callback');
|
|
Route::get('/sso/error', [SsoLoginController::class, 'failed'])->name('sso.failed');
|
|
Route::post('/logout', [SsoLoginController::class, 'logout'])->name('logout');
|
|
Route::get('/sso/logout-bridge', [SsoLoginController::class, 'logoutBridge'])->name('sso.logout-bridge');
|
|
Route::get('/sso/logout-frontchannel', [SsoLoginController::class, 'frontchannelLogout'])->name('sso.logout-frontchannel');
|
|
Route::get('/sso/platform-signed-out', [SsoLoginController::class, 'platformSignedOut'])->name('sso.platform-signed-out');
|
|
Route::get('/signed-out', fn () => auth()->check() ? redirect()->route('frontdesk.dashboard') : view('auth.signed-out'))->name('frontdesk.signed-out');
|
|
|
|
Route::get('/q/{token}', [QrScanController::class, 'show'])->middleware('throttle:qr-scan')->name('frontdesk.qr.show');
|
|
Route::post('/q/{token}/checkout', [QrScanController::class, 'checkOut'])->middleware('throttle:qr-scan')->name('frontdesk.qr.checkout');
|
|
|
|
Route::get('/integrations/ical/{organization}', IcalFeedController::class)->name('frontdesk.integrations.ical');
|
|
|
|
Route::middleware(['frontdesk.device:kiosk', 'throttle:kiosk-device'])->prefix('kiosk/d')->group(function () {
|
|
Route::get('/{token}', [KioskDeviceController::class, 'show'])->name('frontdesk.kiosk.device');
|
|
Route::post('/{token}/check-in', [KioskDeviceController::class, 'checkIn'])->name('frontdesk.kiosk.device.check-in');
|
|
Route::post('/{token}/check-out', [KioskDeviceController::class, 'checkOut'])->name('frontdesk.kiosk.device.check-out');
|
|
Route::post('/{token}/staff/action', [KioskDeviceController::class, 'staffAction'])->name('frontdesk.kiosk.device.staff.action');
|
|
});
|
|
|
|
Route::middleware(['auth', 'platform.session'])->group(function () {
|
|
Route::get('/onboarding', [OnboardingController::class, 'show'])->name('frontdesk.onboarding.show');
|
|
Route::post('/onboarding', [OnboardingController::class, 'store'])->name('frontdesk.onboarding.store');
|
|
|
|
Route::middleware(['frontdesk.setup'])->group(function () {
|
|
Route::get('/dashboard', [DashboardController::class, 'index'])->name('frontdesk.dashboard');
|
|
|
|
Route::post('/ai/chat', [AiController::class, 'chat'])->middleware('throttle:30,1')->name('frontdesk.ai.chat');
|
|
|
|
Route::get('/notifications', [NotificationController::class, 'index'])->name('notifications.index');
|
|
Route::get('/notifications/unread', [NotificationController::class, 'unread'])->name('notifications.unread');
|
|
Route::post('/notifications/{id}/read', [NotificationController::class, 'markAsRead'])->name('notifications.mark-read');
|
|
Route::post('/notifications/mark-all-read', [NotificationController::class, 'markAllAsRead'])->name('notifications.mark-all-read');
|
|
|
|
Route::get('/visits', [VisitController::class, 'index'])->name('frontdesk.visits.index');
|
|
Route::get('/visits/calendar', [VisitController::class, 'calendar'])->name('frontdesk.visits.calendar');
|
|
Route::get('/visits/create', [VisitController::class, 'create'])->name('frontdesk.visits.create');
|
|
Route::post('/visits', [VisitController::class, 'store'])->name('frontdesk.visits.store');
|
|
Route::get('/visits/schedule', [VisitController::class, 'scheduleForm'])->name('frontdesk.visits.schedule');
|
|
Route::post('/visits/schedule', [VisitController::class, 'scheduleStore'])->name('frontdesk.visits.schedule.store');
|
|
Route::get('/visits/{visit}', [VisitController::class, 'show'])->name('frontdesk.visits.show');
|
|
Route::post('/visits/{visit}/activate', [VisitController::class, 'activate'])->name('frontdesk.visits.activate');
|
|
Route::post('/visits/{visit}/approve', [VisitController::class, 'approve'])->name('frontdesk.visits.approve');
|
|
Route::post('/visits/{visit}/waiting', [VisitController::class, 'markWaiting'])->name('frontdesk.visits.waiting');
|
|
Route::post('/visits/{visit}/cancel', [VisitController::class, 'cancel'])->name('frontdesk.visits.cancel');
|
|
Route::post('/visits/{visit}/checkout', [VisitController::class, 'checkOut'])->name('frontdesk.visits.checkout');
|
|
Route::get('/visits/{visit}/badge', [BadgeController::class, 'print'])->name('frontdesk.visits.badge');
|
|
Route::get('/visits/{visit}/badge/preview', [BadgeController::class, 'preview'])->name('frontdesk.visits.badge.preview');
|
|
|
|
Route::get('/settings/badge-template', [BadgeController::class, 'editTemplate'])->name('frontdesk.settings.badge');
|
|
Route::put('/settings/badge-template', [BadgeController::class, 'updateTemplate'])->name('frontdesk.settings.badge.update');
|
|
|
|
Route::get('/reports', [ReportController::class, 'index'])->name('frontdesk.reports.index');
|
|
Route::get('/reports/export', [ReportController::class, 'export'])->name('frontdesk.reports.export');
|
|
|
|
Route::get('/integrations', [IntegrationController::class, 'edit'])->name('frontdesk.integrations.edit');
|
|
Route::put('/integrations', [IntegrationController::class, 'update'])->name('frontdesk.integrations.update');
|
|
Route::post('/integrations/sms', [IntegrationController::class, 'saveSms'])->name('frontdesk.integrations.sms.save');
|
|
Route::post('/integrations/sms/disconnect', [IntegrationController::class, 'disconnectSms'])->name('frontdesk.integrations.sms.disconnect');
|
|
Route::post('/integrations/bird', [IntegrationController::class, 'saveBird'])->name('frontdesk.integrations.bird.save');
|
|
Route::post('/integrations/bird/disconnect', [IntegrationController::class, 'disconnectBird'])->name('frontdesk.integrations.bird.disconnect');
|
|
Route::post('/integrations/sms/senders', [IntegrationController::class, 'previewSenders'])->name('frontdesk.integrations.sms.senders');
|
|
|
|
Route::delete('/visits/{visit}', [ComplianceController::class, 'destroyVisit'])->name('frontdesk.visits.destroy');
|
|
|
|
Route::get('/visitors', [VisitorController::class, 'index'])->name('frontdesk.visitors.index');
|
|
Route::get('/visitors/{visitor}', [VisitorController::class, 'show'])->name('frontdesk.visitors.show');
|
|
Route::delete('/visitors/{visitor}', [ComplianceController::class, 'destroyVisitor'])->name('frontdesk.visitors.destroy');
|
|
Route::get('/visitors/{visitor}/check-in', [VisitorController::class, 'checkInForm'])->name('frontdesk.visitors.check-in');
|
|
Route::post('/visitors/{visitor}/check-in', [VisitorController::class, 'checkIn'])->name('frontdesk.visitors.check-in.store');
|
|
Route::patch('/visitors/{visitor}', [VisitorController::class, 'update'])->name('frontdesk.visitors.update');
|
|
Route::patch('/visitors/{visitor}/watchlist', [VisitorController::class, 'updateWatchlist'])->name('frontdesk.visitors.watchlist');
|
|
|
|
Route::get('/hosts', [HostController::class, 'index'])->name('frontdesk.hosts.index');
|
|
Route::get('/hosts/create', [HostController::class, 'create'])->name('frontdesk.hosts.create');
|
|
Route::post('/hosts', [HostController::class, 'store'])->name('frontdesk.hosts.store');
|
|
Route::get('/hosts/{host}/edit', [HostController::class, 'edit'])->name('frontdesk.hosts.edit');
|
|
Route::put('/hosts/{host}', [HostController::class, 'update'])->name('frontdesk.hosts.update');
|
|
Route::delete('/hosts/{host}', [HostController::class, 'destroy'])->name('frontdesk.hosts.destroy');
|
|
|
|
Route::get('/employees', [EmployeeController::class, 'index'])->name('frontdesk.employees.index');
|
|
Route::get('/employees/create', [EmployeeController::class, 'create'])->name('frontdesk.employees.create');
|
|
Route::post('/employees', [EmployeeController::class, 'store'])->name('frontdesk.employees.store');
|
|
Route::get('/employees/import', [EmployeeController::class, 'importForm'])->name('frontdesk.employees.import');
|
|
Route::post('/employees/import', [EmployeeController::class, 'import'])->name('frontdesk.employees.import.store');
|
|
Route::get('/employees/{employee}/edit', [EmployeeController::class, 'edit'])->name('frontdesk.employees.edit');
|
|
Route::get('/employees/{employee}/badge', [EmployeeController::class, 'badge'])->name('frontdesk.employees.badge');
|
|
Route::put('/employees/{employee}', [EmployeeController::class, 'update'])->name('frontdesk.employees.update');
|
|
Route::delete('/employees/{employee}', [EmployeeController::class, 'destroy'])->name('frontdesk.employees.destroy');
|
|
Route::get('/employees/export/attendance', [EmployeeController::class, 'exportAttendance'])->name('frontdesk.employees.export.attendance');
|
|
|
|
Route::get('/employee', [EmployeePortalController::class, 'index'])->name('frontdesk.employee.portal');
|
|
Route::post('/employee/action', [EmployeePortalController::class, 'action'])->name('frontdesk.employee.portal.action');
|
|
|
|
Route::get('/kiosk', [KioskController::class, 'show'])->name('frontdesk.kiosk');
|
|
Route::post('/kiosk/check-in', [KioskController::class, 'checkIn'])->name('frontdesk.kiosk.check-in');
|
|
Route::post('/kiosk/check-out', [KioskController::class, 'checkOut'])->name('frontdesk.kiosk.check-out');
|
|
|
|
Route::get('/host', [HostPortalController::class, 'index'])->name('frontdesk.host.index');
|
|
Route::get('/host/schedule', [HostPortalController::class, 'scheduleForm'])->name('frontdesk.host.schedule');
|
|
Route::post('/host/schedule', [HostPortalController::class, 'scheduleStore'])->name('frontdesk.host.schedule.store');
|
|
Route::post('/host/visits/{visit}/approve', [HostPortalController::class, 'approve'])->name('frontdesk.host.approve');
|
|
Route::post('/host/availability', [HostPortalController::class, 'toggleAvailability'])->name('frontdesk.host.availability');
|
|
|
|
Route::get('/devices', [DeviceController::class, 'index'])->name('frontdesk.devices.index');
|
|
Route::get('/devices/create', [DeviceController::class, 'create'])->name('frontdesk.devices.create');
|
|
Route::post('/devices', [DeviceController::class, 'store'])->name('frontdesk.devices.store');
|
|
Route::get('/devices/{device}/edit', [DeviceController::class, 'edit'])->name('frontdesk.devices.edit');
|
|
Route::put('/devices/{device}', [DeviceController::class, 'update'])->name('frontdesk.devices.update');
|
|
Route::delete('/devices/{device}', [DeviceController::class, 'destroy'])->name('frontdesk.devices.destroy');
|
|
Route::post('/devices/{device}/regenerate-token', [DeviceController::class, 'regenerateToken'])->name('frontdesk.devices.regenerate-token');
|
|
|
|
Route::get('/service-queues', [ServiceQueueController::class, 'index'])->name('frontdesk.service-queues.index');
|
|
Route::get('/service-queues/console/{counterUuid}', [ServiceQueueController::class, 'console'])->name('frontdesk.service-queues.console');
|
|
Route::post('/service-queues/console/{counterUuid}/action', [ServiceQueueController::class, 'action'])->name('frontdesk.service-queues.action');
|
|
|
|
Route::get('/security', [SecurityController::class, 'index'])->name('frontdesk.security.index');
|
|
Route::get('/security/evacuation', [SecurityController::class, 'evacuation'])->name('frontdesk.security.evacuation');
|
|
Route::get('/security/evacuation/export', [SecurityController::class, 'evacuationExport'])->name('frontdesk.security.evacuation.export');
|
|
Route::get('/security/evacuation/badges', [SecurityController::class, 'evacuationBadges'])->name('frontdesk.security.evacuation.badges');
|
|
Route::get('/security/verify', [SecurityController::class, 'verifyForm'])->name('frontdesk.security.verify');
|
|
Route::post('/security/verify', [SecurityController::class, 'verify'])->name('frontdesk.security.verify.lookup');
|
|
Route::post('/security/visits/{visit}/checkout', [SecurityController::class, 'checkOut'])->name('frontdesk.security.checkout');
|
|
|
|
Route::get('/watchlist', [WatchlistController::class, 'index'])->name('frontdesk.watchlist.index');
|
|
Route::get('/watchlist/create', [WatchlistController::class, 'create'])->name('frontdesk.watchlist.create');
|
|
Route::post('/watchlist', [WatchlistController::class, 'store'])->name('frontdesk.watchlist.store');
|
|
Route::delete('/watchlist/{entry}', [WatchlistController::class, 'destroy'])->name('frontdesk.watchlist.destroy');
|
|
|
|
Route::get('/audit-logs', [AuditLogController::class, 'index'])->name('frontdesk.audit.index');
|
|
Route::get('/audit-logs/export', [AuditLogController::class, 'export'])->name('frontdesk.audit.export');
|
|
|
|
Route::get('/compliance/recovery', [ComplianceController::class, 'index'])->name('frontdesk.compliance.recovery');
|
|
Route::post('/compliance/visitors/{visitorId}/restore', [ComplianceController::class, 'restoreVisitor'])->name('frontdesk.compliance.visitors.restore');
|
|
Route::post('/compliance/visits/{visitId}/restore', [ComplianceController::class, 'restoreVisit'])->name('frontdesk.compliance.visits.restore');
|
|
|
|
Route::get('/pro', [ProController::class, 'index'])->name('frontdesk.pro.index');
|
|
Route::post('/pro/subscribe', [ProController::class, 'subscribe'])->name('frontdesk.pro.subscribe');
|
|
Route::post('/pro/subscribe-enterprise', [ProController::class, 'subscribeEnterprise'])->name('frontdesk.pro.subscribe-enterprise');
|
|
Route::post('/pro/subscribe-prepaid', [ProController::class, 'subscribePrepaid'])->name('frontdesk.pro.subscribe-prepaid');
|
|
Route::get('/pro/paystack/callback', [ProController::class, 'paystackCallback'])->name('frontdesk.pro.paystack.callback');
|
|
|
|
Route::get('/report-issue', [IssueReportController::class, 'create'])->name('frontdesk.issues.create');
|
|
Route::post('/report-issue', [IssueReportController::class, 'store'])->name('frontdesk.issues.store');
|
|
|
|
Route::get('/settings', [SettingsController::class, 'edit'])->name('frontdesk.settings');
|
|
Route::put('/settings', [SettingsController::class, 'update'])->name('frontdesk.settings.update');
|
|
Route::post('/settings/upgrade', [ProController::class, 'subscribe'])->name('frontdesk.settings.upgrade');
|
|
|
|
Route::get('/branches', [BranchController::class, 'index'])->name('frontdesk.branches.index');
|
|
Route::get('/branches/create', [BranchController::class, 'create'])->name('frontdesk.branches.create');
|
|
Route::post('/branches', [BranchController::class, 'store'])->name('frontdesk.branches.store');
|
|
Route::get('/branches/{branch}/edit', [BranchController::class, 'edit'])->name('frontdesk.branches.edit');
|
|
Route::put('/branches/{branch}', [BranchController::class, 'update'])->name('frontdesk.branches.update');
|
|
|
|
Route::get('/branches/{branch}/buildings', [BuildingController::class, 'index'])->name('frontdesk.buildings.index');
|
|
Route::post('/branches/{branch}/buildings', [BuildingController::class, 'store'])->name('frontdesk.buildings.store');
|
|
Route::delete('/branches/{branch}/buildings/{building}', [BuildingController::class, 'destroy'])->name('frontdesk.buildings.destroy');
|
|
|
|
Route::get('/buildings/{building}/desks', [ReceptionDeskController::class, 'index'])->name('frontdesk.desks.index');
|
|
Route::post('/buildings/{building}/desks', [ReceptionDeskController::class, 'store'])->name('frontdesk.desks.store');
|
|
Route::delete('/buildings/{building}/desks/{desk}', [ReceptionDeskController::class, 'destroy'])->name('frontdesk.desks.destroy');
|
|
|
|
Route::get('/members', [MemberController::class, 'index'])->name('frontdesk.members.index');
|
|
Route::get('/members/create', [MemberController::class, 'create'])->name('frontdesk.members.create');
|
|
Route::post('/members', [MemberController::class, 'store'])->name('frontdesk.members.store');
|
|
Route::delete('/members/{member}', [MemberController::class, 'destroy'])->name('frontdesk.members.destroy');
|
|
|
|
Route::get('/wallet', fn () => redirect()->away(ladill_account_url('/wallet')))->name('frontdesk.wallet');
|
|
Route::get('/wallet/balance', [WalletController::class, 'balance'])->name('frontdesk.wallet.balance');
|
|
Route::get('/team', fn () => redirect()->away(ladill_account_url('/account/team')))->name('frontdesk.team');
|
|
});
|
|
});
|