striped() ->recordTitleAttribute('raumart') ->columns([ SelectColumn::make('methode_id') ->label('Methoden') ->optionsRelationship('methode', 'name') ->preloadOptions() ->rules(['required']) ->afterStateUpdated(function (Component $livewire) { $livewire->dispatch('refreshMethods'); })->validationMessages([ 'required' => 'Die Eingabe einer Methode ist erforderlich.', ]), TextColumn::make('raumart') ->searchable(), TextInputColumn::make('faktor') ->extraInputAttributes(['onClick' => 'this.select()']) ->suffixIcon('phosphor-function') ->width('1rem') ->rules(['required', 'faktor' => 'decimal:0,2']) ->searchable() ->afterStateUpdated(function (Component $livewire) { $livewire->dispatch('refreshMethods'); })->validationMessages([ 'required' => 'Die Eingabe eines Faktors ist erforderlich.', 'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.', ]), ]) ->filters([ SelectFilter::make('methodes') ->label('Methoden') ->relationship('methode', 'name'), TernaryFilter::make('methode_id') ->label('Methode ist zugeordnet'), TernaryFilter::make('faktor') ->label('Faktor fehlt') ->queries( true: fn (Builder $query) => $query->where('faktor', '=', 0), false: fn (Builder $query) => $query->where('faktor', '>', 0), ), ]) ->headerActions([ Action::make('methoden') ->icon('phosphor-question') ->modalCancelAction(fn (Action $action) => $action->label('Schließen')) ->modalSubmitAction(false) ->modalHeading('Hilfe zu Methoden') ->slideOver() ->modalContent(view('filament.pages.actions.methoden')), Action::make('erstellen') ->action(fn (CreateProjektMethoden $createProjektMethoden) => $createProjektMethoden->create($this->ownerRecord)) ->requiresConfirmation() ->modalHeading('Raum Methoden erstellen') ->modalDescription(new HtmlString('Daten werden aus der Tabelle "Objekte im Detail" generiert. Änderungen werden übernommen nicht mehr verwendete Objekte gelöscht.
Um die Tabelle neu zu generieren bitte die Tabelle vorher leeren.')) ->modalSubmitActionLabel('Generieren') ->label('Generieren') ->tooltip('Daten werden aus der Tabelle "Objekte im Detail" generiert.') ->icon('heroicon-o-cog-8-tooth') ->extraModalFooterActions([ Action::make('delete') ->label('Leeren') ->color('danger') ->requiresConfirmation() ->action(function () { ProjektMethode::where('projekte_id', $this->ownerRecord->id)->delete(); Notification::make() ->title('Tabelle "Raum Methode" wurde geleert') ->success() ->send(); }), ]) ->after(function (Component $livewire) { $livewire->dispatch('refreshMethods'); }), ]) ->toolbarActions([ BulkActionGroup::make([ BulkAction::make('faktor') ->color('primary') ->label('Faktor zuweisen') ->schema([ TextInput::make('faktor') ->prefixIcon('phosphor-function') ->numeric() ->required(), ]) ->icon('phosphor-function') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { ProjektMethode::where('id', '=', $record->id) ->update( ['faktor' => $data['faktor']] ); } })->after(function (Component $livewire) { $livewire->dispatch('refreshMethods'); }), BulkAction::make('methode') ->color('primary') ->label('Methode zuweisen') ->schema([ Select::make('methode_id') ->label('Methode') ->prefixIcon('phosphor-calculator') ->options(Methode::pluck('name', 'id')) ->required(), ]) ->icon('phosphor-calculator') ->action(function (Collection $records, array $data): void { foreach ($records as $record) { ProjektMethode::where('id', '=', $record->id) ->update( ['methode_id' => $data['methode_id']] ); } })->after(function (Component $livewire) { $livewire->dispatch('refreshMethods'); }), ]), ]); } }