diff --git a/ARTISAN.md b/ARTISAN.md index 41bce1c..71f6cf7 100644 --- a/ARTISAN.md +++ b/ARTISAN.md @@ -1,4 +1,4 @@ -a make:model TextblockKennung -m +a make:model Textblock -m a make:filament-resource KontoTextblock diff --git a/app/Actions/Create/CreateProjektInhaltsverzeichnis.php b/app/Actions/Create/CreateProjektInhaltsverzeichnis.php index ac5378f..aa00996 100644 --- a/app/Actions/Create/CreateProjektInhaltsverzeichnis.php +++ b/app/Actions/Create/CreateProjektInhaltsverzeichnis.php @@ -10,8 +10,14 @@ class CreateProjektInhaltsverzeichnis { public static function create($record) { - $inhaltsverzeichnis = Inhaltsverzeichnis::with('textblock_kennung')->get(); + $inhaltsverzeichnis = Inhaltsverzeichnis::get(); foreach ($inhaltsverzeichnis as $inhalt) { + + $textblock = ''; + if ($inhalt->textblock_id > 0) { + $textblock = Textblock::where('id', $inhalt->textblock_id)->pluck('textblock')->first(); + } + ProjektInhaltsverzeichnis::updateOrCreate( [ 'projekte_id' => $record->id, @@ -20,9 +26,12 @@ class CreateProjektInhaltsverzeichnis [ 'sort' => $inhalt->sort, 'ordnungszahl' => $inhalt->ordnungszahl, + 'name' => $inhalt->name, + 'ueberschrift_nicht_anzeigen' => $inhalt->ueberschrift_nicht_anzeigen, 'seite' => $inhalt->seite, - 'textblock_kennung_id' => $inhalt->textblock_kennung_id, - 'textblock' => Textblock::where('id', $inhalt->textblock_kennung_id)->pluck('textblock')->first(), + 'tabellen_id' => $inhalt->tabellen_id, + 'textblock_id' => $inhalt->textblock_id, + 'textblock' => $textblock, ]); } } diff --git a/app/Filament/Resources/Gutachters/Schemas/GutachterForm.php b/app/Filament/Resources/Gutachters/Schemas/GutachterForm.php index cd7a667..7cab20b 100644 --- a/app/Filament/Resources/Gutachters/Schemas/GutachterForm.php +++ b/app/Filament/Resources/Gutachters/Schemas/GutachterForm.php @@ -52,6 +52,29 @@ class GutachterForm ->label('Telefon') ->defaultCountry('AT'), ]), + Tab::make('Logo') + ->icon('phosphor-image') + ->schema([ + Checkbox::make('logo_anzeigen') + ->label('Das Logo im Gutachten verwenden') + ->columnSpanFull(), + FileUpload::make('logo') + ->image() + ->disk('public') + ->directory('gutachter-logo') + ->maxSize(3072) // 3MB limit + ->acceptedFileTypes(['image/jpeg', 'image/png', 'image/webp']) + ->visibility('public') + ->label('Logo'), + Radio::make('logo_align') + ->Label('Position') + ->default('right') + ->options([ + 'left' => 'Links', + 'center' => 'Zentriert', + 'right' => 'Rechts', + ]), + ])->columns(2), Tab::make('Anzeige am Deckblatt') ->icon('lucide-contact') ->schema([ @@ -98,28 +121,19 @@ class GutachterForm ->label('Adresse') ->required(), ]), - Tab::make('Logo') - ->icon('phosphor-image') + + Tab::make('digitale_signatur') + ->label('Digitale Signatur') + ->icon('phosphor-stamp') ->schema([ - Checkbox::make('logo_anzeigen') - ->label('Das Logo im Gutachten verwenden') - ->columnSpanFull(), - FileUpload::make('logo') + FileUpload::make('digitale_signatur_stempel') + ->label('Bild vom Stempel') ->image() ->disk('public') - ->directory('gutachter-logo') + ->directory('gutachter-stempel') ->maxSize(3072) // 3MB limit ->acceptedFileTypes(['image/jpeg', 'image/png', 'image/webp']) - ->visibility('public') - ->label('Logo'), - Radio::make('logo_align') - ->Label('Position') - ->default('right') - ->options([ - 'left' => 'Links', - 'center' => 'Zentriert', - 'right' => 'Rechts', - ]), + ->visibility('public'), ])->columns(2), ])->columnSpanFull(), ]); diff --git a/app/Filament/Resources/Inhaltsverzeichnis/Pages/ListInhaltsverzeichnis.php b/app/Filament/Resources/Inhaltsverzeichnis/Pages/ListInhaltsverzeichnis.php index beb2ea8..af0eacc 100644 --- a/app/Filament/Resources/Inhaltsverzeichnis/Pages/ListInhaltsverzeichnis.php +++ b/app/Filament/Resources/Inhaltsverzeichnis/Pages/ListInhaltsverzeichnis.php @@ -14,6 +14,7 @@ class ListInhaltsverzeichnis extends ListRecords { return [ CreateAction::make() + ->modalHeading('Kapitel hinzufügen') ->icon('phosphor-file-plus') ->createAnother(false), ]; diff --git a/app/Filament/Resources/Inhaltsverzeichnis/Schemas/InhaltsverzeichnisForm.php b/app/Filament/Resources/Inhaltsverzeichnis/Schemas/InhaltsverzeichnisForm.php index fb9c858..8d9315d 100644 --- a/app/Filament/Resources/Inhaltsverzeichnis/Schemas/InhaltsverzeichnisForm.php +++ b/app/Filament/Resources/Inhaltsverzeichnis/Schemas/InhaltsverzeichnisForm.php @@ -2,9 +2,14 @@ namespace App\Filament\Resources\Inhaltsverzeichnis\Schemas; -use App\Models\TextblockKennung; +use App\Models\Tabellen; +use App\Models\Textblock; +use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\Select; +use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; +use Filament\Schemas\Components\Flex; +use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; class InhaltsverzeichnisForm @@ -13,15 +18,52 @@ class InhaltsverzeichnisForm { return $schema ->components([ - TextInput::make('ordnungszahl')->numeric(), - Select::make('textblock_kennung_id') - ->label('Textblock Art') - ->options(function () { - $relatedOptions = TextblockKennung::all()->pluck('name', 'id')->toArray(); + Flex::make([ + Section::make([ + Textarea::make('name') + ->required() + ->label('Kapitel Überschrift'), + Checkbox::make('ueberschrift_nicht_anzeigen') + ->label('Überschrift nicht angezeigen'), + ]), + Section::make([ + TextInput::make('ordnungszahl') + ->label('Kapitel Index') + ->placeholder('3.21') + ->numeric() + ->default(0) + ->belowContent([ + 'Bei "0" wird der Index im PDF nicht angezeigt', + ]), + TextInput::make('seite') + ->label('Seitenzahl') + ->numeric() + ->default(0) + ->belowContent([ + 'Bei "0" wird die Seitenzahl automatisch generiert', + ]), + ]), + ])->columnSpanFull(2), - return ['0' => 'ohne Textblock'] + $relatedOptions; - }), - TextInput::make('name'), - ])->columns(1); + Select::make('tabellen_id')->label('Tabelle') + ->prefixIcon('phosphor-table') + ->default(0) + ->options(function () { + return Tabellen::all()->pluck('name', 'id')->toArray(); + })->belowContent([ + 'Kann auch frei bleiben', + ]), + + Select::make('textblock_id')->label('Textblock') + ->prefixIcon('phosphor-article') + ->default(0) + ->options(function () { + return Textblock::all()->pluck('name', 'id')->toArray(); + + // return ['100' => 'Eigener Textblock'] + $relatedOptions; + })->belowContent([ + 'Kann auch frei bleiben', + ]), + ]); } } diff --git a/app/Filament/Resources/Inhaltsverzeichnis/Tables/InhaltsverzeichnisTable.php b/app/Filament/Resources/Inhaltsverzeichnis/Tables/InhaltsverzeichnisTable.php index 5d8ea8a..8c34370 100644 --- a/app/Filament/Resources/Inhaltsverzeichnis/Tables/InhaltsverzeichnisTable.php +++ b/app/Filament/Resources/Inhaltsverzeichnis/Tables/InhaltsverzeichnisTable.php @@ -2,8 +2,10 @@ namespace App\Filament\Resources\Inhaltsverzeichnis\Tables; +use Filament\Actions\DeleteAction; use Filament\Actions\EditAction; use Filament\Tables\Columns\TextColumn; +use Filament\Tables\Columns\ToggleColumn; use Filament\Tables\Table; class InhaltsverzeichnisTable @@ -11,21 +13,34 @@ class InhaltsverzeichnisTable public static function configure(Table $table): Table { return $table + ->heading('Inhaltsverzeichnis') + ->description('Wird als Vorlage bei den Gutachten verwendet.') ->columns([ - // TextColumn::make('sort'), TextColumn::make('ordnungszahl') + ->label('Index') ->getStateUsing(fn ($record): string => $record->ordnungszahl == '0' ? '' : number_format($record->ordnungszahl, 2)), TextColumn::make('name') - ->description(fn ($record): string => $record->textblock_kennungs->name ?? ''), + ->label('Überschrift') + ->wrap() + ->description(fn ($record): string => $record->textblock_kennungs->name ?? '') + ->color(fn ($record): string => match ($record->ueberschrift_nicht_anzeigen) { + 1 => 'primary', + default => 'gray', + }), + // ToggleColumn::make('ueberschrift_anzeigen')->label('')->tooltip('Überschrift im PDF anzeigen'), + TextColumn::make('tabellen.name')->wrap(), + TextColumn::make('textblock.name')->wrap(), TextColumn::make('seite') ->alignCenter() ->badge() ->color('info') ->getStateUsing(fn ($record): string => $record->seite == '0' ? '...' : $record->seite), ]) + ->defaultSort('sort', direction: 'asc') ->reorderable('sort') ->recordActions([ EditAction::make()->iconButton()->color('gray'), + DeleteAction::make()->iconButton(), ]); } } diff --git a/app/Filament/Resources/KontoTextblocks/KontoTextblockResource.php b/app/Filament/Resources/KontoTextblocks/KontoTextblockResource.php index 38e4904..ef360ed 100644 --- a/app/Filament/Resources/KontoTextblocks/KontoTextblockResource.php +++ b/app/Filament/Resources/KontoTextblocks/KontoTextblockResource.php @@ -23,7 +23,7 @@ class KontoTextblockResource extends Resource protected static ?string $cluster = VerwaltungCluster::class; - protected static ?string $navigationLabel = 'Textblock'; + protected static ?string $navigationLabel = 'Eigene Textblöcke'; protected static ?string $modelLabel = 'Textblock'; diff --git a/app/Filament/Resources/KontoTextblocks/Schemas/KontoTextblockForm.php b/app/Filament/Resources/KontoTextblocks/Schemas/KontoTextblockForm.php index e9dc4db..63c5fdb 100644 --- a/app/Filament/Resources/KontoTextblocks/Schemas/KontoTextblockForm.php +++ b/app/Filament/Resources/KontoTextblocks/Schemas/KontoTextblockForm.php @@ -2,9 +2,7 @@ namespace App\Filament\Resources\KontoTextblocks\Schemas; -use App\Models\TextblockKennung; use Filament\Forms\Components\RichEditor; -use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Schemas\Schema; @@ -17,11 +15,7 @@ class KontoTextblockForm ->components([ TextInput::make('name') ->required(), - Textarea::make('beschreibung') - ->afterLabel('Bei gleichen Textblockarten kann hier der Unterschied kurz angerissen werden.'), - Select::make('textblock_kennung_id') - ->label('Textblock Art') - ->options(TextblockKennung::pluck('name', 'id')), + Textarea::make('beschreibung'), RichEditor::make('textblock') ->toolbarButtons([ ['bold', 'italic', 'underline', 'strike', 'subscript', 'superscript'], diff --git a/app/Filament/Resources/KontoTextblocks/Tables/KontoTextblocksTable.php b/app/Filament/Resources/KontoTextblocks/Tables/KontoTextblocksTable.php index a6478ab..aad0672 100644 --- a/app/Filament/Resources/KontoTextblocks/Tables/KontoTextblocksTable.php +++ b/app/Filament/Resources/KontoTextblocks/Tables/KontoTextblocksTable.php @@ -2,13 +2,10 @@ namespace App\Filament\Resources\KontoTextblocks\Tables; -use App\Models\TextblockKennung; -use Filament\Actions\BulkActionGroup; -use Filament\Actions\DeleteBulkAction; +use Filament\Actions\DeleteAction; use Filament\Actions\EditAction; use Filament\Support\Enums\FontWeight; use Filament\Tables\Columns\TextColumn; -use Filament\Tables\Filters\SelectFilter; use Filament\Tables\Table; use Illuminate\Support\HtmlString; @@ -19,14 +16,8 @@ class KontoTextblocksTable return $table ->defaultPaginationPageOption(5) ->columns([ - TextColumn::make('textblock_kennung.name') - ->label('Kennung') - ->color('info') - ->wrap() - ->description(function ($record) { - return new HtmlString($record->beschreibung); - }), TextColumn::make('name') + ->searchable() ->weight(FontWeight::Bold) ->wrap() ->description(function ($record) { @@ -34,22 +25,9 @@ class KontoTextblocksTable }) ->html(), ]) - ->filters([ - SelectFilter::make('textblock_kennung_id') - ->label('Textbock Art') - ->options(function (): array { - return TextblockKennung::join('konto_textblocks', 'textblock_kennungs.id', '=', 'konto_textblocks.textblock_kennung_id') - ->pluck('textblock_kennungs.name', 'textblock_kennungs.id')->toArray(); - }) - ->preload(), - ]) ->recordActions([ - EditAction::make(), - ]) - ->toolbarActions([ - BulkActionGroup::make([ - DeleteBulkAction::make(), - ]), + EditAction::make()->iconButton()->color('gray'), + DeleteAction::make()->iconButton(), ]); } } diff --git a/app/Filament/Resources/Projektes/RelationManagers/OrientierungZuAbschlaegesRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/OrientierungZuAbschlaegesRelationManager.php index c132204..8c9bcb9 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/OrientierungZuAbschlaegesRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/OrientierungZuAbschlaegesRelationManager.php @@ -179,7 +179,7 @@ class OrientierungZuAbschlaegesRelationManager extends RelationManager } }), BulkAction::make('a') - ->label($spalten['a'].' Faktor' ?? '') + ->label($spalten['a'] ?? '') ->color('info') ->hidden(isset($spalten['a']) ? false : true) ->schema([ diff --git a/app/Filament/Resources/Projektes/RelationManagers/ProjektInhaltsverzeichnisRelationManager.php b/app/Filament/Resources/Projektes/RelationManagers/ProjektInhaltsverzeichnisRelationManager.php index afce179..8bce7c8 100644 --- a/app/Filament/Resources/Projektes/RelationManagers/ProjektInhaltsverzeichnisRelationManager.php +++ b/app/Filament/Resources/Projektes/RelationManagers/ProjektInhaltsverzeichnisRelationManager.php @@ -3,7 +3,6 @@ namespace App\Filament\Resources\Projektes\RelationManagers; use App\Models\KontoTextblock; -use App\Models\TextblockKennung; use Filament\Actions\Action; use Filament\Actions\BulkActionGroup; use Filament\Actions\CreateAction; @@ -11,14 +10,14 @@ use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; use Filament\Forms\Components\Hidden; -use Filament\Forms\Components\Radio; use Filament\Forms\Components\RichEditor; use Filament\Forms\Components\RichEditor\RichContentRenderer; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Resources\RelationManagers\RelationManager; use Filament\Schemas\Components\Actions; -use Filament\Schemas\Components\Fieldset; +use Filament\Schemas\Components\Flex; +use Filament\Schemas\Components\Section; use Filament\Schemas\Components\Utilities\Get; use Filament\Schemas\Components\Utilities\Set; use Filament\Schemas\Schema; @@ -42,27 +41,19 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager { return $schema ->components([ + TextInput::make('ordnungszahl')->numeric(), TextInput::make('name'), - Select::make('textblock_kennung_id') - ->label('Textblock Art') - ->options(function () { - $relatedOptions = TextblockKennung::all()->pluck('name', 'id')->toArray(); - return ['0' => 'ohne Textblock'] + $relatedOptions; - }) - ->live(), - - RichEditor::make('textblock') - ->hidden(fn (Get $get): bool => ! $get('textblock_kennung_id')) - ->toolbarButtons([ - ['bold', 'italic', 'underline', 'strike', 'subscript', 'superscript'], + Flex::make([ + Section::make([ + RichEditor::make('textblock') + ->hidden(fn (Get $get): bool => ! $get('textblock_kennung_id')) + ->toolbarButtons([ + ['bold', 'italic', 'underline', 'strike', 'subscript', 'superscript'], + ]), ]), - - Fieldset::make('Vorlagen') - ->hiddenLabel() - ->hidden(fn ($record): bool => ! isset($record) || ! $record['textblock_kennung_id']) - ->schema([ + Section::make([ Action::make('textblock_sichern') ->schema([ Hidden::make('konto_id')->default(auth()->user()->konto_id), @@ -88,9 +79,9 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager }), ]) ->modalSubmitActionLabel('Sichern') + ->iconButton() ->icon('phosphor-floppy-disk') ->tooltip('Ein veränderter Textblock kann als persönliche Vorlage gespeichert werden.') - ->color('info') ->action(function (array $mountedActions, $data) { $record = $mountedActions[0]->getRawData(); @@ -107,8 +98,9 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager Actions::make([ Action::make('textblock_laden') ->schema([ - Radio::make('konto_textblock_id') + Select::make('konto_textblock_id') ->hiddenLabel() + ->searchable() ->options(function ($record) { return KontoTextblock::where('textblock_kennung_id', $record['textblock_kennung_id'])->where('konto_id', auth()->user()->konto_id)->pluck('name', 'id')->toArray(); })->belowLabel([ @@ -116,16 +108,17 @@ class ProjektInhaltsverzeichnisRelationManager extends RelationManager ]), ]) ->icon('phosphor-article') + ->iconButton() ->modalSubmitActionLabel('Einsetzen') - ->color('info') - ->tooltip('Personaliserten Texblock laden.') + ->tooltip('Personaliserten Textblock laden.') ->action(function (Set $set, array $data) { $set('textblock', KontoTextblock::query()->where('id', $data['konto_textblock_id'])->pluck('textblock')->first()); }), ]), - ])->columns(4), + ])->grow(false), + ])->columnSpanFull(), - ])->columns(1); + ]); } public function table(Table $table): Table diff --git a/app/Filament/Resources/Textblocks/Schemas/TextblockForm.php b/app/Filament/Resources/Textblocks/Schemas/TextblockForm.php index 9c09f70..547ef7a 100644 --- a/app/Filament/Resources/Textblocks/Schemas/TextblockForm.php +++ b/app/Filament/Resources/Textblocks/Schemas/TextblockForm.php @@ -2,9 +2,7 @@ namespace App\Filament\Resources\Textblocks\Schemas; -use App\Models\TextblockKennung; use Filament\Forms\Components\RichEditor; -use Filament\Forms\Components\Select; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Schemas\Schema; @@ -19,9 +17,7 @@ class TextblockForm ->required(), Textarea::make('beschreibung') ->afterLabel('Bei gleichen Textblockarten kann hier der Unterschied kurz angerissen werden.'), - Select::make('textblock_kennung_id') - ->label('Textblock Art') - ->options(TextblockKennung::pluck('name', 'id')), + RichEditor::make('textblock') ->toolbarButtons([ ['bold', 'italic', 'underline', 'strike', 'subscript', 'superscript'], diff --git a/app/Filament/Resources/Textblocks/Tables/TextblocksTable.php b/app/Filament/Resources/Textblocks/Tables/TextblocksTable.php index ae6c299..75eeebb 100644 --- a/app/Filament/Resources/Textblocks/Tables/TextblocksTable.php +++ b/app/Filament/Resources/Textblocks/Tables/TextblocksTable.php @@ -2,6 +2,7 @@ namespace App\Filament\Resources\Textblocks\Tables; +use Filament\Actions\DeleteAction; use Filament\Actions\EditAction; use Filament\Support\Enums\FontWeight; use Filament\Tables\Columns\TextColumn; @@ -15,13 +16,6 @@ class TextblocksTable return $table ->defaultPaginationPageOption(5) ->columns([ - TextColumn::make('textblock_kennung.name') - ->label('Kennung') - ->color('info') - ->wrap() - ->description(function ($record) { - return new HtmlString($record->beschreibung); - }), TextColumn::make('name') ->weight(FontWeight::Bold) ->wrap() @@ -32,6 +26,7 @@ class TextblocksTable ]) ->recordActions([ EditAction::make()->iconButton()->color('gray'), + DeleteAction::make()->iconButton(), ]); } } diff --git a/app/Models/Gutachter.php b/app/Models/Gutachter.php index 16a79e5..e25e4c9 100644 --- a/app/Models/Gutachter.php +++ b/app/Models/Gutachter.php @@ -23,6 +23,7 @@ class Gutachter extends Model 'logo', 'logo_align', 'referenz_formatting', + 'digitale_signatur_stempel', 'logo_anzeigen', 'text_anzeigen', ]; diff --git a/app/Models/Inhaltsverzeichnis.php b/app/Models/Inhaltsverzeichnis.php index a5adb8c..078cd6e 100644 --- a/app/Models/Inhaltsverzeichnis.php +++ b/app/Models/Inhaltsverzeichnis.php @@ -8,14 +8,21 @@ class Inhaltsverzeichnis extends Model { protected $fillable = [ 'name', - 'textblock_kennung_id', + 'ueberschrift_anzeigen', + 'tabellen_id', + 'textblock_id', 'sort', 'ordnungszahl', 'seite', ]; - public function textblock_kennung() + public function textblock() { - return $this->hasMany(TextblockKennung::class, 'id', 'textblock_kennung_id'); + return $this->hasMany(Textblock::class, 'id', 'textblock_id'); + } + + public function tabellen() + { + return $this->hasMany(Tabellen::class, 'id', 'tabellen_id'); } } diff --git a/app/Models/KontoTextblock.php b/app/Models/KontoTextblock.php index bba0c2f..e7eabb9 100644 --- a/app/Models/KontoTextblock.php +++ b/app/Models/KontoTextblock.php @@ -18,9 +18,4 @@ class KontoTextblock extends Model { static::addGlobalScope(new KontoScope); } - - public function textblock_kennung() - { - return $this->hasMany(TextblockKennung::class, 'id', 'textblock_kennung_id'); - } } diff --git a/app/Models/Tabellen.php b/app/Models/Tabellen.php new file mode 100644 index 0000000..7dcb8cd --- /dev/null +++ b/app/Models/Tabellen.php @@ -0,0 +1,10 @@ +hasMany(TextblockKennung::class, 'id'); - } } diff --git a/app/Models/TextblockKennung.php b/app/Models/TextblockKennung.php deleted file mode 100644 index fe170f3..0000000 --- a/app/Models/TextblockKennung.php +++ /dev/null @@ -1,12 +0,0 @@ - 'excel', 1 => 'logo', 2 => 'pdf', + 3 => 'siegel', ), ), 'heroicons' => diff --git a/bootstrap/cache/config.php b/bootstrap/cache/config.php index ce7485b..f053558 100644 --- a/bootstrap/cache/config.php +++ b/bootstrap/cache/config.php @@ -124,9 +124,9 @@ 'timezone' => 'UTC', 'locale' => 'de', 'fallback_locale' => 'en', - 'faker_locale' => 'de_AT', + 'faker_locale' => 'at_AT', 'cipher' => 'AES-256-CBC', - 'key' => 'base64:3uv/ppXplpqmYtiZ5ZyILnoOTmKfZAz27bfsnR1qmaE=', + 'key' => 'base64:yRi9h21i7xAkGpeF7JoArovQJU1w6xwczQ6ijpYpJrs=', 'previous_keys' => array ( ), diff --git a/bootstrap/cache/routes-v7.php b/bootstrap/cache/routes-v7.php index 73fa5ce..30b8fc0 100644 --- a/bootstrap/cache/routes-v7.php +++ b/bootstrap/cache/routes-v7.php @@ -531,7 +531,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::e49aps4aQONLVTWt', + '_route' => 'generated::miopsq0K1HrZfTFf', ), 1 => NULL, 2 => @@ -551,7 +551,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::q6W1ELsYeTKdrkd1', + '_route' => 'generated::TFjsvS4T7LX9C5Bj', ), 1 => NULL, 2 => @@ -609,7 +609,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::3pkhx5Z3rpV06SKQ', + '_route' => 'generated::BmV7ODeKY8KcqAM5', ), 1 => NULL, 2 => @@ -629,7 +629,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::HIxTYKYuGieAD5C1', + '_route' => 'generated::ixhBlM4fTcynFByI', ), 1 => NULL, 2 => @@ -649,7 +649,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::r6YUk0D6jqybwqGA', + '_route' => 'generated::RWJiH3xHLvAfuWDx', ), 1 => NULL, 2 => @@ -669,7 +669,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::d07u8ErdJPIt0Bb1', + '_route' => 'generated::fW0j8lWigChGVWrL', ), 1 => NULL, 2 => @@ -689,7 +689,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::lEsY9aMqtMS0xfDF', + '_route' => 'generated::fQMNejQQ6d7WKdHV', ), 1 => NULL, 2 => @@ -2740,7 +2740,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::e49aps4aQONLVTWt' => + 'generated::miopsq0K1HrZfTFf' => array ( 'methods' => array ( @@ -2752,7 +2752,7 @@ app('router')->setCompiledRoutes( array ( 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', - 'as' => 'generated::e49aps4aQONLVTWt', + 'as' => 'generated::miopsq0K1HrZfTFf', ), 'fallback' => false, 'defaults' => @@ -2768,7 +2768,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::q6W1ELsYeTKdrkd1' => + 'generated::TFjsvS4T7LX9C5Bj' => array ( 'methods' => array ( @@ -2780,7 +2780,7 @@ app('router')->setCompiledRoutes( array ( 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', - 'as' => 'generated::q6W1ELsYeTKdrkd1', + 'as' => 'generated::TFjsvS4T7LX9C5Bj', ), 'fallback' => false, 'defaults' => @@ -2882,7 +2882,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::3pkhx5Z3rpV06SKQ' => + 'generated::BmV7ODeKY8KcqAM5' => array ( 'methods' => array ( @@ -2911,7 +2911,7 @@ app('router')->setCompiledRoutes( \'exception\' => $exception, ]), status: $exception ? 500 : 200); }";s:5:"scope";s:54:"Illuminate\\Foundation\\Configuration\\ApplicationBuilder";s:4:"this";N;s:4:"self";s:32:"0000000000000f3b0000000000000000";}}', - 'as' => 'generated::3pkhx5Z3rpV06SKQ', + 'as' => 'generated::BmV7ODeKY8KcqAM5', ), 'fallback' => false, 'defaults' => @@ -2927,7 +2927,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::HIxTYKYuGieAD5C1' => + 'generated::ixhBlM4fTcynFByI' => array ( 'methods' => array ( @@ -2949,7 +2949,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::HIxTYKYuGieAD5C1', + 'as' => 'generated::ixhBlM4fTcynFByI', ), 'fallback' => false, 'defaults' => @@ -2965,7 +2965,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::r6YUk0D6jqybwqGA' => + 'generated::RWJiH3xHLvAfuWDx' => array ( 'methods' => array ( @@ -2987,7 +2987,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::r6YUk0D6jqybwqGA', + 'as' => 'generated::RWJiH3xHLvAfuWDx', ), 'fallback' => false, 'defaults' => @@ -3003,7 +3003,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::d07u8ErdJPIt0Bb1' => + 'generated::fW0j8lWigChGVWrL' => array ( 'methods' => array ( @@ -3025,7 +3025,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::d07u8ErdJPIt0Bb1', + 'as' => 'generated::fW0j8lWigChGVWrL', ), 'fallback' => false, 'defaults' => @@ -3041,7 +3041,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::lEsY9aMqtMS0xfDF' => + 'generated::fQMNejQQ6d7WKdHV' => array ( 'methods' => array ( @@ -3063,7 +3063,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::lEsY9aMqtMS0xfDF', + 'as' => 'generated::fQMNejQQ6d7WKdHV', ), 'fallback' => false, 'defaults' => diff --git a/database/migrations/2025_09_05_131323_create_gutachter_tables.php b/database/migrations/2025_09_05_131323_create_gutachter_tables.php index 0f6b2f4..92a36e7 100644 --- a/database/migrations/2025_09_05_131323_create_gutachter_tables.php +++ b/database/migrations/2025_09_05_131323_create_gutachter_tables.php @@ -19,6 +19,7 @@ return new class extends Migration $table->string('name')->nullable(); $table->string('company')->nullable(); $table->string('logo')->nullable(); + $table->string('digitale_signatur_stempel')->nullable(); $table->string('email')->nullable(); $table->string('phone')->nullable(); $table->string('logo_align')->default('right'); diff --git a/database/migrations/2025_10_02_163208_create_textblocks_table.php b/database/migrations/2025_10_02_163208_create_textblocks_table.php index d6245f2..d46fc12 100644 --- a/database/migrations/2025_10_02_163208_create_textblocks_table.php +++ b/database/migrations/2025_10_02_163208_create_textblocks_table.php @@ -15,7 +15,6 @@ return new class extends Migration $table->id(); $table->string('name'); $table->string('beschreibung')->nullable(); - $table->integer('textblock_kennung_id')->default(0)->nullable(); $table->text('textblock'); $table->timestamps(); }); diff --git a/database/migrations/2025_10_02_170241_create_inhaltsverzeichnis_table.php b/database/migrations/2025_10_02_170241_create_inhaltsverzeichnis_table.php index be2d054..bb0ad34 100644 --- a/database/migrations/2025_10_02_170241_create_inhaltsverzeichnis_table.php +++ b/database/migrations/2025_10_02_170241_create_inhaltsverzeichnis_table.php @@ -14,9 +14,11 @@ return new class extends Migration Schema::create('inhaltsverzeichnis', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->integer('textblock_kennung_id')->default(0)->nullable(); + $table->boolean('ueberschrift_nicht_anzeigen')->default(0)->nullable(); + $table->integer('tabellen_id')->default(0)->nullable(); + $table->integer('textblock_id')->default(0)->nullable(); $table->integer('sort')->default(0); - $table->double('ordnungszahl')->default(0.00); + $table->double('ordnungszahl')->default(0); $table->integer('seite')->default(0); $table->timestamps(); }); diff --git a/database/migrations/2025_10_10_085849_create_projekt_inhaltsverzeichnis_table.php b/database/migrations/2025_10_10_085849_create_projekt_inhaltsverzeichnis_table.php index 27583a6..4866843 100644 --- a/database/migrations/2025_10_10_085849_create_projekt_inhaltsverzeichnis_table.php +++ b/database/migrations/2025_10_10_085849_create_projekt_inhaltsverzeichnis_table.php @@ -14,12 +14,14 @@ return new class extends Migration Schema::create('projekt_inhaltsverzeichnis', function (Blueprint $table) { $table->id(); $table->foreignId('projekte_id')->constrained()->cascadeOnDelete(); - $table->integer('textblock_kennung_id')->default(0)->nullable(); - $table->integer('sort')->default(0); - $table->double('ordnungszahl')->default(0.00); $table->string('name'); - $table->text('textblock')->nullable(); + $table->boolean('ueberschrift_nicht_anzeigen')->default(0)->nullable(); + $table->integer('tabellen_id')->default(0)->nullable(); + $table->integer('textblock_id')->default(0)->nullable(); + $table->integer('sort')->default(0); + $table->double('ordnungszahl')->default(0); $table->integer('seite')->default(0); + $table->text('textblock')->nullable(); $table->timestamps(); }); } diff --git a/database/migrations/2025_10_10_091736_create_textblock_kennungs_table.php b/database/migrations/2025_10_18_065212_create_tabellens_table.php similarity index 72% rename from database/migrations/2025_10_10_091736_create_textblock_kennungs_table.php rename to database/migrations/2025_10_18_065212_create_tabellens_table.php index 0ec0a66..73a2065 100644 --- a/database/migrations/2025_10_10_091736_create_textblock_kennungs_table.php +++ b/database/migrations/2025_10_18_065212_create_tabellens_table.php @@ -11,9 +11,9 @@ return new class extends Migration */ public function up(): void { - Schema::create('textblock_kennungs', function (Blueprint $table) { + Schema::create('tabellens', function (Blueprint $table) { $table->id(); - $table->string('name'); + $table->text('name')->nullable(); $table->timestamps(); }); } @@ -23,6 +23,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('textblock_kennungs'); + Schema::dropIfExists('tabellens'); } }; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 7341db0..2dcbae3 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -19,8 +19,8 @@ class DatabaseSeeder extends Seeder MethodeSeeder::class, OrientierungenSeeder::class, PlansSeeder::class, + TabellenSeeder::class, TextblockSeeder::class, - TextblockKennungSeeder::class, InhaltsverzeichnisSeeder::class, KontoSeeder::class, GutachterSeeder::class, diff --git a/database/seeders/InhaltsverzeichnisSeeder.php b/database/seeders/InhaltsverzeichnisSeeder.php index 033175b..3d2386a 100644 --- a/database/seeders/InhaltsverzeichnisSeeder.php +++ b/database/seeders/InhaltsverzeichnisSeeder.php @@ -12,34 +12,37 @@ class InhaltsverzeichnisSeeder extends Seeder */ public function run(): void { - $sql = "INSERT INTO `inhaltsverzeichnis` (`id`, `name`, `textblock_kennung_id`, `sort`, `ordnungszahl`, `seite`, `created_at`, `updated_at`) + $sql = "INSERT INTO `inhaltsverzeichnis` (`id`, `sort`, `ordnungszahl`, `name`, `ueberschrift_nicht_anzeigen`, `tabellen_id`, `textblock_id`, `seite`, `created_at`, `updated_at`) VALUES - ('1', 'DECKBLATT', '11', '0', '0', '0', NULL, NULL), - ('2', 'ALLGEMEINE ANGABEN', '0', '1', '1', '3', NULL, NULL), - ('3', 'AUFTRAGGEBER', '0', '2', '1.1', '3', NULL, NULL), - ('4', 'ZWECK UND GEGENSTAND DES GUTACHTENS', '1', '3', '1.2', '3', NULL, NULL), - ('5', 'ORTSBESICHTIGUNG', '2', '4', '1.3', '3', NULL, NULL), - ('6', 'UNTERLAGEN', '3', '5', '1.4', '3', NULL, NULL), - ('7', 'BEFUND', '0', '6', '2', '4', NULL, NULL), - ('8', 'GRUNDBUCHSTAND', '4', '7', '2.1', '4', NULL, NULL), - ('9', 'BESCHREIBUNG DER LIEGENSCHAFT', '5', '8', '2.2', '4', NULL, NULL), - ('10', '§ 6 Teil 1', '6', '9', '2.3', '5', NULL, NULL), - ('11', 'Tabelle § 6', '0', '10', '0', '5', NULL, NULL), - ('12', '§ 6 Teil 2', '7', '11', '2.3', '5', NULL, NULL), - ('13', 'GUTACHTEN', '0', '12', '3', '0', NULL, NULL), - ('14', 'ALLGEMEINE GRUNDSÄTZE', '8', '13', '3.1', '0', NULL, NULL), - ('15', 'ERMITTLUNG DER NUTZWERTE – ZUBEHÖRBEWERTUNG', '9', '14', '3.2', '0', NULL, NULL), - ('16', 'TABELLE ZU + ABSCHLÄGE', '0', '15', '3.21', '0', NULL, NULL), - ('17', 'Zubehör', '10', '16', '0', '0', NULL, NULL), - ('18', 'NUTZWERTBERECHNUNG', '0', '17', '3.3', '0', NULL, NULL), - ('19', 'ZUSAMMENSTELLUNG', '0', '18', '3.4', '0', NULL, NULL), - ('20', 'ALLGEMEINFLÄCHEN', '0', '19', '3.5', '0', NULL, NULL), - ('21', 'PARIFIZIERUNGSPLÄNE ', '0', '20', '4', '0', NULL, NULL), - ('22', 'ANHANG', '0', '21', '5', '0', NULL, NULL), - ('23', 'GRUNDBUCHAUSZUG ', '0', '22', '0', '0', NULL, NULL), - ('24', 'BAUBESCHEID', '0', '23', '0', '0', NULL, NULL), - ('25', 'HAUSTECHNISCHE BESCHREIBUNG', '0', '24', '0', '0', NULL, NULL), - ('26', 'NUTZFLÄCHENERMITTLUNGEN', '0', '25', '0', '0', NULL, NULL); + ('1', '1', '0', 'DECKBLATT', '1', '0', '11', '0', NULL, '2025-10-19 08:13:53'), + ('2', '3', '0', 'INHALTSVERZEICHNIS', '1', '1', '0', '0', NULL, '2025-10-19 08:13:53'), + ('3', '4', '1', 'ALLGEMEINE ANGABEN', '0', '0', '0', '3', NULL, '2025-10-19 08:13:53'), + ('4', '5', '1.1', 'AUFTRAGGEBER', '0', '0', '0', '3', NULL, '2025-10-19 08:13:53'), + ('5', '6', '1.2', 'ZWECK UND GEGENSTAND DES GUTACHTENS', '0', '0', '1', '3', NULL, '2025-10-19 08:13:53'), + ('6', '7', '1.3', 'ORTSBESICHTIGUNG', '0', '0', '2', '3', NULL, '2025-10-19 08:13:53'), + ('7', '8', '1.4', 'UNTERLAGEN', '0', '0', '3', '3', NULL, '2025-10-19 08:13:53'), + ('8', '9', '2', 'BEFUND', '0', '0', '0', '4', NULL, '2025-10-19 08:13:53'), + ('9', '10', '2.1', 'GRUNDBUCHSTAND', '0', '0', '4', '4', NULL, '2025-10-19 08:13:53'), + ('10', '11', '2.2', 'BESCHREIBUNG DER LIEGENSCHAFT', '0', '0', '5', '4', NULL, '2025-10-19 08:13:53'), + ('11', '12', '2.3', 'ANZAHL DER SELBSTÄNDIGEN EINHEITEN § 6 WEG 2002', '0', '0', '6', '5', NULL, '2025-10-19 08:13:53'), + ('12', '13', '0', 'Tabelle § 6', '1', '3', '0', '5', NULL, '2025-10-19 08:13:53'), + ('13', '14', '2.3', '§ 6 Teil 2', '0', '0', '7', '5', NULL, '2025-10-19 08:13:53'), + ('14', '15', '0', 'ALLGEMEINFLÄCHEN', '0', '4', '0', '0', NULL, '2025-10-19 08:13:53'), + ('15', '16', '3', 'GUTACHTEN', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('16', '17', '3.1', 'ALLGEMEINE GRUNDSÄTZE', '0', '0', '8', '0', NULL, '2025-10-19 08:13:53'), + ('17', '18', '3.2', 'ERMITTLUNG DER NUTZWERTE – ZUBEHÖRBEWERTUNG', '0', '0', '9', '0', NULL, '2025-10-19 08:13:53'), + ('18', '19', '0', 'ZUBEHÖR', '0', '0', '10', '0', NULL, '2025-10-19 08:13:53'), + ('19', '20', '3.21', 'TABELLE ZU + ABSCHLÄGE', '1', '5', '0', '0', NULL, '2025-10-19 08:13:53'), + ('20', '21', '3.3', 'NUTZWERTBERECHNUNG', '0', '6', '0', '0', NULL, '2025-10-19 08:13:53'), + ('21', '22', '3.4', 'ZUSAMMENSTELLUNG', '0', '7', '0', '0', NULL, '2025-10-19 08:13:53'), + ('22', '23', '3.41', 'DIGITALE SIGNATUR', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('23', '24', '3.5', 'ALLGEMEINFLÄCHEN', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('24', '25', '4', 'PARIFIZIERUNGSPLÄNE ', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('25', '26', '5', 'ANHANG', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('26', '27', '0', 'GRUNDBUCHAUSZUG ', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('27', '28', '0', 'BAUBESCHEID', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('28', '29', '0', 'HAUSTECHNISCHE BESCHREIBUNG', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'), + ('29', '30', '0', 'NUTZFLÄCHENERMITTLUNGEN', '0', '0', '0', '0', NULL, '2025-10-19 08:13:53'); "; DB::unprepared($sql); } diff --git a/database/seeders/TabellenSeeder.php b/database/seeders/TabellenSeeder.php new file mode 100644 index 0000000..21fd201 --- /dev/null +++ b/database/seeders/TabellenSeeder.php @@ -0,0 +1,27 @@ +
Ermittlung der Nutzwerte und Mindestanteile der Wohnungseigentumsobjekte der Liegenschaft EZ ###EINLAGEZAHL###, GB ###GRUNDBUCH###, zum Zwecke eines abweichenden Verteilungsschlüssels gemäß §16 Absatz 3 des WGG1979.
Dieses Gutachten ist nicht als Grundlage für die Begründung von Wohnungseigentum heranzuziehen.', NULL, NULL), - ('2', 'ORTSBESICHTIGUNG', '2', 'Am ###ORTSBESICHTIGUNG###', NULL, NULL), - ('3', 'UNTERLAGEN', '3', 'Grundbuchsauszug: EZ ###EINLAGEZAHL###
Baubescheid Zl.: ###BAUBESCHEID###
Planunterlagen: ###PLANUNTERLAGEN###
Auflistung Widmung Abstellplätze (als Anhang zum email vom XX.XX.XXXX, von nht)', NULL, NULL), - ('4', 'GRUNDBUCHSTAND', '4', '

Liegenschaftsadresse|###LIEGENSCHAFTSADRESSE###
Grundbuch|###GRUNDBUCH###
Einlagezahl|###EINLAGEZAHL###
Grundstücksnummer|###GSTNR###
Bezirksgericht|###BEZIRKSGERICHT###

', NULL, NULL), - ('5', 'BESCHREIBUNG DER LIEGENSCHAFT', '5', 'Auf der Liegenschaft EZ ###EINLAGEZAHL###, GB ###GRUNDBUCH### wurde durch den Baubescheid Zl. ###BAUBESCHEID### der Gemeinde ###BESCHEIDGEMEINDE### der Neubau einer Wohnanlage bewilligt. Der vorzitierte Baubewilligungsbescheid ist in Rechtskraft erwachsen.
________

Das gegenständliche "Haus 7" bildet den 4.Bauabschnitt der Wohnhausanlage "Südtiroler Siedlung" in Zams.

Aus städtebaulicher Sicht wird die typische, hauptsächlich aus Einzelhäusern bestehende Bebauungsstruktur des Ortsteils aufgenommen.
Die Wohngebäude sind als Vier- bzw. Fünfspänner mit eingeschobener Erschließungs- und Balkonstruktur konzipiert. Die Wohnbereiche sind in je zwei kompakten Kuben untergebracht.
Die an der Südwestseite eingeschobene und vorgelagerte Balkonstruktur besteht aus einer Metallrahmenkonstruktion mit eingelegten Bodenelementen aus Holz.

Die ersten drei  Baustufen beinhalten je zwei Baukörper mit zwölf bzw. fünfzehn Wohneinheiten. Die zugehörige Tiefgarage wird über eine einspurige Rampe im Norden erschlossen.

Die vierte Baustufe ("Haus 7") beinhaltet 15 Wohneinheiten und liegt im Südwesten der Gesamtanlage,  wobei sich auch die Fahrradräume, Müllraum, Spielplatz und unterirdische Stellplätze im Bereich der ersten drei Baustufen befinden.

Freiparkplätze befinden sich nordwestlich des Haus 7 und bilden einen Teil der Allgemeinfläche.', NULL, NULL), - ('6', '§ 6 Teil 1', '6', '

Es wird bestätigt, dass die Wohnanlage (Gst-Nr. ###GSTNR### In EZ ###EINLAGEZAHL###) folgende Einheiten umfasst, an welchen Wohnungseigentum begründet wird:
Grundlage ist die Einreichplanung mit dem Baubescheid Zl. ###BAUBESCHEID### sowie die Werkplanung.

XX Wohnungen (mit vorangestelltem "W") samt Zubehör.
XX Kfz-Stellplätze in der Tiefgarage (mit vorangestelltem "P")

Weitere XX Stellplätze in der Tiefgarage sowie XX freie Stellplätze verbleiben laut Widmung zur allgemeinen Benützung.

', NULL, NULL), - ('7', '§ 6 Teil 2', '7', 'Weiters wird bescheinigt, dass sich auf der Liegenschaft keine Wohnungen befinden, an denen nicht Wohnungseigentum begründet werden kann.
Die im folgenden aufgelisteten Teile der Liegenschaft dienen der allgemeinen Benützung oder haben eine Zweckbestimmung, die einer ausschließlichen Benützung entgegensteht.
Die Widmung als allgemein nutzbare Fläche erfolgte durch den Auftraggeber/Eigentümer.', NULL, NULL), - ('8', 'ALLGEMEINE GRUNDSÄTZE', '8', '

Wohnungseigentum ist das dem Miteigentümer einer Liegenschaft oder einer Eigentümerpartnerschaft eingeräumte dingliche Recht, ein Wohnungseigentumsobjekt ausschließlich zu nutzen und allein darüber zu verfügen. (Auszug §2 (1))

Wohnungseigentumsobjekte sind Wohnungen, sonstige selbständige Räumlichkeiten und Abstellplätze für Kraftfahrzeuge (wohnungseigentumstaugliche Objekte), an denen Wohnungseigentum begründet wurde. (Auszug §2 (2))

Eine Wohnung ist ein baulich abgeschlossener, nach der Verkehrsauffassung selbständiger Teil eines Gebäudes, der nach seiner Art und Größe geeignet ist, der Befriedigung eines individuellen Wohnbedürfnisses von Menschen zu dienen. Eine sonstige selbständige Räumlichkeit ist ein baulich abgeschlossener, nach der Verkehrsauffassung selbständiger Teil eines Gebäudes, dem nach seiner Art und Größe eine erhebliche wirtschaftliche Bedeutung zukommt, ein Abstellplatz für ein Kraftfahrzeug ist eine - etwa durch Bodenmarkierung - deutlich abgegrenzte Bodenfläche, die ausschließlich zum Abstellen eines Kraftfahrzeugs gewidmet und dazu nach ihrer Größe, Lage und Beschaffenheit geeignet ist. (Auszug §2 (2))

Zubehör-Wohnungseigentum ist das mit dem Wohnungseigentum verbundene Recht, andere, mit dem Wohnungseigentumsobjekt baulich nicht verbundene Teile der Liegenschaft, wie etwa Keller- oder Dachbodenräume, Hausgärten oder Lagerplätze, ausschließlich zu nutzen. (Auszug §2 (3))

Allgemeine Teile der Liegenschaft sind solche, die der allgemeinen Benützung dienen oder deren Zweckbestimmung einer ausschließlichen Benützung entgegensteht. (Auszug §2 (4))

Der Nutzwert ist die Maßzahl, mit der der Wert eines Wohnungseigentumsobjekts im Verhältnis zu den Werten der anderen Wohnungseigentumsobjekte der Liegenschaft bezeichnet wird. Er ergibt sich aus der Nutzfläche des Objekts und aus Zuschlägen oder Abstrichen für werterhöhende oder wertvermindernde Eigenschaften desselben. (Auszug §2 (8))

Der Mindestanteil ist jener Miteigentumsanteil an der Liegenschaft, der zum Erwerb von Wohnungseigentum an einem Wohnungseigentumsobjekt erforderlich ist. Er entspricht dem Verhältnis des Nutzwerts des Objekts zur Summe der Nutzwerte aller Wohnungseigentumsobjekte der Liegenschaft. (Auszug §2 (9))

Der Nutzwert ist in einer ganzen Zahl auszudrücken, wobei Teilbeträge unter 0,5 abgerundet und ab 0,5 aufgerundet werden. Er ist aus der Nutzfläche und aus Zuschlägen oder Abstrichen für Umstände zu berechnen, die nach der Verkehrsauffassung den Wert des Wohnungseigentumsobjekts erhöhen oder vermindern, wie etwa dessen Zweckbestimmung, Stockwerkslage, Lage innerhalb eines Stockwerks oder dessen Ausstattung mit offenen Balkonen, Terrassen und Zubehörobjekten (Auszug §8 (1))

Zuschläge für die Ausstattung mit Zubehörobjekten sowie mit offenen Balkonen und Terrassen sind in einer ganzen Zahl auszudrücken; der Zuschlag ist jedoch mindestens mit der Zahl Eins anzusetzen. (Auszug §8 (2))

Die Wohnungsobjekte erhalten den Buchstaben "W" der Nummer vorangestellt. Die Kfz-Stellplätze erhalten den Buchstaben "P" der Nummer vorangestellt.
Bei den Zubehörobjekten sind die Keller mit einem vorangestellten "K" gekennzeichnet, die Gärten mit einem "G".

', NULL, NULL), - ('9', 'ERMITTLUNG DER NUTZWERTE - ZUBEHÖRBEWERTUNG', '9', '

Es wird vorgeschlagen, die Nutzwerte wie folgt zu bestimmen:

Die Wohnung W07 ist eine Dreizimmerwohnung, liegt im ersten Obergeschoß und ihre Haupträume sind nach Westen orientiert. Diese Wohnung erhält den Regelnutzwert von 1,00.

Folgende Kriterien werden für die Nutzwertberechnung berücksichtigt:

Erdgeschoßlage:

Die Lage im Erdgeschoß führt zu einer Beeinträchtigung durch Einsehbarkeit von den direkt angrenzenden Allgemeinflächen (Zugänge, Wege). Weiters erfolgen Beeinträchtigungen durch den Geländeverlauf, wenn im Nahbereich der Einheit eine nach oben führenden Böschung die Aussicht beeinträchtigt und auch durch das auf dem Bauplatz befindliche Zweitgebäude.

Die Einheit W01 wird durch den direkt im Osten vorbeiführenden Zugangsbereich beeinträchtigt und um -2,5% abgewertet.

Die Einheit W02 wird durch die südlich bzw. südöstlich liegende Böschung sowie durch den Fußweg beeinträchtigt und um -5,0% abgewertet.

Die Einheit W03 orientiert sich mit dem Hauptraum direkt auf das nebenan errichtete Haus B, was an dieser Stelle drei oberirdische Geschoße aufweist. Diese Einheit wird daher um -5,0% abgewertet.

Die Wohnung W11 wird durch den direkt im Osten vorbeiführenden Zugangsbereich beeinträchtigt und um -2,5% abgewertet.

Die Wohneinheit W12 wird durch die südliche Böschung und im Osten durch den Zugangsweg beeinträchtigt und somit um -5,0% abgewertet.

Die Einheit W13 wird durch die im Süden und Westen angelegte Böschung beeinträchtigt und daher um -5,0% abgewertet.

Lage im letzten Geschoß:

Die Wohnungen im letzten Geschoß (Durch den Geländeverlauf betrifft das beim Haus A das 2. Obergeschoß und beim Haus B das 3.) werden aufgrund der günstigeren Aussichts- und Besonnungsmöglichkeit um 2,5% aufgewertet.

Außer die Wohnung W20: Hier ist durch die gute dreiseitige Orientierung nach Süden, Osten und Westen ein Zuschlag von insgesamt 5,0% gerechtfertigt.

KFZ-Abstellplätze:
Die Stellplätze in der Tiefgarage werden mit 55% des Regelnutzwertes bewertet.
Jene in der Tiefgarage, welche eine Übergröße aufweisen mit 50%.

Die Balkon- und Terrassenflächen werden mit 25% des Regelnutzwertes in Ansatz gebracht.

Hinweis: Einige Wohnungen werden insgesamt um 2,5% auf- bzw. abgewertet. Unter dem Punkt 3.30 Nutzwertberechnung wird dies für die einzelnen Wohnungen nachvollziehbar dargestellt. Hier wird der Faktor auf zwei Stellen gerundet angeschrieben, jedoch richtigerweise mit 97,5% bzw. 102,5% berechnet.

Bemerkung: Nach Rücksprache mit dem Auftraggeber (Freigabe am 29.09.2014) wurden folgende Flächen wie im aktuellen Außenanlagenplan (Eingang 25.09.2014, vom Architekten) dargestellt in Ansatz gebracht:
Die Terrasse W02 wurde nach Westen hin verschoben. Der Garten G02 wurde aufgrund des Fußweges verändert. Die Gärten der Wohnungen W12 und W13 werden in ihrem Flächenausmaß so wie in den Verkaufsunterlagen dargestellt in Ansatz gebracht.

', NULL, NULL), - ('10', 'ZUBEHÖR', '10', '

Die Gartenflächen werden mit 5% ihres Flächenausmaßes in Ansatz gebracht.

Die Kellerabteile (Lattenverschlag) werden mit 15% ihrer Fläche berechnet.

', NULL, NULL), - ('11', 'DECKBLATT', '11', '

P ###GUTACHTEN_P_NR### WEG 2002
EZ ###EINLAGEZAHL### des GB ###GRUNDBUCH###

.', NULL, NULL); + ('1', 'ZWECK UND GEGENSTAND DES GUTACHTENS', 'Ermittlung der Nutzwerte und Mindestanteile der Wohnungseigentumsobjekte der Liegenschaft EZ ###EINLAGEZAHL###, GB ###GRUNDBUCH###, zum Zwecke der Begründung von Wohnungseigentum im Sinne des Wohnungseigentumsgesetzes 2002 in der geltenden Fassung.

Ermittlung der Nutzwerte und Mindestanteile der Wohnungseigentumsobjekte der Liegenschaft EZ ###EINLAGEZAHL###, GB ###GRUNDBUCH###, zum Zwecke eines abweichenden Verteilungsschlüssels gemäß §16 Absatz 3 des WGG1979.
Dieses Gutachten ist nicht als Grundlage für die Begründung von Wohnungseigentum heranzuziehen.', NULL, NULL), + ('2', 'ORTSBESICHTIGUNG', 'Am ###ORTSBESICHTIGUNG###', NULL, NULL), + ('3', 'UNTERLAGEN', 'Grundbuchsauszug: EZ ###EINLAGEZAHL###
Baubescheid Zl.: ###BAUBESCHEID###
Planunterlagen: ###PLANUNTERLAGEN###
Auflistung Widmung Abstellplätze (als Anhang zum email vom XX.XX.XXXX, von nht)', NULL, NULL), + ('4', 'GRUNDBUCHSTAND', '

Liegenschaftsadresse|###LIEGENSCHAFTSADRESSE###
Grundbuch|###GRUNDBUCH###
Einlagezahl|###EINLAGEZAHL###
Grundstücksnummer|###GSTNR###
Bezirksgericht|###BEZIRKSGERICHT###

', NULL, NULL), + ('5', 'BESCHREIBUNG DER LIEGENSCHAFT', 'Auf der Liegenschaft EZ ###EINLAGEZAHL###, GB ###GRUNDBUCH### wurde durch den Baubescheid Zl. ###BAUBESCHEID### der Gemeinde ###BESCHEIDGEMEINDE### der Neubau einer Wohnanlage bewilligt. Der vorzitierte Baubewilligungsbescheid ist in Rechtskraft erwachsen.
________

Das gegenständliche "Haus 7" bildet den 4.Bauabschnitt der Wohnhausanlage "Südtiroler Siedlung" in Zams.

Aus städtebaulicher Sicht wird die typische, hauptsächlich aus Einzelhäusern bestehende Bebauungsstruktur des Ortsteils aufgenommen.
Die Wohngebäude sind als Vier- bzw. Fünfspänner mit eingeschobener Erschließungs- und Balkonstruktur konzipiert. Die Wohnbereiche sind in je zwei kompakten Kuben untergebracht.
Die an der Südwestseite eingeschobene und vorgelagerte Balkonstruktur besteht aus einer Metallrahmenkonstruktion mit eingelegten Bodenelementen aus Holz.

Die ersten drei  Baustufen beinhalten je zwei Baukörper mit zwölf bzw. fünfzehn Wohneinheiten. Die zugehörige Tiefgarage wird über eine einspurige Rampe im Norden erschlossen.

Die vierte Baustufe ("Haus 7") beinhaltet 15 Wohneinheiten und liegt im Südwesten der Gesamtanlage,  wobei sich auch die Fahrradräume, Müllraum, Spielplatz und unterirdische Stellplätze im Bereich der ersten drei Baustufen befinden.

Freiparkplätze befinden sich nordwestlich des Haus 7 und bilden einen Teil der Allgemeinfläche.', NULL, NULL), + ('6', '§ 6 Teil 1', '

Es wird bestätigt, dass die Wohnanlage (Gst-Nr. ###GSTNR### In EZ ###EINLAGEZAHL###) folgende Einheiten umfasst, an welchen Wohnungseigentum begründet wird:
Grundlage ist die Einreichplanung mit dem Baubescheid Zl. ###BAUBESCHEID### sowie die Werkplanung.

XX Wohnungen (mit vorangestelltem "W") samt Zubehör.
XX Kfz-Stellplätze in der Tiefgarage (mit vorangestelltem "P")

Weitere XX Stellplätze in der Tiefgarage sowie XX freie Stellplätze verbleiben laut Widmung zur allgemeinen Benützung.

', NULL, NULL), + ('7', '§ 6 Teil 2', 'Weiters wird bescheinigt, dass sich auf der Liegenschaft keine Wohnungen befinden, an denen nicht Wohnungseigentum begründet werden kann.
Die im folgenden aufgelisteten Teile der Liegenschaft dienen der allgemeinen Benützung oder haben eine Zweckbestimmung, die einer ausschließlichen Benützung entgegensteht.
Die Widmung als allgemein nutzbare Fläche erfolgte durch den Auftraggeber/Eigentümer.', NULL, NULL), + ('8', 'ALLGEMEINE GRUNDSÄTZE', '

Wohnungseigentum ist das dem Miteigentümer einer Liegenschaft oder einer Eigentümerpartnerschaft eingeräumte dingliche Recht, ein Wohnungseigentumsobjekt ausschließlich zu nutzen und allein darüber zu verfügen. (Auszug §2 (1))

Wohnungseigentumsobjekte sind Wohnungen, sonstige selbständige Räumlichkeiten und Abstellplätze für Kraftfahrzeuge (wohnungseigentumstaugliche Objekte), an denen Wohnungseigentum begründet wurde. (Auszug §2 (2))

Eine Wohnung ist ein baulich abgeschlossener, nach der Verkehrsauffassung selbständiger Teil eines Gebäudes, der nach seiner Art und Größe geeignet ist, der Befriedigung eines individuellen Wohnbedürfnisses von Menschen zu dienen. Eine sonstige selbständige Räumlichkeit ist ein baulich abgeschlossener, nach der Verkehrsauffassung selbständiger Teil eines Gebäudes, dem nach seiner Art und Größe eine erhebliche wirtschaftliche Bedeutung zukommt, ein Abstellplatz für ein Kraftfahrzeug ist eine - etwa durch Bodenmarkierung - deutlich abgegrenzte Bodenfläche, die ausschließlich zum Abstellen eines Kraftfahrzeugs gewidmet und dazu nach ihrer Größe, Lage und Beschaffenheit geeignet ist. (Auszug §2 (2))

Zubehör-Wohnungseigentum ist das mit dem Wohnungseigentum verbundene Recht, andere, mit dem Wohnungseigentumsobjekt baulich nicht verbundene Teile der Liegenschaft, wie etwa Keller- oder Dachbodenräume, Hausgärten oder Lagerplätze, ausschließlich zu nutzen. (Auszug §2 (3))

Allgemeine Teile der Liegenschaft sind solche, die der allgemeinen Benützung dienen oder deren Zweckbestimmung einer ausschließlichen Benützung entgegensteht. (Auszug §2 (4))

Der Nutzwert ist die Maßzahl, mit der der Wert eines Wohnungseigentumsobjekts im Verhältnis zu den Werten der anderen Wohnungseigentumsobjekte der Liegenschaft bezeichnet wird. Er ergibt sich aus der Nutzfläche des Objekts und aus Zuschlägen oder Abstrichen für werterhöhende oder wertvermindernde Eigenschaften desselben. (Auszug §2 (8))

Der Mindestanteil ist jener Miteigentumsanteil an der Liegenschaft, der zum Erwerb von Wohnungseigentum an einem Wohnungseigentumsobjekt erforderlich ist. Er entspricht dem Verhältnis des Nutzwerts des Objekts zur Summe der Nutzwerte aller Wohnungseigentumsobjekte der Liegenschaft. (Auszug §2 (9))

Der Nutzwert ist in einer ganzen Zahl auszudrücken, wobei Teilbeträge unter 0,5 abgerundet und ab 0,5 aufgerundet werden. Er ist aus der Nutzfläche und aus Zuschlägen oder Abstrichen für Umstände zu berechnen, die nach der Verkehrsauffassung den Wert des Wohnungseigentumsobjekts erhöhen oder vermindern, wie etwa dessen Zweckbestimmung, Stockwerkslage, Lage innerhalb eines Stockwerks oder dessen Ausstattung mit offenen Balkonen, Terrassen und Zubehörobjekten (Auszug §8 (1))

Zuschläge für die Ausstattung mit Zubehörobjekten sowie mit offenen Balkonen und Terrassen sind in einer ganzen Zahl auszudrücken; der Zuschlag ist jedoch mindestens mit der Zahl Eins anzusetzen. (Auszug §8 (2))

Die Wohnungsobjekte erhalten den Buchstaben "W" der Nummer vorangestellt. Die Kfz-Stellplätze erhalten den Buchstaben "P" der Nummer vorangestellt.
Bei den Zubehörobjekten sind die Keller mit einem vorangestellten "K" gekennzeichnet, die Gärten mit einem "G".

', NULL, NULL), + ('9', 'ERMITTLUNG DER NUTZWERTE - ZUBEHÖRBEWERTUNG', '

Es wird vorgeschlagen, die Nutzwerte wie folgt zu bestimmen:

Die Wohnung W07 ist eine Dreizimmerwohnung, liegt im ersten Obergeschoß und ihre Haupträume sind nach Westen orientiert. Diese Wohnung erhält den Regelnutzwert von 1,00.

Folgende Kriterien werden für die Nutzwertberechnung berücksichtigt:

Erdgeschoßlage:

Die Lage im Erdgeschoß führt zu einer Beeinträchtigung durch Einsehbarkeit von den direkt angrenzenden Allgemeinflächen (Zugänge, Wege). Weiters erfolgen Beeinträchtigungen durch den Geländeverlauf, wenn im Nahbereich der Einheit eine nach oben führenden Böschung die Aussicht beeinträchtigt und auch durch das auf dem Bauplatz befindliche Zweitgebäude.

Die Einheit W01 wird durch den direkt im Osten vorbeiführenden Zugangsbereich beeinträchtigt und um -2,5% abgewertet.

Die Einheit W02 wird durch die südlich bzw. südöstlich liegende Böschung sowie durch den Fußweg beeinträchtigt und um -5,0% abgewertet.

Die Einheit W03 orientiert sich mit dem Hauptraum direkt auf das nebenan errichtete Haus B, was an dieser Stelle drei oberirdische Geschoße aufweist. Diese Einheit wird daher um -5,0% abgewertet.

Die Wohnung W11 wird durch den direkt im Osten vorbeiführenden Zugangsbereich beeinträchtigt und um -2,5% abgewertet.

Die Wohneinheit W12 wird durch die südliche Böschung und im Osten durch den Zugangsweg beeinträchtigt und somit um -5,0% abgewertet.

Die Einheit W13 wird durch die im Süden und Westen angelegte Böschung beeinträchtigt und daher um -5,0% abgewertet.

Lage im letzten Geschoß:

Die Wohnungen im letzten Geschoß (Durch den Geländeverlauf betrifft das beim Haus A das 2. Obergeschoß und beim Haus B das 3.) werden aufgrund der günstigeren Aussichts- und Besonnungsmöglichkeit um 2,5% aufgewertet.

Außer die Wohnung W20: Hier ist durch die gute dreiseitige Orientierung nach Süden, Osten und Westen ein Zuschlag von insgesamt 5,0% gerechtfertigt.

KFZ-Abstellplätze:
Die Stellplätze in der Tiefgarage werden mit 55% des Regelnutzwertes bewertet.
Jene in der Tiefgarage, welche eine Übergröße aufweisen mit 50%.

Die Balkon- und Terrassenflächen werden mit 25% des Regelnutzwertes in Ansatz gebracht.

Hinweis: Einige Wohnungen werden insgesamt um 2,5% auf- bzw. abgewertet. Unter dem Punkt 3.30 Nutzwertberechnung wird dies für die einzelnen Wohnungen nachvollziehbar dargestellt. Hier wird der Faktor auf zwei Stellen gerundet angeschrieben, jedoch richtigerweise mit 97,5% bzw. 102,5% berechnet.

Bemerkung: Nach Rücksprache mit dem Auftraggeber (Freigabe am 29.09.2014) wurden folgende Flächen wie im aktuellen Außenanlagenplan (Eingang 25.09.2014, vom Architekten) dargestellt in Ansatz gebracht:
Die Terrasse W02 wurde nach Westen hin verschoben. Der Garten G02 wurde aufgrund des Fußweges verändert. Die Gärten der Wohnungen W12 und W13 werden in ihrem Flächenausmaß so wie in den Verkaufsunterlagen dargestellt in Ansatz gebracht.

', NULL, NULL), + ('10', 'ZUBEHÖR', '

Die Gartenflächen werden mit 5% ihres Flächenausmaßes in Ansatz gebracht.

Die Kellerabteile (Lattenverschlag) werden mit 15% ihrer Fläche berechnet.

', NULL, NULL), + ('11', 'DECKBLATT', '

P ###GUTACHTEN_P_NR### WEG 2002
EZ ###EINLAGEZAHL### des GB ###GRUNDBUCH###

.', NULL, NULL), + ('12', 'EIGENER TEXTBLOCK', 'EIGENER TEXTBLOCK', NULL, NULL); "; DB::unprepared($sql); } diff --git a/resources/svg/siegel.svg b/resources/svg/siegel.svg new file mode 100644 index 0000000..ca23c95 --- /dev/null +++ b/resources/svg/siegel.svg @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/storage/hvf-logos/avf-stempel.png b/storage/hvf-logos/avf-stempel.png new file mode 100644 index 0000000..4409fe3 Binary files /dev/null and b/storage/hvf-logos/avf-stempel.png differ