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.
152 lines
6.7 KiB
152 lines
6.7 KiB
# -*- coding: utf-8 -*-
|
|
from django import forms
|
|
from django.conf import settings
|
|
from ckeditor.widgets import CKEditorWidget
|
|
from django.core.exceptions import ValidationError
|
|
from functions.translate import fill_trans_fields, populate, ZERO_LANGUAGE, populate_all, fill_trans_fields_all
|
|
#models
|
|
from models import Review, Service
|
|
from country.models import Country, City
|
|
from functions.form_check import translit_with_separator
|
|
|
|
class ServiceForm(forms.Form):
|
|
countries = [(item.id, item.name) for item in Country.objects.all()]
|
|
cities = [(item.id, item.name) for item in City.objects.all()]
|
|
country = forms.MultipleChoiceField(choices=countries)
|
|
city = forms.MultipleChoiceField(choices=cities)
|
|
|
|
price = forms.CharField(label='Цена', required=False,
|
|
widget=forms.TextInput(attrs={'placeholder':'Цена'}))
|
|
currency_list = [('USD','USD'), ('EUR','EUR'), ('RUB','RUB')]
|
|
currency = forms.ChoiceField(choices=currency_list)
|
|
def __init__(self, *args, **kwargs):
|
|
super(ServiceForm, self).__init__(*args, **kwargs)
|
|
# creates translated form fields, example: name_ru, name_en
|
|
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs
|
|
if len(settings.LANGUAGES) in range(10):
|
|
for lid, (code, name) in enumerate(settings.LANGUAGES):
|
|
# using enumerate for detect iteration number
|
|
# first iteration is a default lang so it required fields
|
|
required = True if lid == 0 else False
|
|
self.fields['name_%s' % code] = forms.CharField(label='Названия', required=required)
|
|
self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required, widget=CKEditorWidget)
|
|
self.fields['description_%s' % code] = forms.CharField(label='Описание', required=required, widget=CKEditorWidget)
|
|
self.fields['advantage_%s' % code] = forms.CharField(label='Преимущества', required=False, widget=CKEditorWidget)
|
|
#meta data
|
|
self.fields['title_%s' % code] = forms.CharField(label='Тайтл', required=False, max_length=255,
|
|
widget=forms.TextInput(attrs={'style':'width: 550px'}))
|
|
self.fields['keywords_%s' % code] = forms.CharField(label='Description', required=False, max_length=255,
|
|
widget=forms.TextInput(attrs={'style':'width: 550px'}))
|
|
self.fields['descriptions_%s' % code] = forms.CharField(label='Keywords', required=False, max_length=255,
|
|
widget=forms.TextInput(attrs={'style':'width: 550px'}))
|
|
|
|
|
|
def save(self, id=None):
|
|
data = self.cleaned_data
|
|
|
|
#create new Tag object or get exists
|
|
if not id:
|
|
service = Service()
|
|
else:
|
|
service = Service.objects.get(id=id)
|
|
|
|
#flag = 0
|
|
#for item in data['types']:
|
|
# flag = flag | getattr(Theme.types, item)
|
|
|
|
#generates bitfield
|
|
countries = reduce(lambda x,y: x|y, (getattr(Service.country, item) for item in data['country']))
|
|
service.country= countries
|
|
|
|
cities = reduce(lambda x,y: x|y, (getattr(Service.city, item) for item in data['city']))
|
|
service.city = cities
|
|
|
|
service.url = translit_with_separator(data['name_ru'])
|
|
service.price = data['price']+' '+data['currency']#%s %s'%(data['price'], data['currency'])
|
|
# uses because in the next loop data will be overwritten
|
|
service.save()
|
|
|
|
#populate fields with zero language
|
|
zero_fields = {}
|
|
|
|
fill_trans_fields_all(Service, service, data, id, zero_fields)
|
|
|
|
#autopopulate
|
|
#populate empty fields and fields which was already populated
|
|
service_id = getattr(service, 'id')
|
|
populate_all(Service, data, service_id, zero_fields)
|
|
|
|
def clean_name_ru(self):
|
|
"""
|
|
check name which must be unique because it generate slug field
|
|
"""
|
|
cleaned_data = super(ServiceForm, self).clean()
|
|
name_ru = cleaned_data.get('name_ru')
|
|
try:
|
|
Service.objects.get(url=translit_with_separator(name_ru))
|
|
except:
|
|
return name_ru
|
|
|
|
raise ValidationError('Сервис с таким названием уже существует')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ReviewForm(forms.ModelForm):
|
|
rating = forms.ChoiceField(label='Оценка', choices=[(n, n) for n in range(1,6)], widget=forms.RadioSelect())
|
|
comment = forms.CharField(label='Комментарий', widget=CKEditorWidget)
|
|
class Meta:
|
|
model = Review
|
|
|
|
|
|
"""
|
|
class ReviewForm(forms.Form):
|
|
web_page = forms.CharField(label='Сайт', required=False)
|
|
rating = forms.ChoiceField(label=('Оценка'), choices=[(n,n) for n in range(1,6)],widget=forms.RadioSelect())
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(ReviewForm, self).__init__(*args, **kwargs)
|
|
# creates translated form fields, example: name_ru, name_en
|
|
# len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs
|
|
if len(settings.LANGUAGES) in range(10):
|
|
for lid, (code, name) in enumerate(settings.LANGUAGES):
|
|
# using enumerate for detect iteration number
|
|
# first iteration is a default lang so it required fields
|
|
required = True if lid == 0 else False
|
|
self.fields['company_%s' % code] = forms.CharField(label='Компания', required=required)
|
|
self.fields['contact_%s' % code] = forms.CharField(label='Контакт', required=required)
|
|
self.fields['comment_%s' % code] = forms.CharField(label='Коментарий', required=required, widget=CKEditorWidget)
|
|
|
|
services = [(item.id, item.name) for item in Service.objects.all()]
|
|
self.fields['service'] = forms.ChoiceField(label='Сервис', choices=services)
|
|
|
|
def save(self, id=None):
|
|
data = self.cleaned_data
|
|
|
|
if not id:
|
|
review = Review()
|
|
else:
|
|
review = Review.objects.get(id=id)
|
|
|
|
review.rating = data['rating']
|
|
review.web_page = data['web_page']
|
|
|
|
if data.get('service'):
|
|
review.service = Service.objects.get(id=data['service'])
|
|
|
|
review.save()
|
|
|
|
|
|
#populate fields with zero language
|
|
zero_fields = {}
|
|
|
|
fill_trans_fields_all(Review, review, data, id, zero_fields)
|
|
|
|
#autopopulate
|
|
#populate empty fields and fields which was already populated
|
|
review_id = getattr(review, 'id')
|
|
populate_all(Review, data, review_id, zero_fields)
|
|
|
|
""" |