# -*- coding: utf-8 -*- import json from itertools import chain from django.http import HttpResponse from django.views.generic import ListView, FormView, TemplateView from django.shortcuts import get_object_or_404 from django.http import Http404 from django.http import HttpResponseRedirect, HttpResponse from haystack.query import EmptySearchQuerySet from meta.views import MetadataMixin from accounts.models import UserLog from exposition.models import Exposition from conference.models import Conference from functions.custom_views import ExpoListView from models import Service from order_forms import TranslationForm, CatalogForm, VisitForm, RemoteForm, ParticipationForm, TicketsForm,\ AdvertiseForm, BuildStandForm #from functions.search_forms import CompanySearchForm 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(): try: userlog = UserLog.objects.get(pk=request.user.pk) except: pass 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') from service.models import CallBack, Visit, Translation, Advertising, Participation, Remote, Tickets 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'