You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
208 lines
8.2 KiB
208 lines
8.2 KiB
# -*- 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
|
|
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 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') |