action evaluation

This commit is contained in:
salam committed 2025-10-20 16:57:50 +02:00
1 parent d473bdc2b3
commit 9eb19cf8fd
13 files changed
+297 -132

No files matched your search

@@ -22,6 +22,7 @@ use Filament\Tables\Columns\TextInputColumn;
use Filament\Tables\Filters\TernaryFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection;
use Livewire\Component;
class OrientierungZuAbschlaegesRelationManager extends RelationManager
{
@@ -58,7 +59,10 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
]),
CheckboxColumn::make('nicht_in_orientierung')
->label('Nicht in Orientierung')
->toggleable(),
->toggleable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextColumn::make('raumart')
->toggleable()
->width('2rem')
@@ -71,17 +75,40 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->selectablePlaceholder(true)
->options(Orientierung::pluck('name', 'id'))
->disableOptionWhen(fn (string $value): bool => in_array($value, [2, 11, 24, 33, 36]))
->preloadOptions(),
TextInputColumn::make('a')->label($spalten['a'] ?? '')->hidden(isset($spalten['a']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('b')->label($spalten['b'] ?? '')->hidden(isset($spalten['b']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('c')->label($spalten['c'] ?? '')->hidden(isset($spalten['c']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('d')->label($spalten['d'] ?? '')->hidden(isset($spalten['d']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('e')->label($spalten['e'] ?? '')->hidden(isset($spalten['e']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('f')->label($spalten['f'] ?? '')->hidden(isset($spalten['f']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('g')->label($spalten['g'] ?? '')->hidden(isset($spalten['g']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('h')->label($spalten['h'] ?? '')->hidden(isset($spalten['h']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('i')->label($spalten['i'] ?? '')->hidden(isset($spalten['i']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
TextInputColumn::make('j')->label($spalten['j'] ?? '')->hidden(isset($spalten['j']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter(),
->preloadOptions()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('a')->label($spalten['a'] ?? '')->hidden(isset($spalten['a']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('b')->label($spalten['b'] ?? '')->hidden(isset($spalten['b']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('c')->label($spalten['c'] ?? '')->hidden(isset($spalten['c']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('d')->label($spalten['d'] ?? '')->hidden(isset($spalten['d']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('e')->label($spalten['e'] ?? '')->hidden(isset($spalten['e']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('f')->label($spalten['f'] ?? '')->hidden(isset($spalten['f']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('g')->label($spalten['g'] ?? '')->hidden(isset($spalten['g']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('h')->label($spalten['h'] ?? '')->hidden(isset($spalten['h']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('i')->label($spalten['i'] ?? '')->hidden(isset($spalten['i']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextInputColumn::make('j')->label($spalten['j'] ?? '')->hidden(isset($spalten['j']) ? false : true)->toggleable()->rules(['numeric'])->alignCenter()->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
TextColumn::make('nutzwert')
->extraHeaderAttributes([
'style' => 'position: sticky; right: 0; z-index: 1;',
@@ -108,7 +135,10 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->modalHeading('Merkmale')
->slideOver()
// ->modalWidth(Width::Medium)
->modalContent(view('filament.pages.actions.merkmale')),
->modalContent(view('filament.pages.actions.merkmale'))
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
Action::make('erstellen')
->action(fn (CreateOrientierungZuAbschlaege $createOrientierungZuAbschlaege) => $createOrientierungZuAbschlaege->create($this->ownerRecord))
->requiresConfirmation()
@@ -117,7 +147,10 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
->modalSubmitActionLabel('Erstellen')
->label('Erstellen')
->tooltip('Daten werden aus "Orientierung Zu/Abschläge" Tabelle gefiltert.')
->icon('heroicon-o-cog-8-tooth'),
->icon('heroicon-o-cog-8-tooth')
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
])
->toolbarActions([
BulkActionGroup::make([
@@ -136,6 +169,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['raumart' => $data['raumart']]
);
}
})
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('methode')
->color('primary')
@@ -156,6 +192,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['orientierung_id' => $data['methode_id']]
);
}
})
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('nicht_in_orientierung')
->color('primary')
@@ -177,6 +216,9 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['nicht_in_orientierung' => 1]
);
}
})
->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('a')
->label($spalten['a'] ?? '')
@@ -194,6 +236,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['a' => $data['a']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('b')
->label($spalten['b'] ?? '')
@@ -211,6 +255,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['b' => $data['b']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('c')
->label($spalten['c'] ?? '')
@@ -228,6 +274,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['c' => $data['c']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('d')
->label($spalten['d'] ?? '')
@@ -245,6 +293,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['d' => $data['d']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('e')
->label($spalten['e'] ?? '')
@@ -262,6 +312,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['e' => $data['e']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('f')
->label($spalten['f'] ?? '')
@@ -279,6 +331,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['f' => $data['f']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('g')
->label($spalten['g'] ?? '')
@@ -296,6 +350,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['g' => $data['g']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('h')
->label($spalten['h'] ?? '')
@@ -313,6 +369,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['h' => $data['h']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('i')
->label($spalten['i'] ?? '')
@@ -330,6 +388,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['i' => $data['i']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
BulkAction::make('j')
->label($spalten['j'] ?? '')
@@ -347,6 +407,8 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager
['j' => $data['j']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshOrientierung');
}),
]),
]);
@@ -17,6 +17,7 @@ use Filament\Tables\Columns\TextInputColumn;
use Filament\Tables\Filters\TernaryFilter;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection;
use Livewire\Component;
class ProjektMethodesRelationManager extends RelationManager
{
@@ -39,14 +40,26 @@ class ProjektMethodesRelationManager extends RelationManager
SelectColumn::make('methode_id')
->selectablePlaceholder(true)
->optionsRelationship('methode', 'name')
->preloadOptions(),
->preloadOptions()
->rules(['required'])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshMethods');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
]),
TextColumn::make('raumart')
->searchable(),
TextInputColumn::make('faktor')
->suffixIcon('phosphor-function')
->width('1rem')
->rules(['required', 'faktor' => 'decimal:0,2'])
->searchable(),
->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([
TernaryFilter::make('methode_id')
@@ -61,47 +74,54 @@ class ProjektMethodesRelationManager extends RelationManager
->modalSubmitActionLabel('Erstellen')
->label('Erstellen')
->tooltip('Daten werden aus "Räume Alle" Tabelle gefiltert.')
->icon('heroicon-o-cog-8-tooth'),
->icon('heroicon-o-cog-8-tooth')
->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']]
);
}
}),
->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']]
);
}
}),
->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');
}),
]),
]);
}
@@ -24,6 +24,7 @@ use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\HtmlString;
use Illuminate\Validation\Rules\File;
use Livewire\Component;
class RaeumeallesRelationManager extends RelationManager
{
@@ -41,9 +42,35 @@ class RaeumeallesRelationManager extends RelationManager
{
return $schema
->components([
TextInput::make('top_nummer')
->required()
->maxLength(255),
TextInput::make('geschoss')
->required()
->maxLength(255),
TextInput::make('raumart')
->required()
->maxLength(255),
TextInput::make('flaeche')
->suffix(new HtmlString(' m²'))
->rules(['required', 'flaeche' => 'decimal:2'])
->label('Fläche')
->validationMessages([
'required' => 'Die Eingabe einer Fläche ist erforderlich.',
'decimal' => 'Für die Fläche sind zwei Dezimalstellen erforderlich.',
])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshAllgemeinflaechen');
}),
TextInput::make('faktor')
->suffixIcon('phosphor-function')
->rules(['required', 'faktor' => 'decimal:0,2'])
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
]),
]);
}
@@ -63,7 +90,13 @@ class RaeumeallesRelationManager extends RelationManager
->suffixIcon('phosphor-function')
->width('1rem')
->rules(['required', 'faktor' => 'decimal:0,2'])
->searchable(),
->searchable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
})->validationMessages([
'required' => 'Die Eingabe eines Faktors ist erforderlich.',
'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.',
]),
TextInputColumn::make('flaeche')
->summarize(Sum::make()->label('Gesammt')->numeric(
decimalPlaces: 2,
@@ -73,7 +106,13 @@ class RaeumeallesRelationManager extends RelationManager
->alignment('right')
->rules(['required', 'flaeche' => 'decimal:2'])
->label('Fläche')
->searchable(),
->searchable()
->afterStateUpdated(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
})->validationMessages([
'required' => 'Die Eingabe einer Fläche ist erforderlich.',
'decimal' => 'Für die Fläche sind zwei Dezimalstellen erforderlich.',
]),
TextColumn::make('nutzwert')
->alignCenter()
->default(fn ($record): ?int => round($record->faktor * $record->flaeche))
@@ -115,8 +154,12 @@ class RaeumeallesRelationManager extends RelationManager
]),
])
->recordActions([
EditAction::make()->iconButton(),
DeleteAction::make()->iconButton(),
EditAction::make()->iconButton()->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}),
DeleteAction::make()->iconButton()->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}),
])
->toolbarActions([
BulkActionGroup::make([
@@ -137,8 +180,12 @@ class RaeumeallesRelationManager extends RelationManager
['faktor' => $data['faktor']]
);
}
})->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}),
DeleteBulkAction::make(),
DeleteBulkAction::make()->after(function (Component $livewire) {
$livewire->dispatch('refreshRaeumealle');
}),
]),
]);
}