diff --git a/app/apps/monthly_overview/urls.py b/app/apps/monthly_overview/urls.py index 41e21a0..0f9e476 100644 --- a/app/apps/monthly_overview/urls.py +++ b/app/apps/monthly_overview/urls.py @@ -4,7 +4,6 @@ from . import views urlpatterns = [ path("monthly/", views.index, name="monthly_index"), - path("", views.index, name="monthly_index"), path( "monthly///transactions/list/", views.transactions_list, diff --git a/app/apps/users/forms.py b/app/apps/users/forms.py index 8f21bbd..ebf4a06 100644 --- a/app/apps/users/forms.py +++ b/app/apps/users/forms.py @@ -48,7 +48,7 @@ class LoginForm(AuthenticationForm): class UserSettingsForm(forms.ModelForm): class Meta: model = UserSettings - fields = ["language", "timezone"] + fields = ["language", "timezone", "start_page"] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -59,6 +59,7 @@ class UserSettingsForm(forms.ModelForm): self.helper.layout = Layout( "language", "timezone", + "start_page", FormActions( NoClassSubmit( "submit", _("Save"), css_class="btn btn-outline-primary w-100" diff --git a/app/apps/users/migrations/0008_usersettings_start_page.py b/app/apps/users/migrations/0008_usersettings_start_page.py new file mode 100644 index 0000000..d9f7778 --- /dev/null +++ b/app/apps/users/migrations/0008_usersettings_start_page.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.2 on 2024-10-21 01:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0007_usersettings_mute_sounds'), + ] + + operations = [ + migrations.AddField( + model_name='usersettings', + name='start_page', + field=models.CharField(choices=[('MONTHLY_OVERVIEW', 'Overview > Monthly'), ('YEARLY_OVERVIEW', 'Overview > Yearly')], default='MONTHLY_OVERVIEW', max_length=255, verbose_name='Start page'), + ), + ] diff --git a/app/apps/users/models.py b/app/apps/users/models.py index 45c8ce6..7a0a6c0 100644 --- a/app/apps/users/models.py +++ b/app/apps/users/models.py @@ -22,6 +22,11 @@ class User(AbstractUser): class UserSettings(models.Model): + class StartPage(models.TextChoices): + MONTHLY = "MONTHLY_OVERVIEW", _("Monthly Overview") + YEARLY = "YEARLY_OVERVIEW", _("Yearly Overview") + NETWORTH = "NETWORTH", _("Net Worth") + user = models.OneToOneField( get_user_model(), on_delete=models.CASCADE, related_name="settings" ) @@ -40,6 +45,12 @@ class UserSettings(models.Model): default="auto", verbose_name=_("Time Zone"), ) + start_page = models.CharField( + max_length=255, + choices=StartPage, + default=StartPage.MONTHLY, + verbose_name=_("Start page"), + ) def __str__(self): return f"{self.user.email}'s settings" diff --git a/app/apps/users/urls.py b/app/apps/users/urls.py index 665ceb3..8135485 100644 --- a/app/apps/users/urls.py +++ b/app/apps/users/urls.py @@ -3,6 +3,7 @@ from django.urls import path from . import views urlpatterns = [ + path("", views.index, name="index"), path("login/", views.UserLoginView.as_view(), name="login"), # path("login/fallback/", views.UserLoginView.as_view(), name="fallback_login"), path("logout/", views.logout_view, name="logout"), diff --git a/app/apps/users/views.py b/app/apps/users/views.py index 3fd3548..8a5bcd3 100644 --- a/app/apps/users/views.py +++ b/app/apps/users/views.py @@ -22,6 +22,18 @@ def logout_view(request): return redirect(reverse("login")) +@login_required +def index(request): + if request.user.settings.start_page == UserSettings.StartPage.MONTHLY: + return redirect(reverse("monthly_index")) + elif request.user.settings.start_page == UserSettings.StartPage.YEARLY: + return redirect(reverse("yearly_index")) + elif request.user.settings.start_page == UserSettings.StartPage.NETWORTH: + return redirect(reverse("net_worth")) + else: + return redirect(reverse("monthly_index")) + + class UserLoginView(LoginView): form_class = LoginForm template_name = "users/login.html" diff --git a/app/templates/includes/navbar.html b/app/templates/includes/navbar.html index a90b1a8..8cee77d 100644 --- a/app/templates/includes/navbar.html +++ b/app/templates/includes/navbar.html @@ -3,7 +3,7 @@ {% load active_link %}