default() ->id('admin-filament') ->path('admin-filament') ->brandName('NetGescon') ->login(\App\Filament\Auth\Login::class) ->registration() ->colors([ 'primary' => Color::Amber, ]) ->viteTheme('resources/css/filament/admin/theme.css') ->renderHook(PanelsRenderHook::HEAD_END, fn() => view('filament.components.legacy-admin-assets')) ->renderHook(PanelsRenderHook::TOPBAR_LOGO_AFTER, fn() => view('filament.components.topbar-context')) ->renderHook(PanelsRenderHook::USER_MENU_BEFORE, fn() => view('filament.components.topbar-icons')) ->navigationItems([ NavigationItem::make('Rubrica Unica') ->group('NetGescon') ->icon('heroicon-o-users') ->url(fn() => RubricaUniversaleArchivio::getUrl(panel: 'admin-filament')) ->visible(function (): bool { $user = Auth::user(); return $user instanceof User && $user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore']); }), NavigationItem::make('Cellulare / WebApp') ->group('NetGescon') ->icon('heroicon-o-phone') ->url(fn() => route('admin.mobile')) ->visible(function (): bool { $user = Auth::user(); return $user instanceof User && $user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore']); }), NavigationItem::make('Ticket Mobile') ->group('NetGescon') ->icon('heroicon-o-device-phone-mobile') ->url(fn() => TicketMobile::getUrl(panel: 'admin-filament')) ->visible(function (): bool { $user = Auth::user(); return $user instanceof User && $user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore']); }), NavigationItem::make('Scheda Stabile') ->group('NetGescon') ->icon('heroicon-o-building-office-2') ->url(fn() => StabilePage::getUrl(panel: 'admin-filament')) ->visible(function (): bool { $user = Auth::user(); return $user instanceof User && $user->hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore']); }), NavigationItem::make('Catalogo Fornitore') ->group('Fornitore') ->icon('heroicon-o-cube') ->url(fn() => $this->resolveSupplierCatalogUrl()) ->visible(function (): bool { $user = Auth::user(); return $user instanceof User && $user->hasRole('fornitore'); }), ]) ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages') ->pages([ Dashboard::class, SupportoDashboard::class, PrimaNotaDettaglio::class, PrimaNotaModifica::class, ContoMastrino::class, ]) ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets') ->widgets([ AccountWidget::class, TicketMobileOverview::class, ]) ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, StartSession::class, AuthenticateSession::class, ShareErrorsFromSession::class, VerifyCsrfToken::class, SubstituteBindings::class, DisableBladeIconComponents::class, DispatchServingFilamentEvent::class, ]) ->authMiddleware([ Authenticate::class, ]); } protected function resolveSupplierCatalogUrl(): string { $user = Auth::user(); if (! $user instanceof User) { return '/admin-filament'; } $email = mb_strtolower(trim((string) $user->email)); if ($email !== '') { $fornitore = Fornitore::query() ->whereRaw('LOWER(email) = ?', [$email]) ->orderByDesc('id') ->first(); if ($fornitore instanceof Fornitore) { return FornitoreScheda::getUrl(['record' => (int) $fornitore->id], panel: 'admin-filament'); } } $dipendente = FornitoreDipendente::query() ->where('attivo', true) ->where(function ($query) use ($user, $email): void { $query->where('user_id', (int) $user->id); if ($email !== '') { $query->orWhereRaw('LOWER(email) = ?', [$email]); } }) ->orderByDesc('id') ->first(); if ($dipendente instanceof FornitoreDipendente) { return FornitoreScheda::getUrl(['record' => (int) $dipendente->fornitore_id], panel: 'admin-filament'); } return TicketOperativi::getUrl(panel: 'admin-filament'); } }