diff --git a/app/Actions/Generate/Tabellen/ZuUndAbschlaege.php b/app/Actions/Generate/Tabellen/ZuUndAbschlaege.php index c84d686..0dada6e 100644 --- a/app/Actions/Generate/Tabellen/ZuUndAbschlaege.php +++ b/app/Actions/Generate/Tabellen/ZuUndAbschlaege.php @@ -8,6 +8,7 @@ use App\Models\ProjektMerkmale; use App\Models\ProjektMethode; use App\Models\ProjektObjekte; use App\Models\ProjektObjekteImDetail; +use DB; class ZuUndAbschlaege { @@ -42,24 +43,57 @@ class ZuUndAbschlaege foreach ($objekte as $objekt) { - $detail = ProjektObjekteImDetail::where('projekt_objekte_id', $objekt->id)->get(); + // $detail = ProjektObjekteImDetail::join('projekt_methodes', 'projekt_objekte_im_details.raumart', '=', 'projekt_methodes.name') + // ->where('projekt_methodes.projekte_id', $projekte_id) + // ->where('projekt_objekte_im_details.projekt_objekte_id', $objekt->id) + // ->get(); + // dd($detail); + + $detail = DB::table('projekt_objekte_im_details') + ->join('projekt_methodes', 'projekt_objekte_im_details.raumart', '=', 'projekt_methodes.raumart') + ->select( + 'projekt_objekte_im_details.geschoss', + 'projekt_objekte_im_details.raumart', + 'projekt_objekte_im_details.faktor', + 'projekt_objekte_im_details.flaeche', + 'projekt_objekte_im_details.nutzwert', + ) + ->where('projekt_methodes.methode_id', 1) + ->where('projekt_methodes.projekte_id', $projekte_id) + ->where('projekt_objekte_im_details.projekt_objekte_id', $objekt->id) + ->get(); + $flaeche = $detail->sum('flaeche'); + $geschoss = $detail->first()->geschoss; $html .= ''; - $html .= Html::td($objekt['top_nummer'], 'left bl br bb'); + $html .= Html::td($objekt['top_nummer'], 'center bl br bb'); $html .= Html::td($geschoss, 'center br bb'); $html .= Html::td($objekt['type'], 'wp20 br bb'); // Nutzfläache - $html .= Html::td(Format::dezimal($flaeche, 2).' m²', 'center br bb'); + $html .= Html::td(Format::dezimal($flaeche, 2).' m²', 'center br bb w30'); // Loggia - // $loggia = Raumalles::loggia($id); - // $gesnutzfl = $loggia + $objekt->qm_m1; - // $loggia = $loggia != 0 ? $loggia : ''; - // $html .= Html::td($loggia, 'right br bb'); - // // Gesammtnutzfläche = Nutzfläache + Loggia - // $html .= Html::td(Format::numeric($gesnutzfl, 2), 'right br bb'); - // dd($objekt); + if ($has_loggien) { + + $loggien = DB::table('projekt_objekte_im_details') + ->join('projekt_methodes', 'projekt_objekte_im_details.raumart', '=', 'projekt_methodes.raumart') + ->select('projekt_objekte_im_details.flaeche') + ->where('projekt_methodes.methode_id', 2) + ->where('projekt_methodes.projekte_id', $projekte_id) + ->where('projekt_objekte_im_details.projekt_objekte_id', $objekt->id) + ->get(); + + $flaeche_loggien = $loggien->sum('flaeche'); + if ($flaeche_loggien) { + $html .= Html::td($flaeche_loggien, 'right br bb'); + } else { + $html .= Html::td('', 'br bb'); + } + $gesammt = $flaeche + $flaeche_loggien; + $html .= Html::td(Format::dezimal($gesammt, 2).' m²', 'center br bb w30'); + } + $nutwert = 0; foreach ($markmale_codes as $code) { $nutwert += $objekt[$code]; diff --git a/app/Actions/Generate/Tabellen/Zusammenstellung.php b/app/Actions/Generate/Tabellen/Zusammenstellung.php index eeef66a..6b27616 100644 --- a/app/Actions/Generate/Tabellen/Zusammenstellung.php +++ b/app/Actions/Generate/Tabellen/Zusammenstellung.php @@ -32,7 +32,7 @@ class Zusammenstellung $nutzwert = $objektimdetail->sum('nutzwert'); - $tmp = ''; + $tmp = 0; $str = ''; if ($nutzwert > 0) { @@ -54,6 +54,7 @@ class Zusammenstellung $html .= Html::td($prozent ?? '', 'center bb br'); $html .= ''; } + $html .= ''; $html .= Html::td('', 'head bl bb', 4); $html .= Html::td(array_sum($summe_nutzwert), 'head center bb'); diff --git a/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php index 1b379a9..87e8dad 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/ProjektObjekteImDetailRelationManager.php @@ -57,7 +57,7 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->columnSpan(2), TextInput::make('flaeche') ->suffix(new HtmlString(' m²')) - ->rules(['required', 'flaeche' => 'decimal:2']) + ->rules(['required']) ->label('Fläche') ->validationMessages([ 'required' => 'Die Eingabe einer Fläche ist erforderlich.', @@ -69,7 +69,6 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->columnSpan(2), TextInput::make('faktor') ->suffixIcon('phosphor-function') - ->rules(['required', 'faktor' => 'decimal:0,2']) ->afterStateUpdated(function (Component $livewire) { $livewire->dispatch('refreshProjektObjekteImDetail'); })->validationMessages([ @@ -97,10 +96,16 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->extraInputAttributes(['onClick' => 'this.select()']) ->suffixIcon('phosphor-function') ->width('1rem') - ->rules(['required', 'faktor' => 'decimal:0,2']) + ->rules(['required']) ->searchable() - ->afterStateUpdated(function (Component $livewire) { + ->afterStateUpdated(function ($record, Component $livewire) { + + $object = ProjektObjekteImDetail::find($record['id']); + $object->nutzwert = round($object->faktor * $object->flaeche, 2); + $object->save(); + $livewire->dispatch('refreshProjektObjekteImDetail'); + })->validationMessages([ 'required' => 'Die Eingabe eines Faktors ist erforderlich.', 'decimal' => 'Für den Faktors sind zwei Dezimalstellen erforderlich.', @@ -113,11 +118,17 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ->suffix(new HtmlString(' m²')) ->width('2rem') ->alignment('right') - ->rules(['required', 'flaeche' => 'decimal:2']) + ->rules(['required']) ->label('Fläche') ->searchable() - ->afterStateUpdated(function (Component $livewire) { + ->afterStateUpdated(function ($record, Component $livewire) { + + $object = ProjektObjekteImDetail::find($record['id']); + $object->nutzwert = round($object->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.', @@ -131,7 +142,7 @@ class ProjektObjekteImDetailRelationManager extends RelationManager SelectFilter::make('top_nummer') ->label('Top Nummer') ->relationship('top_nummer', 'top_nummer', fn (Builder $query) => $query->where('projekte_id', $this->getOwnerRecord()->id)) - ->searchable(), + ->preload(), SelectFilter::make('geschoss') ->preload() ->options(function (): array { @@ -143,6 +154,7 @@ class ProjektObjekteImDetailRelationManager extends RelationManager return ProjektObjekteImDetail::where('projekte_id', $this->getOwnerRecord()->id)->groupBy('raumart')->orderBy('raumart')->pluck('raumart', 'raumart')->toArray(); }), ]) + ->deferFilters(false) ->headerActions([ CreateAction::make() ->icon('phosphor-file-plus') @@ -150,7 +162,8 @@ class ProjektObjekteImDetailRelationManager extends RelationManager ]) ->recordActions([ EditAction::make()->iconButton() - ->mutateDataUsing(function (array $data): array { + ->mutateDataUsing(function ($data): array { + $data['nutzwert'] = round($data['faktor'] * $data['flaeche']); return $data; diff --git a/database/seeders/AuftraggeberSeeder.php b/database/seeders/AuftraggeberSeeder.php index b9418f8..a97e645 100644 --- a/database/seeders/AuftraggeberSeeder.php +++ b/database/seeders/AuftraggeberSeeder.php @@ -14,7 +14,7 @@ class AuftraggeberSeeder extends Seeder { $sql = "INSERT INTO `auftraggebers` (`id`, `konto_id`, `title`, `gender`, `name`, `company`, `logo`, `email`, `phone`, `logo_align`, `referenz_formatting`, `logo_anzeigen`, `text_anzeigen`, `created_at`, `updated_at`) VALUES - ('1', '1', NULL, 'Herr', 'Moser Hans', 'NEUE HEIMAT TIROL', NULL, 'h.moser@gnh.at', '+43512547895', 'right', '{\"type\":\"doc\",\"content\":[{\"type\":\"heading\",\"attrs\":{\"textAlign\":\"start\",\"level\":3},\"content\":[{\"type\":\"text\",\"text\":\"NEUE HEIMAT TIROL\",\"marks\":[{\"type\":\"textColor\",\"attrs\":{\"data-color\":\"#fb2c36\"}}]}]},{\"type\":\"paragraph\",\"attrs\":{\"textAlign\":\"start\"},\"content\":[{\"type\":\"text\",\"text\":\"Gemeinnützige WohnungsGmbH\"}]},{\"type\":\"paragraph\",\"attrs\":{\"textAlign\":\"start\"},\"content\":[{\"type\":\"text\",\"text\":\"Gumppstraße 47 - 6020 Innsbruck\"}]}]}', '0', '1', NULL, '2025-10-21 04:21:21'), + ('1', '1', NULL, 'Herr', 'Moser Hans', 'NEUE HEIMAT TIROL', NULL, 'h.moser@gnh.at', '+43512547895', 'right', '{\"type\":\"doc\",\"content\":[{\"type\":\"paragraph\",\"attrs\":{\"textAlign\":\"start\"},\"content\":[{\"type\":\"text\",\"text\":\"NEUE HEIMAT TIROL\",\"marks\":[{\"type\":\"bold\"}]}]},{\"type\":\"paragraph\",\"attrs\":{\"textAlign\":\"start\"},\"content\":[{\"type\":\"text\",\"text\":\"Gemeinn\\u00fctzige WohnungsGmbH\"}]},{\"type\":\"paragraph\",\"attrs\":{\"textAlign\":\"start\"},\"content\":[{\"type\":\"text\",\"text\":\"Gumppstra\\u00dfe 47 - 6020 Innsbruck\"}]}]}', '0', '1', NULL, '2025-11-10 12:06:15'), ('2', '1', NULL, 'Herr', 'Rudi Sommer', 'BauArt Immobilien GmbH', NULL, 'r.sommer@BauArtImmobilien.at', '+43512226688', 'right', 'BauArt Immobilien GmbH
Maximilianstraße 2
6020 Innsbruck', '0', '0', NULL, '2025-10-17 10:07:53'), ('3', '1', NULL, 'Herr', 'Notar Schwarz', 'Ch. Stabel, H. Pechlaner, B. Augustin, S. Baumgartner', NULL, 'schwarz@notar.cc', '0512/59969-0', 'right', 'Christine Stabel, Omes 14, 6094 Axams
Hansjörg Pechlaner, Andreas Hofer-Strasse 18, 6020 Innsbruck
Barbara Augustin, St. Georgs-Weg 8, 6020 Innsbruck
Sabine Baumgartner, Hervicusgasse 4/4/10, 1120 Wien', '0', '0', NULL, NULL), ('4', '1', NULL, 'Herr', 'Hr Atz', 'BUWOG', NULL, 'office@buwog.at', '++43 (0)1/878 28-0', 'right', 'BUWOG - Bauen und Wohnen Gesellschaft mbH
Hietzinger Kai 131
A-1130 Wien', '0', '0', NULL, NULL), @@ -52,7 +52,8 @@ class AuftraggeberSeeder extends Seeder ('36', '1', NULL, 'Herr', 'Peter Walde', 'Ing. Peter Walde', NULL, 'peter@walde.at', '0699 17282166', 'right', '', '0', '0', NULL, NULL), ('37', '1', NULL, 'Herr', 'Ing. Sandra Peer', 'HYPO TIROL', NULL, 'sandra.peer@hypotirol.com', '', 'right', '
Hypo Tirol Bank AG
Meraner Straße 8
6020 Innsbruck
', '0', '0', NULL, NULL), ('38', '1', NULL, 'Herr', 'Hanno', 'Hanno Vogl-Fernheim', NULL, 'office@vogl-fernheim.eu', '0512/560303', 'right', '
Hanno Vogl-Fernheim
Richardsweg 1
6020 Innsbruck
', '0', '0', NULL, NULL); -"; + "; + DB::unprepared($sql); } } diff --git a/resources/css/pdf-download.css b/resources/css/pdf-download.css index 4034d67..27d7989 100644 --- a/resources/css/pdf-download.css +++ b/resources/css/pdf-download.css @@ -183,6 +183,10 @@ th { padding: 5px 7px; } +.w30 { + width: 30mm; +} + .wp10 { width: 10%; } diff --git a/storage/beispiele/p386-Nutzflächen.pdf b/storage/beispiele/p386-Nutzflächen.pdf new file mode 100644 index 0000000..7dca107 Binary files /dev/null and b/storage/beispiele/p386-Nutzflächen.pdf differ diff --git a/storage/beispiele/p386-Standard.pdf b/storage/beispiele/p386-Standard.pdf new file mode 100644 index 0000000..87d0b2a Binary files /dev/null and b/storage/beispiele/p386-Standard.pdf differ