Files
nutzwerte_fi4/app/Filament/Pages/Auth/Register.php
T
2025-09-26 15:39:52 +02:00

154 lines
7.3 KiB
PHP

<?php
namespace App\Filament\Pages\Auth;
use App\Models\Konto;
use Danielebarbaro\LaravelVatEuValidator\Rules\VatNumber;
use Filament\Auth\Pages\Register as BaseRegister;
use Filament\Forms\Components\Checkbox;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Fieldset;
use Filament\Schemas\Components\Utilities\Get;
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 function form(Schema $schema): Schema
{
return $schema
->components([
Wizard::make([
Step::make('Profile')
->icon('lucide-user-plus')
->description('Benutzer anlegen.')
->schema([
Select::make('gender')
->label('Geschlecht')
->options([
'Herr' => 'Herr',
'Frau' => 'Frau',
'Non-binary' => 'Non-binary',
])
->required(),
$this->getNameFormComponent(),
$this->getEmailFormComponent(),
$this->getPasswordFormComponent(),
$this->getPasswordConfirmationFormComponent(),
])->columnSpan(3),
Wizard\Step::make('Konto')
// ->columns(4)
->icon('lucide-key-square')
->description('Mit einem Konto verbinden.')
->schema([
/** 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('register-modus') == 'new')
->schema([
TextInput::make('kontos.company')
->label('Firma')
->required(),
TextInput::make('kontos.uid_number')
->label('UID Nummer')
->rules([new VatNumber])
->required(),
Textarea::make('kontos.address')
->label('Adresse')
->required(),
TextInput::make('kontos.country')
->label('Land')
->default('Österreich')
->required(),
])->columnSpan(4),
Fieldset::make('Kontaktperson')
->visible(fn (Get $get): bool => $get('register-modus') == 'new')
->schema([
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')
->description(' Allgemein Geschäftsbedignugen')
->schema([
Fieldset::make('Bitte lesen und akzeptieren Sie die allgemeinen Geschäftsbedignungen um die Registrierung abzuschließen.')
->schema([
Checkbox::make('agb_akzeptiert')
->label('ABG akzeptieren')
->required(),
]),
View::make('pages.agb'),
]),
]),
]);
}
public function handleRegistration(array $data): Model
{
if (isset($data['kontos'])) {
$konto = new Konto($data['kontos']);
$konto->save();
$data['konto_id'] = $konto->id;
}
unset($data['kontos']);
$user = parent::handleRegistration($data);
return $user;
}
}