import pytz from django.shortcuts import render, reverse, redirect from django.db.models import Avg, Count, Min, Sum from django.urls import reverse_lazy 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.decorators import login_required from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.models import User from django.contrib.auth.forms import PasswordChangeForm from attendance.models import Period def set_timezone(request): if request.method == 'POST': request.session['django_timezone'] = request.POST['timezone'] return redirect('attendance-overview') else: return render(request, 'accounts/timezone.html', {'timezones': pytz.common_timezones}) class AccountListView(LoginRequiredMixin, ListView): model = User template_name = 'accounts/account_list.html' class AccountCreateView(LoginRequiredMixin, CreateView): model = User fields = ['email', 'password'] template_name = 'accounts/account_form.html' class AccountDetailView(LoginRequiredMixin, DetailView): model = User template_name = 'accounts/account_detail.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) if hasattr(context['object'], 'student'): context['periods'] = Period.objects.filter( student = context['object'].student ).aggregate(total=Sum('duration')) return context class AccountUpdateView(LoginRequiredMixin, UpdateView): model = User # form_class = PasswordChangeForm fields = ['username', 'email'] template_name = 'accounts/account_form.html' 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')