hasAnyRole(['super-admin', 'admin', 'amministratore', 'collaboratore']); } public function mount(): void { $this->mountInteractsWithTable(); } protected function getTableQuery(): Builder { $user = Auth::user(); if (! $user instanceof User) { return RubricaUniversale::query()->whereRaw('1 = 0'); } $activeStabile = StabileContext::getActiveStabile($user); $adminId = (int) ($activeStabile?->amministratore_id ?: 0); if ($adminId <= 0) { return RubricaUniversale::query()->whereRaw('1 = 0'); } $query = RubricaUniversale::query(); // Tenant-aware: mostra TUTTI i contatti dell'amministratore (più eventuali globali se presenti). if (Schema::hasColumn('rubrica_universale', 'amministratore_id')) { $query->where(function (Builder $q) use ($adminId) { $q->where('amministratore_id', $adminId) ->orWhereNull('amministratore_id'); }); } return $query ->orderByRaw("COALESCE(ragione_sociale, '')") ->orderByRaw("COALESCE(cognome, '')") ->orderByRaw("COALESCE(nome, '')") ->orderBy('id'); } public function table(Table $table): Table { return $table ->striped() ->paginationPageOptions([10, 25, 50, 100]) ->defaultPaginationPageOption(25) ->columns([ TextColumn::make('codice_univoco')->label('Codice')->sortable()->searchable()->toggleable(), TextColumn::make('nome_completo') ->label('Nominativo') ->wrap() ->searchable(query: function (Builder $query, string $search): Builder { $search = trim($search); if ($search === '') { return $query; } $like = '%' . str_replace(['%', '_'], ['\\%', '\\_'], $search) . '%'; return $query->where(function (Builder $q) use ($like) { $q->where('ragione_sociale', 'like', $like) ->orWhere('nome', 'like', $like) ->orWhere('cognome', 'like', $like) ->orWhereRaw("TRIM(CONCAT(COALESCE(nome, ''), ' ', COALESCE(cognome, ''))) LIKE ?", [$like]); }); }), TextColumn::make('categoria')->label('Categoria')->sortable()->toggleable(), TextColumn::make('partita_iva')->label('P.IVA')->searchable()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('codice_fiscale')->label('CF')->searchable()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('email')->label('Email')->searchable()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('pec')->label('PEC')->searchable()->toggleable(isToggledHiddenByDefault: true), TextColumn::make('stato')->label('Stato')->sortable()->toggleable(isToggledHiddenByDefault: true), ]) ->actions([ Action::make('apri_scheda') ->label('Apri scheda') ->icon('heroicon-o-identification') ->url(fn(RubricaUniversale $record) => RubricaUniversaleScheda::getUrl(['record' => $record->id], panel: 'admin-filament')), ]); } }