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.
 
 
 
 
 
 

183 lines
6.7 KiB

# -*- coding: utf-8 -*-
import json
from django.http import HttpResponse
from django.conf import settings
from django.views.generic import ListView, DetailView
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext as _, get_language
from haystack.query import EmptySearchQuerySet
from models import Company
from theme.models import Theme, Tag
from forms import CreateCompanyForm
from functions.custom_views import ExpoListView
from functions.search_forms import CompanySearchForm
from .edit_forms import NameForm as CompNameForm, HomeForm as CompHomeForm, PhoneForm as CompPhoneForm,\
EmailForm as CompEmailForm, WebPageForm as CompWebPageForm, SocialForm as CompSocialForm,\
TagForm as CompTagForm, DescriptionForm as CompDescr, StaffForm as CompStaff, \
FoundationForm as CompFound, SpecializationForm as CompSpec, AddressForm as CompAddress,\
LogoForm as CompLogo, ThemeForm as CompThemeForm
class CompanySearchView(ListView):
paginate_by = 10
template_name = 'company/search.html'
search_form = CompanySearchForm
model = Company
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(CompanySearchView, self).get_context_data(**kwargs)
context['search_form'] = CompanySearchForm(self.request.GET)
queries = self.request.GET.copy()
if queries.has_key('page'):
del queries['page']
context['queries'] = queries
context['search_action'] = '/members/search/'
context['type'] = 'members search'
return context
class MemberList(ListView):
model = Company
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/'
def get_queryset(self):
return self.model.objects.order_by('-rating')
class MemberThemeList(ListView):
model = Company
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/'
def get_queryset(self):
qs = super(MemberThemeList, self).get_queryset()
slug = self.kwargs.get('slug')
theme = get_object_or_404(Theme, url=slug)
qs = qs.filter(theme=theme)
return qs
class MemberTagList(ListView):
model = Company
paginate_by = settings.CLIENT_PAGINATION
template_name = 'client/company/companies_list.html'
search_form = CompanySearchForm
catalog_url = '/members/'
def get_queryset(self):
qs = super(MemberTagList, self).get_queryset()
slug = self.kwargs.get('slug')
tag = get_object_or_404(Tag, url=slug)
qs = qs.filter(tag=tag)
return qs
class MemberDetail(DetailView):
model = Company
slug_field = 'url'
template_name = 'client/company/company_detail.html'
def get_context_data(self, **kwargs):
context = super(MemberDetail, self).get_context_data(**kwargs)
company = context['object']
if self.request.user == company.creator:
forms = {
'home_form': CompHomeForm(instance=company), 'phone_form': CompPhoneForm(instance=company),
'email_form': CompEmailForm(instance=company), 'web_page_form': CompWebPageForm(instance=company),
'social_form': CompSocialForm(instance=company),
'staff_form': CompStaff(instance=company), 'found_form': CompFound(instance=company),
'logo_form': CompLogo(instance=company)
}
tags = [{'id': str(tag.id), 'text': tag.name, 'url': '/members/tag/%s/'%tag.url} for tag in company.tag.all()]
tag_form = CompTagForm()
tag_form.fields['tag'].widget.attrs['data-predifined'] = json.dumps(tags)
tag_form.fields['tag'].widget.attrs['value'] = ''
#themes = [{'id': str(item.id), 'text': item.name } for item in company.theme.all()]
theme_form = CompThemeForm(instance=company)
#theme_form.fields['theme'].widget.attrs['data-predifined'] = json.dumps(themes)
#theme_form.fields['tag'].widget.attrs['value'] = ''
forms.update({'tag_form': tag_form, 'theme_form': theme_form})
lang = get_language()
comp_transl = company.translations.get(language_code=lang)
transl_forms = {
'name_form': CompNameForm(instance=comp_transl), 'spec_form': CompSpec(instance=comp_transl),
'description_form': CompDescr(instance=comp_transl), 'address_form': CompAddress(instance=comp_transl)
}
context.update(forms)
context.update(transl_forms)
return context
class CompanyView(ExpoListView):
paginate_by = 10
model = Company
template_name = 'company_catalog.html'
search_form = CompanySearchForm
def get_context_data(self, **kwargs):
context = super(CompanyView, self).get_context_data(**kwargs)
context['type'] = 'members search'
return context
class CompanyExposition(CompanyView):
template_name = 'test_list.html'
def get_queryset(self):
params = self.get_params()
for param in params:
if param.get('type') == 'event':
company = Company.objects.safe_get(url=param.get('url'))
#query = exp.users
self.params = params
return company.exposition_companies.all()
def create_company(request):
response = {'success': False}
form = CreateCompanyForm(request.POST)
if form.is_valid():
form.save(request.user)
response['success'] = True
return HttpResponse(json.dumps(response), content_type='application/json')
else:
response['errors'] = form.errors
return HttpResponse(json.dumps(response), content_type='application/json')
def get_company(request):
if request.is_ajax():
term = request.GET['term']
qs = Company.objects.language().filter(translations__name__contains=term).distinct()
result = [{'id': company.id, 'label': company.name, 'logo': company.logo.url if company.logo else settings.NO_LOGO } for company in qs]
return HttpResponse(json.dumps(result), content_type='application/json')
else:
return HttpResponse('not ajax')