From 77f8b3c047a4ec96996390445483332c5dd0dcb1 Mon Sep 17 00:00:00 2001 From: salam Date: Sun, 5 Oct 2025 19:23:07 +0200 Subject: [PATCH] raume alle berechnungen --- .../AllgemeinflaechensRelationManager.php | 14 +++++- .../RaeumeallesRelationManager.php | 50 +++++++++++++++++-- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/app/Filament/Resources/Projektes/RelationManagers/AllgemeinflaechensRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/AllgemeinflaechensRelationManager.php index ac539ad..6e6d28c 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/AllgemeinflaechensRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/AllgemeinflaechensRelationManager.php @@ -27,13 +27,20 @@ class AllgemeinflaechensRelationManager extends RelationManager { return $schema ->components([ + TextInput::make('geschoss') ->required() ->maxLength(255), TextInput::make('raumart') ->required() ->maxLength(255), - ]); + TextInput::make('flaeche') + ->suffix('m²') + ->numeric() + ->label('Fläche') + ->required() + ->maxLength(255), + ])->columns(3); } public function table(Table $table): Table @@ -44,11 +51,12 @@ class AllgemeinflaechensRelationManager extends RelationManager TextColumn::make('geschoss')->searchable(), TextColumn::make('raumart')->searchable(), TextInputColumn::make('flaeche') + ->suffix('m²') ->width('2rem') + ->rules(['required', 'price' => 'decimal:2']) ->alignment('right') // ->formatStateUsing(fn ($state) => "{$state} m²") ->label('Fläche') - // ->numeric(decimalPlaces: 2) ->searchable(), ]) ->filters([ @@ -59,6 +67,8 @@ class AllgemeinflaechensRelationManager extends RelationManager ->icon('phosphor-file-plus'), ImportAction::make() ->importer(AllgemeinflaechenImporter::class) + ->modalHeading('Allgemeinflächen Import') + // ->modalSubmitActionLabel('Yes, delete it') ->label('Hochladen') ->icon('phosphor-upload') ->color('info') diff --git a/app/Filament/Resources/Projektes/RelationManagers/RaeumeallesRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/RaeumeallesRelationManager.php index 95ec831..440cfbe 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/RaeumeallesRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/RaeumeallesRelationManager.php @@ -4,6 +4,7 @@ namespace App\Filament\Resources\Projektes\RelationManagers; use App\Filament\Imports\RaeumealleImporter; use App\Models\Raeumealle; +use Filament\Actions\BulkAction; use Filament\Actions\BulkActionGroup; use Filament\Actions\CreateAction; use Filament\Actions\DeleteAction; @@ -13,12 +14,14 @@ use Filament\Actions\ImportAction; use Filament\Forms\Components\TextInput; use Filament\Resources\RelationManagers\RelationManager; use Filament\Schemas\Schema; +use Filament\Support\Enums\FontWeight; use Filament\Tables\Columns\Summarizers\Sum; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextInputColumn; use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Validation\Rules\File; class RaeumeallesRelationManager extends RelationManager @@ -48,25 +51,44 @@ class RaeumeallesRelationManager extends RelationManager return $table ->recordTitleAttribute('top_nummer') ->columns([ - TextColumn::make('top_nummer')->searchable(), + TextColumn::make('top_nummer')->searchable()->label('Top'), TextColumn::make('geschoss')->searchable(), TextColumn::make('raumart')->searchable(), + TextInputColumn::make('faktor') + ->suffixIcon('phosphor-calculator') + ->width('1rem') + ->rules(['required', 'faktor' => 'decimal:0,2']) + ->searchable(), TextInputColumn::make('flaeche') ->summarize(Sum::make()->label('Gesammt')) + ->suffix('m²') ->width('2rem') ->alignment('right') - // ->formatStateUsing(fn ($state) => "{$state} m²") + ->rules(['required', 'flaeche' => 'decimal:2']) ->label('Fläche') - // ->numeric(decimalPlaces: 2) ->searchable(), + TextColumn::make('nutzwert') + ->alignCenter() + ->default(fn ($record): ?int => round($record->faktor * $record->flaeche)) + ->weight(FontWeight::ExtraBold), ]) ->filters([ SelectFilter::make('top_nummer') + ->label('Top Nummer') ->searchable() ->options(function (): array { return Raeumealle::where('projekte_id', $this->getOwnerRecord()->id)->groupBy('top_nummer')->orderBy('top_nummer')->pluck('top_nummer', 'top_nummer')->toArray(); - }) - ->attribute('top_nummer'), + }), + SelectFilter::make('geschoss') + ->searchable() + ->options(function (): array { + return Raeumealle::where('projekte_id', $this->getOwnerRecord()->id)->groupBy('geschoss')->orderBy('geschoss')->pluck('geschoss', 'geschoss')->toArray(); + }), + SelectFilter::make('raumart') + ->searchable() + ->options(function (): array { + return Raeumealle::where('projekte_id', $this->getOwnerRecord()->id)->groupBy('raumart')->orderBy('raumart')->pluck('raumart', 'raumart')->toArray(); + }), ]) // ], layout: FiltersLayout::AboveContentCollapsible) ->headerActions([ @@ -90,6 +112,24 @@ class RaeumeallesRelationManager extends RelationManager ]) ->toolbarActions([ BulkActionGroup::make([ + BulkAction::make('faktor') + ->color('primary') + ->label('Faktor zuweisen') + ->schema([ + TextInput::make('faktor') + ->prefixIcon('phosphor-calculator') + ->numeric() + ->required(), + ]) + ->icon('phosphor-calculator') + ->action(function (Collection $records, array $data): void { + foreach ($records as $record) { + Raeumealle::where('id', '=', $record->id) + ->update( + ['faktor' => $data['faktor']] + ); + } + }), DeleteBulkAction::make(), ]), ]);