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

# -*- 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')