# -*- 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, Advertising, CallBack, BuildStand 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(), required=False) 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 BuildStandForm(AbstractOrderForm): class Meta: model = BuildStand 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) class AdvertiseForm(AbstractOrderForm): action = '/service/advertise/' class Meta: model = Advertising class CallBackForm(forms.ModelForm): class Meta: model = CallBack fields=('phone', 'person_inf')