# -*- coding: utf-8 -*- from django.shortcuts import render_to_response, get_object_or_404 from django.http import HttpResponseRedirect, HttpResponse, Http404 from django.contrib.auth.decorators import login_required from django.utils.translation import ugettext as _, get_language from django.utils import timezone # forms from forms import ChangePasswordForm, EmailAnnouncementForm from company.forms import CompanyFormClient, CreateCompanyForm from edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\ WebPageForm, SocialForm, AboutForm from models import User # python import json, datetime import calendar as python_calendar from django.views.generic import TemplateView, FormView, ListView class SettingsView(TemplateView): template_name = 'accounts/settings.html' def get_context_data(self, **kwargs): context = super(SettingsView, self).get_context_data(**kwargs) context['change_password_form'] = ChangePasswordForm() context['email_announcement_form'] = EmailAnnouncementForm() return context class CalendarView(TemplateView): template_name = 'accounts/calendar.html' def get_context_data(self, **kwargs): context = super(CalendarView, self).get_context_data(**kwargs) now = timezone.now().replace(microsecond=0, second=0, minute=0, hour=0) context['current_day'] = now year = self.request.GET.get('year') month = self.request.GET.get('month') # cheack if its int if year: year = int(year) if month: month = int(month) if not year or not month: number_of_days = python_calendar.monthrange(now.year, now.month)[1] days = [timezone.make_aware(datetime.datetime(now.year, now.month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)] context['days'] = days # -------------------- calendar = self.request.user.calendar context['events'] = calendar.events_by_month(now) else: number_of_days = python_calendar.monthrange(year, month)[1] days = [timezone.make_aware(datetime.datetime(year, month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)] context['days'] = days calendar = self.request.user.calendar now = now.replace(year=year, month=month, day=1) context['events'] = calendar.events_by_month(now) return context def events_handeler(obj): response = {'name': obj.name, 'country': obj.country.name, 'city': obj.city.name} if obj.place: response['place'] = obj.place.name return response @login_required def get_calendar(request, year, month): now = timezone.now().replace(microsecond=0, second=0, minute=0, hour=0) day = timezone.make_aware(datetime.datetime(year=int(year), month=int(month), day=1), timezone.get_default_timezone()) calendar = request.user.calendar number_of_days = python_calendar.monthrange(day.year, day.month)[1] days = [timezone.make_aware(datetime.datetime(day.year, day.month, i+1), timezone.get_default_timezone()) for i in range(number_of_days)] args = {} dthandler = lambda obj: (obj.isoformat() if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date) else None) args['days'] = json.dumps(days, default=dthandler) args['current_day'] = json.dumps(now, default=dthandler) events = calendar.events_by_month(day) args['events'] = json.dumps(events, default=events_handeler) return HttpResponse(json.dumps(args), content_type='application/json') class ProfileView(TemplateView): template_name = 'accounts/new_profile.html' def get_context_data(self, **kwargs): context = super(ProfileView, self).get_context_data(**kwargs) user = self.request.user profile = user.profile profile_forms = { 'avatar_form': AvatarForm(instance=profile), 'name_form': NameForm(instance=user), 'home_form': HomeForm(instance=profile), 'work_form': WorkForm(instance=user), 'about_company_form': AboutCompanyForm(instance=profile), 'phone_form': PhoneForm(instance=profile), 'email_form': EmailForm(instance=user), 'web_page_form': WebPageForm(instance=profile), 'social_form': SocialForm(instance=profile), 'about_form': AboutForm(instance=profile) } if not user.company: company_form = {'company_form': CreateCompanyForm()} context.update(company_form) context.update(profile_forms) return context from company.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 class ProfileCompanyView(TemplateView): template_name = 'accounts/fill_company.html' def get_context_data(self, **kwargs): context = super(ProfileCompanyView, self).get_context_data(**kwargs) user = self.request.user if not user.company: raise Http404 company = user.company 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), 'tag_form': CompTagForm(instance=company), 'staff_form': CompStaff(instance=company), 'found_form': CompFound(instance=company) } 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 MessagesView(TemplateView): template_name = 'accounts/messages.html' from django_messages.forms import SendForm class UserView(TemplateView): template_name = 'accounts/user.html' def get_context_data(self, **kwargs): context = super(UserView, self).get_context_data(**kwargs) url = self.kwargs.get('url') try: url = int(url) user = get_object_or_404(User, id=url) except ValueError: user = get_object_or_404(User, url=url) context['message_form'] = SendForm() context['member'] = user return context @login_required def change_password(request): """ Change current user password if new password is valid """ success = {'success': False} if request.POST: form = ChangePasswordForm(request.POST) if form.is_valid(): user = request.user if(user.check_password(form.cleaned_data.get('old_password'))): user.set_password(form.cleaned_data.get('new_password')) user.save() success['success'] = True success['message'] = _(u'Пароль изменен') return HttpResponse(json.dumps(success), content_type='application/json') else: errors = {'errors': [_(u'Не правильный пароль')]} success.update(errors) return HttpResponse(json.dumps(success), content_type='application/json') else: errors = [err[0] for err in form.errors.values()] errors = {'errors': errors} success.update(errors) return HttpResponse(json.dumps(success), content_type='application/json') else: return HttpResponse(json.dumps(success), content_type='application/json') def user_for_tag(request): users = [{'id': user.id, 'label': user.get_full_name(), 'value': user.get_full_name() } for user in User.objects.all()] return HttpResponse(json.dumps(users), content_type='application/json') class ProfileInvalidView(FormView): """ abstract view """ def form_invalid(self, form): response = {'success': False} response.update({'errors': form.errors}) return HttpResponse(json.dumps(response), content_type='application/json') class BaseProfileView(ProfileInvalidView): """ abstract view """ def form_valid(self, form): profile = self.request.user.profile form = self.form_class(self.request.POST, instance=profile) form.save() response = {'success': True} return HttpResponse(json.dumps(response), content_type='application/json') class WorkView(ProfileInvalidView): form_class = WorkForm def form_valid(self, form): user = self.request.user form = self.form_class(self.request.POST, instance=user) form.save() response = {'success': True} return HttpResponse(json.dumps(response), content_type='application/json') class AvatarView(BaseProfileView): form_class = AvatarForm def form_valid(self, form): profile = self.request.user.profile form = self.form_class(self.request.POST, self.request.FILES, instance=profile) form.save() response = {'success': True} return HttpResponse(json.dumps(response), content_type='application/json') class HomeView(BaseProfileView): form_class = HomeForm class AboutCompanyView(BaseProfileView): form_class = AboutCompanyForm class PhoneView(BaseProfileView): form_class = PhoneForm class WebPageView(BaseProfileView): form_class = WebPageForm class SocialView(BaseProfileView): form_class = SocialForm class AboutView(BaseProfileView): form_class = AboutForm class EmailView(ProfileInvalidView): form_class = EmailForm def form_valid(self, form): user = self.request.user form = self.form_class(self.request.POST, instance=user) #form.save() response = {'success': False} return HttpResponse(json.dumps(response), content_type='application/json') class NameView(ProfileInvalidView): form_class = NameForm def form_valid(self, form): user = self.request.user form = self.form_class(self.request.POST, instance=user) form.save() response = {'success': True} return HttpResponse(json.dumps(response), content_type='application/json') def test(request): return HttpResponse('test') from exposition.models import Exposition def get_user(url): try: url = int(url) user = get_object_or_404(User, id=url) except ValueError: user = get_object_or_404(User, url=url) return user class UserEventView(ListView): model = Exposition template_name = 'accounts/user_events.html' paginate_by = 2 obj = None event_type = None def get_queryset(self): url = self.kwargs.get('url') user = get_user(url) self.obj = user return user.exposition_users.all() def get_context_data(self, **kwargs): context = super(UserEventView, self).get_context_data(**kwargs) context['u'] = self.obj context['event_type'] = self.event_type return context class UserExpositionsView(UserEventView): event_type = _(u'Выставки') def get_queryset(self): url = self.kwargs.get('url') user = get_user(url) self.obj = user return user.exposition_users.all() class UserConferenceView(UserEventView): event_type = _(u'Конференции') def get_queryset(self): url = self.kwargs.get('url') user = get_user(url) self.obj = user return user.conference_users.all() class UserSeminarView(UserEventView): event_type = _(u'Семинары') def get_queryset(self): url = self.kwargs.get('url') user = get_user(url) self.obj = user return user.seminar_users.all()