from django import forms from django.utils.translation import ugettext_lazy as _ from datetime import datetime from utils.models import BillingAddress from utils.forms import LoginFormMixin, SignupFormMixin, BillingAddressForm from .models import MembershipType class LoginForm(LoginFormMixin): email = forms.CharField(widget=forms.EmailInput()) password = forms.CharField(widget=forms.PasswordInput()) class SignupForm(SignupFormMixin): confirm_password = forms.CharField(widget=forms.PasswordInput()) password = forms.CharField(widget=forms.PasswordInput()) name = forms.CharField(label='name', widget=forms.TextInput(attrs={'placeholder': 'Full name'})) class MembershipBillingForm(BillingAddressForm): token = forms.CharField(widget=forms.HiddenInput()) membership_type = forms.ModelChoiceField(queryset=MembershipType.objects.all(), widget=forms.HiddenInput()) class Meta: model = BillingAddress fields = ['membership_type', 'street_address', 'city', 'postal_code', 'country'] labels = { 'street_address': _('Street Address'), 'city': _('City'), 'postal_code': _('Postal Code'), 'country': _('Country'), } class BookingBillingForm(BillingAddressForm): token = forms.CharField(widget=forms.HiddenInput()) start_date = forms.DateField(widget=forms.HiddenInput()) end_date = forms.DateField(widget=forms.HiddenInput()) price = forms.FloatField(widget=forms.HiddenInput()) class Meta: model = BillingAddress fields = ['start_date', 'end_date', 'price', 'street_address', 'city', 'postal_code', 'country'] labels = { 'street_address': _('Street Address'), 'city': _('City'), 'postal_code': _('Postal Code'), 'country': _('Country'), } class BookingDateForm(forms.Form): start_date = forms.DateField(required=False) end_date = forms.DateField(required=False) date_range = forms.CharField(required=False) def clean_date_range(self): date_range = self.cleaned_data.get('date_range') dates = date_range.replace(' ', '').split('-') try: start_date, end_date = [datetime.strptime(date_string, "%m/%d/%Y").date() for date_string in dates] except ValueError: raise forms.ValidationError("Submit valid dates.") if start_date > end_date: raise forms.ValidationError("Your end date must be greather than your start date.") return start_date, end_date def clean(self): start_date, end_date = self.cleaned_data.get('date_range') self.cleaned_data['start_date'] = start_date self.cleaned_data['end_date'] = end_date return self.cleaned_data