mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-04-24 09:38:35 +02:00
refactor: Style transaction items for untracked accounts
This commit extends the "Untrack Account" feature by applying a special style to transaction items that belong to an untracked account. - The transaction item template is modified to apply a "dimmed" style to transactions from untracked accounts. - The styling follows the precedence: Account (untracked) > Category (muted) > Transaction (hidden). - The dropdown menu for transaction items now shows "Controlled by account" if the transaction's account is untracked.
This commit is contained in:
@@ -62,6 +62,11 @@ class Account(SharedObject):
|
||||
verbose_name=_("Archived"),
|
||||
help_text=_("Archived accounts don't show up nor count towards your net worth"),
|
||||
)
|
||||
untracked_by = models.ManyToManyField(
|
||||
settings.AUTH_USER_MODEL,
|
||||
blank=True,
|
||||
related_name="untracked_accounts",
|
||||
)
|
||||
|
||||
objects = SharedObjectManager()
|
||||
all_objects = models.Manager() # Unfiltered manager
|
||||
@@ -75,6 +80,9 @@ class Account(SharedObject):
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
def is_untracked_by(self, user):
|
||||
return self.untracked_by.filter(pk=user.pk).exists()
|
||||
|
||||
def clean(self):
|
||||
super().clean()
|
||||
if self.exchange_currency == self.currency:
|
||||
|
||||
@@ -31,6 +31,11 @@ urlpatterns = [
|
||||
views.account_take_ownership,
|
||||
name="account_take_ownership",
|
||||
),
|
||||
path(
|
||||
"account/<int:pk>/toggle-untracked/",
|
||||
views.account_toggle_untracked,
|
||||
name="account_toggle_untracked",
|
||||
),
|
||||
path("account-groups/", views.account_groups_index, name="account_groups_index"),
|
||||
path("account-groups/list/", views.account_groups_list, name="account_groups_list"),
|
||||
path("account-groups/add/", views.account_group_add, name="account_group_add"),
|
||||
|
||||
@@ -155,6 +155,26 @@ def account_delete(request, pk):
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["POST"])
|
||||
def account_toggle_untracked(request, pk):
|
||||
account = get_object_or_404(Account, id=pk)
|
||||
if account.is_untracked_by(request.user):
|
||||
account.untracked_by.remove(request.user)
|
||||
messages.success(request, _("Account is now tracked."))
|
||||
else:
|
||||
account.untracked_by.add(request.user)
|
||||
messages.success(request, _("Account is now untracked."))
|
||||
|
||||
return HttpResponse(
|
||||
status=204,
|
||||
headers={
|
||||
"HX-Trigger": "updated",
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
|
||||
@@ -95,4 +95,6 @@ def get_transactions(request, include_unpaid=True, include_silent=False):
|
||||
Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True)
|
||||
)
|
||||
|
||||
transactions = transactions.exclude(account__in=request.user.untracked_accounts.all())
|
||||
|
||||
return transactions
|
||||
|
||||
@@ -107,9 +107,15 @@ def transactions_list(request, month: int, year: int):
|
||||
@require_http_methods(["GET"])
|
||||
def monthly_summary(request, month: int, year: int):
|
||||
# Base queryset with all required filters
|
||||
base_queryset = Transaction.objects.filter(
|
||||
reference_date__year=year, reference_date__month=month, account__is_asset=False
|
||||
).exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
base_queryset = (
|
||||
Transaction.objects.filter(
|
||||
reference_date__year=year,
|
||||
reference_date__month=month,
|
||||
account__is_asset=False,
|
||||
)
|
||||
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
|
||||
data = calculate_currency_totals(base_queryset, ignore_empty=True)
|
||||
percentages = calculate_percentage_distribution(data)
|
||||
|
||||
@@ -27,10 +27,12 @@ def net_worth(request):
|
||||
view_type = request.session.get("networth_view_type", "current")
|
||||
|
||||
if view_type == "current":
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
transactions_currency_queryset = (
|
||||
Transaction.objects.filter(is_paid=True, account__is_archived=False)
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
transactions_account_queryset = Transaction.objects.filter(
|
||||
is_paid=True, account__is_archived=False
|
||||
@@ -39,10 +41,12 @@ def net_worth(request):
|
||||
"account__name",
|
||||
)
|
||||
else:
|
||||
transactions_currency_queryset = Transaction.objects.filter(
|
||||
account__is_archived=False
|
||||
).order_by(
|
||||
"account__currency__name",
|
||||
transactions_currency_queryset = (
|
||||
Transaction.objects.filter(account__is_archived=False)
|
||||
.order_by(
|
||||
"account__currency__name",
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
)
|
||||
transactions_account_queryset = Transaction.objects.filter(
|
||||
account__is_archived=False
|
||||
|
||||
@@ -95,6 +95,7 @@ def yearly_overview_by_currency(request, year: int):
|
||||
transactions = (
|
||||
Transaction.objects.filter(**filter_params)
|
||||
.exclude(Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True))
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.order_by("account__currency__name")
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user