Merge pull request #470 from eitchtee/dev

feat(transactions:filter): add filter for muted and unmuted transactions
This commit is contained in:
Herculino Trotta
2025-12-28 13:10:39 -03:00
committed by GitHub

View File

@@ -23,6 +23,11 @@ SITUACAO_CHOICES = (
("0", _("Projected")), ("0", _("Projected")),
) )
MUTE_STATUS_CHOICES = (
("active", _("Active")),
("muted", _("Muted")),
)
def content_filter(queryset, name, value): def content_filter(queryset, name, value):
queryset = queryset.filter( queryset = queryset.filter(
@@ -78,6 +83,11 @@ class TransactionsFilter(django_filters.FilterSet):
choices=SITUACAO_CHOICES, choices=SITUACAO_CHOICES,
field_name="is_paid", field_name="is_paid",
) )
mute_status = django_filters.MultipleChoiceFilter(
choices=MUTE_STATUS_CHOICES,
method="filter_mute_status",
label=_("Mute Status"),
)
date_start = django_filters.DateFilter( date_start = django_filters.DateFilter(
field_name="date", field_name="date",
lookup_expr="gte", lookup_expr="gte",
@@ -140,6 +150,9 @@ class TransactionsFilter(django_filters.FilterSet):
if data.get("is_paid") is None: if data.get("is_paid") is None:
data.setlist("is_paid", ["1", "0"]) data.setlist("is_paid", ["1", "0"])
if data.get("mute_status") is None:
data.setlist("mute_status", ["active", "muted"])
super().__init__(data, *args, **kwargs) super().__init__(data, *args, **kwargs)
self.form.helper = FormHelper() self.form.helper = FormHelper()
@@ -155,6 +168,10 @@ class TransactionsFilter(django_filters.FilterSet):
"is_paid", "is_paid",
template="transactions/widgets/transaction_type_filter_buttons.html", template="transactions/widgets/transaction_type_filter_buttons.html",
), ),
Field(
"mute_status",
template="transactions/widgets/transaction_type_filter_buttons.html",
),
Field("description"), Field("description"),
Row(Column("date_start"), Column("date_end")), Row(Column("date_start"), Column("date_end")),
Row( Row(
@@ -268,3 +285,36 @@ class TransactionsFilter(django_filters.FilterSet):
return queryset.filter(q).distinct() return queryset.filter(q).distinct()
return queryset return queryset
@staticmethod
def filter_mute_status(queryset, name, value):
from apps.common.middleware.thread_local import get_current_user
if not value:
return queryset
value = list(value)
# If both are selected, return all
if "active" in value and "muted" in value:
return queryset
user = get_current_user()
# Only Active selected: exclude muted transactions
if "active" in value:
return (
queryset.exclude(account__untracked_by=user)
.filter(
mute=False,
)
.filter(Q(category__mute=False) | Q(category__isnull=True))
)
# Only Muted selected: include only muted transactions
if "muted" in value:
return queryset.filter(
Q(account__untracked_by=user) | Q(category__mute=True) | Q(mute=True)
)
return queryset