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###
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.
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".
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.
Die Gartenflächen werden mit 5% ihres Flächenausmaßes in Ansatz gebracht.
Die Kellerabteile (Lattenverschlag) werden mit 15% ihrer Fläche berechnet.
P ###GUTACHTEN_P_NR### WEG 2002
EZ ###EINLAGEZAHL### des GB ###GRUNDBUCH###
Liegenschaftsadresse|###LIEGENSCHAFTSADRESSE###
Grundbuch|###GRUNDBUCH###
Einlagezahl|###EINLAGEZAHL###
Grundstücksnummer|###GSTNR###
Bezirksgericht|###BEZIRKSGERICHT###
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.
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".
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.
Die Gartenflächen werden mit 5% ihres Flächenausmaßes in Ansatz gebracht.
Die Kellerabteile (Lattenverschlag) werden mit 15% ihrer Fläche berechnet.
P ###GUTACHTEN_P_NR### WEG 2002
EZ ###EINLAGEZAHL### des GB ###GRUNDBUCH###