55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
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')
|