devicehub-django/admin/views.py

142 lines
3.9 KiB
Python
Raw Normal View History

2024-10-14 15:02:40 +00:00
from smtplib import SMTPException
2024-10-07 14:56:24 +00:00
from django.urls import reverse_lazy
from django.shortcuts import get_object_or_404
2024-10-03 15:46:02 +00:00
from django.utils.translation import gettext_lazy as _
from django.views.generic.base import TemplateView
2024-10-07 14:56:24 +00:00
from django.views.generic.edit import (
CreateView,
UpdateView,
DeleteView,
)
2024-10-11 15:15:37 +00:00
from dashboard.mixins import DashboardView, Http403
2024-10-11 15:04:33 +00:00
from user.models import User, Institution
2024-10-14 15:02:40 +00:00
from admin.email import NotifyActivateUserByEmail
2024-12-01 05:58:22 +00:00
from action.models import State, StateDefinition
2024-10-03 15:46:02 +00:00
2024-10-11 15:15:37 +00:00
class AdminView(DashboardView):
def get(self, *args, **kwargs):
response = super().get(*args, **kwargs)
if not self.request.user.is_admin:
raise Http403
return response
class PanelView(AdminView, TemplateView):
2024-10-03 15:46:02 +00:00
template_name = "admin_panel.html"
title = _("Admin")
breadcrumb = _("admin") + " /"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
return context
2024-10-11 15:15:37 +00:00
class UsersView(AdminView, TemplateView):
2024-10-03 15:46:02 +00:00
template_name = "admin_users.html"
title = _("Users")
breadcrumb = _("admin / Users") + " /"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
"users": User.objects.filter()
})
return context
2024-10-07 14:56:24 +00:00
2024-10-14 15:02:40 +00:00
class CreateUserView(AdminView, NotifyActivateUserByEmail, CreateView):
2024-10-07 14:56:24 +00:00
template_name = "user.html"
title = _("User")
breadcrumb = _("admin / User") + " /"
success_url = reverse_lazy('admin:users')
model = User
fields = (
"email",
"password",
"is_admin",
)
def form_valid(self, form):
form.instance.institution = self.request.user.institution
form.instance.set_password(form.instance.password)
response = super().form_valid(form)
2024-10-14 15:02:40 +00:00
try:
self.send_email(form.instance)
except SMTPException as e:
messages.error(self.request, e)
2024-10-07 14:56:24 +00:00
return response
2024-10-11 15:15:37 +00:00
class DeleteUserView(AdminView, DeleteView):
2024-10-07 14:56:24 +00:00
template_name = "delete_user.html"
title = _("Delete user")
breadcrumb = "admin / Delete user"
success_url = reverse_lazy('admin:users')
model = User
fields = (
"email",
"password",
"is_admin",
)
def form_valid(self, form):
response = super().form_valid(form)
return response
2024-10-11 15:15:37 +00:00
class EditUserView(AdminView, UpdateView):
2024-10-07 14:56:24 +00:00
template_name = "user.html"
title = _("Edit user")
breadcrumb = "admin / Edit user"
success_url = reverse_lazy('admin:users')
model = User
fields = (
"email",
"is_admin",
)
def get_form_kwargs(self):
pk = self.kwargs.get('pk')
self.object = get_object_or_404(self.model, pk=pk)
#self.object.set_password(self.object.password)
kwargs = super().get_form_kwargs()
return kwargs
2024-10-11 15:04:33 +00:00
2024-10-11 15:15:37 +00:00
class InstitutionView(AdminView, UpdateView):
2024-10-11 15:04:33 +00:00
template_name = "institution.html"
title = _("Edit institution")
section = "admin"
subtitle = _('Edit institution')
model = Institution
success_url = reverse_lazy('admin:panel')
fields = (
"name",
"logo",
"location",
"responsable_person",
"supervisor_person"
)
def get_form_kwargs(self):
self.object = self.request.user.institution
kwargs = super().get_form_kwargs()
return kwargs
2024-12-01 05:58:22 +00:00
class StatesPanelView(AdminView, TemplateView):
template_name = "states_panel.html"
title = _("States")
breadcrumb = _("admin / States") + " /"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
"states": State.objects.filter(institution=self.request.user.institution),
"state_definitions" : StateDefinition.objects.filter(institution=self.request.user.institution).order_by('order')
})
return context