# -*- coding: utf-8 -*- from django import forms from django.utils.translation import ugettext_lazy 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')