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