Source code for ferrosoft.apps.ferrobase.views.settings
# Copyright (c) 2025 Ferrosoft GmbH. All rights reserved.
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from ferrosoft.apps.ferrobase.apps import SettingsMenuRegistry
from ferrosoft.apps.ferrobase.filter import IDSequenceFilter
from ferrosoft.apps.ferrobase.forms import IDSequenceForm
from ferrosoft.apps.ferrobase.models import User, IdSequenceConfig
from ferrosoft.apps.ferrobase.tables.models import IDSequenceTable
from ferrosoft.apps.ferrobase.tenant.forms import UserSettingsForm
from ferrosoft.apps.ferrobase.views import model_crud_routes
from ferrosoft.apps.ferrobase.views.generic import (
CreateView,
TableView,
UpdateView,
TemplateView,
)
[docs]
class MySettings(UpdateView):
"""Self-service "My settings" page for the currently logged-in user."""
model = User
form_class = UserSettingsForm
template_name = "ferrobase/user/settings.html"
activity_title = _("My settings")
[docs]
def get_object(self, *args, **kwargs):
"""Return the authenticated user instead of looking the PK up by URL."""
return self.request.user
[docs]
def get_success_url(self):
"""Stay on the My-settings page after a save."""
return reverse("ferrobase:my_settings")
[docs]
class IDSequenceCreate(CreateView):
"""Create a new ID sequence configuration."""
form_class = IDSequenceForm
model = IdSequenceConfig
[docs]
class IDSequenceRead(TableView):
"""Filterable list of ID sequence configurations."""
filterset_class = IDSequenceFilter
model = IdSequenceConfig
ordering = "name"
table_class = IDSequenceTable
[docs]
class IDSequenceUpdate(UpdateView):
"""Edit an ID sequence; delete is disabled and default related links are hidden."""
delete_view = None
form_class = IDSequenceForm
model = IdSequenceConfig
related_links_default = False
id_sequence_urls = model_crud_routes(
IdSequenceConfig,
create_view=IDSequenceCreate,
read_view=IDSequenceRead,
update_view=IDSequenceUpdate,
)
[docs]
class SettingsIndex(TemplateView):
"""Landing page for the settings area, rendering the registered settings menu."""
template_name = "ferrobase/settings/index.html"
[docs]
def get_context_data(self, **kwargs):
"""Expose the per-user/per-tenant settings menu to the template."""
return super().get_context_data(**kwargs) | {
"settings_menu": SettingsMenuRegistry.get_menu(self.request),
}