seeder wip

This commit is contained in:
salam committed 2025-09-26 15:39:52 +02:00
1 parent 1d16946f20
commit 005924ef8a
34 files changed
+286 -325

No files matched your search

+71 -117
View File
@@ -15,12 +15,11 @@ use Filament\Schemas\Components\View;
use Filament\Schemas\Components\Wizard;
use Filament\Schemas\Components\Wizard\Step;
use Filament\Schemas\Schema;
use Illuminate\Database\Eloquent\Model;
use Ysfkaya\FilamentPhoneInput\Forms\PhoneInput;
class Register extends BaseRegister
{
public User $user;
public function form(Schema $schema): Schema
{
return $schema
@@ -30,7 +29,14 @@ class Register extends BaseRegister
->icon('lucide-user-plus')
->description('Benutzer anlegen.')
->schema([
$this->getGenderFormComponent(),
Select::make('gender')
->label('Geschlecht')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required(),
$this->getNameFormComponent(),
$this->getEmailFormComponent(),
$this->getPasswordFormComponent(),
@@ -41,46 +47,83 @@ class Register extends BaseRegister
->icon('lucide-key-square')
->description('Mit einem Konto verbinden.')
->schema([
$this->getKontoModusFormComponent(),
/** BESTEHENDES KONTO */
$this->getKontoFormComponent(),
/** BESTEHENDES / NEU */
Select::make('register-modus')
->columnSpan(4)
->label('Registriermodus')
->prefixIcon('lucide-key-square')
->prefixIconColor('primary')
->aboveLabel([
'Bitte wählen Sie ein bestehendes Konto oder erstellen Sie ein neues. Eine Registrierung bei einem bestehenden Konto muß vom Kontoinhaber bestätigt werden.',
])
->options([
'old' => 'Mit einem bestehenden Konto verbinden',
'new' => 'Ein neues Konto erstellen',
])
->live()
->required(),
/** BESTEHEND */
Select::make('konto_id')
->columnSpan(4)
->label('Konto auswählen')
->belowLabel([
'Um das erstellte Profil zu aktivieren muß der Kontoinhaber die Anmeldung im Programm freischalten',
])
->visible(fn (Get $get): bool => $get('register-modus') == 'old')
->options(Konto::query()->pluck('company', 'id'))
->searchable()
->required(),
/** NEU */
Fieldset::make('Rechnungsdaten')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->visible(fn (Get $get): bool => $get('register-modus') == 'new')
->schema([
TextInput::make('company')
TextInput::make('kontos.company')
->label('Firma')
->required(),
TextInput::make('uid_number')
TextInput::make('kontos.uid_number')
->label('UID Nummer')
->rules([new VatNumber])
->required(),
Textarea::make('address')
Textarea::make('kontos.address')
->label('Adresse')
->required(),
TextInput::make('country')
TextInput::make('kontos.country')
->label('Land')
->default('Österreich')
->required(),
])->columnSpan(4),
Fieldset::make('Kontaktperson')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->visible(fn (Get $get): bool => $get('register-modus') == 'new')
->schema([
// $this->getKontoGenderFormComponent(),
// $this->getTitleFormComponent(),
// $this->getNameFormComponent(),
// $this->getKontoEmailFormComponent(),
// $this->getPhoneFormComponent(),
Select::make('kontos.gender')
->columnSpan(2)
->label('Geschlecht')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required(),
TextInput::make('kontos.title')
->label('Titel')
->required(),
TextInput::make('kontos.name')
->required(),
TextInput::make('kontos.email')
->label('E-Mail')
->unique(table: Konto::class)
->required(),
PhoneInput::make('kontos.phone')
->label('Telefon')
->defaultCountry('AT'),
])->columnSpan(4),
]),
Wizard\Step::make('AGB')
->icon('lucide-receipt-text')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->description(' Allgemein Geschäftsbedignugen')
->schema([
Fieldset::make('Bitte lesen und akzeptieren Sie die allgemeinen Geschäftsbedignungen um die Registrierung abzuschließen.')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->schema([
Checkbox::make('agb_akzeptiert')
->label('ABG akzeptieren')
@@ -94,106 +137,17 @@ class Register extends BaseRegister
]);
}
/**
* MODUS
*/
protected function getKontoModusFormComponent(): Select
public function handleRegistration(array $data): Model
{
return Select::make('konto')
->columnSpan(4)
->label('Registriermodus')
->prefixIcon('lucide-key-square')
->prefixIconColor('primary')
->aboveLabel([
'Bitte wählen Sie ein bestehendes Konto oder erstellen Sie ein neues. Eine Registrierung bei einem bestehenden Konto muß vom Kontoinhaber bestätigt werden.',
])
->options([
'old' => 'Mit einem bestehenden Konto verbinden',
'new' => 'Ein neues Konto erstellen',
])
->live()
->required();
}
if (isset($data['kontos'])) {
$konto = new Konto($data['kontos']);
$konto->save();
$data['konto_id'] = $konto->id;
}
unset($data['kontos']);
/**
* USER
*/
protected function getGenderFormComponent(): Select
{
return Select::make('gender')
->label('Geschlecht')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required();
}
$user = parent::handleRegistration($data);
/**
* KONTO WÄHLEN
*/
protected function getKontoFormComponent(): Select
{
return Select::make('konto_id')
->columnSpan(4)
->label('Konto auswählen')
->belowLabel([
'Um das erstellte Profil zu aktivieren muß der Kontoinhaber die Anmeldung im Programm freischalten',
])
->visible(fn (Get $get): bool => $get('konto') == 'old')
->options(Konto::query()->pluck('company', 'id'))
->searchable()
->required();
}
/**
* KONTO NEU
*/
protected function getTitleFormComponent(): TextInput
{
return TextInput::make('title')
->label('Title')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->required();
}
protected function getKontoGenderFormComponent(): Select
{
return Select::make('gender')
->columnSpan(2)
->label('Geschlecht')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required();
}
protected function getCompanyFormComponent(): TextInput
{
return TextInput::make('konto.company')
->label('Firma')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->required();
}
protected function getKontoEmailFormComponent(): TextInput
{
return TextInput::make('email')
->label('E-Mail')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->unique(table: Konto::class)
->required();
}
protected function getPhoneFormComponent(): PhoneInput
{
return PhoneInput::make('phone')
->label('Telefon')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->defaultCountry('AT');
return $user;
}
}
@@ -13,6 +13,7 @@ use BackedEnum;
use Filament\Resources\Resource;
use Filament\Schemas\Schema;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class AuftraggeberResource extends Resource
{
@@ -58,8 +59,13 @@ class AuftraggeberResource extends Resource
];
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id);
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id)->count();
}
}
@@ -5,6 +5,7 @@ namespace App\Filament\Resources\Auftraggebers\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class AuftraggebersTable
@@ -13,7 +14,8 @@ class AuftraggebersTable
{
return $table
->columns([
//
TextColumn::make('name'),
TextColumn::make('email')->copyable()->label('E-Mail'),
])
->filters([
//
@@ -68,8 +68,13 @@ class GutachterResource extends Resource
]);
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id);
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id)->count();
}
}
@@ -18,6 +18,7 @@ class GutachtersTable
return $table
->columns([
TextColumn::make('name'),
TextColumn::make('email')->copyable()->label('E-Mail'),
])
->filters([
TrashedFilter::make(),
@@ -9,7 +9,6 @@ use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\FontWeight;
use Filament\Support\Enums\TextSize;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
use Illuminate\Support\Facades\Mail;
@@ -26,11 +25,6 @@ class KontosTable
// TextColumn::make('gender')->label('Geschlecht'),
// TextColumn::make('title')->label('Title'),
// TextColumn::make('first_name')->label('Vorname'),
// IconColumn::make('agb_akzeptiert')
// ->label('AGB')
// ->boolean()
// ->trueIcon(Heroicon::OutlinedCheckBadge)
// ->falseIcon(Heroicon::OutlinedXMark),
// PhoneColumn::make('phone')
// ->label('Telefon')
@@ -42,14 +36,14 @@ class KontosTable
// ->label('E-mail'),
TextColumn::make('company')->label('Firma')
->description(fn ($record): string => $record->address.', '.$record->location),
->description(fn ($record): string => $record->address),
TextColumn::make('plan.name')
->icon(Heroicon::CurrencyEuro)
// ->iconColor('success')
// ->badge()
->label('Plan')
->description(fn ($record): string => $record->plan->description)
->description(fn ($record): string => $record->plan->payment)
->wrap(),
TextColumn::make('guthaben')
@@ -7,6 +7,8 @@ use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreBulkAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table;
@@ -21,7 +23,11 @@ class UsersTable
TextColumn::make('name'),
TextColumn::make('konto.company')->badge(),
TextColumn::make('email')->copyable()->label('E-Mail'),
//
IconColumn::make('agb_akzeptiert')
->label('AGB')
->boolean()
->trueIcon(Heroicon::OutlinedCheckBadge)
->falseIcon(Heroicon::OutlinedXMark),
])
->filters([
TrashedFilter::make()->visible(fn () => auth()->user()->hasRole('super_admin')),
@@ -66,8 +66,13 @@ class UserResource extends Resource
]);
}
public static function getEloquentQuery(): Builder
{
return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id);
}
public static function getNavigationBadge(): ?string
{
return parent::getEloquentQuery()->count();
return parent::getEloquentQuery()->where('konto_id', auth()->user()->konto_id)->count();
}
}
+20 -1
View File
@@ -2,9 +2,28 @@
namespace App\Models;
use Database\Factories\AuftraggeberFactory;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Auftraggeber extends Model
{
//
use HasFactory;
protected $fillable = [
'konto_id',
'name',
'logo',
'address',
'country',
'kontakt',
'email',
'phone',
];
protected static function newFactory(): Factory
{
return AuftraggeberFactory::new();
}
}
+10
View File
@@ -14,6 +14,16 @@ class Gutachter extends Model
use HasFactory;
use SoftDeletes;
protected $fillable = [
'konto_id',
'name',
'logo',
'address',
'country',
'email',
'phone',
];
protected static function booted(): void
{
static::addGlobalScope(new KontoScope);
+1 -3
View File
@@ -20,15 +20,13 @@ class Konto extends Model
protected $fillable = [
'title',
'gender',
'first_name',
'last_name',
'name',
'company',
'email',
'address',
'country',
'phone',
'uid_number',
'agb_akzeptiert',
'plan_id',
'guthaben',
'gueltig_bis',
+1
View File
@@ -34,6 +34,7 @@ class User extends Authenticatable implements FilamentUser, HasAppAuthentication
'name',
'email',
'password',
'agb_akzeptiert',
'app_verified_at',
];
+2 -2
View File
@@ -27,8 +27,8 @@ class AppServiceProvider extends ServiceProvider
FilamentColor::register([
'danger' => Color::Red,
'gray' => Color::Zinc,
'info' => Color::Indigo,
'primary' => Color::Sky,
'info' => Color::Blue,
'primary' => Color::Red,
'success' => Color::Green,
'warning' => Color::Amber,
]);
Generated
+5 -5
View File
@@ -1902,16 +1902,16 @@
},
{
"name": "giggsey/libphonenumber-for-php-lite",
"version": "9.0.14",
"version": "9.0.15",
"source": {
"type": "git",
"url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
"reference": "af794cc2ed18edeebadf5ffe08eb6add04275709"
"reference": "bdb457250790bba0a4f8f03e3a3eceb47805499e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/af794cc2ed18edeebadf5ffe08eb6add04275709",
"reference": "af794cc2ed18edeebadf5ffe08eb6add04275709",
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/bdb457250790bba0a4f8f03e3a3eceb47805499e",
"reference": "bdb457250790bba0a4f8f03e3a3eceb47805499e",
"shasum": ""
},
"require": {
@@ -1976,7 +1976,7 @@
"issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
"source": "https://github.com/giggsey/libphonenumber-for-php-lite"
},
"time": "2025-09-16T07:09:25+00:00"
"time": "2025-09-26T07:21:30+00:00"
},
{
"name": "graham-campbell/result-type",
@@ -0,0 +1,30 @@
<?php
namespace Database\Factories;
use App\Models\Konto;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Auftraggeber>
*/
class AuftraggeberFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
'konto_id' => Konto::all()->random()->id,
'name' => fake()->name(),
'address' => fake()->Address(),
'kontakt' => fake()->name(),
'country' => 'Österreich',
'email' => fake()->email(),
'phone' => fake()->PhoneNumber(),
];
}
}
+2 -1
View File
@@ -2,6 +2,7 @@
namespace Database\Factories;
use App\Models\Konto;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
@@ -17,7 +18,7 @@ class GutachterFactory extends Factory
public function definition(): array
{
return [
'konto_id' => fake()->numberBetween(1, 7),
'konto_id' => Konto::all()->random()->id,
'name' => fake()->name(),
'address' => fake()->Address(),
'country' => 'Österreich',
-1
View File
@@ -26,7 +26,6 @@ class KontoFactory extends Factory
'country' => 'Österreich',
'phone' => fake()->PhoneNumber(),
'uid_number' => 'ATU'.fake()->randomNumber(8, true),
'agb_akzeptiert' => 1,
'plan_id' => fake()->numberBetween(1, 3),
'guthaben' => fake()->numberBetween(4, 50),
'gueltig_bis' => fake()->dateTimeBetween('-1 month', '+5 month'),
+1
View File
@@ -32,6 +32,7 @@ class UserFactory extends Factory
'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10),
'agb_akzeptiert' => 1,
];
}
@@ -22,7 +22,6 @@ return new class extends Migration
$table->string('country')->nullable();
$table->string('phone')->nullable();
$table->string('uid_number')->nullable();
$table->boolean('agb_akzeptiert')->default(false);
$table->string('plan_id')->default(1);
$table->string('guthaben')->default(0);
$table->timestamp('gueltig_bis')->nullable();
@@ -19,6 +19,7 @@ return new class extends Migration
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->boolean('agb_akzeptiert')->default(false);
$table->text('app_authentication_secret')->nullable();
$table->text('app_authentication_recovery_codes')->nullable();
@@ -16,7 +16,7 @@ return new class extends Migration
$table->foreignId('konto_id')->constrained();
$table->string('name')->nullable();
$table->string('logo')->nullable();
$table->string('address')->nullable();
$table->text('address')->nullable();
$table->string('country')->nullable();
$table->string('phone')->nullable();
$table->string('email')->nullable();
@@ -14,12 +14,13 @@ return new class extends Migration
Schema::create('auftraggebers', function (Blueprint $table) {
$table->id();
$table->foreignId('konto_id')->constrained();
$table->string('name');
$table->string('logo');
$table->text('adresse')->nullable();
$table->string('kontaktperson')->nullable();
$table->string('name')->nullable();
$table->string('logo')->nullable();
$table->text('address')->nullable();
$table->string('country')->nullable();
$table->string('kontakt')->nullable();
$table->string('email')->email()->nullable();
$table->string('telefon')->tel()->nullable();
$table->string('phone')->tel()->nullable();
$table->timestamps();
});
}
+4 -3
View File
@@ -2,6 +2,7 @@
namespace Database\Seeders;
use App\Models\Auftraggeber;
use App\Models\Gutachter;
use App\Models\Konto;
use App\Models\User;
@@ -15,8 +16,8 @@ class DatabaseSeeder extends Seeder
public function run(): void
{
Konto::factory()->count(10)->create();
// Gutachter::factory()->create(30);
Gutachter::factory()->count(30)->create();
Auftraggeber::factory()->count(30)->create();
$this->call([
OrientierungenSeeder::class,
@@ -24,7 +25,7 @@ class DatabaseSeeder extends Seeder
RolesAndPermissionsSeeder::class,
]);
User::factory()->count(100)->create();
User::factory()->count(40)->create();
}
}
+3 -3
View File
@@ -12,10 +12,10 @@ class KontoSeeder extends Seeder
*/
public function run(): void
{
$sql = "INSERT INTO `kontos` (`id`, `title`, `gender`, `name`, `company`, `email`, `address`, `location`, `plz`, `country`, `phone`, `uid_number`, `agb_akzeptiert`, `option_id`, `gutachten_zahl`, `gutachten_zeit`, `gutachten_abgeschlossen`, `created_at`, `updated_at`)
$sql = "INSERT INTO `kontos` (`id`, `title`, `gender`, `name`, `company`, `email`, `address`, `location`, `plz`, `country`, `phone`, `uid_number`, `option_id`, `gutachten_zahl`, `gutachten_zeit`, `gutachten_abgeschlossen`, `created_at`, `updated_at`)
VALUES
('1', 'Architekt', 'Herr', 'Hanno Vogl-Fernheim', 'Architekt Vogl-Fernheim', 'office@vogl-fernheim.eu', 'Richardsweg 1', 'Innsbruck', '6020', 'Österreich', '+43 0512 560303', 'ATU 61718733', '1', '1', '1', NULL, '1', NULL, NULL),
('2', 'Staatl. bef. u. beeideter Ziviltechniker', 'Herr', 'Christoph Falkner', 'Ziviltechniker Christoph Falkner', 'christophfalkner@me.com', 'Adele-Obermayr-Straße 2', 'Innsbruck', '6020', 'Österreich', '+43 650 92210248', 'ATU56874500', '1', '1', '1', NULL, '1', NULL, NULL);
('1', 'Architekt', 'Herr', 'Hanno Vogl-Fernheim', 'Architekt Vogl-Fernheim', 'office@vogl-fernheim.eu', 'Richardsweg 1', 'Innsbruck', '6020', 'Österreich', '+43 0512 560303', 'ATU 61718733', '1', '1', NULL, '1', NULL, NULL),
('2', 'Staatl. bef. u. beeideter Ziviltechniker', 'Herr', 'Christoph Falkner', 'Ziviltechniker Christoph Falkner', 'christophfalkner@me.com', 'Adele-Obermayr-Straße 2', 'Innsbruck', '6020', 'Österreich', '+43 650 92210248', 'ATU56874500', '1', '1', NULL, '1', NULL, NULL);
";
DB::unprepared($sql);
}
@@ -26,6 +26,7 @@ class RolesAndPermissionsSeeder extends Seeder
'name' => 'Hermann Telser',
'email' => 'ht@webwerkstatt.tirol',
'password' => Hash::make('salam'),
'agb_akzeptiert' => true,
'app_verified_at' => now(),
'email_verified_at' => now(),
]);
@@ -38,6 +39,7 @@ class RolesAndPermissionsSeeder extends Seeder
'name' => 'Yvonne Bormes',
'email' => 'yvonne.bormes@ztkammer.at',
'password' => Hash::make('yvonne'),
'agb_akzeptiert' => true,
'app_verified_at' => now(),
'email_verified_at' => now(),
]);
@@ -49,6 +51,7 @@ class RolesAndPermissionsSeeder extends Seeder
'name' => 'Daniela Mandlez',
'email' => 'daniela.mandkez@kammerwest.at',
'password' => Hash::make('daniela'),
'agb_akzeptiert' => true,
'app_verified_at' => now(),
'email_verified_at' => now(),
]);
-88
View File
@@ -1,88 +0,0 @@
<svg width="733" height="614" viewBox="0 0 733 614" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_6907_192479" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="0" y="0"
width="733" height="673">
<rect width="733" height="673" fill="url(#paint0_radial_6907_192479)" />
</mask>
<g mask="url(#mask0_6907_192479)">
<rect x="-11.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="0.5" width="84" height="84" fill="#DDD6FE" stroke="#DDD6FE" />
<rect x="156.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="0.5" width="84" height="84" fill="#DDD6FE" stroke="#DDD6FE" />
<rect x="492.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="0.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="-11.5" y="84.5" width="84" height="84" fill="#DDD6FE" stroke="#DDD6FE" />
<rect x="72.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="84.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="-11.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="168.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="168.5" width="84" height="84" fill="#DDD6FE" stroke="#DDD6FE" />
<rect x="-11.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="252.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="-11.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="336.5" width="84" height="84" fill="#DDD6FE" stroke="#DDD6FE" />
<rect x="240.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="336.5" width="84" height="84" fill="#DDD6FE" stroke="#DDD6FE" />
<rect x="660.5" y="336.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="-11.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="420.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="-11.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="504.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="-11.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="72.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="156.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="240.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="324.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="408.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="492.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="576.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
<rect x="660.5" y="588.5" width="84" height="84" fill="white" stroke="#DDD6FE" />
</g>
<defs>
<radialGradient id="paint0_radial_6907_192479" cx="0" cy="0" r="1"
gradientUnits="userSpaceOnUse"
gradientTransform="translate(366.5 336.5) rotate(90) scale(336.5 366.5)">
<stop offset="0%" stop-color="#2563EB" />
<stop offset="1" stop-color="white" stop-opacity="0" />
</radialGradient>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 MiB

File renamed without changes.
+3 -3
View File
@@ -1,8 +1,8 @@
<div class="flex justify-center gap-3">
<x-filament::button href="/app" tag="a" size="xl">
<div class="flex justify-center gap-3 py-10">
<x-filament::button href="/app" tag="a" size="xl" class="w-xs">
Anmelden
</x-filament::button>
<x-filament::button href="/app/register" tag="a" size="xl" color="gray">
<x-filament::button href="/app/register" tag="a" size="xl" color="gray" class="w-xs">
Konto eröffnen
</x-filament::button>
</div>
+5 -2
View File
@@ -27,14 +27,17 @@
</script>
</head>
<body class="bg-cover" style="background-image: url('images/backgrounds/bg2.jpg')">
{{-- <body class="bg-cover" style="background-image: url('images/backgrounds/bg2.jpg')"> --}}
<body>
<div>
@livewire('notifications')
</div>
@include('layouts.nav')
<main class="mx-auto mt-30 rounded-xl p-10 max-w-5xl shadow-2xl bg-white/80 dark:bg-gray-900/90">
<main
class="mx-auto max-w-5xl bg-gray-100 dark:bg-gray-800 rounded-2xl border border-gray-200 dark:border-gray-700 p-5">
@yield('content')
</main>
+1 -1
View File
@@ -1,6 +1,6 @@
<footer class="fixed bottom-0 right-0 left-0 z-20 p-4">
<a href="https://webwerkstatt.tirol" target="_blank"
class="w-72 mx-auto cursor-pointer text-xs bg-white dark:bg-black justify-center rounded-sm opacity-70 flex border border-gray-300 dark:border-gray-600">
class="w-72 mx-auto cursor-pointer text-xs bg-white dark:bg-black justify-center rounded-sm opacity-90 flex border border-gray-300 dark:border-gray-600">
<span>v3.0 - &copy 2007-{{ date('Y') }} &middot; </span>
<span class=" tracking-tight text-xs ml-1 font-bold">
Web<span class="text-primary-800 dark:text-primary-600 font-black">Werkstatt</span><span
+1 -1
View File
@@ -10,7 +10,7 @@
<circle cx="12" cy="5" r="2" />
</svg>
</div>
<div class="text-2xl leading-none font-black tracking-tighter text-shadow-md dark:text-shadow-none">
<div class="text-2xl leading-none font-black tracking-tighter text-shadow-lg">
nutzwerte.at
<div class="text-xs font-light tracking-tight">Software für Architekten</div>
</div>
+34 -34
View File
@@ -1,36 +1,36 @@
<nav class="fixed top-0 right-0 left-0 z-20 bg-white dark:bg-black">
<div class=" grid grid-cols-2 max-w-5xl mx-auto py-4">
<div class="fi-logo flex gap-1">
<div class="w-9 pt-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m12.99 6.74 1.93 3.44"></path>
<path d="M19.136 12a10 10 0 0 1-14.271 0"></path>
<path d="m21 21-2.16-3.84"></path>
<path d="m3 21 8.02-14.26"></path>
<circle cx="12" cy="5" r="2"></circle>
</svg>
</div>
<div class="text-2xl leading-none font-black tracking-tighter text-shadow-md dark:text-shadow-none">
nutzwerte.at
<div class="text-xs font-light">Software für Architekten</div>
</div>
</div>
<nav class="mx-auto w-full max-w-5xl p-5">
<div class=" grid grid-cols-2">
<div class="fi-logo flex gap-1 ">
<div class="w-9 pt-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m12.99 6.74 1.93 3.44"></path>
<path d="M19.136 12a10 10 0 0 1-14.271 0"></path>
<path d="m21 21-2.16-3.84"></path>
<path d="m3 21 8.02-14.26"></path>
<circle cx="12" cy="5" r="2"></circle>
</svg>
</div>
<div class="text-2xl leading-none font-black tracking-tighter text-shadow-md dark:text-shadow-none">
nutzwerte.at
<div class="text-xs font-light">Software für Architekten</div>
</div>
</div>
<div class="grid grid-flow-col">
<x-filament::link href="/" color="gray" icon="heroicon-m-home">
Home
</x-filament::link>
<x-filament::link href="/nutzwerte" color="gray" icon="heroicon-m-building-office-2">
Nutzwerte
</x-filament::link>
<x-filament::link href="/dieses-programm" color="gray" icon="heroicon-m-calculator">
Programm
</x-filament::link>
<x-filament::link href="/impressum" color="gray" icon="heroicon-m-calendar-date-range">
Impressum
</x-filament::link>
</div>
</div>
</nav>
<div class="grid grid-flow-col">
<x-filament::link href="/" color="white" icon="heroicon-o-home">
Home
</x-filament::link>
<x-filament::link href="/nutzwerte" color="white" icon="heroicon-o-building-office-2">
Nutzwerte
</x-filament::link>
<x-filament::link href="/dieses-programm" color="white" icon="heroicon-o-calculator">
Programm
</x-filament::link>
<x-filament::link href="/impressum" color="white" icon="heroicon-o-calendar-date-range">
Impressum
</x-filament::link>
</div>
</div>
</nav>
+49 -40
View File
@@ -1,48 +1,57 @@
@extends('layouts.app')
@section('content')
<div class="text-gray-700 dark:text-gray-200">
<div class="flex gap-7">
<div class="flex flex-col gap-3">
<x-filament::section icon="heroicon-m-building-office-2">
<x-slot name="heading">
<x-title>
Die Nutzwertberechnung
</x-title>
</x-slot>
<x-slot name="description">
ist ein Gutachten im österreichischen Wohnungseigentumsrecht
</x-slot>
<p class="indent-5 pb-3">
Es wird das Verhältnis der einzelnen Eigentumsanteile innerhalb eines Gebäudes bestimmt.
</p>
<p class="indent-5 pb-3">
Sie bildet die Grundlage für die Berechnung der Betriebs- und Instandhaltungskosten sowie für
das
Stimmrecht der Miteigentümer und ist für die Begründung von Wohnungseigentum notwendig.
</p>
<x-filament::link href="/nutzwerte" icon-position="after" icon="lucide-external-link">
Über die Nutzwertberechnung.
</x-filament::link>
<p class="indent-5 py-3">
Wie Ihnen dieses Programm bei der Nutzwertberechnung zur Hand gehen kann, erfahren sie hier.
</p>
<x-filament::link href="/dieses-programm" icon-position="after" icon="lucide-external-link">
Über dieses Programm
</x-filament::link>
<br>
<br>
@include('components.login')
<br>
</x-filament::section>
<div class="flex gap-7">
{{-- <body class="bg-cover" style="background-image: url('images/backgrounds/bg2.jpg')"> --}}
<div class="flex flex-col gap-3">
<div class="text-7xl text-center font-black p-7">
Nutzwertberechnung <br>einmal anders
</div>
<div class="grid grid-cols-3 gap-5">
<div class="block rounded-lg bg-white dark:bg-black shadow-secondary-1 dark:bg-surface-dark">
<img class="rounded-t-lg object-cover h-56 w-full" src="images/backgrounds/bg2.jpg" alt="" />
<div class="p-6 text-surface ">
<h5 class="mb-2 text-xl font-medium leading-tight">Das Nutzwertgutachten</h5>
<p class="mb-4 text-base">
..ist ein Gutachten im österreichischen Wohnungseigentumsrecht.
Es wird das Verhältnis der einzelnen Eigentumsanteile innerhalb eines Gebäudes bestimmt.
<x-filament::link href="/nutzwerte" icon-position="after" icon="lucide-external-link">
mehr...
</x-filament::link>
</p>
</div>
</div>
<div class="block rounded-lg bg-white dark:bg-black shadow-secondary-1 dark:bg-surface-dark">
<img class="rounded-t-lg object-cover h-56 w-full p-5" src="images/klammer.jpg" alt="" />
<div class="p-6 text-surface">
<h5 class="mb-2 text-xl font-medium leading-tight">Daten Import</h5>
<p class="mb-4 text-base">
Die Daten werden aus allen gängigen Zeichenprogrammen importieren, und die Objekte werden
angelegt.
<x-filament::link href="/dieses-programm" icon-position="after" icon="lucide-external-link">
mehr...
</x-filament::link>
</p>
</div>
</div>
<div class="block rounded-lg bg-white dark:bg-black shadow-secondary-1 dark:bg-surface-dark">
<img class="rounded-t-lg object-cover h-56 w-full" src="images/house2.jpg" alt="" />
<div class="p-6 text-surface">
<h5 class="mb-2 text-xl font-medium leading-tight">Berechnung</h5>
<p class="mb-4 text-base">
Nach dem die Parameter gesetzt wurden ist die
fertige Nutzwertberechnung bereit um als als PDF-Dokument heruntgeladen zu werden.
<x-filament::link href="/dieses-programm" icon-position="after" icon="lucide-external-link">
mehr...
</x-filament::link>
</p>
</div>
</div>
</div>
<div class="p-5">
@include('components.login')
</div>
<img src="images/house.jpg" class="w-82 rounded-2xl border border-gray-300" />
</div>
<br>
</div>
@endsection