# -*- coding: utf-8 -*- import json from django.core.urlresolvers import reverse from django.http import HttpResponse from django.conf import settings from django.views.generic import DetailView from functions.custom_views import ListView, BlockedFilterMixin from django.shortcuts import get_object_or_404 from django.utils.translation import ugettext as _, get_language from models import Company from theme.models import Theme, Tag from forms import CreateCompanyForm 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 from meta.views import MetadataMixin class MemberList(MetadataMixin, BlockedFilterMixin, ListView): model = Company paginate_by = settings.CLIENT_PAGINATION template_name = 'client/company/companies_list.html' catalog_url = '/members/' def get_queryset(self): qs = super(MemberList, self).get_queryset() return qs.order_by('-rating') class MemberThemeList(MetadataMixin, BlockedFilterMixin, ListView): model = Company paginate_by = settings.CLIENT_PAGINATION template_name = 'client/company/companies_list.html' 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) self.kwargs['theme'] = theme qs = qs.filter(theme=theme) return qs class MemberTagList(MetadataMixin, BlockedFilterMixin, ListView): model = Company paginate_by = settings.CLIENT_PAGINATION template_name = 'client/company/companies_list.html' 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) self.kwargs['tag'] = tag qs = qs.filter(tag=tag) return qs class MemberDetail(MetadataMixin, 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 def create_company(request): response = {'success': False} form = CreateCompanyForm(request.POST) if form.is_valid(): company = form.save(request.user) response['success'] = True response['redirect_url'] = reverse('company-detail', args=[company.url]) 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')