# -*- coding: utf-8 -*- import json from itertools import chain from django.views.generic import ListView, FormView, TemplateView from django.shortcuts import get_object_or_404 from django.http import HttpResponseRedirect, HttpResponse from meta.views import MetadataMixin from exposition.models import Exposition from conference.models import Conference from models import Service from order_forms import TranslationForm, CatalogForm, VisitForm, RemoteForm, ParticipationForm, TicketsForm,\ AdvertiseForm, BuildStandForm from service.models import CallBack, Visit, Translation, Advertising, Participation, Remote, Tickets order_forms = {'translator': TranslationForm, 'catalog': CatalogForm, 'participation': ParticipationForm, 'remote': RemoteForm, 'tickets': TicketsForm, 'visit': VisitForm, 'buildstand': BuildStandForm} meta = { 'translator': 80, 'participation': 85, 'remote': 84, 'tickets': 81, 'visit': 82 } def get_userlog_data(request): userlog = None data = {} if request.user.is_authenticated(): userlog = request.user.get_user_log() attrs = [ 'referer1', 'referer2', 'utm_source1', 'utm_medium1', 'utm_campaign1', 'utm_source2', 'utm_medium2', 'utm_campaign2', ] search_attrs = ['search1', 'search2', 'search3',] if userlog is not None: for attr in chain(attrs, search_attrs): data[attr] = getattr(userlog, attr) else: for attr in attrs: data[attr] = request.session.get(attr) for i, s in enumerate(request.session.get('search', []), start=1): data['search' + str(i)] = s return data class ServiceView(MetadataMixin, FormView): success_url = '/service/thanks/' def dispatch(self, request, *args, **kwargs): service_url = self.kwargs.get('url') service = get_object_or_404(Service, url=service_url) self.service = service self.template_name = service.template service_form = order_forms.get(service_url) self.form_class = service_form return super(ServiceView, self).dispatch(request, *args, **kwargs) def post(self, request, *args, **kwargs): url = self.kwargs.get('url') #service_form = order_forms.get(url) #self.form_class = service_form form = self.form_class(request.POST) if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form) def form_valid(self, form): userlog = get_userlog_data(self.request) order = form.save(commit=False, userlog=userlog) order.save() return HttpResponseRedirect(self.success_url) def get_context_data(self, **kwargs): url = self.kwargs.get('url') meta_id = meta.get(url) kwargs.update({'meta_id': meta_id}) return super(ServiceView, self).get_context_data(**kwargs) def advertise(request, catalog=None, event_url=None): if request.POST: response = {'success': False} form = AdvertiseForm(request.POST) if form.is_valid(): userlog = get_userlog_data(request) if not catalog or not event_url: form.save(userlog=userlog) else: order = form.save(commit=False, userlog=userlog) if catalog == 'expo': try: expo = Exposition.objects.get(url=event_url) except Exposition.DoesNotExist: expo = None order.exposition = expo elif catalog == 'conference': try: conf = Conference.objects.get(url=event_url) except Conference.DoesNotExist: conf = None order.conference= conf order.save() response['success'] = True else: response['errors'] = form.errors return HttpResponse(json.dumps(response), content_type='application/json') else: raise HttpResponse('not ajax') class AbstractOrderListView(ListView): template_name = 'c_admin/service/order_list.html' paginate_by = 20 class CallBackListView(AbstractOrderListView): model = CallBack class VisitListView(AbstractOrderListView): model = Visit class TranslationListView(AbstractOrderListView): model = Translation class AdvertisingListView(AbstractOrderListView): model = Advertising class ParticipationListView(AbstractOrderListView): model = Participation class RemoteListView(AbstractOrderListView): model = Remote class TicketsListView(AbstractOrderListView): model = Tickets class Thanks(TemplateView): template_name = 'client/service/thank_u_page.html'