# -*- 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')