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.
 
 
 
 
 
 

366 lines
13 KiB

# -*- 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
from sorl.thumbnail import get_thumbnail
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
if not self.request.FILES:
response = {'success': False, 'message':'files is empty'}
return HttpResponse(json.dumps(response), content_type='application/json')
form = self.form_class(self.request.POST, self.request.FILES, instance=profile)
form.save()
if self.request.is_ajax():
im = get_thumbnail(profile.avatar, '100x100', crop='center')
response = {'success': True, 'url': im.url}
#response = {'success': True}
return HttpResponse(json.dumps(response), content_type='application/json')
else:
return HttpResponseRedirect('/profile/')
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()