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.
328 lines
11 KiB
328 lines
11 KiB
# -*- coding: utf-8 -*-
|
|
from django.http import HttpResponseRedirect, HttpResponse
|
|
from django.contrib import messages
|
|
#models
|
|
from models import Exposition
|
|
from functions.custom_views import ExpoListView, ExpoMixin, EventDetail, single_page_filter
|
|
from django.views.generic import ListView, DetailView, FormView
|
|
from haystack.query import EmptySearchQuerySet
|
|
from functions.search_forms import ExpositionSearchForm
|
|
from service.views import order_forms
|
|
from django.shortcuts import get_object_or_404
|
|
from django.http import Http404
|
|
from django.utils import translation
|
|
#
|
|
from service.models import Service
|
|
from country.models import Country
|
|
from city.models import City
|
|
from company.models import Company
|
|
from theme.models import Theme, Tag
|
|
import json
|
|
from django.utils.translation import ugettext as _
|
|
|
|
|
|
class ExpositionByCountry(ListView):
|
|
model = Country
|
|
template_name = 'exposition/exposition_by_country.html'
|
|
def get_queryset(self):
|
|
lang = translation.get_language()
|
|
return self.model.objects.select_related('exposition_country')\
|
|
.filter(exposition_country__country__isnull=False, translations__language_code=lang)\
|
|
.order_by('translations__name').distinct()
|
|
|
|
|
|
class ExpositionBy(ListView):
|
|
template_name = 'exposition/exposition_by.html'
|
|
title1 = ''
|
|
title2 = ''
|
|
"""
|
|
abstact class
|
|
"""
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpositionBy, self).get_context_data(**kwargs)
|
|
context.update({'title1': self.title1, 'title2': self.title2})
|
|
|
|
return context
|
|
|
|
|
|
class ExpositionByTheme(ExpositionBy):
|
|
model = Theme
|
|
title1 = _(u'По тематикам')
|
|
title2 = _(u'Выставки мира по тематикам')
|
|
|
|
def get_queryset(self):
|
|
lang = translation.get_language()
|
|
return self.model.objects.select_related('exposition_themes')\
|
|
.filter(exposition_themes__theme__isnull=False, translations__language_code=lang)\
|
|
.order_by('translations__name').distinct()
|
|
|
|
|
|
|
|
|
|
class ExpositionByCity(ExpositionBy):
|
|
model = City
|
|
title1 = _(u'По городам')
|
|
title2 = _(u'Выставки мира по городам')
|
|
|
|
def get_queryset(self):
|
|
lang = translation.get_language()
|
|
return self.model.objects.select_related('exposition_city')\
|
|
.filter(exposition_city__city__isnull=False, translations__language_code=lang)\
|
|
.order_by('translations__name').distinct()
|
|
|
|
class ExpositionServiceView(FormView, ExpoMixin):
|
|
params = None
|
|
search_form = ExpositionSearchForm
|
|
model = Exposition
|
|
obj = None
|
|
service = None
|
|
|
|
|
|
def get_form_class(self):
|
|
url = self.kwargs.get('url')
|
|
form = order_forms.get(url)
|
|
if not form:
|
|
raise Http404
|
|
|
|
service = get_object_or_404(Service, url=url)
|
|
self.service = service
|
|
self.template_name = service.template
|
|
params = self.get_params()
|
|
for param in params:
|
|
|
|
if param.get('type') == 'country':
|
|
country = Country.objects.safe_get(url=param.get('url'))
|
|
if country:
|
|
param['name'] = country.name
|
|
|
|
if param.get('type') == 'city':
|
|
city = City.objects.safe_get(url=param.get('url'))
|
|
if city:
|
|
param['name'] = city.name
|
|
|
|
if param.get('type') == 'theme':
|
|
theme = Theme.objects.safe_get(url=param.get('url'))
|
|
if theme:
|
|
param['name'] = theme.name
|
|
|
|
if param.get('type') == 'tag':
|
|
tag = Tag.objects.safe_get(url=param.get('url'))
|
|
if tag:
|
|
param['name'] = tag.name
|
|
|
|
if param.get('type') == 'year':
|
|
param['name'] = param.get('url')
|
|
|
|
if param.get('type') == 'month':
|
|
monthes = {'jan': 1, 'feb': 2, 'mar': 3, 'apr': 4, 'may': 5, 'jun': 6,
|
|
'jul': 7, 'aug': 8, 'sep': 9, 'oct': 10, 'nov': 11, 'dec': 12}
|
|
|
|
param['name'] = param.get('url')
|
|
|
|
if param.get('type') == 'member' and self.model != Company:
|
|
param['name'] = param.get('url')
|
|
company = Company.objects.safe_get(url=param.get('url'))
|
|
if company:
|
|
param['name'] = company.name
|
|
|
|
if param.get('type') == single_page_filter.get(self.model):
|
|
try:
|
|
self.obj = self.model.objects.get(url=param.get('url'))
|
|
|
|
except self.model.DoesNotExist:
|
|
raise Http404
|
|
|
|
|
|
param['name'] = self.obj.name
|
|
|
|
params.append({'type':'service', 'name':service.name})
|
|
self.params = params
|
|
return form
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpositionServiceView, self).get_context_data(**kwargs)
|
|
context['search_form'] = ExpositionSearchForm()
|
|
context['search_action'] = '/expositions/search/'
|
|
context['event'] = self.obj
|
|
context['service'] = self.service
|
|
context['filter'] = self.params
|
|
return context
|
|
|
|
def form_valid(self, form):
|
|
form.save()
|
|
messages.success(self.request, _(u'Ваш запрос был успешно отправлен'))
|
|
return HttpResponseRedirect(self.request.path)
|
|
|
|
#def form_invalid(self, form):
|
|
# return HttpResponse(form.errors)
|
|
|
|
|
|
|
|
|
|
class ExpositionSearchView(ListView):
|
|
paginate_by = 10
|
|
template_name = 'exposition/search.html'
|
|
search_form = ExpositionSearchForm
|
|
model = Exposition
|
|
|
|
def get_queryset(self):
|
|
|
|
if self.request.GET:
|
|
form = self.search_form(self.request.GET)
|
|
if form.is_valid():
|
|
return form.search()
|
|
else:
|
|
return EmptySearchQuerySet()
|
|
else:
|
|
return EmptySearchQuerySet()
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpositionSearchView, self).get_context_data(**kwargs)
|
|
|
|
context['search_form'] = ExpositionSearchForm(self.request.GET)
|
|
queries = self.request.GET.copy()
|
|
if queries.has_key('page'):
|
|
del queries['page']
|
|
context['queries'] = queries
|
|
context['search_action'] = '/expo/search/'
|
|
|
|
return context
|
|
|
|
|
|
class ExpositionView(ExpoListView):
|
|
model = Exposition
|
|
template_name = 'event_catalog.html'
|
|
search_form = ExpositionSearchForm
|
|
order = 'data_begin'
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpositionView, self).get_context_data(**kwargs)
|
|
context['search_action'] = '/expositions/search/'
|
|
return context
|
|
|
|
class ExpositionVisitors(ExpositionView):
|
|
model = Exposition
|
|
template_name = 'event_visitors.html'
|
|
|
|
def get_queryset(self):
|
|
|
|
params = self.get_params()
|
|
for param in params:
|
|
if param.get('type') == 'event':
|
|
exp = Exposition.objects.safe_get(url=param.get('url'))
|
|
#query = exp.users
|
|
param['name'] = exp.name
|
|
params.append({'type':'visitors', 'name':_(u'Посетители')})
|
|
|
|
self.params = params
|
|
return exp.users.all()
|
|
|
|
|
|
class ExpositionMembers(ExpoListView):
|
|
model = Exposition
|
|
template_name = 'event_members.html'
|
|
|
|
def get_queryset(self):
|
|
|
|
params = self.get_params()
|
|
for param in params:
|
|
if param.get('type') == 'event':
|
|
exp = Exposition.objects.safe_get(url=param.get('url'))
|
|
param['name'] = exp.name
|
|
#query = exp.users
|
|
params.append({'type':'members', 'name':_(u'Участники')})
|
|
self.params = params
|
|
return exp.company.all()
|
|
|
|
class ExpositionStatistic(ExpoListView):
|
|
model = Exposition
|
|
template_name = 'exposition_statistic.html'
|
|
def get_queryset(self):
|
|
params = self.get_params()
|
|
for param in params:
|
|
if param.get('type') == 'event':
|
|
exp = Exposition.objects.filter(url=param.get('url'))
|
|
param['name'] = exp[0].name
|
|
#query = exp.users
|
|
self.single_page = True
|
|
params.append({'type':'statistic', 'name':_(u'Статистика')})
|
|
self.params = params
|
|
return exp
|
|
|
|
class ExpositionProgramme(ExpoListView):
|
|
model = Exposition
|
|
template_name = 'exposition_programm.html'
|
|
def get_queryset(self):
|
|
params = self.get_params()
|
|
for param in params:
|
|
if param.get('type') == 'event':
|
|
exp = Exposition.objects.filter(url=param.get('url'))
|
|
param['name'] = exp[0].name
|
|
#query = exp.users
|
|
self.single_page = True
|
|
params.append({'type':'programme', 'name':_(u'Программа')})
|
|
self.params = params
|
|
return exp
|
|
|
|
class ExpositionPrice(ExpoListView):
|
|
model = Exposition
|
|
template_name = 'exposition_price.html'
|
|
def get_queryset(self):
|
|
params = self.get_params()
|
|
for param in params:
|
|
if param.get('type') == 'event':
|
|
exp = Exposition.objects.filter(url=param.get('url'))
|
|
param['name'] = exp[0].name
|
|
#query = exp.users
|
|
self.single_page = True
|
|
params.append({'type':'price', 'name':_(u'Стоимость посещения и участия')})
|
|
self.params = params
|
|
return exp
|
|
|
|
|
|
|
|
|
|
def exposition_add_calendar(request, id):
|
|
args = {'success': False}
|
|
user = request.user
|
|
|
|
if user.is_authenticated():
|
|
exp = Exposition.objects.safe_get(id=id)
|
|
if exp in user.calendar.expositions.all():
|
|
user.calendar.expositions.remove(exp)
|
|
args['in'] = False
|
|
else:
|
|
user.calendar.expositions.add(exp)
|
|
args['in'] = True
|
|
args['success'] = True
|
|
else:
|
|
args['not_authorized'] = True
|
|
args['success'] = True
|
|
|
|
return HttpResponse(json.dumps(args), content_type='application/json')
|
|
|
|
def exposition_visit(request, id):
|
|
args = {'success': False}
|
|
user = request.user
|
|
if user.is_authenticated():
|
|
exp = Exposition.objects.safe_get(id=id)
|
|
if user in exp.users.all():
|
|
exp.users.remove(user)
|
|
args['in'] = False
|
|
else:
|
|
exp.users.add(user)
|
|
args['in'] = True
|
|
|
|
args['success'] = True
|
|
"""
|
|
if exp:
|
|
exp.users.add(user)
|
|
args['success'] = True
|
|
"""
|
|
|
|
else:
|
|
args['not_authorized'] = True
|
|
args['success'] = True
|
|
|
|
return HttpResponse(json.dumps(args), content_type='application/json') |