From fe826c3babee7306d498a225db960726642f31ba Mon Sep 17 00:00:00 2001 From: salam Date: Tue, 19 May 2026 08:09:19 +0200 Subject: [PATCH] fix pdf methoth not showing, add in ObjekteImDetail projekt_methode_id for relation (kick out raumart for relation) --- app/Console/Commands/FixMethodRelations.php | 61 ++++++++++ app/Console/Commands/Notice.php | 114 ++++++++++++++++++ .../ProjektObjekteImDetailImporter.php | 12 +- .../ProjektMethodesRelationManager.php | 5 +- .../ProjektObjekteImDetailRelationManager.php | 39 ++---- .../Projektes/Tables/ProjektesTable.php | 1 + app/Models/ProjektObjekteImDetail.php | 7 +- ...reate_projekt_objekte_im_details_table.php | 1 + 8 files changed, 203 insertions(+), 37 deletions(-) create mode 100644 app/Console/Commands/FixMethodRelations.php create mode 100644 app/Console/Commands/Notice.php diff --git a/app/Console/Commands/FixMethodRelations.php b/app/Console/Commands/FixMethodRelations.php new file mode 100644 index 0000000..1743f34 --- /dev/null +++ b/app/Console/Commands/FixMethodRelations.php @@ -0,0 +1,61 @@ +id; + + $methoden = ProjektMethode::where('projekte_id', $projektid)->pluck('id', 'raumart')->toArray(); + + $res = ProjektObjekteImDetail::where('projekte_id', $projektid)->get(); + + foreach ($res as $value) { + + if (! $value->projekt_methode_id) { + + if (isset($methoden[$value->raumart])) { + $projekt_methode_id = $methoden[$value->raumart]; + + ProjektObjekteImDetail::where('id', $value->id)->update(['projekt_methode_id' => $projekt_methode_id]); + } else { + Notice::note('Error: Methode für Raumart '.$value->raumart.' in Projekt'.$projekt->interner_name.' Id '.$projekt->id.' Methode missing', 'r'); + } + } + } + } + + } +} diff --git a/app/Console/Commands/Notice.php b/app/Console/Commands/Notice.php new file mode 100644 index 0000000..f9ff82b --- /dev/null +++ b/app/Console/Commands/Notice.php @@ -0,0 +1,114 @@ +'; + break; + case 'r': + echo '
'; + break; + case 'b': + echo '
'; + break; + default: + echo '
'; + break; + } + if (is_array($message)) { + print_r($message); + } else { + echo $message; + } + echo '
'; + if ($exit) { + exit(); + } + } +} diff --git a/app/Filament/Imports/ProjektObjekteImDetailImporter.php b/app/Filament/Imports/ProjektObjekteImDetailImporter.php index cc8de7f..dfe2f75 100644 --- a/app/Filament/Imports/ProjektObjekteImDetailImporter.php +++ b/app/Filament/Imports/ProjektObjekteImDetailImporter.php @@ -2,6 +2,7 @@ namespace App\Filament\Imports; +use App\Models\ProjektMethode; use App\Models\ProjektObjekte; use App\Models\ProjektObjekteImDetail; use Filament\Actions\Imports\ImportColumn; @@ -40,9 +41,16 @@ class ProjektObjekteImDetailImporter extends Importer ->where('top_nummer', $this->data['top_nummer']) ->value('id'); + $projekt_methode_id = ProjektMethode::firstOrNew([ + 'projekte_id' => self::$projekte_id, + 'raumart' => $this->data['raumart'], + ]); + if ($projekt_objekte_id && ProjektObjekteImDetail::where('projekte_id', self::$projekte_id) ->where('projekt_objekte_id', $projekt_objekte_id) - ->where('raumart', $this->data['raumart'])->first()) { + ->where('projekt_methode_id', $projekt_methode_id) + ->first() + ) { self::$count_have++; } else { self::$count_new++; @@ -51,7 +59,7 @@ class ProjektObjekteImDetailImporter extends Importer return ProjektObjekteImDetail::firstOrNew([ 'projekte_id' => self::$projekte_id, 'projekt_objekte_id' => $projekt_objekte_id, - 'raumart' => $this->data['raumart'], + 'projekt_methode_id' => $projekt_methode_id, ]); } diff --git a/app/Filament/Resources/Projektes/RelationManagers/ProjektMethodesRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/ProjektMethodesRelationManager.php index 58c3ae2..0a62295 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/ProjektMethodesRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/ProjektMethodesRelationManager.php @@ -6,6 +6,7 @@ use App\Actions\Create\CreateProjektMethoden; use App\Models\Aufstellung; use App\Models\Methode; use App\Models\ProjektMethode; +use App\Models\ProjektObjekteImDetail; use Filament\Actions\Action; use Filament\Actions\BulkAction; use Filament\Actions\BulkActionGroup; @@ -97,7 +98,9 @@ class ProjektMethodesRelationManager extends RelationManager DeleteAction::make() ->iconButton() ->modalDescription(new HtmlString('Es werden auch alle damit verbundenen Räume im Detail gelöscht.')) - ->after(function (Component $livewire) { + ->after(function ($record, Component $livewire) { + ProjektObjekteImDetail::where('projekt_methode_id', $record->id)->delete(); + $livewire->dispatch('refreshProjektObjekteImDetail'); })->successNotification( Notification::make() diff --git a/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php index a043b64..e93ec15 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php @@ -3,6 +3,7 @@ namespace App\Filament\Resources\Projektes\RelationManagers; use App\Filament\Imports\ImportObjekteDirect; +use App\Models\ProjektMethode; use App\Models\ProjektObjekteImDetail; use Filament\Actions\Action; use Filament\Actions\BulkActionGroup; @@ -18,6 +19,7 @@ use Filament\Schemas\Schema; use Filament\Support\Enums\FontWeight; use Filament\Tables\Columns\Summarizers\Sum; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -45,9 +47,10 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->relationship('top_nummer', 'top_nummer', fn (Builder $query) => $query->where('projekte_id', $this->getOwnerRecord()->id)) ->required() ->searchable(), - TextInput::make('raumart') + Select::make('projekt_methode_id') + ->relationship('methode', 'raumart', fn (Builder $query) => $query->where('projekte_id', $this->getOwnerRecord()->id)) ->required() - ->maxLength(255), + ->searchable(), TextInput::make('geschoss') ->required() ->maxLength(255) @@ -81,7 +84,7 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->searchable() ->label('Top'), TextColumn::make('geschoss')->searchable(), - TextColumn::make('raumart')->searchable()->sortable(), + TextColumn::make('methode.raumart')->searchable()->sortable(), TextColumn::make('methode.faktor') ->numeric(2, ',') ->icon('phosphor-function') @@ -97,28 +100,6 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->alignment('right') ->label('Fläche') ->searchable(), - // TextInputColumn::make('flaeche') - // ->extraInputAttributes(['onClick' => 'this.select()']) - // ->summarize(Sum::make()->label('Gesammt')->numeric( - // decimalPlaces: 2, - // )->suffix(new HtmlString(' m²'))) - // ->suffix(new HtmlString(' m²')) - // ->width('2rem') - // ->alignment('right') - // ->rules(['required']) - // ->label('Fläche') - // ->searchable() - // ->afterStateUpdated(function ($record, Component $livewire) { - // $object = ProjektObjekteImDetail::find($record['id']); - // $object->nutzwert = round($record->methode->faktor * $object->flaeche, 2); - // $object->save(); - - // $livewire->dispatch('refreshProjektObjekteImDetail'); - - // })->validationMessages([ - // 'required' => 'Die Eingabe einer Fläche ist erforderlich.', - // 'decimal' => 'Für die Fläche sind zwei Dezimalstellen erforderlich.', - // ]), TextColumn::make('nutzwert') ->alignCenter() ->summarize(Sum::make()->label('Gesammt')) @@ -134,13 +115,15 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->options(function (): array { return ProjektObjekteImDetail::where('projekte_id', $this->getOwnerRecord()->id)->groupBy('geschoss')->orderBy('geschoss')->pluck('geschoss', 'geschoss')->toArray(); }), - SelectFilter::make('raumart') + SelectFilter::make('projekt_methode_id') + ->label('Methode') ->searchable() ->options(function (): array { - return ProjektObjekteImDetail::where('projekte_id', $this->getOwnerRecord()->id)->groupBy('raumart')->orderBy('raumart')->pluck('raumart', 'raumart')->toArray(); + return ProjektMethode::where('projekte_id', $this->getOwnerRecord()->id)->orderBy('raumart')->pluck('raumart', 'id')->toArray(); }), - ]) + ], FiltersLayout::AboveContent) ->deferFilters(false) + ->filtersFormColumns(4) ->headerActions([ Action::make('import-text') ->icon('phosphor-upload') diff --git a/app/Filament/Resources/Projektes/Tables/ProjektesTable.php b/app/Filament/Resources/Projektes/Tables/ProjektesTable.php index 141a4f9..9a12efe 100644 --- a/app/Filament/Resources/Projektes/Tables/ProjektesTable.php +++ b/app/Filament/Resources/Projektes/Tables/ProjektesTable.php @@ -19,6 +19,7 @@ class ProjektesTable { return $table ->columns([ + TextColumn::make('id'), TextColumn::make('interner_name') ->tooltip(fn ($record): HtmlString => new HtmlString($record->beschreibung)) ->label('Interner Name') diff --git a/app/Models/ProjektObjekteImDetail.php b/app/Models/ProjektObjekteImDetail.php index c9076a4..ee28cc4 100644 --- a/app/Models/ProjektObjekteImDetail.php +++ b/app/Models/ProjektObjekteImDetail.php @@ -34,13 +34,8 @@ class ProjektObjekteImDetail extends Model return $this->belongsTo(ProjektObjekte::class, 'projekt_objekte_id', 'id'); } - public function merkmale() - { - return $this->hasOne(ProjektMerkmale::class, 'raumart', 'raumart'); - } - public function methode() { - return $this->belongsTo(ProjektMethode::class, 'raumart', 'raumart'); + return $this->belongsTo(ProjektMethode::class, 'projekt_methode_id', 'id'); } } diff --git a/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php b/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php index 25eabe7..d46ee05 100644 --- a/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php +++ b/database/migrations/2025_10_03_154047_create_projekt_objekte_im_details_table.php @@ -15,6 +15,7 @@ return new class extends Migration $table->id(); $table->foreignId('projekte_id')->constrained()->cascadeOnDelete(); $table->foreignId('projekt_objekte_id')->constrained()->cascadeOnDelete(); + $table->foreignId('projekt_methode_id'); $table->string('geschoss')->nullable(); $table->string('raumart')->nullable(); $table->decimal('flaeche', 7, 2)->default(0);