defaultSort('vereidigung', direction: 'desc') ->columns([ ToggleColumn::make('deaktiviert') ->alignCenter(), TextColumn::make('anrede') ->badge() ->color(fn (string $state): string => match ($state) { 'Höflich' => 'primary', 'Freundschaftlich' => 'success', default => 'gray', }), // TextColumn::make('company')->label('Firma') // ->description(fn ($record): string => $record->first_name.' '.$record->last_name), TextColumn::make('gender') ->label('Geschlecht') ->formatStateUsing(fn (string $state): string => match ($state) { '0' => 'Herr', '1' => 'Frau', '2' => 'Diverse', }), TextColumn::make('first_name')->label('Vorname'), TextColumn::make('last_name')->label('Nachname'), TextColumn::make('email'), TextColumn::make('vereidigung')->date()->sortable(), ]) ->filters([ Filter::make('mail_gruppen_id') ->columnSpanFull() ->columns(4) ->schema([ Select::make('mail_gruppen_id') ->hiddenLabel() ->preload() ->default(1) ->selectablePlaceholder(false) ->options(function (): array { return MailGruppen::pluck('name', 'id')->toArray(); }), Toggle::make('deaktiviert')->label('Deaktivierte'), DatePicker::make('vereidigung_von')->native(false)->hiddenLabel()->placeholder('Vereidigung von'), DatePicker::make('vereidigung_bis')->native(false)->hiddenLabel()->placeholder('Vereidigung bis'), ]) ->query(function (Builder $query, array $data): Builder { return $query ->when( $data['mail_gruppen_id'], fn (Builder $query, $mail_gruppen_id): Builder => $query->where('mail_gruppen_id', $mail_gruppen_id), )->when( $data['deaktiviert'], fn (Builder $query, $deaktiviert): Builder => $query->where('deaktiviert', $deaktiviert), )->when( $data['vereidigung_von'], fn (Builder $query, $date): Builder => $query->whereDate('vereidigung', '>=', $date), ) ->when( $data['vereidigung_bis'], fn (Builder $query, $date): Builder => $query->whereDate('vereidigung', '<=', $date), ); }), ], layout: FiltersLayout::AboveContent) ->persistFiltersInSession() ->filtersResetActionPosition(null) ->hiddenFilterIndicators() ->deferFilters(false) ->recordActions([ EditAction::make()->iconButton(), DeleteAction::make()->iconButton(), ]) ->toolbarActions([ BulkActionGroup::make([ BulkAction::make('deaktiviert_off') ->label('Auswahl Aktivieren') ->tooltip('Auswahl aktivieren') ->icon('heroicon-o-play') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { /** @var object $record */ MailAdressen::where('id', '=', $record->id) ->update( ['deaktiviert' => 0] ); } }), BulkAction::make('deaktiviert_on') ->color('primary') ->label('Auswahl Deaktivieren') ->tooltip('Auswahl deaktivieren') ->icon('heroicon-o-stop') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { /** @var object $record */ MailAdressen::where('id', '=', $record->id) ->update( ['deaktiviert' => 1] ); } }), DeleteBulkAction::make()->label('Auswahl Löschen'), ])->label('Status'), BulkActionGroup::make([ BulkAction::make('anrede_hoflich') ->label('Auswahl Höflichkeitsform') ->tooltip('Für ausgewählte Adressen Höflichkeitsform') ->icon('heroicon-o-user-circle') ->color('primary') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { /** @var object $record */ MailAdressen::where('id', '=', $record->id) ->update( ['anrede' => 'Höflich'] ); } }), BulkAction::make('anrede_vertraulich') ->label('Auswahl Freundschaftlich') ->tooltip('Für ausgewählte Adressen freundschaftliche Anrede verwenden') ->color('success') ->icon('heroicon-o-user') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { /** @var object $record */ MailAdressen::where('id', '=', $record->id) ->update( ['anrede' => 'Freundschaftlich'] ); } }), ])->label('Anrede'), ]); } }