|
|
@@ -1,19 +1,58 @@
|
|
|
from django import forms
|
|
|
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
|
|
|
+from django.core.exceptions import ValidationError
|
|
|
|
|
|
from .models import ReyMotaUser
|
|
|
|
|
|
|
|
|
class ReyMotaUserCreationForm(UserCreationForm):
|
|
|
+ invitation_code = forms.CharField(
|
|
|
+ max_length=32,
|
|
|
+ label="Código de Invitación",
|
|
|
+ help_text="Introduce el código que has recibido"
|
|
|
+ )
|
|
|
|
|
|
class Meta:
|
|
|
model = ReyMotaUser
|
|
|
- fields = ("email", "nombre", "foto")
|
|
|
+ fields = ("email", "nombre", "foto", "invitation_code")
|
|
|
labels = {'email': 'Dirección de correo'}
|
|
|
|
|
|
+ def __init__(self, *args, **kwargs):
|
|
|
+ super().__init__(*args, **kwargs)
|
|
|
+ code = self.initial.get('invitation_code')
|
|
|
+ if code:
|
|
|
+ self.fields['invitation_code'].initial = code
|
|
|
+
|
|
|
+ def clean_invitation_code(self):
|
|
|
+ code = self.cleaned_data.get('invitation_code')
|
|
|
+ if not code:
|
|
|
+ raise ValidationError("El código de invitación es obligatorio.")
|
|
|
+
|
|
|
+ from accounts.models import InvitationCode
|
|
|
+ try:
|
|
|
+ invitation = InvitationCode.objects.get(code=code)
|
|
|
+ if not invitation.is_valid():
|
|
|
+ if invitation.is_used:
|
|
|
+ raise ValidationError("Este código ya ha sido utilizado.")
|
|
|
+ else:
|
|
|
+ raise ValidationError("El código ha expirado.")
|
|
|
+ except InvitationCode.DoesNotExist:
|
|
|
+ raise ValidationError("El código no es válido.")
|
|
|
+
|
|
|
+ return code
|
|
|
+
|
|
|
+ def save(self, commit=True):
|
|
|
+ user = super().save(commit=False)
|
|
|
+ if commit:
|
|
|
+ user.save()
|
|
|
+ code = self.cleaned_data.get('invitation_code')
|
|
|
+ invitation = InvitationCode.objects.get(code=code)
|
|
|
+ invitation.mark_as_used(user)
|
|
|
+ return user
|
|
|
+
|
|
|
|
|
|
class ReyMotaUserChangeForm(UserChangeForm):
|
|
|
|
|
|
class Meta:
|
|
|
model = ReyMotaUser
|
|
|
- fields = ("email", "foto")
|
|
|
+ fields = ("email", "foto")
|