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.
 
 
 
 
 
 

219 lines
9.4 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
from django.conf import settings
class AbstractOrderForm(forms.ModelForm):
event = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _(u'Интересующее событие')}) ,required=False)
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 save(self, commit=True, userlog=None):
obj = super(AbstractOrderForm, self).save(commit=False)
if userlog is not None:
for attr, val in userlog.iteritems():
setattr(obj, attr, val)
if commit:
obj.save()
return obj
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, required=False)
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.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Знание языков')}))
themes = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Тематика')}))
fr = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT,
widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT,
widget=forms.DateInput(attrs={'class': 'date dateTo', 'placeholder': _(u'дд.мм.гггг')}))
class Meta:
model = Translation
HOTEL_ADDITIONAL_CHOICES = [('', _(u'Выберите')), (_(u'Одноместное'), _(u'Одноместное')),
(_(u'Двухместное'), _(u'Двухместное')),(_(u'Трехместное'), _(u'Трехместное'))]
AVIA_TYPE_CHOICES = [(_(u'Прямой'), _(u'Прямой')), (_(u'С пересадкой'), _(u'С пересадкой')),
(_(u'Бизнес-класс'), _(u'Бизнес-класс')), (_(u'Эконом-класс'), _(u'Эконом-класс'))]
HOTEL_LOCATION_CHOICES = [('', _(u'Выберите')), (_(u'Любое'), _(u'Любое')),
(_(u'Рядом с выставкой'), _(u'Рядом с выставкой')),
(_(u'В центре'), _(u'В центре'))]
HOTEL_BUDGET_ADD = [(_(u'В сутки'), _(u'В сутки')), (_(u'За весь период'), _(u'За весь период'))]
class VisitForm(AbstractOrderForm):
fr = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT, required=False,
widget=forms.DateInput(attrs={'class': 'date dateFrom', 'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(input_formats=settings.CLIENT_DATE_FORMAT, required=False,
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(), required=False,
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.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Знание языков')}))
themes = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Тематика')}))
avia_type = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
choices=AVIA_TYPE_CHOICES, required=False)
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_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/'
country = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Страна')}))
city = forms.CharField(required=False, widget=forms.TextInput(attrs={'placeholder': _(u'Город')}))
type = forms.CharField(required=False, widget=forms.HiddenInput())
class Meta:
model = Advertising
class CallBackForm(forms.ModelForm):
class Meta:
model = CallBack
fields=('phone', 'person_inf')
class ParticipationLandingForm(ParticipationForm):
def __init__(self, *args, **kwargs):
super(ParticipationLandingForm, self).__init__(*args, **kwargs)
self.fields['city'].required = False
self.fields['country'].required = False
self.fields['area'].required = False
self.fields['person_inf'].widget.attrs['placeholder'] = _(u'Ваше имя')
self.fields['person'].widget.attrs['placeholder'] = _(u'Ваш e-mail')