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.
 
 
 
 
 
 

491 lines
17 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, render_to_response
from django.http import Http404
from django.utils import translation
#models
from accounts.models import User
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.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 = 'client/exposition/search.html'
search_form = ExpositionSearchForm
model = Exposition
"""
def search_test(request):
if request.GET:
form = ExpositionSearchForm(request.GET)
if form.is_valid():
form.data_with_parents = form.get_form_data()
object_list = form.search()
context = {}
context['object_list'] = object_list
context['search_form'] = form
return render_to_response('client/exposition/search.html', context)
"""
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')
#------------------------------------------------------------------------------
from service.order_forms import AdvertiseForm
class ExpoDetail(DetailView):
model = Exposition
slug_field = 'url'
template_name = 'client/exposition/exposition_detail.html'
def get_context_data(self, **kwargs):
context = super(ExpoDetail, self).get_context_data(**kwargs)
context['advertising_form'] = AdvertiseForm()
return context
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
country = None
city = 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
if self.country:
self.year = {'text': year, 'link': '%s%s/country/%s/%s/'%
(self.catalog_url, self.filter_object.url, self.country.url, year)
}
elif self.city:
self.year = {'text': year, 'link': '%s%s/city/%s/%s/'%
(self.catalog_url, self.filter_object.url, self.city.url, year)
}
else:
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'])
if self.country:
self.month = {'text': monthes[month]['name'], 'link': '%s%s/country/%s/%s/%s/'%
(self.catalog_url, self.filter_object.url, self.country.url, year, month)}
elif self.city:
self.month = {'text': monthes[month]['name'], 'link': '%s%s/city/%s/%s/%s/'%
(self.catalog_url, self.filter_object.url, self.city.url, year, month)}
else:
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):
template_name = 'exposition/catalog_theme.html'
catalog_url = '/expo/theme/'
country = None
city = None
def get_filtered_qs(self):
#this method used in parent get_queryset
slug = self.kwargs.get('slug')
country_slug = self.kwargs.get('country_slug')
city_slug = self.kwargs.get('city_slug')
theme = get_object_or_404(Theme, url=slug)
qs = self.model.enable.filter(theme=theme)
if country_slug:
country = get_object_or_404(Country, url=country_slug)
self.country = country
qs = qs.filter(country=country)
if city_slug:
city = get_object_or_404(City, url=city_slug)
self.city = city
qs = qs.filter(city=city)
self.filter_object = theme
return qs
def get_context_data(self, **kwargs):
context = super(ExpoThemeCatalog, self).get_context_data(**kwargs)
if self.country:
context['country'] = self.country
if self.city:
context['city'] = self.city
return context
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.user.is_authenticated():
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 = User.objects.get(id=request.user.id)
if Note.objects.filter(user=user, content_type=ct, object_id=object_id).exists():
Note.objects.filter(user=user, 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
else:
args['not_authorized'] = True
args['success'] = True
return HttpResponse(json.dumps(args), content_type='application/json')