import pytz from django.utils import timezone from datetime import date, timedelta from django.shortcuts import render, reverse, redirect from django.urls import reverse_lazy from django.views.generic.base import TemplateView from django.views.generic.edit import FormView, CreateView, UpdateView, DeleteView from django.views.generic.detail import DetailView from django.views.generic.list import ListView from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from .models import Profile from .forms import AccountUpdateForm, ProfileUpdateForm from board.models import LogEntry, Event class ProfileView(LoginRequiredMixin, TemplateView): template_name = 'accounts/profile.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) today = date.today() tomorrow = today + timedelta(days=1) enddate = today + timedelta(days=6) context['profile'] = self.request.user.profile context['latest_activity'] = LogEntry.objects.all()[:10] context['today'] = Event.objects.filter( date=today ) context['upcoming_events'] = Event.objects.filter( date__range=[tomorrow, enddate] ) return context class ProfileUpdateView(LoginRequiredMixin, UpdateView): model = Profile form_class = ProfileUpdateForm def get_success_url(self): return reverse('account-update', kwargs={'pk': self.request.user.pk}) class AccountDetailView(LoginRequiredMixin, DetailView): model = User template_name = 'accounts/account_detail.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) return context class AccountUpdateView(LoginRequiredMixin, UpdateView): model = User form_class = AccountUpdateForm template_name = 'accounts/account_form.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['profile_form'] = ProfileUpdateForm(instance=self.object.profile) context['timezones'] = pytz.common_timezones return context def get_success_url(self): pk = self.kwargs["pk"] return reverse('account-detail', kwargs={'pk': pk}) class AccountDeleteView(LoginRequiredMixin, DeleteView): model = User success_url = reverse_lazy('account-list')