diff --git a/app/Filament/Pages/Auth/Register.backup b/app/Filament/Pages/Auth/Register.backup new file mode 100644 index 0000000..d89685c --- /dev/null +++ b/app/Filament/Pages/Auth/Register.backup @@ -0,0 +1,249 @@ +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() + ->validationMessages([ + 'required' => 'Ein Geschlecht ist erforderlich.', + ]), + $this->getNameFormComponent()->validationMessages([ + 'required' => 'Ein Name ist erforderlich.', + ]), + $this->getEmailFormComponent() + ->validationMessages([ + 'required' => 'Eine E-Mail-Adresse ist erforderlich.', + ]), + $this->getPasswordFormComponent() + ->validationMessages([ + 'required' => 'Ein Passwort ist erforderlich.', + 'same' => 'Das Passwort muß mit dem "Passwort bestätigen" Feld übereinstimmen.', + 'min' => [ + 'string' => 'Das :attribute muß mindestens :min Stellen lang sein.', + ], + ]), + $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(function (Get $get) { + if (! $get('register-modus')) { + return ['Bitte wählen Sie ein Konto oder erstellen Sie ein neues.']; + } + }) + ->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(), + ])->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'), + 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), + Fieldset::make('Mit diesen Daten auch einen') + ->visible(fn (Get $get): bool => $get('register-modus') == 'new') + ->schema([ + Checkbox::make('gutachter_anlegen')->inline(), + Checkbox::make('auftraggeber_anlegen')->inline(), + ])->columnSpan(4), + + ]), + // Wizard\Step::make('Zahlungsmodus') + // ->icon('phosphor-coins') + // ->visible(fn (Get $get): bool => $get('register-modus') == 'new') + // ->description('Drei Optionen stehen zur Auswahl') + // ->schema([ + // Section::make('Zahlungsoptionen') + // ->description('können jederzeit geändert werden. Im Moment bieten wir nur unseren Basic Plan an.')->columnSpanFull(), + + // RadioDeck::make('plan_id') + // ->label('Wählen sie eine Option') + // ->options(fn () => Plan::pluck('name', 'id')->toArray()) + // ->descriptions(Plan::options()) + // ->icons(fn () => Plan::pluck('icon', 'id')->toArray()) + // ->required() + // ->default(1) + // ->disabled() + // ->iconPosition(IconPosition::Before) // Before | After + // ->iconSize(IconSize::ExtraLarge) + // ->alignment(Alignment::Center) // Start | Center | End + // ->padding('p-2') // Padding around the deck + // ->extraCardsAttributes([ + // 'class' => 'rounded-xl drop-shadow-xl mt-1', + // ]) + // ->extraOptionsAttributes([ + // 'class' => 'text-2xl font-black tracking-tight lg:text-3xl', + // ]) + // ->colors('primary') + // ->columns(3) + // ->columnSpanFull(), + // ]), + Wizard\Step::make('AGB') + ->icon('lucide-receipt-text') + ->description('Allgemeine Geschäftsbedingungen') + ->schema([ + Fieldset::make('Bitte lesen und akzeptieren Sie die Allgemeinen Geschäftsbedinnungen.') + ->schema([ + View::make('pages.agb'), + Checkbox::make('agb_akzeptiert') + ->default(false) + ->beforeLabel(Icon::make('phosphor-arrow-fat-right')) + ->label('Allgemeinen Geschäftsbedinnungen akzeptieren') + ->accepted() + ->validationMessages([ + 'accepted' => 'Das Akzeptieren der Allgemeinen Geschäftsbedinnungen ist erforderlich.', + ]), + ])->columns(1), + + ]), + ])->submitAction(new HtmlString(Blade::render(<<<'BLADE' + + Registrieren + + BLADE))), + + ]); + } + + protected function getFormActions(): array + { + return []; + } + + public function handleRegistration(array $data): Model + { + // dd($data); + + if (isset($data['kontos'])) { + $konto = new Konto($data['kontos']); + $konto->save(); + $data['konto_id'] = $konto->id; + + unset($data['kontos']['uid_number']); + } + + if (isset($data['gutachter_anlegen'])) { + $gutachter = new Gutachter($data['kontos']); + $gutachter->konto_id = $konto->id; + $gutachter->save(); + } + + if (isset($data['auftraggeber_anlegen'])) { + $auftraggeber = new Auftraggeber($data['kontos']); + $auftraggeber->konto_id = $konto->id; + $auftraggeber->save(); + } + + unset($data['gutachter_anlegen']); + unset($data['auftraggeber_anlegen']); + unset($data['kontos']); + + $user = parent::handleRegistration($data); + + return $user; + } +} diff --git a/app/Filament/Pages/Auth/Register.php b/app/Filament/Pages/Auth/Register.php index d89685c..9a8876a 100644 --- a/app/Filament/Pages/Auth/Register.php +++ b/app/Filament/Pages/Auth/Register.php @@ -73,37 +73,7 @@ class Register extends BaseRegister ->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(function (Get $get) { - if (! $get('register-modus')) { - return ['Bitte wählen Sie ein Konto oder erstellen Sie ein neues.']; - } - }) - ->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') @@ -117,7 +87,6 @@ class Register extends BaseRegister ->required(), ])->columnSpan(4), Fieldset::make('Kontaktperson') - ->visible(fn (Get $get): bool => $get('register-modus') == 'new') ->schema([ Select::make('kontos.gender') ->columnSpan(2) @@ -141,7 +110,6 @@ class Register extends BaseRegister ->defaultCountry('AT'), ])->columnSpan(4), Fieldset::make('Mit diesen Daten auch einen') - ->visible(fn (Get $get): bool => $get('register-modus') == 'new') ->schema([ Checkbox::make('gutachter_anlegen')->inline(), Checkbox::make('auftraggeber_anlegen')->inline(), @@ -187,7 +155,6 @@ class Register extends BaseRegister View::make('pages.agb'), Checkbox::make('agb_akzeptiert') ->default(false) - ->beforeLabel(Icon::make('phosphor-arrow-fat-right')) ->label('Allgemeinen Geschäftsbedinnungen akzeptieren') ->accepted() ->validationMessages([ diff --git a/app/Filament/Resources/Kontos/Pages/ListKontos.php b/app/Filament/Resources/Kontos/Pages/ListKontos.php index 49a5eb1..789c0b4 100644 --- a/app/Filament/Resources/Kontos/Pages/ListKontos.php +++ b/app/Filament/Resources/Kontos/Pages/ListKontos.php @@ -3,9 +3,22 @@ namespace App\Filament\Resources\Kontos\Pages; use App\Filament\Resources\Kontos\KontoResource; +use Filament\Actions\Action; use Filament\Resources\Pages\ListRecords; class ListKontos extends ListRecords { protected static string $resource = KontoResource::class; + + protected function getHeaderActions(): array + { + return [ + Action::make('agb') + ->label('AGB\'s') + ->icon('phosphor-paragraph') + ->modalContent(view('pages.agb')) + ->modalSubmitAction(false) + ->modalCancelAction(fn (Action $action) => $action->label('Schließen')), + ]; + } } diff --git a/app/Filament/Resources/Users/Schemas/UserForm.php b/app/Filament/Resources/Users/Schemas/UserForm.php index 0812bf0..f2f697f 100644 --- a/app/Filament/Resources/Users/Schemas/UserForm.php +++ b/app/Filament/Resources/Users/Schemas/UserForm.php @@ -3,6 +3,7 @@ namespace App\Filament\Resources\Users\Schemas; use App\Models\User; +use Filament\Forms\Components\Checkbox; use Filament\Forms\Components\Select; use Filament\Forms\Components\TextInput; use Filament\Schemas\Components\Section; @@ -52,6 +53,13 @@ class UserForm ->required() ->same('password') // Validates that this matches the 'password' field ->label('Passwort Bestätigen'), + Checkbox::make('agb_akzeptiert') + ->default(false) + ->label('Allgemeinen Geschäftsbedinnungen akzeptieren') + ->accepted() + ->validationMessages([ + 'accepted' => 'Das Akzeptieren der Allgemeinen Geschäftsbedingungen ist erforderlich.', + ]), Select::make('roles') ->label('Rolle') ->prefixIcon('phosphor-gear') diff --git a/app/Http/Middleware/AppUserAGBMiddleware.php b/app/Http/Middleware/AppUserAGBMiddleware.php index 9664655..2e32c66 100644 --- a/app/Http/Middleware/AppUserAGBMiddleware.php +++ b/app/Http/Middleware/AppUserAGBMiddleware.php @@ -4,20 +4,15 @@ namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Auth; use Symfony\Component\HttpFoundation\Response; class AppUserAGBMiddleware { - /** - * Handle an incoming request. - * - * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next - */ - public function handle(Request $request, Closure $next): Response + public function handle(Request $request, Closure $next) { - if ($request->user()->agb_akzeptiert == 0) { - // return static::getResource()::getUrl('index'); - abort(Response::HTTP_FORBIDDEN, 'Bitte akzeptieren sie unsere AGBs.'); + if (Auth::check() && ! Auth::user()->agb_akzeptiert) { + abort(Response::HTTP_FORBIDDEN, 'Die Allgemeine Geschäftsbedingungen wurden nicht akzeptiert, bitte wenden Sie sich an den Adminstrator.'); } return $next($request); diff --git a/bootstrap/cache/routes-v7.php b/bootstrap/cache/routes-v7.php index f84ef03..f5e6e83 100644 --- a/bootstrap/cache/routes-v7.php +++ b/bootstrap/cache/routes-v7.php @@ -531,7 +531,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::XELvTeyTx0iucj1I', + '_route' => 'generated::LUUw5i2RsURFkW2a', ), 1 => NULL, 2 => @@ -551,7 +551,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::RJCRoaZCsw58BXBj', + '_route' => 'generated::STB9w8ucJJWNXkfn', ), 1 => NULL, 2 => @@ -609,7 +609,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::6A0l0tPkXKDuiCPC', + '_route' => 'generated::bzQFt5mIDVIkXZeK', ), 1 => NULL, 2 => @@ -629,7 +629,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::nW1FfJkaaRaObIs1', + '_route' => 'generated::0o6soFY4V0jZThYm', ), 1 => NULL, 2 => @@ -649,7 +649,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::9no3IR4iKrXVmjP1', + '_route' => 'generated::mWEHFF6qpOqca4wZ', ), 1 => NULL, 2 => @@ -669,7 +669,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::3cYLBNVGFReEu7sY', + '_route' => 'generated::2NSbOa2Gi9GN1jMm', ), 1 => NULL, 2 => @@ -689,7 +689,7 @@ app('router')->setCompiledRoutes( array ( 0 => array ( - '_route' => 'generated::8gMtlzrt61r64CMZ', + '_route' => 'generated::pwCRpUbDXVNsrC8y', ), 1 => NULL, 2 => @@ -2740,7 +2740,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::XELvTeyTx0iucj1I' => + 'generated::LUUw5i2RsURFkW2a' => array ( 'methods' => array ( @@ -2752,7 +2752,7 @@ app('router')->setCompiledRoutes( array ( 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@returnJavaScriptAsFile', - 'as' => 'generated::XELvTeyTx0iucj1I', + 'as' => 'generated::LUUw5i2RsURFkW2a', ), 'fallback' => false, 'defaults' => @@ -2768,7 +2768,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::RJCRoaZCsw58BXBj' => + 'generated::STB9w8ucJJWNXkfn' => array ( 'methods' => array ( @@ -2780,7 +2780,7 @@ app('router')->setCompiledRoutes( array ( 'uses' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', 'controller' => 'Livewire\\Mechanisms\\FrontendAssets\\FrontendAssets@maps', - 'as' => 'generated::RJCRoaZCsw58BXBj', + 'as' => 'generated::STB9w8ucJJWNXkfn', ), 'fallback' => false, 'defaults' => @@ -2882,7 +2882,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::6A0l0tPkXKDuiCPC' => + 'generated::bzQFt5mIDVIkXZeK' => array ( 'methods' => array ( @@ -2911,7 +2911,7 @@ app('router')->setCompiledRoutes( \'exception\' => $exception, ]), status: $exception ? 500 : 200); }";s:5:"scope";s:54:"Illuminate\\Foundation\\Configuration\\ApplicationBuilder";s:4:"this";N;s:4:"self";s:32:"0000000000000f3b0000000000000000";}}', - 'as' => 'generated::6A0l0tPkXKDuiCPC', + 'as' => 'generated::bzQFt5mIDVIkXZeK', ), 'fallback' => false, 'defaults' => @@ -2927,7 +2927,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::nW1FfJkaaRaObIs1' => + 'generated::0o6soFY4V0jZThYm' => array ( 'methods' => array ( @@ -2949,7 +2949,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::nW1FfJkaaRaObIs1', + 'as' => 'generated::0o6soFY4V0jZThYm', ), 'fallback' => false, 'defaults' => @@ -2965,7 +2965,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::9no3IR4iKrXVmjP1' => + 'generated::mWEHFF6qpOqca4wZ' => array ( 'methods' => array ( @@ -2987,7 +2987,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::9no3IR4iKrXVmjP1', + 'as' => 'generated::mWEHFF6qpOqca4wZ', ), 'fallback' => false, 'defaults' => @@ -3003,7 +3003,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::3cYLBNVGFReEu7sY' => + 'generated::2NSbOa2Gi9GN1jMm' => array ( 'methods' => array ( @@ -3025,7 +3025,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::3cYLBNVGFReEu7sY', + 'as' => 'generated::2NSbOa2Gi9GN1jMm', ), 'fallback' => false, 'defaults' => @@ -3041,7 +3041,7 @@ app('router')->setCompiledRoutes( 'waitSeconds' => NULL, 'withTrashed' => false, ), - 'generated::8gMtlzrt61r64CMZ' => + 'generated::pwCRpUbDXVNsrC8y' => array ( 'methods' => array ( @@ -3063,7 +3063,7 @@ app('router')->setCompiledRoutes( 'where' => array ( ), - 'as' => 'generated::8gMtlzrt61r64CMZ', + 'as' => 'generated::pwCRpUbDXVNsrC8y', ), 'fallback' => false, 'defaults' =>