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.
 
 
 
 
 
 

212 lines
8.3 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, 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/com_rek/'
class Meta:
model = Advertising
class CallBackForm(forms.ModelForm):
class Meta:
model = CallBack
fields=('phone', 'person_inf')