feat: add start_page user config

This commit is contained in:
Herculino Trotta
2024-10-21 00:02:57 -03:00
parent 2b5011071f
commit 2b1fdd49e5
7 changed files with 45 additions and 3 deletions

View File

@@ -4,7 +4,6 @@ from . import views
urlpatterns = [
path("monthly/", views.index, name="monthly_index"),
path("", views.index, name="monthly_index"),
path(
"monthly/<int:month>/<int:year>/transactions/list/",
views.transactions_list,

View File

@@ -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"

View File

@@ -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'),
),
]

View File

@@ -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"

View File

@@ -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"),

View File

@@ -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"

View File

@@ -3,7 +3,7 @@
{% load active_link %}
<nav class="navbar navbar-expand-lg border-bottom bg-body-tertiary" hx-boost="true">
<div class="container-fluid">
<a class="navbar-brand fw-bold text-primary font-base" href="{% url 'monthly_index' %}">
<a class="navbar-brand fw-bold text-primary font-base" href="{% url 'index' %}">
<img src="{% static 'img/logo-icon.svg' %}" alt="WYGIWYH Logo" height="40" title="WYGIWYH"/>
</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent"