# -*- coding: utf-8 -*- from django import forms from django.utils.translation import ugettext as _ from accounts.models import User from models import Catalog, Tickets, Remote, Participation, Translation, Visit, CURENCIES from exposition.models import Exposition from conference.models import Conference from seminar.models import Seminar class AbstractOrderForm(forms.ModelForm): person_inf = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'Контактное лицо')})) country = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'Страна')})) city = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'Город')})) phone = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'Контактный номер телефона')})) person = forms.EmailField(widget=forms.TextInput(attrs={'placeholder': _(u'Электронная почта')})) currency = forms.CharField(widget=forms.HiddenInput()) exposition = forms.CharField(widget=forms.HiddenInput(), required=False) conference = forms.CharField(widget=forms.HiddenInput(), required=False) seminar = forms.CharField(widget=forms.HiddenInput(), required=False) def clean_exposition(self): exp_id = self.cleaned_data.get('exposition') if not exp_id: return None try: return Exposition.objects.get(id=exp_id) except Exposition.DoesNotExist: return None def clean_seminar(self): sem_id = self.cleaned_data.get('seminar') if not sem_id: return None try: return Seminar.objects.get(id=sem_id) except Seminar.DoesNotExist: return None def clean_conference(self): conf_id = self.cleaned_data.get('conference') if not conf_id: return None try: return Conference.objects.get(id=conf_id) except Conference.DoesNotExist: return None def clean_person(self): cleaned_data = super(AbstractOrderForm, self).clean() email = cleaned_data.get('person') try: user = User.objects.get(username=email) except User.DoesNotExist: fname = '' lname = '' person_inf = cleaned_data.get('person_inf') if person_inf: person_inf = person_inf.split(' ') fname = person_inf[0] lname = ' '.join(person_inf[1:]) user = User.objects.create_user(email, fname, lname) return user def clean_phone(self): cleaned_data = super(AbstractOrderForm, self).clean() phone = cleaned_data.get('phone') if not phone: return deduct = ('-','(',')','.',' ') for elem in deduct: phone = phone.replace(elem, '') if phone.isdigit(): return phone else: raise forms.ValidationError(_(u'Введите правильный телефон')) class CatalogForm(AbstractOrderForm): class Meta: model = Catalog class TicketsForm(AbstractOrderForm): class Meta: model = Tickets ADDITIONAL_REMOTE_CHOICES = [(_(u'официальный каталог'), _(u'официальный каталог')), (_(u'фотоотчет'), _(u'фотоотчет')), (_(u'видеоотчет'), _(u'видеоотчет')) ] class RemoteForm(AbstractOrderForm): additional = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=ADDITIONAL_REMOTE_CHOICES) class Meta: model = Remote def clean_additional(self): additional = self.cleaned_data.get('additional') if not additional: return '' else: return ', '.join(additional) AREA_TYPE_CHOICES=[(_(u'оборудованная'), _(u'оборудованная')), (_(u'не оборудованная'), _(u'не оборудованная')) ] class ParticipationForm(AbstractOrderForm): area_type = forms.ChoiceField(choices=AREA_TYPE_CHOICES, required=False) company_inf = forms.CharField(required=False, widget=forms.Textarea(attrs={'placeholder': _(u'Краткое описание, вид деятельности компании')})) class Meta: model = Participation LANGS = [(_(u'Русский'), _(u'Русский'))] from theme.models import Theme class TranslationForm(AbstractOrderForm): languages = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=LANGS) themes = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=[(theme.id, theme.id) for theme in Theme.objects.language().filter()]) fr = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')})) to = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')})) class Meta: model = Translation HOTEL_ADDITIONAL_CHOICES = [('', _(u'Выберите')),(_(u'Условие1'), _(u'Условие1')), (_(u'Условие2'), _(u'Условие2')),(_(u'Условие3'), _(u'Условие3'))] AVIA_TYPE_CHOICES = [(_(u'Прямой'), _(u'Прямой')), (_(u'С пересадкой'), _(u'С пересадкой')), (_(u'Бизнес-класс'), _(u'Бизнес-класс')), (_(u'Эконом-класс'), _(u'Эконом-класс'))] HOTEL_LOCATION_CHOICES = [('', _(u'Выберите')), (_(u'Расположение1'), _(u'Расположение1')), (_(u'Расположение2'), _(u'Расположение2'))] HOTEL_BUDGET_ADD = [('', _(u'Выберите')), (_(u'В сутки'), _(u'В сутки')), (_(u'В неделю'), _(u'В неделю'))] class VisitForm(AbstractOrderForm): fr = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')})) to = forms.DateField(widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')})) hotel_additional = forms.ChoiceField(choices=HOTEL_ADDITIONAL_CHOICES, required=False) hotel_stars = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=[('1','1'),('2','2'),('3','3'),('4','4'),('5','5')]) hotel_location = forms.ChoiceField(choices=HOTEL_LOCATION_CHOICES, required=False) hotel_budget_add = forms.ChoiceField(choices=HOTEL_BUDGET_ADD, required=False) languages = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=LANGS) themes = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=[(theme.name, theme.name) for theme in Theme.objects.all()]) avia_type = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(), choices=AVIA_TYPE_CHOICES) class Meta: model = Visit def clean_hotel_stars(self): hotel_stars = self.cleaned_data.get('hotel_stars') if not hotel_stars: return '' else: return ', '.join(hotel_stars) def clean_languages(self): languages = self.cleaned_data.get('languages') if not languages: return '' else: return ', '.join(languages) def clean_themes(self): themes = self.cleaned_data.get('themes') if not themes: return '' else: return ', '.join(themes) def clean_avia_type(self): avia_type = self.cleaned_data.get('avia_type') if not avia_type: return '' else: return ', '.join(avia_type)