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), }