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.
423 lines
14 KiB
423 lines
14 KiB
# -*- coding: utf-8 -*-
|
|
import json
|
|
import datetime
|
|
from django.http import HttpResponseRedirect, HttpResponse
|
|
from django.contrib import messages
|
|
from django.contrib.contenttypes.models import ContentType
|
|
from django.conf import settings
|
|
from django.views.generic import ListView, DetailView
|
|
from django.utils.translation import ugettext as _
|
|
from django.shortcuts import get_object_or_404
|
|
from django.http import Http404
|
|
from django.utils import translation
|
|
#models
|
|
from models import Exposition
|
|
from service.views import order_forms
|
|
from service.models import Service
|
|
from country.models import Country
|
|
from city.models import City
|
|
from theme.models import Theme, Tag
|
|
from note.models import Note
|
|
from functions.custom_views import ExpoSearchView
|
|
from functions.search_forms import ExpositionSearchForm
|
|
from functions.custom_views import ExpoSearchView
|
|
|
|
|
|
|
|
|
|
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, 'catalog': self.catalog})
|
|
|
|
return context
|
|
|
|
|
|
class ExpositionByCountry(ExpositionBy):
|
|
model = Country
|
|
title1 = _(u'По странам')
|
|
title2 = _(u'Выставки мира по странам')
|
|
catalog = 'country/'
|
|
|
|
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 ExpositionByTheme(ExpositionBy):
|
|
model = Theme
|
|
title1 = _(u'По тематикам')
|
|
title2 = _(u'Выставки мира по тематикам')
|
|
catalog = 'theme/'
|
|
|
|
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'Выставки мира по городам')
|
|
catalog = 'city/'
|
|
|
|
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 ExpositionSearchView(ExpoSearchView):
|
|
#paginate_by = 10
|
|
template_name = 'exposition/search.html'
|
|
search_form = ExpositionSearchForm
|
|
model = Exposition
|
|
|
|
|
|
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.get_expos():
|
|
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')
|
|
#------------------------------------------------------------------------------
|
|
|
|
|
|
class ExpoDetail(DetailView):
|
|
model = Exposition
|
|
slug_field = 'url'
|
|
template_name = 'client/exposition/exposition_detail.html'
|
|
|
|
class ExpositionProgramme(DetailView):
|
|
model = Exposition
|
|
slug_field = 'url'
|
|
template_name = 'client/exposition/programm.html'
|
|
|
|
|
|
class ExpositionPrice(DetailView):
|
|
model = Exposition
|
|
slug_field = 'url'
|
|
template_name = 'client/exposition/price.html'
|
|
|
|
|
|
|
|
class ExpositionStatistic(DetailView):
|
|
model = Exposition
|
|
slug_field = 'url'
|
|
template_name = 'client/exposition/statistic.html'
|
|
|
|
from django.views.generic.edit import FormMixin, ModelFormMixin
|
|
class ExpositionServiceView(FormMixin, DetailView):
|
|
model = Exposition
|
|
slug_field = 'url'
|
|
service = None
|
|
|
|
def post(self, request, *args, **kwargs):
|
|
self.object = self.get_object()
|
|
service_url = self.kwargs.get('service_url')
|
|
service = get_object_or_404(Service, url=service_url)
|
|
service_form = order_forms.get(service_url)
|
|
self.form_class = service_form
|
|
form = self.get_form(service_form)
|
|
|
|
if form.is_valid():
|
|
return self.form_valid(form)
|
|
else:
|
|
return self.form_invalid(form)
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpositionServiceView, self).get_context_data(**kwargs)
|
|
service_url = self.kwargs.get('service_url')
|
|
service = get_object_or_404(Service, url=service_url)
|
|
self.service = service
|
|
self.template_name = service.template
|
|
form = order_forms.get(service_url)
|
|
self.form_class = form
|
|
if not form:
|
|
raise Http404
|
|
context['form'] = self.get_form(self.form_class)
|
|
context['service'] = service
|
|
context['object'] = self.get_object()
|
|
return context
|
|
|
|
def form_valid(self, form):
|
|
order = form.save(commit=False)
|
|
order.exposition = self.object
|
|
order.save()
|
|
messages.success(self.request, _(u'Ваш запрос был успешно отправлен'))
|
|
return HttpResponseRedirect(self.request.path)
|
|
|
|
def get_initial(self):
|
|
"""
|
|
Returns the initial data to use for forms on this view.
|
|
"""
|
|
if self.request.user.is_authenticated():
|
|
user = self.request.user
|
|
|
|
initial = {'person_inf': user.get_full_name(),
|
|
'person': user.email,
|
|
'country': user.profile.country.name if user.profile.country else '',
|
|
'city':user.profile.city.name if user.profile.city else '',
|
|
'phone': user.profile.phone if user.profile.phone else ''}
|
|
|
|
|
|
|
|
return initial
|
|
else:
|
|
return self.initial.copy()
|
|
|
|
|
|
class ExpoList(ListView):
|
|
model = Exposition
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
template_name = 'client/exposition/exposition_list.html'
|
|
search_form = ExpositionSearchForm
|
|
catalog_url = '/expo/'
|
|
year = None
|
|
month = None
|
|
|
|
def get_queryset(self):
|
|
if self.request.user.is_staff:
|
|
now = datetime.datetime.now().date()
|
|
qs = self.model.objects.filter(data_begin__gte=now).order_by('data_begin')
|
|
else:
|
|
qs = self.model.enable.all()
|
|
|
|
|
|
year = self.kwargs.get('year')
|
|
if year:
|
|
qs = qs.filter(data_begin__year=year)
|
|
# info for breadscrumbs
|
|
self.year = {'text': year, 'link': '%s%s/'%(self.catalog_url, year)}
|
|
|
|
month = self.kwargs.get('month')
|
|
if month and MONTHES.get(month):
|
|
qs = qs.filter(data_begin__month=MONTHES[month]['value'])
|
|
self.month = {'text': MONTHES[month]['name'], 'link': '%s%s/%s/'%(self.catalog_url, year, month)}
|
|
return qs
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpoList, self).get_context_data(**kwargs)
|
|
context['month'] = self.month
|
|
context['catalog_url'] = self.catalog_url
|
|
context['search_form'] = self.search_form
|
|
context['year'] = self.year
|
|
context['month'] = self.month
|
|
return context
|
|
|
|
MONTHES = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
|
|
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
|
|
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
|
|
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
|
|
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
|
|
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
|
|
|
|
class ExpoCatalog(ListView):
|
|
model = Exposition
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
template_name = 'exposition/catalog.html'
|
|
search_form = ExpositionSearchForm
|
|
filter_object = None
|
|
year = None
|
|
month = None
|
|
|
|
def get_filtered_qs(self):
|
|
# diferent for views
|
|
pass
|
|
|
|
def get_queryset(self):
|
|
qs = self.get_filtered_qs()
|
|
|
|
year = self.kwargs.get('year')
|
|
if year:
|
|
qs = qs.filter(data_begin__year=year)
|
|
# info for breadscrumbs
|
|
self.year = {'text': year, 'link': '%s%s/%s/'%(self.catalog_url, self.filter_object.url, year)}
|
|
|
|
|
|
month = self.kwargs.get('month')
|
|
monthes = {'jan': {'value': 1, 'name': _(u'Январь')}, 'feb': {'value': 2, 'name': _(u'Февраль')},
|
|
'mar': {'value': 3, 'name': _(u'Март')}, 'apr': {'value': 4, 'name': _(u'Апрель')},
|
|
'may': {'value': 5, 'name': _(u'Май')}, 'jun': {'value': 6, 'name': _(u'Июнь')},
|
|
'jul': {'value': 7, 'name': _(u'Июль')}, 'aug': {'value': 8, 'name': _(u'Август')},
|
|
'sep': {'value': 9, 'name': _(u'Сентябрь')}, 'oct': {'value': 10, 'name': _(u'Октябрь')},
|
|
'nov': {'value': 11, 'name': _(u'Ноябрь')}, 'dec': {'value': 12, 'name': _(u'Декабрь')}}
|
|
if month and monthes.get(month):
|
|
qs = qs.filter(data_begin__month=monthes[month]['value'])
|
|
self.month = {'text': monthes[month]['name'], 'link': '%s%s/%s/%s/'%(self.catalog_url, self.filter_object.url, year, month)}
|
|
|
|
return qs.order_by('data_begin')
|
|
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpoCatalog, self).get_context_data(**kwargs)
|
|
context['search_form'] = self.search_form
|
|
context['filter_object'] = self.filter_object
|
|
context['year'] = self.year
|
|
context['month'] = self.month
|
|
context['catalog_url'] = self.catalog_url
|
|
return context
|
|
|
|
class ExpoCountryCatalog(ExpoCatalog):
|
|
catalog_url = '/expo/country/'
|
|
def get_filtered_qs(self):
|
|
#this method used in parent get_queryset
|
|
slug = self.kwargs.get('slug')
|
|
country = get_object_or_404(Country, url=slug)
|
|
self.filter_object = country
|
|
qs = self.model.enable.filter(country=country)
|
|
return qs
|
|
|
|
class ExpoCityCatalog(ExpoCatalog):
|
|
catalog_url = '/expo/city/'
|
|
def get_filtered_qs(self):
|
|
#this method used in parent get_queryset
|
|
slug = self.kwargs.get('slug')
|
|
city = get_object_or_404(City, url=slug)
|
|
qs = self.model.enable.filter(city=city)
|
|
self.filter_object = city
|
|
return qs
|
|
|
|
|
|
class ExpoThemeCatalog(ExpoCatalog):
|
|
catalog_url = '/expo/theme/'
|
|
def get_filtered_qs(self):
|
|
#this method used in parent get_queryset
|
|
slug = self.kwargs.get('slug')
|
|
theme = get_object_or_404(Theme, url=slug)
|
|
qs = self.model.enable.filter(theme=theme)
|
|
self.filter_object = theme
|
|
return qs
|
|
|
|
|
|
class ExpoTagCatalog(ExpoCatalog):
|
|
catalog_url = '/expo/tag/'
|
|
def get_filtered_qs(self):
|
|
#this method used in parent get_queryset
|
|
slug = self.kwargs.get('slug')
|
|
tag = get_object_or_404(Tag, url=slug)
|
|
qs = self.model.enable.filter(tag=tag)
|
|
self.filter_object = tag
|
|
return qs
|
|
|
|
|
|
class ExpoVisitors(ListView):
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
model = Exposition
|
|
#template_name = 'event_visitors.html'
|
|
|
|
template_name = 'client/exposition/visitors.html'
|
|
|
|
obj = None
|
|
search_form = ExpositionSearchForm
|
|
|
|
def get_queryset(self):
|
|
slug = self.kwargs.get('slug')
|
|
exposition = get_object_or_404(self.model, url=slug)
|
|
self.obj = exposition
|
|
return exposition.users.all()
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpoVisitors, self).get_context_data(**kwargs)
|
|
context['object'] = self.obj
|
|
context['search_form'] = self.search_form
|
|
return context
|
|
|
|
|
|
class ExpoMembers(ListView):
|
|
paginate_by = settings.CLIENT_PAGINATION
|
|
model = Exposition
|
|
#template_name = 'event_visitors.html'
|
|
|
|
template_name = 'client/exposition/members.html'
|
|
|
|
obj = None
|
|
search_form = ExpositionSearchForm
|
|
|
|
def get_queryset(self):
|
|
slug = self.kwargs.get('slug')
|
|
exposition = get_object_or_404(self.model, url=slug)
|
|
self.obj = exposition
|
|
return exposition.company.all()
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super(ExpoMembers, self).get_context_data(**kwargs)
|
|
context['object'] = self.obj
|
|
context['search_form'] = self.search_form
|
|
return context
|
|
|
|
|
|
def add_note(request, slug):
|
|
args = {'success': False}
|
|
|
|
if request.GET:
|
|
text = request.GET['note_text']
|
|
try:
|
|
e = Exposition.objects.get(url=slug)
|
|
except Exposition.DoesNotExist:
|
|
raise Http404
|
|
|
|
ct = ContentType.objects.get_for_model(e)
|
|
object_id = e.id
|
|
user = request.user
|
|
if Note.objects.filter(user__id=user.id, content_type=ct, object_id=object_id).exists():
|
|
Note.objects.filter(user__id=user.id, content_type=ct, object_id=object_id).update(text=text)
|
|
else:
|
|
Note.objects.create(content_type=ct, object_id=object_id, user=user, text=text)
|
|
|
|
user.calendar.expositions.add(e)
|
|
|
|
|
|
args['success'] = True
|
|
args['text'] = text
|
|
|
|
return HttpResponse(json.dumps(args), content_type='application/json') |