Räume Alle wip
This commit is contained in:
1 parent
63e4fdfee6
commit
b6871df3bf
21 files changed
+501
-231
No files matched your search
+5
-5
@@ -12,16 +12,13 @@ a make:factory GutachterFactory
|
||||
|
||||
https://fakerphp.org/
|
||||
|
||||
Thomas Schranz
|
||||
Adamgasse 9a
|
||||
2.Stock
|
||||
|
||||
a make:mode ProjekteImport -ms
|
||||
|
||||
a make:filament-resource ProjekteImport --nested
|
||||
a make:filament-relation-manager ProjekteResource ProjekteImports name
|
||||
|
||||
a make:filament-relation-manager AllgemeinflaechenResource allgemeinflaechens geschoss
|
||||
a make:filament-relation-manager RaeumealleResource Raeumealles geschoss
|
||||
|
||||
|
||||
a make:model Allgemeinflaechen -ms
|
||||
@@ -30,6 +27,9 @@ a make:model Raeumealle -ms
|
||||
|
||||
A make:filament-resource Allgemeinflaechen --nested
|
||||
|
||||
php artisan make:filament-relation-manager Raeumealle lessons title
|
||||
|
||||
php artisan make:filament-relation-manager CourseResource lessons title
|
||||
|
||||
for import in prod run
|
||||
a queue:listen
|
||||
in supervisord
|
||||
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Imports;
|
||||
|
||||
use App\Models\Allgemeinflaechen;
|
||||
use Filament\Actions\Imports\ImportColumn;
|
||||
use Filament\Actions\Imports\Importer;
|
||||
use Filament\Actions\Imports\Models\Import;
|
||||
use Illuminate\Support\Number;
|
||||
|
||||
class AllgemeinflaechenImporter extends Importer
|
||||
{
|
||||
protected static ?string $model = Allgemeinflaechen::class;
|
||||
|
||||
public function resolveRecord(): Allgemeinflaechen
|
||||
{
|
||||
$allgemeinflaechen = new Allgemeinflaechen;
|
||||
$allgemeinflaechen->projekte_id = $this->options['projekte_id'];
|
||||
|
||||
return $allgemeinflaechen;
|
||||
}
|
||||
|
||||
public static function getColumns(): array
|
||||
{
|
||||
return [
|
||||
ImportColumn::make('geschoss')
|
||||
->validationAttribute('Geschoss')
|
||||
->requiredMapping()
|
||||
->example('EG')
|
||||
->rules(['required', 'max:255'])
|
||||
->castStateUsing(function (string $state) {
|
||||
$state = trim($state);
|
||||
|
||||
return iconv(mb_detect_encoding($state, mb_detect_order(), true), 'UTF-8', $state);
|
||||
}),
|
||||
ImportColumn::make('raumart')
|
||||
->validationAttribute('Raumart')
|
||||
->requiredMapping()
|
||||
->example('Stiegenhaus')
|
||||
->rules(['required', 'max:32'])
|
||||
->castStateUsing(function (string $state) {
|
||||
$state = trim($state);
|
||||
|
||||
return iconv(mb_detect_encoding($state, mb_detect_order(), true), 'UTF-8', $state);
|
||||
}),
|
||||
ImportColumn::make('flaeche')
|
||||
->validationAttribute('Fläche')
|
||||
->rules(['required'])
|
||||
->example('52,75')
|
||||
->castStateUsing(function (string $state): ?float {
|
||||
if (blank($state)) {
|
||||
return '0.00';
|
||||
}
|
||||
|
||||
$state = str_replace(',', '.', $state);
|
||||
$state = preg_replace('/[^0-9.]/', '', $state);
|
||||
|
||||
return round($state, precision: 2);
|
||||
}),
|
||||
];
|
||||
}
|
||||
|
||||
public static function getCompletedNotificationBody(Import $import): string
|
||||
{
|
||||
$body = ' Der Import der Allgemeinflächen ist abgeschlossen. Es wurden '.Number::format($import->successful_rows).' '.str('row')->plural($import->successful_rows).' importiert.';
|
||||
|
||||
if ($failedRowsCount = $import->getFailedRowsCount()) {
|
||||
$body .= ' Bei '.Number::format($failedRowsCount).' '.str('row')->plural($failedRowsCount).' ist der Import fehlgeschlagen.';
|
||||
}
|
||||
|
||||
return $body;
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ use App\Filament\Resources\Projektes\Pages\CreateProjekte;
|
||||
use App\Filament\Resources\Projektes\Pages\EditProjekte;
|
||||
use App\Filament\Resources\Projektes\Pages\ListProjektes;
|
||||
use App\Filament\Resources\Projektes\RelationManagers\AllgemeinflaechensRelationManager;
|
||||
use App\Filament\Resources\Projektes\RelationManagers\RaeumeallesRelationManager;
|
||||
use App\Filament\Resources\Projektes\Schemas\ProjekteForm;
|
||||
use App\Filament\Resources\Projektes\Tables\ProjektesTable;
|
||||
use App\Models\Projekte;
|
||||
@@ -47,6 +48,7 @@ class ProjekteResource extends Resource
|
||||
{
|
||||
return [
|
||||
AllgemeinflaechensRelationManager::class,
|
||||
RaeumeallesRelationManager::class,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
+25
-9
@@ -2,24 +2,26 @@
|
||||
|
||||
namespace App\Filament\Resources\Projektes\RelationManagers;
|
||||
|
||||
use Filament\Actions\AssociateAction;
|
||||
use App\Filament\Imports\AllgemeinflaechenImporter;
|
||||
use Filament\Actions\BulkActionGroup;
|
||||
use Filament\Actions\CreateAction;
|
||||
use Filament\Actions\DeleteAction;
|
||||
use Filament\Actions\DeleteBulkAction;
|
||||
use Filament\Actions\DissociateAction;
|
||||
use Filament\Actions\DissociateBulkAction;
|
||||
use Filament\Actions\EditAction;
|
||||
use Filament\Actions\ImportAction;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Resources\RelationManagers\RelationManager;
|
||||
use Filament\Schemas\Schema;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Table;
|
||||
use Illuminate\Validation\Rules\File;
|
||||
|
||||
class AllgemeinflaechensRelationManager extends RelationManager
|
||||
{
|
||||
protected static string $relationship = 'allgemeinflaechens';
|
||||
|
||||
protected static ?string $title = 'Allgemeinflächen';
|
||||
|
||||
public function form(Schema $schema): Schema
|
||||
{
|
||||
return $schema
|
||||
@@ -35,7 +37,13 @@ class AllgemeinflaechensRelationManager extends RelationManager
|
||||
return $table
|
||||
->recordTitleAttribute('geschoss')
|
||||
->columns([
|
||||
TextColumn::make('geschoss')
|
||||
TextColumn::make('geschoss')->searchable(),
|
||||
TextColumn::make('raumart')->searchable(),
|
||||
TextColumn::make('flaeche')
|
||||
->alignment('right')
|
||||
->formatStateUsing(fn ($state) => "{$state} m²")
|
||||
->label('Fläche')
|
||||
// ->numeric(decimalPlaces: 2)
|
||||
->searchable(),
|
||||
])
|
||||
->filters([
|
||||
@@ -43,16 +51,24 @@ class AllgemeinflaechensRelationManager extends RelationManager
|
||||
])
|
||||
->headerActions([
|
||||
CreateAction::make(),
|
||||
AssociateAction::make(),
|
||||
ImportAction::make()
|
||||
->importer(AllgemeinflaechenImporter::class)
|
||||
->label('Hochladen')
|
||||
->icon('phosphor-upload')
|
||||
->color('info')
|
||||
->options([
|
||||
'projekte_id' => $this->getOwnerRecord()->id,
|
||||
])
|
||||
->fileRules([
|
||||
File::types(['csv', 'txt'])->max(1024),
|
||||
]),
|
||||
])
|
||||
->recordActions([
|
||||
EditAction::make(),
|
||||
DissociateAction::make(),
|
||||
DeleteAction::make(),
|
||||
EditAction::make()->iconButton()->color('gray'),
|
||||
DeleteAction::make()->iconButton(),
|
||||
])
|
||||
->toolbarActions([
|
||||
BulkActionGroup::make([
|
||||
DissociateBulkAction::make(),
|
||||
DeleteBulkAction::make(),
|
||||
]),
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace App\Filament\Resources\Projektes\RelationManagers;
|
||||
|
||||
use Filament\Actions\BulkActionGroup;
|
||||
use Filament\Actions\CreateAction;
|
||||
use Filament\Actions\DeleteAction;
|
||||
use Filament\Actions\DeleteBulkAction;
|
||||
use Filament\Actions\EditAction;
|
||||
use Filament\Forms\Components\TextInput;
|
||||
use Filament\Resources\RelationManagers\RelationManager;
|
||||
use Filament\Schemas\Schema;
|
||||
use Filament\Tables\Columns\TextColumn;
|
||||
use Filament\Tables\Table;
|
||||
|
||||
class RaeumeallesRelationManager extends RelationManager
|
||||
{
|
||||
protected static string $relationship = 'raeumealles';
|
||||
|
||||
protected static ?string $title = 'Räume Alle';
|
||||
|
||||
protected static ?string $navigationLabel = 'Räume';
|
||||
|
||||
protected static ?string $modelLabel = 'Raum';
|
||||
|
||||
protected static ?string $pluralModelLabel = 'Räume';
|
||||
|
||||
public function form(Schema $schema): Schema
|
||||
{
|
||||
return $schema
|
||||
->components([
|
||||
TextInput::make('geschoss')
|
||||
->required()
|
||||
->maxLength(255),
|
||||
]);
|
||||
}
|
||||
|
||||
public function table(Table $table): Table
|
||||
{
|
||||
return $table
|
||||
->recordTitleAttribute('geschoss')
|
||||
->columns([
|
||||
TextColumn::make('geschoss')
|
||||
->searchable(),
|
||||
])
|
||||
->filters([
|
||||
//
|
||||
])
|
||||
->headerActions([
|
||||
CreateAction::make(),
|
||||
])
|
||||
->recordActions([
|
||||
EditAction::make(),
|
||||
DeleteAction::make(),
|
||||
])
|
||||
->toolbarActions([
|
||||
BulkActionGroup::make([
|
||||
DeleteBulkAction::make(),
|
||||
]),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Model;
|
||||
class Allgemeinflaechen extends Model
|
||||
{
|
||||
protected $fillable = [
|
||||
'projekte_id',
|
||||
'geschoss',
|
||||
'raumart',
|
||||
'flaeche',
|
||||
|
||||
@@ -31,4 +31,9 @@ class Projekte extends Model
|
||||
{
|
||||
return $this->hasMany(Allgemeinflaechen::class);
|
||||
}
|
||||
|
||||
public function raeumealles()
|
||||
{
|
||||
return $this->hasMany(Raeumealle::class);
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,7 @@ class AdminPanelProvider extends PanelProvider
|
||||
->passwordReset()
|
||||
->emailVerification()
|
||||
->emailChangeVerification()
|
||||
->databaseNotifications()
|
||||
->profile(isSimple: false)
|
||||
->default()
|
||||
->registration(Register::class)
|
||||
|
||||
+1
@@ -29,6 +29,7 @@
|
||||
'app.filament.resources.projektes.pages.edit-projekte' => 'App\\Filament\\Resources\\Projektes\\Pages\\EditProjekte',
|
||||
'app.filament.resources.projektes.pages.list-projektes' => 'App\\Filament\\Resources\\Projektes\\Pages\\ListProjektes',
|
||||
'app.filament.resources.projektes.relation-managers.allgemeinflaechens-relation-manager' => 'App\\Filament\\Resources\\Projektes\\RelationManagers\\AllgemeinflaechensRelationManager',
|
||||
'app.filament.resources.projektes.relation-managers.raeumealles-relation-manager' => 'App\\Filament\\Resources\\Projektes\\RelationManagers\\RaeumeallesRelationManager',
|
||||
'app.filament.resources.textblocks.pages.create-textblock' => 'App\\Filament\\Resources\\Textblocks\\Pages\\CreateTextblock',
|
||||
'app.filament.resources.textblocks.pages.edit-textblock' => 'App\\Filament\\Resources\\Textblocks\\Pages\\EditTextblock',
|
||||
'app.filament.resources.textblocks.pages.list-textblocks' => 'App\\Filament\\Resources\\Textblocks\\Pages\\ListTextblocks',
|
||||
|
||||
Vendored
+21
-21
@@ -511,7 +511,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::HOWCkOTiX3xEetvh',
|
||||
'_route' => 'generated::fRgalZgdgLutYooA',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -531,7 +531,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::78HgTUSPeu1dgt2O',
|
||||
'_route' => 'generated::ehGEtdVA59MvLnTN',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -589,7 +589,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::yW0VncmgKb6iy7Da',
|
||||
'_route' => 'generated::t8jqNF3M4FSM7iYY',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -609,7 +609,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::jPsFyYpvjP2gCTdD',
|
||||
'_route' => 'generated::ofL3RQiGDD5QTkU1',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -629,7 +629,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::NnWxDqihf6rtT4sP',
|
||||
'_route' => 'generated::dp8f68KJns4OcFMw',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -649,7 +649,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::zRwWsHyW6pLwmIAb',
|
||||
'_route' => 'generated::PWm6NXGdwH5Nl0zY',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -669,7 +669,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
0 =>
|
||||
array (
|
||||
'_route' => 'generated::6xZk6tZY1pg2BE87',
|
||||
'_route' => 'generated::rdH5yu4CuBT2btx2',
|
||||
),
|
||||
1 => NULL,
|
||||
2 =>
|
||||
@@ -2595,7 +2595,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::HOWCkOTiX3xEetvh' =>
|
||||
'generated::fRgalZgdgLutYooA' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2607,7 +2607,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile',
|
||||
'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile',
|
||||
'as' => 'generated::HOWCkOTiX3xEetvh',
|
||||
'as' => 'generated::fRgalZgdgLutYooA',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
@@ -2623,7 +2623,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::78HgTUSPeu1dgt2O' =>
|
||||
'generated::ehGEtdVA59MvLnTN' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2635,7 +2635,7 @@ app('router')->setCompiledRoutes(
|
||||
array (
|
||||
'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps',
|
||||
'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps',
|
||||
'as' => 'generated::78HgTUSPeu1dgt2O',
|
||||
'as' => 'generated::ehGEtdVA59MvLnTN',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
@@ -2737,7 +2737,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::yW0VncmgKb6iy7Da' =>
|
||||
'generated::t8jqNF3M4FSM7iYY' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2766,7 +2766,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:"0000000000000f2c0000000000000000";}}',
|
||||
'as' => 'generated::yW0VncmgKb6iy7Da',
|
||||
'as' => 'generated::t8jqNF3M4FSM7iYY',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
@@ -2782,7 +2782,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::jPsFyYpvjP2gCTdD' =>
|
||||
'generated::ofL3RQiGDD5QTkU1' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2804,7 +2804,7 @@ app('router')->setCompiledRoutes(
|
||||
'where' =>
|
||||
array (
|
||||
),
|
||||
'as' => 'generated::jPsFyYpvjP2gCTdD',
|
||||
'as' => 'generated::ofL3RQiGDD5QTkU1',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
@@ -2820,7 +2820,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::NnWxDqihf6rtT4sP' =>
|
||||
'generated::dp8f68KJns4OcFMw' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2842,7 +2842,7 @@ app('router')->setCompiledRoutes(
|
||||
'where' =>
|
||||
array (
|
||||
),
|
||||
'as' => 'generated::NnWxDqihf6rtT4sP',
|
||||
'as' => 'generated::dp8f68KJns4OcFMw',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
@@ -2858,7 +2858,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::zRwWsHyW6pLwmIAb' =>
|
||||
'generated::PWm6NXGdwH5Nl0zY' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2880,7 +2880,7 @@ app('router')->setCompiledRoutes(
|
||||
'where' =>
|
||||
array (
|
||||
),
|
||||
'as' => 'generated::zRwWsHyW6pLwmIAb',
|
||||
'as' => 'generated::PWm6NXGdwH5Nl0zY',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
@@ -2896,7 +2896,7 @@ app('router')->setCompiledRoutes(
|
||||
'waitSeconds' => NULL,
|
||||
'withTrashed' => false,
|
||||
),
|
||||
'generated::6xZk6tZY1pg2BE87' =>
|
||||
'generated::rdH5yu4CuBT2btx2' =>
|
||||
array (
|
||||
'methods' =>
|
||||
array (
|
||||
@@ -2918,7 +2918,7 @@ app('router')->setCompiledRoutes(
|
||||
'where' =>
|
||||
array (
|
||||
),
|
||||
'as' => 'generated::6xZk6tZY1pg2BE87',
|
||||
'as' => 'generated::rdH5yu4CuBT2btx2',
|
||||
),
|
||||
'fallback' => false,
|
||||
'defaults' =>
|
||||
|
||||
@@ -13,7 +13,7 @@ return new class extends Migration
|
||||
{
|
||||
Schema::create('users', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('konto_id')->constrained()->cascadeOnDelete()->default(0);
|
||||
$table->foreignId('konto_id')->constrained()->cascadeOnDelete();
|
||||
$table->string('gender')->nullable();
|
||||
$table->string('name');
|
||||
$table->string('email')->unique();
|
||||
|
||||
@@ -13,10 +13,10 @@ return new class extends Migration
|
||||
{
|
||||
Schema::create('allgemeinflaechens', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('projekte_id')->constrained()->cascadeOnDelete()->default(0);
|
||||
$table->foreignId('projekte_id')->constrained()->cascadeOnDelete();
|
||||
$table->string('geschoss')->nullable();
|
||||
$table->string('raumart')->nullable();
|
||||
$table->string('flaeche')->nullable();
|
||||
$table->decimal('flaeche', 7, 2)->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ return new class extends Migration
|
||||
{
|
||||
Schema::create('raeumealles', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->foreignId('projekte_id')->constrained()->cascadeOnDelete()->default(0);
|
||||
$table->foreignId('projekte_id')->constrained()->cascadeOnDelete();
|
||||
$table->integer('methode_id')->default(0);
|
||||
$table->integer('orientierung_id')->default(0);
|
||||
$table->string('top_nummer')->nullable();
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('notifications', function (Blueprint $table) {
|
||||
$table->uuid('id')->primary();
|
||||
$table->string('type');
|
||||
$table->morphs('notifiable');
|
||||
$table->text('data');
|
||||
$table->timestamp('read_at')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('notifications');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('imports', function (Blueprint $table): void {
|
||||
$table->id();
|
||||
$table->timestamp('completed_at')->nullable();
|
||||
$table->string('file_name');
|
||||
$table->string('file_path');
|
||||
$table->string('importer');
|
||||
$table->unsignedInteger('processed_rows')->default(0);
|
||||
$table->unsignedInteger('total_rows');
|
||||
$table->unsignedInteger('successful_rows')->default(0);
|
||||
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('imports');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('exports', function (Blueprint $table): void {
|
||||
$table->id();
|
||||
$table->timestamp('completed_at')->nullable();
|
||||
$table->string('file_disk');
|
||||
$table->string('file_name')->nullable();
|
||||
$table->string('exporter');
|
||||
$table->unsignedInteger('processed_rows')->default(0);
|
||||
$table->unsignedInteger('total_rows');
|
||||
$table->unsignedInteger('successful_rows')->default(0);
|
||||
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('exports');
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('failed_import_rows', function (Blueprint $table): void {
|
||||
$table->id();
|
||||
$table->json('data');
|
||||
$table->foreignId('import_id')->constrained()->cascadeOnDelete();
|
||||
$table->text('validation_error')->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('failed_import_rows');
|
||||
}
|
||||
};
|
||||
@@ -21,7 +21,6 @@ class DatabaseSeeder extends Seeder
|
||||
PlansSeeder::class,
|
||||
TextblockSeeder::class,
|
||||
InhaltsverzeichnisSeeder::class,
|
||||
ProjekteSeeder::class,
|
||||
]);
|
||||
|
||||
if (app()->isLocal()) {
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class ProjekteSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$sql = "INSERT INTO `projektes` (`id`, `konto_id`, `auftraggeber_id`, `gutachter_id`, `interner_name`, `offizieller_name`, `beschreibung`, `erstellung`, `status`, `created_at`, `updated_at`, `deleted_at`)
|
||||
VALUES
|
||||
('1', '1', '4', '25', 'P309 nht GE04-07 08 EF_Version B', 'Gerlos Eigentumswohnungen - Häuser 3-6', '<p>dasD</p>', '2025-10-10', 'entwurf', '2025-10-03 15:58:28', '2025-10-03 15:58:28', NULL);
|
||||
";
|
||||
DB::unprepared($sql);
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,26 @@
|
||||
Allgemein | EG | Dachfläche | 52,75
|
||||
Allgemein | EG | Freifläche | 116,21
|
||||
Allgemein | EG | Freifläche/ Gründach | 207,52
|
||||
Allgemein | EG | Gang | 10,09
|
||||
Allgemein | EG | Gang | 25,62
|
||||
Allgemein | EG | Stiegenhaus | 26,20
|
||||
Allgemein | OG1 | Gang | 30,25
|
||||
Allgemein | OG1 | Gang | 30,66
|
||||
Allgemein | OG1 | Stiegenhaus | 30,19
|
||||
Allgemein | OG2 | Lüftungszentrale | 20,19
|
||||
Allgemein | UG | Einsp. KFZ | 6,83
|
||||
Allgemein | UG | Einspurige Fahrzeuge | 16,74
|
||||
Allgemein | UG | Erschließung | 78,68
|
||||
Allgemein | UG | ET-Raum | 6,47
|
||||
Allgemein | UG | Fahrradraum | 20,58
|
||||
Allgemein | UG | Garage | 180,16
|
||||
Allgemein | UG | Hausmeisterr. | 5,83
|
||||
Allgemein | UG | Heizraum/HT | 11,69
|
||||
Allgemein | UG | Müllraum | 13,75
|
||||
Allgemein | UG | Stellplatz 22 | 12,04
|
||||
Allgemein | UG | Stellplatz 24 | 15,00
|
||||
Allgemein | UG | Stellplatz 25 | 15,00
|
||||
Allgemein | UG | Stellplatz 11 H | 18,88
|
||||
Allgemein | UG | Stiegenhaus | 36,12
|
||||
Allgemein | UG | VR | 44,88
|
||||
Allgemein | UG | Wasch/Trochenr. | 16,42
|
||||
"EG","Dachfläche"," 52,75"
|
||||
"EG","Freifläche","116,21"
|
||||
"EG","Freifläche/ Gründach","207,52"
|
||||
"EG","Gang"," 10,09"
|
||||
"EG","Gang"," 25,62"
|
||||
"EG","Stiegenhaus "," 26,20"
|
||||
"OG1","Gang"," 30,25"
|
||||
"OG1","Gang"," 30,66"
|
||||
"OG1","Stiegenhaus "," 30,19"
|
||||
"OG2","Lüftungszentrale"," 20,19"
|
||||
"UG","Einsp. KFZ","6,83"
|
||||
"UG","Einspurige Fahrzeuge"," 16,74"
|
||||
"UG","Erschließung"," 78,68"
|
||||
"UG","ET-Raum ","6,47"
|
||||
"UG","Fahrradraum "," 20,58"
|
||||
"UG","Garage","180,16"
|
||||
"UG","Hausmeisterr. ","5,83"
|
||||
"UG","Heizraum/HT "," 11,69"
|
||||
"UG","Müllraum"," 13,75"
|
||||
"UG","Stellplatz22"," 12,04"
|
||||
"UG","Stellplatz24"," 15,00"
|
||||
"UG","Stellplatz25"," 15,00"
|
||||
"UG","Stellplatz 11 H "," 18,88"
|
||||
"UG","Stiegenhaus "," 36,12"
|
||||
"UG","VR"," 44,88"
|
||||
"UG","Wasch/Trochenr."," 16,42"
|
||||
+144
-144
@@ -1,144 +1,144 @@
|
||||
APG 01 | UG | Stellplatz+ | 14,25
|
||||
APG 02 | UG | Stellplatz | 12,94
|
||||
APG 03 | UG | Stellplatz | 13,38
|
||||
APG 04 | UG | Stellplatz | 12,94
|
||||
APG 05 | UG | Stellplatz | 12,50
|
||||
APG 06 | UG | Stellplatz | 12,94
|
||||
APG 07 | UG | Stellplatz+ | 14,81
|
||||
APG 08 | UG | Stellplatz+ | 14,81
|
||||
APG 09 | UG | Stellplatz | 12,94
|
||||
APG 10 | UG | Stellplatz | 12,94
|
||||
APG 11 | UG | Stellplatz | 12,94
|
||||
APG 12 | UG | Stellplatz+ | 14,24
|
||||
APG 13 | UG | Stellplatz+ | 13,91
|
||||
APG 14 | UG | Stellplatz+ | 14,78
|
||||
APG 15 | UG | Stellplatz | 13,02
|
||||
APG 16 | UG | Stellplatz | 13,02
|
||||
APG 17 | UG | Stellplatz | 13,02
|
||||
APG 18 | UG | Stellplatz | 12,59
|
||||
APG 19 | UG | Stellplatz+ | 14,59
|
||||
W01 | EG | Abstellraum | 3,85
|
||||
W01 | EG | Bad | 5,92
|
||||
W01 | EG | Gang | 7,97
|
||||
W01 | EG | Garten G01_1 | 147,72
|
||||
W01 | EG | Garten G01_2 | 7,72
|
||||
W01 | EG | Terrasse | 18,16
|
||||
W01 | EG | WC | 2,46
|
||||
W01 | EG | Wohnen | 25,00
|
||||
W01 | EG | Wohnküche | 33,94
|
||||
W01 | EG | Zimmer 1 | 13,40
|
||||
W01 | EG | Zimmer 2 | 10,66
|
||||
W01 | UG | KA01 | 5,01
|
||||
W02 | EG | Bad | 3,86
|
||||
W02 | EG | Bad | 5,54
|
||||
W02 | EG | Gang | 10,42
|
||||
W02 | EG | Garten G02 | 37,27
|
||||
W02 | EG | Terrasse | 16,25
|
||||
W02 | EG | WC | 2,13
|
||||
W02 | EG | Wohnküche | 27,43
|
||||
W02 | EG | Zimmer 1 | 10,82
|
||||
W02 | EG | Zimmer 2 | 11,69
|
||||
W02 | UG | KA02 | 5,01
|
||||
W03 | EG | Abstellraum | 3,22
|
||||
W03 | EG | Bad | 6,51
|
||||
W03 | EG | Gang | 11,73
|
||||
W03 | EG | Garten G03 | 232,99
|
||||
W03 | EG | Terrasse | 22,64
|
||||
W03 | EG | WC | 2,46
|
||||
W03 | EG | Wohnküche | 35,69
|
||||
W03 | EG | Zimmer 1 | 14,70
|
||||
W03 | EG | Zimmer 2 | 10,89
|
||||
W03 | EG | Zimmer 3 | 11,52
|
||||
W03 | UG | KA03 | 5,01
|
||||
W04 | OG1 | Abstellraum | 3,09
|
||||
W04 | OG1 | Bad | 5,92
|
||||
W04 | OG1 | Balkon | 21,98
|
||||
W04 | OG1 | Gang | 11,50
|
||||
W04 | OG1 | WC | 2,46
|
||||
W04 | OG1 | Wohnküche | 33,93
|
||||
W04 | OG1 | Zimmer 1 | 10,88
|
||||
W04 | OG1 | Zimmer 2 | 10,86
|
||||
W04 | OG1 | Zimmer 3 | 14,67
|
||||
W04 | UG | KA04 | 5,01
|
||||
W05 | OG1 | Bad | 7,19
|
||||
W05 | OG1 | Balkon | 11,34
|
||||
W05 | OG1 | Wohnküche | 27,83
|
||||
W05 | OG1 | Zimmer | 13,62
|
||||
W05 | UG | KA05 | 5,01
|
||||
W06 | OG1 | Abstellraum | 4,11
|
||||
W06 | OG1 | Bad | 5,54
|
||||
W06 | OG1 | Balkon | 16,71
|
||||
W06 | OG1 | Gang | 10,42
|
||||
W06 | OG1 | WC | 2,13
|
||||
W06 | OG1 | Wohnküche | 27,43
|
||||
W06 | OG1 | Zimmer 1 | 10,97
|
||||
W06 | OG1 | Zimmer 2 | 12,08
|
||||
W06 | UG | KA06 | 5,13
|
||||
W07 | OG1 | Abstellraum | 3,22
|
||||
W07 | OG1 | Bad | 6,51
|
||||
W07 | OG1 | Balkon | 22,46
|
||||
W07 | OG1 | Gang | 11,73
|
||||
W07 | OG1 | WC | 2,46
|
||||
W07 | OG1 | Wohnküche | 35,68
|
||||
W07 | OG1 | Zimmer 1 | 14,70
|
||||
W07 | OG1 | Zimmer 2 | 10,89
|
||||
W07 | OG1 | Zimmer 3 | 11,52
|
||||
W07 | UG | KA07 | 5,13
|
||||
W08 | OG2 | Abstellraum | 3,09
|
||||
W08 | OG2 | Bad | 5,92
|
||||
W08 | OG2 | Balkon | 21,98
|
||||
W08 | OG2 | Gang | 11,50
|
||||
W08 | OG2 | WC | 2,46
|
||||
W08 | OG2 | Wohnküche | 33,93
|
||||
W08 | OG2 | Zimmer 1 | 10,88
|
||||
W08 | OG2 | Zimmer 2 | 10,86
|
||||
W08 | OG2 | Zimmer 3 | 14,67
|
||||
W08 | UG | KA08 | 5,13
|
||||
W09 | OG2 | Bad | 7,19
|
||||
W09 | OG2 | Balkon | 11,34
|
||||
W09 | OG2 | Wohnküche | 27,83
|
||||
W09 | OG2 | Zimmer | 13,62
|
||||
W09 | UG | KA09 | 5,13
|
||||
W10 | OG2 | Abstellraum | 4,11
|
||||
W10 | OG2 | Bad | 5,54
|
||||
W10 | OG2 | Balkon | 16,70
|
||||
W10 | OG2 | Gang | 10,42
|
||||
W10 | OG2 | WC | 2,13
|
||||
W10 | OG2 | Wohnküche | 27,43
|
||||
W10 | OG2 | Zimmer 1 | 10,97
|
||||
W10 | OG2 | Zimmer 2 | 12,08
|
||||
W10 | UG | KA10 | 5,13
|
||||
W11 | OG2 | Abstellraum | 3,22
|
||||
W11 | OG2 | Bad | 6,51
|
||||
W11 | OG2 | Balkon | 22,46
|
||||
W11 | OG2 | Gang | 11,73
|
||||
W11 | OG2 | WC | 2,46
|
||||
W11 | OG2 | Wohnküche | 35,68
|
||||
W11 | OG2 | Zimmer 1 | 14,70
|
||||
W11 | OG2 | Zimmer 2 | 10,89
|
||||
W11 | OG2 | Zimmer 3 | 11,52
|
||||
W11 | UG | KA11 | 4,06
|
||||
W12 | OG3 | Abstellraum | 3,09
|
||||
W12 | OG3 | Bad | 5,92
|
||||
W12 | OG3 | Balkon | 21,97
|
||||
W12 | OG3 | Gang | 11,50
|
||||
W12 | OG3 | WC | 2,46
|
||||
W12 | OG3 | Wohnküche | 33,93
|
||||
W12 | OG3 | Zimmer 1 | 10,88
|
||||
W12 | OG3 | Zimmer 2 | 10,86
|
||||
W12 | OG3 | Zimmer 3 | 14,67
|
||||
W12 | UG | KA12 | 4,06
|
||||
W13 | OG3 | Bad | 7,19
|
||||
W13 | OG3 | Balkon | 11,34
|
||||
W13 | OG3 | Wohnküche | 27,83
|
||||
W13 | OG3 | Zimmer | 13,62
|
||||
W13 | UG | KA13 | 4,06
|
||||
W14 | OG3 | Abstellraum | 4,11
|
||||
W14 | OG3 | Bad | 5,54
|
||||
W14 | OG3 | Balkon | 17,20
|
||||
W14 | OG3 | Gang | 10,42
|
||||
W14 | OG3 | WC | 2,13
|
||||
W14 | OG3 | Wohnküche | 27,08
|
||||
W14 | OG3 | Zimmer 1 | 10,97
|
||||
W14 | OG3 | Zimmer 2 | 12,08
|
||||
W14 | UG | KA14 | 4,06
|
||||
"APG 01","UG ","Stellplatz+ ","14,25"
|
||||
"APG 02","UG ","Stellplatz","12,94"
|
||||
"APG 03","UG ","Stellplatz","13,38"
|
||||
"APG 04","UG ","Stellplatz","12,94"
|
||||
"APG 05","UG ","Stellplatz","12,50"
|
||||
"APG 06","UG ","Stellplatz","12,94"
|
||||
"APG 07","UG ","Stellplatz+ ","14,81"
|
||||
"APG 08","UG ","Stellplatz+ ","14,81"
|
||||
"APG 09","UG ","Stellplatz","12,94"
|
||||
"APG 10","UG ","Stellplatz","12,94"
|
||||
"APG 11","UG ","Stellplatz","12,94"
|
||||
"APG 12","UG ","Stellplatz+ ","14,24"
|
||||
"APG 13","UG ","Stellplatz+ ","13,91"
|
||||
"APG 14","UG ","Stellplatz+ ","14,78"
|
||||
"APG 15","UG ","Stellplatz","13,02"
|
||||
"APG 16","UG ","Stellplatz","13,02"
|
||||
"APG 17","UG ","Stellplatz","13,02"
|
||||
"APG 18","UG ","Stellplatz","12,59"
|
||||
"APG 19","UG ","Stellplatz+ ","14,59"
|
||||
"W01","EG ","Abstellraum "," 3,85"
|
||||
"W01","EG ","Bad "," 5,92"
|
||||
"W01","EG ","Gang"," 7,97"
|
||||
"W01","EG ","Garten G01_1"," 147,72"
|
||||
"W01","EG ","Garten G01_2"," 7,72"
|
||||
"W01","EG ","Terrasse","18,16"
|
||||
"W01","EG ","WC"," 2,46"
|
||||
"W01","EG ","Wohnen","25,00"
|
||||
"W01","EG ","Wohnküche","33,94"
|
||||
"W01","EG ","Zimmer 1","13,40"
|
||||
"W01","EG ","Zimmer 2","10,66"
|
||||
"W01","UG ","KA01"," 5,01"
|
||||
"W02","EG ","Bad "," 3,86"
|
||||
"W02","EG ","Bad "," 5,54"
|
||||
"W02","EG ","Gang","10,42"
|
||||
"W02","EG ","Garten G02","37,27"
|
||||
"W02","EG ","Terrasse","16,25"
|
||||
"W02","EG ","WC"," 2,13"
|
||||
"W02","EG ","Wohnküche","27,43"
|
||||
"W02","EG ","Zimmer 1","10,82"
|
||||
"W02","EG ","Zimmer 2","11,69"
|
||||
"W02","UG ","KA02"," 5,01"
|
||||
"W03","EG ","Abstellraum "," 3,22"
|
||||
"W03","EG ","Bad "," 6,51"
|
||||
"W03","EG ","Gang","11,73"
|
||||
"W03","EG ","Garten G03"," 232,99"
|
||||
"W03","EG ","Terrasse","22,64"
|
||||
"W03","EG ","WC"," 2,46"
|
||||
"W03","EG ","Wohnküche","35,69"
|
||||
"W03","EG ","Zimmer 1","14,70"
|
||||
"W03","EG ","Zimmer 2","10,89"
|
||||
"W03","EG ","Zimmer 3","11,52"
|
||||
"W03","UG ","KA03"," 5,01"
|
||||
"W04","OG1","Abstellraum "," 3,09"
|
||||
"W04","OG1","Bad "," 5,92"
|
||||
"W04","OG1","Balkon","21,98"
|
||||
"W04","OG1","Gang","11,50"
|
||||
"W04","OG1","WC"," 2,46"
|
||||
"W04","OG1","Wohnküche","33,93"
|
||||
"W04","OG1","Zimmer 1","10,88"
|
||||
"W04","OG1","Zimmer 2","10,86"
|
||||
"W04","OG1","Zimmer 3","14,67"
|
||||
"W04","UG ","KA04"," 5,01"
|
||||
"W05","OG1","Bad "," 7,19"
|
||||
"W05","OG1","Balkon","11,34"
|
||||
"W05","OG1","Wohnküche","27,83"
|
||||
"W05","OG1","Zimmer","13,62"
|
||||
"W05","UG ","KA05"," 5,01"
|
||||
"W06","OG1","Abstellraum "," 4,11"
|
||||
"W06","OG1","Bad "," 5,54"
|
||||
"W06","OG1","Balkon","16,71"
|
||||
"W06","OG1","Gang","10,42"
|
||||
"W06","OG1","WC"," 2,13"
|
||||
"W06","OG1","Wohnküche","27,43"
|
||||
"W06","OG1","Zimmer 1","10,97"
|
||||
"W06","OG1","Zimmer 2","12,08"
|
||||
"W06","UG ","KA06"," 5,13"
|
||||
"W07","OG1","Abstellraum "," 3,22"
|
||||
"W07","OG1","Bad "," 6,51"
|
||||
"W07","OG1","Balkon","22,46"
|
||||
"W07","OG1","Gang","11,73"
|
||||
"W07","OG1","WC"," 2,46"
|
||||
"W07","OG1","Wohnküche","35,68"
|
||||
"W07","OG1","Zimmer 1","14,70"
|
||||
"W07","OG1","Zimmer 2","10,89"
|
||||
"W07","OG1","Zimmer 3","11,52"
|
||||
"W07","UG ","KA07"," 5,13"
|
||||
"W08","OG2","Abstellraum "," 3,09"
|
||||
"W08","OG2","Bad "," 5,92"
|
||||
"W08","OG2","Balkon","21,98"
|
||||
"W08","OG2","Gang","11,50"
|
||||
"W08","OG2","WC"," 2,46"
|
||||
"W08","OG2","Wohnküche","33,93"
|
||||
"W08","OG2","Zimmer 1","10,88"
|
||||
"W08","OG2","Zimmer 2","10,86"
|
||||
"W08","OG2","Zimmer 3","14,67"
|
||||
"W08","UG ","KA08"," 5,13"
|
||||
"W09","OG2","Bad "," 7,19"
|
||||
"W09","OG2","Balkon","11,34"
|
||||
"W09","OG2","Wohnküche","27,83"
|
||||
"W09","OG2","Zimmer","13,62"
|
||||
"W09","UG ","KA09"," 5,13"
|
||||
"W10","OG2","Abstellraum "," 4,11"
|
||||
"W10","OG2","Bad "," 5,54"
|
||||
"W10","OG2","Balkon","16,70"
|
||||
"W10","OG2","Gang","10,42"
|
||||
"W10","OG2","WC"," 2,13"
|
||||
"W10","OG2","Wohnküche","27,43"
|
||||
"W10","OG2","Zimmer 1","10,97"
|
||||
"W10","OG2","Zimmer 2","12,08"
|
||||
"W10","UG ","KA10"," 5,13"
|
||||
"W11","OG2","Abstellraum "," 3,22"
|
||||
"W11","OG2","Bad "," 6,51"
|
||||
"W11","OG2","Balkon","22,46"
|
||||
"W11","OG2","Gang","11,73"
|
||||
"W11","OG2","WC"," 2,46"
|
||||
"W11","OG2","Wohnküche","35,68"
|
||||
"W11","OG2","Zimmer 1","14,70"
|
||||
"W11","OG2","Zimmer 2","10,89"
|
||||
"W11","OG2","Zimmer 3","11,52"
|
||||
"W11","UG ","KA11"," 4,06"
|
||||
"W12","OG3","Abstellraum "," 3,09"
|
||||
"W12","OG3","Bad "," 5,92"
|
||||
"W12","OG3","Balkon","21,97"
|
||||
"W12","OG3","Gang","11,50"
|
||||
"W12","OG3","WC"," 2,46"
|
||||
"W12","OG3","Wohnküche","33,93"
|
||||
"W12","OG3","Zimmer 1","10,88"
|
||||
"W12","OG3","Zimmer 2","10,86"
|
||||
"W12","OG3","Zimmer 3","14,67"
|
||||
"W12","UG ","KA12"," 4,06"
|
||||
"W13","OG3","Bad "," 7,19"
|
||||
"W13","OG3","Balkon","11,34"
|
||||
"W13","OG3","Wohnküche","27,83"
|
||||
"W13","OG3","Zimmer","13,62"
|
||||
"W13","UG ","KA13"," 4,06"
|
||||
"W14","OG3","Abstellraum "," 4,11"
|
||||
"W14","OG3","Bad "," 5,54"
|
||||
"W14","OG3","Balkon","17,20"
|
||||
"W14","OG3","Gang","10,42"
|
||||
"W14","OG3","WC"," 2,13"
|
||||
"W14","OG3","Wohnküche","27,08"
|
||||
"W14","OG3","Zimmer 1","10,97"
|
||||
"W14","OG3","Zimmer 2","12,08"
|
||||
"W14","UG ","KA14"," 4,06"
|
||||
Reference in new issue
Block a user