From f852a89e8a1063e50c6f2ebb448a8e908af4485b Mon Sep 17 00:00:00 2001 From: Tom Irgang Date: Tue, 25 Apr 2023 09:14:26 +0200 Subject: [PATCH] fix registration flow --- rc_hip/repapp/migrations/0003_guest_user.py | 20 ++++++++++++++ rc_hip/repapp/models.py | 30 +++++++++++---------- rc_hip/repapp/views.py | 14 +++++++++- 3 files changed, 49 insertions(+), 15 deletions(-) create mode 100644 rc_hip/repapp/migrations/0003_guest_user.py diff --git a/rc_hip/repapp/migrations/0003_guest_user.py b/rc_hip/repapp/migrations/0003_guest_user.py new file mode 100644 index 0000000..805a450 --- /dev/null +++ b/rc_hip/repapp/migrations/0003_guest_user.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2 on 2023-04-25 07:05 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('repapp', '0002_message'), + ] + + operations = [ + migrations.AddField( + model_name='guest', + name='user', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Benutzer'), + ), + ] diff --git a/rc_hip/repapp/models.py b/rc_hip/repapp/models.py index b058ff8..7c5388e 100644 --- a/rc_hip/repapp/models.py +++ b/rc_hip/repapp/models.py @@ -7,6 +7,20 @@ from django.utils.translation import gettext_lazy as _ from django.contrib.auth.models import AbstractUser +class CustomUser(AbstractUser): + """ + Custom user object with unique email. + """ + email = models.EmailField(unique=True, verbose_name=_("eMail Adresse")) + + class Meta: + verbose_name = _('Benutzer') + verbose_name_plural = _('Benutzer') + + def __str__(self): + return f'{self.email}' + + class Cafe(models.Model): """ A Cafe is a "Repair-Café event. @@ -64,6 +78,8 @@ class Guest(models.Model): phone = models.CharField(max_length=200, verbose_name=_("Telefonnummer")) residence = models.CharField(max_length=200, verbose_name=_("Wohnort")) mail = models.CharField(max_length=200, verbose_name=_("eMail")) + user = models.ForeignKey( + CustomUser, on_delete=models.CASCADE, null=True, verbose_name=_("Benutzer")) class Meta: verbose_name = _('Gast') @@ -174,20 +190,6 @@ class Candidate(models.Model): return f'Kandidat {self.cafe.event_date} für Gerät {self.device.device}' -class CustomUser(AbstractUser): - """ - Custom user object with unique email. - """ - email = models.EmailField(unique=True, verbose_name=_("eMail Adresse")) - - class Meta: - verbose_name = _('Benutzer') - verbose_name_plural = _('Benutzer') - - def __str__(self): - return f'{self.email}' - - class OneTimeLogin(models.Model): """ A OneTimeLogin is a secret which can be used once to login a user. diff --git a/rc_hip/repapp/views.py b/rc_hip/repapp/views.py index c822e31..f7e97e2 100644 --- a/rc_hip/repapp/views.py +++ b/rc_hip/repapp/views.py @@ -144,6 +144,9 @@ class RegisterGuestFormView(generic.edit.FormView): user.set_password(password) user.save() + guest.user = user + guest.save() + send_guest_account_mail(guest, password, self.request) send_confirmation_mails(device, guest, cafe, self.request) @@ -161,12 +164,21 @@ class RegisterGuestFormView(generic.edit.FormView): device_identifier = self.kwargs['device_identifier'] device = get_object_or_404(Device, identifier=device_identifier) + mail = self.kwargs['mail'] + guest = Guest.objects.filter(mail=mail).first() + if guest: + return HttpResponseRedirect( + reverse_lazy('register_device_final', kwargs={ + 'cafe': cafe.pk, + 'device_identifier': device.identifier}) + ) + context = super(RegisterGuestFormView, self).get_context_data( **kwargs ) context["cafe"] = cafe context["device"] = device - context["mail"] = self.kwargs['mail'] + context["mail"] = mail return context