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.
136 lines
5.4 KiB
136 lines
5.4 KiB
# -*- coding: utf-8 -*-
|
|
from django import forms
|
|
from django.conf import settings
|
|
|
|
languages = [code for code in settings.LANGUAGES]
|
|
|
|
|
|
|
|
class ImportEventForm(forms.Form):
|
|
excel_file = forms.FileField(label='Выберите файл')
|
|
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition', 'Выставка'),
|
|
('conference', 'Конференция'),
|
|
('seminar', 'Семинар'),
|
|
('webinar', 'Вебинар')])
|
|
language = forms.ChoiceField(label='Выберите язык', choices=languages)
|
|
|
|
|
|
from theme.models import Theme
|
|
from country.models import Country
|
|
from django.db.models.loading import get_model
|
|
import StringIO
|
|
from functions.translate import get_all_fields, get_all_verbose_names
|
|
|
|
|
|
class ExportEventForm(forms.Form):
|
|
event = forms.ChoiceField(label='Выберите тип события', choices=[('exposition.Exposition', 'Выставка'),
|
|
('conference.Conference', 'Конференция'),
|
|
('seminar.Seminar', 'Семинар'),
|
|
('webinar.Webinar', 'Вебинар')])
|
|
language = forms.ChoiceField(label='Выберите язык', choices=languages)
|
|
date_from = forms.DateField(label='С')
|
|
date_to = forms.DateField(label='До')
|
|
theme = forms.ModelMultipleChoiceField(label='Направление', queryset=Theme.objects.all(), required=False)
|
|
country = forms.ModelMultipleChoiceField(label='Страны', queryset=Country.objects.all(), required=False)
|
|
|
|
def generate_dicts(self):
|
|
data = self.cleaned_data
|
|
event = data['event']
|
|
language = data['language']
|
|
date_from = data['date_from']
|
|
date_to = data['date_to']
|
|
theme = data['theme']
|
|
country = data['country']
|
|
# get model of event
|
|
model = get_model(event.split('.')[0], event.split('.')[1])
|
|
#
|
|
objects = model.objects.language(language).filter(data_begin__range=[date_from, date_to],
|
|
country__in=country,
|
|
theme__in=theme
|
|
).distinct()
|
|
|
|
if not objects:
|
|
return None
|
|
# get fields
|
|
# in list exclude fields
|
|
fields = get_all_fields(objects[0],['organiser', 'tag', 'descriptions', 'keywords', 'title', 'theme',
|
|
'users', 'company', 'translations', 'business_program', 'created',
|
|
'modified'])
|
|
# readable names
|
|
names = get_all_verbose_names(objects[0], fields)
|
|
|
|
objects_list = []
|
|
|
|
for object in objects:
|
|
obj_dict = {}
|
|
# generate dict with field values
|
|
for field in fields:
|
|
obj_dict = {'name': field, 'value': getattr(object, field),
|
|
'verbose_name': names[field]}
|
|
|
|
#obj_dict[field] = {'value': getattr(object, field), 'verbose_name': names[field]}
|
|
|
|
objects_list.append(obj_dict)
|
|
|
|
return objects_list
|
|
|
|
"""
|
|
def generate_dicts(self):
|
|
data = self.cleaned_data
|
|
event = data['event']
|
|
language = data['language']
|
|
date_from = data['date_from']
|
|
date_to = data['date_to']
|
|
theme = data['theme']
|
|
country = data['country']
|
|
# get model of event
|
|
model = get_model(event.split('.')[0], event.split('.')[1])
|
|
#
|
|
objects = model.objects.language(language).filter(data_begin__range=[date_from, date_to],
|
|
country__in=country,
|
|
theme__in=theme
|
|
).distinct()
|
|
|
|
if not objects:
|
|
return None
|
|
# get fields
|
|
# in list exclude fields
|
|
fields = get_all_fields(objects[0],['organiser', 'tag', 'descriptions', 'keywords', 'title', 'theme',
|
|
'users', 'company', 'translations', 'business_program', 'created',
|
|
'modified'])
|
|
# readable names
|
|
names = get_all_verbose_names(objects[0], fields)
|
|
|
|
objects_list = []
|
|
|
|
for object in objects:
|
|
obj_dict = {}
|
|
# generate dict with field values
|
|
for field in fields:
|
|
obj_dict[field] = {'value': getattr(object, field), 'verbose_name': names[field]}
|
|
|
|
objects_list.append(obj_dict)
|
|
|
|
return objects_list
|
|
"""
|
|
|
|
def clean_theme(self):
|
|
"""
|
|
Set all themes if no theme selected
|
|
"""
|
|
theme = self.cleaned_data.get('theme')
|
|
if not theme:
|
|
theme = Theme.objects.all()
|
|
|
|
return theme
|
|
|
|
|
|
def clean_country(self):
|
|
"""
|
|
Set all countries if no country selected
|
|
"""
|
|
country = self.cleaned_data.get('country')
|
|
if not country:
|
|
country = Country.objects.all()
|
|
|
|
return country |