expephalon/core/views/backend/profiles.py
Klaus-Uwe Mitterer 2e8bbdd8a7 A lot of new views
Color picker fields
Renamed pixel.png in order not to upset uBlock...
2020-06-02 17:58:20 +02:00

238 lines
No EOL
8.5 KiB
Python

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, ClientProfile, ClientGroup
from core.forms.profiles import AdminEditForm, AdminCreateForm, ClientForm
from core.views.generic import BackendFormView, BackendListView, BackendDeleteView, BackendUpdateView, BackendCreateView
from core.helpers.auth import request_password
### AdminProfiles
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)
### ClientProfiles
class ClientListView(BackendListView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clients/index.html"
model = ClientProfile
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Clients"
return context
class ClientEditView(BackendFormView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clients/update.html"
form_class = ClientForm
success_url = reverse_lazy("clients")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Edit Client"
return context
def get_initial(self):
initial = super().get_initial()
client = get_user_model().objects.get(id=self.kwargs["pk"])
assert type(client.profile) == ClientProfile
initial["first_name"] = client.first_name
initial["last_name"] = client.last_name
initial["email"] = client.username
initial["mobile"] = client.profile.mobile
return initial
def form_valid(self, form):
client = get_user_model().objects.get(id=self.kwargs["pk"])
client.first_name = form.cleaned_data["first_name"]
client.last_name = form.cleaned_data["last_name"]
client.username = form.cleaned_data["email"]
client.email = form.cleaned_data["email"]
client.profile.mobile = form.cleaned_data["mobile"]
client.profile.save()
client.save()
return super().form_valid(form)
class ClientDeleteView(BackendDeleteView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clients/delete.html"
model = get_user_model()
success_url = reverse_lazy("clients")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Delete Client"
return context
def get_object(self, queryset=None):
admin = super().get_object(queryset=queryset)
assert type(admin.profile) == ClientProfile
return admin
class ClientCreateView(BackendFormView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clients/create.html"
form_class = ClientForm
success_url = reverse_lazy("admins")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Create Client"
return context
def form_valid(self, form):
client = get_user_model()()
client.first_name = form.cleaned_data["first_name"]
client.last_name = form.cleaned_data["last_name"]
client.username = form.cleaned_data["email"]
client.email = form.cleaned_data["email"]
profile = ClientProfile()
profile.user = client
profile.mobile = form.cleaned_data["mobile"]
client.save()
profile.save()
request_password(client)
messages.success(self.request, f"Client {client.get_full_name} was successfully created. They should receive an email to set their password shortly.")
return super().form_valid(form)
### ClientGroups
class ClientGroupListView(BackendListView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clientgroups/index.html"
model = ClientGroup
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Client Group Settings"
return context
class ClientGroupEditView(BackendUpdateView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clientgroups/update.html"
model = ClientGroup
success_url = reverse_lazy("clientgroups")
fields = ["name", "color"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Edit Client Group"
return context
class ClientGroupDeleteView(BackendDeleteView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clientgroups/delete.html"
model = ClientGroup
success_url = reverse_lazy("clientgroups")
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Delete Client Group"
return context
class ClientGroupCreateView(BackendCreateView):
template_name = f"{settings.EXPEPHALON_BACKEND}/clientgroups/create.html"
model = ClientGroup
success_url = reverse_lazy("clientgroups")
fields = ["name", "color"]
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["title"] = "Create Client Group"
return context