from django.conf import settings from django.urls import reverse_lazy from django.contrib.auth import get_user_model from django.contrib import messages from core.models import AdminProfile from core.forms.profiles import AdminEditForm, AdminCreateForm from core.views.generic import BackendFormView, BackendListView, BackendDeleteView from core.helpers.auth import request_password class AdminListView(BackendListView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/index.html" model = AdminProfile def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Administrator Users" return context class AdminEditView(BackendFormView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/update.html" form_class = AdminEditForm success_url = reverse_lazy("admins") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Edit Administrator" return context def get_initial(self): initial = super().get_initial() admin = get_user_model().objects.get(id=self.kwargs["pk"]) assert type(admin.profile) == AdminProfile initial["first_name"] = admin.first_name initial["last_name"] = admin.last_name initial["email"] = admin.username initial["mobile"] = admin.profile.mobile initial["role"] = admin.profile.role initial["display_name"] = admin.profile.display_name return initial def form_valid(self, form): admin = get_user_model().objects.get(id=self.kwargs["pk"]) admin.first_name = form.cleaned_data["first_name"] admin.last_name = form.cleaned_data["last_name"] admin.username = form.cleaned_data["email"] admin.email = form.cleaned_data["email"] admin.profile.mobile = form.cleaned_data["mobile"] admin.profile.role = form.cleaned_data["role"] admin.profile.display_name = form.cleaned_data["display_name"] if form.cleaned_data["image"] or form.cleaned_data["remove_image"]: admin.profile.image = form.cleaned_data["image"] admin.profile.save() admin.save() return super().form_valid(form) class AdminDeleteView(BackendDeleteView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/delete.html" model = get_user_model() success_url = reverse_lazy("admins") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Delete Administrator" return context def get_object(self, queryset=None): admin = super().get_object(queryset=queryset) assert type(admin.profile) == AdminProfile return admin class AdminCreateView(BackendFormView): template_name = f"{settings.EXPEPHALON_BACKEND}/profiles/create.html" form_class = AdminCreateForm success_url = reverse_lazy("admins") def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["title"] = "Create Administrator" return context def form_valid(self, form): admin = get_user_model()() admin.first_name = form.cleaned_data["first_name"] admin.last_name = form.cleaned_data["last_name"] admin.username = form.cleaned_data["email"] admin.email = form.cleaned_data["email"] profile = AdminProfile() profile.user = admin profile.mobile = form.cleaned_data["mobile"] profile.role = form.cleaned_data["role"] profile.display_name = form.cleaned_data["display_name"] profile.image = form.cleaned_data["image"] admin.save() profile.save() request_password(admin) messages.success(self.request, f"User {admin.get_full_name} was successfully created. They should receive an email to set their password shortly.") return super().form_valid(form)