217 lines
7.3 KiB
Python
217 lines
7.3 KiB
Python
|
from django import forms
|
||
|
from django.contrib.auth import authenticate
|
||
|
from django.core.mail import EmailMultiAlternatives
|
||
|
from django.template.loader import render_to_string
|
||
|
from django.utils.translation import gettext_lazy as _
|
||
|
|
||
|
from membership.models import CustomUser
|
||
|
from .models import ContactMessage, BillingAddress, UserBillingAddress
|
||
|
|
||
|
|
||
|
# from utils.fields import CountryField
|
||
|
|
||
|
|
||
|
class SignupFormMixin(forms.ModelForm):
|
||
|
confirm_password = forms.CharField(widget=forms.PasswordInput())
|
||
|
password = forms.CharField(widget=forms.PasswordInput())
|
||
|
|
||
|
class Meta:
|
||
|
model = CustomUser
|
||
|
fields = ['name', 'email', 'password']
|
||
|
widgets = {
|
||
|
'name': forms.TextInput(
|
||
|
attrs={'placeholder': _('Enter your name or company name')}),
|
||
|
}
|
||
|
|
||
|
def clean_confirm_password(self):
|
||
|
password = self.cleaned_data.get('password')
|
||
|
confirm_password = self.cleaned_data.get('confirm_password')
|
||
|
if not confirm_password == password:
|
||
|
raise forms.ValidationError("Passwords don't match")
|
||
|
return confirm_password
|
||
|
|
||
|
|
||
|
class LoginFormMixin(forms.Form):
|
||
|
email = forms.CharField(widget=forms.EmailInput())
|
||
|
password = forms.CharField(widget=forms.PasswordInput())
|
||
|
|
||
|
class Meta:
|
||
|
fields = ['email', 'password']
|
||
|
|
||
|
def clean(self):
|
||
|
email = self.cleaned_data.get('email')
|
||
|
password = self.cleaned_data.get('password')
|
||
|
is_auth = authenticate(email=email, password=password)
|
||
|
if not is_auth:
|
||
|
raise forms.ValidationError(
|
||
|
_("Your username and/or password were incorrect."))
|
||
|
return self.cleaned_data
|
||
|
|
||
|
def clean_email(self):
|
||
|
email = self.cleaned_data.get('email')
|
||
|
try:
|
||
|
CustomUser.objects.get(email=email)
|
||
|
return email
|
||
|
except CustomUser.DoesNotExist:
|
||
|
raise forms.ValidationError(_("User does not exist"))
|
||
|
|
||
|
|
||
|
class ResendActivationEmailForm(forms.Form):
|
||
|
email = forms.CharField(widget=forms.EmailInput())
|
||
|
|
||
|
class Meta:
|
||
|
fields = ['email']
|
||
|
|
||
|
def clean_email(self):
|
||
|
email = self.cleaned_data.get('email')
|
||
|
try:
|
||
|
c = CustomUser.objects.get(email=email)
|
||
|
if c.validated == 1:
|
||
|
raise forms.ValidationError(
|
||
|
_("The account is already active."))
|
||
|
return email
|
||
|
except CustomUser.DoesNotExist:
|
||
|
raise forms.ValidationError(_("User does not exist"))
|
||
|
|
||
|
|
||
|
class PasswordResetRequestForm(forms.Form):
|
||
|
email = forms.CharField(widget=forms.EmailInput())
|
||
|
|
||
|
class Meta:
|
||
|
fields = ['email']
|
||
|
|
||
|
def clean_email(self):
|
||
|
email = self.cleaned_data.get('email')
|
||
|
try:
|
||
|
CustomUser.objects.get(email=email)
|
||
|
return email
|
||
|
except CustomUser.DoesNotExist:
|
||
|
raise forms.ValidationError(_("User does not exist"))
|
||
|
|
||
|
|
||
|
class SetPasswordForm(forms.Form):
|
||
|
"""
|
||
|
A form that lets a user change set their password without entering the old
|
||
|
password
|
||
|
"""
|
||
|
error_messages = {
|
||
|
'password_mismatch': _("The two password fields didn't match."),
|
||
|
}
|
||
|
new_password1 = forms.CharField(label=_("New password"),
|
||
|
widget=forms.PasswordInput)
|
||
|
new_password2 = forms.CharField(label=_("New password confirmation"),
|
||
|
widget=forms.PasswordInput)
|
||
|
|
||
|
def clean_new_password2(self):
|
||
|
password1 = self.cleaned_data.get('new_password1')
|
||
|
password2 = self.cleaned_data.get('new_password2')
|
||
|
if password1 and password2:
|
||
|
if password1 != password2:
|
||
|
raise forms.ValidationError(
|
||
|
self.error_messages['password_mismatch'],
|
||
|
code='password_mismatch', )
|
||
|
return password2
|
||
|
|
||
|
|
||
|
class EditCreditCardForm(forms.Form):
|
||
|
token = forms.CharField(widget=forms.HiddenInput())
|
||
|
|
||
|
|
||
|
class BillingAddressForm(forms.ModelForm):
|
||
|
token = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||
|
card = forms.CharField(widget=forms.HiddenInput(), required=False)
|
||
|
|
||
|
class Meta:
|
||
|
model = BillingAddress
|
||
|
fields = ['cardholder_name', 'street_address',
|
||
|
'city', 'postal_code', 'country', 'vat_number']
|
||
|
labels = {
|
||
|
'cardholder_name': _('Cardholder Name'),
|
||
|
'street_address': _('Street Address'),
|
||
|
'city': _('City'),
|
||
|
'postal_code': _('Postal Code'),
|
||
|
'Country': _('Country'),
|
||
|
'VAT Number': _('VAT Number')
|
||
|
}
|
||
|
|
||
|
|
||
|
class BillingAddressFormSignup(BillingAddressForm):
|
||
|
name = forms.CharField(label=_('Name'))
|
||
|
email = forms.EmailField(label=_('Email Address'))
|
||
|
field_order = ['name', 'email']
|
||
|
|
||
|
class Meta:
|
||
|
model = BillingAddress
|
||
|
fields = ['name', 'email', 'cardholder_name', 'street_address',
|
||
|
'city', 'postal_code', 'country', 'vat_number']
|
||
|
labels = {
|
||
|
'name': 'Name',
|
||
|
'email': _('Email'),
|
||
|
'cardholder_name': _('Cardholder Name'),
|
||
|
'street_address': _('Street Address'),
|
||
|
'city': _('City'),
|
||
|
'postal_code': _('Postal Code'),
|
||
|
'Country': _('Country'),
|
||
|
'vat_number': _('VAT Number')
|
||
|
}
|
||
|
|
||
|
def clean_email(self):
|
||
|
email = self.cleaned_data.get('email')
|
||
|
try:
|
||
|
CustomUser.objects.get(email=email)
|
||
|
raise forms.ValidationError(
|
||
|
_("The email %(email)s is already registered with us. "
|
||
|
"Please reset your password and access your account.") %
|
||
|
{'email': email}
|
||
|
)
|
||
|
except CustomUser.DoesNotExist:
|
||
|
return email
|
||
|
|
||
|
|
||
|
class UserBillingAddressForm(forms.ModelForm):
|
||
|
user = forms.ModelChoiceField(queryset=CustomUser.objects.all(),
|
||
|
widget=forms.HiddenInput())
|
||
|
|
||
|
class Meta:
|
||
|
model = UserBillingAddress
|
||
|
fields = ['cardholder_name', 'street_address',
|
||
|
'city', 'postal_code', 'country', 'user', 'vat_number']
|
||
|
labels = {
|
||
|
'cardholder_name': _('Cardholder Name'),
|
||
|
'street_address': _('Street Building'),
|
||
|
'city': _('City'),
|
||
|
'postal_code': _('Postal Code'),
|
||
|
'Country': _('Country'),
|
||
|
'vat_number': _('VAT Number'),
|
||
|
}
|
||
|
|
||
|
|
||
|
class ContactUsForm(forms.ModelForm):
|
||
|
error_css_class = 'autofocus'
|
||
|
|
||
|
class Meta:
|
||
|
model = ContactMessage
|
||
|
fields = ['name', 'email', 'phone_number', 'message']
|
||
|
widgets = {
|
||
|
'name': forms.TextInput(attrs={'class': u'form-control'}),
|
||
|
'email': forms.TextInput(attrs={'class': u'form-control'}),
|
||
|
'phone_number': forms.TextInput(attrs={'class': u'form-control'}),
|
||
|
'message': forms.Textarea(attrs={'class': u'form-control'}),
|
||
|
}
|
||
|
labels = {
|
||
|
'name': _('Name'),
|
||
|
'email': _('Email'),
|
||
|
'phone_number': _('Phone number'),
|
||
|
'message': _('Message'),
|
||
|
}
|
||
|
|
||
|
def send_email(self, email_to='info@digitalglarus.ch'):
|
||
|
text_content = render_to_string(
|
||
|
'emails/contact.txt', {'data': self.cleaned_data})
|
||
|
html_content = render_to_string(
|
||
|
'emails/contact.html', {'data': self.cleaned_data})
|
||
|
email = EmailMultiAlternatives('Subject', text_content)
|
||
|
email.attach_alternative(html_content, "text/html")
|
||
|
email.to = [email_to]
|
||
|
email.send()
|