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
+249 -288

No files matched your search

+70 -116
View File
@@ -15,12 +15,11 @@ use Filament\Schemas\Components\View;
use Filament\Schemas\Components\Wizard; use Filament\Schemas\Components\Wizard;
use Filament\Schemas\Components\Wizard\Step; use Filament\Schemas\Components\Wizard\Step;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Illuminate\Database\Eloquent\Model;
use Ysfkaya\FilamentPhoneInput\Forms\PhoneInput; use Ysfkaya\FilamentPhoneInput\Forms\PhoneInput;
class Register extends BaseRegister class Register extends BaseRegister
{ {
public User $user;
public function form(Schema $schema): Schema public function form(Schema $schema): Schema
{ {
return $schema return $schema
@@ -30,7 +29,14 @@ class Register extends BaseRegister
->icon('lucide-user-plus') ->icon('lucide-user-plus')
->description('Benutzer anlegen.') ->description('Benutzer anlegen.')
->schema([ ->schema([
$this->getGenderFormComponent(), Select::make('gender')
->label('Geschlecht')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required(),
$this->getNameFormComponent(), $this->getNameFormComponent(),
$this->getEmailFormComponent(), $this->getEmailFormComponent(),
$this->getPasswordFormComponent(), $this->getPasswordFormComponent(),
@@ -41,46 +47,83 @@ class Register extends BaseRegister
->icon('lucide-key-square') ->icon('lucide-key-square')
->description('Mit einem Konto verbinden.') ->description('Mit einem Konto verbinden.')
->schema([ ->schema([
$this->getKontoModusFormComponent(), /** BESTEHENDES / NEU */
/** BESTEHENDES KONTO */ Select::make('register-modus')
$this->getKontoFormComponent(), ->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 */ /** NEU */
Fieldset::make('Rechnungsdaten') Fieldset::make('Rechnungsdaten')
->visible(fn (Get $get): bool => $get('konto') == 'new') ->visible(fn (Get $get): bool => $get('register-modus') == 'new')
->schema([ ->schema([
TextInput::make('company') TextInput::make('kontos.company')
->label('Firma') ->label('Firma')
->required(), ->required(),
TextInput::make('uid_number') TextInput::make('kontos.uid_number')
->label('UID Nummer') ->label('UID Nummer')
->rules([new VatNumber]) ->rules([new VatNumber])
->required(), ->required(),
Textarea::make('address') Textarea::make('kontos.address')
->label('Adresse') ->label('Adresse')
->required(), ->required(),
TextInput::make('country') TextInput::make('kontos.country')
->label('Land') ->label('Land')
->default('Österreich') ->default('Österreich')
->required(), ->required(),
])->columnSpan(4), ])->columnSpan(4),
Fieldset::make('Kontaktperson') Fieldset::make('Kontaktperson')
->visible(fn (Get $get): bool => $get('konto') == 'new') ->visible(fn (Get $get): bool => $get('register-modus') == 'new')
->schema([ ->schema([
// $this->getKontoGenderFormComponent(), Select::make('kontos.gender')
// $this->getTitleFormComponent(), ->columnSpan(2)
// $this->getNameFormComponent(), ->label('Geschlecht')
// $this->getKontoEmailFormComponent(), ->options([
// $this->getPhoneFormComponent(), '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), ])->columnSpan(4),
]), ]),
Wizard\Step::make('AGB') Wizard\Step::make('AGB')
->icon('lucide-receipt-text') ->icon('lucide-receipt-text')
->visible(fn (Get $get): bool => $get('konto') == 'new')
->description(' Allgemein Geschäftsbedignugen') ->description(' Allgemein Geschäftsbedignugen')
->schema([ ->schema([
Fieldset::make('Bitte lesen und akzeptieren Sie die allgemeinen Geschäftsbedignungen um die Registrierung abzuschließen.') 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([ ->schema([
Checkbox::make('agb_akzeptiert') Checkbox::make('agb_akzeptiert')
->label('ABG akzeptieren') ->label('ABG akzeptieren')
@@ -94,106 +137,17 @@ class Register extends BaseRegister
]); ]);
} }
/** public function handleRegistration(array $data): Model
* MODUS
*/
protected function getKontoModusFormComponent(): Select
{ {
return Select::make('konto') if (isset($data['kontos'])) {
->columnSpan(4) $konto = new Konto($data['kontos']);
->label('Registriermodus') $konto->save();
->prefixIcon('lucide-key-square') $data['konto_id'] = $konto->id;
->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();
} }
unset($data['kontos']);
/** $user = parent::handleRegistration($data);
* USER
*/
protected function getGenderFormComponent(): Select
{
return Select::make('gender')
->label('Geschlecht')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required();
}
/** return $user;
* 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');
} }
} }
@@ -13,6 +13,7 @@ use BackedEnum;
use Filament\Resources\Resource; use Filament\Resources\Resource;
use Filament\Schemas\Schema; use Filament\Schemas\Schema;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
class AuftraggeberResource extends Resource 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 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\BulkActionGroup;
use Filament\Actions\DeleteBulkAction; use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction; use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
class AuftraggebersTable class AuftraggebersTable
@@ -13,7 +14,8 @@ class AuftraggebersTable
{ {
return $table return $table
->columns([ ->columns([
// TextColumn::make('name'),
TextColumn::make('email')->copyable()->label('E-Mail'),
]) ])
->filters([ ->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 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 return $table
->columns([ ->columns([
TextColumn::make('name'), TextColumn::make('name'),
TextColumn::make('email')->copyable()->label('E-Mail'),
]) ])
->filters([ ->filters([
TrashedFilter::make(), TrashedFilter::make(),
@@ -9,7 +9,6 @@ use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\FontWeight; use Filament\Support\Enums\FontWeight;
use Filament\Support\Enums\TextSize; use Filament\Support\Enums\TextSize;
use Filament\Support\Icons\Heroicon; use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table; use Filament\Tables\Table;
use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Mail;
@@ -26,11 +25,6 @@ class KontosTable
// TextColumn::make('gender')->label('Geschlecht'), // TextColumn::make('gender')->label('Geschlecht'),
// TextColumn::make('title')->label('Title'), // TextColumn::make('title')->label('Title'),
// TextColumn::make('first_name')->label('Vorname'), // TextColumn::make('first_name')->label('Vorname'),
// IconColumn::make('agb_akzeptiert')
// ->label('AGB')
// ->boolean()
// ->trueIcon(Heroicon::OutlinedCheckBadge)
// ->falseIcon(Heroicon::OutlinedXMark),
// PhoneColumn::make('phone') // PhoneColumn::make('phone')
// ->label('Telefon') // ->label('Telefon')
@@ -42,14 +36,14 @@ class KontosTable
// ->label('E-mail'), // ->label('E-mail'),
TextColumn::make('company')->label('Firma') TextColumn::make('company')->label('Firma')
->description(fn ($record): string => $record->address.', '.$record->location), ->description(fn ($record): string => $record->address),
TextColumn::make('plan.name') TextColumn::make('plan.name')
->icon(Heroicon::CurrencyEuro) ->icon(Heroicon::CurrencyEuro)
// ->iconColor('success') // ->iconColor('success')
// ->badge() // ->badge()
->label('Plan') ->label('Plan')
->description(fn ($record): string => $record->plan->description) ->description(fn ($record): string => $record->plan->payment)
->wrap(), ->wrap(),
TextColumn::make('guthaben') TextColumn::make('guthaben')
@@ -7,6 +7,8 @@ use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction; use Filament\Actions\EditAction;
use Filament\Actions\ForceDeleteBulkAction; use Filament\Actions\ForceDeleteBulkAction;
use Filament\Actions\RestoreBulkAction; use Filament\Actions\RestoreBulkAction;
use Filament\Support\Icons\Heroicon;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Filters\TrashedFilter; use Filament\Tables\Filters\TrashedFilter;
use Filament\Tables\Table; use Filament\Tables\Table;
@@ -21,7 +23,11 @@ class UsersTable
TextColumn::make('name'), TextColumn::make('name'),
TextColumn::make('konto.company')->badge(), TextColumn::make('konto.company')->badge(),
TextColumn::make('email')->copyable()->label('E-Mail'), TextColumn::make('email')->copyable()->label('E-Mail'),
// IconColumn::make('agb_akzeptiert')
->label('AGB')
->boolean()
->trueIcon(Heroicon::OutlinedCheckBadge)
->falseIcon(Heroicon::OutlinedXMark),
]) ])
->filters([ ->filters([
TrashedFilter::make()->visible(fn () => auth()->user()->hasRole('super_admin')), 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 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; namespace App\Models;
use Database\Factories\AuftraggeberFactory;
use Illuminate\Database\Eloquent\Factories\Factory;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Model;
class Auftraggeber extends 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 HasFactory;
use SoftDeletes; use SoftDeletes;
protected $fillable = [
'konto_id',
'name',
'logo',
'address',
'country',
'email',
'phone',
];
protected static function booted(): void protected static function booted(): void
{ {
static::addGlobalScope(new KontoScope); static::addGlobalScope(new KontoScope);
+1 -3
View File
@@ -20,15 +20,13 @@ class Konto extends Model
protected $fillable = [ protected $fillable = [
'title', 'title',
'gender', 'gender',
'first_name', 'name',
'last_name',
'company', 'company',
'email', 'email',
'address', 'address',
'country', 'country',
'phone', 'phone',
'uid_number', 'uid_number',
'agb_akzeptiert',
'plan_id', 'plan_id',
'guthaben', 'guthaben',
'gueltig_bis', 'gueltig_bis',
+1
View File
@@ -34,6 +34,7 @@ class User extends Authenticatable implements FilamentUser, HasAppAuthentication
'name', 'name',
'email', 'email',
'password', 'password',
'agb_akzeptiert',
'app_verified_at', 'app_verified_at',
]; ];
+2 -2
View File
@@ -27,8 +27,8 @@ class AppServiceProvider extends ServiceProvider
FilamentColor::register([ FilamentColor::register([
'danger' => Color::Red, 'danger' => Color::Red,
'gray' => Color::Zinc, 'gray' => Color::Zinc,
'info' => Color::Indigo, 'info' => Color::Blue,
'primary' => Color::Sky, 'primary' => Color::Red,
'success' => Color::Green, 'success' => Color::Green,
'warning' => Color::Amber, 'warning' => Color::Amber,
]); ]);
Generated
+5 -5
View File
@@ -1902,16 +1902,16 @@
}, },
{ {
"name": "giggsey/libphonenumber-for-php-lite", "name": "giggsey/libphonenumber-for-php-lite",
"version": "9.0.14", "version": "9.0.15",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/giggsey/libphonenumber-for-php-lite.git", "url": "https://github.com/giggsey/libphonenumber-for-php-lite.git",
"reference": "af794cc2ed18edeebadf5ffe08eb6add04275709" "reference": "bdb457250790bba0a4f8f03e3a3eceb47805499e"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/af794cc2ed18edeebadf5ffe08eb6add04275709", "url": "https://api.github.com/repos/giggsey/libphonenumber-for-php-lite/zipball/bdb457250790bba0a4f8f03e3a3eceb47805499e",
"reference": "af794cc2ed18edeebadf5ffe08eb6add04275709", "reference": "bdb457250790bba0a4f8f03e3a3eceb47805499e",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1976,7 +1976,7 @@
"issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues", "issues": "https://github.com/giggsey/libphonenumber-for-php-lite/issues",
"source": "https://github.com/giggsey/libphonenumber-for-php-lite" "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", "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; namespace Database\Factories;
use App\Models\Konto;
use Illuminate\Database\Eloquent\Factories\Factory; use Illuminate\Database\Eloquent\Factories\Factory;
/** /**
@@ -17,7 +18,7 @@ class GutachterFactory extends Factory
public function definition(): array public function definition(): array
{ {
return [ return [
'konto_id' => fake()->numberBetween(1, 7), 'konto_id' => Konto::all()->random()->id,
'name' => fake()->name(), 'name' => fake()->name(),
'address' => fake()->Address(), 'address' => fake()->Address(),
'country' => 'Österreich', 'country' => 'Österreich',
-1
View File
@@ -26,7 +26,6 @@ class KontoFactory extends Factory
'country' => 'Österreich', 'country' => 'Österreich',
'phone' => fake()->PhoneNumber(), 'phone' => fake()->PhoneNumber(),
'uid_number' => 'ATU'.fake()->randomNumber(8, true), 'uid_number' => 'ATU'.fake()->randomNumber(8, true),
'agb_akzeptiert' => 1,
'plan_id' => fake()->numberBetween(1, 3), 'plan_id' => fake()->numberBetween(1, 3),
'guthaben' => fake()->numberBetween(4, 50), 'guthaben' => fake()->numberBetween(4, 50),
'gueltig_bis' => fake()->dateTimeBetween('-1 month', '+5 month'), 'gueltig_bis' => fake()->dateTimeBetween('-1 month', '+5 month'),
+1
View File
@@ -32,6 +32,7 @@ class UserFactory extends Factory
'email_verified_at' => now(), 'email_verified_at' => now(),
'password' => static::$password ??= Hash::make('password'), 'password' => static::$password ??= Hash::make('password'),
'remember_token' => Str::random(10), 'remember_token' => Str::random(10),
'agb_akzeptiert' => 1,
]; ];
} }
@@ -22,7 +22,6 @@ return new class extends Migration
$table->string('country')->nullable(); $table->string('country')->nullable();
$table->string('phone')->nullable(); $table->string('phone')->nullable();
$table->string('uid_number')->nullable(); $table->string('uid_number')->nullable();
$table->boolean('agb_akzeptiert')->default(false);
$table->string('plan_id')->default(1); $table->string('plan_id')->default(1);
$table->string('guthaben')->default(0); $table->string('guthaben')->default(0);
$table->timestamp('gueltig_bis')->nullable(); $table->timestamp('gueltig_bis')->nullable();
@@ -19,6 +19,7 @@ return new class extends Migration
$table->string('email')->unique(); $table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable(); $table->timestamp('email_verified_at')->nullable();
$table->string('password'); $table->string('password');
$table->boolean('agb_akzeptiert')->default(false);
$table->text('app_authentication_secret')->nullable(); $table->text('app_authentication_secret')->nullable();
$table->text('app_authentication_recovery_codes')->nullable(); $table->text('app_authentication_recovery_codes')->nullable();
@@ -16,7 +16,7 @@ return new class extends Migration
$table->foreignId('konto_id')->constrained(); $table->foreignId('konto_id')->constrained();
$table->string('name')->nullable(); $table->string('name')->nullable();
$table->string('logo')->nullable(); $table->string('logo')->nullable();
$table->string('address')->nullable(); $table->text('address')->nullable();
$table->string('country')->nullable(); $table->string('country')->nullable();
$table->string('phone')->nullable(); $table->string('phone')->nullable();
$table->string('email')->nullable(); $table->string('email')->nullable();
@@ -14,12 +14,13 @@ return new class extends Migration
Schema::create('auftraggebers', function (Blueprint $table) { Schema::create('auftraggebers', function (Blueprint $table) {
$table->id(); $table->id();
$table->foreignId('konto_id')->constrained(); $table->foreignId('konto_id')->constrained();
$table->string('name'); $table->string('name')->nullable();
$table->string('logo'); $table->string('logo')->nullable();
$table->text('adresse')->nullable(); $table->text('address')->nullable();
$table->string('kontaktperson')->nullable(); $table->string('country')->nullable();
$table->string('kontakt')->nullable();
$table->string('email')->email()->nullable(); $table->string('email')->email()->nullable();
$table->string('telefon')->tel()->nullable(); $table->string('phone')->tel()->nullable();
$table->timestamps(); $table->timestamps();
}); });
} }
+4 -3
View File
@@ -2,6 +2,7 @@
namespace Database\Seeders; namespace Database\Seeders;
use App\Models\Auftraggeber;
use App\Models\Gutachter; use App\Models\Gutachter;
use App\Models\Konto; use App\Models\Konto;
use App\Models\User; use App\Models\User;
@@ -15,8 +16,8 @@ class DatabaseSeeder extends Seeder
public function run(): void public function run(): void
{ {
Konto::factory()->count(10)->create(); Konto::factory()->count(10)->create();
Gutachter::factory()->count(30)->create();
// Gutachter::factory()->create(30); Auftraggeber::factory()->count(30)->create();
$this->call([ $this->call([
OrientierungenSeeder::class, OrientierungenSeeder::class,
@@ -24,7 +25,7 @@ class DatabaseSeeder extends Seeder
RolesAndPermissionsSeeder::class, 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 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 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), ('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', '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); DB::unprepared($sql);
} }
@@ -26,6 +26,7 @@ class RolesAndPermissionsSeeder extends Seeder
'name' => 'Hermann Telser', 'name' => 'Hermann Telser',
'email' => 'ht@webwerkstatt.tirol', 'email' => 'ht@webwerkstatt.tirol',
'password' => Hash::make('salam'), 'password' => Hash::make('salam'),
'agb_akzeptiert' => true,
'app_verified_at' => now(), 'app_verified_at' => now(),
'email_verified_at' => now(), 'email_verified_at' => now(),
]); ]);
@@ -38,6 +39,7 @@ class RolesAndPermissionsSeeder extends Seeder
'name' => 'Yvonne Bormes', 'name' => 'Yvonne Bormes',
'email' => 'yvonne.bormes@ztkammer.at', 'email' => 'yvonne.bormes@ztkammer.at',
'password' => Hash::make('yvonne'), 'password' => Hash::make('yvonne'),
'agb_akzeptiert' => true,
'app_verified_at' => now(), 'app_verified_at' => now(),
'email_verified_at' => now(), 'email_verified_at' => now(),
]); ]);
@@ -49,6 +51,7 @@ class RolesAndPermissionsSeeder extends Seeder
'name' => 'Daniela Mandlez', 'name' => 'Daniela Mandlez',
'email' => 'daniela.mandkez@kammerwest.at', 'email' => 'daniela.mandkez@kammerwest.at',
'password' => Hash::make('daniela'), 'password' => Hash::make('daniela'),
'agb_akzeptiert' => true,
'app_verified_at' => now(), 'app_verified_at' => now(),
'email_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"> <div class="flex justify-center gap-3 py-10">
<x-filament::button href="/app" tag="a" size="xl"> <x-filament::button href="/app" tag="a" size="xl" class="w-xs">
Anmelden Anmelden
</x-filament::button> </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 Konto eröffnen
</x-filament::button> </x-filament::button>
</div> </div>
+5 -2
View File
@@ -27,14 +27,17 @@
</script> </script>
</head> </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> <div>
@livewire('notifications') @livewire('notifications')
</div> </div>
@include('layouts.nav') @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') @yield('content')
</main> </main>
+1 -1
View File
@@ -1,6 +1,6 @@
<footer class="fixed bottom-0 right-0 left-0 z-20 p-4"> <footer class="fixed bottom-0 right-0 left-0 z-20 p-4">
<a href="https://webwerkstatt.tirol" target="_blank" <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>v3.0 - &copy 2007-{{ date('Y') }} &middot; </span>
<span class=" tracking-tight text-xs ml-1 font-bold"> <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 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" /> <circle cx="12" cy="5" r="2" />
</svg> </svg>
</div> </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 nutzwerte.at
<div class="text-xs font-light tracking-tight">Software für Architekten</div> <div class="text-xs font-light tracking-tight">Software für Architekten</div>
</div> </div>
+6 -6
View File
@@ -1,5 +1,5 @@
<nav class="fixed top-0 right-0 left-0 z-20 bg-white dark:bg-black"> <nav class="mx-auto w-full max-w-5xl p-5">
<div class=" grid grid-cols-2 max-w-5xl mx-auto py-4"> <div class=" grid grid-cols-2">
<div class="fi-logo flex gap-1 "> <div class="fi-logo flex gap-1 ">
<div class="w-9 pt-1"> <div class="w-9 pt-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
@@ -19,16 +19,16 @@
<div class="grid grid-flow-col"> <div class="grid grid-flow-col">
<x-filament::link href="/" color="gray" icon="heroicon-m-home"> <x-filament::link href="/" color="white" icon="heroicon-o-home">
Home Home
</x-filament::link> </x-filament::link>
<x-filament::link href="/nutzwerte" color="gray" icon="heroicon-m-building-office-2"> <x-filament::link href="/nutzwerte" color="white" icon="heroicon-o-building-office-2">
Nutzwerte Nutzwerte
</x-filament::link> </x-filament::link>
<x-filament::link href="/dieses-programm" color="gray" icon="heroicon-m-calculator"> <x-filament::link href="/dieses-programm" color="white" icon="heroicon-o-calculator">
Programm Programm
</x-filament::link> </x-filament::link>
<x-filament::link href="/impressum" color="gray" icon="heroicon-m-calendar-date-range"> <x-filament::link href="/impressum" color="white" icon="heroicon-o-calendar-date-range">
Impressum Impressum
</x-filament::link> </x-filament::link>
</div> </div>
+41 -32
View File
@@ -1,48 +1,57 @@
@extends('layouts.app') @extends('layouts.app')
@section('content') @section('content')
<div class="text-gray-700 dark:text-gray-200">
<div class="flex gap-7"> <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="flex flex-col gap-3">
<x-filament::section icon="heroicon-m-building-office-2"> <div class="text-7xl text-center font-black p-7">
<x-slot name="heading"> Nutzwertberechnung <br>einmal anders
<x-title> </div>
Die Nutzwertberechnung <div class="grid grid-cols-3 gap-5">
</x-title> <div class="block rounded-lg bg-white dark:bg-black shadow-secondary-1 dark:bg-surface-dark">
</x-slot> <img class="rounded-t-lg object-cover h-56 w-full" src="images/backgrounds/bg2.jpg" alt="" />
<div class="p-6 text-surface ">
<x-slot name="description"> <h5 class="mb-2 text-xl font-medium leading-tight">Das Nutzwertgutachten</h5>
ist ein Gutachten im österreichischen Wohnungseigentumsrecht <p class="mb-4 text-base">
</x-slot> ..ist ein Gutachten im österreichischen Wohnungseigentumsrecht.
<p class="indent-5 pb-3">
Es wird das Verhältnis der einzelnen Eigentumsanteile innerhalb eines Gebäudes bestimmt. 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"> <x-filament::link href="/nutzwerte" icon-position="after" icon="lucide-external-link">
Über die Nutzwertberechnung. mehr...
</x-filament::link> </x-filament::link>
<p class="indent-5 py-3">
Wie Ihnen dieses Programm bei der Nutzwertberechnung zur Hand gehen kann, erfahren sie hier.
</p> </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"> <x-filament::link href="/dieses-programm" icon-position="after" icon="lucide-external-link">
Über dieses Programm mehr...
</x-filament::link> </x-filament::link>
<br> </p>
<br> </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') @include('components.login')
<br>
</x-filament::section>
</div> </div>
<img src="images/house.jpg" class="w-82 rounded-2xl border border-gray-300" />
</div> </div>
<br>
</div> </div>
@endsection @endsection